all repos — mgba @ d2f84e625b824c329b1653ad9cd178e83eb88bfd

mGBA Game Boy Advance Emulator

GB MBC: Fix MBC2 bit selection
Vicki Pfau vi@endrift.com
Tue, 16 Jun 2020 20:49:07 -0700
commit

d2f84e625b824c329b1653ad9cd178e83eb88bfd

parent

38d9a1c003ef0570610cab9cab70e414aa46db14

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

jump to
M CHANGESCHANGES

@@ -1,6 +1,7 @@

0.8.3: (Future) Emulation fixes: - GB MBC: Fix MBC1 RAM enable bit selection + - GB MBC: Fix MBC2 bit selection 0.8.2: (2020-06-14) Emulation fixes:
M src/gb/mbc.csrc/gb/mbc.c

@@ -474,9 +474,9 @@ void _GBMBC2(struct GB* gb, uint16_t address, uint8_t value) {

struct GBMemory* memory = &gb->memory; int shift = (address & 1) * 4; int bank = value & 0xF; - switch (address >> 13) { + switch ((address & 0xC100) >> 8) { case 0x0: - switch (value) { + switch (value & 0x0F) { case 0: memory->sramAccess = false; break;

@@ -485,7 +485,7 @@ memory->sramAccess = true;

break; default: // TODO - mLOG(GB_MBC, STUB, "MBC1 unknown value %02X", value); + mLOG(GB_MBC, STUB, "MBC2 unknown value %02X", value); break; } break;

@@ -495,7 +495,10 @@ ++bank;

} GBMBCSwitchBank(gb, bank); break; - case 0x5: + case 0x80: + case 0x81: + case 0x82: + case 0x83: if (!memory->sramAccess) { return; }

@@ -511,6 +514,9 @@ }

} static uint8_t _GBMBC2Read(struct GBMemory* memory, uint16_t address) { + if (!memory->sramAccess) { + return 0xFF; + } address &= 0x1FF; int shift = (address & 1) * 4; return (memory->sramBank[(address >> 1)] >> shift) | 0xF0;