Difference between revisions of "Cafe OS syscalls"
Jump to navigation
Jump to search
NWPlayer123 (talk | contribs) (Complete rework with syscall access as of 5.5.0) |
(Added a few more function names found in various RPLs as function names.) |
||
Line 91: | Line 91: | ||
| 0x1B00 || SetInfo || Y || Y || Y || N | | 0x1B00 || SetInfo || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x1C00 || | + | | 0x1C00 || OSThreadInit || Y || Y || Y || N |
|- | |- | ||
| 0x1D00 || SendICI || Y || Y || Y || N | | 0x1D00 || SendICI || Y || Y || Y || N | ||
Line 109: | Line 109: | ||
| 0x2900 || GetForegroundBucket || Y || Y || Y || N | | 0x2900 || GetForegroundBucket || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x2A00 || | + | | 0x2A00 || RequestSwitch || Y || Y || Y || N |
|- | |- | ||
| 0x2B00 || PrepareTitle || Y || Y || Y || N | | 0x2B00 || PrepareTitle || Y || Y || Y || N | ||
Line 115: | Line 115: | ||
| 0x2C00 || ProcYield || Y || Y || Y || N | | 0x2C00 || ProcYield || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x2E00 || | + | | 0x2E00 || GetSystemMessage || Y || Y || Y || N |
|- | |- | ||
| 0x2F00 || GetCallArgs || Y || Y || Y || N | | 0x2F00 || GetCallArgs || Y || Y || Y || N | ||
Line 163: | Line 163: | ||
| 0x4900 || SavesDone_ReadyToRelease || Y || Y || Y || N | | 0x4900 || SavesDone_ReadyToRelease || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x4A00 || | + | | 0x4A00 || OSSetAlarm || Y || Y || Y || N |
|- | |- | ||
| 0x4B00 || SetDABR || Y || Y || Y || N | | 0x4B00 || SetDABR || Y || Y || Y || N | ||
Line 207: | Line 207: | ||
| 0x6000 || OpenMCP || N || N || N || Y | | 0x6000 || OpenMCP || N || N || N || Y | ||
|- | |- | ||
− | | 0x6100 || | + | | 0x6100 || QuerySwitchReady || Y || Y || Y || N |
|- | |- | ||
| 0x6200 || ??? || Y || Y || Y || N | | 0x6200 || ??? || Y || Y || Y || N | ||
Line 221: | Line 221: | ||
| 0x6700 || RequestFastExit || Y || Y || Y || N | | 0x6700 || RequestFastExit || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x6800 || | + | | 0x6800 || CoreInitDone || Y || Y || Y || N |
|- | |- | ||
| 0x6900 || GetSwitchTarget || Y || Y || Y || N | | 0x6900 || GetSwitchTarget || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x6A00 || | + | | 0x6A00 || AcquireDone || Y || Y || Y || N |
|- | |- | ||
− | | 0x6B00 || | + | | 0x6B00 || GetBuiltSDKVersion || Y || Y || Y || N |
|- | |- | ||
− | | 0x6C00 || | + | | 0x6C00 || SystemFatal || Y || Y || Y || N |
|- | |- | ||
| 0x6E00 || SwitchSecCodeGenMode || Y || Y || Y || N | | 0x6E00 || SwitchSecCodeGenMode || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x6F00 || | + | | 0x6F00 || OSIopShell_RegisterCallback || Y || Y || Y || N |
|- | |- | ||
| 0x7000 || GetTitleVersion || Y || Y || Y || N | | 0x7000 || GetTitleVersion || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x7100 || | + | | 0x7100 || IsTestKernel || Y || Y || Y || N |
|- | |- | ||
| 0x7200 || ForceFullRelaunch || Y || Y || Y || N | | 0x7200 || ForceFullRelaunch || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x7300 || | + | | 0x7300 || Recycle || Y || N || N || N |
|- | |- | ||
| 0x7400 || get_mode_flags(?) || Y || Y || Y || Y | | 0x7400 || get_mode_flags(?) || Y || Y || Y || Y | ||
Line 253: | Line 253: | ||
| 0x7800 || CodegenCopy || Y || Y || Y || N | | 0x7800 || CodegenCopy || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x7900 || | + | | 0x7900 || LoadShared || Y || N || N || N |
|- | |- | ||
− | | 0x7A00 || | + | | 0x7A00 || OSSetExceptionCallback || Y || Y || Y || N |
|- | |- | ||
| 0x7B00 || IopShell_InjectCommand || Y || Y || Y || N | | 0x7B00 || IopShell_InjectCommand || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x7C00 || | + | | 0x7C00 || Kill || Y || Y || Y || N |
|- | |- | ||
− | | 0x7D00 || | + | | 0x7D00 || EnableOverlayArena || Y || Y || Y || N |
|- | |- | ||
− | | 0x7E00 || | + | | 0x7E00 || DisableOverlayArena || Y || Y || Y || N |
|- | |- | ||
| 0x7F00 || GetSystemMode || Y || Y || Y || N | | 0x7F00 || GetSystemMode || Y || Y || Y || N | ||
|- | |- | ||
− | | 0x8000 || | + | | 0x8000 || OSSystemMode_RegisterCallback || Y || Y || Y || N |
|- | |- | ||
| 0x8100 || ZeroProcessMemory || Y || N || N || N | | 0x8100 || ZeroProcessMemory || Y || N || N || N |
Revision as of 18:21, 8 April 2016
Cafe OS syscalls are issued by doing the following:
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.
# | Name | ID 1 | Sys | App | 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_{Loader|User}Open | Y | Y | Y | Y (sp) |
0x1F00 | IPCKDriver_{Loader|User}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 |