From 20b8c2484766ff6988cdc1711af4ac44a81db168 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Thu, 1 Nov 2018 19:02:37 +0100 Subject: [PATCH] Fix first DTK track not playing after booting with IPL DVDLowAudioBufferConfig doesn't start a DTK stream, it just tells the drive that the game is allowed to use DTK. At least if I'm not mistaken. --- Source/Core/Core/HW/DVD/DVDInterface.cpp | 27 ++++++++---------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/Source/Core/Core/HW/DVD/DVDInterface.cpp b/Source/Core/Core/HW/DVD/DVDInterface.cpp index 0acbbc24e2..1ed6cf0f5b 100644 --- a/Source/Core/Core/HW/DVD/DVDInterface.cpp +++ b/Source/Core/Core/HW/DVD/DVDInterface.cpp @@ -991,27 +991,18 @@ void ExecuteCommand(u32 command_0, u32 command_1, u32 command_2, u32 output_addr // DVD Audio Enable/Disable (Immediate). GC uses this, and apparently Wii also does...? case DVDLowAudioBufferConfig: - // For more information: http://www.crazynation.org/GC/GC_DD_TECH/GCTech.htm (dead link?) - // - // Upon Power up or reset , 2 commands must be issued for proper use of audio streaming: - // DVDReadDiskID A8000040,00000000,00000020 - // DVDLowAudioBufferConfig E4xx00yy,00000000,00000020 - // - // xx=byte 8 [0 or 1] from the disk header retrieved from DVDReadDiskID - // yy=0 (if xx=0) or 0xA (if xx=1) + // The IPL uses this command to enable or disable DTK audio depending on the value of byte 0x8 + // in the disc header. See http://www.crazynation.org/GC/GC_DD_TECH/GCTech.htm for more info. + // The link is dead, but you can access the page using the Wayback Machine at archive.org. + + // TODO: Dolphin doesn't prevent the game from using DTK when the IPL doesn't enable it. + // Should we be failing with an error code when the game tries to use the 0xE1 command? + // (Not that this should matter normally, since games that use DTK set the header byte to 1) if ((command_0 >> 16) & 0xFF) - { - // TODO: What is this actually supposed to do? - s_stream = true; - INFO_LOG(DVDINTERFACE, "(Audio): Audio enabled"); - } + INFO_LOG(DVDINTERFACE, "DTK enabled"); else - { - // TODO: What is this actually supposed to do? - s_stream = false; - INFO_LOG(DVDINTERFACE, "(Audio): Audio disabled"); - } + INFO_LOG(DVDINTERFACE, "DTK disabled"); break; // yet another (GC?) command we prolly don't care about