From 91fade5e8940fe0cd5ad7d0707a9d557bb33d37c Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Sat, 20 Dec 2014 03:42:40 +0100 Subject: [PATCH] Zelda HLE: Properly implement the square wave generation. Zelda TWW magic meter works properly now. --- 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 39b679e00d..a679f55149 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp @@ -761,9 +761,16 @@ void ZeldaAudioRenderer::LoadInputSamples(MixingBuffer* buffer, VPB* vpb) switch (vpb->samples_source_type) { case VPB::SRC_SQUARE_WAVE: + { + u32 pos = vpb->current_pos_frac << 1; for (size_t i = 0; i < buffer->size(); ++i) - (*buffer)[i] = (i & 1) ? 0x4000 : 0xC000; + { + (*buffer)[i] = ((pos >> 16) & 1) ? 0x4000 : 0xC000; + pos += vpb->resampling_ratio; + } + vpb->current_pos_frac = (pos >> 1) & 0xFFFF; break; + } case VPB::SRC_AFC_HQ_FROM_ARAM: DownloadAFCSamplesFromARAM(raw_input_samples.data() + 4, vpb,