summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/upd765.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/upd765.cpp')
-rw-r--r--src/devices/machine/upd765.cpp44
1 files changed, 44 insertions, 0 deletions
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;
+ }
+}