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)
|
||||
Emulation fixes:
|
||||
- GB Serialize: Fix timing bug loading channel 4 timing
|
||||
- GBA Memory: Misaligned SRAM writes are ignored
|
||||
- GBA Serialize: Fix serializing DMA transfer register
|
||||
- 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(when, 0, &state->ch4.nextEvent);
|
||||
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
|
||||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue