diff --git a/CHANGES b/CHANGES index 0356ef0c8..a90532f6c 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,7 @@ Features: - Discord Rich Presence now supports time elapsed - Additional scaling shaders Emulation fixes: + - GB I/O: Fix incrementing SGB controller when P14 is low (fixes mgba.io/i/2202) - GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032) - GB Video: Render SGB border when unmasking with ATTR/PAL_SET (fixes mgba.io/i/2261) - GBA: Improve timing when not booting from BIOS 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) {