summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorPierre Bourdon <delroth@gmail.com>2014-12-20 03:42:40 +0100
committerPierre Bourdon <delroth@gmail.com>2015-08-14 16:01:29 +0200
commit91fade5e8940fe0cd5ad7d0707a9d557bb33d37c (patch)
tree698382315e84b928ce042e54783bb0e1aded9b86 /Source/Core
parent63712e58fd82d3a607af7433279b2d66619b0b4c (diff)
Zelda HLE: Properly implement the square wave generation.
Zelda TWW magic meter works properly now.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp9
1 files changed, 8 insertions, 1 deletions
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,