diff --git a/Core/HLE/HLETables.cpp b/Core/HLE/HLETables.cpp index 6598a36a7a..a1e892fde4 100644 --- a/Core/HLE/HLETables.cpp +++ b/Core/HLE/HLETables.cpp @@ -323,5 +323,10 @@ void RegisterAllModules() { Register_LoadExecForKernel(); 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(); diff --git a/Core/HLE/sceKernelInterrupt.cpp b/Core/HLE/sceKernelInterrupt.cpp index 92d3ff1184..b721c824ca 100644 --- a/Core/HLE/sceKernelInterrupt.cpp +++ b/Core/HLE/sceKernelInterrupt.cpp @@ -611,11 +611,65 @@ const HLEFunction Kernel_Library[] = {0xfa835cde,WrapI_I, "sceKernelGetTlsAddr"}, }; +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)); +} + +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); } +void Register_SysclibForKernel() +{ + RegisterModule("SysclibForKernel", ARRAY_SIZE(SysclibForKernel), SysclibForKernel); +} const HLEFunction InterruptManager[] = { 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();