diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp index 11cb59ae4b..41096a73dc 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp @@ -11,7 +11,7 @@ #define RETURN_ERROR(code) { Emu.Pause(); sceLibKernel.Error("%s() failed: %s", __FUNCTION__, #code); return code; } -u32 sceKernelCreateThread( +s32 sceKernelCreateThread( vm::psv::ptr pName, vm::psv::ptr entry, s32 initPriority, @@ -122,28 +122,28 @@ s32 sceKernelChangeThreadCpuAffinityMask(s32 threadId, s32 cpuAffinityMask) { sceLibKernel.Todo("sceKernelChangeThreadCpuAffinityMask(threadId=0x%x, cpuAffinityMask=0x%x)", threadId, cpuAffinityMask); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelGetThreadCpuAffinityMask(s32 threadId) { sceLibKernel.Todo("sceKernelGetThreadCpuAffinityMask(threadId=0x%x)", threadId); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelChangeThreadPriority(s32 threadId, s32 priority) { sceLibKernel.Todo("sceKernelChangeThreadPriority(threadId=0x%x, priority=%d)", threadId, priority); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelGetThreadCurrentPriority() { sceLibKernel.Todo("sceKernelGetThreadCurrentPriority()"); - return SCE_OK; + throw __FUNCTION__; } u32 sceKernelGetThreadId(ARMv7Context& context) @@ -157,84 +157,84 @@ s32 sceKernelChangeCurrentThreadAttr(u32 clearAttr, u32 setAttr) { sceLibKernel.Todo("sceKernelChangeCurrentThreadAttr()"); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelGetThreadExitStatus(s32 threadId, vm::psv::ptr pExitStatus) { sceLibKernel.Todo("sceKernelGetThreadExitStatus(threadId=0x%x, pExitStatus=0x%x)", threadId, pExitStatus); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelGetProcessId() { sceLibKernel.Todo("sceKernelGetProcessId()"); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelCheckWaitableStatus() { sceLibKernel.Todo("sceKernelCheckWaitableStatus()"); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelGetThreadInfo(s32 threadId, vm::psv::ptr pInfo) { sceLibKernel.Todo("sceKernelGetThreadInfo(threadId=0x%x, pInfo=0x%x)", threadId, pInfo); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelGetThreadRunStatus(vm::psv::ptr pStatus) { sceLibKernel.Todo("sceKernelGetThreadRunStatus(pStatus=0x%x)", pStatus); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelGetSystemInfo(vm::psv::ptr pInfo) { sceLibKernel.Todo("sceKernelGetSystemInfo(pInfo=0x%x)", pInfo); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelGetThreadmgrUIDClass(s32 uid) { sceLibKernel.Todo("sceKernelGetThreadmgrUIDClass(uid=0x%x)", uid); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelChangeThreadVfpException(s32 clearMask, s32 setMask) { sceLibKernel.Todo("sceKernelChangeThreadVfpException(clearMask=0x%x, setMask=0x%x)", clearMask, setMask); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelGetCurrentThreadVfpException() { sceLibKernel.Todo("sceKernelGetCurrentThreadVfpException()"); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelDelayThread(u32 usec) { sceLibKernel.Todo("sceKernelDelayThread()"); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelDelayThreadCB(u32 usec) { sceLibKernel.Todo("sceKernelDelayThreadCB()"); - return SCE_OK; + throw __FUNCTION__; } s32 sceKernelWaitThreadEnd(s32 threadId, vm::psv::ptr pExitStatus, vm::psv::ptr pTimeout) @@ -272,13 +272,104 @@ s32 sceKernelWaitThreadEnd(s32 threadId, vm::psv::ptr pExitStatus, vm::psv: return SCE_OK; } +// Callback functions + s32 sceKernelWaitThreadEndCB(s32 threadId, vm::psv::ptr pExitStatus, vm::psv::ptr pTimeout) { sceLibKernel.Todo("sceKernelWaitThreadEndCB(threadId=0x%x, pExitStatus=0x%x, pTimeout=0x%x)", threadId, pExitStatus, pTimeout); - return SCE_OK; + throw __FUNCTION__; } +s32 sceKernelCreateCallback(vm::psv::ptr pName, u32 attr, vm::psv::ptr callbackFunc, vm::psv::ptr pCommon) +{ + throw __FUNCTION__; +} + +s32 sceKernelDeleteCallback(s32 callbackId) +{ + throw __FUNCTION__; +} + +s32 sceKernelNotifyCallback(s32 callbackId, s32 notifyArg) +{ + throw __FUNCTION__; +} + +s32 sceKernelCancelCallback(s32 callbackId) +{ + throw __FUNCTION__; +} + +s32 sceKernelGetCallbackCount(s32 callbackId) +{ + throw __FUNCTION__; +} + +s32 sceKernelCheckCallback() +{ + throw __FUNCTION__; +} + +s32 sceKernelGetCallbackInfo(s32 callbackId, vm::psv::ptr pInfo) +{ + throw __FUNCTION__; +} + +s32 sceKernelRegisterCallbackToEvent(s32 eventId, s32 callbackId) +{ + throw __FUNCTION__; +} + +s32 sceKernelUnregisterCallbackFromEvent(s32 eventId, s32 callbackId) +{ + throw __FUNCTION__; +} + +s32 sceKernelUnregisterCallbackFromEventAll(s32 eventId) +{ + throw __FUNCTION__; +} + +// Event functions + +s32 sceKernelWaitEvent(s32 eventId, u32 waitPattern, vm::psv::ptr pResultPattern, vm::psv::ptr pUserData, vm::psv::ptr pTimeout) +{ + throw __FUNCTION__; +} + +s32 sceKernelWaitEventCB(s32 eventId, u32 waitPattern, vm::psv::ptr pResultPattern, vm::psv::ptr pUserData, vm::psv::ptr pTimeout) +{ + throw __FUNCTION__; +} + +s32 sceKernelPollEvent(s32 eventId, u32 bitPattern, vm::psv::ptr pResultPattern, vm::psv::ptr pUserData) +{ + throw __FUNCTION__; +} + +s32 sceKernelCancelEvent(s32 eventId, vm::psv::ptr pNumWaitThreads) +{ + throw __FUNCTION__; +} + +s32 sceKernelGetEventInfo(s32 eventId, vm::psv::ptr pInfo) +{ + throw __FUNCTION__; +} + +s32 sceKernelWaitMultipleEvents(vm::psv::ptr pWaitEventList, s32 numEvents, u32 waitMode, vm::psv::ptr pResultEventList, vm::psv::ptr pTimeout) +{ + throw __FUNCTION__; +} + +s32 sceKernelWaitMultipleEventsCB(vm::psv::ptr pWaitEventList, s32 numEvents, u32 waitMode, vm::psv::ptr pResultEventList, vm::psv::ptr pTimeout) +{ + throw __FUNCTION__; +} + + + #define REG_FUNC(nid, name) reg_psv_func(nid, &sceLibKernel, #name, &name) psv_log_base sceLibKernel("sceLibKernel", []() @@ -287,6 +378,8 @@ psv_log_base sceLibKernel("sceLibKernel", []() sceLibKernel.on_unload = nullptr; sceLibKernel.on_stop = nullptr; + // REG_FUNC(???, sceKernelGetEventInfo); + //REG_FUNC(0x23EAA62, sceKernelPuts); //REG_FUNC(0xB0335388, sceClibToupper); //REG_FUNC(0x4C5471BC, sceClibTolower); @@ -430,21 +523,21 @@ psv_log_base sceLibKernel("sceLibKernel", []() REG_FUNC(0xF994FE65, sceKernelGetThreadmgrUIDClass); //REG_FUNC(0xB4DE10C7, sceKernelGetActiveCpuMask); REG_FUNC(0x2C1321A3, sceKernelChangeThreadVfpException); - //REG_FUNC(0x3849359A, sceKernelCreateCallback); - //REG_FUNC(0x88DD1BC8, sceKernelGetCallbackInfo); - //REG_FUNC(0x464559D3, sceKernelDeleteCallback); - //REG_FUNC(0xBD9C8F2B, sceKernelNotifyCallback); - //REG_FUNC(0x3137A687, sceKernelCancelCallback); - //REG_FUNC(0x76A2EF81, sceKernelGetCallbackCount); - //REG_FUNC(0xD4F75281, sceKernelRegisterCallbackToEvent); - //REG_FUNC(0x8D3940DF, sceKernelUnregisterCallbackFromEvent); - //REG_FUNC(0x2BD1E682, sceKernelUnregisterCallbackFromEventAll); - //REG_FUNC(0x120F03AF, sceKernelWaitEvent); - //REG_FUNC(0xA0490795, sceKernelWaitEventCB); - //REG_FUNC(0x241F3634, sceKernelPollEvent); - //REG_FUNC(0x603AB770, sceKernelCancelEvent); - //REG_FUNC(0x10586418, sceKernelWaitMultipleEvents); - //REG_FUNC(0x4263DBC9, sceKernelWaitMultipleEventsCB); + REG_FUNC(0x3849359A, sceKernelCreateCallback); + REG_FUNC(0x88DD1BC8, sceKernelGetCallbackInfo); + REG_FUNC(0x464559D3, sceKernelDeleteCallback); + REG_FUNC(0xBD9C8F2B, sceKernelNotifyCallback); + REG_FUNC(0x3137A687, sceKernelCancelCallback); + REG_FUNC(0x76A2EF81, sceKernelGetCallbackCount); + REG_FUNC(0xD4F75281, sceKernelRegisterCallbackToEvent); + REG_FUNC(0x8D3940DF, sceKernelUnregisterCallbackFromEvent); + REG_FUNC(0x2BD1E682, sceKernelUnregisterCallbackFromEventAll); + REG_FUNC(0x120F03AF, sceKernelWaitEvent); + REG_FUNC(0xA0490795, sceKernelWaitEventCB); + REG_FUNC(0x241F3634, sceKernelPollEvent); + REG_FUNC(0x603AB770, sceKernelCancelEvent); + REG_FUNC(0x10586418, sceKernelWaitMultipleEvents); + REG_FUNC(0x4263DBC9, sceKernelWaitMultipleEventsCB); //REG_FUNC(0x8516D040, sceKernelCreateEventFlag); //REG_FUNC(0x11FE9B8B, sceKernelDeleteEventFlag); //REG_FUNC(0xE04EC73A, sceKernelOpenEventFlag); @@ -644,7 +737,7 @@ psv_log_base sceLibKernel("sceLibKernel", []() REG_FUNC(0x751C9B7A, sceKernelChangeCurrentThreadAttr); REG_FUNC(0xD9BD74EB, sceKernelCheckWaitableStatus); REG_FUNC(0x9DCB4B7A, sceKernelGetProcessId); - //REG_FUNC(0xE53E41F6, sceKernelCheckCallback); + REG_FUNC(0xE53E41F6, sceKernelCheckCallback); //REG_FUNC(0xF4EE4FA9, sceKernelGetSystemTimeWide); //REG_FUNC(0x47F6DE49, sceKernelGetSystemTimeLow); //REG_FUNC(0xC0FAF6A3, sceKernelCreateThreadForUser); diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.h b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.h index 7750e9e58f..3e9ceec834 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.h +++ b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.h @@ -11,6 +11,12 @@ union SceKernelSysClock u64 quad; }; +struct SceKernelCallFrame +{ + u32 sp; + u32 pc; +}; + // Memory Manager definitions typedef s32 SceKernelMemoryType; @@ -303,6 +309,27 @@ struct SceKernelRWLockInfo s32 numWriteWaitThreads; }; +// IO/File Manager definitions + +struct SceIoStat +{ + s32 mode; + u32 attr; + s64 size; + SceDateTime ctime; + SceDateTime atime; + SceDateTime mtime; + u64 _private[6]; +}; + +struct SceIoDirent +{ + SceIoStat d_stat; + char d_name[256]; + vm::psv::ptr d_private; + s32 dummy; +}; + // Module extern psv_log_base sceLibKernel; diff --git a/rpcs3/Emu/ARMv7/PSVFuncList.h b/rpcs3/Emu/ARMv7/PSVFuncList.h index cf34bf846e..495bfec411 100644 --- a/rpcs3/Emu/ARMv7/PSVFuncList.h +++ b/rpcs3/Emu/ARMv7/PSVFuncList.h @@ -410,6 +410,17 @@ enum psv_error_codes SCE_KERNEL_ERROR_NO_AUTH = 0x8002F001, }; +struct SceDateTime +{ + u16 year; + u16 month; + u16 day; + u16 hour; + u16 minute; + u16 second; + u32 microsecond; +}; + class psv_func_caller { public: