diff --git a/src/lib/formats/ti99_dsk.c b/src/lib/formats/ti99_dsk.c index 93dba665fe8..de6070b4c70 100644 --- a/src/lib/formats/ti99_dsk.c +++ b/src/lib/formats/ti99_dsk.c @@ -215,6 +215,10 @@ const ti99_sdf_format::format ti99_sdf_format::formats[] = floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, 4000, 9, 40, 2, 256, {}, 0, {}, 16, 11, 45 }, + { // 360K 5.25" double density double sided + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, 0, {}, 40, 22, 24 + }, { 0 } }; @@ -264,7 +268,7 @@ floppy_image_format_t::desc_e* ti99_sdf_format::get_desc_mfm(const format &f, in static floppy_image_format_t::desc_e desc_mfm[] = { { SECTOR_INTERLEAVE_SKEW, 10, 0 }, - { MFM, 0x4e, 40 }, // track lead-in + { MFM, 0x4e, f.gap_1 }, // track lead-in { SECTOR_LOOP_START, 0, 17 }, // 18 sectors { CRC_CCITT_START, 1 }, { RAW, 0x4489, 3 }, // A1 sync mark @@ -275,7 +279,7 @@ floppy_image_format_t::desc_e* ti99_sdf_format::get_desc_mfm(const format &f, in { SIZE_ID }, { CRC_END, 1 }, { CRC, 1 }, - { MFM, 0x4e, 22 }, // Gap 2 + { MFM, 0x4e, f.gap_2 }, // Gap 2 { MFM, 0x00, 12 }, { CRC_CCITT_START, 2 }, { RAW, 0x4489, 3 }, // A1 @@ -283,12 +287,12 @@ floppy_image_format_t::desc_e* ti99_sdf_format::get_desc_mfm(const format &f, in { SECTOR_DATA, -1 }, // Sector data { CRC_END, 2 }, { CRC, 2 }, - { MFM, 0x4e, 24 }, // Gap 3 + { MFM, 0x4e, f.gap_3 }, // Gap 3 { SECTOR_LOOP_END }, { MFM, 0x4e, 0 }, // track lead-out (712) { END } }; - current_size = (40 + 18 * (3 + 1 + 4 + 2 + 22 + 12 + 3 + 1 + 256 + 2 + 24) + 0) * 16; + current_size = (f.gap_1 + 18 * (3 + 1 + 4 + 2 + f.gap_2 + 12 + 3 + 1 + 256 + 2 + f.gap_3) + 0) * 16; end_gap_index = 22; return desc_mfm; diff --git a/src/mess/machine/ti99/ti_fdc.c b/src/mess/machine/ti99/ti_fdc.c index 187145b46c1..7577ed68eb7 100644 --- a/src/mess/machine/ti99/ti_fdc.c +++ b/src/mess/machine/ti99/ti_fdc.c @@ -223,7 +223,6 @@ WRITE8_MEMBER(ti_fdc_device::cruwrite) { // On rising edge, set motor_running for 4.23s if (TRACE_CRU) logerror("tifdc: trigger motor (bit 1)\n"); set_floppy_motors_running(true); - m_motor_on_timer->adjust(attotime::from_msec(4230)); } m_lastval = data; break; @@ -317,16 +316,28 @@ void ti_fdc_device::device_timer(emu_timer &timer, device_timer_id id, int param */ void ti_fdc_device::set_floppy_motors_running(bool run) { - if (TRACE_MOTOR) + if (run) { - if (m_DVENA==ASSERT_LINE && !run) logerror("tifdc: Motor STOP\n"); - if (m_DVENA==CLEAR_LINE && run) logerror("tifdc: Motor START\n"); + if (TRACE_MOTOR) + if (m_DVENA==CLEAR_LINE) logerror("tifdc: Motor START\n"); + m_DVENA = ASSERT_LINE; + m_motor_on_timer->adjust(attotime::from_msec(4230)); } - m_DVENA = (run)? ASSERT_LINE : CLEAR_LINE; + else + { + if (TRACE_MOTOR) + if (m_DVENA==ASSERT_LINE) logerror("tifdc: Motor STOP\n"); + m_DVENA = CLEAR_LINE; + } + + // The monoflop is connected to the READY line m_fd1771->set_force_ready(run); + // Set all motors for (int i=0; i < 3; i++) if (m_floppy[i] != NULL) m_floppy[i]->mon_w((run)? 0 : 1); + + // The motor-on line also connects to the wait state logic operate_ready_line(); }