Debugger: Fixed disassembler incorrectly calculating jump destinations and caching the wrong data as a result

This commit is contained in:
Sour 2019-01-03 14:49:30 -05:00
parent 859f7e912f
commit 86ff0cdf2b
2 changed files with 4 additions and 11 deletions

View file

@ -186,19 +186,12 @@ int32_t DisassemblyInfo::GetMemoryValue(State& cpuState, MemoryManager* memoryMa
}
}
int32_t DisassemblyInfo::GetJumpDestination(uint16_t pc, MemoryManager* memoryManager)
uint16_t DisassemblyInfo::GetJumpDestination(uint16_t pc, MemoryManager* memoryManager)
{
int32_t address = -1;
if(_opMode == AddrMode::Rel || _opMode == AddrMode::Abs) {
address = GetOpAddr(pc);
return GetOpAddr(pc);
} else if(_opMode == AddrMode::Ind) {
address = GetIndirectJumpDestination(memoryManager);
}
if(address >= 0 && address <= 0xFFFF) {
return memoryManager->DebugRead(address);
} else {
return -1;
return GetIndirectJumpDestination(memoryManager);
}
}

View file

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