mirror of https://github.com/mgba-emu/mgba.git
GB Serialize: Fix timing bug loading channel 4 timing
This commit is contained in:
parent
c79506746c
commit
c61dcadac7
1
CHANGES
1
CHANGES
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue