diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs')
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs index 27aa70fc..10abab22 100644 --- a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs +++ b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs @@ -90,7 +90,63 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall Dictionary<int, string> svcFuncs32 = new Dictionary<int, string> { - // TODO + { 0x01, nameof(SvcHandler.SetHeapSize32) }, + { 0x03, nameof(SvcHandler.SetMemoryAttribute32) }, + { 0x04, nameof(SvcHandler.MapMemory32) }, + { 0x05, nameof(SvcHandler.UnmapMemory32) }, + { 0x06, nameof(SvcHandler.QueryMemory32) }, + { 0x07, nameof(SvcHandler.ExitProcess32) }, + { 0x08, nameof(SvcHandler.CreateThread32) }, + { 0x09, nameof(SvcHandler.StartThread32) }, + { 0x0a, nameof(SvcHandler.ExitThread32) }, + { 0x0b, nameof(SvcHandler.SleepThread32) }, + { 0x0c, nameof(SvcHandler.GetThreadPriority32) }, + { 0x0d, nameof(SvcHandler.SetThreadPriority32) }, + { 0x0e, nameof(SvcHandler.GetThreadCoreMask32) }, + { 0x0f, nameof(SvcHandler.SetThreadCoreMask32) }, + { 0x10, nameof(SvcHandler.GetCurrentProcessorNumber32) }, + { 0x11, nameof(SvcHandler.SignalEvent32) }, + { 0x12, nameof(SvcHandler.ClearEvent32) }, + { 0x13, nameof(SvcHandler.MapSharedMemory32) }, + { 0x14, nameof(SvcHandler.UnmapSharedMemory32) }, + { 0x15, nameof(SvcHandler.CreateTransferMemory32) }, + { 0x16, nameof(SvcHandler.CloseHandle32) }, + { 0x17, nameof(SvcHandler.ResetSignal32) }, + { 0x18, nameof(SvcHandler.WaitSynchronization32) }, + { 0x19, nameof(SvcHandler.CancelSynchronization32) }, + { 0x1a, nameof(SvcHandler.ArbitrateLock32) }, + { 0x1b, nameof(SvcHandler.ArbitrateUnlock32) }, + { 0x1c, nameof(SvcHandler.WaitProcessWideKeyAtomic32) }, + { 0x1d, nameof(SvcHandler.SignalProcessWideKey32) }, + { 0x1e, nameof(SvcHandler.GetSystemTick32) }, + { 0x1f, nameof(SvcHandler.ConnectToNamedPort32) }, + { 0x21, nameof(SvcHandler.SendSyncRequest32) }, + { 0x22, nameof(SvcHandler.SendSyncRequestWithUserBuffer32) }, + { 0x24, nameof(SvcHandler.GetProcessId32) }, + { 0x25, nameof(SvcHandler.GetThreadId32) }, + { 0x26, nameof(SvcHandler.Break32) }, + { 0x27, nameof(SvcHandler.OutputDebugString32) }, + { 0x29, nameof(SvcHandler.GetInfo32) }, + { 0x2c, nameof(SvcHandler.MapPhysicalMemory32) }, + { 0x2d, nameof(SvcHandler.UnmapPhysicalMemory32) }, + { 0x32, nameof(SvcHandler.SetThreadActivity32) }, + { 0x33, nameof(SvcHandler.GetThreadContext332) }, + { 0x34, nameof(SvcHandler.WaitForAddress32) }, + { 0x35, nameof(SvcHandler.SignalToAddress32) }, + { 0x40, nameof(SvcHandler.CreateSession32) }, + { 0x41, nameof(SvcHandler.AcceptSession32) }, + { 0x43, nameof(SvcHandler.ReplyAndReceive32) }, + { 0x45, nameof(SvcHandler.CreateEvent32) }, + { 0x5F, nameof(SvcHandler.FlushProcessDataCache32) }, + { 0x65, nameof(SvcHandler.GetProcessList32) }, + { 0x6f, nameof(SvcHandler.GetSystemInfo32) }, + { 0x70, nameof(SvcHandler.CreatePort32) }, + { 0x71, nameof(SvcHandler.ManageNamedPort32) }, + { 0x72, nameof(SvcHandler.ConnectToPort32) }, + { 0x73, nameof(SvcHandler.SetProcessMemoryPermission32) }, + { 0x77, nameof(SvcHandler.MapProcessCodeMemory32) }, + { 0x78, nameof(SvcHandler.UnmapProcessCodeMemory32) }, + { 0x7B, nameof(SvcHandler.TerminateProcess32) } }; foreach (KeyValuePair<int, string> value in svcFuncs32) @@ -320,6 +376,12 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall for (int index = 0; index < locals.Count; index++) { (LocalBuilder local, RAttribute attribute) = locals[index]; + + if ((registerInUse & (1u << attribute.Index)) != 0) + { + throw new InvalidSvcException($"Method \"{svcName}\" has conflicting output values at register index \"{attribute.Index}\"."); + } + generator.Emit(OpCodes.Ldarg_1); generator.Emit(OpCodes.Ldc_I4, attribute.Index); generator.Emit(OpCodes.Ldloc, local); |