summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2023-10-04 06:57:01 +0200
committerGitHub <noreply@github.com>2023-10-04 06:57:01 +0200
commit68c9362449b28d708fc3aa77aa425ecbe6aa7729 (patch)
tree392af974bc7490972247cb3171ed3f7bcd97d6ae /Source/Core
parentc86a0a04dd355ba9c7c475ae89c50cbff2e88d31 (diff)
parentcc403c1044a24e2226cb36b05aa6ffcf796a8628 (diff)
Merge pull request #12089 from stblr/gamecube-zelda-hle-in-wii-mode
GameCube Zelda HLE in Wii mode
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp13
-rw-r--r--Source/Core/Core/HW/DSPHLE/UCodes/Zelda.h6
2 files changed, 9 insertions, 10 deletions
diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp
index 4745d2b9b5..ec5f4ef2c6 100644
--- a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp
+++ b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp
@@ -11,6 +11,7 @@
#include "Common/CommonTypes.h"
#include "Common/Logging/Log.h"
#include "Common/Swap.h"
+#include "Core/ConfigManager.h"
#include "Core/HW/DSP.h"
#include "Core/HW/DSPHLE/DSPHLE.h"
#include "Core/HW/DSPHLE/MailHandler.h"
@@ -1536,12 +1537,12 @@ void ZeldaAudioRenderer::Resample(VPB* vpb, const s16* src, MixingBuffer* dst)
vpb->current_pos_frac = pos & 0xFFF;
}
-void* ZeldaAudioRenderer::GetARAMPtr() const
+void* ZeldaAudioRenderer::GetARAMPtr(u32 offset) const
{
- if (m_aram_base_addr)
- return HLEMemory_Get_Pointer(m_aram_base_addr);
+ if (SConfig::GetInstance().bWii)
+ return HLEMemory_Get_Pointer(m_aram_base_addr + offset);
else
- return Core::System::GetInstance().GetDSP().GetARAMPtr();
+ return reinterpret_cast<u8*>(Core::System::GetInstance().GetDSP().GetARAMPtr()) + offset;
}
template <typename T>
@@ -1578,7 +1579,7 @@ void ZeldaAudioRenderer::DownloadPCMSamplesFromARAM(s16* dst, VPB* vpb, u16 requ
vpb->SetCurrentARAMAddr(vpb->GetBaseAddress() + vpb->GetCurrentPosition() * sizeof(T));
}
- T* src_ptr = (T*)((u8*)GetARAMPtr() + vpb->GetCurrentARAMAddr());
+ T* src_ptr = (T*)GetARAMPtr(vpb->GetCurrentARAMAddr());
u16 samples_to_download = std::min(vpb->GetRemainingLength(), (u32)requested_samples_count);
for (u16 i = 0; i < samples_to_download; ++i)
@@ -1713,7 +1714,7 @@ void ZeldaAudioRenderer::DownloadAFCSamplesFromARAM(s16* dst, VPB* vpb, u16 requ
void ZeldaAudioRenderer::DecodeAFC(VPB* vpb, s16* dst, size_t block_count)
{
u32 addr = vpb->GetCurrentARAMAddr();
- u8* src = (u8*)GetARAMPtr() + addr;
+ u8* src = (u8*)GetARAMPtr(addr);
vpb->SetCurrentARAMAddr(addr + (u32)block_count * vpb->samples_source_type);
for (size_t b = 0; b < block_count; ++b)
diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.h b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.h
index 33963a8dd6..a0142dc957 100644
--- a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.h
+++ b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.h
@@ -154,11 +154,9 @@ private:
// Coefficients used for resampling.
std::array<s16, 0x100> m_resampling_coeffs{};
- // If non zero, base MRAM address for sound data transfers from ARAM. On
- // the Wii, this points to some MRAM location since there is no ARAM to be
- // used. If zero, use the top of ARAM.
+ // On the Wii, base address of the MRAM or ExRAM region replacing ARAM.
u32 m_aram_base_addr = 0;
- void* GetARAMPtr() const;
+ void* GetARAMPtr(u32 offset) const;
// Downloads PCM encoded samples from ARAM. Handles looping and other
// parameters appropriately.