]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Read-only/write-only bus error debugger option.
authorToni Wilen <twilen@winuae.net>
Sun, 27 Oct 2019 11:57:56 +0000 (13:57 +0200)
committerToni Wilen <twilen@winuae.net>
Sun, 27 Oct 2019 11:57:56 +0000 (13:57 +0200)
debug.cpp
include/debug.h

index 6c3ba026f737c5854bbb244c158cc18de00b63eb..f23dc2940919cb68f9fb6c5225f3f3dbda67a106 100644 (file)
--- a/debug.cpp
+++ b/debug.cpp
@@ -3007,11 +3007,13 @@ static int memwatch_func (uaecptr addr, int rwi, int size, uae_u32 *valp, uae_u3
                        continue;
 
                if (m->bus_error) {
+                       if (((m->bus_error & 1) && (rwi & 1)) || ((m->bus_error & 2) && (rwi & 2))) {
 #if BUS_ERROR_EMULATION
-                       cpu_bus_error = 1;
+                               cpu_bus_error = 1;
 #else
-                       exception2(addr, (rwi & 2) == 0, size, ((rwi & 4) ? 2 : 1) | (regs.s ? 4 : 0));
+                               exception2(addr, (rwi & 2) == 0, size, ((rwi & 4) ? 2 : 1) | (regs.s ? 4 : 0));
 #endif
+                       }
                        continue;
                }
 
@@ -3587,8 +3589,12 @@ void memwatch_dump2 (TCHAR *buf, int bufsize, int num)
                                buf = buf_out(buf, &bufsize, _T(" L"));
                        if (mwn->nobreak)
                                buf = buf_out(buf, &bufsize, _T(" N"));
-                       if (mwn->bus_error)
+                       if (mwn->bus_error == 3)
                                buf = buf_out(buf, &bufsize, _T(" BER"));
+                       if (mwn->bus_error == 1)
+                               buf = buf_out(buf, &bufsize, _T(" BERR"));
+                       if (mwn->bus_error == 2)
+                               buf = buf_out(buf, &bufsize, _T(" BERW"));
                        for (int j = 0; memwatch_access_masks[j].mask; j++) {
                                uae_u32 mask = memwatch_access_masks[j].mask;
                                if ((mwn->access_mask & mask) == mask && (usedmask & mask) == 0) {
@@ -3734,7 +3740,15 @@ static void memwatch (TCHAR **c)
                                        if (nc == 'R')
                                                mwn->rwi |= 1;
                                        if (nc == 'B') {
-                                               mwn->bus_error = true;
+                                               mwn->bus_error = 3;
+                                               if (ncc == 'R') {
+                                                       mwn->bus_error = 1;
+                                                       next_char(c);
+                                               }
+                                               if (ncc == 'W') {
+                                                       mwn->bus_error = 2;
+                                                       next_char(c);
+                                               }
                                                if (!mwn->rwi)
                                                        mwn->rwi = 7;
                                        }
index a42fd07f5b9b8a48bbc6747b0624d4a45a3573a2..7b0cb0bf2277cbdaceba0b9183f88045f00c537f 100644 (file)
@@ -158,7 +158,7 @@ struct memwatch_node {
        uaecptr pc;
        bool nobreak;
        bool reportonly;
-       bool bus_error;
+       int bus_error;
 };
 extern struct memwatch_node mwnodes[MEMWATCH_TOTAL];