summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author SomeRandomGuyIdk <49554779+SomeRandomGuyIdk@users.noreply.github.com>2022-01-15 04:07:55 +0200
committer GitHub <noreply@github.com>2022-01-14 21:07:55 -0500
commit25dce8aa6db02bb38fe47dbe6637955caa38dae8 (patch)
tree69c71f2a5b950939039da76348439872caf6aa11
parent93b3d4bcde04c7706bbe63310a49246a92d27007 (diff)
upd765: Check write protect during write & format commands (#9145)
-rw-r--r--src/devices/machine/upd765.cpp21
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;