From 829c94a4567a94facc6e6d448293e3c812d75266 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Wed, 17 Apr 2024 14:51:34 +0200 Subject: [PATCH] 624abe5a4dfedbf0e9fdece24a1665ad84696c31 applies to RL02 as well --- rl02.cpp | 13 +++++++++---- rl02.h | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/rl02.cpp b/rl02.cpp index 6679195..efd432f 100644 --- a/rl02.cpp +++ b/rl02.cpp @@ -89,7 +89,12 @@ void rl02::writeByte(const uint16_t addr, const uint8_t v) writeWord(addr, vtemp); } -uint32_t rl02::calcOffset(const uint16_t da) +uint32_t rl02::get_bus_address() const +{ + return registers[(RL02_BAR - RL02_BASE) / 2] | (uint32_t((registers[(RL02_CSR - RL02_BASE) / 2] >> 4) & 3) << 16); +} + +uint32_t rl02::calcOffset(const uint16_t da) const { int sector = da & 63; int track = (da >> 6) & 1023; @@ -124,7 +129,7 @@ void rl02::writeWord(const uint16_t addr, uint16_t v) uint32_t temp_disk_offset = disk_offset; - uint32_t memory_address = registers[(RL02_BAR - RL02_BASE) / 2]; + uint32_t memory_address = get_bus_address(); uint32_t count = (65536l - registers[(RL02_MPR - RL02_BASE) / 2]) * 2; @@ -140,7 +145,7 @@ void rl02::writeWord(const uint16_t addr, uint16_t v) } for(uint32_t i=0; iwriteByte(p, xfer_buffer[i]); + b->writeUnibusByte(p, xfer_buffer[i]); temp_disk_offset += cur; @@ -150,7 +155,7 @@ void rl02::writeWord(const uint16_t addr, uint16_t v) if (registers[(RL02_CSR - RL02_BASE) / 2] & 64) { // interrupt enable? DOLOG(debug, false, "RL02 triggering interrupt"); - b->getCpu()->queue_interrupt(5, 0254); + b->getCpu()->queue_interrupt(5, 0160); } *disk_read_acitivity = false; diff --git a/rl02.h b/rl02.h index ea08179..1ca7d4b 100644 --- a/rl02.h +++ b/rl02.h @@ -32,7 +32,8 @@ private: std::atomic_bool *const disk_read_acitivity { nullptr }; std::atomic_bool *const disk_write_acitivity { nullptr }; - uint32_t calcOffset(uint16_t); + uint32_t get_bus_address() const; + uint32_t calcOffset(uint16_t) const; public: rl02(const std::vector & files, bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity);