sceKernelDelaySysClockThread() cleanup.

It doesn't wait either of course.
This commit is contained in:
Unknown W. Brackets 2013-08-27 23:02:18 -07:00
parent 93b461774a
commit 252bf04c64
3 changed files with 22 additions and 24 deletions

View file

@ -700,10 +700,10 @@ const HLEFunction ThreadManForUser[] =
{0x71bc9871,WrapI_II<sceKernelChangeThreadPriority>,"sceKernelChangeThreadPriority"},
{0x446D8DE6,WrapI_CUUIUU<sceKernelCreateThread>,"sceKernelCreateThread"},
{0x9fa03cd3,WrapI_I<sceKernelDeleteThread>,"sceKernelDeleteThread"},
{0xBD123D9E,sceKernelDelaySysClockThread,"sceKernelDelaySysClockThread"},
{0x1181E963,sceKernelDelaySysClockThreadCB,"sceKernelDelaySysClockThreadCB"},
{0xceadeb47,WrapI_U<sceKernelDelayThread>,"sceKernelDelayThread", HLE_NOT_DISPATCH_SUSPENDED},
{0x68da9e36,WrapI_U<sceKernelDelayThreadCB>,"sceKernelDelayThreadCB", HLE_NOT_DISPATCH_SUSPENDED},
{0xBD123D9E,WrapI_U<sceKernelDelaySysClockThread>, "sceKernelDelaySysClockThread", HLE_NOT_DISPATCH_SUSPENDED},
{0x1181E963,WrapI_U<sceKernelDelaySysClockThreadCB>, "sceKernelDelaySysClockThreadCB", HLE_NOT_DISPATCH_SUSPENDED},
{0xceadeb47,WrapI_U<sceKernelDelayThread>, "sceKernelDelayThread", HLE_NOT_DISPATCH_SUSPENDED},
{0x68da9e36,WrapI_U<sceKernelDelayThreadCB>, "sceKernelDelayThreadCB", HLE_NOT_DISPATCH_SUSPENDED},
{0xaa73c935,WrapV_I<sceKernelExitThread>,"sceKernelExitThread"},
{0x809ce29b,WrapV_I<sceKernelExitDeleteThread>,"sceKernelExitDeleteThread"},
{0x94aa61ee,sceKernelGetThreadCurrentPriority,"sceKernelGetThreadCurrentPriority"},

View file

@ -2410,44 +2410,42 @@ int sceKernelDelayThread(u32 usec)
return 0;
}
void sceKernelDelaySysClockThreadCB()
int sceKernelDelaySysClockThreadCB(u32 sysclockAddr)
{
u32 sysclockAddr = PARAM(0);
if (!Memory::IsValidAddress(sysclockAddr)) {
ERROR_LOG(HLE, "sceKernelDelaySysClockThread(%08x) - bad pointer", sysclockAddr);
RETURN(-1);
return;
PSPPointer<SceKernelSysClock> sysclock;
sysclock = sysclockAddr;
if (!sysclock.IsValid()) {
ERROR_LOG(HLE, "sceKernelDelaySysClockThreadCB(%08x) - bad pointer", sysclockAddr);
return -1;
}
SceKernelSysClock sysclock;
Memory::ReadStruct(sysclockAddr, &sysclock);
// TODO: Which unit?
u64 usec = sysclock.lo | ((u64)sysclock.hi << 32);
DEBUG_LOG(HLE, "sceKernelDelaySysClockThread(%08x (%llu))", sysclockAddr, usec);
u64 usec = sysclock->lo | ((u64)sysclock->hi << 32);
DEBUG_LOG(HLE, "sceKernelDelaySysClockThreadCB(%08x (%llu))", sysclockAddr, usec);
SceUID curThread = __KernelGetCurThread();
__KernelScheduleWakeup(curThread, __KernelDelayThreadUs(usec));
__KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, true, "thread delayed");
return 0;
}
void sceKernelDelaySysClockThread()
int sceKernelDelaySysClockThread(u32 sysclockAddr)
{
u32 sysclockAddr = PARAM(0);
if (!Memory::IsValidAddress(sysclockAddr)) {
PSPPointer<SceKernelSysClock> sysclock;
sysclock = sysclockAddr;
if (!sysclock.IsValid()) {
ERROR_LOG(HLE, "sceKernelDelaySysClockThread(%08x) - bad pointer", sysclockAddr);
RETURN(-1);
return;
return -1;
}
SceKernelSysClock sysclock;
Memory::ReadStruct(sysclockAddr, &sysclock);
// TODO: Which unit?
u64 usec = sysclock.lo | ((u64)sysclock.hi << 32);
u64 usec = sysclock->lo | ((u64)sysclock->hi << 32);
DEBUG_LOG(HLE, "sceKernelDelaySysClockThread(%08x (%llu))", sysclockAddr, usec);
SceUID curThread = __KernelGetCurThread();
__KernelScheduleWakeup(curThread, __KernelDelayThreadUs(usec));
__KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, false, "thread delayed");
return 0;
}
u32 __KernelGetThreadPrio(SceUID id)

View file

@ -29,8 +29,8 @@ int __KernelCreateThread(const char *threadName, SceUID moduleID, u32 entry, u32
int sceKernelCreateThread(const char *threadName, u32 entry, u32 prio, int stacksize, u32 attr, u32 optionAddr);
int sceKernelDelayThread(u32 usec);
int sceKernelDelayThreadCB(u32 usec);
void sceKernelDelaySysClockThread();
void sceKernelDelaySysClockThreadCB();
int sceKernelDelaySysClockThread(u32 sysclockAddr);
int sceKernelDelaySysClockThreadCB(u32 sysclockAddr);
int sceKernelDeleteThread(int threadHandle);
void sceKernelExitDeleteThread(int exitStatus);
void sceKernelExitThread(int exitStatus);