From c5c69486532824247fc6d6bfeea4c142662fb0bb Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 5 Sep 2021 12:20:46 -0700 Subject: [PATCH] GB I/O: Fix incrementing SGB controller when P14 is low (fixes #2202) --- CHANGES | 1 + src/gb/io.c | 14 +++++--------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index d04a957c4..f1ac1c151 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,6 @@ 0.9.3: (Future) Emulation fixes: + - GB I/O: Fix incrementing SGB controller when P14 is low (fixes mgba.io/i/2202) - GB Video: Render SGB border when unmasking with ATTR/PAL_SET (fixes mgba.io/i/2261) - GBA SIO: Fix SI value for unattached MULTI mode - GBA Video: Fix backdrop color if DISPCNT is first set to 0 (fixes mgba.io/i/2260) diff --git a/src/gb/io.c b/src/gb/io.c index 00f75ffd7..74ce4caee 100644 --- a/src/gb/io.c +++ b/src/gb/io.c @@ -119,19 +119,15 @@ static void _writeSGBBits(struct GB* gb, int bits) { if (bits == gb->currentSgbBits) { return; } - switch (bits) { - case 0: - case 1: - if (gb->currentSgbBits & 2) { - gb->sgbIncrement = !gb->sgbIncrement; - } - break; - case 3: + if (bits & 2) { if (gb->sgbIncrement) { gb->sgbIncrement = false; gb->sgbCurrentController = (gb->sgbCurrentController + 1) & gb->sgbControllers; } - break; + } else { + if (gb->currentSgbBits & 2) { + gb->sgbIncrement = !gb->sgbIncrement; + } } gb->currentSgbBits = bits; if (gb->sgbBit == 128 && bits == 2) {