diff options
Diffstat (limited to 'src/devices/bus/heathzenith/h89/mms77316_fdc.cpp')
-rw-r--r-- | src/devices/bus/heathzenith/h89/mms77316_fdc.cpp | 74 |
1 files changed, 11 insertions, 63 deletions
diff --git a/src/devices/bus/heathzenith/h89/mms77316_fdc.cpp b/src/devices/bus/heathzenith/h89/mms77316_fdc.cpp index b0af15bdcea..87a1599d8a2 100644 --- a/src/devices/bus/heathzenith/h89/mms77316_fdc.cpp +++ b/src/devices/bus/heathzenith/h89/mms77316_fdc.cpp @@ -14,9 +14,6 @@ #include "mms77316_fdc.h" -#include "imagedev/floppy.h" -#include "machine/wd_fdc.h" - #define LOG_REG (1U << 1) // Shows register setup #define LOG_LINES (1U << 2) // Show control lines #define LOG_DRIVE (1U << 3) // Show drive select @@ -43,60 +40,13 @@ #define FUNCNAME __PRETTY_FUNCTION__ #endif -namespace { - -class mms77316_fdc_device : public device_t, public device_h89bus_right_card_interface -{ -public: - mms77316_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); - - virtual void write(u8 select_lines, u8 offset, u8 data) override; - virtual u8 read(u8 select_lines, u8 offset) override; - -protected: - virtual void device_start() override ATTR_COLD; - virtual void device_reset() override ATTR_COLD; - virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; - - void ctrl_w(u8 val); - void data_w(u8 val); - u8 data_r(); - - void set_irq(int state); - void set_drq(int state); - - // Burst mode was required for a 2 MHz Z80 to handle 8" DD data rates. - // The typical irq/drq was too slow, this utilizes wait states to read the - // WD1797 data port once the drq line is high. - inline bool burst_mode_r() { return !m_drq_allowed; } - -private: - required_device<fd1797_device> m_fdc; - required_device_array<floppy_connector, 8> m_floppies; - - bool m_irq_allowed; - bool m_drq_allowed; - - bool m_irq; - bool m_drq; - u32 m_drq_count; - - /// Bits set in cmd_ControlPort_c - static constexpr u8 ctrl_525DriveSel_c = 2; - static constexpr u8 ctrl_EnableIntReq_c = 3; - static constexpr u8 ctrl_EnableDrqInt_c = 5; - static constexpr u8 ctrl_SetMFMRecording_c = 6; - - static constexpr XTAL MASTER_CLOCK = XTAL(8'000'000); - static constexpr XTAL FIVE_IN_CLOCK = MASTER_CLOCK / 8; - static constexpr XTAL EIGHT_IN_CLOCK = MASTER_CLOCK / 4; -}; mms77316_fdc_device::mms77316_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock): device_t(mconfig, H89BUS_MMS77316, tag, owner, 0), device_h89bus_right_card_interface(mconfig, *this), m_fdc(*this, "mms_fdc"), - m_floppies(*this, "mms_fdc:%u", 0U) + m_floppies(*this, "mms_fdc:%u", 0U), + m_intr_cntrl(*this, finder_base::DUMMY_TAG) { } @@ -117,13 +67,13 @@ void mms77316_fdc_device::ctrl_w(u8 val) if (m_irq_allowed) { - set_slot_fdcirq(m_irq); - set_slot_fdcdrq(m_drq); + m_intr_cntrl->set_irq(m_irq); + m_intr_cntrl->set_drq(m_drq); } else { - set_slot_fdcirq(CLEAR_LINE); - set_slot_fdcdrq(CLEAR_LINE); + m_intr_cntrl->set_irq(CLEAR_LINE); + m_intr_cntrl->set_drq(CLEAR_LINE); } LOGDRIVE("%s: floppydrive: %d, 5.25 in: %d\n", FUNCNAME, floppy_drive, five_in_drv); @@ -273,8 +223,8 @@ void mms77316_fdc_device::device_reset() m_irq = false; m_drq_count = 0; - set_slot_fdcirq(CLEAR_LINE); - set_slot_fdcdrq(CLEAR_LINE); + m_intr_cntrl->set_irq(CLEAR_LINE); + m_intr_cntrl->set_drq(CLEAR_LINE); set_slot_wait(CLEAR_LINE); for (int i = 0; i < 4; i++) @@ -355,7 +305,7 @@ void mms77316_fdc_device::set_irq(int state) m_drq_count = 0; } - set_slot_fdcirq(m_irq_allowed ? m_irq : CLEAR_LINE); + m_intr_cntrl->set_irq(m_irq_allowed ? m_irq : CLEAR_LINE); } void mms77316_fdc_device::set_drq(int state) @@ -373,14 +323,12 @@ void mms77316_fdc_device::set_drq(int state) set_slot_wait(CLEAR_LINE); } - set_slot_fdcdrq(m_drq_count == 0 ? m_drq : CLEAR_LINE); + m_intr_cntrl->set_drq(m_drq_count == 0 ? m_drq : CLEAR_LINE); } else { - set_slot_fdcdrq(m_drq_allowed ? m_drq : CLEAR_LINE); + m_intr_cntrl->set_drq(m_drq_allowed ? m_drq : CLEAR_LINE); } } -} // anonymous namespace - DEFINE_DEVICE_TYPE_PRIVATE(H89BUS_MMS77316, device_h89bus_right_card_interface, mms77316_fdc_device, "mms77316_fdc", "Magnolia MicroSystems 77316 Soft-sectored Controller"); |