From 2c1fcf96915523fa527fb97df672c1b70f43962b Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Sat, 28 Sep 2024 08:55:21 -0700 Subject: [PATCH] Fix savestates not writing back GPIO variables to gpioBase Resolves #3294 Also see https://github.com/TASEmulators/BizHawk/issues/4060 (this is fixed with this patch). --- src/gba/cart/gpio.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/gba/cart/gpio.c b/src/gba/cart/gpio.c index fde4e3714..15f082849 100644 --- a/src/gba/cart/gpio.c +++ b/src/gba/cart/gpio.c @@ -465,6 +465,18 @@ void GBAHardwareSerialize(const struct GBACartridgeHardware* hw, struct GBASeria STORE_16(hw->direction, 0, &state->hw.pinDirection); state->hw.devices = hw->devices; + if (hw->gpioBase) { + if (hw->readWrite) { + STORE_16(hw->pinState, 0, hw->gpioBase); + STORE_16(hw->direction, 2, hw->gpioBase); + STORE_16(hw->readWrite, 4, hw->gpioBase); + } else { + hw->gpioBase[0] = 0; + hw->gpioBase[1] = 0; + hw->gpioBase[2] = 0; + } + } + STORE_32(hw->rtc.bytesRemaining, 0, &state->hw.rtcBytesRemaining); STORE_32(hw->rtc.transferStep, 0, &state->hw.rtcTransferStep); STORE_32(hw->rtc.bitsRead, 0, &state->hw.rtcBitsRead);