diff options
author | 2015-05-31 13:08:37 +0200 | |
---|---|---|
committer | 2015-05-31 13:08:57 +0200 | |
commit | 3a9d6f4b4be4bed19720eea2cffab021139bd241 (patch) | |
tree | f3d8555f76060317f30ff7e49866a816d8dd3bb2 | |
parent | f23ff0f6f05eb62bb34ab00f9dce1a697a38a877 (diff) |
mbc200: updated to use the new wd fdc and make it boot.
-rw-r--r-- | src/mess/drivers/mbc200.c | 77 |
1 files changed, 35 insertions, 42 deletions
diff --git a/src/mess/drivers/mbc200.c b/src/mess/drivers/mbc200.c index fc15fd4c9ca..6a7f02e4bb2 100644 --- a/src/mess/drivers/mbc200.c +++ b/src/mess/drivers/mbc200.c @@ -41,8 +41,7 @@ #include "machine/i8255.h" #include "machine/i8251.h" #include "video/mc6845.h" -//#include "machine/wd_fdc.h" -#include "machine/wd17xx.h" +#include "machine/wd_fdc.h" class mbc200_state : public driver_device @@ -56,14 +55,13 @@ public: , m_vram(*this, "vram") , m_maincpu(*this, "maincpu") , m_fdc(*this, "fdc") - //, m_floppy0(*this, "fdc:0") - //, m_floppy1(*this, "fdc:1") - , m_floppy0(*this, FLOPPY_0) - , m_floppy1(*this, FLOPPY_1) + , m_floppy0(*this, "fdc:0") + , m_floppy1(*this, "fdc:1") { } DECLARE_READ8_MEMBER(p2_porta_r); DECLARE_WRITE8_MEMBER(pm_porta_w); + DECLARE_WRITE8_MEMBER(pm_portb_w); MC6845_UPDATE_ROW(update_row); required_device<palette_device> m_palette; @@ -75,12 +73,9 @@ private: required_device<i8255_device> m_ppi_m; required_shared_ptr<UINT8> m_vram; required_device<cpu_device> m_maincpu; - //required_device<mb8876_t> m_fdc; - //required_device<floppy_connector> m_floppy0; - //required_device<floppy_connector> m_floppy1; - required_device<mb8876_device> m_fdc; - required_device<legacy_floppy_image_device> m_floppy0; - required_device<legacy_floppy_image_device> m_floppy1; + required_device<mb8876_t> m_fdc; + required_device<floppy_connector> m_floppy0; + required_device<floppy_connector> m_floppy1; }; @@ -97,13 +92,32 @@ WRITE8_MEMBER( mbc200_state::pm_porta_w ) m_comm_latch = data; // to slave CPU } +WRITE8_MEMBER( mbc200_state::pm_portb_w ) +{ + floppy_image_device *floppy = NULL; + + // to be verified + switch (data & 0x01) + { + case 0: floppy = m_floppy0->get_device(); break; + case 1: floppy = m_floppy1->get_device(); break; + } + + m_fdc->set_floppy(floppy); + + if (floppy) + { + floppy->mon_w(0); + floppy->ss_w(BIT(data, 7)); + } +} + static ADDRESS_MAP_START( mbc200_io , AS_IO, 8, mbc200_state) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0xe0, 0xe0) AM_DEVREADWRITE("i8251_1", i8251_device, data_r, data_w) AM_RANGE(0xe1, 0xe1) AM_DEVREADWRITE("i8251_1", i8251_device, status_r, control_w) - //AM_RANGE(0xe4, 0xe7) AM_DEVREADWRITE("fdc", mb8876_t, read, write) - AM_RANGE(0xe4, 0xe7) AM_DEVREADWRITE("fdc", mb8876_device, read, write) + AM_RANGE(0xe4, 0xe7) AM_DEVREADWRITE("fdc", mb8876_t, read, write) AM_RANGE(0xe8, 0xeb) AM_DEVREADWRITE("ppi_m", i8255_device, read, write) AM_RANGE(0xec, 0xec) AM_DEVREADWRITE("i8251_2", i8251_device, data_r, data_w) AM_RANGE(0xed, 0xed) AM_DEVREADWRITE("i8251_2", i8251_device, status_r, control_w) @@ -142,18 +156,6 @@ INPUT_PORTS_END void mbc200_state::machine_start() { -// floppy_image_device *floppy = NULL; -// floppy = m_floppy0->get_device(); -// floppy1 not supported currently -// m_fdc->set_floppy(floppy); - -// if (floppy) -// floppy->mon_w(0); - - m_floppy0->floppy_mon_w(0); - m_floppy1->floppy_mon_w(0); - m_floppy0->floppy_drive_set_ready_state(1, 1); - m_floppy1->floppy_drive_set_ready_state(1, 1); } void mbc200_state::machine_reset() @@ -163,16 +165,9 @@ void mbc200_state::machine_reset() memcpy(main, roms, 0x1000); } -static const floppy_interface mbc200_floppy_interface = -{ - FLOPPY_STANDARD_5_25_SSDD_40, - LEGACY_FLOPPY_OPTIONS_NAME(default), - "floppy_5_25" -}; - -//static SLOT_INTERFACE_START( mbc200_floppies ) -// SLOT_INTERFACE( "525dd", FLOPPY_525_SSDD ) -//SLOT_INTERFACE_END +static SLOT_INTERFACE_START( mbc200_floppies ) + SLOT_INTERFACE("qd", FLOPPY_525_QD ) +SLOT_INTERFACE_END MC6845_UPDATE_ROW( mbc200_state::update_row ) { @@ -244,16 +239,14 @@ static MACHINE_CONFIG_START( mbc200, mbc200_state ) MCFG_DEVICE_ADD("ppi_m", I8255, 0) MCFG_I8255_OUT_PORTA_CB(WRITE8(mbc200_state, pm_porta_w)) + MCFG_I8255_OUT_PORTB_CB(WRITE8(mbc200_state, pm_portb_w)) MCFG_DEVICE_ADD("i8251_1", I8251, 0) // INS8251N MCFG_DEVICE_ADD("i8251_2", I8251, 0) // INS8251A - //MCFG_MB8876x_ADD("fdc", 1000000) // guess - //MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbc200_floppies, "525dd", floppy_image_device::default_floppy_formats) - //MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbc200_floppies, "525dd", floppy_image_device::default_floppy_formats) - MCFG_DEVICE_ADD("fdc", MB8876, 0) // MB8876A - MCFG_WD17XX_DEFAULT_DRIVE2_TAGS - MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(mbc200_floppy_interface) + MCFG_MB8876x_ADD("fdc", XTAL_8MHz / 8) // guess + MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbc200_floppies, "qd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbc200_floppies, "qd", floppy_image_device::default_floppy_formats) /* software lists */ MCFG_SOFTWARE_LIST_ADD("flop_list", "mbc200") |