Debugger: Fixed effective address display for indirect jump
This commit is contained in:
parent
c24df95f92
commit
a3a91ede59
2 changed files with 15 additions and 2 deletions
|
@ -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:
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Reference in a new issue