From 46663e8e5372de60a7126e8a1ee16430a0018fac Mon Sep 17 00:00:00 2001 From: Sour Date: Thu, 7 Mar 2019 21:30:16 -0500 Subject: [PATCH] Debugger: Fixed relative branch disassembly address --- Core/DisassemblyInfo.cpp | 10 ++++++---- Core/DisassemblyInfo.h | 1 - 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Core/DisassemblyInfo.cpp b/Core/DisassemblyInfo.cpp index 9e1812c..92d4ff9 100644 --- a/Core/DisassemblyInfo.cpp +++ b/Core/DisassemblyInfo.cpp @@ -40,7 +40,9 @@ void DisassemblyInfo::GetDisassembly(string &out, uint32_t memoryAddr) FastString operand; if(_opSize > 1) { operand.Write('$'); - if(_opSize == 2) { + if(_addrMode == AddrMode::Rel || _addrMode == AddrMode::RelLng) { + operand.Write(HexUtilities::ToHex24(opAddr)); + } else if(_opSize == 2) { operand.Write(HexUtilities::ToHex((uint8_t)opAddr)); } else if(_opSize == 3) { operand.Write(HexUtilities::ToHex((uint16_t)opAddr)); @@ -100,11 +102,11 @@ uint32_t DisassemblyInfo::GetOperandAddress(uint32_t memoryAddr) opAddr = _byteCode[1] | (_byteCode[2] << 8) | (_byteCode[3] << 16); } - if(_addrMode == AddrMode::Rel) { + if(_addrMode == AddrMode::Rel || _addrMode == AddrMode::RelLng) { if(_opSize == 2) { - opAddr = (int8_t)opAddr + memoryAddr + 2; + opAddr = (memoryAddr & 0xFF0000) | (((int8_t)opAddr + memoryAddr + 2) & 0xFFFF); } else { - opAddr = (int16_t)opAddr + memoryAddr + 2; + opAddr = (memoryAddr & 0xFF0000) | (((int16_t)opAddr + memoryAddr + 2) & 0xFFFF); } } diff --git a/Core/DisassemblyInfo.h b/Core/DisassemblyInfo.h index e6905bc..dbc73ef 100644 --- a/Core/DisassemblyInfo.h +++ b/Core/DisassemblyInfo.h @@ -13,7 +13,6 @@ class DisassemblyInfo public: static string OpName[256]; static AddrMode OpMode[256]; - static uint8_t OpSize[256]; private: uint8_t _byteCode[4];