summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2022-09-25 16:39:51 +0300
committerOxore <oxore@protonmail.com>2022-09-25 16:40:52 +0300
commitee4f20d8627063f7310aac4625f18421c3799a77 (patch)
tree79adff7b429dd315326f3219a1609c75840d2b9d
parent9c78f70071daa8d4d65ffe335c21af0e4b523841 (diff)
Impl access watchpoint
-rw-r--r--emulator.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/emulator.cpp b/emulator.cpp
index ea2c051..7e0d1b3 100644
--- a/emulator.cpp
+++ b/emulator.cpp
@@ -299,6 +299,16 @@ static inline bool ranges_overlap(
// XXX Maybe better move it to bus.cpp?
void m68k_read_callback(const uint32_t address, const uint32_t size)
{
+ const auto access_it = std::find_if(
+ access_bkpts.begin(),
+ access_bkpts.end(),
+ [&](const Breakpoint& b) { return ranges_overlap(address, size, b.offset, b.length); });
+ if (access_it != access_bkpts.end()) {
+ g_m68k_debug.SetRunning(false);
+ g_m68k_debug.RaiseBreakpoint();
+ m68k_end_timeslice();
+ printf("Access watchpoint @ 0x%08x\n", address);
+ }
const auto it = std::find_if(
read_bkpts.begin(),
read_bkpts.end(),
@@ -314,6 +324,16 @@ void m68k_read_callback(const uint32_t address, const uint32_t size)
// XXX Maybe better move it to bus.cpp?
void m68k_write_callback(const uint32_t address, const uint32_t size)
{
+ const auto access_it = std::find_if(
+ access_bkpts.begin(),
+ access_bkpts.end(),
+ [&](const Breakpoint& b) { return ranges_overlap(address, size, b.offset, b.length); });
+ if (access_it != access_bkpts.end()) {
+ g_m68k_debug.SetRunning(false);
+ g_m68k_debug.RaiseBreakpoint();
+ m68k_end_timeslice();
+ printf("Access watchpoint @ 0x%08x\n", address);
+ }
const auto it = std::find_if(
write_bkpts.begin(),
write_bkpts.end(),