RL02: MPR has fifo of 3 words

This commit is contained in:
folkert van heusden 2024-04-18 13:54:11 +02:00
parent 1aa6c47f8e
commit fd8bb6a60b
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1
2 changed files with 13 additions and 3 deletions

View file

@ -38,8 +38,9 @@ rl02::~rl02()
void rl02::reset()
{
memset(registers, 0x00, sizeof registers);
memset(registers, 0x00, sizeof registers );
memset(xfer_buffer, 0x00, sizeof xfer_buffer);
memset(mpr, 0x00, sizeof mpr );
track = 0;
head = 0;
@ -65,9 +66,15 @@ uint16_t rl02::readWord(const uint16_t addr)
setBit(registers[reg], 7, true); // controller ready (CRDY)
}
uint16_t value = registers[reg];
uint16_t value = 0;
// TODO
if (addr == RL02_MPR) { // multi purpose register
value = mpr[0];
memcpy(&mpr[0], &mpr[1], sizeof(mpr[0]) * 2);
}
else {
value = registers[reg];
}
DOLOG(debug, false, "RL02 read %s/%o: %06o", regnames[reg], addr, value);
@ -153,6 +160,8 @@ void rl02::writeWord(const uint16_t addr, uint16_t v)
do_int = true;
}
else if (command == 4) { // read header
}
else if (command == 6 || command == 7) { // read data / read data without header check
uint16_t temp = registers[(RL02_DAR - RL02_BASE) / 2];
sector = temp & 63;

1
rl02.h
View file

@ -34,6 +34,7 @@ private:
int16_t track { 0 };
uint8_t head { 0 };
uint8_t sector { 0 };
uint16_t mpr[3];
std::vector<disk_backend *> fhs;
std::atomic_bool *const disk_read_acitivity { nullptr };