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() void rl02::reset()
{ {
memset(registers, 0x00, sizeof registers); memset(registers, 0x00, sizeof registers );
memset(xfer_buffer, 0x00, sizeof xfer_buffer); memset(xfer_buffer, 0x00, sizeof xfer_buffer);
memset(mpr, 0x00, sizeof mpr );
track = 0; track = 0;
head = 0; head = 0;
@ -65,9 +66,15 @@ uint16_t rl02::readWord(const uint16_t addr)
setBit(registers[reg], 7, true); // controller ready (CRDY) 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); 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; do_int = true;
} }
else if (command == 4) { // read header
}
else if (command == 6 || command == 7) { // read data / read data without header check else if (command == 6 || command == 7) { // read data / read data without header check
uint16_t temp = registers[(RL02_DAR - RL02_BASE) / 2]; uint16_t temp = registers[(RL02_DAR - RL02_BASE) / 2];
sector = temp & 63; sector = temp & 63;

1
rl02.h
View file

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