From 2bb3daf0279ee1443cc1c55363baa6d55a1547f6 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sat, 13 Dec 2014 17:15:31 +0100 Subject: [PATCH] Zelda HLE: Implement square wave sample source. Also fix Windows build. --- Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp index d6227e425b..f11f1c9a1b 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp @@ -476,6 +476,8 @@ struct ZeldaAudioRenderer::VPB enum SamplesSourceType { + // Simple square wave at 50% amplitude and 16KHz. + SRC_SQUARE_WAVE = 0, // Samples stored in ARAM at a rate of 16 samples/9 bytes, AFC encoded, // at an arbitrary sample rate (resampling is applied). SRC_AFC_HQ_FROM_ARAM = 9, @@ -751,6 +753,11 @@ void ZeldaAudioRenderer::LoadInputSamples(MixingBuffer* buffer, VPB* vpb) switch (vpb->samples_source_type) { + case VPB::SRC_SQUARE_WAVE: + for (size_t i = 0; i < buffer->size(); ++i) + (*buffer)[i] = (i & 1) ? 0x4000 : 0xC000; + break; + case VPB::SRC_AFC_HQ_FROM_ARAM: DownloadAFCSamplesFromARAM(raw_input_samples.data() + 4, vpb, NeededRawSamplesCount(*vpb)); @@ -978,7 +985,7 @@ void ZeldaAudioRenderer::DecodeAFC(VPB* vpb, s16* dst, size_t block_count) { u32 addr = vpb->GetCurrentARAMAddr(); u8* src = (u8*)DSP::GetARAMPtr() + addr; - vpb->SetCurrentARAMAddr(addr + 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) {