From b3fd4994a81dd283559754b1f349543ff7dc735b Mon Sep 17 00:00:00 2001 From: Folkert van Heusden Date: Sat, 19 Mar 2022 09:03:17 +0100 Subject: [PATCH 1/2] debug log new PC address after trap --- cpu.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cpu.cpp b/cpu.cpp index f097165..72a2bd5 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -1104,18 +1104,18 @@ void cpu::busError() { fprintf(stderr, "BUS ERROR\n"); - // PSW = 177776 - // mov @#PSW, -(sp) - pushStack(getPSW()); + trap(4); +} - // mov pc, -(sp) +void cpu::trap(const uint16_t vector) +{ + pushStack(getPSW()); pushStack(getPC()); - // mov @#VEC+2, @#PSW - setPSW(b -> readWord(6)); + setPSW(b->readWord(vector + 2)); + setPC (b->readWord(vector + 0)); - // mov @#VEC, pc - setPC(b -> readWord(4)); + fprintf(stderr, "TRAP %o: PC is now %06o\n", vector, getPC()); } std::pair cpu::addressing_to_string(const uint8_t mode_register, const uint16_t pc) From edf94487af4f3a8f687c17affdf8c10375b59c0c Mon Sep 17 00:00:00 2001 From: Folkert van Heusden Date: Sat, 19 Mar 2022 09:04:15 +0100 Subject: [PATCH 2/2] rk05: update register first to not overwrite it at function exit --- rk05.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rk05.cpp b/rk05.cpp index d9b5e91..d725769 100644 --- a/rk05.cpp +++ b/rk05.cpp @@ -149,6 +149,9 @@ void rk05::writeWord(const uint16_t addr, uint16_t v) const int reg = (addr - RK05_BASE) / 2; fprintf(stderr, "RK05 write %s/%o: %o\n", regnames[reg], addr, v); + D(fprintf(stderr, "set register %o to %o\n", addr, v);) + registers[reg] = v; + if (addr == RK05_CS) { if (v & 1) { // GO const int func = (v >> 1) & 7; // FUNCTION @@ -273,9 +276,6 @@ void rk05::writeWord(const uint16_t addr, uint16_t v) } } - D(fprintf(stderr, "set register %o to %o\n", addr, v);) - registers[reg] = v; - #if defined(ESP32) digitalWrite(LED_BUILTIN, HIGH); #endif