624abe5a4d applies to RL02 as well

This commit is contained in:
folkert van heusden 2024-04-17 14:51:34 +02:00
parent f7b59e2e0d
commit 829c94a456
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1
2 changed files with 11 additions and 5 deletions

View file

@ -89,7 +89,12 @@ void rl02::writeByte(const uint16_t addr, const uint8_t v)
writeWord(addr, vtemp); 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 sector = da & 63;
int track = (da >> 6) & 1023; 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 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; 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; i<cur; i++, p++) for(uint32_t i=0; i<cur; i++, p++)
b->writeByte(p, xfer_buffer[i]); b->writeUnibusByte(p, xfer_buffer[i]);
temp_disk_offset += cur; 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? if (registers[(RL02_CSR - RL02_BASE) / 2] & 64) { // interrupt enable?
DOLOG(debug, false, "RL02 triggering interrupt"); DOLOG(debug, false, "RL02 triggering interrupt");
b->getCpu()->queue_interrupt(5, 0254); b->getCpu()->queue_interrupt(5, 0160);
} }
*disk_read_acitivity = false; *disk_read_acitivity = false;

3
rl02.h
View file

@ -32,7 +32,8 @@ private:
std::atomic_bool *const disk_read_acitivity { nullptr }; std::atomic_bool *const disk_read_acitivity { nullptr };
std::atomic_bool *const disk_write_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: public:
rl02(const std::vector<disk_backend *> & files, bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity); rl02(const std::vector<disk_backend *> & files, bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity);