diff --git a/bus.cpp b/bus.cpp index e5f3bdf..680cc5e 100644 --- a/bus.cpp +++ b/bus.cpp @@ -416,7 +416,7 @@ uint16_t bus::write(const uint16_t a, const bool word_mode, uint16_t value, cons if (a == 0172516) { // MMR3 D(fprintf(stderr, "write set MMR3: %o\n", value);) - MMR3 = value; + MMR3 = value & 067; return MMR3; } @@ -571,9 +571,9 @@ uint16_t bus::write(const uint16_t a, const bool word_mode, uint16_t value, cons m_offset += a & 8191; if (word_mode) - m -> writeByte(m_offset, value); + m->writeByte(m_offset, value); else - m -> writeWord(m_offset, value); + m->writeWord(m_offset, value); return value; } @@ -587,3 +587,13 @@ uint16_t bus::writeWord(const uint16_t a, const uint16_t value) { return write(a, false, value); } + +uint16_t bus::readUnibusByte(const uint16_t a) +{ + return m->readByte(a); +} + +void bus::writeUnibusByte(const uint16_t a, const uint8_t v) +{ + m->writeByte(a, v); +} diff --git a/bus.h b/bus.h index 92441f3..ca8937a 100644 --- a/bus.h +++ b/bus.h @@ -55,10 +55,14 @@ public: uint16_t readByte(const uint16_t a) { return read(a, true); } uint16_t readWord(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=false); uint8_t writeByte(const uint16_t a, const uint8_t value) { return write(a, true, value); } uint16_t writeWord(const uint16_t a, const uint16_t value); + void writeUnibusByte(const uint16_t a, const uint8_t value); + void setMMR2(const uint16_t value) { MMR2 = value; } uint16_t get_switch_register() const { return switch_register; } diff --git a/rk05.cpp b/rk05.cpp index 9edbae3..8d56828 100644 --- a/rk05.cpp +++ b/rk05.cpp @@ -178,7 +178,7 @@ void rk05::writeWord(const uint16_t addr, uint16_t v) uint32_t p = reclen; // FIXME for(size_t i=0; i readByte(memoff + i); + xfer_buffer[i] = b->readUnibusByte(memoff + i); #if defined(ESP32) if (!fh.seek(diskoffb)) @@ -242,7 +242,7 @@ void rk05::writeWord(const uint16_t addr, uint16_t v) for(uint32_t i=0; i writeByte(p, xfer_buffer[i]); + b -> writeUnibusByte(p, xfer_buffer[i]); p++; }