bml3mp1802: updated to use the new wd fdc. changes are untested, system

is not working.
This commit is contained in:
Dirk Best 2015-06-01 18:08:37 +02:00
parent 0b593e25ea
commit 875a901dc2
2 changed files with 42 additions and 39 deletions

View File

@ -23,12 +23,9 @@
const device_type BML3BUS_MP1802 = &device_creator<bml3bus_mp1802_device>;
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<legacy_floppy_image_device>(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);

View File

@ -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<mb8866_device> m_wd17xx;
private:
required_device<mb8866_t> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<floppy_connector> m_floppy2;
required_device<floppy_connector> m_floppy3;
UINT8 *m_rom;
};