From 7d9d71ef549f55afa0b8ca7d6a41c074353ee087 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 25 Mar 2023 04:27:54 -0700 Subject: [PATCH] GBA Audio: Clear GB audio state when disabled --- CHANGES | 1 + src/gba/audio.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/CHANGES b/CHANGES index 546cc40ad..9fa382381 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ 0.10.2: (Future) Emulation fixes: - GBA Audio: Fix improperly deserializing GB audio registers (fixes mgba.io/i/2793) + - GBA Audio: Clear GB audio state when disabled - GBA Memory: Make VRAM access stalls only apply to BG RAM - GBA Overrides: Fix saving in PMD:RRT (JP) (fixes mgba.io/i/2862) - GBA SIO: Fix SIOCNT SI pin value after attaching player 2 (fixes mgba.io/i/2805) diff --git a/src/gba/audio.c b/src/gba/audio.c index 226fa7c25..12c6a8754 100644 --- a/src/gba/audio.c +++ b/src/gba/audio.c @@ -231,8 +231,22 @@ void GBAAudioWriteSOUNDCNT_HI(struct GBAAudio* audio, uint16_t value) { } void GBAAudioWriteSOUNDCNT_X(struct GBAAudio* audio, uint16_t value) { + GBAAudioSample(audio, mTimingCurrentTime(&audio->p->timing)); audio->enable = GBAudioEnableGetEnable(value); GBAudioWriteNR52(&audio->psg, value); + if (!audio->enable) { + int i; + for (i = REG_SOUND1CNT_LO; i < REG_SOUNDCNT_HI; i += 2) { + audio->p->memory.io[i >> 1] = 0; + } + audio->psg.ch3.size = 0; + audio->psg.ch3.bank = 0; + audio->psg.ch3.volume = 0; + audio->volume = 0; + audio->volumeChA = 0; + audio->volumeChB = 0; + audio->p->memory.io[REG_SOUNDCNT_HI >> 1] &= 0xFF00; + } } void GBAAudioWriteSOUNDBIAS(struct GBAAudio* audio, uint16_t value) {