From 89037781e01bbc4f2ccb991f0f7506ca10f07d66 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Fri, 26 Dec 2014 19:17:35 +0100 Subject: [PATCH] Zelda HLE: Make the implementation less strict for recoverable errors. It kind of sucks that we don't emulate some behaviors properly, but there is very little ROI for some of these features and I'm not going to spend time implementing them any time soon. Making the PanicAlerts optional allows for more testing of the core features on more games while "just" breaking less important features like reverb. --- Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp index 35c27ff987..16823c8bbf 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp @@ -7,6 +7,11 @@ #include "Core/HW/DSPHLE/UCodes/UCodes.h" #include "Core/HW/DSPHLE/UCodes/Zelda.h" +// Uncomment this to have a strict version of the HLE implementation, which +// PanicAlerts on recoverable unknown behaviors instead of silently ignoring +// them. Recommended for development. +// #define STRICT_ZELDA_HLE 1 + // These flags modify the behavior of the HLE implementation based on the UCode // version. When introducing a new flag, please recheck the behavior of each // UCode version. @@ -808,8 +813,10 @@ void ZeldaAudioRenderer::PrepareFrame() // TODO: Back left and back right should have a filter applied to them, // then get mixed into front left and front right. In practice, TWW never // uses this AFAICT. PanicAlert to help me find places that use this. +#ifdef STRICT_ZELDA_HLE if (!(m_flags & LIGHT_PROTOCOL) && (m_buf_back_left[0] != 0 || m_buf_back_right[0] != 0)) PanicAlert("Zelda HLE using back mixing buffers"); +#endif // Add reverb data from previous frame. ApplyReverb(false); @@ -837,7 +844,9 @@ void ZeldaAudioRenderer::ApplyReverb(bool post_rendering) { if (!m_reverb_pb_base_addr) { +#ifdef STRICT_ZELDA_HLE PanicAlert("Trying to apply reverb without available parameters."); +#endif return; } @@ -912,7 +921,9 @@ void ZeldaAudioRenderer::ApplyReverb(bool post_rendering) MixingBuffer* dest_buffer = BufferForID(dest.buffer_id); if (!dest_buffer) { +#ifdef STRICT_ZELDA_HLE PanicAlert("RPB mixing to an unknown buffer: %04x", dest.buffer_id); +#endif continue; } AddBuffersWithVolume(dest_buffer->data(), buffer.data(), @@ -1085,7 +1096,9 @@ void ZeldaAudioRenderer::AddVoice(u16 voice_id) MixingBuffer* dst_buffer = BufferForID(vpb.channels[i].id); if (!dst_buffer) { +#ifdef STRICT_ZELDA_HLE PanicAlert("Mixing to an unmapped buffer: %04x", vpb.channels[i].id); +#endif continue; }