diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SoundProvider.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SoundProvider.cs index aaf9296500..7aab04dfab 100644 --- a/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SoundProvider.cs +++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SoundProvider.cs @@ -17,12 +17,30 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS public void GetSamples(short[] samples) { + bool overrun = false; uint count = (uint)samples.Length; - for (uint i = 0; i < count; i++) + uint overrunOffset; + + if (bufferIndex == 0) + overrunOffset = bufferLength - 1; + else + overrunOffset = bufferIndex - 1; + + uint i = 0; + while (i < count) { - samples[i] = buffer[bufferReadOffset]; - if (bufferReadOffset != bufferIndex) - bufferReadOffset++; + if (bufferReadOffset == bufferIndex) + overrun = true; + if (!overrun) + { + samples[i++] = buffer[bufferReadOffset++]; + samples[i++] = buffer[bufferReadOffset++]; + } + else + { + samples[i++] = buffer[overrunOffset]; + samples[i++] = buffer[overrunOffset]; + } if (bufferReadOffset == bufferLength) bufferReadOffset = 0; } diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.cs index 06a4b9c952..c8a24926b6 100644 --- a/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.cs +++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.cs @@ -571,11 +571,10 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS { switch (newRegion) { - case Region.NTSC: cyclesPerSec = 14318181 / 14; break; - case Region.PAL: cyclesPerSec = 17734472 / 18; break; + case Region.NTSC: cyclesPerSec = 14318181 / 14; bufferLength = (newSampleRate / 60) * 4; break; + case Region.PAL: cyclesPerSec = 17734472 / 18; bufferLength = (newSampleRate / 50) * 4; break; } bufferFrequency = cyclesPerSec / newSampleRate; - bufferLength = newSampleRate * 2; buffer = new short[bufferLength]; waveformTable = newWaveformTable; diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.cs index b7e6c2e35e..073b3859d6 100644 --- a/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.cs +++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.cs @@ -600,6 +600,7 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS { uint pixel; uint pixelData; + bool renderEnabled = bufRect.Contains(bufPoint); for (int i = 0; i < 4; i++) { @@ -621,7 +622,7 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS pixel = pixelBuffer[pixelBufferIndex]; // plot pixel if within viewing area - if (bufRect.Contains(bufPoint)) + if (renderEnabled) { buf[bufOffset] = palette[pixel]; bufOffset++;