Initial stab at implementing some new memory funcs.

Borrowed from JPCSP, kept simple.  Need to do tests.
This commit is contained in:
Unknown W. Brackets 2013-04-07 20:57:53 -07:00
parent 5427f20b90
commit 42b925a440
5 changed files with 41 additions and 2 deletions

View File

@ -386,6 +386,12 @@ template<int func(const char *, int, u32, u32, u32)> void WrapI_CIUUU() {
RETURN(retval);
}
template<int func(const char *, u32, u32, u32, u32, u32)> void WrapI_CUUUUU() {
int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
PARAM(3), PARAM(4), PARAM(5));
RETURN(retval);
}
template<u32 func(const char *, u32)> void WrapU_CU() {
u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1));
RETURN((u32) retval);

View File

@ -759,6 +759,9 @@ const HLEFunction ThreadManForUser[] =
{0xd8b299ae,WrapU_UUUU<sceKernelSetVTimerHandler>,"sceKernelSetVTimerHandler"},
{0x53B00E9A,WrapU_UU64UU<sceKernelSetVTimerHandlerWide>,"sceKernelSetVTimerHandlerWide"},
{0x8daff657,WrapI_CUUUUU<ThreadManForUser_8DAFF657>,"ThreadManForUser_8DAFF657"},
{0x32bf938e,WrapI_I<ThreadManForUser_32BF938E>,"ThreadManForUser_32BF938E"},
// Not sure if these should be hooked up. See below.
{0x0E927AED, _sceKernelReturnFromTimerHandler, "_sceKernelReturnFromTimerHandler"},
{0x532A522E, _sceKernelExitThread,"_sceKernelExitThread"},

View File

@ -26,6 +26,7 @@
#include "sceKernel.h"
#include "sceKernelThread.h"
#include "sceKernelInterrupt.h"
#include "sceKernelMemory.h"
#include "sceKernelMutex.h"
void __DisableInterrupts();
@ -558,7 +559,7 @@ u32 sceKernelMemcpy(u32 dst, u32 src, u32 size)
const HLEFunction Kernel_Library[] =
{
{0x092968F4,sceKernelCpuSuspendIntr,"sceKernelCpuSuspendIntr"},
{0x092968F4,sceKernelCpuSuspendIntr, "sceKernelCpuSuspendIntr"},
{0x5F10D406,WrapV_U<sceKernelCpuResumeIntr>, "sceKernelCpuResumeIntr"}, //int oldstat
{0x3b84732d,WrapV_U<sceKernelCpuResumeIntrWithSync>, "sceKernelCpuResumeIntrWithSync"},
{0x47a0b729,sceKernelIsCpuIntrSuspended, "sceKernelIsCpuIntrSuspended"}, //flags
@ -572,7 +573,8 @@ const HLEFunction Kernel_Library[] =
{0xc1734599,WrapI_UU<sceKernelReferLwMutexStatus>, "sceKernelReferLwMutexStatus"},
{0x293b45b8,sceKernelGetThreadId, "sceKernelGetThreadId"},
{0xD13BDE95,WrapI_V<sceKernelCheckThreadStack>, "sceKernelCheckThreadStack"},
{0x1839852A,WrapU_UUU<sceKernelMemcpy>,"sce_paf_private_memcpy"},
{0x1839852A,WrapU_UUU<sceKernelMemcpy>, "sce_paf_private_memcpy"},
{0xfa835cde,WrapI_I<Kernel_Library_FA835CDE>, "Kernel_Library_FA835CDE"},
};
void Register_Kernel_Library()

View File

@ -1173,6 +1173,30 @@ u32 GetMemoryBlockPtr(u32 uid, u32 addr) {
return 0;
}
// These aren't really in sysmem, but they are memory related?
SceUID ThreadManForUser_8DAFF657(const char *name, u32 partitionid, u32 attr, u32 size, u32 count, u32 optionsPtr)
{
u32 totalSize = size * count;
u32 blockPtr = userMemory.Alloc(totalSize, (attr & 0x4000) != 0, name);
userMemory.ListBlocks();
ERROR_LOG(HLE, "UNIMPL %08x=ThreadManForUser_8DAFF657(%s, %d, %08x, %d, %d, %08x)", blockPtr, name, partitionid, attr, size, count, optionsPtr);
return blockPtr;
}
int ThreadManForUser_32BF938E(SceUID uid)
{
ERROR_LOG(HLE, "UNIMPL ThreadManForUser_32BF938E(%08x)", uid);
userMemory.Free(uid);
return 0;
}
int Kernel_Library_FA835CDE(SceUID uid)
{
ERROR_LOG(HLE, "UNIMPL Kernel_Library_FA835CDE(%08x)", uid);
return uid;
}
const HLEFunction SysMemUserForUser[] = {
{0xA291F107,sceKernelMaxFreeMemSize,"sceKernelMaxFreeMemSize"},
{0xF919F628,sceKernelTotalFreeMemSize,"sceKernelTotalFreeMemSize"},

View File

@ -56,4 +56,8 @@ void sceKernelReferFplStatus();
int sceKernelGetCompiledSdkVersion();
SceUID ThreadManForUser_8DAFF657(const char *name, u32 partitionid, u32 attr, u32 size, u32 count, u32 optionsPtr);
int ThreadManForUser_32BF938E(SceUID uid);
int Kernel_Library_FA835CDE(SceUID uid);
void Register_SysMemUserForUser();