From 16db420ce3fb24ac851cc603282a4ec24b721137 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 24 Nov 2023 21:08:26 +0200 Subject: [PATCH] DISASM_FLAG_VAL_FORCE disassembler parameter: always show EA, even if it is simple (An) --- disasm.cpp | 23 ++++++++++++++++------- include/disasm.h | 1 + od-win32/win32.cpp | 3 ++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/disasm.cpp b/disasm.cpp index 63d477f2..59a71680 100644 --- a/disasm.cpp +++ b/disasm.cpp @@ -212,7 +212,7 @@ static void showea_val(TCHAR *buffer, uae_u16 opcode, uaecptr addr, int size) #endif #endif - if (!(disasm_flags & DISASM_FLAG_VAL)) { + if (!(disasm_flags & (DISASM_FLAG_VAL_FORCE | DISASM_FLAG_VAL))) { goto skip; } @@ -449,7 +449,7 @@ uaecptr ShowEA_disp(uaecptr *pcp, uaecptr base, TCHAR *buffer, const TCHAR *name addr = base + outer; if (buffer) { - if (disasm_flags & DISASM_FLAG_VAL) { + if (disasm_flags & (DISASM_FLAG_VAL_FORCE | DISASM_FLAG_VAL)) { _stprintf(p, disasm_lc_hex(_T(" == $%08X")), addr); p += _tcslen(p); } @@ -472,13 +472,13 @@ uaecptr ShowEA_disp(uaecptr *pcp, uaecptr base, TCHAR *buffer, const TCHAR *name addr = base + (uae_s32)((uae_s8)disp8) + dispreg; if (buffer) { if (pcrel) { - if (disasm_flags & DISASM_FLAG_VAL) { + if (disasm_flags & (DISASM_FLAG_VAL_FORCE | DISASM_FLAG_VAL)) { _stprintf(buffer, _T("(%s%s%s,$%02x=$%08x) == $%08x"), name, regstr, mult, (uae_u8)disp8, (*pcp) += disp8, addr); } else { _stprintf(buffer, _T("(%s%s%s,$%02x=$%08x)"), name, regstr, mult, (uae_u8)disp8, (*pcp) += disp8); } } else { - if (disasm_flags & DISASM_FLAG_VAL) { + if (disasm_flags & (DISASM_FLAG_VAL_FORCE | DISASM_FLAG_VAL)) { _stprintf(buffer, _T("(%s%s%s,$%02x) == $%08x"), name, regstr, mult, (uae_u8)disp8, addr); } else { _stprintf(buffer, _T("(%s%s%s,$%02x)"), name, regstr, mult, (uae_u8)disp8); @@ -523,16 +523,25 @@ uaecptr ShowEA(void *f, uaecptr pc, uae_u16 opcode, int reg, amodes mode, wordsi case Aind: _stprintf(buffer, _T("(%c%d)"), disasm_areg, reg); addr = regs.regs[reg + 8]; + if (disasm_flags & DISASM_FLAG_VAL_FORCE) { + _stprintf(buffer + _tcslen(buffer), disasm_lc_hex(_T(" == $%08X")), addr); + } showea_val(buffer, opcode, addr, size); break; case Aipi: _stprintf(buffer, _T("(%c%d)+"), disasm_areg, reg); addr = regs.regs[reg + 8]; + if (disasm_flags & DISASM_FLAG_VAL_FORCE) { + _stprintf(buffer + _tcslen(buffer), disasm_lc_hex(_T(" == $%08X")), addr); + } showea_val(buffer, opcode, addr, size); break; case Apdi: _stprintf(buffer, _T("-(%c%d)"), disasm_areg, reg); addr = regs.regs[reg + 8] - datasizes[size]; + if (disasm_flags & DISASM_FLAG_VAL_FORCE) { + _stprintf(buffer + _tcslen(buffer), disasm_lc_hex(_T(" == $%08X")), addr); + } showea_val(buffer, opcode, addr, size); break; case Ad16: @@ -545,7 +554,7 @@ uaecptr ShowEA(void *f, uaecptr pc, uae_u16 opcode, int reg, amodes mode, wordsi _stprintf (offtxt, disasm_lc_hex(_T("$%04X")), disp16); addr = m68k_areg (regs, reg) + disp16; _stprintf(buffer, _T("(%c%d,%s)"), disasm_areg, reg, offtxt); - if (disasm_flags & DISASM_FLAG_VAL) { + if (disasm_flags & (DISASM_FLAG_VAL_FORCE | DISASM_FLAG_VAL)) { _stprintf(buffer + _tcslen(buffer), disasm_lc_hex(_T(" == $%08X")), addr); } showea_val(buffer, opcode, addr, size); @@ -564,7 +573,7 @@ uaecptr ShowEA(void *f, uaecptr pc, uae_u16 opcode, int reg, amodes mode, wordsi addr += (uae_s16)disp16; _stprintf(buffer, _T("(%s"), disasm_pcreg); _stprintf(buffer + _tcslen(buffer), disasm_lc_hex(_T(",$%04X)")), disp16 & 0xffff); - if (disasm_flags & DISASM_FLAG_VAL) { + if (disasm_flags & (DISASM_FLAG_VAL_FORCE | DISASM_FLAG_VAL)) { _stprintf(buffer + _tcslen(buffer), disasm_lc_hex(_T(" == $%08X")), addr); } showea_val(buffer, opcode, addr, size); @@ -1692,7 +1701,7 @@ static void resolve_if_jmp(TCHAR *s, uae_u32 addr) if (opcode == 0x4ef9) { // JMP x.l TCHAR *p = s + _tcslen(s); uae_u32 addr2 = get_long_debug(addr + 2); - if (disasm_flags & DISASM_FLAG_VAL) { + if (disasm_flags & (DISASM_FLAG_VAL_FORCE | DISASM_FLAG_VAL)) { _stprintf(p, disasm_lc_hex(_T(" == $%08X ")), addr2); } diff --git a/include/disasm.h b/include/disasm.h index a877c2d0..ecc72863 100644 --- a/include/disasm.h +++ b/include/disasm.h @@ -25,3 +25,4 @@ extern TCHAR disasm_hexprefix[3]; #define DISASM_FLAG_VAL 128 #define DISASM_FLAG_WORDS 256 #define DISASM_FLAG_ABSSHORTLONG 512 +#define DISASM_FLAG_VAL_FORCE 1024 diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 829011b0..a12403d7 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -5791,7 +5791,8 @@ static void target_load_debugger_config(void) { int size; - disasm_flags = DISASM_FLAG_LC_MNEMO | DISASM_FLAG_LC_REG | DISASM_FLAG_LC_SIZE | DISASM_FLAG_LC_HEX | DISASM_FLAG_CC | DISASM_FLAG_EA | DISASM_FLAG_VAL | DISASM_FLAG_WORDS; + disasm_flags = DISASM_FLAG_LC_MNEMO | DISASM_FLAG_LC_REG | DISASM_FLAG_LC_SIZE | DISASM_FLAG_LC_HEX | + DISASM_FLAG_CC | DISASM_FLAG_EA | DISASM_FLAG_VAL | DISASM_FLAG_WORDS; disasm_min_words = 5; disasm_max_words = 16; disasm_hexprefix[0] = '$'; -- 2.47.3