summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Michaël Banaan Ananas <happppp@users.noreply.github.com>2014-06-23 12:20:39 +0000
committer Michaël Banaan Ananas <happppp@users.noreply.github.com>2014-06-23 12:20:39 +0000
commitd57af9bc5d38e5ad1538b70b3b6b57766398936e (patch)
treee1cd4a992305ec83ea4d0ae9925b97fa7b37dc62
parentbf4d8f4cfd8dae3a0e5e7b2f41579d7b3a7e71e8 (diff)
more trampoline madness
-rw-r--r--src/emu/cpu/z80/tmpz84c015.c112
-rw-r--r--src/emu/cpu/z80/tmpz84c015.h212
-rw-r--r--src/mess/drivers/pve500.c8
3 files changed, 309 insertions, 23 deletions
diff --git a/src/emu/cpu/z80/tmpz84c015.c b/src/emu/cpu/z80/tmpz84c015.c
index 73ab904933b..f1d7856988b 100644
--- a/src/emu/cpu/z80/tmpz84c015.c
+++ b/src/emu/cpu/z80/tmpz84c015.c
@@ -15,20 +15,49 @@
const device_type TMPZ84C015 = &device_creator<tmpz84c015_device>;
static ADDRESS_MAP_START( tmpz84c015_internal_io_map, AS_IO, 8, tmpz84c015_device )
- AM_RANGE(0x10, 0x13) AM_MIRROR(0xff00) AM_DEVREADWRITE("ctc", z80ctc_device, read, write)
- AM_RANGE(0x18, 0x1b) AM_MIRROR(0xff00) AM_DEVREADWRITE("sio", z80dart_device, ba_cd_r, ba_cd_w)
- AM_RANGE(0x1c, 0x1f) AM_MIRROR(0xff00) AM_DEVREADWRITE("pio", z80pio_device, read_alt, write_alt)
+ AM_RANGE(0x10, 0x13) AM_MIRROR(0xff00) AM_DEVREADWRITE("tmpz84c015_ctc", z80ctc_device, read, write)
+ AM_RANGE(0x18, 0x1b) AM_MIRROR(0xff00) AM_DEVREADWRITE("tmpz84c015_sio", z80dart_device, ba_cd_r, ba_cd_w)
+ AM_RANGE(0x1c, 0x1f) AM_MIRROR(0xff00) AM_DEVREADWRITE("tmpz84c015_pio", z80pio_device, read_alt, write_alt)
AM_RANGE(0xf4, 0xf4) AM_MIRROR(0xff00) AM_WRITE(irq_priority_w)
ADDRESS_MAP_END
tmpz84c015_device::tmpz84c015_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: z80_device(mconfig, TMPZ84C015, "TMPZ84C015", tag, owner, clock, "tmpz84c015", __FILE__),
- m_ctc(*this, "ctc"),
- m_sio(*this, "sio"),
- m_pio(*this, "pio"),
m_io_space_config( "io", ENDIANNESS_LITTLE, 8, 16, 0, ADDRESS_MAP_NAME( tmpz84c015_internal_io_map ) ),
- m_irq_priority(-1) // !
+ m_ctc(*this, "tmpz84c015_ctc"),
+ m_sio(*this, "tmpz84c015_sio"),
+ m_pio(*this, "tmpz84c015_pio"),
+ m_irq_priority(-1), // !
+
+ m_out_txda_cb(*this),
+ m_out_dtra_cb(*this),
+ m_out_rtsa_cb(*this),
+ m_out_wrdya_cb(*this),
+ m_out_synca_cb(*this),
+
+ m_out_txdb_cb(*this),
+ m_out_dtrb_cb(*this),
+ m_out_rtsb_cb(*this),
+ m_out_wrdyb_cb(*this),
+ m_out_syncb_cb(*this),
+
+ m_out_rxdrqa_cb(*this),
+ m_out_txdrqa_cb(*this),
+ m_out_rxdrqb_cb(*this),
+ m_out_txdrqb_cb(*this),
+
+ m_zc0_cb(*this),
+ m_zc1_cb(*this),
+ m_zc2_cb(*this),
+
+ m_in_pa_cb(*this),
+ m_out_pa_cb(*this),
+ m_out_ardy_cb(*this),
+
+ m_in_pb_cb(*this),
+ m_out_pb_cb(*this),
+ m_out_brdy_cb(*this)
{
}
@@ -41,6 +70,36 @@ void tmpz84c015_device::device_start()
{
z80_device::device_start();
+ // resolve callbacks
+ m_out_txda_cb.resolve_safe();
+ m_out_dtra_cb.resolve_safe();
+ m_out_rtsa_cb.resolve_safe();
+ m_out_wrdya_cb.resolve_safe();
+ m_out_synca_cb.resolve_safe();
+
+ m_out_txdb_cb.resolve_safe();
+ m_out_dtrb_cb.resolve_safe();
+ m_out_rtsb_cb.resolve_safe();
+ m_out_wrdyb_cb.resolve_safe();
+ m_out_syncb_cb.resolve_safe();
+
+ m_out_rxdrqa_cb.resolve_safe();
+ m_out_txdrqa_cb.resolve_safe();
+ 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();
+
+ m_in_pa_cb.resolve_safe(0);
+ m_out_pa_cb.resolve_safe();
+ m_out_ardy_cb.resolve_safe();
+
+ m_in_pb_cb.resolve_safe(0);
+ m_out_pb_cb.resolve_safe();
+ m_out_brdy_cb.resolve_safe();
+
// register for save states
save_item(NAME(m_irq_priority));
}
@@ -83,7 +142,7 @@ WRITE8_MEMBER(tmpz84c015_device::irq_priority_w)
if (m_irq_priority != data)
{
- static const char *dev[3] = { "ctc", "sio", "pio" };
+ static const char *dev[3] = { "tmpz84c015_ctc", "tmpz84c015_sio", "tmpz84c015_pio" };
static const int prio[6][3] =
{
{ 0, 1, 2 }, // 0: ctc -> sio -> pio -> ext
@@ -111,14 +170,43 @@ WRITE8_MEMBER(tmpz84c015_device::irq_priority_w)
static MACHINE_CONFIG_FRAGMENT( tmpz84c015 )
/* basic machine hardware */
- MCFG_DEVICE_ADD("ctc", Z80CTC, DERIVED_CLOCK(1,1) )
+ MCFG_Z80SIO0_ADD("tmpz84c015_sio", DERIVED_CLOCK(1,1), 0, 0, 0, 0)
+ MCFG_Z80DART_OUT_INT_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0))
+
+ MCFG_Z80DART_OUT_TXDA_CB(WRITELINE(tmpz84c015_device, out_txda_cb_trampoline_w))
+ MCFG_Z80DART_OUT_DTRA_CB(WRITELINE(tmpz84c015_device, out_dtra_cb_trampoline_w))
+ MCFG_Z80DART_OUT_RTSA_CB(WRITELINE(tmpz84c015_device, out_rtsa_cb_trampoline_w))
+ MCFG_Z80DART_OUT_WRDYA_CB(WRITELINE(tmpz84c015_device, out_wrdya_cb_trampoline_w))
+ MCFG_Z80DART_OUT_SYNCA_CB(WRITELINE(tmpz84c015_device, out_synca_cb_trampoline_w))
+
+ MCFG_Z80DART_OUT_TXDB_CB(WRITELINE(tmpz84c015_device, out_txdb_cb_trampoline_w))
+ MCFG_Z80DART_OUT_DTRB_CB(WRITELINE(tmpz84c015_device, out_dtrb_cb_trampoline_w))
+ MCFG_Z80DART_OUT_RTSB_CB(WRITELINE(tmpz84c015_device, out_rtsb_cb_trampoline_w))
+ MCFG_Z80DART_OUT_WRDYB_CB(WRITELINE(tmpz84c015_device, out_wrdyb_cb_trampoline_w))
+ MCFG_Z80DART_OUT_SYNCB_CB(WRITELINE(tmpz84c015_device, out_syncb_cb_trampoline_w))
+
+ MCFG_Z80DART_OUT_RXDRQA_CB(WRITELINE(tmpz84c015_device, out_rxdrqa_cb_trampoline_w))
+ MCFG_Z80DART_OUT_TXDRQA_CB(WRITELINE(tmpz84c015_device, out_txdrqa_cb_trampoline_w))
+ MCFG_Z80DART_OUT_RXDRQB_CB(WRITELINE(tmpz84c015_device, out_rxdrqb_cb_trampoline_w))
+ MCFG_Z80DART_OUT_TXDRQB_CB(WRITELINE(tmpz84c015_device, out_txdrqb_cb_trampoline_w))
+
+ MCFG_DEVICE_ADD("tmpz84c015_ctc", Z80CTC, DERIVED_CLOCK(1,1) )
MCFG_Z80CTC_INTR_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0))
- MCFG_Z80SIO0_ADD("sio", DERIVED_CLOCK(1,1), 0, 0, 0, 0)
- MCFG_Z80DART_OUT_INT_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0))
+ MCFG_Z80CTC_ZC0_CB(WRITELINE(tmpz84c015_device, zc0_cb_trampoline_w))
+ MCFG_Z80CTC_ZC1_CB(WRITELINE(tmpz84c015_device, zc1_cb_trampoline_w))
+ MCFG_Z80CTC_ZC2_CB(WRITELINE(tmpz84c015_device, zc2_cb_trampoline_w))
- MCFG_DEVICE_ADD("pio", Z80PIO, DERIVED_CLOCK(1,1) )
+ MCFG_DEVICE_ADD("tmpz84c015_pio", Z80PIO, DERIVED_CLOCK(1,1) )
MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0))
+
+ MCFG_Z80PIO_IN_PA_CB(READ8(tmpz84c015_device, in_pa_cb_trampoline_r))
+ MCFG_Z80PIO_OUT_PA_CB(WRITE8(tmpz84c015_device, out_pa_cb_trampoline_w))
+ MCFG_Z80PIO_OUT_ARDY_CB(WRITELINE(tmpz84c015_device, out_ardy_cb_trampoline_w))
+
+ MCFG_Z80PIO_IN_PB_CB(READ8(tmpz84c015_device, in_pb_cb_trampoline_r))
+ MCFG_Z80PIO_OUT_PB_CB(WRITE8(tmpz84c015_device, out_pb_cb_trampoline_w))
+ MCFG_Z80PIO_OUT_BRDY_CB(WRITELINE(tmpz84c015_device, out_brdy_cb_trampoline_w))
MACHINE_CONFIG_END
machine_config_constructor tmpz84c015_device::device_mconfig_additions() const
diff --git a/src/emu/cpu/z80/tmpz84c015.h b/src/emu/cpu/z80/tmpz84c015.h
index d599ae7c473..05c20a46c89 100644
--- a/src/emu/cpu/z80/tmpz84c015.h
+++ b/src/emu/cpu/z80/tmpz84c015.h
@@ -22,9 +22,81 @@
***************************************************************************/
// If an external daisy chain is used, insert this before your own device tags:
-#define TMPZ84C015_DAISY_INTERNAL { "ctc" }, { "sio" }, { "pio" }
+#define TMPZ84C015_DAISY_INTERNAL { "tmpz84c015_ctc" }, { "tmpz84c015_sio" }, { "tmpz84c015_pio" }
-// NOTE: for callbacks, see machine/z80dart.h, machine/z80ctc.h, machine/z80pio.h
+// SIO callbacks
+#define MCFG_TMPZ84C015_OUT_TXDA_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_txda_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_DTRA_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_dtra_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_RTSA_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_rtsa_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_WRDYA_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_wrdya_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_SYNCA_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_synca_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_TXDB_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_txdb_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_DTRB_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_dtrb_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_RTSB_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_rtsb_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_WRDYB_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_wrdyb_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_SYNCB_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_syncb_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_RXDRQA_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_rxdrqa_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_TXDRQA_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_txdrqa_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_RXDRQB_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_rxdrqb_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_TXDRQB_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_txdrqb_callback(*device, DEVCB_##_devcb);
+
+
+// CTC callbacks
+#define MCFG_TMPZ84C015_ZC0_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_zc0_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_ZC1_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_zc1_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_ZC2_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_zc2_callback(*device, DEVCB_##_devcb);
+
+
+// PIO callbacks
+#define MCFG_TMPZ84C015_IN_PA_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_in_pa_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_PA_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_pa_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_ARDY_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_ardy_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_IN_PB_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_in_pb_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_PB_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_pb_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMPZ84C015_OUT_BRDY_CB(_devcb) \
+ devcb = &tmpz84c015_device::set_out_brdy_callback(*device, DEVCB_##_devcb);
/***************************************************************************
@@ -36,13 +108,103 @@ class tmpz84c015_device : public z80_device
public:
tmpz84c015_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32);
- // devices/pointers
- required_device<z80ctc_device> m_ctc;
- required_device<z80dart_device> m_sio;
- required_device<z80pio_device> m_pio;
+ // static configuration helpers
+ template<class _Object> static devcb_base &set_out_txda_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_txda_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_dtra_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_dtra_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_rtsa_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_rtsa_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_wrdya_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_wrdya_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_synca_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_synca_cb.set_callback(object); }
+
+ template<class _Object> static devcb_base &set_out_txdb_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_txdb_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_dtrb_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_dtrb_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_rtsb_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_rtsb_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_wrdyb_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_wrdyb_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_syncb_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_syncb_cb.set_callback(object); }
+
+ template<class _Object> static devcb_base &set_out_rxdrqa_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_rxdrqa_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_txdrqa_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_txdrqa_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_rxdrqb_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_rxdrqb_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_txdrqb_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_txdrqb_cb.set_callback(object); }
+
+ template<class _Object> static devcb_base &set_zc0_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_zc0_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_zc1_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_zc1_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_zc2_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_zc2_cb.set_callback(object); }
+
+ template<class _Object> static devcb_base &set_in_pa_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_in_pa_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_pa_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_pa_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_ardy_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_ardy_cb.set_callback(object); }
+
+ template<class _Object> static devcb_base &set_in_pb_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_in_pb_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_pb_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_pb_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_brdy_callback(device_t &device, _Object object) { return downcast<tmpz84c015_device &>(device).m_out_brdy_cb.set_callback(object); }
+
+ // SIO public interface
+ DECLARE_WRITE_LINE_MEMBER( rxa_w ) { m_sio->rxa_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( rxb_w ) { m_sio->rxb_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( ctsa_w ) { m_sio->ctsa_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( ctsb_w ) { m_sio->ctsb_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( dcda_w ) { m_sio->dcda_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( dcdb_w ) { m_sio->dcdb_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( ria_w ) { m_sio->ria_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( rib_w ) { m_sio->rib_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( rxca_w ) { m_sio->rxca_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( rxcb_w ) { m_sio->rxcb_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( txca_w ) { m_sio->txca_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( txcb_w ) { m_sio->txcb_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( rxtxcb_w ) { m_sio->rxtxcb_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( synca_w ) { m_sio->synca_w(state); }
+ DECLARE_WRITE_LINE_MEMBER( syncb_w ) { m_sio->syncb_w(state); }
+
+ // CTC public interface
+ DECLARE_WRITE_LINE_MEMBER( trg0 ) { m_ctc->trg0(state); }
+ DECLARE_WRITE_LINE_MEMBER( trg1 ) { m_ctc->trg1(state); }
+ DECLARE_WRITE_LINE_MEMBER( trg2 ) { m_ctc->trg2(state); }
+ DECLARE_WRITE_LINE_MEMBER( trg3 ) { m_ctc->trg3(state); }
+
+ // PIO public interface
+ DECLARE_READ_LINE_MEMBER( rdy_a ) { return m_pio->rdy_a(); }
+ DECLARE_READ_LINE_MEMBER( rdy_b ) { return m_pio->rdy_b(); }
+ DECLARE_WRITE_LINE_MEMBER( strobe_a ) { m_pio->strobe_a(state); }
+ DECLARE_WRITE_LINE_MEMBER( strobe_b ) { m_pio->strobe_b(state); }
+
+ DECLARE_WRITE8_MEMBER( pa_w ) { m_pio->pa_w(space, offset, data, mem_mask); }
+ DECLARE_READ8_MEMBER( pa_r ) { return m_pio->pa_r(space, offset, mem_mask); }
+ DECLARE_WRITE8_MEMBER( pb_w ) { m_pio->pb_w(space, offset, data, mem_mask); }
+ DECLARE_READ8_MEMBER( pb_r ) { return m_pio->pb_r(space, offset, mem_mask); }
+
+ /////////////////////////////////////////////////////////
- DECLARE_WRITE8_MEMBER(irq_priority_w);
+ DECLARE_WRITE8_MEMBER( irq_priority_w );
+ DECLARE_WRITE_LINE_MEMBER( out_txda_cb_trampoline_w ) { m_out_txda_cb(state); }
+ DECLARE_WRITE_LINE_MEMBER( out_dtra_cb_trampoline_w ) { m_out_dtra_cb(state); }
+ DECLARE_WRITE_LINE_MEMBER( out_rtsa_cb_trampoline_w ) { m_out_rtsa_cb(state); }
+ DECLARE_WRITE_LINE_MEMBER( out_wrdya_cb_trampoline_w ) { m_out_wrdya_cb(state); }
+ DECLARE_WRITE_LINE_MEMBER( out_synca_cb_trampoline_w ) { m_out_synca_cb(state); }
+
+ DECLARE_WRITE_LINE_MEMBER( out_txdb_cb_trampoline_w ) { m_out_txdb_cb(state); }
+ DECLARE_WRITE_LINE_MEMBER( out_dtrb_cb_trampoline_w ) { m_out_dtrb_cb(state); }
+ DECLARE_WRITE_LINE_MEMBER( out_rtsb_cb_trampoline_w ) { m_out_rtsb_cb(state); }
+ DECLARE_WRITE_LINE_MEMBER( out_wrdyb_cb_trampoline_w ) { m_out_wrdyb_cb(state); }
+ DECLARE_WRITE_LINE_MEMBER( out_syncb_cb_trampoline_w ) { m_out_syncb_cb(state); }
+
+ DECLARE_WRITE_LINE_MEMBER( out_rxdrqa_cb_trampoline_w ) { m_out_rxdrqa_cb(state); }
+ DECLARE_WRITE_LINE_MEMBER( out_txdrqa_cb_trampoline_w ) { m_out_txdrqa_cb(state); }
+ 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); }
+
+ 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); }
+ DECLARE_WRITE_LINE_MEMBER( out_ardy_cb_trampoline_w ) { m_out_ardy_cb(state); }
+
+ DECLARE_READ8_MEMBER( in_pb_cb_trampoline_r ) { return m_in_pb_cb(); }
+ DECLARE_WRITE8_MEMBER( out_pb_cb_trampoline_w ) { m_out_pb_cb(data); }
+ DECLARE_WRITE_LINE_MEMBER( out_brdy_cb_trampoline_w ) { m_out_brdy_cb(state); }
+
protected:
// device-level overrides
virtual machine_config_constructor device_mconfig_additions() const;
@@ -62,7 +224,43 @@ protected:
}
private:
+ // devices/pointers
+ required_device<z80ctc_device> m_ctc;
+ required_device<z80dart_device> m_sio;
+ required_device<z80pio_device> m_pio;
+
+ // internal state
UINT8 m_irq_priority;
+
+ // callbacks
+ devcb_write_line m_out_txda_cb;
+ devcb_write_line m_out_dtra_cb;
+ devcb_write_line m_out_rtsa_cb;
+ devcb_write_line m_out_wrdya_cb;
+ devcb_write_line m_out_synca_cb;
+
+ devcb_write_line m_out_txdb_cb;
+ devcb_write_line m_out_dtrb_cb;
+ devcb_write_line m_out_rtsb_cb;
+ devcb_write_line m_out_wrdyb_cb;
+ devcb_write_line m_out_syncb_cb;
+
+ devcb_write_line m_out_rxdrqa_cb;
+ devcb_write_line m_out_txdrqa_cb;
+ 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_read8 m_in_pa_cb;
+ devcb_write8 m_out_pa_cb;
+ devcb_write_line m_out_ardy_cb;
+
+ devcb_read8 m_in_pb_cb;
+ devcb_write8 m_out_pb_cb;
+ devcb_write_line m_out_brdy_cb;
};
diff --git a/src/mess/drivers/pve500.c b/src/mess/drivers/pve500.c
index e93dc6354c2..67a854baa78 100644
--- a/src/mess/drivers/pve500.c
+++ b/src/mess/drivers/pve500.c
@@ -196,7 +196,7 @@ void pve500_state::machine_reset()
READ8_MEMBER(pve500_state::dualport_ram_left_r)
{
//printf("dualport_ram: Left READ\n");
- m_subcpu->m_ctc->trg1(1); //(INT_Right)
+ m_subcpu->trg1(1); //(INT_Right)
return dualport_7FE_data;
}
@@ -204,13 +204,13 @@ WRITE8_MEMBER(pve500_state::dualport_ram_left_w)
{
//printf("dualport_ram: Left WRITE\n");
dualport_7FF_data = data;
- m_subcpu->m_ctc->trg1(0); //(INT_Right)
+ m_subcpu->trg1(0); //(INT_Right)
}
READ8_MEMBER(pve500_state::dualport_ram_right_r)
{
//printf("dualport_ram: Right READ\n");
- m_maincpu->m_ctc->trg1(1); //(INT_Left)
+ m_maincpu->trg1(1); //(INT_Left)
return dualport_7FF_data;
}
@@ -218,7 +218,7 @@ WRITE8_MEMBER(pve500_state::dualport_ram_right_w)
{
//printf("dualport_ram: Right WRITE\n");
dualport_7FE_data = data;
- m_maincpu->m_ctc->trg1(0); //(INT_Left)
+ m_maincpu->trg1(0); //(INT_Left)
}
READ8_MEMBER(pve500_state::io_expander_r)