From 9c7632fb1cbc47abdf954980e8b88c7b0c314c58 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Mon, 11 Apr 2022 21:00:42 +0200 Subject: [PATCH] breakpoints --- cpu.cpp | 15 +++++++++++++++ cpu.h | 6 ++++++ main.cpp | 5 +++++ 3 files changed, 26 insertions(+) diff --git a/cpu.cpp b/cpu.cpp index 3dfd105..57555c2 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -30,6 +30,21 @@ void cpu::emulation_start() running_since = get_ms(); } +bool cpu::check_breakpoint() +{ + return breakpoints.find(getPC()) != breakpoints.end(); +} + +void cpu::set_breakpoint(const uint16_t addr) +{ + breakpoints.insert(addr); +} + +void cpu::remove_breakpoint(const uint16_t addr) +{ + breakpoints.erase(addr); +} + uint64_t cpu::get_instructions_executed_count() { // this may wreck havoc as it is not protected by a mutex diff --git a/cpu.h b/cpu.h index d98cfe0..31cefcb 100644 --- a/cpu.h +++ b/cpu.h @@ -28,6 +28,8 @@ private: // level, vector std::map > queued_interrupts; + std::set breakpoints; + bus *const b { nullptr }; uint32_t *const event { nullptr }; @@ -62,6 +64,10 @@ public: explicit cpu(bus *const b, uint32_t *const event); ~cpu(); + bool check_breakpoint(); + void set_breakpoint(const uint16_t addr); + void remove_breakpoint(const uint16_t addr); + void disassemble(void) const; std::map > disassemble(const uint16_t addr) const; diff --git a/main.cpp b/main.cpp index cf5944d..3781031 100644 --- a/main.cpp +++ b/main.cpp @@ -273,8 +273,13 @@ int main(int argc, char *argv[]) if (tracing) c->disassemble(); + if (c->check_breakpoint()) + break; + c->step(); } + + // TODO: some menu } else { while(!event && !terminate)