summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Dirk Best <mail@dirk-best.de>2018-05-09 00:09:49 +0200
committer Dirk Best <mail@dirk-best.de>2018-05-09 00:11:09 +0200
commit54471cc53c423efe1e457876774f7f49d254855d (patch)
tree572795973abea4e24d761eb2ae201e0e14a5d392
parent027d863b5315587b133517923ac89d6ece31b5e6 (diff)
tmpz84c015: Add missing callback for ctc zc3
-rw-r--r--src/devices/cpu/z80/tmpz84c015.cpp16
-rw-r--r--src/devices/cpu/z80/tmpz84c015.h21
-rw-r--r--src/devices/machine/z80ctc.h4
3 files changed, 20 insertions, 21 deletions
diff --git a/src/devices/cpu/z80/tmpz84c015.cpp b/src/devices/cpu/z80/tmpz84c015.cpp
index 8f5e3b6b716..54219bd493d 100644
--- a/src/devices/cpu/z80/tmpz84c015.cpp
+++ b/src/devices/cpu/z80/tmpz84c015.cpp
@@ -51,9 +51,7 @@ tmpz84c015_device::tmpz84c015_device(const machine_config &mconfig, const char *
m_out_rxdrqb_cb(*this),
m_out_txdrqb_cb(*this),
- m_zc0_cb(*this),
- m_zc1_cb(*this),
- m_zc2_cb(*this),
+ m_zc_cb{ {*this}, {*this}, {*this}, {*this} },
m_in_pa_cb(*this),
m_out_pa_cb(*this),
@@ -99,9 +97,8 @@ void tmpz84c015_device::device_start()
m_out_rxdrqb_cb.resolve_safe();
m_out_txdrqb_cb.resolve_safe();
- m_zc0_cb.resolve_safe();
- m_zc1_cb.resolve_safe();
- m_zc2_cb.resolve_safe();
+ for (unsigned i = 0; i < 4; i++)
+ m_zc_cb[i].resolve_safe();
m_in_pa_cb.resolve_safe(0);
m_out_pa_cb.resolve_safe();
@@ -206,9 +203,10 @@ MACHINE_CONFIG_START(tmpz84c015_device::device_add_mconfig)
MCFG_DEVICE_ADD("tmpz84c015_ctc", Z80CTC, DERIVED_CLOCK(1,1) )
MCFG_Z80CTC_INTR_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0))
- MCFG_Z80CTC_ZC0_CB(WRITELINE(*this, tmpz84c015_device, zc0_cb_trampoline_w))
- MCFG_Z80CTC_ZC1_CB(WRITELINE(*this, tmpz84c015_device, zc1_cb_trampoline_w))
- MCFG_Z80CTC_ZC2_CB(WRITELINE(*this, tmpz84c015_device, zc2_cb_trampoline_w))
+ MCFG_Z80CTC_ZC0_CB(WRITELINE(*this, tmpz84c015_device, zc_cb_trampoline_w<0>))
+ MCFG_Z80CTC_ZC1_CB(WRITELINE(*this, tmpz84c015_device, zc_cb_trampoline_w<1>))
+ MCFG_Z80CTC_ZC2_CB(WRITELINE(*this, tmpz84c015_device, zc_cb_trampoline_w<2>))
+ MCFG_Z80CTC_ZC3_CB(WRITELINE(*this, tmpz84c015_device, zc_cb_trampoline_w<3>))
MCFG_DEVICE_ADD("tmpz84c015_pio", Z80PIO, DERIVED_CLOCK(1,1) )
MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0))
diff --git a/src/devices/cpu/z80/tmpz84c015.h b/src/devices/cpu/z80/tmpz84c015.h
index 626099512b3..287647913cb 100644
--- a/src/devices/cpu/z80/tmpz84c015.h
+++ b/src/devices/cpu/z80/tmpz84c015.h
@@ -68,13 +68,16 @@
// CTC callbacks
#define MCFG_TMPZ84C015_ZC0_CB(_devcb) \
- devcb = &downcast<tmpz84c015_device &>(*device).set_zc0_callback(DEVCB_##_devcb);
+ devcb = &downcast<tmpz84c015_device &>(*device).set_zc_callback<0>(DEVCB_##_devcb);
#define MCFG_TMPZ84C015_ZC1_CB(_devcb) \
- devcb = &downcast<tmpz84c015_device &>(*device).set_zc1_callback(DEVCB_##_devcb);
+ devcb = &downcast<tmpz84c015_device &>(*device).set_zc_callback<1>(DEVCB_##_devcb);
#define MCFG_TMPZ84C015_ZC2_CB(_devcb) \
- devcb = &downcast<tmpz84c015_device &>(*device).set_zc2_callback(DEVCB_##_devcb);
+ devcb = &downcast<tmpz84c015_device &>(*device).set_zc_callback<2>(DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_ZC3_CB(_devcb) \
+ devcb = &downcast<tmpz84c015_device &>(*device).set_zc_callback<3>(DEVCB_##_devcb);
// PIO callbacks
@@ -124,9 +127,7 @@ public:
template<class Object> devcb_base &set_out_rxdrqb_callback(Object &&cb) { return m_out_rxdrqb_cb.set_callback(std::forward<Object>(cb)); }
template<class Object> devcb_base &set_out_txdrqb_callback(Object &&cb) { return m_out_txdrqb_cb.set_callback(std::forward<Object>(cb)); }
- template<class Object> devcb_base &set_zc0_callback(Object &&cb) { return m_zc0_cb.set_callback(std::forward<Object>(cb)); }
- template<class Object> devcb_base &set_zc1_callback(Object &&cb) { return m_zc1_cb.set_callback(std::forward<Object>(cb)); }
- template<class Object> devcb_base &set_zc2_callback(Object &&cb) { return m_zc2_cb.set_callback(std::forward<Object>(cb)); }
+ template<unsigned N, class Object> devcb_base &set_zc_callback(Object &&cb) { return m_zc_cb[N].set_callback(std::forward<Object>(cb)); }
template<class Object> devcb_base &set_in_pa_callback(Object &&cb) { return m_in_pa_cb.set_callback(std::forward<Object>(cb)); }
template<class Object> devcb_base &set_out_pa_callback(Object &&cb) { return m_out_pa_cb.set_callback(std::forward<Object>(cb)); }
@@ -229,9 +230,7 @@ private:
devcb_write_line m_out_rxdrqb_cb;
devcb_write_line m_out_txdrqb_cb;
- devcb_write_line m_zc0_cb;
- devcb_write_line m_zc1_cb;
- devcb_write_line m_zc2_cb;
+ devcb_write_line m_zc_cb[4];
devcb_read8 m_in_pa_cb;
devcb_write8 m_out_pa_cb;
@@ -258,9 +257,7 @@ private:
DECLARE_WRITE_LINE_MEMBER( out_rxdrqb_cb_trampoline_w ) { m_out_rxdrqb_cb(state); }
DECLARE_WRITE_LINE_MEMBER( out_txdrqb_cb_trampoline_w ) { m_out_txdrqb_cb(state); }
- DECLARE_WRITE_LINE_MEMBER( zc0_cb_trampoline_w ) { m_zc0_cb(state); }
- DECLARE_WRITE_LINE_MEMBER( zc1_cb_trampoline_w ) { m_zc1_cb(state); }
- DECLARE_WRITE_LINE_MEMBER( zc2_cb_trampoline_w ) { m_zc2_cb(state); }
+ template<unsigned N> DECLARE_WRITE_LINE_MEMBER( zc_cb_trampoline_w ) { m_zc_cb[N](state); }
DECLARE_READ8_MEMBER( in_pa_cb_trampoline_r ) { return m_in_pa_cb(); }
DECLARE_WRITE8_MEMBER( out_pa_cb_trampoline_w ) { m_out_pa_cb(data); }
diff --git a/src/devices/machine/z80ctc.h b/src/devices/machine/z80ctc.h
index 724a6dbb9c0..76e4e66e2d1 100644
--- a/src/devices/machine/z80ctc.h
+++ b/src/devices/machine/z80ctc.h
@@ -47,6 +47,10 @@
#define MCFG_Z80CTC_ZC2_CB(_devcb) \
devcb = &downcast<z80ctc_device &>(*device).set_zc_callback<2>(DEVCB_##_devcb);
+// not supported on a standard ctc, only used for the tmpz84c015
+#define MCFG_Z80CTC_ZC3_CB(_devcb) \
+ devcb = &downcast<z80ctc_device &>(*device).set_zc_callback<3>(DEVCB_##_devcb);
+
//**************************************************************************
// TYPE DEFINITIONS