CX4: Fixed bug when jumping to address 0 in a page

This commit is contained in:
Sour 2019-08-04 12:30:09 -04:00
parent ea4119f775
commit 316e22d843
2 changed files with 8 additions and 5 deletions

View file

@ -88,11 +88,14 @@ void Cx4::Run()
} else { } else {
_console->ProcessCx4Exec(); _console->ProcessCx4Exec();
uint16_t opCode = _prgRam[_state.Cache.Page][_state.PC++]; uint16_t opCode = _prgRam[_state.Cache.Page][_state.PC++];
Exec(opCode);
if(_state.PC == 0) { if(_state.PC == 0) {
//If execution reached the end of the page, start loading the next page
//This must be done BEFORE running the instruction (otherwise a jump/branch to address 0 will trigger this)
SwitchCachePage(); SwitchCachePage();
} }
Exec(opCode);
} }
} }
} }

View file

@ -15,8 +15,8 @@ void Cx4DisUtils::GetDisassembly(DisassemblyInfo &info, string &out, uint32_t me
auto writeSrc = [&str, param2]() -> void { auto writeSrc = [&str, param2]() -> void {
switch(param2 & 0x7F) { switch(param2 & 0x7F) {
case 0x00: str.Write("A"); break; case 0x00: str.Write("A"); break;
case 0x01: str.Write("MULTL"); break; case 0x01: str.Write("MULTH"); break;
case 0x02: str.Write("MULTH"); break; case 0x02: str.Write("MULTL"); break;
case 0x03: str.Write("MDR"); break; case 0x03: str.Write("MDR"); break;
case 0x08: str.Write("ROM"); break; case 0x08: str.Write("ROM"); break;
case 0x0C: str.Write("RAM"); break; case 0x0C: str.Write("RAM"); break;
@ -205,7 +205,7 @@ void Cx4DisUtils::GetDisassembly(DisassemblyInfo &info, string &out, uint32_t me
case 0xE8: str.WriteAll("WRRAM A, RAM:", '0' + param1); break; case 0xE8: str.WriteAll("WRRAM A, RAM:", '0' + param1); break;
case 0xEC: str.WriteAll("WRRAM DPR+#$", HexUtilities::ToHex(param2), ", RAM:", '0' + param1); break; case 0xEC: str.WriteAll("WRRAM DPR+#$", HexUtilities::ToHex(param2), ", RAM:", '0' + param1); break;
case 0xF0: str.WriteAll("SWAP A, R", std::to_string(param2)); break; case 0xF0: str.WriteAll("SWAP A, R", std::to_string(param2 & 0x0F)); break;
case 0xF4: str.Write("???"); break; case 0xF4: str.Write("???"); break;
case 0xF8: str.Write("???"); break; case 0xF8: str.Write("???"); break;
case 0xFC: str.Write("STOP"); break; case 0xFC: str.Write("STOP"); break;