From 320ed402b735d77351e1e6a8849ca1263cf9243e Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 21 Nov 2018 23:10:37 -0500 Subject: [PATCH] GBA Savedata: Fix EEPROM writing codepath when savetype is not EEPROM --- CHANGES | 1 + src/gba/dma.c | 4 +++- src/gba/memory.c | 6 +++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 0c710f6be..35e1cc55b 100644 --- a/CHANGES +++ b/CHANGES @@ -127,6 +127,7 @@ Bugfixes: - Qt: Fix mapping analog triggers (fixes mgba.io/i/495) - Qt: Grab focus when game starts (fixes mgba.io/i/804) - Core: Remember to deinit proxy ring FIFO + - GBA Savedata: Fix EEPROM writing codepath when savetype is not EEPROM Misc: - mGUI: Add SGB border configuration option - mGUI: Add support for different settings types diff --git a/src/gba/dma.c b/src/gba/dma.c index cf5174fdb..2eded798d 100644 --- a/src/gba/dma.c +++ b/src/gba/dma.c @@ -282,7 +282,9 @@ void GBADMAService(struct GBA* gba, int number, struct GBADMA* info) { mLOG(GBA_MEM, INFO, "Detected EEPROM savegame"); GBASavedataInitEEPROM(&memory->savedata); } - GBASavedataWriteEEPROM(&memory->savedata, memory->dmaTransferRegister, wordsRemaining); + if (memory->savedata.type == SAVEDATA_EEPROM) { + GBASavedataWriteEEPROM(&memory->savedata, memory->dmaTransferRegister, wordsRemaining); + } } else { cpu->memory.store16(cpu, dest, memory->dmaTransferRegister, 0); diff --git a/src/gba/memory.c b/src/gba/memory.c index 384fd81cc..53fd57304 100644 --- a/src/gba/memory.c +++ b/src/gba/memory.c @@ -892,7 +892,11 @@ void GBAStore16(struct ARMCore* cpu, uint32_t address, int16_t value, int* cycle mLOG(GBA_MEM, INFO, "Detected EEPROM savegame"); GBASavedataInitEEPROM(&memory->savedata); } - GBASavedataWriteEEPROM(&memory->savedata, value, 1); + if (memory->savedata.type == SAVEDATA_EEPROM) { + GBASavedataWriteEEPROM(&memory->savedata, value, 1); + break; + } + mLOG(GBA_MEM, GAME_ERROR, "Bad memory Store16: 0x%08X", address); break; case REGION_CART_SRAM: case REGION_CART_SRAM_MIRROR: