From 1032098a74d73914147a4afc4b16ec541d81ef35 Mon Sep 17 00:00:00 2001 From: cracyc Date: Thu, 16 Aug 2018 22:00:21 -0500 Subject: [PATCH] upd765: add aux commands to 72065 (nw) --- src/devices/machine/upd765.cpp | 16 +++++++++++++++- src/devices/machine/upd765.h | 1 + src/mame/drivers/mpc3000.cpp | 9 ++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index 8d324ea91a7..32cc58fe20f 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -72,7 +72,7 @@ void i8272a_device::map(address_map &map) void upd72065_device::map(address_map &map) { - map(0x0, 0x0).r(FUNC(upd72065_device::msr_r)); + map(0x0, 0x0).rw(FUNC(upd72065_device::msr_r), FUNC(upd72065_device::auxcmd_w)); map(0x1, 0x1).rw(FUNC(upd72065_device::fifo_r), FUNC(upd72065_device::fifo_w)); } @@ -2989,3 +2989,17 @@ WRITE8_MEMBER(tc8566af_device::cr1_w) tc_w((m_cr1 & 0x01) ? true : false); } } + +WRITE8_MEMBER(upd72065_device::auxcmd_w) +{ + switch(data) + { + case 0x36: // reset + soft_reset(); + break; + case 0x35: // set standby + break; + case 0x34: // reset standby + break; + } +} diff --git a/src/devices/machine/upd765.h b/src/devices/machine/upd765.h index c4fd1acb2da..9d71c51858a 100644 --- a/src/devices/machine/upd765.h +++ b/src/devices/machine/upd765.h @@ -510,6 +510,7 @@ public: upd72065_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; + DECLARE_WRITE8_MEMBER(auxcmd_w); }; class n82077aa_device : public upd765_family_device { diff --git a/src/mame/drivers/mpc3000.cpp b/src/mame/drivers/mpc3000.cpp index f682f53fd21..b5d2fb1e347 100644 --- a/src/mame/drivers/mpc3000.cpp +++ b/src/mame/drivers/mpc3000.cpp @@ -61,6 +61,7 @@ #include "speaker.h" #include "screen.h" #include "emupal.h" +#include "machine/upd765.h" class mpc3000_state : public driver_device { @@ -71,6 +72,7 @@ public: , m_lcdc(*this, "lcdc") , m_dsp(*this, "dsp") , m_mdout(*this, "mdout") + , m_fdc(*this, "upd72068") { } void mpc3000(machine_config &config); @@ -82,7 +84,7 @@ private: required_device m_lcdc; required_device m_dsp; required_device m_mdout; - + required_device m_fdc; virtual void machine_start() override; virtual void machine_reset() override; @@ -131,6 +133,7 @@ void mpc3000_state::mpc3000_io_map(address_map &map) map(0x0068, 0x0069).rw(FUNC(mpc3000_state::dsp_0008_hack_r), FUNC(mpc3000_state::dsp_0008_hack_w)); map(0x00e0, 0x00e0).rw(m_lcdc, FUNC(hd61830_device::data_r), FUNC(hd61830_device::data_w)).umask16(0x00ff); map(0x00e2, 0x00e2).rw(m_lcdc, FUNC(hd61830_device::status_r), FUNC(hd61830_device::control_w)).umask16(0x00ff); + map(0x00e8, 0x00eb).m(m_fdc, FUNC(upd72065_device::map)).umask16(0x00ff); } READ8_MEMBER(mpc3000_state::dma_memr_cb) @@ -170,6 +173,10 @@ void mpc3000_state::mpc3000(machine_config &config) MCFG_PALETTE_ADD("palette", 2) MCFG_PALETTE_INIT_OWNER(mpc3000_state, mpc3000) + MCFG_UPD72065_ADD("upd72068", true, true) // TODO: upd72068 supports motor control + //MCFG_UPD765_INTRQ_CALLBACK(WRITELINE("maincpu", v53a_device, ir?_w)) + //MCFG_UPD765_DRQ_CALLBACK(WRITELINE("maincpu", v53a_device, drq?_w)) + HD61830(config, m_lcdc, 4.9152_MHz_XTAL / 2 / 2); auto &mdin(MIDI_PORT(config, "mdin"));