summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/heathzenith/h89/mms77316_fdc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/heathzenith/h89/mms77316_fdc.cpp')
-rw-r--r--src/devices/bus/heathzenith/h89/mms77316_fdc.cpp74
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");