Permalink
Browse files

GB Memory: Prevent accessing empty SRAM (fixes #831)

  • Loading branch information...
endrift committed Jul 29, 2017
1 parent ab5e392 commit aa9994a48692a394d69061483a74cd70405ede20
Showing with 4 additions and 3 deletions.
  1. +1 −0 CHANGES
  2. +3 −3 src/gb/memory.c
View
@@ -9,6 +9,7 @@ Bugfixes:
- 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:
- Qt: Don't rebuild library view if style hasn't changed
View
@@ -220,7 +220,7 @@ uint8_t GBLoad8(struct LR35902Core* cpu, uint16_t address) {
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?
@@ -289,7 +289,7 @@ void GBStore8(struct LR35902Core* cpu, uint16_t address, int8_t value) {
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 if (memory->mbcType == GB_MBC7) {
GBMBC7Write(memory, address, value);
@@ -387,7 +387,7 @@ uint8_t GBView8(struct LR35902Core* cpu, uint16_t address, int segment) {
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];

0 comments on commit aa9994a

Please sign in to comment.