From: Toni Wilen Date: Sun, 27 Oct 2019 11:57:56 +0000 (+0200) Subject: Read-only/write-only bus error debugger option. X-Git-Tag: 4300~68 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=a3aa181bb4e9c06bff5a16cded816a220dbe6600;p=francis%2Fwinuae.git Read-only/write-only bus error debugger option. --- diff --git a/debug.cpp b/debug.cpp index 6c3ba026..f23dc294 100644 --- 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; } diff --git a/include/debug.h b/include/debug.h index a42fd07f..7b0cb0bf 100644 --- a/include/debug.h +++ b/include/debug.h @@ -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];