GB Serialize: Fix timing bug loading channel 4 timing

This commit is contained in:
Vicki Pfau 2020-02-01 12:17:45 -08:00
parent c79506746c
commit c61dcadac7
2 changed files with 7 additions and 2 deletions

View File

@ -1,5 +1,6 @@
0.8.1: (Future) 0.8.1: (Future)
Emulation fixes: Emulation fixes:
- GB Serialize: Fix timing bug loading channel 4 timing
- GBA Memory: Misaligned SRAM writes are ignored - GBA Memory: Misaligned SRAM writes are ignored
- GBA Serialize: Fix serializing DMA transfer register - GBA Serialize: Fix serializing DMA transfer register
- GBA Serialize: Fix audio DMA timing deserialization - GBA Serialize: Fix audio DMA timing deserialization

View File

@ -1078,9 +1078,13 @@ void GBAudioPSGDeserialize(struct GBAudio* audio, const struct GBSerializedPSGSt
LOAD_32LE(audio->ch4.lastEvent, 0, &state->ch4.lastEvent); LOAD_32LE(audio->ch4.lastEvent, 0, &state->ch4.lastEvent);
LOAD_32LE(when, 0, &state->ch4.nextEvent); LOAD_32LE(when, 0, &state->ch4.nextEvent);
if (audio->ch4.envelope.dead < 2 && audio->playingCh4) { if (audio->ch4.envelope.dead < 2 && audio->playingCh4) {
if (when - audio->ch4.lastEvent > (uint32_t) audio->sampleInterval) { if (!audio->ch4.lastEvent) {
// Back-compat: fake this value // Back-compat: fake this value
audio->ch4.lastEvent = when - audio->sampleInterval; uint32_t currentTime = mTimingCurrentTime(audio->timing);
int32_t cycles = audio->ch4.ratio ? 2 * audio->ch4.ratio : 1;
cycles <<= audio->ch4.frequency;
cycles *= 8 * audio->timingFactor;
audio->ch4.lastEvent = currentTime + (when & (cycles - 1)) - cycles;
} }
mTimingSchedule(audio->timing, &audio->ch4Event, when); mTimingSchedule(audio->timing, &audio->ch4Event, when);
} }