diff --git a/Source/Core/Core/Src/HW/AudioInterface.cpp b/Source/Core/Core/Src/HW/AudioInterface.cpp index 9dcf7ec3d9..037c5757ea 100644 --- a/Source/Core/Core/Src/HW/AudioInterface.cpp +++ b/Source/Core/Core/Src/HW/AudioInterface.cpp @@ -174,6 +174,12 @@ void Write32(const u32 _Value, const u32 _Address) INFO_LOG(AUDIO_INTERFACE, "Change Freq to %s", tmpAICtrl.AFR ? "48khz":"32khz"); g_AudioRegister.m_Control.AFR = tmpAICtrl.AFR; } + // Set DSP frequency + if (tmpAICtrl.DSPFR != g_AudioRegister.m_Control.DSPFR) + { + INFO_LOG(AUDIO_INTERFACE, "AI_CONTROL_REGISTER: Change DSPFR Freq to %s", tmpAICtrl.DSPFR ? "48khz":"32khz"); + g_AudioRegister.m_Control.DSPFR = tmpAICtrl.DSPFR; + } g_SampleRate = tmpAICtrl.AFR ? 32000 : 48000; g_DSPSampleRate = tmpAICtrl.DSPFR ? 32000 : 48000; @@ -186,8 +192,11 @@ void Write32(const u32 _Value, const u32 _Address) { INFO_LOG(AUDIO_INTERFACE, "Change StreamingCounter to %s", tmpAICtrl.PSTAT ? "startet":"stopped"); g_AudioRegister.m_Control.PSTAT = tmpAICtrl.PSTAT; - g_LastCPUTime = CoreTiming::GetTicks(); + + // This is the only new code in this ~3,326 revision, it seems to avoid hanging Crazy Taxi, + // while the 1080 and Wave Race music still works + if (!tmpAICtrl.PSTAT) DVDInterface::m_bStream = false; } // AI Interrupt @@ -209,7 +218,8 @@ void Write32(const u32 _Value, const u32 _Address) g_LastCPUTime = CoreTiming::GetTicks(); } - g_AudioRegister.m_Control = tmpAICtrl; + // I don't think we need this + //g_AudioRegister.m_Control = tmpAICtrl; UpdateInterrupts(); } diff --git a/Source/Core/Core/Src/HW/DVDInterface.cpp b/Source/Core/Core/Src/HW/DVDInterface.cpp index 99404c34e5..a810e35508 100644 --- a/Source/Core/Core/Src/HW/DVDInterface.cpp +++ b/Source/Core/Core/Src/HW/DVDInterface.cpp @@ -587,10 +587,10 @@ void ExecuteCommand(UDIDMAControlRegister& _DMAControlReg) //========================================================================================================= case 0xE2: { - /* if (m_bStream) + /**/ if (m_bStream) dvdMem.Immediate = 1; else - dvdMem.Immediate = 0;*/ + dvdMem.Immediate = 0; } DEBUG_LOG(DVDINTERFACE, "DVD(Audio): Request Audio status"); break; @@ -609,16 +609,16 @@ void ExecuteCommand(UDIDMAControlRegister& _DMAControlReg) // Command/Subcommand/Padding <- E4010000 (enable) //========================================================================================================= case 0xE4: -/* if (((dvdMem.Command[0] & 0x00FF0000) >> 16) == 1) +/**/ if (((dvdMem.Command[0] & 0x00FF0000) >> 16) == 1) { m_bStream = true; - LOG(DVDINTERFACE, "DVD(Audio): Audio enabled"); + DEBUG_LOG(DVDINTERFACE, "DVD(Audio): Audio enabled"); } else { m_bStream = false; - LOG(DVDINTERFACE, "DVD(Audio): Audio disabled"); - }*/ + DEBUG_LOG(DVDINTERFACE, "DVD(Audio): Audio disabled"); + } break; //========================================================================================================= diff --git a/Source/Core/Core/Src/HW/DVDInterface.h b/Source/Core/Core/Src/HW/DVDInterface.h index bf282ae0cb..4a2f536ff1 100644 --- a/Source/Core/Core/Src/HW/DVDInterface.h +++ b/Source/Core/Core/Src/HW/DVDInterface.h @@ -38,6 +38,7 @@ bool IsLidOpen(); // DVD Access Functions bool DVDRead(u32 _iDVDOffset, u32 _iRamAddress, u32 _iLength); bool DVDReadADPCM(u8* _pDestBuffer, u32 _iNumSamples); +extern bool m_bStream; // Read32 void Read32(u32& _uReturnValue, const u32 _iAddress);