]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
DMA debugger ROM access information.
authorToni Wilen <twilen@winuae.net>
Mon, 10 Mar 2025 17:28:43 +0000 (19:28 +0200)
committerToni Wilen <twilen@winuae.net>
Mon, 10 Mar 2025 17:28:43 +0000 (19:28 +0200)
debug.cpp
include/debug.h
memory.cpp

index 3b5920199999a8a9e12f65f2948cf03d32a08634..033da6d0c1641592efc2e0264534cadabc0fda2c 100644 (file)
--- a/debug.cpp
+++ b/debug.cpp
@@ -2197,6 +2197,18 @@ void record_dma_clear(void)
        dr->cf_reg = 0xffff;
 }
 
+void record_rom_access(uaecptr ptr, uae_u32 v, int size, bool rw)
+{
+       dma_record_init();
+       if (!dma_record_data)
+               return;
+       struct dma_rec *dr = &dma_record_data[dma_record_cycle];
+       dr->miscaddr = ptr;
+       dr->miscval = v;
+       dr->ciarw = rw;
+       dr->miscsize = size;
+}
+
 void record_cia_access(int r, int mask, uae_u16 value, bool rw, int phase)
 {
        dma_record_init();
@@ -2695,6 +2707,8 @@ static bool get_record_dma_info(struct dma_rec *drs, struct dma_rec *dr, TCHAR *
                                        _stprintf(l5, _T(" %u "), ph - 1);
                                }
                        }
+               } else if (dr->miscsize) {
+                       _stprintf(l5, _T("ROM%c%c %08X"), dr->ciarw ? 'W' : 'R', dr->miscsize == 1 ? 'B' : (dr->miscsize == 2 ? 'W' : 'L'), dr->miscaddr);
                }
        }
        if (l6) {
index 6c66eec0651a8698132f3d8860647909a5618927..62f274de729af7435822754b9db5543a765eee72 100644 (file)
@@ -245,6 +245,9 @@ struct dma_rec
        bool ciarw;
        int ciaphase;
        uae_u16 ciavalue;
+       uaecptr miscaddr;
+       uae_u32 miscval;
+       int miscsize;
        bool end;
        bool cs, hs, vs;
 };
@@ -330,6 +333,7 @@ extern void record_dma_event_data(uae_u32 evt, uae_u32 data);
 extern void record_dma_clear(void);
 extern bool record_dma_check(void);
 extern void record_cia_access(int r, int mask, uae_u16 value, bool rw, int phase);
+extern void record_rom_access(uaecptr, uae_u32 value, int size, bool rw);
 extern void record_dma_ipl(void);
 extern void record_dma_ipl_sample(void);
 extern void debug_mark_refreshed(uaecptr);
index fecfde536487659ccf96b516d9f724a911dbfdea..e4cd4be77acce3962a44d0ccafdf78fff3e47eea 100644 (file)
@@ -1073,19 +1073,58 @@ void a1000_reset (void)
        a1000_handle_kickstart (1);
 }
 
-static void REGPARAM3 kickmem_lput (uaecptr, uae_u32) REGPARAM;
-static void REGPARAM3 kickmem_wput (uaecptr, uae_u32) REGPARAM;
-static void REGPARAM3 kickmem_bput (uaecptr, uae_u32) REGPARAM;
+static void REGPARAM3 kickmem_lput(uaecptr, uae_u32) REGPARAM;
+static void REGPARAM3 kickmem_wput(uaecptr, uae_u32) REGPARAM;
+static void REGPARAM3 kickmem_bput(uaecptr, uae_u32) REGPARAM;
+static uae_u32 REGPARAM3 kickmem_lget(uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 kickmem_wget(uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 kickmem_bget(uaecptr) REGPARAM;
 
-MEMORY_BGET(kickmem);
-MEMORY_WGET(kickmem);
-MEMORY_LGET(kickmem);
 MEMORY_CHECK(kickmem);
 MEMORY_XLATE(kickmem);
 
+static uae_u32 REGPARAM2 kickmem_lget(uaecptr addr)
+{
+       addr &= kickmem_bank.mask;
+       uae_u32 m = do_get_mem_long((uae_u32*)(kickmem_bank.baseaddr + addr));
+#ifdef DEBUGGER
+       if (debug_dma) {
+               record_rom_access(kickmem_bank.start + addr, m, 4, false);
+       }
+#endif
+       return m;
+}
+static uae_u32 REGPARAM2 kickmem_wget(uaecptr addr)
+{
+       addr &= kickmem_bank.mask;
+       uae_u16 m = do_get_mem_word((uae_u16*)(kickmem_bank.baseaddr + addr));
+#ifdef DEBUGGER
+       if (debug_dma) {
+               record_rom_access(kickmem_bank.start + addr, m, 2, false);
+       }
+#endif
+       return m;
+}
+static uae_u32 REGPARAM2 kickmem_bget(uaecptr addr)
+{
+       addr &= kickmem_bank.mask;
+       uae_u8 m = kickmem_bank.baseaddr[addr];
+#ifdef DEBUGGER
+       if (debug_dma) {
+               record_rom_access(kickmem_bank.start + addr, m, 1, false);
+       }
+#endif
+       return m;
+}
+
 static void REGPARAM2 kickmem_lput (uaecptr addr, uae_u32 b)
 {
        uae_u32 *m;
+#ifdef DEBUGGER
+       if (debug_dma) {
+               record_rom_access(kickmem_bank.start + addr, b, 4, true);
+       }
+#endif
        if (currprefs.rom_readwrite && rom_write_enabled) {
                addr &= kickmem_bank.mask;
                m = (uae_u32 *)(kickmem_bank.baseaddr + addr);
@@ -1112,6 +1151,11 @@ static void REGPARAM2 kickmem_lput (uaecptr addr, uae_u32 b)
 static void REGPARAM2 kickmem_wput (uaecptr addr, uae_u32 b)
 {
        uae_u16 *m;
+#ifdef DEBUGGER
+       if (debug_dma) {
+               record_rom_access(kickmem_bank.start + addr, b, 2, true);
+       }
+#endif
        if (currprefs.rom_readwrite && rom_write_enabled) {
                addr &= kickmem_bank.mask;
                m = (uae_u16 *)(kickmem_bank.baseaddr + addr);
@@ -1131,6 +1175,11 @@ static void REGPARAM2 kickmem_wput (uaecptr addr, uae_u32 b)
 
 static void REGPARAM2 kickmem_bput (uaecptr addr, uae_u32 b)
 {
+#ifdef DEBUGGER
+       if (debug_dma) {
+               record_rom_access(kickmem_bank.start + addr, b, 1, true);
+       }
+#endif
        if (currprefs.rom_readwrite && rom_write_enabled) {
                addr &= kickmem_bank.mask;
                kickmem_bank.baseaddr[addr] = b;
@@ -2050,6 +2099,9 @@ static void set_direct_memory(addrbank *ab)
 {
        if (!(ab->flags & ABFLAG_DIRECTACCESS))
                return;
+       if (currprefs.cpu_memory_cycle_exact && currprefs.cpu_model < 68020) {
+               return;
+       }
        ab->baseaddr_direct_r = ab->baseaddr;
        if (!(ab->flags & ABFLAG_ROM))
                ab->baseaddr_direct_w = ab->baseaddr;