Merge branch 'master' into dc11-serial
This commit is contained in:
commit
52f38c0b6b
2 changed files with 71 additions and 52 deletions
|
@ -110,7 +110,7 @@ void console_esp32::panel_update_thread()
|
|||
int run_mode = current_PSW >> 14;
|
||||
|
||||
uint16_t current_PC = c->getPC();
|
||||
uint32_t full_addr = b->calculate_physical_address(run_mode, current_PC, false, false, true, i_space);
|
||||
uint32_t full_addr = b->getMMU()->calculate_physical_address(c, run_mode, current_PC, false, false, true, i_space);
|
||||
|
||||
uint16_t current_instr = b->read_word(current_PC);
|
||||
|
||||
|
|
21
rk05.cpp
21
rk05.cpp
|
@ -139,12 +139,18 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
|
|||
|
||||
if (func == 0) { // controller reset
|
||||
TRACE("RK05 invoke %d (controller reset)", func);
|
||||
registers[(RK05_ERROR - RK05_BASE) / 2] = 0;
|
||||
}
|
||||
else if (func == 1) { // write
|
||||
*disk_write_acitivity = true;
|
||||
|
||||
TRACE("RK05 drive %d position sec %d surf %d cyl %d, reclen %zo, WRITE to %o, mem: %o", device, sector, surface, cylinder, reclen, diskoffb, memoff);
|
||||
|
||||
if (device >= fhs.size()) {
|
||||
registers[(RK05_ERROR - RK05_BASE) / 2] |= 128; // non existing disk
|
||||
registers[(RK05_CS - RK05_BASE) / 2] |= 3 << 14; // an error occured
|
||||
}
|
||||
else {
|
||||
uint32_t work_reclen = reclen;
|
||||
uint32_t work_memoff = memoff;
|
||||
uint32_t work_diskoffb = diskoffb;
|
||||
|
@ -158,8 +164,12 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
|
|||
for(size_t i=0; i<cur; i++)
|
||||
xfer_buffer[i] = b->readUnibusByte(work_memoff++);
|
||||
|
||||
if (!fhs.at(device)->write(work_diskoffb, cur, xfer_buffer, 512))
|
||||
if (!fhs.at(device)->write(work_diskoffb, cur, xfer_buffer, 512)) {
|
||||
DOLOG(ll_error, true, "RK05(%d) write error %s to %u len %u", device, strerror(errno), work_diskoffb, cur);
|
||||
registers[(RK05_ERROR - RK05_BASE) / 2] |= 32; // non existing sector
|
||||
registers[(RK05_CS - RK05_BASE) / 2] |= 3 << 14; // an error occured
|
||||
break;
|
||||
}
|
||||
|
||||
work_diskoffb += cur;
|
||||
|
||||
|
@ -178,6 +188,7 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
|
|||
}
|
||||
|
||||
registers[(RK05_DA - RK05_BASE) / 2] = sector | (surface << 4) | (cylinder << 5);
|
||||
}
|
||||
|
||||
*disk_write_acitivity = false;
|
||||
}
|
||||
|
@ -186,6 +197,11 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
|
|||
|
||||
TRACE("RK05 drive %d position sec %d surf %d cyl %d, reclen %zo, READ from %o, mem: %o", device, sector, surface, cylinder, reclen, diskoffb, memoff);
|
||||
|
||||
if (device >= fhs.size()) {
|
||||
registers[(RK05_ERROR - RK05_BASE) / 2] |= 128; // non existing disk
|
||||
registers[(RK05_CS - RK05_BASE) / 2] |= 3 << 14; // an error occured
|
||||
}
|
||||
else {
|
||||
uint32_t temp_diskoffb = diskoffb;
|
||||
|
||||
uint32_t temp_reclen = reclen;
|
||||
|
@ -195,6 +211,8 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
|
|||
|
||||
if (!fhs.at(device)->read(temp_diskoffb, cur, xfer_buffer, 512)) {
|
||||
DOLOG(ll_error, true, "RK05 read error %s from %u len %u", strerror(errno), temp_diskoffb, cur);
|
||||
registers[(RK05_ERROR - RK05_BASE) / 2] |= 32; // non existing sector
|
||||
registers[(RK05_CS - RK05_BASE) / 2] |= 3 << 14; // an error occured
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -220,6 +238,7 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
|
|||
}
|
||||
|
||||
registers[(RK05_DA - RK05_BASE) / 2] = sector | (surface << 4) | (cylinder << 5);
|
||||
}
|
||||
|
||||
*disk_read_acitivity = false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue