diff options
| author | Mai <mai.iam2048@gmail.com> | 2024-01-07 20:36:01 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-07 20:36:01 -0500 |
| commit | 180d053ec1e413a16ed82cfc2bc11bf9d530d28f (patch) | |
| tree | 259fbcf07bed779c225cb944654ba46048590375 /Source/Core | |
| parent | 4e57b66dcf3cb6a9a740f639802dec442fd5dd43 (diff) | |
| parent | 2a42977dd3690a96a5cec1b2d9f0f8dcc64d8c73 (diff) | |
Merge pull request #12486 from AdmiralCurtiss/globals-aesndaccel
Core/DSPHLE: Move AESndAccelerator instance into AESndUCode.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/HW/DSPHLE/UCodes/AESnd.cpp | 72 | ||||
| -rw-r--r-- | Source/Core/Core/HW/DSPHLE/UCodes/AESnd.h | 11 |
2 files changed, 45 insertions, 38 deletions
diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/AESnd.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/AESnd.cpp index 5e58c9385e..b4dbe7844b 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/AESnd.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/AESnd.cpp @@ -233,42 +233,38 @@ void AESndUCode::DMAOutParameterBlock() HLEMemory_Write_U32(m_parameter_block_addr + 40, m_parameter_block.flags); } -class AESndAccelerator final : public Accelerator +void AESndAccelerator::OnEndException() { -protected: - void OnEndException() override - { - // exception5 - this updates internal state - SetYn1(GetYn1()); - SetYn2(GetYn2()); - SetPredScale(GetPredScale()); - } + // exception5 - this updates internal state + SetYn1(GetYn1()); + SetYn2(GetYn2()); + SetPredScale(GetPredScale()); +} - u8 ReadMemory(u32 address) override - { - return Core::System::GetInstance().GetDSP().ReadARAM(address); - } - void WriteMemory(u32 address, u8 value) override - { - Core::System::GetInstance().GetDSP().WriteARAM(value, address); - } -}; +u8 AESndAccelerator::ReadMemory(u32 address) +{ + return Core::System::GetInstance().GetDSP().ReadARAM(address); +} + +void AESndAccelerator::WriteMemory(u32 address, u8 value) +{ + Core::System::GetInstance().GetDSP().WriteARAM(value, address); +} -static std::unique_ptr<Accelerator> s_accelerator = std::make_unique<AESndAccelerator>(); static constexpr std::array<s16, 16> ACCELERATOR_COEFS = {}; // all zeros void AESndUCode::SetUpAccelerator(u16 format, [[maybe_unused]] u16 gain) { // setup_accl - s_accelerator->SetSampleFormat(format); + m_accelerator.SetSampleFormat(format); // not currently implemented, but it doesn't matter since the gain is configured to be a no-op - // s_accelerator->SetGain(gain); - s_accelerator->SetStartAddress(m_parameter_block.buf_start); - s_accelerator->SetEndAddress(m_parameter_block.buf_end); - s_accelerator->SetCurrentAddress(m_parameter_block.buf_curr); - s_accelerator->SetYn1(m_parameter_block.yn1); - s_accelerator->SetYn2(m_parameter_block.yn2); - s_accelerator->SetPredScale(m_parameter_block.pds); + // m_accelerator.SetGain(gain); + m_accelerator.SetStartAddress(m_parameter_block.buf_start); + m_accelerator.SetEndAddress(m_parameter_block.buf_end); + m_accelerator.SetCurrentAddress(m_parameter_block.buf_curr); + m_accelerator.SetYn1(m_parameter_block.yn1); + m_accelerator.SetYn2(m_parameter_block.yn2); + m_accelerator.SetPredScale(m_parameter_block.pds); // All of the coefficients (COEF_A1_0 at ffa0 - COEF_A2_7 at ffaf) are set to 0 } @@ -363,7 +359,7 @@ void AESndUCode::DoMixing() while (counter_h >= 1) { counter_h--; - new_r = s_accelerator->Read(ACCELERATOR_COEFS.data()); + new_r = m_accelerator.Read(ACCELERATOR_COEFS.data()); new_l = new_r; } break; @@ -374,8 +370,8 @@ void AESndUCode::DoMixing() while (counter_h >= 1) { counter_h--; - new_r = s_accelerator->Read(ACCELERATOR_COEFS.data()); - new_l = s_accelerator->Read(ACCELERATOR_COEFS.data()); + new_r = m_accelerator.Read(ACCELERATOR_COEFS.data()); + new_l = m_accelerator.Read(ACCELERATOR_COEFS.data()); } break; // falls through to mix_samples normally @@ -385,7 +381,7 @@ void AESndUCode::DoMixing() while (counter_h >= 1) { counter_h--; - new_r = s_accelerator->Read(ACCELERATOR_COEFS.data()); + new_r = m_accelerator.Read(ACCELERATOR_COEFS.data()); new_l = new_r; } new_r ^= 0x8000; @@ -398,8 +394,8 @@ void AESndUCode::DoMixing() while (counter_h >= 1) { counter_h--; - new_r = s_accelerator->Read(ACCELERATOR_COEFS.data()); - new_l = s_accelerator->Read(ACCELERATOR_COEFS.data()); + new_r = m_accelerator.Read(ACCELERATOR_COEFS.data()); + new_l = m_accelerator.Read(ACCELERATOR_COEFS.data()); } new_r ^= 0x8000; new_l ^= 0x8000; @@ -422,10 +418,10 @@ void AESndUCode::DoMixing() // no_mix - we don't need to do anything as we modify m_parameter_block.left/right in place } // mixer_end - back to set16 mode - m_parameter_block.pds = s_accelerator->GetPredScale(); - m_parameter_block.yn2 = s_accelerator->GetYn2(); - m_parameter_block.yn1 = s_accelerator->GetYn1(); - m_parameter_block.buf_curr = s_accelerator->GetCurrentAddress(); + m_parameter_block.pds = m_accelerator.GetPredScale(); + m_parameter_block.yn2 = m_accelerator.GetYn2(); + m_parameter_block.yn1 = m_accelerator.GetYn1(); + m_parameter_block.buf_curr = m_accelerator.GetCurrentAddress(); } // finish_voice m_parameter_block.flags |= VOICE_FINISHED; @@ -440,6 +436,6 @@ void AESndUCode::DoState(PointerWrap& p) p.Do(m_parameter_block_addr); p.Do(m_parameter_block); p.Do(m_output_buffer); - s_accelerator->DoState(p); + m_accelerator.DoState(p); } } // namespace DSP::HLE diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/AESnd.h b/Source/Core/Core/HW/DSPHLE/UCodes/AESnd.h index 649cacf159..0d55f2ed06 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/AESnd.h +++ b/Source/Core/Core/HW/DSPHLE/UCodes/AESnd.h @@ -7,12 +7,21 @@ #include <utility> #include "Common/CommonTypes.h" +#include "Core/DSP/DSPAccelerator.h" #include "Core/HW/DSPHLE/UCodes/UCodes.h" namespace DSP::HLE { class DSPHLE; +class AESndAccelerator final : public Accelerator +{ +protected: + void OnEndException() override; + u8 ReadMemory(u32 address) override; + void WriteMemory(u32 address, u8 value) override; +}; + class AESndUCode final : public UCodeInterface { public: @@ -105,6 +114,8 @@ private: std::array<s16, NUM_OUTPUT_SAMPLES * 2> m_output_buffer{}; + AESndAccelerator m_accelerator; + bool m_has_shown_unsupported_sample_format_warning = false; }; } // namespace DSP::HLE |
