From 7a89c787b8502c9286cebdd57de77d71295e9e29 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Mon, 23 Mar 2020 00:29:10 +1000 Subject: [PATCH] SPU: Fix some reverb registers not being saved to state --- src/core/save_state_version.h | 2 +- src/core/spu.cpp | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core/save_state_version.h b/src/core/save_state_version.h index ada144efb..faf4e0f27 100644 --- a/src/core/save_state_version.h +++ b/src/core/save_state_version.h @@ -2,4 +2,4 @@ #include "types.h" static constexpr u32 SAVE_STATE_MAGIC = 0x43435544; -static constexpr u32 SAVE_STATE_VERSION = 10; +static constexpr u32 SAVE_STATE_VERSION = 11; diff --git a/src/core/spu.cpp b/src/core/spu.cpp index 18a5caf86..789a2e703 100644 --- a/src/core/spu.cpp +++ b/src/core/spu.cpp @@ -10,9 +10,6 @@ #include Log_SetChannel(SPU); -// TODO: -// - Noise - SPU::SPU() = default; SPU::~SPU() = default; @@ -54,8 +51,12 @@ void SPU::Reset() m_reverb_on_register = 0; m_reverb_registers = {}; - m_reverb_registers.mBASE = 0xE128; + m_reverb_registers.mBASE = 0; m_reverb_current_address = ZeroExtend32(m_reverb_registers.mBASE) * 8; + m_reverb_left_input = 0; + m_reverb_left_output = 0; + m_reverb_right_input = 0; + m_reverb_right_output = 0; for (u32 i = 0; i < NUM_VOICES; i++) { @@ -102,6 +103,9 @@ bool SPU::DoState(StateWrapper& sw) sw.Do(&m_noise_level); sw.Do(&m_reverb_on_register); sw.Do(&m_reverb_current_address); + sw.Do(&m_reverb_registers.vLOUT); + sw.Do(&m_reverb_registers.vROUT); + sw.Do(&m_reverb_registers.mBASE); sw.DoArray(m_reverb_registers.rev, NUM_REVERB_REGS); sw.Do(&m_reverb_left_input); sw.Do(&m_reverb_right_input); @@ -1243,6 +1247,8 @@ std::tuple SPU::SampleVoice(u32 voice_index) sample = voice.Interpolate(); const s32 volume = ApplyVolume(sample, voice.regs.adsr_volume); + // if (voice_index == 3 || voice_index == 4) + // Log_WarningPrintf("voice %u %d", voice_index, volume); voice.last_volume = volume; voice.TickADSR();