enums and RTC work
This commit is contained in:
19
src/mbc.cpp
19
src/mbc.cpp
@@ -1,7 +1,8 @@
|
||||
#include "addressSpace.hpp"
|
||||
#include "defines.hpp"
|
||||
|
||||
void AddressSpace::determineMBCInfo() {
|
||||
MBC = static_cast<MBCType>(memoryLayout.romBank0[0x147]);
|
||||
MBC = static_cast<MBCType_enum>(memoryLayout.romBank0[0x147]);
|
||||
romSize = 32768 * (1 << memoryLayout.romBank0[0x147]);
|
||||
romBanks = 1 << (memoryLayout.romBank0[0x147] + 1);
|
||||
|
||||
@@ -130,17 +131,33 @@ void AddressSpace::MBCUpdate() {
|
||||
loadRamBank();
|
||||
} else if (MBC == MBC2 || MBC == MBC2Battery) {
|
||||
selectedRomBank = romBankRegister & 0x0F;
|
||||
selectedExternalRamBank = 0;
|
||||
|
||||
loadRomBank();
|
||||
loadRamBank();
|
||||
} else if (MBC == MBC3 || MBC == MBC3TimerBattery) {
|
||||
selectedRomBank = romBankRegister & 0x7F;
|
||||
selectedExternalRamBank = 0;
|
||||
|
||||
if (MBC == MBC3TimerBattery) {
|
||||
if(ramBankRTCRegister >= 0x8 && ramBankRTCRegister <= 0xC)
|
||||
enabledRTCRegister = static_cast<enabledRTCRegister_enum>(ramBankRTCRegister);
|
||||
else
|
||||
enabledRTCRegister = NONE;
|
||||
}
|
||||
loadRomBank();
|
||||
loadRamBank();
|
||||
} else if (MBC == MBC3Ram || MBC == MBC3RamBattery ||
|
||||
MBC == MBC3TimerRamBattery) {
|
||||
selectedRomBank = romBankRegister & 0x7F;
|
||||
selectedExternalRamBank = ramBankRTCRegister & 0b11;
|
||||
|
||||
if (MBC == MBC3TimerRamBattery) {
|
||||
if(ramBankRTCRegister >= 0x8 && ramBankRTCRegister <= 0xC)
|
||||
enabledRTCRegister = static_cast<enabledRTCRegister_enum>(ramBankRTCRegister);
|
||||
else
|
||||
enabledRTCRegister = NONE;
|
||||
}
|
||||
loadRomBank();
|
||||
loadRamBank();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user