624abe5a4d
applies to RL02 as well
This commit is contained in:
parent
f7b59e2e0d
commit
829c94a456
2 changed files with 11 additions and 5 deletions
13
rl02.cpp
13
rl02.cpp
|
@ -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
3
rl02.h
|
@ -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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue