mirror of
https://github.com/holub/mame
synced 2025-06-10 06:47:18 +03:00
Add FDC Write Protect Delay (#10538)
This commit is contained in:
parent
1b0163f8d2
commit
0ec162cb1b
@ -98,6 +98,8 @@ static const char *const states[] =
|
|||||||
"SPINUP_DONE",
|
"SPINUP_DONE",
|
||||||
"SETTLE_WAIT",
|
"SETTLE_WAIT",
|
||||||
"SETTLE_DONE",
|
"SETTLE_DONE",
|
||||||
|
"WRITE_PROTECT_WAIT",
|
||||||
|
"WRITE_PROTECT_DONE",
|
||||||
"DATA_LOAD_WAIT",
|
"DATA_LOAD_WAIT",
|
||||||
"DATA_LOAD_WAIT_DONE",
|
"DATA_LOAD_WAIT_DONE",
|
||||||
"SEEK_MOVE",
|
"SEEK_MOVE",
|
||||||
@ -871,8 +873,8 @@ void wd_fdc_device_base::write_track_continue()
|
|||||||
LOGSTATE("SETTLE_DONE\n");
|
LOGSTATE("SETTLE_DONE\n");
|
||||||
if (floppy && floppy->wpt_r()) {
|
if (floppy && floppy->wpt_r()) {
|
||||||
LOGSTATE("WRITE_PROT\n");
|
LOGSTATE("WRITE_PROT\n");
|
||||||
status |= S_WP;
|
sub_state = WRITE_PROTECT_WAIT;
|
||||||
command_end();
|
delay_cycles(t_gen, 218);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
set_drq();
|
set_drq();
|
||||||
@ -880,6 +882,16 @@ void wd_fdc_device_base::write_track_continue()
|
|||||||
delay_cycles(t_gen, 192);
|
delay_cycles(t_gen, 192);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case WRITE_PROTECT_WAIT:
|
||||||
|
LOGSTATE("WRITE_PROTECT_WAIT\n");
|
||||||
|
return;
|
||||||
|
|
||||||
|
case WRITE_PROTECT_DONE:
|
||||||
|
LOGSTATE("WRITE_PROTECT_DONE\n");
|
||||||
|
status |= S_WP;
|
||||||
|
command_end();
|
||||||
|
return;
|
||||||
|
|
||||||
case DATA_LOAD_WAIT:
|
case DATA_LOAD_WAIT:
|
||||||
LOGSTATE("DATA_LOAD_WAIT\n");
|
LOGSTATE("DATA_LOAD_WAIT\n");
|
||||||
return;
|
return;
|
||||||
@ -983,8 +995,8 @@ void wd_fdc_device_base::write_sector_continue()
|
|||||||
LOGSTATE("SETTLE_DONE\n");
|
LOGSTATE("SETTLE_DONE\n");
|
||||||
if (floppy && floppy->wpt_r()) {
|
if (floppy && floppy->wpt_r()) {
|
||||||
LOGSTATE("WRITE_PROT\n");
|
LOGSTATE("WRITE_PROT\n");
|
||||||
status |= S_WP;
|
sub_state = WRITE_PROTECT_WAIT;
|
||||||
command_end();
|
delay_cycles(t_gen, 218);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sub_state = SCAN_ID;
|
sub_state = SCAN_ID;
|
||||||
@ -992,6 +1004,16 @@ void wd_fdc_device_base::write_sector_continue()
|
|||||||
live_start(SEARCH_ADDRESS_MARK_HEADER);
|
live_start(SEARCH_ADDRESS_MARK_HEADER);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case WRITE_PROTECT_WAIT:
|
||||||
|
LOGSTATE("WRITE_PROTECT_WAIT\n");
|
||||||
|
return;
|
||||||
|
|
||||||
|
case WRITE_PROTECT_DONE:
|
||||||
|
LOGSTATE("WRITE_PROTECT_DONE\n");
|
||||||
|
status |= S_WP;
|
||||||
|
command_end();
|
||||||
|
return;
|
||||||
|
|
||||||
case SCAN_ID:
|
case SCAN_ID:
|
||||||
LOGSTATE("SCAN_ID\n");
|
LOGSTATE("SCAN_ID\n");
|
||||||
if(!sector_matches()) {
|
if(!sector_matches()) {
|
||||||
@ -1141,6 +1163,10 @@ void wd_fdc_device_base::do_generic()
|
|||||||
sub_state = SETTLE_DONE;
|
sub_state = SETTLE_DONE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WRITE_PROTECT_WAIT:
|
||||||
|
sub_state = WRITE_PROTECT_DONE;
|
||||||
|
break;
|
||||||
|
|
||||||
case SEEK_WAIT_STEP_TIME:
|
case SEEK_WAIT_STEP_TIME:
|
||||||
sub_state = SEEK_WAIT_STEP_TIME_DONE;
|
sub_state = SEEK_WAIT_STEP_TIME_DONE;
|
||||||
break;
|
break;
|
||||||
@ -1518,6 +1544,8 @@ void wd_fdc_device_base::index_callback(floppy_image_device *floppy, int state)
|
|||||||
case SPINUP_DONE:
|
case SPINUP_DONE:
|
||||||
case SETTLE_WAIT:
|
case SETTLE_WAIT:
|
||||||
case SETTLE_DONE:
|
case SETTLE_DONE:
|
||||||
|
case WRITE_PROTECT_WAIT:
|
||||||
|
case WRITE_PROTECT_DONE:
|
||||||
case DATA_LOAD_WAIT:
|
case DATA_LOAD_WAIT:
|
||||||
case DATA_LOAD_WAIT_DONE:
|
case DATA_LOAD_WAIT_DONE:
|
||||||
case SEEK_MOVE:
|
case SEEK_MOVE:
|
||||||
|
@ -200,6 +200,9 @@ private:
|
|||||||
SETTLE_WAIT,
|
SETTLE_WAIT,
|
||||||
SETTLE_DONE,
|
SETTLE_DONE,
|
||||||
|
|
||||||
|
WRITE_PROTECT_WAIT,
|
||||||
|
WRITE_PROTECT_DONE,
|
||||||
|
|
||||||
DATA_LOAD_WAIT,
|
DATA_LOAD_WAIT,
|
||||||
DATA_LOAD_WAIT_DONE,
|
DATA_LOAD_WAIT_DONE,
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user