all repos — mgba @ cd7f7f72e1ddc092615b11b1cafe39e07403cc69

mGBA Game Boy Advance Emulator

GB Memory: Prevent accessing empty SRAM (fixes #831)
Vicki Pfau vi@endrift.com
Sat, 29 Jul 2017 15:31:29 -0700
commit

cd7f7f72e1ddc092615b11b1cafe39e07403cc69

parent

1f2ff497e2b9096cf48ecfa1b589fd52c41a5460

2 files changed, 4 insertions(+), 3 deletions(-)

jump to
M CHANGESCHANGES

@@ -16,6 +16,7 @@ - GB MBC: Fix SRAM sizes 4 and 5

- GB Video: Fix 16-bit screenshots (fixes mgba.io/i/826) - GB Core: Fix palette loading when loading a foreign config - Qt: Fix LOG argument order + - GB Memory: Prevent accessing empty SRAM (fixes mgba.io/i/831) Misc: - GBA Timer: Use global cycles for timers - GBA: Extend oddly-sized ROMs to full address space (fixes mgba.io/i/722)
M src/gb/memory.csrc/gb/memory.c

@@ -221,7 +221,7 @@ if (memory->rtcAccess) {

return memory->rtcRegs[memory->activeRtcReg]; } else if (memory->mbcRead) { return memory->mbcRead(memory, address); - } else if (memory->sramAccess) { + } else if (memory->sramAccess && memory->sram) { return memory->sramBank[address & (GB_SIZE_EXTERNAL_RAM - 1)]; } else if (memory->mbcType == GB_HuC3) { return 0x01; // TODO: Is this supposed to be the current SRAM bank?

@@ -290,7 +290,7 @@ case GB_REGION_EXTERNAL_RAM:

case GB_REGION_EXTERNAL_RAM + 1: if (memory->rtcAccess) { memory->rtcRegs[memory->activeRtcReg] = value; - } else if (memory->sramAccess) { + } else if (memory->sramAccess && memory->sram) { memory->sramBank[address & (GB_SIZE_EXTERNAL_RAM - 1)] = value; } else { memory->mbcWrite(gb, address, value);

@@ -388,7 +388,7 @@ case GB_REGION_EXTERNAL_RAM + 1:

if (memory->rtcAccess) { return memory->rtcRegs[memory->activeRtcReg]; } else if (memory->sramAccess) { - if (segment < 0) { + if (segment < 0 && memory->sram) { return memory->sramBank[address & (GB_SIZE_EXTERNAL_RAM - 1)]; } else if ((size_t) segment * GB_SIZE_EXTERNAL_RAM < gb->sramSize) { return memory->sram[(address & (GB_SIZE_EXTERNAL_RAM - 1)) + segment *GB_SIZE_EXTERNAL_RAM];