summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/hdc92x4.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/hdc92x4.cpp')
-rw-r--r--src/devices/machine/hdc92x4.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/devices/machine/hdc92x4.cpp b/src/devices/machine/hdc92x4.cpp
index 06c0c9a8044..e7c42d31452 100644
--- a/src/devices/machine/hdc92x4.cpp
+++ b/src/devices/machine/hdc92x4.cpp
@@ -1670,7 +1670,6 @@ void hdc92x4_device::drive_select()
// Calculate the head load delays
head_load_delay = head_load_delay_enable? m_register_w[DATA] * head_load_timer_increment[m_selected_drive_type] : 0;
- if (fm_mode()) head_load_delay <<= 1;
LOGMASKED(LOG_SELECT, "DRIVE SELECT command (%02x): head load delay=%d, type=%d, drive=%d, pout=%02x, step_rate=%d\n", current_command(), head_load_delay, m_selected_drive_type, driveparm&3, m_register_w[RETRY_COUNT]&0x0f, pulse_width() + step_time());
@@ -1687,6 +1686,12 @@ void hdc92x4_device::drive_select()
m_output1 = (m_selected_drive_number != NODRIVE)? (0x10 << m_selected_drive_number) : 0;
m_output1 |= (m_register_w[RETRY_COUNT]&0x0f);
LOGMASKED(LOG_AUXBUS, "Setting OUTPUT1 to %02x\n", m_output1);
+
+ // We assume a minimum head delay of 4 ms that compensates for the
+ // spin-up of the floppy motor, even when no delay is set
+ if ((m_selected_drive_type == TYPE_FLOPPY5 || m_selected_drive_type == TYPE_FLOPPY8) && (head_load_delay < 4000))
+ head_load_delay = 4000;
+ if (fm_mode()) head_load_delay <<= 1;
m_substate = (head_load_delay>0)? HEAD_DELAY : DONE;
}