diff options
author | 2022-01-15 04:07:55 +0200 | |
---|---|---|
committer | 2022-01-14 21:07:55 -0500 | |
commit | 25dce8aa6db02bb38fe47dbe6637955caa38dae8 (patch) | |
tree | 69c71f2a5b950939039da76348439872caf6aa11 | |
parent | 93b3d4bcde04c7706bbe63310a49246a92d27007 (diff) |
upd765: Check write protect during write & format commands (#9145)
-rw-r--r-- | src/devices/machine/upd765.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index 5d86ca20211..3f0c442555f 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -2005,6 +2005,14 @@ void upd765_family_device::write_data_start(floppy_info &fi) write_data_continue(fi); return; } + else if(fi.dev && fi.dev->wpt_r()) { + fi.st0 |= ST0_FAIL; + fi.sub_state = COMMAND_DONE; + st1 = ST1_NW; + st2 = 0; + write_data_continue(fi); + return; + } write_data_continue(fi); } @@ -2315,12 +2323,21 @@ void upd765_family_device::format_track_start(floppy_info &fi) set_ds(command[1] & 3); fi.ready = get_ready(command[1] & 3); + st1 = 0; + st2 = 0; if(!fi.ready) { fi.st0 = (command[1] & 7) | ST0_NR | ST0_FAIL; fi.sub_state = TRACK_DONE; format_track_continue(fi); return; } + else if(fi.dev && fi.dev->wpt_r()) { + fi.st0 = (command[1] & 7) | ST0_FAIL; + fi.sub_state = TRACK_DONE; + st1 = ST1_NW; + format_track_continue(fi); + return; + } fi.st0 = command[1] & 7; if(fi.dev) @@ -2360,8 +2377,8 @@ void upd765_family_device::format_track_continue(floppy_info &fi) LOGSTATE("TRACK_DONE\n"); main_phase = PHASE_RESULT; result[0] = fi.st0; - result[1] = 0; - result[2] = 0; + result[1] = st1; + result[2] = st2; result[3] = 0; result[4] = 0; result[5] = 0; |