MBC2 working
This commit is contained in:
18
src/mbc.cpp
18
src/mbc.cpp
@@ -64,6 +64,14 @@ Byte *AddressSpace::MBCRead(const Word address) {
|
||||
if (address <= 0x7FFF)
|
||||
return &romRamSelect;
|
||||
}
|
||||
if (MBC == MBC2 || MBC == MBC2Battery) {
|
||||
if (address <= 0x3FFF) {
|
||||
if (address & 0x0100)
|
||||
return &romBankRegister;
|
||||
else
|
||||
return &ramEnable;
|
||||
}
|
||||
}
|
||||
return &dummyVal;
|
||||
}
|
||||
|
||||
@@ -93,8 +101,7 @@ void AddressSpace::MBCUpdate() {
|
||||
|
||||
loadRomBank();
|
||||
loadRamBank();
|
||||
}
|
||||
if (MBC == MBC1Ram || MBC == MBC1RamBattery) {
|
||||
} else if (MBC == MBC1Ram || MBC == MBC1RamBattery) {
|
||||
// Selected ROM Bank = (Secondary Bank << 5) + ROM Bank
|
||||
romBankRegister &= 0b11111;
|
||||
twoBitBankRegister &= 0b11;
|
||||
@@ -119,7 +126,9 @@ void AddressSpace::MBCUpdate() {
|
||||
loadRomBank();
|
||||
loadRamBank();
|
||||
} else if (MBC == MBC2 || MBC == MBC2Battery) {
|
||||
// TODO
|
||||
selectedRomBank = romBankRegister & 0x0F;
|
||||
loadRomBank();
|
||||
loadRamBank();
|
||||
} else if (MBC == MBC3 || MBC == MBC3TimerBattery) {
|
||||
romBankRegister &= 0b11111;
|
||||
twoBitBankRegister &= 0b11;
|
||||
@@ -168,7 +177,8 @@ void AddressSpace::createRamBank() {
|
||||
}
|
||||
|
||||
void AddressSpace::loadRamBank() {
|
||||
if (cartridgeRam != nullptr)
|
||||
if (cartridgeRam != nullptr) {
|
||||
memoryLayout.externalRam =
|
||||
cartridgeRam + (RAM_BANK_SIZE * selectedExternalRamBank);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user