mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Misc fixes (accept .prx, work on power callbacks, bugs)
This commit is contained in:
parent
3a1b9e28df
commit
387552f564
17 changed files with 304 additions and 58 deletions
|
@ -157,7 +157,7 @@ const HLEFunction LoadCoreForKernel[] =
|
|||
{0xB4D6FECC, 0, "sceKernelApplyElfRelSection"},
|
||||
{0x54AB2675, 0, "LoadCoreForKernel_54AB2675"},
|
||||
{0x2952F5AC, 0, "sceKernelDcacheWBinvAll"},
|
||||
{0xD8779AC6, 0, "sceKernelIcacheClearAll"},
|
||||
{0xD8779AC6, sceKernelIcacheClearAll, "sceKernelIcacheClearAll"},
|
||||
{0x99A695F0, 0, "sceKernelRegisterLibrary"},
|
||||
{0x5873A31F, 0, "sceKernelRegisterLibraryForUser"},
|
||||
{0x0B464512, 0, "sceKernelReleaseLibrary"},
|
||||
|
|
|
@ -266,9 +266,8 @@ void sceAudioOutput2OutputBlocking()
|
|||
chans[0].leftVolume = vol;
|
||||
chans[0].rightVolume = vol;
|
||||
chans[0].sampleAddress = dataPtr;
|
||||
RETURN(chans[0].sampleCount);
|
||||
__AudioEnqueue(chans[0], 0, true);
|
||||
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceAudioOutput2ChangeLength()
|
||||
|
|
|
@ -511,7 +511,7 @@ void sceIoDevctl() //(const char *name, int cmd, void *arg, size_t arglen, void
|
|||
|
||||
// This should really send it on to a FileSystem implementation instead.
|
||||
|
||||
if (!strcmp(name, "mscmhc0:"))
|
||||
if (!strcmp(name, "mscmhc0:") || !strcmp(name, "ms0:"))
|
||||
{
|
||||
switch (cmd)
|
||||
{
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include "sceKernelEventFlag.h"
|
||||
#include "sceKernelVTimer.h"
|
||||
#include "sceKernelTime.h"
|
||||
#include "scePower.h"
|
||||
#include "sceUtility.h"
|
||||
#include "sceUmd.h"
|
||||
|
||||
|
@ -74,6 +75,7 @@ void __KernelInit()
|
|||
__DisplayInit();
|
||||
__InterruptsInit();
|
||||
__GeInit();
|
||||
__PowerInit();
|
||||
__UtilityInit();
|
||||
__UmdInit();
|
||||
|
||||
|
@ -276,6 +278,13 @@ int KernelObjectPool::GetCount()
|
|||
}
|
||||
|
||||
void sceKernelIcacheInvalidateAll()
|
||||
{
|
||||
DEBUG_LOG(CPU, "Icache invalidated - should clear JIT someday");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
void sceKernelIcacheClearAll()
|
||||
{
|
||||
DEBUG_LOG(CPU, "Icache cleared - should clear JIT someday");
|
||||
RETURN(0);
|
||||
|
|
|
@ -267,6 +267,8 @@ void sceKernelDcacheWritebackInvalidateRange();
|
|||
void sceKernelDcacheWritebackInvalidateAll();
|
||||
void sceKernelGetThreadStackFreeSize();
|
||||
void sceKernelIcacheInvalidateAll();
|
||||
void sceKernelIcacheClearAll();
|
||||
|
||||
#define KERNELOBJECT_MAX_NAME_LENGTH 31
|
||||
|
||||
class KernelObjectPool;
|
||||
|
|
|
@ -458,19 +458,28 @@ void sceKernelSetCompilerVersion()
|
|||
void sceKernelCreateVpl()
|
||||
{
|
||||
const char *name = Memory::GetCharPointer(PARAM(0));
|
||||
|
||||
u32 vplSize = PARAM(3);
|
||||
u32 memBlockPtr = userMemory.Alloc(vplSize, false, "VPL");
|
||||
if (memBlockPtr == -1) {
|
||||
ERROR_LOG(HLE, "sceKernelCreateVpl: Failed to allocate %i bytes of pool data", vplSize);
|
||||
RETURN(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
VPL *vpl = new VPL;
|
||||
SceUID id = kernelObjects.Create(vpl);
|
||||
|
||||
strncpy(vpl->nv.name, name, 32);
|
||||
//vpl->nv.mpid = PARAM(1); //seems to be the standard memory partition (user, kernel etc)
|
||||
vpl->nv.attr = PARAM(2);
|
||||
vpl->size = PARAM(3);
|
||||
vpl->size = vplSize;
|
||||
vpl->nv.poolSize = vpl->size;
|
||||
vpl->nv.size = sizeof(vpl->nv);
|
||||
vpl->nv.numWaitThreads = 0;
|
||||
vpl->nv.freeSize = vpl->nv.poolSize;
|
||||
|
||||
vpl->address = userMemory.Alloc(vpl->size, false, "VPL");
|
||||
vpl->address = memBlockPtr;
|
||||
vpl->alloc.Init(vpl->address, vpl->size);
|
||||
|
||||
DEBUG_LOG(HLE,"sceKernelCreateVpl(\"%s\", block=%i, attr=%i, size=%i)",
|
||||
|
|
|
@ -229,6 +229,8 @@ public:
|
|||
FreeStack();
|
||||
}
|
||||
|
||||
void setReturnValue(u32 retval);
|
||||
|
||||
// Utils
|
||||
bool isRunning() const { return (nt.status & THREADSTATUS_RUNNING) != 0; }
|
||||
bool isStopped() const { return (nt.status & THREADSTATUS_DORMANT) != 0; }
|
||||
|
@ -284,6 +286,15 @@ SceUID curModule;
|
|||
//STATE END
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void Thread::setReturnValue(u32 retval)
|
||||
{
|
||||
if (this == currentThread) {
|
||||
currentMIPS->r[2] = retval;
|
||||
} else {
|
||||
context.r[2] = retval;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Should move to this wrapper so we can keep the current thread as a SceUID instead
|
||||
// of a dangerous raw pointer.
|
||||
Thread *__GetCurrentThread() {
|
||||
|
@ -1146,8 +1157,10 @@ void sceKernelWakeupThread()
|
|||
RETURN(0);
|
||||
} else {
|
||||
__KernelResumeThreadFromWait(uid);
|
||||
__KernelReSchedule("wakeup");
|
||||
}
|
||||
}
|
||||
else {
|
||||
RETURN(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1287,9 +1300,9 @@ void sceKernelNotifyCallback()
|
|||
{
|
||||
SceUID cbId = PARAM(0);
|
||||
u32 arg = PARAM(1);
|
||||
DEBUG_LOG(HLE,"sceKernelNotifyCallback(%i, %i) UNIMPL", cbId, arg);
|
||||
DEBUG_LOG(HLE,"sceKernelNotifyCallback(%i, %i)", cbId, arg);
|
||||
|
||||
// __KernelNotifyCallback(__KernelGetCurThread(), cbId, arg);
|
||||
__KernelNotifyCallback(THREAD_CALLBACK_USER_DEFINED, __KernelGetCurThread(), cbId, arg);
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
|
@ -1681,7 +1694,7 @@ bool __KernelInCallback()
|
|||
u32 __KernelRegisterCallback(RegisteredCallbackType type, SceUID cbId)
|
||||
{
|
||||
Thread *t = __GetCurrentThread();
|
||||
if (t->registeredCallbacks[type].find(cbId) == t->registeredCallbacks[type].end()) {
|
||||
if (cbId > 0 && t->registeredCallbacks[type].find(cbId) == t->registeredCallbacks[type].end()) {
|
||||
t->registeredCallbacks[type].insert(cbId);
|
||||
return 0;
|
||||
} else {
|
||||
|
@ -1705,6 +1718,11 @@ void __KernelNotifyCallback(RegisteredCallbackType type, SceUID threadId, SceUID
|
|||
u32 error;
|
||||
|
||||
Callback *cb = kernelObjects.Get<Callback>(cbId, error);
|
||||
if (!cb) {
|
||||
// Yeah, we're screwed, this shouldn't happen.
|
||||
ERROR_LOG(HLE, "__KernelNotifyCallback - invalid callback 0");
|
||||
return;
|
||||
}
|
||||
cb->nc.notifyCount++;
|
||||
cb->nc.notifyArg = notifyArg;
|
||||
|
||||
|
|
|
@ -160,6 +160,7 @@ class Thread;
|
|||
void __KernelSwitchContext(Thread *target, const char *reason);
|
||||
u32 __KernelResumeThreadFromWait(SceUID threadID);
|
||||
bool __KernelExecutePendingMipsCalls();
|
||||
void __KernelNotifyCallback(RegisteredCallbackType type, SceUID threadId, SceUID cbId, int notifyArg);
|
||||
|
||||
// A call into game code. These can be pending on a thread.
|
||||
// Similar to Callback-s (NOT CallbackInfos) in JPCSP.
|
||||
|
|
|
@ -20,84 +20,264 @@
|
|||
|
||||
void sceMpegInit()
|
||||
{
|
||||
DEBUG_LOG(HLE, "HACK sceMpegInit(...)");
|
||||
WARN_LOG(HLE, "HACK sceMpegInit(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
void sceMpegCreate()
|
||||
{
|
||||
DEBUG_LOG(HLE, "HACK sceMpegCreate(...)");
|
||||
WARN_LOG(HLE, "HACK sceMpegCreate(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
void sceMpegInitAu()
|
||||
{
|
||||
DEBUG_LOG(HLE, "HACK sceMpegInitAu(...)");
|
||||
WARN_LOG(HLE, "HACK sceMpegInitAu(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegQueryMemSize()
|
||||
{
|
||||
DEBUG_LOG(HLE, "HACK sceMpegQueryMemSize(...)");
|
||||
WARN_LOG(HLE, "HACK sceMpegQueryMemSize(...)");
|
||||
RETURN(0x10000); // 64K
|
||||
}
|
||||
|
||||
void sceMpegRingbufferQueryMemSize()
|
||||
{
|
||||
int packets = PARAM(0);
|
||||
DEBUG_LOG(HLE, "HACK sceMpegRingbufferQueryMemSize(...)");
|
||||
WARN_LOG(HLE, "HACK sceMpegRingbufferQueryMemSize(...)");
|
||||
RETURN(packets * (104 + 2048));
|
||||
}
|
||||
|
||||
void sceMpegRingbufferConstruct()
|
||||
{
|
||||
DEBUG_LOG(HLE, "HACK sceMpegRingbufferConstruct(...)");
|
||||
WARN_LOG(HLE, "HACK sceMpegRingbufferConstruct(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegRegistStream()
|
||||
{
|
||||
DEBUG_LOG(HLE, "HACK sceMpegRegistStream(...)");
|
||||
WARN_LOG(HLE, "HACK sceMpegRegistStream(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegUnRegistStream()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegRegistStream(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegGetAtracAu()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegGetAtracAu(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegQueryPcmEsSize()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegQueryPcmEsSize(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegQueryAtracEsSize()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegQueryAtracEsSize(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegChangeGetAuMode()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegChangeGetAuMode(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegQueryStreamOffset()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegQueryStreamOffset(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegGetPcmAu()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegGetPcmAu(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegRingbufferQueryPackNum()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegRingbufferQueryPackNum(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegFlushAllStream()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegFlushAllStream(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegMallocAvcEsBuf()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegMallocAvcEsBuf(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcCopyYCbCr()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcCopyYCbCr(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegFreeAvcEsBuf()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegFreeAvcEsBuf(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAtracDecode()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAtracDecode(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcDecodeStop()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcDecodeStop(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcDecodeMode()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcDecodeMode(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcDecode()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcDecode(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcCsc()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcCsc(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcDecodeStopYCbCr()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcDecodeStopYCbCr(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegRingbufferDestruct()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegRingbufferDestruct(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcDecodeYCbCr()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcDecodeYCbCr(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegRingbufferPut()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegRingbufferPut(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcInitYCbCr()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcInitYCbCr(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcQueryYCbCrSize()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcQueryYCbCrSize(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegRingbufferAvailableSize()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegRingbufferAvailableSize(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcDecodeDetail()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcDecodeDetail(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegAvcDecodeFlush()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegAvcDecodeFlush(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegFinish()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegFinish(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegDelete()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegDelete(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegGetAvcAu()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegDelete(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
void sceMpegQueryStreamSize()
|
||||
{
|
||||
WARN_LOG(HLE, "HACK sceMpegDelete(...)");
|
||||
RETURN(0);
|
||||
}
|
||||
|
||||
const HLEFunction sceMpeg[] =
|
||||
{
|
||||
{0xe1ce83a7,0,"sceMpegGetAtracAu"},
|
||||
{0xfe246728,0,"sceMpegGetAvcAu"},
|
||||
{0xe1ce83a7,sceMpegGetAtracAu,"sceMpegGetAtracAu"},
|
||||
{0xfe246728,sceMpegGetAvcAu,"sceMpegGetAvcAu"},
|
||||
{0xd8c5f121,sceMpegCreate,"sceMpegCreate"},
|
||||
{0xf8dcb679,0,"sceMpegQueryAtracEsSize"},
|
||||
{0xf8dcb679,sceMpegQueryAtracEsSize,"sceMpegQueryAtracEsSize"},
|
||||
{0xc132e22f,sceMpegQueryMemSize,"sceMpegQueryMemSize"},
|
||||
{0x21ff80e4,0,"sceMpegQueryStreamOffset"},
|
||||
{0x611e9e11,0,"sceMpegQueryStreamSize"},
|
||||
{0x21ff80e4,sceMpegQueryStreamOffset,"sceMpegQueryStreamOffset"},
|
||||
{0x611e9e11,sceMpegQueryStreamSize,"sceMpegQueryStreamSize"},
|
||||
{0x42560f23,sceMpegRegistStream,"sceMpegRegistStream"},
|
||||
{0x591a4aa2,0,"sceMpegUnRegistStream"},
|
||||
{0x707b7629,0,"sceMpegFlushAllStream"},
|
||||
{0xa780cf7e,0,"sceMpegMallocAvcEsBuf"},
|
||||
{0xceb870b1,0,"sceMpegFreeAvcEsBuf"},
|
||||
{0x591a4aa2,sceMpegUnRegistStream,"sceMpegUnRegistStream"},
|
||||
{0x707b7629,sceMpegFlushAllStream,"sceMpegFlushAllStream"},
|
||||
{0xa780cf7e,sceMpegMallocAvcEsBuf,"sceMpegMallocAvcEsBuf"},
|
||||
{0xceb870b1,sceMpegFreeAvcEsBuf,"sceMpegFreeAvcEsBuf"},
|
||||
{0x167afd9e,sceMpegInitAu,"sceMpegInitAu"},
|
||||
{0x682a619b,sceMpegInit,"sceMpegInit"},
|
||||
{0x800c44df,0,"sceMpegAtracDecode"},
|
||||
{0x740fccd1,0,"sceMpegAvcDecodeStop"},
|
||||
{0x0e3c2e9d,0,"sceMpegAvcDecode"},
|
||||
{0x800c44df,sceMpegAtracDecode,"sceMpegAtracDecode"},
|
||||
{0x740fccd1,sceMpegAvcDecodeStop,"sceMpegAvcDecodeStop"},
|
||||
{0x0e3c2e9d,sceMpegAvcDecode,"sceMpegAvcDecode"},
|
||||
{0xd7a29f46,sceMpegRingbufferQueryMemSize,"sceMpegRingbufferQueryMemSize"},
|
||||
{0x37295ed8,sceMpegRingbufferConstruct,"sceMpegRingbufferConstruct"},
|
||||
{0x13407f13,0,"sceMpegRingbufferDestruct"},
|
||||
{0xb240a59e,0,"sceMpegRingbufferPut"},
|
||||
{0xb5f6dc87,0,"sceMpegRingbufferAvailableSize"},
|
||||
{0x606a4649,0,"sceMpegDelete"},
|
||||
{0x874624d6,0,"sceMpegFinish"},
|
||||
{0x4571cc64,0,"sceMpegAvcDecodeFlush"},
|
||||
{0x0f6c18d7,0,"sceMpegAvcDecodeDetail"},
|
||||
{0x211a057c,0,"sceMpegAvcQueryYCbCrSize"},
|
||||
{0x67179b1b,0,"sceMpegAvcInitYCbCr"},
|
||||
{0xf0eb1125,0,"sceMpegAvcDecodeYCbCr"},
|
||||
{0xf2930c9c,0,"sceMpegAvcDecodeStopYCbCr"},
|
||||
{0x31bd0272,0,"sceMpegAvcCsc"},
|
||||
{0xa11c7026,0,"sceMpegAvcDecodeMode"},
|
||||
{0x0558B075,0,"sceMpegAvcCopyYCbCr"},
|
||||
{0x769BEBB6,0,"sceMpegRingbufferQueryPackNum"},
|
||||
{0x8C1E027D,0,"sceMpegGetPcmAu"},
|
||||
{0x9DCFB7EA,0,"sceMpegChangeGetAuMode"},
|
||||
{0xC02CF6B5,0,"sceMpegQueryPcmEsSize"},
|
||||
{0x13407f13,sceMpegRingbufferDestruct,"sceMpegRingbufferDestruct"},
|
||||
{0xb240a59e,sceMpegRingbufferPut,"sceMpegRingbufferPut"},
|
||||
{0xb5f6dc87,sceMpegRingbufferAvailableSize,"sceMpegRingbufferAvailableSize"},
|
||||
{0x606a4649,sceMpegDelete,"sceMpegDelete"},
|
||||
{0x874624d6,sceMpegFinish,"sceMpegFinish"},
|
||||
{0x4571cc64,sceMpegAvcDecodeFlush,"sceMpegAvcDecodeFlush"},
|
||||
{0x0f6c18d7,sceMpegAvcDecodeDetail,"sceMpegAvcDecodeDetail"},
|
||||
{0x211a057c,sceMpegAvcQueryYCbCrSize,"sceMpegAvcQueryYCbCrSize"},
|
||||
{0x67179b1b,sceMpegAvcInitYCbCr,"sceMpegAvcInitYCbCr"},
|
||||
{0xf0eb1125,sceMpegAvcDecodeYCbCr,"sceMpegAvcDecodeYCbCr"},
|
||||
{0xf2930c9c,sceMpegAvcDecodeStopYCbCr,"sceMpegAvcDecodeStopYCbCr"},
|
||||
{0x31bd0272,sceMpegAvcCsc,"sceMpegAvcCsc"},
|
||||
{0xa11c7026,sceMpegAvcDecodeMode,"sceMpegAvcDecodeMode"},
|
||||
{0x0558B075,sceMpegAvcCopyYCbCr,"sceMpegAvcCopyYCbCr"},
|
||||
{0x769BEBB6,sceMpegRingbufferQueryPackNum,"sceMpegRingbufferQueryPackNum"},
|
||||
{0x8C1E027D,sceMpegGetPcmAu,"sceMpegGetPcmAu"},
|
||||
{0x9DCFB7EA,sceMpegChangeGetAuMode,"sceMpegChangeGetAuMode"},
|
||||
{0xC02CF6B5,sceMpegQueryPcmEsSize,"sceMpegQueryPcmEsSize"},
|
||||
};
|
||||
|
||||
const HLEFunction sceMp3[] =
|
||||
|
|
|
@ -14,15 +14,22 @@
|
|||
|
||||
// Official git repository and contact information can be found at
|
||||
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
|
||||
|
||||
#include <map>
|
||||
#include "HLE.h"
|
||||
#include "../MIPS/MIPS.h"
|
||||
#include "../CoreTiming.h"
|
||||
|
||||
#include "scePower.h"
|
||||
#include "sceKernelThread.h"
|
||||
|
||||
static bool volatileMemLocked;
|
||||
|
||||
static int powerCbSlots[16];
|
||||
|
||||
void __PowerInit() {
|
||||
memset(powerCbSlots, 0, sizeof(powerCbSlots));
|
||||
}
|
||||
|
||||
void scePowerGetBatteryLifePercent()
|
||||
{
|
||||
DEBUG_LOG(HLE, "100=scePowerGetBatteryLifePercent");
|
||||
|
@ -56,9 +63,28 @@ void scePowerIsLowBattery()
|
|||
|
||||
void scePowerRegisterCallback()
|
||||
{
|
||||
DEBUG_LOG(HLE,"0=scePowerRegisterCallback() UNIMPL");
|
||||
int slot = PARAM(0);
|
||||
int cbId = PARAM(1);
|
||||
DEBUG_LOG(HLE,"0=scePowerRegisterCallback(%i, %i)", slot, cbId);
|
||||
powerCbSlots[slot] = cbId;
|
||||
|
||||
__KernelRegisterCallback(THREAD_CALLBACK_POWER, cbId);
|
||||
|
||||
// Immediately notify
|
||||
RETURN(0);
|
||||
|
||||
__KernelNotifyCallbackType(THREAD_CALLBACK_POWER, cbId, 0);
|
||||
}
|
||||
|
||||
void scePowerUnregisterCallback()
|
||||
{
|
||||
int slotId = PARAM(0);
|
||||
int cbId = powerCbSlots[slotId];
|
||||
DEBUG_LOG(HLE,"0=scePowerUnregisterCallback(%i) (cbid = %i)", slotId, cbId);
|
||||
__KernelUnregisterCallback(THREAD_CALLBACK_POWER, cbId);
|
||||
RETURN (0);
|
||||
}
|
||||
|
||||
void sceKernelPowerLock()
|
||||
{
|
||||
DEBUG_LOG(HLE,"UNIMPL 0=sceKernelPowerLock()");
|
||||
|
@ -164,9 +190,8 @@ static const HLEFunction scePower[] =
|
|||
{0xAC32C9CC,0,"scePowerRequestSuspend"},
|
||||
{0x2875994B,0,"scePower_2875994B"},
|
||||
{0x0074EF9B,0,"scePowerGetResumeCount"},
|
||||
{0x04B7766E,0,"scePowerRegisterCallback"},
|
||||
{0xDFA8BAF8,0,"scePowerUnregisterCallback"},
|
||||
{0xDB9D28DD,0,"scePowerUnregitserCallback"}, //haha
|
||||
{0xDFA8BAF8,scePowerUnregisterCallback,"scePowerUnregisterCallback"},
|
||||
{0xDB9D28DD,scePowerUnregisterCallback,"scePowerUnregitserCallback"}, //haha
|
||||
{0x843FBF43,0,"scePowerSetCpuClockFrequency"},
|
||||
{0xB8D7B3FB,0,"scePowerSetBusClockFrequency"},
|
||||
{0xFEE03A2F,0,"scePowerGetCpuClockFrequency"},
|
||||
|
|
|
@ -17,5 +17,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
void __PowerInit();
|
||||
|
||||
void Register_scePower();
|
||||
void Register_sceSuspendForUser();
|
||||
|
|
|
@ -42,7 +42,7 @@ EmuFileType Identify_File(const char *filename)
|
|||
fclose(f);
|
||||
if (id == 'FLE\x7F')
|
||||
{
|
||||
if (strstr(filename,".plf") || strstr(filename,"BOOT.BIN") || strstr(filename,".elf") )
|
||||
if (strstr(filename,".plf") || strstr(filename,"BOOT.BIN") || strstr(filename,".elf") || strstr(filename,".prx") )
|
||||
{
|
||||
return FILETYPE_PSP_ELF;
|
||||
}
|
||||
|
|
|
@ -438,7 +438,7 @@ namespace MIPSInt
|
|||
|
||||
void Int_Vflush(u32 op)
|
||||
{
|
||||
DEBUG_LOG(CPU,"vflush");
|
||||
// DEBUG_LOG(CPU,"vflush");
|
||||
PC += 4;
|
||||
}
|
||||
|
||||
|
|
|
@ -270,7 +270,6 @@ void TransformAndDrawPrim(void *verts, void *inds, int prim, int vertexCount, Li
|
|||
// TODO : check if has uv
|
||||
for (int j=0; j<2; j++)
|
||||
uv[j] = decoded[index].uv[j];
|
||||
|
||||
// Rescale UV?
|
||||
}
|
||||
else
|
||||
|
@ -284,6 +283,7 @@ void TransformAndDrawPrim(void *verts, void *inds, int prim, int vertexCount, Li
|
|||
}
|
||||
else
|
||||
{
|
||||
// Skinning
|
||||
Vec3 psum(0,0,0);
|
||||
Vec3 nsum(0,0,0);
|
||||
int nweights = (gstate.vertType & GE_VTYPE_WEIGHT_MASK) >> GE_VTYPE_WEIGHT_SHIFT;
|
||||
|
@ -376,6 +376,7 @@ void TransformAndDrawPrim(void *verts, void *inds, int prim, int vertexCount, Li
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Transform the coord by the view matrix. Should this be done before or after texcoord generation?
|
||||
Vec3ByMatrix43(v, out, gstate.viewMatrix);
|
||||
}
|
||||
|
|
|
@ -170,7 +170,7 @@ namespace MainWindow
|
|||
|
||||
filter += "PSP";
|
||||
filter += "|";
|
||||
filter += "*.pbp;*.elf;*.iso;*.cso;";
|
||||
filter += "*.pbp;*.elf;*.iso;*.cso;*.prx";
|
||||
filter += "|";
|
||||
filter += "|";
|
||||
for (int i=0; i<(int)filter.length(); i++)
|
||||
|
|
|
@ -155,7 +155,7 @@ void MenuScreen::render() {
|
|||
if (UIButton(GEN_ID, vlinear, w, "Load...", ALIGN_RIGHT)) {
|
||||
FileSelectScreenOptions options;
|
||||
options.allowChooseDirectory = true;
|
||||
options.filter = "iso:cso:pbp:elf:";
|
||||
options.filter = "iso:cso:pbp:elf:prx:";
|
||||
options.folderIcon = I_ICON_FOLDER;
|
||||
options.iconMapping["iso"] = I_ICON_UMD;
|
||||
options.iconMapping["cso"] = I_ICON_UMD;
|
||||
|
|
|
@ -15,4 +15,4 @@ public class PpssppActivity extends NativeActivity {
|
|||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue