]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
fi debugger command assembler support
authorToni Wilen <twilen@winuae.net>
Sat, 16 Jan 2021 14:19:17 +0000 (16:19 +0200)
committerToni Wilen <twilen@winuae.net>
Sat, 16 Jan 2021 14:19:17 +0000 (16:19 +0200)
debug.cpp
disasm.cpp
include/disasm.h
include/newcpu.h
newcpu.cpp
od-win32/debug_win32.cpp

index 2ee5af1bdafec64d2db2e2f71263eededabb41ff..5a596326397d47bab0de9f8c9406776e0e653f58 100644 (file)
--- a/debug.cpp
+++ b/debug.cpp
@@ -114,15 +114,16 @@ void activate_debugger (void)
        if (isfullscreen() > 0)
                return;
 
+       if (debugger_active) {
+               // already in debugger but some break point triggered
+               // during disassembly etc..
+               return;
+       }
        debugger_load_libraries();
 
        inside_debugger = 1;
        debug_pc = 0xffffffff;
        trace_mode = 0;
-       if (debugger_active) {
-               write_log(_T("Debugger already active!?\n"));
-               return;
-       }
        debug_cycles();
        debugger_active = 1;
        set_special (SPCFLAG_BRK);
@@ -4811,19 +4812,33 @@ int instruction_breakpoint (TCHAR **c)
                        }
                        return 0;
                } else if (nc == 'I') {
-                       next_char (c);
+                       uae_u16 opcodes[32];
+                       next_char(c);
+                       ignore_ws(c);
                        trace_param[1] = 0x10000;
                        trace_param[2] = 0x10000;
-                       if (more_params(c)) {
-                               trace_param[0] = readhex(c);
-                               if (more_params(c)) {
-                                       trace_param[1] = readhex(c);
+
+                       int w = m68k_asm(*c, opcodes, 0);
+                       if (w > 0) {
+                               trace_param[0] = opcodes[0];
+                               if (w > 1) {
+                                       trace_param[1] = opcodes[1];
+                                       if (w > 2) {
+                                               trace_param[2] = opcodes[2];
+                                       }
                                }
+                       } else {
                                if (more_params(c)) {
-                                       trace_param[2] = readhex(c);
+                                       trace_param[0] = readhex(c);
+                                       if (more_params(c)) {
+                                               trace_param[1] = readhex(c);
+                                       }
+                                       if (more_params(c)) {
+                                               trace_param[2] = readhex(c);
+                                       }
+                               } else {
+                                       trace_param[0] = 0x10000;
                                }
-                       } else {
-                               trace_param[0] = 0x10000;
                        }
                        trace_mode = TRACE_MATCH_INS;
                        return 1;
index 93471cad19391f8efa3912a6f8457cbc73b7118e..19316e3fa589e7b4d2c5eb931fe785a5e8cec458 100644 (file)
@@ -897,8 +897,12 @@ static int asm_ispc(const TCHAR *s)
 static uae_u32 asmgetval(const TCHAR *s)
 {
        TCHAR *endptr;
-       if (s[0] == '-')
+       if (s[0] == '$') {
+               s++;
+       }
+       if (s[0] == '-') {
                return _tcstol(s, &endptr, 16);
+       }
        return _tcstoul(s, &endptr, 16);
 }
 
@@ -996,7 +1000,10 @@ static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, int *extcnt, uae_u1
                                startptr = s + 2;
                                *v = _tcstol(startptr, &endptr, 10);
                        } else {
-                               startptr = s + 1;
+                               if (s[1] == '$')
+                                       startptr = s + 2;
+                               else
+                                       startptr = s + 1;
                                *v = _tcstol(startptr, &endptr, 16);
                        }
                        if (endptr == startptr || endptr[0] != ',')
@@ -1022,7 +1029,10 @@ static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, int *extcnt, uae_u1
                                        startptr = s + 2;
                                        *v = _tcstol(startptr, &endptr, 10);
                                } else {
-                                       startptr = s + 1;
+                                       if (s[1] == '$')
+                                               startptr = s + 2;
+                                       else
+                                               startptr = s + 1;
                                        *v = _tcstol(startptr, &endptr, 16);
                                }
                                if (endptr == startptr || endptr[0] != ',')
@@ -1684,8 +1694,29 @@ static uaecptr disasm_mmu030(uaecptr pc, uae_u16 opcode, uae_u16 extra, struct i
        return pc;
 }
 
+static uae_u16 get_disasm_word(uaecptr pc, uae_u16 *bufpc, int bufpcsizep, int offset)
+{
+       offset /= 2;
+       if (bufpc) {
+               if (bufpcsizep > offset) {
+                       return bufpc[offset];
+               }
+               return 0;
+       } else {
+               return get_word_debug(pc + offset * 2);
+       }
+}
+static void add_disasm_word(uaecptr *pcp, uae_u16 **bufpcp, int *bufpcsizep, int add)
+{
+       if (*bufpcp) {
+               *bufpcp += add;
+               *bufpcsizep -= add;
+       } else {
+               *pcp += add;
+       }
+}
 
-uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, uaecptr lastpc, int safemode)
+uae_u32 m68k_disasm_2(TCHAR *buf, int bufsize, uaecptr pc, uae_u16 *bufpc, int bufpcsize, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, uaecptr lastpc, int safemode)
 {
        uae_u32 seaddr2;
        uae_u32 deaddr2;
@@ -1711,8 +1742,8 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
 
                seaddr2 = deaddr2 = 0xffffffff;
                oldpc = pc;
-               opcode = get_word_debug (pc);
-               extra = get_word_debug (pc + 2);
+               opcode = get_disasm_word(pc, bufpc, bufpcsize, 0);
+               extra = get_disasm_word(pc, bufpc, bufpcsize, 2);
                if (cpufunctbl[opcode] == op_illg_1 || cpufunctbl[opcode] == op_unimpl_1) {
                        m68kpc_illg = pc + 2;
                        illegal = 1;
@@ -1729,12 +1760,15 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
 
                lastsegid = -1;
                bool exact = false;
-               if (lastpc != 0xffffffff) {
-                       lastsegid = debugmem_get_segment(lastpc, NULL, NULL, NULL, NULL);
-               }
-               segid = debugmem_get_segment(pc, &exact, NULL, segout, segname);
-               if (segid && (lastsegid != -1 || exact) && (segid != lastsegid || pc == lastpc || exact)) {
-                       buf = buf_out(buf, &bufsize, _T("%s\n"), segname);
+               segid = 0;
+               if (!bufpc) {
+                       if (lastpc != 0xffffffff) {
+                               lastsegid = debugmem_get_segment(lastpc, NULL, NULL, NULL, NULL);
+                       }
+                       segid = debugmem_get_segment(pc, &exact, NULL, segout, segname);
+                       if (segid && (lastsegid != -1 || exact) && (segid != lastsegid || pc == lastpc || exact)) {
+                               buf = buf_out(buf, &bufsize, _T("%s\n"), segname);
+                       }
                }
                symbolpos = buf;
 
@@ -1744,7 +1778,7 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                        buf = buf_out(buf, &bufsize, _T("%s "), segout);
                }
 
-               pc += 2;
+               add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                
                if (lookup->friendlyname)
                        _tcscpy (instrname, lookup->friendlyname);
@@ -1790,7 +1824,7 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                        int lvl = (currprefs.cpu_model - 68000) / 10;
                        if (lvl == 6)
                                lvl = 5;
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        if (lvl < 1 || !(m2cregs[j].flags & (1 << (lvl - 1))))
                                illegal = -1;
                } else if (lookup->mnemo == i_CHK2) {
@@ -1799,14 +1833,14 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                                instrname[1] = 'M';
                                instrname[2] = 'P';
                        }
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        pc = ShowEA(NULL, pc, opcode, dp->dreg, dp->dmode, dp->size, instrname, &seaddr2, &actualea_src, safemode);
                        p = instrname + _tcslen(instrname);
                        _stprintf(p, (extra & 0x8000) ? _T(",A%d") : _T(",D%d"), (extra >> 12) & 7);
                } else if (lookup->mnemo == i_CAS) {
                        TCHAR *p = instrname + _tcslen(instrname);
                        _stprintf(p, _T("D%d,D%d,"), extra & 7, (extra >> 6) & 7);
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        pc = ShowEA(NULL, pc, opcode, dp->dreg, dp->dmode, dp->size, instrname, &deaddr2, &actualea_dst, safemode);
                } else if (lookup->mnemo == i_CAS2) {
                        TCHAR *p = instrname + _tcslen(instrname);
@@ -1815,7 +1849,7 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                                extra & 7, extra2 & 7, (extra >> 6) & 7, (extra2 >> 6) & 7,
                                (extra & 0x8000) ? 'A' : 'D', (extra >> 12) & 7,
                                (extra2 & 0x8000) ? 'A' : 'D', (extra2 >> 12) & 7);
-                       pc += 4;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 4);
                } else if (lookup->mnemo == i_ORSR || lookup->mnemo == i_ANDSR || lookup->mnemo == i_EORSR) {
                        pc = ShowEA(NULL, pc, opcode, dp->sreg, dp->smode, dp->size, instrname, &seaddr2, &actualea_src, safemode);
                        _tcscat(instrname, dp->size == sz_byte ? _T(",CCR") : _T(",SR"));
@@ -1833,19 +1867,19 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                        pc = ShowEA(NULL, pc, opcode, dp->sreg, dp->smode, dp->size, instrname, &seaddr2, &actualea_src, safemode);
                } else if (lookup->mnemo == i_MVMEL) {
                        uae_u16 mask = extra;
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        pc = ShowEA (NULL, pc, opcode, dp->dreg, dp->dmode, dp->size, instrname, &seaddr2, &actualea_src, safemode);
                        movemout (instrname, mask, dp->dmode, 0, true);
                } else if (lookup->mnemo == i_MVMLE) {
                        uae_u16 mask = extra;
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        if (movemout(instrname, mask, dp->dmode, 0, false))
                                _tcscat(instrname, _T(","));
                        pc = ShowEA(NULL, pc, opcode, dp->dreg, dp->dmode, dp->size, instrname, &deaddr2, &actualea_dst, safemode);
                } else if (lookup->mnemo == i_DIVL || lookup->mnemo == i_MULL) {
                        TCHAR *p;
-                       extra = get_word_debug(pc);
-                       pc += 2;
+                       extra = get_disasm_word(pc, bufpc, bufpcsize, 0);
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        if (extra & 0x0800) // signed/unsigned
                                instrname[3] = 'S';
                        else
@@ -1866,7 +1900,7 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                                _stprintf(p, _T(",D%d"), (extra >> 12) & 7);
                } else if (lookup->mnemo == i_MOVES) {
                        TCHAR *p;
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        if (!(extra & 0x0800)) {
                                pc = ShowEA(NULL, pc, opcode, dp->dreg, dp->dmode, dp->size, instrname, &deaddr2, &actualea_dst, safemode);
                                p = instrname + _tcslen(instrname);
@@ -1883,7 +1917,7 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                        TCHAR *p;
                        int reg = -1;
 
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        p = instrname + _tcslen(instrname);
                        if (lookup->mnemo == i_BFEXTS || lookup->mnemo == i_BFEXTU || lookup->mnemo == i_BFFFO || lookup->mnemo == i_BFINS)
                                reg = (extra >> 12) & 7;
@@ -1924,7 +1958,7 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                        TCHAR *p = instrname + _tcslen(instrname);
                        if (opcode & 0x20) {
                                _stprintf(p, _T("(A%d)+,(A%d)+"), opcode & 7, (extra >> 12) & 7);
-                               pc += 2;
+                               add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        } else {
                                uae_u32 addr = get_long_debug(pc);
                                int ay = opcode & 7;
@@ -1951,30 +1985,30 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                        pc = ShowEA(NULL, pc, opcode, dp->dreg, dp->dmode, dp->size, instrname, &deaddr2, &actualea_dst, safemode);
                        extra = get_word_debug(pc);
                        _stprintf(instrname + _tcslen(instrname), _T(",#$%04x"), extra);
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                } else if (lookup->mnemo == i_LPSTOP) {
                        if (extra == 0x01c0) {
                                uae_u16 extra2 = get_word_debug(pc + 2);
                                _stprintf(instrname, _T("LPSTOP #$%04x"), extra2);
-                               pc += 4;
+                               add_disasm_word(&pc, &bufpc, &bufpcsize, 4);
                        } else {
                                _stprintf(instrname, _T("ILLG #$%04x"), extra);
-                               pc += 2;
+                               add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        }
                } else if (lookup->mnemo == i_CALLM) {
                        TCHAR *p = instrname + _tcslen(instrname);
                        _stprintf(p, _T("#%d,"), extra & 255);
                        pc = ShowEA(NULL, pc, opcode, dp->sreg, dp->smode, dp->size, instrname, &seaddr2, &actualea_src, safemode);
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                } else if (lookup->mnemo == i_FDBcc) {
                        pc = ShowEA(NULL, pc, opcode, dp->dreg, dp->dmode, dp->size, instrname, &seaddr2, &actualea_src, safemode);
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        _tcscat(instrname, _T(","));
                        pc = ShowEA(NULL, pc, opcode, 0, imm1, sz_word, instrname, &deaddr2, &actualea_dst, safemode);
                } else if (lookup->mnemo == i_FTRAPcc) {
                        pc = ShowEA(NULL, pc, opcode, dp->dreg, dp->dmode, dp->size, instrname, &seaddr2, &actualea_src, safemode);
                        int mode = opcode & 7;
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        if (mode == 2) {
                                pc = ShowEA(NULL, pc, opcode, 0, imm1, sz_word, instrname, NULL, NULL, safemode);
                        } else if (mode == 3) {
@@ -1985,7 +2019,7 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                        int ins = extra & 0x7f;
                        int size = (extra >> 10) & 7;
 
-                       pc += 2;
+                       add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        if ((extra & 0xfc00) == 0x5c00) { // FMOVECR (=i_FPP with source specifier = 7)
                                fpdata fp;
                                fpu_get_constant(&fp, extra & 0x7f);
@@ -2076,7 +2110,7 @@ uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int
                } else {
                        if (lookup->mnemo == i_FBcc && (opcode & 0x1f) == 0 && extra == 0) {
                                _tcscpy(instrname, _T("FNOP"));
-                               pc += 2;
+                               add_disasm_word(&pc, &bufpc, &bufpcsize, 2);
                        } else {
                                if (dp->suse) {
                                        pc = ShowEA(NULL, pc, opcode, dp->sreg, dp->smode, dp->size, instrname, &seaddr2, &actualea_src, safemode);
index 79808bb0ea3ba2853068cca8a1adc065c547af76..1744ed985ac5dc95a31d72eaba0c39c4517cf8d0 100644 (file)
@@ -1,7 +1,8 @@
-uaecptr ShowEA (void *f, uaecptr pc, uae_u16 opcode, int reg, amodes mode, wordsizes size, TCHAR *buf, uae_u32 *eaddr, int *actualea, int safemode);
+
+uaecptr ShowEA(void *f, uaecptr pc, uae_u16 opcode, int reg, amodes mode, wordsizes size, TCHAR *buf, uae_u32 *eaddr, int *actualea, int safemode);
 uaecptr ShowEA_disp(uaecptr *pcp, uaecptr base, TCHAR *buffer, const TCHAR *name, bool pcrel);
-uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, uaecptr lastpc, int safemode);
-void sm68k_disasm (TCHAR *instrname, TCHAR *instrcode, uaecptr addr, uaecptr *nextpc, uaecptr lastpc);
+uae_u32 m68k_disasm_2(TCHAR *buf, int bufsize, uaecptr pc, uae_u16 *bufpc, int bufpccount, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, uaecptr lastpc, int safemode);
+void sm68k_disasm(TCHAR *instrname, TCHAR *instrcode, uaecptr addr, uaecptr *nextpc, uaecptr lastpc);
 uae_u32 REGPARAM2 op_illg_1(uae_u32 opcode);
 uae_u32 REGPARAM2 op_unimpl_1(uae_u32 opcode);
 
index 41fab0bd77fdbe4c6fff42f3660107091a8c47a9..75bb2cb2408d47199fa398cdb6e8f75c9fa63989 100644 (file)
@@ -667,7 +667,7 @@ extern void REGPARAM3 put_bitfield (uae_u32 dst, uae_u32 bdata[2], uae_u32 val,
 
 extern void m68k_disasm_ea (uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, uaecptr lastpc);
 extern void m68k_disasm (uaecptr addr, uaecptr *nextpc, uaecptr lastpc, int cnt);
-extern uae_u32 m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, uaecptr lastpc, int safemode);
+extern uae_u32 m68k_disasm_2(TCHAR *buf, int bufsize, uaecptr pc, uae_u16 *bufpc, int bufpccount, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, uaecptr lastpc, int safemode);
 extern void sm68k_disasm (TCHAR*, TCHAR*, uaecptr addr, uaecptr *nextpc, uaecptr lastpc);
 extern int m68k_asm(TCHAR *buf, uae_u16 *out, uaecptr pc);
 extern uaecptr ShowEA(void *f, uaecptr pc, uae_u16 opcode, int reg, amodes mode, wordsizes size, TCHAR *buf, uae_u32 *eaddr, int *actualea, int safemode);
index 20bc6ecf61d64dbf1f9709719642d8a9724f99de..f6164ab46446131c22de5b0cc81f9884d05c77cb 100644 (file)
@@ -5416,7 +5416,7 @@ static void opcodedebug (uae_u32 pc, uae_u16 opcode, bool full)
                TCHAR buf[100];
                if (full)
                        write_log (_T("mmufixup=%d %04x %04x\n"), mmufixup[0].reg, regs.wb3_status, regs.mmu_ssw);
-               m68k_disasm_2 (buf, sizeof buf / sizeof (TCHAR), addr, NULL, 1, NULL, NULL, 0xffffffff, 0);
+               m68k_disasm_2(buf, sizeof buf / sizeof (TCHAR), addr, NULL, 0, NULL, 1, NULL, NULL, 0xffffffff, 0);
                write_log (_T("%s\n"), buf);
                if (full)
                        m68k_dumpstate(NULL, 0xffffffff);
@@ -6461,7 +6461,7 @@ void m68k_disasm_ea (uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, ua
        buf = xcalloc (TCHAR, (MAX_LINEWIDTH + 1) * cnt);
        if (!buf)
                return;
-       m68k_disasm_2 (buf, MAX_LINEWIDTH * cnt, addr, nextpc, cnt, seaddr, deaddr, lastpc, 1);
+       m68k_disasm_2(buf, MAX_LINEWIDTH * cnt, addr, NULL, 0, nextpc, cnt, seaddr, deaddr, lastpc, 1);
        xfree (buf);
 }
 void m68k_disasm (uaecptr addr, uaecptr *nextpc, uaecptr lastpc, int cnt)
@@ -6471,7 +6471,7 @@ void m68k_disasm (uaecptr addr, uaecptr *nextpc, uaecptr lastpc, int cnt)
        buf = xcalloc (TCHAR, (MAX_LINEWIDTH + 1) * cnt);
        if (!buf)
                return;
-       m68k_disasm_2 (buf, MAX_LINEWIDTH * cnt, addr, nextpc, cnt, NULL, NULL, lastpc, 0);
+       m68k_disasm_2(buf, MAX_LINEWIDTH * cnt, addr, NULL, 0, nextpc, cnt, NULL, NULL, lastpc, 0);
        console_out_f (_T("%s"), buf);
        xfree (buf);
 }
index b9b87e8fce2d961ccc10ef9110a7010a552dbea0..3a6fa907a63a4840d92214020a80a51ae268c860 100644 (file)
@@ -519,7 +519,7 @@ static void ShowBreakpoints(void)
        for (i = 0; i < BREAKPOINT_TOTAL; i++) {
                if (!bpnodes[i].enabled)
                        continue;
-               m68k_disasm_2(outbp, sizeof outbp / sizeof (TCHAR), bpnodes[i].value1, NULL, 1, NULL, NULL, 0xffffffff, 0);
+               m68k_disasm_2(outbp, sizeof outbp / sizeof (TCHAR), bpnodes[i].value1, NULL, 0, NULL, 1, NULL, NULL, 0xffffffff, 0);
                ULBS(outbp);
                got = 1;
        }
@@ -575,7 +575,7 @@ static int GetPrevAddr(uae_u32 addr, uae_u32 *prevaddr)
        dasmaddr = addr - 20;
        while (dasmaddr < addr) {
                next = dasmaddr + 2;
-               m68k_disasm_2(NULL, 0, dasmaddr, &next, 1, NULL, NULL, 0xffffffff, 0);
+               m68k_disasm_2(NULL, 0, dasmaddr, NULL, 0, &next, 1, NULL, NULL, 0xffffffff, 0);
                if (next == addr) {
                        *prevaddr = dasmaddr;
                        return 1;
@@ -607,7 +607,7 @@ static void ShowDasm(int direction)
        else
                addr = dbgpage[currpage].dasmaddr;
        if (direction > 0) {
-               m68k_disasm_2(NULL, 0, addr, &addr, 1, NULL, NULL, 0xffffffff, 0);
+               m68k_disasm_2(NULL, 0, addr, NULL, 0, &addr, 1, NULL, NULL, 0xffffffff, 0);
                if (!addr || addr < dbgpage[currpage].dasmaddr)
                        addr = dbgpage[currpage].dasmaddr;
        }
@@ -621,7 +621,7 @@ static void ShowDasm(int direction)
        lines_old = SendMessage(hDasm, LB_GETCOUNT, 0, 0);
        lines_new = GetLBOutputLines(hDasm);
        for (i = 0; i < lines_new; i++) {
-               m68k_disasm_2(out, sizeof out / sizeof (TCHAR), addr, &addr, 1, NULL, NULL, 0xffffffff, 0);
+               m68k_disasm_2(out, sizeof out / sizeof (TCHAR), addr, NULL, 0, &addr, 1, NULL, NULL, 0xffffffff, 0);
                if (addr > dbgpage[currpage].dasmaddr)
                        UpdateListboxString(hDasm, i, out, FALSE);
                else