Changes

Jump to navigation Jump to search
8,887 bytes added ,  21:36, 27 July 2014
colors:)
Line 10: Line 10:  
|-
 
|-
 
| 0x01  
 
| 0x01  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result ControlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions)
 
| Result ControlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions)
 
| Outaddr is usually the same as the input addr0.
 
| Outaddr is usually the same as the input addr0.
 
|-
 
|-
 
| 0x02  
 
| 0x02  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result QueryMemory(MemoryInfo* info, PageInfo* out, u32 Addr)
 
| Result QueryMemory(MemoryInfo* info, PageInfo* out, u32 Addr)
 
|
 
|
 
|-
 
|-
 
| 0x03  
 
| 0x03  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| void ExitProcess(void)
 
| void ExitProcess(void)
 
|
 
|
 
|-
 
|-
 
| 0x04  
 
| 0x04  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount)
 
| Result GetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount)
 
|
 
|
 
|-
 
|-
 
| 0x05  
 
| 0x05  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SetProcessAffinityMask(Handle process, u8* affinitymask, s32 processorcount)
 
| Result SetProcessAffinityMask(Handle process, u8* affinitymask, s32 processorcount)
 
|
 
|
 
|-
 
|-
 
| 0x06  
 
| 0x06  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetProcessIdealProcessor(s32 *idealprocessor, Handle process)
 
| Result GetProcessIdealProcessor(s32 *idealprocessor, Handle process)
 
|
 
|
 
|-
 
|-
 
| 0x07  
 
| 0x07  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SetProcessIdealProcessor(Handle process, s32 idealprocessor)
 
| Result SetProcessIdealProcessor(Handle process, s32 idealprocessor)
 
|
 
|
 
|-
 
|-
 
| 0x08  
 
| 0x08  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result [[#CreateThread|CreateThread]](Handle* thread, func entrypoint, u32 arg, u32 stacktop, s32 threadpriority, s32 processorid)
 
| Result [[#CreateThread|CreateThread]](Handle* thread, func entrypoint, u32 arg, u32 stacktop, s32 threadpriority, s32 processorid)
 
|
 
|
 
|-
 
|-
 
| 0x09  
 
| 0x09  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| void ExitThread(void)
 
| void ExitThread(void)
 
|
 
|
 
|-
 
|-
 
| 0x0A  
 
| 0x0A  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| void SleepThread(s64 nanoseconds)
 
| void SleepThread(s64 nanoseconds)
 
|
 
|
 
|-
 
|-
 
| 0x0B  
 
| 0x0B  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result GetThreadPriority(s32* priority, Handle thread)
 
| Result GetThreadPriority(s32* priority, Handle thread)
 
|
 
|
 
|-
 
|-
 
| 0x0C  
 
| 0x0C  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result SetThreadPriority(Handle thread, s32 priority)
 
| Result SetThreadPriority(Handle thread, s32 priority)
 
|
 
|
 
|-
 
|-
 
| 0x0D  
 
| 0x0D  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)
 
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)
 
|
 
|
 
|-
 
|-
 
| 0x0E  
 
| 0x0E  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SetThreadAffinityMask(Handle thread, u8* affinitymask, s32 processorcount)
 
| Result SetThreadAffinityMask(Handle thread, u8* affinitymask, s32 processorcount)
 
| Replaced with a stub in ARM11 NATIVE_FIRM kernel beginning with [[8.0.0-18]].
 
| Replaced with a stub in ARM11 NATIVE_FIRM kernel beginning with [[8.0.0-18]].
 
|-
 
|-
 
| 0x0F  
 
| 0x0F  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)
 
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)
 
|
 
|
 
|-
 
|-
 
| 0x10  
 
| 0x10  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SetThreadIdealProcessor(Handle thread, s32 processorid)
 
| Result SetThreadIdealProcessor(Handle thread, s32 processorid)
 
| Replaced with a stub in ARM11 NATIVE_FIRM kernel beginning with [[8.0.0-18]].
 
| Replaced with a stub in ARM11 NATIVE_FIRM kernel beginning with [[8.0.0-18]].
 
|-
 
|-
 
| 0x11  
 
| 0x11  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| s32 GetCurrentProcessorNumber(void)
 
| s32 GetCurrentProcessorNumber(void)
 
|
 
|
 
|-
 
|-
 
| 0x12  
 
| 0x12  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result Run(Handle process, StartupInfo* info)
 
| Result Run(Handle process, StartupInfo* info)
 
| This starts the main() thread. Buf+0 is main-thread priority, Buf+4 is main-thread stack-size.
 
| This starts the main() thread. Buf+0 is main-thread priority, Buf+4 is main-thread stack-size.
 
|-
 
|-
 
| 0x13  
 
| 0x13  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result CreateMutex(Handle* mutex, bool initialLocked)
 
| Result CreateMutex(Handle* mutex, bool initialLocked)
 
|
 
|
 
|-
 
|-
 
| 0x14  
 
| 0x14  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result ReleaseMutex(Handle mutex)
 
| Result ReleaseMutex(Handle mutex)
 
|
 
|
 
|-
 
|-
 
| 0x15  
 
| 0x15  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
 
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
 
|
 
|
 
|-
 
|-
 
| 0x16  
 
| 0x16  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)
 
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)
 
|
 
|
 
|-
 
|-
 
| 0x17  
 
| 0x17  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result CreateEvent(Handle* event, ResetType resettype)
 
| Result CreateEvent(Handle* event, ResetType resettype)
 
|
 
|
 
|-
 
|-
 
| 0x18  
 
| 0x18  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result SignalEvent(Handle event)
 
| Result SignalEvent(Handle event)
 
|
 
|
 
|-
 
|-
 
| 0x19  
 
| 0x19  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result ClearEvent(Handle event)
 
| Result ClearEvent(Handle event)
 
|
 
|
 
|-
 
|-
 
| 0x1A  
 
| 0x1A  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result CreateTimer(Handle* timer, ResetType resettype)
 
| Result CreateTimer(Handle* timer, ResetType resettype)
 
|
 
|
 
|-
 
|-
 
| 0x1B  
 
| 0x1B  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result SetTimer(Handle timer, s64 initial, s64 interval)
 
| Result SetTimer(Handle timer, s64 initial, s64 interval)
 
|
 
|
 
|-
 
|-
 
| 0x1C  
 
| 0x1C  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result CancelTimer(Handle timer)
 
| Result CancelTimer(Handle timer)
 
|
 
|
 
|-
 
|-
 
| 0x1D  
 
| 0x1D  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result ClearTimer(Handle timer)
 
| Result ClearTimer(Handle timer)
 
|
 
|
 
|-
 
|-
 
| 0x1E  
 
| 0x1E  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result CreateMemoryBlock(Handle* memblock, u32 addr, u32 size, u32 mypermission, u32 otherpermission)
 
| Result CreateMemoryBlock(Handle* memblock, u32 addr, u32 size, u32 mypermission, u32 otherpermission)
 
|
 
|
 
|-
 
|-
 
| 0x1F  
 
| 0x1F  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission)
 
| Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission)
 
|
 
|
 
|-
 
|-
 
| 0x20  
 
| 0x20  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result UnmapMemoryBlock(Handle memblock, u32 addr)
 
| Result UnmapMemoryBlock(Handle memblock, u32 addr)
 
|
 
|
 
|-
 
|-
 
| 0x21  
 
| 0x21  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result CreateAddressArbiter(Handle* arbiter)
 
| Result CreateAddressArbiter(Handle* arbiter)
 
|
 
|
 
|-
 
|-
 
| 0x22  
 
| 0x22  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result ArbitrateAddress(Handle arbiter, u32 addr, ArbitrationType type, s32 value, s64 nanoseconds)
 
| Result ArbitrateAddress(Handle arbiter, u32 addr, ArbitrationType type, s32 value, s64 nanoseconds)
 
|
 
|
 
|-
 
|-
 
| 0x23  
 
| 0x23  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result CloseHandle(Handle handle)
 
| Result CloseHandle(Handle handle)
 
|
 
|
 
|-
 
|-
 
| 0x24  
 
| 0x24  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result WaitSynchronization1(Handle handle, s64 nanoseconds)
 
| Result WaitSynchronization1(Handle handle, s64 nanoseconds)
 
|
 
|
 
|-
 
|-
 
| 0x25  
 
| 0x25  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result WaitSynchronizationN(s32* out, Handle* handles, s32 handlecount, bool waitAll, s64 nanoseconds)
 
| Result WaitSynchronizationN(s32* out, Handle* handles, s32 handlecount, bool waitAll, s64 nanoseconds)
 
|
 
|
 
|-
 
|-
 
| 0x26  
 
| 0x26  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SignalAndWait(s32* out, Handle signal, Handle* handles, s32 handleCount, bool waitAll, s64 nanoseconds)
 
| Result SignalAndWait(s32* out, Handle signal, Handle* handles, s32 handleCount, bool waitAll, s64 nanoseconds)
 
|
 
|
 
|-
 
|-
 
| 0x27  
 
| 0x27  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result DuplicateHandle(Handle* out, Handle original)
 
| Result DuplicateHandle(Handle* out, Handle original)
 
|
 
|
 
|-
 
|-
 
| 0x28  
 
| 0x28  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| s64 GetSystemTick(void) (This returns the total CPU ticks elapsed since the CPU was powered-on)
 
| s64 GetSystemTick(void) (This returns the total CPU ticks elapsed since the CPU was powered-on)
 
|
 
|
 
|-
 
|-
 
| 0x29  
 
| 0x29  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetHandleInfo(s64* out, Handle handle, HandleInfoType type)
 
| Result GetHandleInfo(s64* out, Handle handle, HandleInfoType type)
 
|
 
|
 
|-
 
|-
 
| 0x2A  
 
| 0x2A  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result GetSystemInfo(s64* out, SystemInfoType type, s32 param)
 
| Result GetSystemInfo(s64* out, SystemInfoType type, s32 param)
 
|
 
|
 
|-
 
|-
 
| 0x2B  
 
| 0x2B  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result GetProcessInfo(s64* out, Handle process, ProcessInfoType type)
 
| Result GetProcessInfo(s64* out, Handle process, ProcessInfoType type)
 
|
 
|
 
|-
 
|-
 
| 0x2C  
 
| 0x2C  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)
 
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)
 
|
 
|
 
|-
 
|-
 
| 0x2D  
 
| 0x2D  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result ConnectToPort(Handle* out, const char* portName)
 
| Result ConnectToPort(Handle* out, const char* portName)
 
|
 
|
 
|-
 
|-
 
| 0x2E  
 
| 0x2E  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SendSyncRequest1(Handle session)
 
| Result SendSyncRequest1(Handle session)
 
| Stubbed
 
| Stubbed
Line 333: Line 333:  
|-
 
|-
 
| 0x2F  
 
| 0x2F  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SendSyncRequest2(Handle session)
 
| Result SendSyncRequest2(Handle session)
 
| Stubbed
 
| Stubbed
Line 341: Line 341:  
|-
 
|-
 
| 0x30  
 
| 0x30  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SendSyncRequest3(Handle session)
 
| Result SendSyncRequest3(Handle session)
 
| Stubbed
 
| Stubbed
Line 349: Line 349:  
|-
 
|-
 
| 0x31  
 
| 0x31  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SendSyncRequest4(Handle session)
 
| Result SendSyncRequest4(Handle session)
 
| Stubbed
 
| Stubbed
Line 357: Line 357:  
|-
 
|-
 
| 0x32  
 
| 0x32  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SendSyncRequest(Handle session)
 
| Result SendSyncRequest(Handle session)
 
|
 
|
 
|-
 
|-
 
| 0x33  
 
| 0x33  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result OpenProcess(Handle* process, u32 processId)
 
| Result OpenProcess(Handle* process, u32 processId)
 
|
 
|
 
|-
 
|-
 
| 0x34  
 
| 0x34  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result OpenThread(Handle* thread, Handle process, u32 threadId)
 
| Result OpenThread(Handle* thread, Handle process, u32 threadId)
 
|
 
|
 
|-
 
|-
 
| 0x35  
 
| 0x35  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| Yes
+
| style="background: green" | Yes
 
| Result GetProcessId(u32* processId, Handle process)
 
| Result GetProcessId(u32* processId, Handle process)
 
|
 
|
 
|-
 
|-
 
| 0x36  
 
| 0x36  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetProcessIdOfThread(u32* processId, Handle thread)
 
| Result GetProcessIdOfThread(u32* processId, Handle thread)
 
|
 
|
 
|-
 
|-
 
| 0x37  
 
| 0x37  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result GetThreadId(u32* threadId, Handle thread)
 
| Result GetThreadId(u32* threadId, Handle thread)
 
|
 
|
 
|-
 
|-
 
| 0x38  
 
| 0x38  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetResourceLimit(Handle* resourceLimit, Handle process)
 
| Result GetResourceLimit(Handle* resourceLimit, Handle process)
 
|
 
|
 
|-
 
|-
 
| 0x39  
 
| 0x39  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
 
| Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
 
|
 
|
 
|-
 
|-
 
| 0x3A  
 
| 0x3A  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
 
| Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
 
|
 
|
 
|-
 
|-
 
| 0x3B  
 
| 0x3B  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetThreadContext(ThreadContext* context, Handle thread)
 
| Result GetThreadContext(ThreadContext* context, Handle thread)
 
| Stubbed
 
| Stubbed
 
|-
 
|-
 
| 0x3C  
 
| 0x3C  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Break(BreakReason)
 
| Break(BreakReason)
 
|
 
|
 
|-
 
|-
 
| 0x3D  
 
| 0x3D  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| OutputDebugString(void const, int)
 
| OutputDebugString(void const, int)
 
| Does nothing on non-debug units.
 
| Does nothing on non-debug units.
 
|-
 
|-
 
| 0x3E  
 
| 0x3E  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| ControlPerformanceCounter(unsigned long long, int, unsigned int, unsigned long long)
 
| ControlPerformanceCounter(unsigned long long, int, unsigned int, unsigned long long)
 
|
 
|
 
|- style="border-top: double"
 
|- style="border-top: double"
 
| 0x47  
 
| 0x47  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result CreatePort(Handle* portServer, Handle* portClient,  const char* name, s32 maxSessions)
 
| Result CreatePort(Handle* portServer, Handle* portClient,  const char* name, s32 maxSessions)
 
| Setting name=NULL creates a private port not accessible from svcConnectToPort.
 
| Setting name=NULL creates a private port not accessible from svcConnectToPort.
 
|-
 
|-
 
| 0x48  
 
| 0x48  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result CreateSessionToPort(Handle* session, Handle port)
 
| Result CreateSessionToPort(Handle* session, Handle port)
 
|
 
|
 
|-
 
|-
 
| 0x49  
 
| 0x49  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result CreateSession(Handle* sessionServer, Handle* sessionClient)
 
| Result CreateSession(Handle* sessionServer, Handle* sessionClient)
 
|
 
|
 
|-
 
|-
 
| 0x4A  
 
| 0x4A  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result AcceptSession(Handle* session, Handle port)
 
| Result AcceptSession(Handle* session, Handle port)
 
|
 
|
 
|-
 
|-
 
| 0x4B  
 
| 0x4B  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result ReplyAndReceive1(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Result ReplyAndReceive1(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Stubbed.
 
| Stubbed.
 
|-
 
|-
 
| 0x4C  
 
| 0x4C  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result ReplyAndReceive2(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Result ReplyAndReceive2(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Stubbed.
 
| Stubbed.
 
|-
 
|-
 
| 0x4D  
 
| 0x4D  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result ReplyAndReceive3(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Result ReplyAndReceive3(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Stubbed.
 
| Stubbed.
 
|-
 
|-
 
| 0x4E  
 
| 0x4E  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result ReplyAndReceive4(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Result ReplyAndReceive4(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Stubbed.
 
| Stubbed.
 
|-
 
|-
 
| 0x4F  
 
| 0x4F  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result ReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Result ReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
|
 
|
 
|-
 
|-
 
| 0x50  
 
| 0x50  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result BindInterrupt(Interrupt name, Handle syncObject, s32 priority, bool isManualClear)
 
| Result BindInterrupt(Interrupt name, Handle syncObject, s32 priority, bool isManualClear)
 
|
 
|
 
|-
 
|-
 
| 0x51  
 
| 0x51  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result UnbindInterrupt(Interrupt name, Handle syncObject)
 
| Result UnbindInterrupt(Interrupt name, Handle syncObject)
 
|
 
|
 
|-
 
|-
 
| 0x52  
 
| 0x52  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result InvalidateProcessDataCache(Handle process, void* addr, u32 size)
 
| Result InvalidateProcessDataCache(Handle process, void* addr, u32 size)
 
|
 
|
 
|-
 
|-
 
| 0x53  
 
| 0x53  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result StoreProcessDataCache(Handle process, void const* addr, u32 size)
 
| Result StoreProcessDataCache(Handle process, void const* addr, u32 size)
 
|
 
|
 
|-
 
|-
 
| 0x54  
 
| 0x54  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result FlushProcessDataCache(Handle process, void const* addr, u32 size)
 
| Result FlushProcessDataCache(Handle process, void const* addr, u32 size)
 
|
 
|
 
|-
 
|-
 
| 0x55  
 
| 0x55  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result StartInterProcessDma(Handle* dma, Handle dstProcess, void* dst, Handle srcProcess, const void* src, u32 size, const DmaConfig& config)
 
| Result StartInterProcessDma(Handle* dma, Handle dstProcess, void* dst, Handle srcProcess, const void* src, u32 size, const DmaConfig& config)
 
|
 
|
 
|-
 
|-
 
| 0x56  
 
| 0x56  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result StopDma(Handle dma)
 
| Result StopDma(Handle dma)
 
|
 
|
 
|-
 
|-
 
| 0x57  
 
| 0x57  
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| Result GetDmaState(DmaState* state, Handle dma)
 
| Result GetDmaState(DmaState* state, Handle dma)
 
|
 
|
 
|-
 
|-
 
| 0x58
 
| 0x58
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| RestartDma(nn::Handle, void *, void  const*, unsigned int, signed char)
 
| RestartDma(nn::Handle, void *, void  const*, unsigned int, signed char)
 
|
 
|
 
|- style="border-top: double"
 
|- style="border-top: double"
 
| 0x60  
 
| 0x60  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result DebugActiveProcess(Handle* debug, u32 processID)
 
| Result DebugActiveProcess(Handle* debug, u32 processID)
 
|
 
|
 
|-
 
|-
 
| 0x61  
 
| 0x61  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result BreakDebugProcess(Handle debug)
 
| Result BreakDebugProcess(Handle debug)
 
|
 
|
 
|-
 
|-
 
| 0x62  
 
| 0x62  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result TerminateDebugProcess(Handle debug)
 
| Result TerminateDebugProcess(Handle debug)
 
|
 
|
 
|-
 
|-
 
| 0x63  
 
| 0x63  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetProcessDebugEvent(DebugEventInfo* info, Handle debug)
 
| Result GetProcessDebugEvent(DebugEventInfo* info, Handle debug)
 
|
 
|
 
|-
 
|-
 
| 0x64  
 
| 0x64  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result ContinueDebugEvent(Handle debug, u32 flags)
 
| Result ContinueDebugEvent(Handle debug, u32 flags)
 
|
 
|
 
|-
 
|-
 
| 0x65  
 
| 0x65  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount)
 
| Result GetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount)
 
|
 
|
 
|-
 
|-
 
| 0x66  
 
| 0x66  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle domain)
 
| Result GetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle domain)
 
|
 
|
 
|-
 
|-
 
| 0x67  
 
| 0x67  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result GetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, u32 controlFlags)
 
| Result GetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, u32 controlFlags)
 
|
 
|
 
|-
 
|-
 
| 0x68  
 
| 0x68  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, u32 controlFlags)
 
| Result SetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, u32 controlFlags)
 
|
 
|
 
|-
 
|-
 
| 0x69  
 
| 0x69  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result QueryDebugProcessMemory(MemoryInfo* blockInfo, PageInfo* pageInfo, Handle process, u32 addr)
 
| Result QueryDebugProcessMemory(MemoryInfo* blockInfo, PageInfo* pageInfo, Handle process, u32 addr)
 
|
 
|
 
|-
 
|-
 
| 0x6A  
 
| 0x6A  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result ReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size)
 
| Result ReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size)
 
|
 
|
 
|-
 
|-
 
| 0x6B  
 
| 0x6B  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result WriteProcessMemory(Handle debug, void const* buffer, u32 addr, u32 size)
 
| Result WriteProcessMemory(Handle debug, void const* buffer, u32 addr, u32 size)
 
|
 
|
 
|-
 
|-
 
| 0x6C  
 
| 0x6C  
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| Result SetHardwareBreakPoint(s32 registerId, u32 control, u32 value)
 
| Result SetHardwareBreakPoint(s32 registerId, u32 control, u32 value)
 
|
 
|
 
|-
 
|-
 
| 0x6D
 
| 0x6D
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| GetDebugThreadParam(long long *, int *, nn::Handle, unsigned int, nn::dmnt::DebugThreadParam)
 
| GetDebugThreadParam(long long *, int *, nn::Handle, unsigned int, nn::dmnt::DebugThreadParam)
 
| Disabled on regular kernel.
 
| Disabled on regular kernel.
 
|- style="border-top: double"
 
|- style="border-top: double"
 
| 0x70
 
| 0x70
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| ControlProcessMemory(Handle KProcess, unsigned int Addr0, unsigned int Addr1, unsigned int Size, unsigned int Type, unsigned int Permissions)
 
| ControlProcessMemory(Handle KProcess, unsigned int Addr0, unsigned int Addr1, unsigned int Size, unsigned int Type, unsigned int Permissions)
 
|
 
|
 
|-
 
|-
 
| 0x71
 
| 0x71
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| MapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
 
| MapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
 
|
 
|
 
|-
 
|-
 
| 0x72
 
| 0x72
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| UnmapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
 
| UnmapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
 
|
 
|
 
|-
 
|-
 
| 0x73
 
| 0x73
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| CreateProcess(Handle* HandleInfo_out, struct CreateProcessInfo, u32 code_ptr, u32 ro_ptr, u32 data_ptr)
 
| CreateProcess(Handle* HandleInfo_out, struct CreateProcessInfo, u32 code_ptr, u32 ro_ptr, u32 data_ptr)
 
|
 
|
 
|-
 
|-
 
| 0x74
 
| 0x74
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
|  
 
|  
 
| Stubbed
 
| Stubbed
 
|-
 
|-
 
| 0x75
 
| 0x75
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| SetupProcess(Handle* KProcess_out, Handle HandleInfo_in, u32 arm11kernelcaps_ptr, u32 arm11kernelcaps_num)
 
| SetupProcess(Handle* KProcess_out, Handle HandleInfo_in, u32 arm11kernelcaps_ptr, u32 arm11kernelcaps_num)
 
|
 
|
 
|-
 
|-
 
| 0x76
 
| 0x76
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| TerminateProcess(Handle)
 
| TerminateProcess(Handle)
 
|
 
|
 
|-
 
|-
 
| 0x77
 
| 0x77
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| ??? (Handle KProcess, Handle KResourceLimit)
 
| ??? (Handle KProcess, Handle KResourceLimit)
 
|
 
|
 
|-
 
|-
 
| 0x78
 
| 0x78
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| CreateResourceLimit(Handle *KResourceLimit)
 
| CreateResourceLimit(Handle *KResourceLimit)
 
|
 
|
 
|-
 
|-
 
| 0x79
 
| 0x79
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| ???
 
| ???
 
|
 
|
 
|-
 
|-
 
| 0x7A
 
| 0x7A
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| Yes
+
| style="background: green" | Yes
 
| AddCodeSegment? (unsigned int Addr, unsigned int Size)
 
| AddCodeSegment? (unsigned int Addr, unsigned int Size)
 
| Stubbed on NATIVE_FIRM beginning with [[2.0.0-2]]. Used during TWL_FIRM boot.
 
| Stubbed on NATIVE_FIRM beginning with [[2.0.0-2]]. Used during TWL_FIRM boot.
 
|-
 
|-
 
| 0x7B
 
| 0x7B
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
 
| Backdoor(unsigned int CodeAddress)
 
| Backdoor(unsigned int CodeAddress)
 
| This is used on ARM9 NATIVE_FIRM. No ARM11 processes have access to it without some form of kernelhax.
 
| This is used on ARM9 NATIVE_FIRM. No ARM11 processes have access to it without some form of kernelhax.
 
|-
 
|-
 
| 0x7C
 
| 0x7C
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| KernelSetState(unsigned int Type, unsigned int Param0, unsigned int Param1, unsigned int Param2)
 
| KernelSetState(unsigned int Type, unsigned int Param0, unsigned int Param1, unsigned int Param2)
 
| The type determines the meaning of each param
 
| The type determines the meaning of each param
 
|-
 
|-
 
| 0x7D
 
| 0x7D
| Yes
+
| style="background: green" | Yes
| No
+
| style="background: red" | No
| No
+
| style="background: red" | No
 
| QueryProcessMemory(MemInfo *Info, unsigned int *Out, Handle KProcess, unsigned int Addr)
 
| QueryProcessMemory(MemInfo *Info, unsigned int *Out, Handle KProcess, unsigned int Addr)
 
|
 
|
 
|- style="border-top: double"
 
|- style="border-top: double"
 
| 0xFF
 
| 0xFF
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
| Yes
+
| style="background: green" | Yes
 
| ???
 
| ???
 
| Debug related? The svcaccesscontrol mask doesn't apply for this SVC. Stubbed on ARM9 NATIVE_FIRM.
 
| Debug related? The svcaccesscontrol mask doesn't apply for this SVC. Stubbed on ARM9 NATIVE_FIRM.
 
|}
 
|}
 +
    
Note that "stubbed" here means that the SVC only returns an error.
 
Note that "stubbed" here means that the SVC only returns an error.

Navigation menu