diff --git a/src/emu/bus/bml3/bml3mp1802.c b/src/emu/bus/bml3/bml3mp1802.c index af061edbab9..860d827caa3 100644 --- a/src/emu/bus/bml3/bml3mp1802.c +++ b/src/emu/bus/bml3/bml3mp1802.c @@ -23,12 +23,9 @@ const device_type BML3BUS_MP1802 = &device_creator; -static const floppy_interface bml3_mp1802_floppy_interface = -{ - FLOPPY_STANDARD_5_25_DSDD, - LEGACY_FLOPPY_OPTIONS_NAME(default), - NULL -}; +static SLOT_INTERFACE_START( mp1802_floppies ) + SLOT_INTERFACE("dd", FLOPPY_525_DD) +SLOT_INTERFACE_END WRITE_LINE_MEMBER( bml3bus_mp1802_device::bml3_wd17xx_intrq_w ) { @@ -46,11 +43,13 @@ ROM_START( mp1802 ) ROM_END MACHINE_CONFIG_FRAGMENT( mp1802 ) - MCFG_DEVICE_ADD("wd17xx", MB8866, 0) - MCFG_WD17XX_DEFAULT_DRIVE2_TAGS - MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(bml3bus_mp1802_device, bml3_wd17xx_intrq_w)) + MCFG_MB8866x_ADD("fdc", XTAL_1MHz) + MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bml3bus_mp1802_device, bml3_wd17xx_intrq_w)) - MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bml3_mp1802_floppy_interface) + MCFG_FLOPPY_DRIVE_ADD("fdc:0", mp1802_floppies, "dd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fdc:1", mp1802_floppies, "dd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fdc:2", mp1802_floppies, "", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fdc:3", mp1802_floppies, "", floppy_image_device::default_floppy_formats) MACHINE_CONFIG_END /*************************************************************************** @@ -78,34 +77,28 @@ const rom_entry *bml3bus_mp1802_device::device_rom_region() const READ8_MEMBER( bml3bus_mp1802_device::bml3_mp1802_r) { - return m_wd17xx->drq_r() ? 0x00 : 0x80; + return m_fdc->drq_r() ? 0x00 : 0x80; } WRITE8_MEMBER( bml3bus_mp1802_device::bml3_mp1802_w) { - int drive = data & 0x03; - int side = BIT(data, 4); - int motor = BIT(data, 3); - const char *floppy_name = NULL; - switch (drive) { - case 0: - floppy_name = FLOPPY_0; - break; - case 1: - floppy_name = FLOPPY_1; - break; - case 2: - floppy_name = FLOPPY_2; - break; - case 3: - floppy_name = FLOPPY_3; - break; + floppy_image_device *floppy = NULL; + + switch (data & 0x03) + { + case 0: floppy = m_floppy0->get_device(); break; + case 1: floppy = m_floppy1->get_device(); break; + case 2: floppy = m_floppy2->get_device(); break; + case 3: floppy = m_floppy3->get_device(); break; + } + + m_fdc->set_floppy(floppy); + + if (floppy) + { + floppy->mon_w(!BIT(data, 3)); + floppy->ss_w(BIT(data, 4)); } - legacy_floppy_image_device *floppy = subdevice(floppy_name); - m_wd17xx->set_drive(drive); - floppy->floppy_mon_w(!motor); - floppy->floppy_drive_set_ready_state(ASSERT_LINE, 0); - m_wd17xx->set_side(side); } @@ -116,7 +109,11 @@ WRITE8_MEMBER( bml3bus_mp1802_device::bml3_mp1802_w) bml3bus_mp1802_device::bml3bus_mp1802_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, BML3BUS_MP1802, "Hitachi MP-1802 Floppy Controller Card", tag, owner, clock, "bml3mp1802", __FILE__), device_bml3bus_card_interface(mconfig, *this), - m_wd17xx(*this, "wd17xx") + m_fdc(*this, "fdc"), + m_floppy0(*this, "fdc:0"), + m_floppy1(*this, "fdc:1"), + m_floppy2(*this, "fdc:2"), + m_floppy3(*this, "fdc:3") { } @@ -134,8 +131,8 @@ void bml3bus_mp1802_device::device_start() // install into memory address_space &space_prg = machine().firstcpu->space(AS_PROGRAM); - space_prg.install_readwrite_handler(0xff00, 0xff03, read8_delegate(FUNC(mb8866_device::read),(mb8866_device*)m_wd17xx), write8_delegate(FUNC(mb8866_device::write),(mb8866_device*)m_wd17xx)); - space_prg.install_readwrite_handler(0xff04, 0xff04, read8_delegate(FUNC(bml3bus_mp1802_device::bml3_mp1802_r), this), write8_delegate(FUNC(bml3bus_mp1802_device::bml3_mp1802_w), this) ); + space_prg.install_readwrite_handler(0xff00, 0xff03, read8_delegate(FUNC(mb8866_t::read),(mb8866_t*)m_fdc), write8_delegate(FUNC(mb8866_t::write),(mb8866_t*)m_fdc)); + space_prg.install_readwrite_handler(0xff04, 0xff04, read8_delegate(FUNC(bml3bus_mp1802_device::bml3_mp1802_r), this), write8_delegate(FUNC(bml3bus_mp1802_device::bml3_mp1802_w), this)); // overwriting the main ROM (rather than using e.g. install_rom) should mean that bank switches for RAM expansion still work... UINT8 *mainrom = device().machine().root_device().memregion("maincpu")->base(); memcpy(mainrom + 0xf800, m_rom + 0xf800, 0x800); diff --git a/src/emu/bus/bml3/bml3mp1802.h b/src/emu/bus/bml3/bml3mp1802.h index 6569171a199..0c4088c0d4f 100644 --- a/src/emu/bus/bml3/bml3mp1802.h +++ b/src/emu/bus/bml3/bml3mp1802.h @@ -15,7 +15,8 @@ #include "emu.h" #include "bml3bus.h" #include "imagedev/flopdrv.h" -#include "machine/wd17xx.h" +#include "machine/wd_fdc.h" + //************************************************************************** // TYPE DEFINITIONS @@ -36,13 +37,18 @@ public: DECLARE_READ8_MEMBER(bml3_mp1802_r); DECLARE_WRITE8_MEMBER(bml3_mp1802_w); DECLARE_WRITE_LINE_MEMBER(bml3_wd17xx_intrq_w); + protected: virtual void device_start(); virtual void device_reset(); - required_device m_wd17xx; - private: + required_device m_fdc; + required_device m_floppy0; + required_device m_floppy1; + required_device m_floppy2; + required_device m_floppy3; + UINT8 *m_rom; };