mirror of
https://github.com/libretro/ppsspp.git
synced 2024-11-30 20:01:00 +00:00
Some stubs, "NOP" out registerexitcallback, implement cancelwakeup
This commit is contained in:
parent
ce5afbc166
commit
4c1883e73f
@ -136,7 +136,7 @@ void sceKernelExitGameWithStatus()
|
||||
void sceKernelRegisterExitCallback()
|
||||
{
|
||||
u32 cbId = PARAM(0);
|
||||
ERROR_LOG(HLE,"UNIMPL sceKernelRegisterExitCallback(%i)", cbId);
|
||||
DEBUG_LOG(HLE,"NOP sceKernelRegisterExitCallback(%i)", cbId);
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
@ -290,8 +290,6 @@ void sceKernelIcacheClearAll()
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
struct SystemStatus {
|
||||
SceSize size;
|
||||
SceUInt status;
|
||||
@ -302,7 +300,6 @@ struct SystemStatus {
|
||||
SceUInt perfcounter3;
|
||||
};
|
||||
|
||||
|
||||
u32 sceKernelReferSystemStatus(u32 statusPtr)
|
||||
{
|
||||
DEBUG_LOG(HLE, "sceKernelReferSystemStatus(%08x)", statusPtr);
|
||||
@ -315,6 +312,11 @@ u32 sceKernelReferSystemStatus(u32 statusPtr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sceKernelReferGlobalProfiler(u32 statusPtr) {
|
||||
DEBUG_LOG(HLE, "sceKernelReferGlobalProfiler(%08x)", statusPtr);
|
||||
// Ignore for now
|
||||
return 0;
|
||||
}
|
||||
|
||||
const HLEFunction ThreadManForUser[] =
|
||||
{
|
||||
@ -348,7 +350,7 @@ const HLEFunction ThreadManForUser[] =
|
||||
|
||||
// NOTE: LockLwMutex and UnlockLwMutex are in Kernel_Library, see sceKernelInterrupt.cpp.
|
||||
|
||||
{0xFCCFAD26,0,"sceKernelCancelWakeupThread"},
|
||||
{0xFCCFAD26,sceKernelCancelWakeupThread,"sceKernelCancelWakeupThread"},
|
||||
{0xea748e31,sceKernelChangeCurrentThreadAttr,"sceKernelChangeCurrentThreadAttr"},
|
||||
{0x71bc9871,sceKernelChangeThreadPriority,"sceKernelChangeThreadPriority"},
|
||||
{0x446D8DE6,sceKernelCreateThread,"sceKernelCreateThread"},
|
||||
@ -401,7 +403,7 @@ const HLEFunction ThreadManForUser[] =
|
||||
{0xdb738f35,sceKernelGetSystemTime,"sceKernelGetSystemTime"},
|
||||
{0x369ed59d,sceKernelGetSystemTimeLow,"sceKernelGetSystemTimeLow"},
|
||||
|
||||
{0x8218B4DD,0,"sceKernelReferGlobalProfiler"},
|
||||
{0x8218B4DD,&WrapU_U<sceKernelReferGlobalProfiler>,"sceKernelReferGlobalProfiler"},
|
||||
{0x627E6F3A,&WrapU_U<sceKernelReferSystemStatus>,"sceKernelReferSystemStatus"},
|
||||
{0x64D4540E,0,"sceKernelReferThreadProfiler"},
|
||||
|
||||
|
@ -1152,6 +1152,26 @@ void sceKernelWakeupThread()
|
||||
}
|
||||
}
|
||||
else {
|
||||
ERROR_LOG(HLE,"sceKernelWakeupThread(%i) - bad thread id");
|
||||
RETURN(error);
|
||||
}
|
||||
}
|
||||
|
||||
void sceKernelCancelWakeupThread()
|
||||
{
|
||||
SceUID uid = PARAM(0);
|
||||
u32 error;
|
||||
if (uid == 0) uid == __KernelGetCurThread();
|
||||
Thread *t = kernelObjects.Get<Thread>(uid, error);
|
||||
if (t)
|
||||
{
|
||||
int wCount = t->nt.wakeupCount;
|
||||
t->nt.wakeupCount = 0;
|
||||
DEBUG_LOG(HLE,"sceKernelCancelWakeupThread(%i) - wakeupCount reset from %i", uid, wCount);
|
||||
RETURN(wCount);
|
||||
}
|
||||
else {
|
||||
ERROR_LOG(HLE,"sceKernelCancelWakeupThread(%i) - bad thread id");
|
||||
RETURN(error);
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ void sceKernelCheckThreadStack();
|
||||
void sceKernelSuspendThread();
|
||||
void sceKernelResumeThread();
|
||||
void sceKernelWakeupThread();
|
||||
void sceKernelCancelWakeupThread();
|
||||
void sceKernelTerminateDeleteThread();
|
||||
void sceKernelWaitThreadEndCB();
|
||||
void sceKernelGetThreadExitStatus();
|
||||
|
@ -197,8 +197,21 @@ void scePowerSetClockFrequency(u32 cpufreq, u32 busfreq, u32 gpufreq)
|
||||
}
|
||||
|
||||
void scePowerGetCpuClockFrequencyInt() {
|
||||
INFO_LOG(HLE,"scePowerGetCpuClockFrequencyInt()");
|
||||
RETURN(CoreTiming::GetClockFrequencyMHz());
|
||||
int freq = CoreTiming::GetClockFrequencyMHz();
|
||||
INFO_LOG(HLE,"%i=scePowerGetCpuClockFrequencyInt()", freq);
|
||||
RETURN(freq);
|
||||
}
|
||||
|
||||
void scePowerGetPllClockFrequencyInt() {
|
||||
int freq = CoreTiming::GetClockFrequencyMHz() / 2;
|
||||
INFO_LOG(HLE,"%i=scePowerGetPllClockFrequencyInt()", freq);
|
||||
RETURN(freq);
|
||||
}
|
||||
|
||||
void scePowerGetBusClockFrequencyInt() {
|
||||
int freq = CoreTiming::GetClockFrequencyMHz() / 2;
|
||||
INFO_LOG(HLE,"%i=scePowerGetBusClockFrequencyInt()", freq);
|
||||
RETURN(freq);
|
||||
}
|
||||
|
||||
static const HLEFunction scePower[] =
|
||||
@ -244,11 +257,11 @@ static const HLEFunction scePower[] =
|
||||
{0xFEE03A2F,0,"scePowerGetCpuClockFrequency"},
|
||||
{0x478FE6F5,0,"scePowerGetBusClockFrequency"},
|
||||
{0xFDB5BFE9,scePowerGetCpuClockFrequencyInt,"scePowerGetCpuClockFrequencyInt"},
|
||||
{0xBD681969,0,"scePowerGetBusClockFrequencyInt"},
|
||||
{0xBD681969,scePowerGetBusClockFrequencyInt,"scePowerGetBusClockFrequencyInt"},
|
||||
{0xB1A52C83,0,"scePowerGetCpuClockFrequencyFloat"},
|
||||
{0x9BADB3EB,0,"scePowerGetBusClockFrequencyFloat"},
|
||||
{0x737486F2,&WrapV_UUU<scePowerSetClockFrequency>,"scePowerSetClockFrequency"},
|
||||
{0x34f9c463,0,"scePowerGetPllClockFrequencyInt"},
|
||||
{0x34f9c463,scePowerGetPllClockFrequencyInt,"scePowerGetPllClockFrequencyInt"},
|
||||
{0xea382a27,0,"scePowerGetPllClockFrequencyFloat"},
|
||||
{0xebd177d6,0,"scePower_driver_EBD177D6"},
|
||||
{0x469989ad,0,"scePower_469989ad"},
|
||||
|
@ -648,19 +648,20 @@ namespace MIPSInt
|
||||
|
||||
switch ((op >> 16) & 3) {
|
||||
case 0: // vuc2i
|
||||
// Quad is the only option
|
||||
// Quad is the only option.
|
||||
// This operation is weird. This particular way of working matches hw but does not
|
||||
// seem quite sane.
|
||||
{
|
||||
_dbg_assert_msg_(CPU,0,"Trying to interpret instruction that can't be interpreted");
|
||||
// this op appears to be bugged and most likely useless, and this stuff is wrong. I've disabled this op in the vfpu_convert test
|
||||
u32 value = s[0];
|
||||
u32 value2 = value / 2;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
d[i] = ((value & 0xFF) << 24) | replicate3(value2);
|
||||
d[i] = (u32)((value & 0xFF) * 0x01010101) >> 1;
|
||||
value >>= 8;
|
||||
value2 >>= 8;
|
||||
}
|
||||
oz = V_Quad;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: // vc2i
|
||||
// Quad is the only option
|
||||
{
|
||||
@ -669,6 +670,7 @@ namespace MIPSInt
|
||||
d[1] = (value & 0xFF00) << 16;
|
||||
d[2] = (value & 0xFF0000) << 8;
|
||||
d[3] = (value & 0xFF000000);
|
||||
oz = V_Quad;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 9a13f86079323e848216c95f534ce0abeef8da03
|
||||
Subproject commit adb26d32dff06a25d5f10f80e3c9e1e7ccd763d0
|
4
test.py
4
test.py
@ -91,8 +91,8 @@ def init():
|
||||
print "Please run git submodule init; git submodule update;"
|
||||
sys.exit(1)
|
||||
|
||||
if not os.path.exists(TEST_ROOT + "cpu/cpu/cpu.elf"):
|
||||
print "Please install the pspsdk and run build.sh or build.bat in pspautotests/tests"
|
||||
if not os.path.exists(TEST_ROOT + "cpu/cpu/cpu.prx"):
|
||||
print "Please install the pspsdk and run make in common/ and in all the tests"
|
||||
sys.exit(1)
|
||||
|
||||
for p in PPSSPP_EXECUTABLES:
|
||||
|
Loading…
Reference in New Issue
Block a user