Debugger: Fixed effective address display for indirect jump

This commit is contained in:
Sour 2019-01-02 21:27:52 -05:00
parent c24df95f92
commit a3a91ede59
2 changed files with 15 additions and 2 deletions

View file

@ -192,6 +192,19 @@ int32_t DisassemblyInfo::GetMemoryValue(State& cpuState, MemoryManager* memoryMa
}
}
uint16_t DisassemblyInfo::GetIndirectJumpDestination(MemoryManager* memoryManager)
{
uint16_t addr = _byteCode[1] | (_byteCode[2] << 8);
if((addr & 0xFF) == 0xFF) {
//CPU bug when indirect address starts at the end of a page
uint8_t lo = memoryManager->DebugRead(addr);
uint8_t hi = memoryManager->DebugRead(addr & 0xFF00);
return lo | (hi << 8);
} else {
return memoryManager->DebugReadWord(addr);
}
}
void DisassemblyInfo::GetEffectiveAddressString(string &out, State& cpuState, MemoryManager* memoryManager, LabelManager* labelManager)
{
if(_opMode <= AddrMode::Abs) {
@ -255,8 +268,7 @@ int32_t DisassemblyInfo::GetEffectiveAddress(State& cpuState, MemoryManager* mem
}
case AddrMode::Ind: {
uint8_t zeroAddr = _byteCode[1];
return memoryManager->DebugRead(zeroAddr) | memoryManager->DebugRead((uint8_t)(zeroAddr + 1)) << 8;
return GetIndirectJumpDestination(memoryManager);
}
case AddrMode::AbsX:

View file

@ -37,6 +37,7 @@ public:
void GetEffectiveAddressString(string &out, State& cpuState, MemoryManager* memoryManager, LabelManager* labelManager);
int32_t GetMemoryValue(State& cpuState, MemoryManager* memoryManager);
uint16_t GetIndirectJumpDestination(MemoryManager* memoryManager);
void ToString(string &out, uint32_t memoryAddr, MemoryManager* memoryManager, LabelManager* labelManager, bool extendZeroPage);
void GetByteCode(string &out);
uint32_t GetSize();