mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 05:47:56 -07:00
Fixed the flashing problems in MP3
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1413 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
5712a74ffd
commit
5a3ee9d7af
@ -164,17 +164,24 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32
|
||||
}
|
||||
break;
|
||||
|
||||
// DVDLowGetCoverReg - called by "Legend of Spyro"
|
||||
// DVDLowGetCoverReg - Called by "Legend of Spyro" and MP3
|
||||
case 0x7a:
|
||||
{
|
||||
LOG(WII_IPC_DVD, "%s executes DVDLowGetCoverReg (Buffer 0x%08x, 0x%x)", GetDeviceName().c_str(), _BufferOut, _BufferOutSize);
|
||||
|
||||
// HACK - switching the 4th byte between 0 and 1 gets through this check
|
||||
|
||||
static u8 coverByte = 0;
|
||||
|
||||
// Write zeroes to the out buffer just in case there is some nonsense data there
|
||||
Memory::Memset(_BufferOut, 0, _BufferOutSize);
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
/* Hack for Legend of Spyro. Switching the 4th byte between 0 and 1 gets
|
||||
through this check. The out buffer address remains the same all the
|
||||
time so we don't have to bother making a global function.
|
||||
|
||||
TODO: Make this compatible with MP3 */
|
||||
// -------------------------
|
||||
/*
|
||||
static u8 coverByte = 0;
|
||||
|
||||
u8* buffer = Memory::GetPointer(_BufferOut);
|
||||
buffer[3] = coverByte;
|
||||
|
||||
@ -184,6 +191,7 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32
|
||||
coverByte = 0x01;
|
||||
|
||||
return 1;
|
||||
*/
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -104,8 +104,9 @@ public:
|
||||
|
||||
switch(Buffer.Parameter)
|
||||
{
|
||||
case IOCTL_ES_GETTITLEDIR: // ES_GetDataDir in DevKitPro
|
||||
case IOCTL_ES_GETTITLEDIR: // (0x1d) ES_GetDataDir in DevKitPro
|
||||
{
|
||||
u32 TitleID_ = Memory::Read_U32(Buffer.InBuffer[0].m_Address);;
|
||||
u32 TitleID = VolumeHandler::Read32(0);
|
||||
if (TitleID == 0)
|
||||
TitleID = 0xF00DBEEF;
|
||||
@ -113,24 +114,27 @@ public:
|
||||
char* pTitleID = (char*)&TitleID;
|
||||
|
||||
char* Path = (char*)Memory::GetPointer(Buffer.PayloadBuffer[0].m_Address);
|
||||
sprintf(Path, "/00010000/%02x%02x%02x%02x/data", (u8)pTitleID[3], (u8)pTitleID[2], (u8)pTitleID[1], (u8)pTitleID[0]);
|
||||
sprintf(Path, "/00010000/%02x%02x%02x%02x/data",
|
||||
(u8)pTitleID[3], (u8)pTitleID[2], (u8)pTitleID[1], (u8)pTitleID[0]);
|
||||
|
||||
LOG(WII_IPC_ES, "ES: IOCTL_ES_GETTITLEDIR: %s ", Path);
|
||||
LOG(WII_IPC_ES, "ES: IOCTL_ES_GETTITLEDIR: %s (TitleID: %08x)", Path, TitleID_);
|
||||
}
|
||||
break;
|
||||
|
||||
case IOCTL_ES_GETTITLEID: // ES_GetTitleID in DevKitPro
|
||||
case IOCTL_ES_GETTITLEID: // (0x20) ES_GetTitleID in DevKitPro
|
||||
{
|
||||
u32 OutBuffer = Memory::Read_U32(Buffer.PayloadBuffer[0].m_Address);
|
||||
|
||||
u32 TitleID = VolumeHandler::Read32(0);
|
||||
if (TitleID == 0)
|
||||
TitleID = 0xF00DBEEF;
|
||||
|
||||
// Write the Title ID to 0x00000000
|
||||
Memory::Write_U32(TitleID, OutBuffer);
|
||||
//Memory::Write_U32(0x00000000, OutBuffer);
|
||||
|
||||
/* This seems to be the right address to write the Title ID to
|
||||
because then it shows up in the InBuffer of IOCTL_ES_GETTITLEDIR
|
||||
that is called right after this. However, I have not seen that this
|
||||
have any effect by itself, perhaps because it's really only
|
||||
IOCTL_ES_GETTITLEDIR that matters, and since we ignore the InBuffer in
|
||||
IOCTL_ES_GETTITLEDIR and read the title from the disc instead
|
||||
this has no effect. */
|
||||
Memory::Write_U32(TitleID, Buffer.PayloadBuffer[0].m_Address);
|
||||
LOG(WII_IPC_ES, "ES: IOCTL_ES_GETTITLEID: 0x%x", TitleID);
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user