From 81dc6d89245f927c8f79347a36497f23b6dd9d67 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Mon, 13 Jun 2022 21:53:59 +0200 Subject: [PATCH] trap: read from D-space --- bus.cpp | 4 ++-- bus.h | 4 ++-- cpu.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bus.cpp b/bus.cpp index 2f0a61a..0e896c4 100644 --- a/bus.cpp +++ b/bus.cpp @@ -707,9 +707,9 @@ uint16_t bus::write(const uint16_t a, const bool word_mode, uint16_t value, cons return value; } -uint16_t bus::readWord(const uint16_t a) +uint16_t bus::readWord(const uint16_t a, const d_i_space_t s) { - return read(a, false, false, false); + return read(a, false, false, false, s); } uint16_t bus::peekWord(const uint16_t a) diff --git a/bus.h b/bus.h index 67c03fa..7fb20ab 100644 --- a/bus.h +++ b/bus.h @@ -67,13 +67,13 @@ public: uint16_t read(const uint16_t a, const bool word_mode, const bool use_prev, const bool peek_only=false, const d_i_space_t s = i_space); uint16_t readByte(const uint16_t a) { return read(a, true, false); } - uint16_t readWord(const uint16_t a); + uint16_t readWord(const uint16_t a, const d_i_space_t s = i_space); uint16_t peekWord(const uint16_t a); uint16_t readUnibusByte(const uint16_t a); uint16_t write(const uint16_t a, const bool word_mode, uint16_t value, const bool use_prev, const d_i_space_t s = i_space); - uint8_t writeByte(const uint16_t a, const uint8_t value) { return write(a, true, value, false); } + uint8_t writeByte(const uint16_t a, const uint8_t value) { return write(a, true, value, false); } uint16_t writeWord(const uint16_t a, const uint16_t value); void writeUnibusByte(const uint16_t a, const uint8_t value); diff --git a/cpu.cpp b/cpu.cpp index e596d41..c6e6c22 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -1661,10 +1661,10 @@ void cpu::trap(const uint16_t vector, const int new_ipl) b->addToMMR1(-2, 6); } - setPC(b->readWord(vector + 0)); + setPC(b->readWord(vector + 0, d_space)); // switch to kernel mode & update 'previous mode' - uint16_t new_psw = b->readWord(vector + 2) & 0147777; // mask off old 'previous mode' + uint16_t new_psw = b->readWord(vector + 2, d_space) & 0147777; // mask off old 'previous mode' if (new_ipl != -1) new_psw = (new_psw & ~0xe0) | (new_ipl << 5); new_psw |= (before_psw >> 2) & 030000; // apply new 'previous mode'