Add some missing HLE functions, fix loading unencrypted EBOOT.BIN

This commit is contained in:
Henrik Rydgard 2012-11-06 16:20:13 +01:00
parent 48bc1afe26
commit 28879934d6
7 changed files with 21 additions and 5 deletions

View File

@ -238,11 +238,12 @@ void sceAudioInit()
const HLEFunction sceAudio[] =
{
{0x01562ba3, 0, "sceAudioOutput2Reserve"},
{0x01562ba3, 0, "sceAudioOutput2Reserve"}, // Super Stardust Portable uses these
{0x2d53f36e, 0, "sceAudioOutput2OutputBlocking"},
{0x63f2889c, 0, "sceAudioOutput2ChangeLength"},
{0x647cef33, 0, "sceAudioOutput2GetRestSample"},
{0x43196845, 0, "sceAudioOutput2Release"},
{0x210567F7, 0, "sceAudioEnd"},
{0x38553111, 0, "sceAudioSRCChReserve"},
{0x5C37C0AE, 0, "sceAudioSRCChRelease"},

View File

@ -295,6 +295,8 @@ const HLEFunction ThreadManForUser[] =
{0x5bf4dd27,&WrapU_UUU<sceKernelLockMutexCB>,"sceKernelLockMutexCB"},
{0x6b30100f,&WrapU_UU<sceKernelUnlockMutex>,"sceKernelUnlockMutex"},
{0xb7d098c6,&WrapU_CUU<sceKernelCreateMutex>,"sceKernelCreateMutex"},
{0x0DDCD2C9, 0, "sceKernelTryLockMutex"},
// NOTE: LockLwMutex and UnlockLwMutex are in Kernel_Library, see sceKernelInterrupt.cpp.
{0xFCCFAD26,0,"sceKernelCancelWakeupThread"},
@ -308,7 +310,7 @@ const HLEFunction ThreadManForUser[] =
{0x68da9e36,sceKernelDelayThreadCB,"sceKernelDelayThreadCB"},
{0xaa73c935,sceKernelExitThread,"sceKernelExitThread"},
{0x809ce29b,sceKernelExitDeleteThread,"sceKernelExitDeleteThread"},
{0x94aa61ee,0,"sceKernelGetThreadCurrentPriority"},
{0x94aa61ee,sceKernelGetThreadCurrentPriority,"sceKernelGetThreadCurrentPriority"},
{0x293b45b8,sceKernelGetThreadId,"sceKernelGetThreadId"},
{0x3B183E26,sceKernelGetThreadExitStatus,"sceKernelGetThreadExitStatus"},
{0x52089CA1,sceKernelGetThreadStackFreeSize,"sceKernelGetThreadStackFreeSize"},
@ -423,6 +425,7 @@ const HLEFunction ThreadManForUser[] =
{0x0E927AED, _sceKernelReturnFromTimerHandler, "_sceKernelReturnFromTimerHandler"},
{0x532A522E, _sceKernelExitThread,"_sceKernelExitThread"},
// Shouldn't hook this up. No games should import this function manually and call it.
// {0x6E9EA350, _sceKernelReturnFromCallback,"_sceKernelReturnFromCallback"},
};

View File

@ -388,6 +388,7 @@ const HLEFunction Kernel_Library[] =
{0x47a0b729,sceKernelIsCpuIntrSuspended, "sceKernelIsCpuIntrSuspended"}, //flags
{0xb55249d2,sceKernelIsCpuIntrEnable, "sceKernelIsCpuIntrEnable"},
{0xa089eca4,sceKernelMemset, "sceKernelMemset"},
{0xDC692EE3,0, "sceKernelTryLockLwMutex"},
{0xbea46419,0, "sceKernelLockLwMutex"},
{0x15b6446b,0, "sceKernelUnlockLwMutex"},
{0x293b45b8,0, "sceKernelGetThreadId"},

View File

@ -637,6 +637,10 @@ const HLEFunction SysMemUserForUser[] =
{0xf77d77cb,sceKernelSetCompilerVersion,"sceKernelSetCompilerVersion"},
{0x35669d4c,0,"sceKernelSetCompiledSdkVersion600_602"}, //??
{0x1b4217bc,0,"sceKernelSetCompiledSdkVersion603_605"},
{0xDB83A952,0,"SysMemUserForUser_DB83A952"},
{0x91DE343C,0,"SysMemUserForUser_91DE343C"},
{0x50F61D8A,0,"SysMemUserForUser_50F61D8A"},
{0xFE707FDF,0,"SysMemUserForUser_FE707FDF"},
};

View File

@ -994,6 +994,13 @@ void sceKernelGetThreadId()
RETURN(retVal);
}
void sceKernelGetThreadCurrentPriority()
{
u32 retVal = __GetCurrentThread()->nt.currentPriority;
DEBUG_LOG(HLE,"%i = sceKernelGetThreadCurrentPriority()", retVal);
RETURN(retVal);
}
void sceKernelChangeCurrentThreadAttr()
{
int clearAttr = PARAM(0);
@ -1018,7 +1025,7 @@ void sceKernelChangeThreadPriority()
}
else
{
ERROR_LOG(HLE,"%08x=sceKernelChangeThreadPriority(%i, %i) failed", error, id, PARAM(1));
ERROR_LOG(HLE,"%08x=sceKernelChangeThreadPriority(%i, %i) failed - no such thread", error, id, PARAM(1));
RETURN(error);
}
}

View File

@ -34,6 +34,7 @@ void sceKernelExitDeleteThread();
void sceKernelExitThread();
void _sceKernelExitThread();
void sceKernelGetThreadId();
void sceKernelGetThreadCurrentPriority();
u32 sceKernelStartThread();
void sceKernelWaitThreadEnd();
void sceKernelReferThreadStatus();

View File

@ -71,8 +71,7 @@ bool Load_PSP_ISO(const char *filename, std::string *error_string)
{
u8 head[4];
pspFileSystem.ReadFile(fd, head, 4);
if (memcmp(head, "~PSP", 4) == 0) // || memcmp(head + 1, "ELF", 3) == 0)
{
if (memcmp(head, "~PSP", 4) == 0 || memcmp(head, "\x7F""ELF", 4) == 0) {
hasEncrypted = true;
}
}