mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Match test in sceUmdUnRegisterUMDCallBack().
Seems that 0 is the unregistered value based on how it reacts to that param, and it should return 0 for success in newer sdk versions.
This commit is contained in:
parent
60e44c40b6
commit
d15e52cfdf
1 changed files with 16 additions and 16 deletions
|
@ -28,6 +28,7 @@
|
|||
#include "Core/HLE/sceUmd.h"
|
||||
#include "Core/HLE/sceKernelThread.h"
|
||||
#include "Core/HLE/sceKernelInterrupt.h"
|
||||
#include "Core/HLE/sceKernelMemory.h"
|
||||
#include "Core/HLE/KernelWaitHelpers.h"
|
||||
|
||||
#include "Core/FileSystems/BlockDevices.h"
|
||||
|
@ -40,7 +41,7 @@ const u64 MICRO_DELAY_ACTIVATE = 4000;
|
|||
static u8 umdActivated = 1;
|
||||
static u32 umdStatus = 0;
|
||||
static u32 umdErrorStat = 0;
|
||||
static int driveCBId = -1;
|
||||
static int driveCBId = 0;
|
||||
static int umdStatTimeoutEvent = -1;
|
||||
static int umdStatChangeEvent = -1;
|
||||
static std::vector<SceUID> umdWaitingThreads;
|
||||
|
@ -65,7 +66,7 @@ void __UmdInit()
|
|||
umdActivated = 1;
|
||||
umdStatus = 0;
|
||||
umdErrorStat = 0;
|
||||
driveCBId = -1;
|
||||
driveCBId = 0;
|
||||
|
||||
__KernelRegisterWaitTypeFuncs(WAITTYPE_UMD, __UmdBeginCallback, __UmdEndCallback);
|
||||
}
|
||||
|
@ -93,17 +94,12 @@ void __UmdDoState(PointerWrap &p)
|
|||
|
||||
u8 __KernelUmdGetState()
|
||||
{
|
||||
u8 state = PSP_UMD_PRESENT;
|
||||
// Most games seem to expect the disc to be ready early on, active or not.
|
||||
// It seems like the PSP sets this state when the disc is "ready".
|
||||
u8 state = PSP_UMD_PRESENT | PSP_UMD_READY;
|
||||
if (umdActivated) {
|
||||
state |= PSP_UMD_READY;
|
||||
state |= PSP_UMD_READABLE;
|
||||
}
|
||||
// TODO: My tests give PSP_UMD_READY but I suppose that's when it's been sitting in the drive?
|
||||
else
|
||||
// Fix Narisokonai Eiyuutan: Taiyou to Tsuki no Monogatari black screen
|
||||
// Fix The History Channel: Great Battles of Rome load probrem.
|
||||
// Fix Sora no Kiseki SC change disc issue
|
||||
state |= PSP_UMD_READY;
|
||||
return state;
|
||||
}
|
||||
|
||||
|
@ -135,7 +131,7 @@ void __UmdStatChange(u64 userdata, int cyclesLate)
|
|||
void __KernelUmdActivate()
|
||||
{
|
||||
u32 notifyArg = PSP_UMD_PRESENT | PSP_UMD_READABLE;
|
||||
if (driveCBId != -1)
|
||||
if (driveCBId != 0)
|
||||
__KernelNotifyCallback(driveCBId, notifyArg);
|
||||
|
||||
// Don't activate immediately, take time to "spin up."
|
||||
|
@ -146,7 +142,7 @@ void __KernelUmdActivate()
|
|||
void __KernelUmdDeactivate()
|
||||
{
|
||||
u32 notifyArg = PSP_UMD_PRESENT | PSP_UMD_READY;
|
||||
if (driveCBId != -1)
|
||||
if (driveCBId != 0)
|
||||
__KernelNotifyCallback(driveCBId, notifyArg);
|
||||
|
||||
CoreTiming::RemoveAllEvents(umdStatChangeEvent);
|
||||
|
@ -291,11 +287,15 @@ int sceUmdUnRegisterUMDCallBack(int cbId)
|
|||
{
|
||||
int retVal;
|
||||
|
||||
if (cbId != driveCBId)
|
||||
if (cbId != driveCBId) {
|
||||
retVal = PSP_ERROR_UMD_INVALID_PARAM;
|
||||
else {
|
||||
retVal = cbId;
|
||||
driveCBId = -1;
|
||||
} else {
|
||||
if (sceKernelGetCompiledSdkVersion() > 0x3000000) {
|
||||
retVal = 0;
|
||||
} else {
|
||||
retVal = cbId;
|
||||
}
|
||||
driveCBId = 0;
|
||||
}
|
||||
DEBUG_LOG(SCEIO, "%08x=sceUmdUnRegisterUMDCallBack(id=%08x)", retVal, cbId);
|
||||
return retVal;
|
||||
|
|
Loading…
Add table
Reference in a new issue