diff options
| author | Pierre Bourdon <delroth@gmail.com> | 2014-12-20 03:42:40 +0100 |
|---|---|---|
| committer | Pierre Bourdon <delroth@gmail.com> | 2015-08-14 16:01:29 +0200 |
| commit | 91fade5e8940fe0cd5ad7d0707a9d557bb33d37c (patch) | |
| tree | 698382315e84b928ce042e54783bb0e1aded9b86 /Source/Core | |
| parent | 63712e58fd82d3a607af7433279b2d66619b0b4c (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.cpp | 9 |
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, |
