mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
DSPHLE: handle offsets to a different memory region
This commit is contained in:
@ -1537,12 +1537,12 @@ void ZeldaAudioRenderer::Resample(VPB* vpb, const s16* src, MixingBuffer* dst)
|
|||||||
vpb->current_pos_frac = pos & 0xFFF;
|
vpb->current_pos_frac = pos & 0xFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* ZeldaAudioRenderer::GetARAMPtr() const
|
void* ZeldaAudioRenderer::GetARAMPtr(u32 offset) const
|
||||||
{
|
{
|
||||||
if (SConfig::GetInstance().bWii)
|
if (SConfig::GetInstance().bWii)
|
||||||
return HLEMemory_Get_Pointer(m_aram_base_addr);
|
return HLEMemory_Get_Pointer(m_aram_base_addr + offset);
|
||||||
else
|
else
|
||||||
return Core::System::GetInstance().GetDSP().GetARAMPtr();
|
return reinterpret_cast<u8*>(Core::System::GetInstance().GetDSP().GetARAMPtr()) + offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -1579,7 +1579,7 @@ void ZeldaAudioRenderer::DownloadPCMSamplesFromARAM(s16* dst, VPB* vpb, u16 requ
|
|||||||
vpb->SetCurrentARAMAddr(vpb->GetBaseAddress() + vpb->GetCurrentPosition() * sizeof(T));
|
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);
|
u16 samples_to_download = std::min(vpb->GetRemainingLength(), (u32)requested_samples_count);
|
||||||
|
|
||||||
for (u16 i = 0; i < samples_to_download; ++i)
|
for (u16 i = 0; i < samples_to_download; ++i)
|
||||||
@ -1714,7 +1714,7 @@ void ZeldaAudioRenderer::DownloadAFCSamplesFromARAM(s16* dst, VPB* vpb, u16 requ
|
|||||||
void ZeldaAudioRenderer::DecodeAFC(VPB* vpb, s16* dst, size_t block_count)
|
void ZeldaAudioRenderer::DecodeAFC(VPB* vpb, s16* dst, size_t block_count)
|
||||||
{
|
{
|
||||||
u32 addr = vpb->GetCurrentARAMAddr();
|
u32 addr = vpb->GetCurrentARAMAddr();
|
||||||
u8* src = (u8*)GetARAMPtr() + addr;
|
u8* src = (u8*)GetARAMPtr(addr);
|
||||||
vpb->SetCurrentARAMAddr(addr + (u32)block_count * vpb->samples_source_type);
|
vpb->SetCurrentARAMAddr(addr + (u32)block_count * vpb->samples_source_type);
|
||||||
|
|
||||||
for (size_t b = 0; b < block_count; ++b)
|
for (size_t b = 0; b < block_count; ++b)
|
||||||
|
@ -156,7 +156,7 @@ private:
|
|||||||
|
|
||||||
// On the Wii, base address of the MRAM or ExRAM region replacing ARAM.
|
// On the Wii, base address of the MRAM or ExRAM region replacing ARAM.
|
||||||
u32 m_aram_base_addr = 0;
|
u32 m_aram_base_addr = 0;
|
||||||
void* GetARAMPtr() const;
|
void* GetARAMPtr(u32 offset) const;
|
||||||
|
|
||||||
// Downloads PCM encoded samples from ARAM. Handles looping and other
|
// Downloads PCM encoded samples from ARAM. Handles looping and other
|
||||||
// parameters appropriately.
|
// parameters appropriately.
|
||||||
|
Reference in New Issue
Block a user