]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Debugger updates
authorToni Wilen <twilen@winuae.net>
Sun, 26 Apr 2026 11:49:39 +0000 (14:49 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 26 Apr 2026 11:50:54 +0000 (14:50 +0300)
custom.cpp
debug.cpp
include/debug.h
newcpu.cpp

index 783c49283c5bfb3eb7c6ef950d22a68b7bde8b3a..c5ed564534f307798c1d1fe7f2e36fd06bf429c1 100644 (file)
@@ -4376,7 +4376,7 @@ void blitter_done_notify(void)
                }
                if (debug_copper) {
                        int hpos = current_hpos();
-                       record_copper_blitwait(cop_state.ip - 4, hpos, vpos);
+                       record_copper_blitwait(cop_state.ip - 2, hpos, vpos);
                }
        }
 #endif
@@ -9005,7 +9005,7 @@ static void process_copper(struct rgabuf *r)
 
 #ifdef DEBUGGER
                if (debug_copper && cop_state.irload2) {
-                       record_copper(cop_state.ip - 4, cop_state.ip, cop_state.ir[0], cop_state.ir[1], agnus_hpos, vpos);
+                       record_copper(cop_state.ip - 2, cop_state.ip, cop_state.ir[0], cop_state.ir[1], agnus_hpos, vpos);
                }
 #endif
        }
@@ -9021,13 +9021,13 @@ static void process_copper(struct rgabuf *r)
                        cop_state.strobe = 0;
 #ifdef DEBUGGER
                        if (debug_copper) {
-                               record_copper(previp - 4, cop_state.ip, cop_state.ir[0], cop_state.ir[1], agnus_hpos, vpos);
+                               record_copper(previp - 2, cop_state.ip, cop_state.ir[0], cop_state.ir[1], agnus_hpos, vpos);
                        }
 #endif
                } else {
 #ifdef DEBUGGER
                        if (debug_copper && cop_state.irload2) {
-                               record_copper(cop_state.ip - 4, cop_state.ip, cop_state.ir[0], cop_state.ir[1], agnus_hpos, vpos);
+                               record_copper(cop_state.ip - 2, cop_state.ip, cop_state.ir[0], cop_state.ir[1], agnus_hpos, vpos);
                        }
                }
 #endif
index a31d67c382a98e9e377714a7ffed18ed09b3cc84..75160446e39dbfaa6d43b0b98fa70e6bb202a207 100644 (file)
--- a/debug.cpp
+++ b/debug.cpp
@@ -6080,6 +6080,7 @@ static void breakfunc(uae_u32 v)
        debug_hpos = -1;
        debug_cycles(2);
        set_special(SPCFLAG_BRK);
+       trace_mode = TRACE_IMMEDIATE;
 }
 
 void debug_hsync(void)
@@ -6603,6 +6604,7 @@ static void debug_sprite(TCHAR **inptr)
        int ypose, ypose_ecs;
        int attach;
        uae_u64 w1, w2, ww1, ww2;
+       bool detectsize = true;
        int size = 1, width;
        int ecs, sh10;
        int y, i;
@@ -6613,16 +6615,28 @@ static void debug_sprite(TCHAR **inptr)
        ignore_ws(inptr);
        addr = readhex(inptr, NULL);
        ignore_ws(inptr);
-       if (more_params (inptr))
+       if (more_params (inptr)) {
                size = readhex(inptr, NULL);
+               detectsize = false;
+       }
        if (size != 1 && size != 2 && size != 4) {
                addr2 = size;
+               detectsize = true;
                ignore_ws(inptr);
-               if (more_params(inptr))
+               if (more_params(inptr)) {
                        size = readint(inptr, NULL);
-               if (size != 1 && size != 2 && size != 4)
-                       size = 1;
+                       detectsize = false;
+               }
+       }
+       if ((size != 1 && size != 2 && size != 4) || detectsize) {
+               size = 1;
+               if (get_word_debug(addr + 2) == 0 && get_word_debug(addr + 4) != 0 && get_word_debug(addr + 6) == 0) {
+                       size = 2;
+               } else if (get_word_debug(addr + 2) == 0 && get_word_debug(addr + 4) == 0 && get_word_debug(addr + 6) == 0 && get_word_debug(addr + 8) != 0) {
+                       size = 4;
+               }
        }
+
        for (;;) {
                ecs = 0;
                sh10 = 0;
@@ -8146,6 +8160,8 @@ void debug (void)
                                                if (line > 0 && line != trace_param[1])
                                                        bp = -1;
                                        }
+                               } else if (trace_mode == TRACE_IMMEDIATE) {
+                                       bp = -2;
                                }
                        }
                        if (!bp && bpnum < 0) {
@@ -8155,7 +8171,9 @@ void debug (void)
                        if (bpnum >= 0) {
                                console_out_f(_T("Breakpoint %d triggered.\n"), bpnum);
                        }
-                       debug_cycles(1);
+                       if (bp >= -1) {
+                               debug_cycles(1);
+                       }
                }
        } else {
                memwatch_hit_msg(memwatch_triggered - 1);
index e4614b7efd5d7f8f5515f588ba6c0389648e9672..d29ad6fed8d77bafe3008499c521711086b44726 100644 (file)
@@ -353,6 +353,7 @@ extern int get_dma_debug_color(struct dma_rec *dr, int line, uae_u32 *cp);
 #define TRACE_RANGE_PC 4
 #define TRACE_SKIP_LINE 5
 #define TRACE_RAM_PC 6
+#define TRACE_IMMEDIATE 7
 #define TRACE_CHECKONLY 10
 
 #else
index 476217a45202540451d2ba2ec03cb90734c683b5..ebd2d800136cb7f77bd405e7345216c486dc4d3f 100644 (file)
@@ -6933,8 +6933,10 @@ void m68k_dumpstate(uaecptr *nextpc, uaecptr prevpc)
                }
        }
        m68k_disasm (pc, nextpc, pc, 1);
-       if (nextpc)
+       if (nextpc) {
                console_out_f (_T("Next PC: %08x\n"), *nextpc);
+               *nextpc = pc;
+       }
 }
 
 void m68k_dumpcache (bool dc)