In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Difference between revisions of "Cafe OS syscalls"

From WiiUBrew
Jump to navigation Jump to search
(Added a few more function names found in various RPLs as function names.)
(Redirected page to Cafe OS)
Tag: New redirect
 
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Cafe OS syscalls are issued by doing the following:
+
#REDIRECT [[Cafe OS]]
li r0, 0x0100 # load syscall value->r0
 
sc            # syscall instruction
 
blr          # return control to program
 
 
 
When you send a call to the kernel, it goes to FFF00C00, which then jumps to FFF021A0 + (fastcall << 5).
 
 
 
Normal syscalls are divisible by 0x100, so all of them will jump to FFF0021A0 itself, which is a jump to the table dispatcher.
 
 
 
The dispatcher uses the RAMPID and syscall it was sent to load an address from its table which it then jumps to (which, if zero, just crashes as it's invalid).
 
 
 
Below is all RAMPIDs' access to syscalls. The loader mostly has its own special variations of syscalls.
 
 
 
RAMPID 1, system (home menu, browser, and error handler), and apps/games usually all have access to the same syscalls.
 
 
 
{| class="wikitable sortable"
 
|-
 
! scope="col" | #
 
! scope="col" | Name
 
! scope="col" style="width: 24px;" | ID 1
 
! scope="col" style="width: 24px;" | Sys
 
! scope="col" style="width: 24px;" | App
 
! scope="col" style="width: 24px;" | Ldr
 
|-
 
| 0x0000 || ConsoleWrite || Y || Y || Y || Y (sp)
 
|-
 
| 0x0006 || LoadContext || ? || ? || ? || ?
 
|-
 
| 0x0008 || SetContext || ? || ? || ? || ?
 
|-
 
| 0x0009 || GetCurrentFPUContext || ? || ? || ? || ?
 
|-
 
| 0x000A || SetCurrentFPUContext || ? || ? || ? || ?
 
|-
 
| 0x000C || WriteGatherInit || ? || ? || ? || ?
 
|-
 
| 0x000D || SetPerformanceMonitor || ? || ? || ? || ?
 
|-
 
| 0x0011 || ReadRegister32Ex || ? || ? || ? || ?
 
|-
 
| 0x0012 || WriteRegister32Ex || ? || ? || ? || ?
 
|-
 
| 0x0017 || WriteGatherGetPtr || ? || ? || ? || ?
 
|-
 
| 0x0019 || GetSecurityLevel (always zero) || ? || ? || ? || ?
 
|-
 
| 0x0100 || AppPanic || Y || Y || Y || Y
 
|-
 
| 0x0200 || EffectiveToPhysical || Y || Y || Y || N
 
|-
 
| 0x0300 || PhysicalToEffectiveCached || Y || Y || Y || N
 
|-
 
| 0x0400 || PhysicalToEffectiveUncached || Y || Y || Y || N
 
|-
 
| 0x0500 || ValidateAddrRange || Y || Y || Y || Y
 
|-
 
| 0x0600 || UpdateCoreTime || Y || Y || Y || N
 
|-
 
| 0x0800 || SetUserModeExHandler || Y || Y || Y || N
 
|-
 
| 0x0B00 || AllocateTimer || Y || Y || Y || N
 
|-
 
| 0x0C00 || FreeTimer || Y || Y || Y || N
 
|-
 
| 0x0D00 || PrimeTimer || Y || Y || Y || N
 
|-
 
| 0x0E00 || StopTimer || Y || Y || Y || N
 
|-
 
| 0x0F00 || LogLoadedRPLs || Y || Y || Y || N
 
|-
 
| 0x1000 || SetInterruptHandler || Y || Y || Y || N
 
|-
 
| 0x1100 || GetInterruptHandler || Y || Y || Y || N
 
|-
 
| 0x1200 || DisableInterrupt || Y || Y || Y || N
 
|-
 
| 0x1300 || EnableInterrupt || Y || Y || Y || N
 
|-
 
| 0x1400 || ClearAndEnableInterrupt || Y || Y || Y || N
 
|-
 
| 0x1500 || GetInterruptStatus || Y || Y || Y || N
 
|-
 
| 0x1600 || ClearInterruptStatus || Y || Y || Y || N
 
|-
 
| 0x1700 || FindClosestSymbol || Y || Y || Y || Y (sp)
 
|-
 
| 0x1900 || Exit/Halt || Y || Y || Y || N
 
|-
 
| 0x1A00 || GetInfo || Y || Y || Y || N
 
|-
 
| 0x1B00 || SetInfo || Y || Y || Y || N
 
|-
 
| 0x1C00 || OSThreadInit || Y || Y || Y || N
 
|-
 
| 0x1D00 || SendICI || Y || Y || Y || N
 
|-
 
| 0x1E00 || IPCKDriver_<nowiki>{Loader|User}</nowiki>Open || Y || Y || Y || Y (sp)
 
|-
 
| 0x1F00 || IPCKDriver_<nowiki>{Loader|User}</nowiki>Close || Y || Y || Y || Y (sp)
 
|-
 
| 0x2000 || IPCKDriver_SubmitRequest || Y || Y || Y || Y (sp)
 
|-
 
| 0x2200 || GetEnvironmentVariable || Y || Y || Y || N
 
|-
 
| 0x2700 || GetNotifyTarget || Y || Y || Y || N
 
|-
 
| 0x2800 || ProcCtrl || Y || Y || Y || N
 
|-
 
| 0x2900 || GetForegroundBucket || Y || Y || Y || N
 
|-
 
| 0x2A00 || RequestSwitch || Y || Y || Y || N
 
|-
 
| 0x2B00 || PrepareTitle || Y || Y || Y || N
 
|-
 
| 0x2C00 || ProcYield || Y || Y || Y || N
 
|-
 
| 0x2E00 || GetSystemMessage || Y || Y || Y || N
 
|-
 
| 0x2F00 || GetCallArgs || Y || Y || Y || N
 
|-
 
| 0x3000 || GetAbsoluteSystemTimeInternal || Y || Y || Y || N
 
|-
 
| 0x3100 || SetAbsoluteSystemTimeInternal || Y || Y || Y || N
 
|-
 
| 0x3200 || Driver_Register || Y || Y || Y || N
 
|-
 
| 0x3300 || Driver_Deregister || Y || Y || Y || N
 
|-
 
| 0x3800 || AllocVirtAddr || Y || Y || Y || N
 
|-
 
| 0x3900 || FreeVirtAddr || Y || Y || Y || N
 
|-
 
| 0x3A00 || GetMapVirtAddrRange || Y || Y || Y || N
 
|-
 
| 0x3B00 || GetDataPhysAddrRange || Y || Y || Y || N
 
|-
 
| 0x3C00 || GetAvailPhysAddrRange || Y || Y || Y || N
 
|-
 
| 0x3D00 || MapMemory || Y || Y || Y || N
 
|-
 
| 0x3E00 || UnmapMemory || Y || Y || Y || N
 
|-
 
| 0x3F00 || LogBuffer || Y || Y || Y || Y
 
|-
 
| 0x4000 || LogArgs || Y || Y || Y || Y
 
|-
 
| 0x4100 || LogFunc || Y || Y || Y || Y
 
|-
 
| 0x4200 || LogReportKernel || Y || Y || Y || Y
 
|-
 
| 0x4300 || LogRetrieve || Y || Y || Y || Y
 
|-
 
| 0x4400 || ??? || Y || Y || Y || N
 
|-
 
| 0x4500 || ??? || Y || Y || Y || N
 
|-
 
| 0x4600 || ??? || Y || Y || Y || N
 
|-
 
| 0x4700 || Driver_CopyFromSaveArea || Y || Y || Y || N
 
|-
 
| 0x4800 || Driver_CopyToSaveArea || Y || Y || Y || N
 
|-
 
| 0x4900 || SavesDone_ReadyToRelease || Y || Y || Y || N
 
|-
 
| 0x4A00 || OSSetAlarm || Y || Y || Y || N
 
|-
 
| 0x4B00 || SetDABR || Y || Y || Y || N
 
|-
 
| 0x4C00 || SetIABR || Y || Y || Y || N
 
|-
 
| 0x4D00 || GetProcessInfo || Y || Y || Y || N
 
|-
 
| 0x4E00 || GetCodegenVirtAddrRange || Y || Y || Y || N
 
|-
 
| 0x4F00 || LoaderCall || Y || Y || Y || N
 
|-
 
| 0x5000 || RPLLoaderResumeContext || N || N || N || Y
 
|-
 
| 0x5200 || WaitIopComplete || N || N || N || Y
 
|-
 
| 0x5300 || FlushCode || N || N || N || Y
 
|-
 
| 0x5400 || FlushData || N || N || N || Y
 
|-
 
| 0x5500 || UpdateHeartbeat || N || N || N || Y
 
|-
 
| 0x5600 || LogEntry || N || N || N || Y
 
|-
 
| 0x5700 || FastClearMemory || N || N || N || Y
 
|-
 
| 0x5800 || GetBusClockSpeed || N || N || N || Y
 
|-
 
| 0x5900 || GetSharedArea || Y || Y || Y || N
 
|-
 
| 0x5A00 || SendPolicy || Y || Y || Y || N
 
|-
 
| 0x5B00 || GetProcessIndex || N || N || N || Y
 
|-
 
| 0x5C00 || IPCKDriver_PollLoaderCompletion || N || N || N || Y
 
|-
 
| 0x5D00 || BlockLogSave || Y || Y || Y || N
 
|-
 
| 0x5E00 || FinishInitandPreload || N || N || N || Y
 
|-
 
| 0x5F00 || ContinueStartProcess || N || N || N || Y
 
|-
 
| 0x6000 || OpenMCP || N || N || N || Y
 
|-
 
| 0x6100 || QuerySwitchReady || Y || Y || Y || N
 
|-
 
| 0x6200 || ??? || Y || Y || Y || N
 
|-
 
| 0x6300 || ??? || Y || Y || Y || N
 
|-
 
| 0x6400 || SetTimeInternal || N || Y || N || N
 
|-
 
| 0x6500 || (blr) || Y || Y || Y || N
 
|-
 
| 0x6600 || ProfileEntry (blr) || N || N || N || Y
 
|-
 
| 0x6700 || RequestFastExit || Y || Y || Y || N
 
|-
 
| 0x6800 || CoreInitDone || Y || Y || Y || N
 
|-
 
| 0x6900 || GetSwitchTarget || Y || Y || Y || N
 
|-
 
| 0x6A00 || AcquireDone || Y || Y || Y || N
 
|-
 
| 0x6B00 || GetBuiltSDKVersion || Y || Y || Y || N
 
|-
 
| 0x6C00 || SystemFatal || Y || Y || Y || N
 
|-
 
| 0x6E00 || SwitchSecCodeGenMode || Y || Y || Y || N
 
|-
 
| 0x6F00 || OSIopShell_RegisterCallback || Y || Y || Y || N
 
|-
 
| 0x7000 || GetTitleVersion || Y || Y || Y || N
 
|-
 
| 0x7100 || IsTestKernel || Y || Y || Y || N
 
|-
 
| 0x7200 || ForceFullRelaunch || Y || Y || Y || N
 
|-
 
| 0x7300 || Recycle || Y || N || N || N
 
|-
 
| 0x7400 || get_mode_flags(?) || Y || Y || Y || Y
 
|-
 
| 0x7500 || QueryVirtAddr || Y || Y || Y || N
 
|-
 
| 0x7600 || GetCodegenCore || Y || Y || Y || N
 
|-
 
| 0x7700 || GetSecCodeGenMode || Y || Y || Y || N
 
|-
 
| 0x7800 || CodegenCopy || Y || Y || Y || N
 
|-
 
| 0x7900 || LoadShared || Y || N || N || N
 
|-
 
| 0x7A00 || OSSetExceptionCallback || Y || Y || Y || N
 
|-
 
| 0x7B00 || IopShell_InjectCommand || Y || Y || Y || N
 
|-
 
| 0x7C00 || Kill || Y || Y || Y || N
 
|-
 
| 0x7D00 || EnableOverlayArena || Y || Y || Y || N
 
|-
 
| 0x7E00 || DisableOverlayArena || Y || Y || Y || N
 
|-
 
| 0x7F00 || GetSystemMode || Y || Y || Y || N
 
|-
 
| 0x8000 || OSSystemMode_RegisterCallback || Y || Y || Y || N
 
|-
 
| 0x8100 || ZeroProcessMemory || Y || N || N || N
 
|-
 
| 0x8200 || HandleIopPowerEvents || Y || Y || Y || N
 
|-
 
| 0x8300 || ??? || Y || Y || Y || Y
 
|-
 
| 0x8400 || ??? || N || N || N || Y
 
|}
 

Latest revision as of 02:47, 11 February 2024

Redirect to: