From cf098dfd6750824e1ca902df9d0ec8ae43e5262e Mon Sep 17 00:00:00 2001 From: Henrik Rydgard Date: Wed, 7 Nov 2012 15:44:13 +0100 Subject: [PATCH] UMD callbacks, a couple of NIDs --- Core/HLE/scePower.cpp | 2 ++ Core/HLE/scePsmf.cpp | 2 ++ Core/HLE/sceSas.cpp | 3 ++- Core/HLE/sceUmd.cpp | 28 +++++++++++++++++++++------- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Core/HLE/scePower.cpp b/Core/HLE/scePower.cpp index 30ccb7517..cb6bc56f5 100644 --- a/Core/HLE/scePower.cpp +++ b/Core/HLE/scePower.cpp @@ -179,6 +179,8 @@ static const HLEFunction scePower[] = {0x34f9c463,0,"scePowerGetPllClockFrequencyInt"}, {0xea382a27,0,"scePowerGetPllClockFrequencyFloat"}, {0xebd177d6,0,"scePower_driver_EBD177D6"}, + {0x469989ad,0,"scePower_469989ad"}, + {0xa85880d0,0,"scePower_a85880d0"}, }; //890129c in tyshooter looks bogus diff --git a/Core/HLE/scePsmf.cpp b/Core/HLE/scePsmf.cpp index 00f96c6ac..84d594b9d 100644 --- a/Core/HLE/scePsmf.cpp +++ b/Core/HLE/scePsmf.cpp @@ -106,6 +106,8 @@ const HLEFunction scePsmfPlayer[] = {0xe792cd94,0,"scePsmfPlayerReleasePsmfFunction"}, {0xf3efaa91,0,"scePsmfPlayerGetCurrentPlayMode"}, {0xf8ef08a6,0,"scePsmfPlayerGetCurrentStatus"}, + {0x2D0E4E0A,0,"scePsmfPlayerSetTempBufFunction"}, + {0x58B83577,0,"scePsmfPlayerSetPsmfCBFunction"}, }; void Register_scePsmf() { diff --git a/Core/HLE/sceSas.cpp b/Core/HLE/sceSas.cpp index 11c5c2bae..d5bd7d234 100644 --- a/Core/HLE/sceSas.cpp +++ b/Core/HLE/sceSas.cpp @@ -161,7 +161,7 @@ void SasInstance::mix(u32 outAddr) { Voice &voice = sas.voices[v]; - if (voice.playing) + if (voice.playing && voice.vagAddr != 0) { for (int i = 0; i < grainSize; i++) { @@ -419,6 +419,7 @@ const HLEFunction sceSasCore[] = {0xe175ef66, sceSasGetOutputMode, "__sceSasGetOutputmode"}, {0xe855bf76, 0, "__sceSasSetOutputmode"}, {0x07f58c24, 0, "__sceSasGetAllEnvelopeHeights"}, // (int sasCore, int heightAddr) 32-bit heights, 0-0x40000000 + {0xE1CD9561, 0, "__sceSasSetVoicePCM"}, }; void Register_sceSasCore() diff --git a/Core/HLE/sceUmd.cpp b/Core/HLE/sceUmd.cpp index 635a226da..85e888181 100644 --- a/Core/HLE/sceUmd.cpp +++ b/Core/HLE/sceUmd.cpp @@ -18,7 +18,7 @@ #include "HLE.h" #include "../MIPS/MIPS.h" #include "sceUmd.h" - +#include "sceKernelThread.h" #define UMD_NOT_PRESENT 0x01 #define UMD_PRESENT 0x02 @@ -69,7 +69,7 @@ void __KernelUmdDeactivate() void sceUmdCheckMedium() { DEBUG_LOG(HLE,"1=sceUmdCheckMedium(?)"); - //ignore PARAM(0) + //ignore PARAM(0) RETURN(1); //non-zero: disc in drive } @@ -86,20 +86,34 @@ void sceUmdActivate() u32 retVal = 0; __KernelUmdActivate(); DEBUG_LOG(HLE,"%i=sceUmdActivate(%08x, %s)", retVal, unknown, name); + u32 notifyArg = UMD_PRESENT | UMD_READABLE; + __KernelNotifyCallbackType(THREAD_CALLBACK_UMD, -1, notifyArg); RETURN(retVal); } void sceUmdDeactivate() { ERROR_LOG(HLE,"sceUmdDeactivate()"); + bool triggerCallback = umdActivated; __KernelUmdDeactivate(); + + if (triggerCallback) { + u32 notifyArg = UMD_PRESENT | UMD_READY; + __KernelNotifyCallbackType(THREAD_CALLBACK_UMD, -1, notifyArg); + } RETURN(0); } -void sceUmdRegisterUMDCallBack() +u32 sceUmdRegisterUMDCallBack(u32 cbId) { - ERROR_LOG(HLE,"UNIMPL 0=sceUmdRegisterUMDCallback(id=%i)",PARAM(0)); - RETURN(0); + DEBUG_LOG(HLE,"0=sceUmdRegisterUMDCallback(id=%i)",PARAM(0)); + return __KernelRegisterCallback(THREAD_CALLBACK_UMD, cbId); +} + +u32 sceUmdUnRegisterUMDCallBack(u32 cbId) +{ + DEBUG_LOG(HLE,"0=sceUmdUnRegisterUMDCallBack(id=%i)",PARAM(0)); + return __KernelUnregisterCallback(THREAD_CALLBACK_UMD, cbId); } void sceUmdGetDriveStat() @@ -163,8 +177,8 @@ const HLEFunction sceUmdUser[] = {0x6B4A146C,sceUmdGetDriveStat,"sceUmdGetDriveStat"}, {0x20628E6F,0,"sceUmdGetErrorStat"}, {0x340B7686,sceUmdGetDiscInfo,"sceUmdGetDiscInfo"}, - {0xAEE7404D,sceUmdRegisterUMDCallBack,"sceUmdRegisterUMDCallBack"}, - {0xBD2BDE07,0,"sceUmdUnRegisterUMDCallBack"}, + {0xAEE7404D,&WrapU_U,"sceUmdRegisterUMDCallBack"}, + {0xBD2BDE07,&WrapU_U,"sceUmdUnRegisterUMDCallBack"}, {0x87533940,0,"sceUmdReplaceProhibit"}, // ??? sounds bogus };