From 8b057af7a94ebb361b8ddd7f79b6870455602ed5 Mon Sep 17 00:00:00 2001 From: Patrick Mackinlay Date: Thu, 26 Mar 2020 19:45:40 +0700 Subject: upd765: upd72067 stub (nw) --- src/devices/machine/upd765.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++ src/devices/machine/upd765.h | 10 +++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index b9f51c66645..37a71638dca 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -45,6 +45,7 @@ DEFINE_DEVICE_TYPE(UPD765A, upd765a_device, "upd765a", "NEC DEFINE_DEVICE_TYPE(UPD765B, upd765b_device, "upd765b", "NEC uPD765B FDC") DEFINE_DEVICE_TYPE(I8272A, i8272a_device, "i8272a", "Intel 8272A FDC") DEFINE_DEVICE_TYPE(UPD72065, upd72065_device, "upd72065", "NEC uPD72065 FDC") +DEFINE_DEVICE_TYPE(UPD72067, upd72067_device, "upd72067", "NEC uPD72067 FDC") DEFINE_DEVICE_TYPE(UPD72069, upd72069_device, "upd72069", "NEC uPD72069 FDC") DEFINE_DEVICE_TYPE(I82072, i82072_device, "i82072", "Intel 82072 FDC") DEFINE_DEVICE_TYPE(SMC37C78, smc37c78_device, "smc37c78", "SMC FDC73C78 FDC") @@ -2656,6 +2657,14 @@ upd72065_device::upd72065_device(const machine_config &mconfig, device_type type dor_reset = 0x0c; } +upd72067_device::upd72067_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd72065_device(mconfig, UPD72067, tag, owner, clock) +{ + ready_polled = true; + ready_connected = true; + select_connected = true; + select_multiplexed = false; +} + upd72069_device::upd72069_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : upd72065_device(mconfig, UPD72069, tag, owner, clock) { ready_polled = true; @@ -3038,3 +3047,38 @@ void upd72065_device::auxcmd_w(uint8_t data) break; } } + +void upd72067_device::auxcmd_w(uint8_t data) +{ + /* + * Auxiliary commands: + * + * ???? ???? start clock + * 0011 0011 enable external mode + * 0x00 1011 control internal mode + * xxxx 1110 enable motors + * 010x 1111 select IBM or ECMA/ISO format + * + * The bare minimum needed to satisfy the news_r3k diagnostic has been + * implemented here. + */ + switch(data & 0x0f) { + case 0x0e: + // motor on/off - no idea about timeout + for(unsigned i = 0; i < 4; i++) + if(flopi[i].dev) + flopi[i].dev->mon_w(!BIT(data, i + 4)); + // fall through + case 0x03: // enable external mode + case 0x0b: // control internal mode + case 0x0f: // select format + // report a successful status + main_phase = PHASE_RESULT; + result[0] = ST0_UNK; + result_pos = 1; + break; + default: + upd72065_device::auxcmd_w(data); + break; + } +} diff --git a/src/devices/machine/upd765.h b/src/devices/machine/upd765.h index b0ca8e49657..e98f56f24f0 100644 --- a/src/devices/machine/upd765.h +++ b/src/devices/machine/upd765.h @@ -470,12 +470,19 @@ public: upd72065_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; - void auxcmd_w(uint8_t data); + virtual void auxcmd_w(uint8_t data); protected: upd72065_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); }; +class upd72067_device : public upd72065_device { +public: + upd72067_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual void auxcmd_w(uint8_t data) override; +}; + class upd72069_device : public upd72065_device { public: upd72069_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -570,6 +577,7 @@ DECLARE_DEVICE_TYPE(UPD765A, upd765a_device) DECLARE_DEVICE_TYPE(UPD765B, upd765b_device) DECLARE_DEVICE_TYPE(I8272A, i8272a_device) DECLARE_DEVICE_TYPE(UPD72065, upd72065_device) +DECLARE_DEVICE_TYPE(UPD72067, upd72067_device) DECLARE_DEVICE_TYPE(UPD72069, upd72069_device) DECLARE_DEVICE_TYPE(I82072, i82072_device) DECLARE_DEVICE_TYPE(SMC37C78, smc37c78_device) -- cgit v1.2.3