From 29cfec9bb304f2f29c72d2ace2ab02cafbd57142 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sun, 7 Jun 2020 10:14:46 +0800 Subject: [PATCH 1/4] Warp some ThreadManForKernel --- Core/HLE/sceKernel.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Core/HLE/sceKernel.cpp b/Core/HLE/sceKernel.cpp index 520295f2d929..e638ce2886f0 100644 --- a/Core/HLE/sceKernel.cpp +++ b/Core/HLE/sceKernel.cpp @@ -870,6 +870,9 @@ const HLEFunction ThreadManForKernel[] = {0xCEADEB47, &WrapI_U, "sceKernelDelayThread", 'i', "x", HLE_NOT_IN_INTERRUPT | HLE_NOT_DISPATCH_SUSPENDED | HLE_KERNEL_SYSCALL }, {0x446D8DE6, &WrapI_CUUIUU, "sceKernelCreateThread", 'i', "sxxixx", HLE_NOT_IN_INTERRUPT | HLE_KERNEL_SYSCALL }, {0xF475845D, &WrapI_IIU, "sceKernelStartThread", 'i', "iix", HLE_NOT_IN_INTERRUPT | HLE_KERNEL_SYSCALL }, + {0X9FA03CD3, &WrapI_I, "sceKernelDeleteThread", 'i', "i" }, + {0XAA73C935, &WrapV_I, "sceKernelExitThread", 'v', "i" }, + {0X809CE29B, &WrapV_I, "sceKernelExitDeleteThread", 'v', "i" }, }; void Register_ThreadManForUser() From 3f6ec47f181746fcc2a38e619756465c12c37549 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sun, 7 Jun 2020 10:30:55 +0800 Subject: [PATCH 2/4] Wrap sceKernelExitVSHKernel --- Core/HLE/sceKernel.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Core/HLE/sceKernel.cpp b/Core/HLE/sceKernel.cpp index e638ce2886f0..392ce8a4f3ea 100644 --- a/Core/HLE/sceKernel.cpp +++ b/Core/HLE/sceKernel.cpp @@ -901,6 +901,7 @@ const HLEFunction LoadExecForKernel[] = {0x4AC57943, &WrapI_I, "sceKernelRegisterExitCallback", 'i', "i", HLE_KERNEL_SYSCALL }, {0XA3D5E142, nullptr, "LoadExecForKernel_a3d5e142", '?', "" }, {0X28D0D249, &WrapI_CU, "sceKernelLoadExec_28D0D249", 'i', "sx" }, + {0x6D302D3D, &WrapV_V, "sceKernelExitVSHKernel", 'v', "" },// when called in game mode it will have the same effect that sceKernelExitGame }; void Register_LoadExecForKernel() From bb48006b8e22166344ff37cbc2b12d55e314cf02 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sun, 7 Jun 2020 10:37:50 +0800 Subject: [PATCH 3/4] Forget HLE_KERNEL_SYSCALL flag --- Core/HLE/sceKernel.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Core/HLE/sceKernel.cpp b/Core/HLE/sceKernel.cpp index 392ce8a4f3ea..3e51fb8da79e 100644 --- a/Core/HLE/sceKernel.cpp +++ b/Core/HLE/sceKernel.cpp @@ -870,9 +870,9 @@ const HLEFunction ThreadManForKernel[] = {0xCEADEB47, &WrapI_U, "sceKernelDelayThread", 'i', "x", HLE_NOT_IN_INTERRUPT | HLE_NOT_DISPATCH_SUSPENDED | HLE_KERNEL_SYSCALL }, {0x446D8DE6, &WrapI_CUUIUU, "sceKernelCreateThread", 'i', "sxxixx", HLE_NOT_IN_INTERRUPT | HLE_KERNEL_SYSCALL }, {0xF475845D, &WrapI_IIU, "sceKernelStartThread", 'i', "iix", HLE_NOT_IN_INTERRUPT | HLE_KERNEL_SYSCALL }, - {0X9FA03CD3, &WrapI_I, "sceKernelDeleteThread", 'i', "i" }, - {0XAA73C935, &WrapV_I, "sceKernelExitThread", 'v', "i" }, - {0X809CE29B, &WrapV_I, "sceKernelExitDeleteThread", 'v', "i" }, + {0X9FA03CD3, &WrapI_I, "sceKernelDeleteThread", 'i', "i", HLE_KERNEL_SYSCALL }, + {0XAA73C935, &WrapV_I, "sceKernelExitThread", 'v', "i", HLE_KERNEL_SYSCALL }, + {0X809CE29B, &WrapV_I, "sceKernelExitDeleteThread", 'v', "i", HLE_KERNEL_SYSCALL }, }; void Register_ThreadManForUser() @@ -901,7 +901,7 @@ const HLEFunction LoadExecForKernel[] = {0x4AC57943, &WrapI_I, "sceKernelRegisterExitCallback", 'i', "i", HLE_KERNEL_SYSCALL }, {0XA3D5E142, nullptr, "LoadExecForKernel_a3d5e142", '?', "" }, {0X28D0D249, &WrapI_CU, "sceKernelLoadExec_28D0D249", 'i', "sx" }, - {0x6D302D3D, &WrapV_V, "sceKernelExitVSHKernel", 'v', "" },// when called in game mode it will have the same effect that sceKernelExitGame + {0x6D302D3D, &WrapV_V, "sceKernelExitVSHKernel", 'v', "", HLE_KERNEL_SYSCALL },// when called in game mode it will have the same effect that sceKernelExitGame }; void Register_LoadExecForKernel() From 5a7ed46938e1975ecb366d38096bf569a1e4770b Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sun, 7 Jun 2020 11:46:08 +0800 Subject: [PATCH 4/4] Fix logging as @unknownbrackets suggest --- Core/HLE/sceKernel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/HLE/sceKernel.cpp b/Core/HLE/sceKernel.cpp index 3e51fb8da79e..e07cc2b2be9a 100644 --- a/Core/HLE/sceKernel.cpp +++ b/Core/HLE/sceKernel.cpp @@ -901,7 +901,7 @@ const HLEFunction LoadExecForKernel[] = {0x4AC57943, &WrapI_I, "sceKernelRegisterExitCallback", 'i', "i", HLE_KERNEL_SYSCALL }, {0XA3D5E142, nullptr, "LoadExecForKernel_a3d5e142", '?', "" }, {0X28D0D249, &WrapI_CU, "sceKernelLoadExec_28D0D249", 'i', "sx" }, - {0x6D302D3D, &WrapV_V, "sceKernelExitVSHKernel", 'v', "", HLE_KERNEL_SYSCALL },// when called in game mode it will have the same effect that sceKernelExitGame + {0x6D302D3D, &WrapV_V, "sceKernelExitVSHKernel", 'v', "x", HLE_KERNEL_SYSCALL },// when called in game mode it will have the same effect that sceKernelExitGame }; void Register_LoadExecForKernel()