diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/UCodes.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/UCodes.cpp index c42380dd6c..d8e951ff74 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/UCodes.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/UCodes.cpp @@ -58,6 +58,7 @@ UCodeInterface* UCodeFactory(u32 crc, DSPHLE* dsphle, bool wii) case 0x6ba3b3ea: // GC IPL - PAL case 0x24b22038: // GC IPL - US case 0x2fcdf1ec: // Zelda FSA - US + case 0x4be6a5cb: // Pikmin 1 GC - US return new ZeldaUCode(dsphle, crc); case 0x2ea36ce6: // Some Wii demos diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp index b6715ad6f3..4cff8f123f 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp @@ -43,6 +43,8 @@ static const std::map UCODE_FLAGS = { VOLUME_EXPLICIT_STEP }, // GameCube IPL/BIOS, PAL. { 0x6BA3B3EA, LIGHT_PROTOCOL | FOUR_MIXING_DESTS }, + // Pikmin 1 GC NTSC. + { 0x4BE6A5CB, LIGHT_PROTOCOL }, // The Legend of Zelda: The Wind Waker. { 0x86840740, 0 }, // The Legend of Zelda: Four Swords Adventure. @@ -945,6 +947,7 @@ ZeldaAudioRenderer::MixingBuffer* ZeldaAudioRenderer::BufferForID(u16 buffer_id) case 0x0E20: return &m_buf_unk1_reverb; case 0x09A0: return &m_buf_unk0; // Used by the GC IPL as a reverb dest. case 0x0FA0: return &m_buf_unk1; // Used by the GC IPL as a mixing dest. + case 0x0B00: return &m_buf_unk2; // Used by Pikmin 1 as a mixing dest. default: return nullptr; } } @@ -1592,6 +1595,7 @@ void ZeldaAudioRenderer::DoState(PointerWrap& p) p.Do(m_buf_unk1_reverb); p.Do(m_buf_unk0); p.Do(m_buf_unk1); + p.Do(m_buf_unk2); p.Do(m_resampling_coeffs); p.Do(m_const_patterns); diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.h b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.h index f5a8cfd96f..fbf2729828 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.h +++ b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.h @@ -119,6 +119,7 @@ private: MixingBuffer m_buf_unk1_reverb{}; MixingBuffer m_buf_unk0{}; MixingBuffer m_buf_unk1{}; + MixingBuffer m_buf_unk2{}; // Maps a buffer "ID" (really, their address in the DSP DRAM...) to our // buffers. Returns nullptr if no match is found.