From dc357fbe097de23d5d86ca5165f18b613e45b3ec Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Sat, 13 Apr 2024 16:20:02 +0200 Subject: [PATCH 1/2] step_a/step_b -> step, that way the mmr1 is retained in the debuglogging --- cpu.cpp | 5 +---- cpu.h | 3 +-- debugger.cpp | 14 ++++---------- main.cpp | 9 +++------ 4 files changed, 9 insertions(+), 22 deletions(-) diff --git a/cpu.cpp b/cpu.cpp index 8471fe7..d32b6ea 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -2251,7 +2251,7 @@ std::map > cpu::disassemble(const uint16_t return out; } -void cpu::step_a() +void cpu::step() { it_is_a_trap = false; @@ -2262,10 +2262,7 @@ void cpu::step_a() if (!b->isMMR1Locked()) b->clearMMR1(); } -} -void cpu::step_b() -{ instruction_count++; try { diff --git a/cpu.h b/cpu.h index 697661a..bca20dc 100644 --- a/cpu.h +++ b/cpu.h @@ -115,8 +115,7 @@ public: void reset(); - void step_a(); - void step_b(); + void step(); void pushStack(const uint16_t v); uint16_t popStack(); diff --git a/debugger.cpp b/debugger.cpp index 7fb1be9..617c277 100644 --- a/debugger.cpp +++ b/debugger.cpp @@ -1030,10 +1030,8 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto bool reset_cpu = true; if (turbo) { - while(*stop_event == EVENT_NONE) { - c->step_a(); - c->step_b(); - } + while(*stop_event == EVENT_NONE) + c->step(); } else { reset_cpu = false; @@ -1042,8 +1040,6 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto if (!single_step) DOLOG(debug, false, "---"); - c->step_a(); - if (trace_start_addr != -1 && c->getPC() == trace_start_addr) tracing = true; @@ -1055,7 +1051,7 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto break; } - c->step_b(); + c->step(); if (single_step && --n_single_step == 0) break; @@ -1088,12 +1084,10 @@ void run_bic(console *const cnsl, bus *const b, std::atomic_uint32_t *const stop *cnsl->get_running_flag() = true; while(*stop_event == EVENT_NONE) { - c->step_a(); - if (tracing) disassemble(c, nullptr, c->getPC(), false); - c->step_b(); + c->step(); } *cnsl->get_running_flag() = false; diff --git a/main.cpp b/main.cpp index 674b4d9..93ce0a4 100644 --- a/main.cpp +++ b/main.cpp @@ -125,10 +125,9 @@ int run_cpu_validation(const std::string & filename) b->setMMR0(json_integer_value(a_mmr0)); } - c->step_a(); disassemble(c, nullptr, start_pc, false); auto disas_data = c->disassemble(start_pc); - c->step_b(); + c->step(); uint16_t new_pc = c->getPC(); @@ -572,10 +571,8 @@ int main(int argc, char *argv[]) for(;;) { *running = true; - while(event == EVENT_NONE) { - c->step_a(); - c->step_b(); - } + while(event == EVENT_NONE) + c->step(); *running = false; From 541d0c7829f98bec67cec7fd56a03c2f3827e707 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Sat, 13 Apr 2024 18:20:55 +0200 Subject: [PATCH 2/2] module --- BIC/EMKAB0.BIC | Bin 0 -> 41310 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 BIC/EMKAB0.BIC diff --git a/BIC/EMKAB0.BIC b/BIC/EMKAB0.BIC new file mode 100644 index 0000000000000000000000000000000000000000..b9b82a8bd9acfbdce691fd0a86defeaeb1d54c05 GIT binary patch literal 41310 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 {Y3rS9~#Guwr%9OwgO1i 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