From f13676cfd3b48f36b24f95178743af5a2c377b06 Mon Sep 17 00:00:00 2001 From: qwertymodo Date: Thu, 3 Nov 2016 13:10:01 -0700 Subject: [PATCH] Fix MSU-1 sample buffer size --- apu/apu.cpp | 17 +++++++++++++---- ppu.cpp | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/apu/apu.cpp b/apu/apu.cpp index c897e90f..6a83d300 100644 --- a/apu/apu.cpp +++ b/apu/apu.cpp @@ -336,10 +336,19 @@ bool8 S9xMixSamples (uint8 *buffer, int sample_count) { if (msu::resampler->avail() >= sample_count) { - uint8 *msu_sample = new uint8[sizeof(dest)]; + uint8 *msu_sample = new uint8[sample_count * 2]; msu::resampler->read((short *)msu_sample, sample_count); - for(uint32 i = 0; i < sizeof(dest); ++i) - dest[i] += msu_sample[i]; + for (uint32 i = 0; i < sample_count * 2; i += 2) + { + int16 s1, s2; + ((uint8 *)&s1)[0] = dest[i]; + ((uint8 *)&s1)[1] = dest[i + 1]; + ((uint8 *)&s2)[0] = dest[i]; + ((uint8 *)&s2)[1] = dest[i + 1]; + s1 += s2; + dest[i] = ((uint8 *)&s1)[0]; + dest[i+1] = ((uint8 *)&s1)[1]; + } } } } @@ -481,7 +490,7 @@ bool8 S9xInitSound (int buffer_ms, int lag_ms) if (Settings.SixteenBitSound) spc::buffer_size <<= 1; if (Settings.MSU1) - msu::buffer_size = buffer_ms * 44100 / 1000; + msu::buffer_size = (buffer_ms * 44100 / 1000) << 2; // 16-bit, Stereo printf("Sound buffer size: %d (%d samples)\n", spc::buffer_size, sample_count); diff --git a/ppu.cpp b/ppu.cpp index 682fd880..fe0328fa 100644 --- a/ppu.cpp +++ b/ppu.cpp @@ -1130,6 +1130,7 @@ uint8 S9xGetPPU (uint16 Address) if ((Address & 0xffc0) == 0x2140) // APUIO0, APUIO1, APUIO2, APUIO3 // read_port will run the APU until given APU time before reading value return (S9xAPUReadPort(Address & 3)); + else if (Address <= 0x2183) { uint8 byte;