From 617dcdd8fffaa83cc59cf8d61c7629b89e604170 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Thu, 16 Jan 2014 22:35:17 -0800 Subject: [PATCH 1/3] Add some initial kernel sysclib funcs. --- Core/HLE/sceKernelInterrupt.cpp | 45 ++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/Core/HLE/sceKernelInterrupt.cpp b/Core/HLE/sceKernelInterrupt.cpp index 92d3ff1184..80e345fe9a 100644 --- a/Core/HLE/sceKernelInterrupt.cpp +++ b/Core/HLE/sceKernelInterrupt.cpp @@ -611,12 +611,55 @@ const HLEFunction Kernel_Library[] = {0xfa835cde,WrapI_I, "sceKernelGetTlsAddr"}, }; +u32 sysclib_memcpy(u32 dst, u32 src, u32 size) { + memcpy(Memory::GetPointer(dst), Memory::GetPointer(src), size); + return dst; +} + +u32 sysclib_strcat(u32 dst, u32 src) { + strcat((char *)Memory::GetPointer(dst), (char *)Memory::GetPointer(src)); + return dst; +} + +int sysclib_strcmp(u32 dst, u32 src) { + return strcmp((char *)Memory::GetPointer(dst), (char *)Memory::GetPointer(src)); +} + +u32 sysclib_strcpy(u32 dst, u32 src) { + strcpy((char *)Memory::GetPointer(dst), (char *)Memory::GetPointer(src)); + return dst; +} + +u32 sysclib_strlen(u32 src) { + return (u32)strlen(Memory::GetCharPointer(src)); +} + +int sysclib_memcmp(u32 dst, u32 src, u32 size) { + return memcmp(Memory::GetCharPointer(dst), Memory::GetCharPointer(src), size); +} + +int sysclib_sprintf(u32 dst, u32 fmt) { + // TODO + return sprintf((char *)Memory::GetPointer(dst), "%s", Memory::GetCharPointer(fmt)); +} + +const HLEFunction SysclibForKernel[] = +{ + {0xAB7592FF, WrapU_UUU, "memcpy"}, + {0x476FD94A, WrapU_UU, "strcat"}, + {0xC0AB8932, WrapI_UU, "strcmp"}, + {0xEC6F1CF2, WrapU_UU, "strcpy"}, + {0x52DF196C, WrapU_U, "strlen"}, + {0x81D0D1F7, WrapI_UUU, "memcmp"}, + {0x7661e728, WrapI_UU, "sprintf"}, +}; + void Register_Kernel_Library() { RegisterModule("Kernel_Library", ARRAY_SIZE(Kernel_Library), Kernel_Library); + RegisterModule("SysclibForKernel", ARRAY_SIZE(SysclibForKernel), SysclibForKernel); } - const HLEFunction InterruptManager[] = { {0xCA04A2B9, WrapU_UUUU, "sceKernelRegisterSubIntrHandler"}, From d6790cf90656a1127f57f9594b74268fe8984064 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Mon, 17 Feb 2014 20:42:35 +0800 Subject: [PATCH 2/3] Add logging and fix savestatus --- Core/HLE/HLETables.cpp | 2 ++ Core/HLE/sceKernelInterrupt.cpp | 11 +++++++++++ Core/HLE/sceKernelInterrupt.h | 1 + 3 files changed, 14 insertions(+) diff --git a/Core/HLE/HLETables.cpp b/Core/HLE/HLETables.cpp index 6598a36a7a..8208ef5742 100644 --- a/Core/HLE/HLETables.cpp +++ b/Core/HLE/HLETables.cpp @@ -323,5 +323,7 @@ void RegisterAllModules() { Register_LoadExecForKernel(); Register_SysMemForKernel(); Register_sceMt19937(); + Register_SysclibForKernel(); + } diff --git a/Core/HLE/sceKernelInterrupt.cpp b/Core/HLE/sceKernelInterrupt.cpp index 80e345fe9a..b721c824ca 100644 --- a/Core/HLE/sceKernelInterrupt.cpp +++ b/Core/HLE/sceKernelInterrupt.cpp @@ -612,33 +612,40 @@ const HLEFunction Kernel_Library[] = }; u32 sysclib_memcpy(u32 dst, u32 src, u32 size) { + ERROR_LOG(SCEKERNEL, "Untested sysclib_memcpy(dest=%08x, src=%08x, size=%i)", dst, src, size); memcpy(Memory::GetPointer(dst), Memory::GetPointer(src), size); return dst; } u32 sysclib_strcat(u32 dst, u32 src) { + ERROR_LOG(SCEKERNEL, "Untested sysclib_strcat(dest=%08x, src=%08x)", dst, src); strcat((char *)Memory::GetPointer(dst), (char *)Memory::GetPointer(src)); return dst; } int sysclib_strcmp(u32 dst, u32 src) { + ERROR_LOG(SCEKERNEL, "Untested sysclib_strcmp(dest=%08x, src=%08x)", dst, src); return strcmp((char *)Memory::GetPointer(dst), (char *)Memory::GetPointer(src)); } u32 sysclib_strcpy(u32 dst, u32 src) { + ERROR_LOG(SCEKERNEL, "Untested sysclib_strcpy(dest=%08x, src=%08x)", dst, src); strcpy((char *)Memory::GetPointer(dst), (char *)Memory::GetPointer(src)); return dst; } u32 sysclib_strlen(u32 src) { + ERROR_LOG(SCEKERNEL, "Untested sysclib_strlen(dest=%08x, src=%08x)", src); return (u32)strlen(Memory::GetCharPointer(src)); } int sysclib_memcmp(u32 dst, u32 src, u32 size) { + ERROR_LOG(SCEKERNEL, "Untested sysclib_memcmp(dest=%08x, src=%08x, size=%i)", dst, src, size); return memcmp(Memory::GetCharPointer(dst), Memory::GetCharPointer(src), size); } int sysclib_sprintf(u32 dst, u32 fmt) { + ERROR_LOG(SCEKERNEL, "Unimpl sysclib_sprintf(dest=%08x, src=%08x)", dst, fmt); // TODO return sprintf((char *)Memory::GetPointer(dst), "%s", Memory::GetCharPointer(fmt)); } @@ -657,6 +664,10 @@ const HLEFunction SysclibForKernel[] = void Register_Kernel_Library() { RegisterModule("Kernel_Library", ARRAY_SIZE(Kernel_Library), Kernel_Library); +} + +void Register_SysclibForKernel() +{ RegisterModule("SysclibForKernel", ARRAY_SIZE(SysclibForKernel), SysclibForKernel); } diff --git a/Core/HLE/sceKernelInterrupt.h b/Core/HLE/sceKernelInterrupt.h index 8532c1e4df..3ad3611e63 100644 --- a/Core/HLE/sceKernelInterrupt.h +++ b/Core/HLE/sceKernelInterrupt.h @@ -149,3 +149,4 @@ u32 sceKernelEnableSubIntr(u32 intrNumber, u32 subIntrNumber); void Register_Kernel_Library(); void Register_InterruptManager(); +void Register_SysclibForKernel(); From f0ad992b67cad61cec42625c5f8bd9e23b4da0eb Mon Sep 17 00:00:00 2001 From: sum2012 Date: Mon, 17 Feb 2014 20:46:57 +0800 Subject: [PATCH 3/3] Add sceCtrl_driver and sceDisplay_driver --- Core/HLE/HLETables.cpp | 3 +++ Core/HLE/sceCtrl.cpp | 5 +++++ Core/HLE/sceCtrl.h | 2 ++ Core/HLE/sceDisplay.cpp | 4 ++++ Core/HLE/sceDisplay.h | 2 ++ 5 files changed, 16 insertions(+) diff --git a/Core/HLE/HLETables.cpp b/Core/HLE/HLETables.cpp index 8208ef5742..a1e892fde4 100644 --- a/Core/HLE/HLETables.cpp +++ b/Core/HLE/HLETables.cpp @@ -324,6 +324,9 @@ void RegisterAllModules() { Register_SysMemForKernel(); Register_sceMt19937(); Register_SysclibForKernel(); + Register_sceCtrl_driver(); + Register_sceDisplay_driver(); + } diff --git a/Core/HLE/sceCtrl.cpp b/Core/HLE/sceCtrl.cpp index 52609447f3..8365744ebb 100644 --- a/Core/HLE/sceCtrl.cpp +++ b/Core/HLE/sceCtrl.cpp @@ -538,3 +538,8 @@ void Register_sceCtrl() { RegisterModule("sceCtrl", ARRAY_SIZE(sceCtrl), sceCtrl); } + +void Register_sceCtrl_driver() +{ + RegisterModule("sceCtrl_driver", ARRAY_SIZE(sceCtrl), sceCtrl); +} \ No newline at end of file diff --git a/Core/HLE/sceCtrl.h b/Core/HLE/sceCtrl.h index fc7a6c22c5..b8d3908972 100644 --- a/Core/HLE/sceCtrl.h +++ b/Core/HLE/sceCtrl.h @@ -64,3 +64,5 @@ void __CtrlSetRapidFire(bool state); u32 __CtrlPeekButtons(); void __CtrlPeekAnalog(int stick, float *x, float *y); u32 __CtrlReadLatch(); + +void Register_sceCtrl_driver(); \ No newline at end of file diff --git a/Core/HLE/sceDisplay.cpp b/Core/HLE/sceDisplay.cpp index b00e0cfc73..0b09c8b9f6 100644 --- a/Core/HLE/sceDisplay.cpp +++ b/Core/HLE/sceDisplay.cpp @@ -946,3 +946,7 @@ const HLEFunction sceDisplay[] = { void Register_sceDisplay() { RegisterModule("sceDisplay", ARRAY_SIZE(sceDisplay), sceDisplay); } + +void Register_sceDisplay_driver() { + RegisterModule("sceDisplay_driver", ARRAY_SIZE(sceDisplay), sceDisplay); +} diff --git a/Core/HLE/sceDisplay.h b/Core/HLE/sceDisplay.h index cce482a410..8c7336805c 100644 --- a/Core/HLE/sceDisplay.h +++ b/Core/HLE/sceDisplay.h @@ -39,3 +39,5 @@ void __DisplayGetVPS(float *out_vps); void __DisplayGetAveragedFPS(float *out_vps, float *out_fps); int __DisplayGetVCount(); int __DisplayGetFlipCount(); + +void Register_sceDisplay_driver();