diff --git a/src/mess/drivers/mbc55x.c b/src/mess/drivers/mbc55x.c index 7c3017d0544..2ff26f364f6 100644 --- a/src/mess/drivers/mbc55x.c +++ b/src/mess/drivers/mbc55x.c @@ -32,12 +32,6 @@ const unsigned char mbc55x_palette[SCREEN_NO_COLOURS][3] = { 0x80,0x80,0x80 }, /* light grey */ }; -static const floppy_interface mbc55x_floppy_interface = -{ - FLOPPY_STANDARD_5_25_DSSD_35, - LEGACY_FLOPPY_OPTIONS_NAME(pc), - "floppy_5_25" -}; static ADDRESS_MAP_START(mbc55x_mem, AS_PROGRAM, 8, mbc55x_state) AM_RANGE( 0x00000, 0x0FFFF ) AM_RAMBANK(RAM_BANK00_TAG) @@ -224,6 +218,23 @@ PALETTE_INIT_MEMBER(mbc55x_state, mbc55x) } +FLOPPY_FORMATS_MEMBER( mbc55x_state::floppy_formats ) + FLOPPY_PC_FORMAT +FLOPPY_FORMATS_END + + +// MBC-550 : 1 x 5.25" disk-drive (160 KB) +// MBC-555 : 2 x 5.25" disk-drive (160 KB) +// MBC-555-2 : 2 x 5.25" disk-drive (360 KB) +// MBC-555-3 : 2 x 5.25" disk-drive (720 KB) + +static SLOT_INTERFACE_START( mbc55x_floppies ) + SLOT_INTERFACE("ssdd", FLOPPY_525_SSDD) + SLOT_INTERFACE("dd", FLOPPY_525_DD) + SLOT_INTERFACE("qd", FLOPPY_525_QD) +SLOT_INTERFACE_END + + static MACHINE_CONFIG_START( mbc55x, mbc55x_state ) /* basic machine hardware */ MCFG_CPU_ADD(MAINCPU_TAG, I8088, 3600000) @@ -281,13 +292,12 @@ static MACHINE_CONFIG_START( mbc55x, mbc55x_state ) MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(mbc55x_state, vid_vsync_changed)) /* Backing storage */ - MCFG_DEVICE_ADD(FDC_TAG, FD1793, 0) - MCFG_WD17XX_DEFAULT_DRIVE4_TAGS - MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(mbc55x_state, mbc55x_fdc_intrq_w)) - MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(mbc55x_state, mbc55x_fdc_drq_w)) - MCFG_WD17XX_DDEN_CALLBACK(GND) + MCFG_FD1793x_ADD(FDC_TAG, XTAL_1MHz) - MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(mbc55x_floppy_interface) + MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", mbc55x_floppies, "qd", mbc55x_state::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", mbc55x_floppies, "qd", mbc55x_state::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":2", mbc55x_floppies, "", mbc55x_state::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":3", mbc55x_floppies, "", mbc55x_state::floppy_formats) /* Software list */ MCFG_SOFTWARE_LIST_ADD("disk_list","mbc55x") diff --git a/src/mess/includes/mbc55x.h b/src/mess/includes/mbc55x.h index fc308aeaf3e..dd47893cbc6 100644 --- a/src/mess/includes/mbc55x.h +++ b/src/mess/includes/mbc55x.h @@ -15,7 +15,7 @@ #include "machine/i8255.h" #include "machine/pit8253.h" #include "machine/pic8259.h" -#include "machine/wd17xx.h" +#include "machine/wd_fdc.h" #include "machine/i8251.h" #include "sound/speaker.h" #include "video/mc6845.h" @@ -98,19 +98,29 @@ public: m_ppi(*this, PPI8255_TAG), m_pic(*this, PIC8259_TAG), m_fdc(*this, FDC_TAG), + m_floppy0(*this, FDC_TAG ":0"), + m_floppy1(*this, FDC_TAG ":1"), + m_floppy2(*this, FDC_TAG ":2"), + m_floppy3(*this, FDC_TAG ":3"), m_speaker(*this, "speaker"), m_ram(*this, RAM_TAG), m_palette(*this, "palette") { } + DECLARE_FLOPPY_FORMATS(floppy_formats); + required_device m_maincpu; required_device m_crtc; required_device m_kb_uart; required_device m_pit; required_device m_ppi; required_device m_pic; - required_device m_fdc; + required_device m_fdc; + required_device m_floppy0; + required_device m_floppy1; + required_device m_floppy2; + required_device m_floppy3; required_device m_speaker; required_device m_ram; required_device m_palette; diff --git a/src/mess/machine/mbc55x.c b/src/mess/machine/mbc55x.c index f2e341d5f9c..67027abacee 100644 --- a/src/mess/machine/mbc55x.c +++ b/src/mess/machine/mbc55x.c @@ -72,8 +72,25 @@ WRITE8_MEMBER( mbc55x_state::mbc55x_ppi_portb_w ) WRITE8_MEMBER( mbc55x_state::mbc55x_ppi_portc_w ) { - m_fdc->set_drive((data & 0x03)); - m_fdc->set_side(BIT(data, 2)); + 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(0); + floppy->ss_w(BIT(data, 2)); + } + + printf("port c %02x\n", data); } /* Serial port USART, unimplemented as yet */