diff --git a/src/emu/bus/c64/ieee488.c b/src/emu/bus/c64/ieee488.c index 4906d49fefc..caba811afea 100644 --- a/src/emu/bus/c64/ieee488.c +++ b/src/emu/bus/c64/ieee488.c @@ -138,27 +138,19 @@ WRITE8_MEMBER( c64_ieee488_device::tpi_pc_w ) m_roml_sel = BIT(data, 4); } -static const tpi6525_interface tpi_intf = -{ - DEVCB_NULL, - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pa_r), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pa_w), - DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_r), - DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_w), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pc_r), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pc_w), - DEVCB_NULL, - DEVCB_NULL -}; - - //------------------------------------------------- // MACHINE_CONFIG_FRAGMENT( c64_ieee488 ) //------------------------------------------------- static MACHINE_CONFIG_FRAGMENT( c64_ieee488 ) - MCFG_TPI6525_ADD(MOS6525_TAG, tpi_intf) - + MCFG_DEVICE_ADD(MOS6525_TAG, TPI6525, 0) + MCFG_TPI6525_IN_PA_CB(READ8(c64_ieee488_device, tpi_pa_r)) + MCFG_TPI6525_OUT_PA_CB(WRITE8(c64_ieee488_device, tpi_pa_w)) + MCFG_TPI6525_IN_PB_CB(DEVREAD8(IEEE488_TAG, ieee488_device, dio_r)) + MCFG_TPI6525_OUT_PB_CB(DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w)) + MCFG_TPI6525_IN_PC_CB(READ8(c64_ieee488_device, tpi_pc_r)) + MCFG_TPI6525_OUT_PC_CB(WRITE8(c64_ieee488_device, tpi_pc_w)) + MCFG_CBM_IEEE488_ADD(NULL) MCFG_C64_PASSTHRU_EXPANSION_SLOT_ADD() MACHINE_CONFIG_END diff --git a/src/emu/bus/c64/magic_voice.c b/src/emu/bus/c64/magic_voice.c index 8f1f5c8616e..a1758bf3c00 100644 --- a/src/emu/bus/c64/magic_voice.c +++ b/src/emu/bus/c64/magic_voice.c @@ -185,20 +185,6 @@ WRITE_LINE_MEMBER( c64_magic_voice_cartridge_device::tpi_cb_w ) m_exrom = state; } -static const tpi6525_interface tpi_intf = -{ - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_irq_w), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pa_r), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pa_w), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pb_r), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pb_w), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_ca_w), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_cb_w), -}; - - //------------------------------------------------- // t6721_interface //------------------------------------------------- @@ -235,7 +221,14 @@ WRITE_LINE_MEMBER( c64_magic_voice_cartridge_device::apd_w ) //------------------------------------------------- static MACHINE_CONFIG_FRAGMENT( c64_magic_voice ) - MCFG_TPI6525_ADD(MOS6525_TAG, tpi_intf) + MCFG_DEVICE_ADD(MOS6525_TAG, TPI6525, 0) + MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(c64_magic_voice_cartridge_device, tpi_irq_w)) + MCFG_TPI6525_IN_PA_CB(READ8(c64_magic_voice_cartridge_device, tpi_pa_r)) + MCFG_TPI6525_OUT_PA_CB(WRITE8(c64_magic_voice_cartridge_device, tpi_pa_w)) + MCFG_TPI6525_IN_PB_CB(READ8(c64_magic_voice_cartridge_device, tpi_pb_r)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(c64_magic_voice_cartridge_device, tpi_pb_w)) + MCFG_TPI6525_OUT_CA_CB(WRITELINE(c64_magic_voice_cartridge_device, tpi_ca_w)) + MCFG_TPI6525_OUT_CA_CB(WRITELINE(c64_magic_voice_cartridge_device, tpi_cb_w)) MCFG_40105_ADD(CMOS40105_TAG, DEVWRITELINE(MOS6525_TAG, tpi6525_device, i3_w), NULL) MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/emu/bus/plus4/c1551.c b/src/emu/bus/plus4/c1551.c index 9bf22d73819..9ddea25d209 100644 --- a/src/emu/bus/plus4/c1551.c +++ b/src/emu/bus/plus4/c1551.c @@ -241,20 +241,6 @@ WRITE8_MEMBER( c1551_device::tpi0_pc_w ) m_ga->oe_w(BIT(data, 4)); } -static const tpi6525_interface tpi0_intf = -{ - DEVCB_NULL, - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_r), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_w), - DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_r), - DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_w), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi0_pc_r), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi0_pc_w), - DEVCB_NULL, - DEVCB_NULL -}; - - //------------------------------------------------- // tpi6525_interface tpi1_intf //------------------------------------------------- @@ -325,20 +311,6 @@ WRITE8_MEMBER( c1551_device::tpi1_pc_w ) m_dav = BIT(data, 6); } -static const tpi6525_interface tpi1_intf = -{ - DEVCB_NULL, - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_r), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_w), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi1_pb_r), - DEVCB_NULL, - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi1_pc_r), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi1_pc_w), - DEVCB_NULL, - DEVCB_NULL -}; - - //------------------------------------------------- // ADDRESS_MAP( c1551_mem ) //------------------------------------------------- @@ -380,9 +352,20 @@ static MACHINE_CONFIG_FRAGMENT( c1551 ) MCFG_QUANTUM_PERFECT_CPU(M6510T_TAG) MCFG_PLS100_ADD(PLA_TAG) - MCFG_TPI6525_ADD(M6523_0_TAG, tpi0_intf) - MCFG_TPI6525_ADD(M6523_1_TAG, tpi1_intf) - + MCFG_DEVICE_ADD(M6523_0_TAG, TPI6525, 0) + MCFG_TPI6525_IN_PA_CB(READ8(c1551_device, tcbm_data_r)) + MCFG_TPI6525_OUT_PA_CB(WRITE8(c1551_device, tcbm_data_w)) + MCFG_TPI6525_IN_PB_CB(DEVREAD8(C64H156_TAG, c64h156_device, yb_r)) + MCFG_TPI6525_OUT_PB_CB(DEVWRITE8(C64H156_TAG, c64h156_device, yb_w)) + MCFG_TPI6525_IN_PC_CB(READ8(c1551_device, tpi0_pc_r)) + MCFG_TPI6525_OUT_PC_CB(WRITE8(c1551_device, tpi0_pc_w)) + MCFG_DEVICE_ADD(M6523_1_TAG, TPI6525, 0) + MCFG_TPI6525_IN_PA_CB(READ8(c1551_device, tcbm_data_r)) + MCFG_TPI6525_OUT_PA_CB(WRITE8(c1551_device, tcbm_data_w)) + MCFG_TPI6525_IN_PB_CB(READ8(c1551_device, tpi1_pb_r)) + MCFG_TPI6525_IN_PC_CB(READ8(c1551_device, tpi1_pc_r)) + MCFG_TPI6525_OUT_PC_CB(WRITE8(c1551_device, tpi1_pc_w)) + MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz) MCFG_64H156_BYTE_CALLBACK(DEVWRITELINE(C64H156_TAG, c64h156_device, atni_w)) MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c1551_floppies, "525ssqd", c1551_device::floppy_formats) diff --git a/src/emu/machine/6525tpi.c b/src/emu/machine/6525tpi.c index cebc31f2d04..2d83a49527b 100644 --- a/src/emu/machine/6525tpi.c +++ b/src/emu/machine/6525tpi.c @@ -106,6 +106,15 @@ const device_type TPI6525 = &device_creator; tpi6525_device::tpi6525_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, TPI6525, "6525 TPI", tag, owner, clock, "tpi6525", __FILE__), + m_out_irq_cb(*this), + m_in_pa_cb(*this), + m_out_pa_cb(*this), + m_in_pb_cb(*this), + m_out_pb_cb(*this), + m_in_pc_cb(*this), + m_out_pc_cb(*this), + m_out_ca_cb(*this), + m_out_cb_cb(*this), m_port_a(0), m_ddr_a(0), m_in_a(0), @@ -127,34 +136,6 @@ tpi6525_device::tpi6525_device(const machine_config &mconfig, const char *tag, d } } -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void tpi6525_device::device_config_complete() -{ - // inherit a copy of the static data - const tpi6525_interface *intf = reinterpret_cast(static_config()); - if (intf != NULL) - *static_cast(this) = *intf; - - // or initialize to defaults if none provided - else - { - memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb)); - memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb)); - memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb)); - memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb)); - memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb)); - memset(&m_in_pc_cb, 0, sizeof(m_in_pc_cb)); - memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb)); - memset(&m_out_ca_cb, 0, sizeof(m_out_ca_cb)); - memset(&m_out_cb_cb, 0, sizeof(m_out_cb_cb)); - } -} - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -162,15 +143,15 @@ void tpi6525_device::device_config_complete() void tpi6525_device::device_start() { // resolve callbacks - m_out_irq_func.resolve(m_out_irq_cb, *this); - m_in_pa_func.resolve(m_in_pa_cb, *this); - m_out_pa_func.resolve(m_out_pa_cb, *this); - m_in_pb_func.resolve(m_in_pb_cb, *this); - m_out_pb_func.resolve(m_out_pb_cb, *this); - m_in_pc_func.resolve(m_in_pc_cb, *this); - m_out_pc_func.resolve(m_out_pc_cb, *this); - m_out_ca_func.resolve(m_out_ca_cb, *this); - m_out_cb_func.resolve(m_out_cb_cb, *this); + m_out_irq_cb.resolve_safe(); + m_in_pa_cb.resolve(); + m_out_pa_cb.resolve_safe(); + m_in_pb_cb.resolve(); + m_out_pb_cb.resolve_safe(); + m_in_pc_cb.resolve(); + m_out_pc_cb.resolve_safe(); + m_out_ca_cb.resolve_safe(); + m_out_cb_cb.resolve_safe(); /* register for state saving */ save_item(NAME(m_port_a)); @@ -215,7 +196,7 @@ void tpi6525_device::set_interrupt() DBG_LOG(machine(), 3, "tpi6525", ("%s set interrupt\n", tag())); - m_out_irq_func(m_interrupt_level); + m_out_irq_cb(m_interrupt_level); } } @@ -228,7 +209,7 @@ void tpi6525_device::clear_interrupt() DBG_LOG(machine(), 3, "tpi6525", ("%s clear interrupt\n", tag())); - m_out_irq_func(m_interrupt_level); + m_out_irq_cb(m_interrupt_level); } } @@ -315,8 +296,8 @@ READ8_MEMBER( tpi6525_device::pa_r ) { UINT8 data = m_in_a; - if (!m_in_pa_func.isnull()) - data = m_in_pa_func(offset); + if (!m_in_pa_cb.isnull()) + data = m_in_pa_cb(offset); data = (data & ~m_ddr_a) | (m_ddr_a & m_port_a); @@ -334,8 +315,8 @@ READ8_MEMBER( tpi6525_device::pb_r ) { UINT8 data = m_in_b; - if (!m_in_pb_func.isnull()) - data = m_in_pb_func(offset); + if (!m_in_pb_cb.isnull()) + data = m_in_pb_cb(offset); data = (data & ~m_ddr_b) | (m_ddr_b & m_port_b); @@ -353,8 +334,8 @@ READ8_MEMBER( tpi6525_device::pc_r ) { UINT8 data = m_in_c; - if (!m_in_pc_func.isnull()) - data &= m_in_pc_func(offset); + if (!m_in_pc_cb.isnull()) + data &= m_in_pc_cb(offset); data = (data & ~m_ddr_c) | (m_ddr_c & m_port_c); @@ -377,8 +358,8 @@ READ8_MEMBER( tpi6525_device::read ) case 0: data = m_in_a; - if (!m_in_pa_func.isnull()) - data &= m_in_pa_func(0); + if (!m_in_pa_cb.isnull()) + data &= m_in_pa_cb(0); data = (data & ~m_ddr_a) | (m_ddr_a & m_port_a); @@ -387,8 +368,8 @@ READ8_MEMBER( tpi6525_device::read ) case 1: data = m_in_b; - if (!m_in_pb_func.isnull()) - data &= m_in_pb_func(0); + if (!m_in_pb_cb.isnull()) + data &= m_in_pb_cb(0); data = (data & ~m_ddr_b) | (m_ddr_b & m_port_b); @@ -412,8 +393,8 @@ READ8_MEMBER( tpi6525_device::read ) { data = m_in_c; - if (!m_in_pc_func.isnull()) - data &= m_in_pc_func(0); + if (!m_in_pc_cb.isnull()) + data &= m_in_pc_cb(0); data = (data & ~m_ddr_c) | (m_ddr_c & m_port_c); } @@ -491,36 +472,36 @@ WRITE8_MEMBER( tpi6525_device::write ) { case 0: m_port_a = data; - m_out_pa_func(0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff)); + m_out_pa_cb((offs_t)0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff)); break; case 1: m_port_b = data; - m_out_pb_func(0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff)); + m_out_pb_cb((offs_t)0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff)); break; case 2: m_port_c = data; if (!INTERRUPT_MODE) - m_out_pc_func(0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff)); + m_out_pc_cb((offs_t)0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff)); break; case 3: m_ddr_a = data; - m_out_pa_func(0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff)); + m_out_pa_cb((offs_t)0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff)); break; case 4: m_ddr_b = data; - m_out_pb_func(0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff)); + m_out_pb_cb((offs_t)0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff)); break; case 5: m_ddr_c = data; if (!INTERRUPT_MODE) - m_out_pc_func(0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff)); + m_out_pc_cb((offs_t)0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff)); break; case 6: @@ -533,7 +514,7 @@ WRITE8_MEMBER( tpi6525_device::write ) if (m_ca_level != CA_MANUAL_LEVEL) { m_ca_level = CA_MANUAL_LEVEL; - m_out_ca_func(m_ca_level); + m_out_ca_cb(m_ca_level); } } if (CB_MANUAL_OUT) @@ -541,7 +522,7 @@ WRITE8_MEMBER( tpi6525_device::write ) if (m_cb_level != CB_MANUAL_LEVEL) { m_cb_level = CB_MANUAL_LEVEL; - m_out_cb_func(m_cb_level); + m_out_cb_cb(m_cb_level); } } } diff --git a/src/emu/machine/6525tpi.h b/src/emu/machine/6525tpi.h index 51d0003cc61..6132fa45c18 100644 --- a/src/emu/machine/6525tpi.h +++ b/src/emu/machine/6525tpi.h @@ -30,39 +30,26 @@ #define __TPI6525_H__ -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -struct tpi6525_interface -{ - devcb_write_line m_out_irq_cb; - - devcb_read8 m_in_pa_cb; - devcb_write8 m_out_pa_cb; - - devcb_read8 m_in_pb_cb; - devcb_write8 m_out_pb_cb; - - devcb_read8 m_in_pc_cb; - devcb_write8 m_out_pc_cb; - - devcb_write_line m_out_ca_cb; - devcb_write_line m_out_cb_cb; -}; - - /*************************************************************************** DEVICE CONFIGURATION MACROS ***************************************************************************/ -class tpi6525_device : public device_t, - public tpi6525_interface +class tpi6525_device : public device_t { public: tpi6525_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); ~tpi6525_device() {} + template static devcb2_base &set_out_irq_callback(device_t &device, _Object object) { return downcast(device).m_out_irq_cb.set_callback(object); } + template static devcb2_base &set_in_pa_callback(device_t &device, _Object object) { return downcast(device).m_in_pa_cb.set_callback(object); } + template static devcb2_base &set_out_pa_callback(device_t &device, _Object object) { return downcast(device).m_out_pa_cb.set_callback(object); } + template static devcb2_base &set_in_pb_callback(device_t &device, _Object object) { return downcast(device).m_in_pb_cb.set_callback(object); } + template static devcb2_base &set_out_pb_callback(device_t &device, _Object object) { return downcast(device).m_out_pb_cb.set_callback(object); } + template static devcb2_base &set_in_pc_callback(device_t &device, _Object object) { return downcast(device).m_in_pc_cb.set_callback(object); } + template static devcb2_base &set_out_pc_callback(device_t &device, _Object object) { return downcast(device).m_out_pc_cb.set_callback(object); } + template static devcb2_base &set_out_ca_callback(device_t &device, _Object object) { return downcast(device).m_out_ca_cb.set_callback(object); } + template static devcb2_base &set_out_cb_callback(device_t &device, _Object object) { return downcast(device).m_out_cb_cb.set_callback(object); } + DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -85,21 +72,24 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); private: // internal state - devcb_resolved_write_line m_out_irq_func; - devcb_resolved_read8 m_in_pa_func; - devcb_resolved_write8 m_out_pa_func; - devcb_resolved_read8 m_in_pb_func; - devcb_resolved_write8 m_out_pb_func; - devcb_resolved_read8 m_in_pc_func; - devcb_resolved_write8 m_out_pc_func; - devcb_resolved_write_line m_out_ca_func; - devcb_resolved_write_line m_out_cb_func; + devcb2_write_line m_out_irq_cb; + + devcb2_read8 m_in_pa_cb; + devcb2_write8 m_out_pa_cb; + + devcb2_read8 m_in_pb_cb; + devcb2_write8 m_out_pb_cb; + + devcb2_read8 m_in_pc_cb; + devcb2_write8 m_out_pc_cb; + + devcb2_write_line m_out_ca_cb; + devcb2_write_line m_out_cb_cb; UINT8 m_port_a, m_ddr_a, m_in_a; UINT8 m_port_b, m_ddr_b, m_in_b; @@ -119,10 +109,32 @@ private: extern const device_type TPI6525; -#define MCFG_TPI6525_ADD(_tag, _intrf) \ - MCFG_DEVICE_ADD(_tag, TPI6525, 0) \ - MCFG_DEVICE_CONFIG(_intrf) +#define MCFG_TPI6525_OUT_IRQ_CB(_devcb) \ + devcb = &tpi6525_device::set_out_irq_callback(*device, DEVCB2_##_devcb); +#define MCFG_TPI6525_IN_PA_CB(_devcb) \ + devcb = &tpi6525_device::set_in_pa_callback(*device, DEVCB2_##_devcb); + +#define MCFG_TPI6525_OUT_PA_CB(_devcb) \ + devcb = &tpi6525_device::set_out_pa_callback(*device, DEVCB2_##_devcb); + +#define MCFG_TPI6525_IN_PB_CB(_devcb) \ + devcb = &tpi6525_device::set_in_pb_callback(*device, DEVCB2_##_devcb); + +#define MCFG_TPI6525_OUT_PB_CB(_devcb) \ + devcb = &tpi6525_device::set_out_pb_callback(*device, DEVCB2_##_devcb); + +#define MCFG_TPI6525_IN_PC_CB(_devcb) \ + devcb = &tpi6525_device::set_in_pc_callback(*device, DEVCB2_##_devcb); + +#define MCFG_TPI6525_OUT_PC_CB(_devcb) \ + devcb = &tpi6525_device::set_out_pc_callback(*device, DEVCB2_##_devcb); + +#define MCFG_TPI6525_OUT_CA_CB(_devcb) \ + devcb = &tpi6525_device::set_out_ca_callback(*device, DEVCB2_##_devcb); + +#define MCFG_TPI6525_OUT_CB_CB(_devcb) \ + devcb = &tpi6525_device::set_out_cb_callback(*device, DEVCB2_##_devcb); #endif /* __TPI6525_H__ */ diff --git a/src/mess/drivers/amiga.c b/src/mess/drivers/amiga.c index 69cea31c0de..ad5a2bb8f2a 100644 --- a/src/mess/drivers/amiga.c +++ b/src/mess/drivers/amiga.c @@ -502,19 +502,6 @@ MACHINE_RESET_MEMBER(cdtv_state,cdtv) MACHINE_RESET_CALL_LEGACY( amigacd ); } -static const tpi6525_interface cdtv_tpi_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(amiga_state, amigacd_tpi6525_irq), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(amiga_state, amigacd_tpi6525_portb_w), - DEVCB_DRIVER_MEMBER(amiga_state, amigacd_tpi6525_portc_r), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL -}; - READ8_MEMBER(a1200_state::a1200_cia_0_portA_r) { UINT8 ret = ioport("CIA0PORTA")->read() & 0xc0; /* Gameport 1 and 0 buttons */ @@ -684,8 +671,11 @@ static MACHINE_CONFIG_DERIVED_CLASS( cdtv, ntsc, cdtv_state) MCFG_CDROM_ADD( "cdrom", cdtv_cdrom) MCFG_SOFTWARE_LIST_ADD("cd_list", "cdtv") - MCFG_TPI6525_ADD("tpi6525", cdtv_tpi_intf) - + MCFG_DEVICE_ADD("tpi6525", TPI6525, 0) + MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(amiga_state, amigacd_tpi6525_irq)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(amiga_state, amigacd_tpi6525_portb_w)) + MCFG_TPI6525_IN_PC_CB(READ8(amiga_state, amigacd_tpi6525_portc_r)) + MCFG_DEVICE_MODIFY("cia_0") MCFG_MOS6526_TOD(0) // connected to vsync MACHINE_CONFIG_END diff --git a/src/mess/drivers/cbm2.c b/src/mess/drivers/cbm2.c index 9a883f4fd8a..574d5b97b92 100644 --- a/src/mess/drivers/cbm2.c +++ b/src/mess/drivers/cbm2.c @@ -1379,33 +1379,6 @@ WRITE_LINE_MEMBER( p500_state::tpi1_cb_w ) m_vicdotsel = state; } -static const tpi6525_interface tpi1_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_irq_w), - DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r), - DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w), - DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r), - DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_ca_w), - DEVCB_NULL -}; - -static const tpi6525_interface p500_tpi1_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_irq_w), - DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r), - DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w), - DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r), - DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_ca_w), - DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_cb_w) -}; - - //------------------------------------------------- // tpi6525_interface tpi2_intf //------------------------------------------------- @@ -1524,46 +1497,6 @@ WRITE8_MEMBER( p500_state::tpi2_pc_w ) m_vicbnksel = data >> 6; } -static const tpi6525_interface tpi2_intf = -{ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w), - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w), - DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pc_r), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL -}; - -static const tpi6525_interface hp_tpi2_intf = -{ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w), - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w), - DEVCB_DRIVER_MEMBER(cbm2hp_state, tpi2_pc_r), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL -}; - -static const tpi6525_interface p500_tpi2_intf = -{ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w), - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w), - DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_r), - DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_w), - DEVCB_NULL, - DEVCB_NULL -}; - - //------------------------------------------------- // MOS6526_INTERFACE( cia_intf ) //------------------------------------------------- @@ -1773,20 +1706,6 @@ WRITE8_MEMBER( cbm2_state::ext_tpi_pc_w ) } } -static const tpi6525_interface ext_tpi_intf = -{ - DEVCB_NULL, - DEVCB_DEVICE_MEMBER(EXT_MOS6526_TAG, mos6526_device, pa_r), - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(cbm2_state, ext_tpi_pb_r), - DEVCB_DRIVER_MEMBER(cbm2_state, ext_tpi_pb_w), - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(cbm2_state, ext_tpi_pc_w), - DEVCB_NULL, - DEVCB_NULL -}; - - //------------------------------------------------- // MOS6526_INTERFACE( ext_cia_intf ) //------------------------------------------------- @@ -2136,8 +2055,19 @@ static MACHINE_CONFIG_START( p500_ntsc, p500_state ) // devices MCFG_PLS100_ADD(PLA1_TAG) MCFG_PLS100_ADD(PLA2_TAG) - MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf) - MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf) + MCFG_DEVICE_ADD(MOS6525_1_TAG, TPI6525, 0) + MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(p500_state, tpi1_irq_w)) + MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pa_r)) + MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi1_pa_w)) + MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, tpi1_pb_r)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi1_pb_w)) + MCFG_TPI6525_OUT_CA_CB(WRITELINE(p500_state, tpi1_ca_w)) + MCFG_TPI6525_OUT_CB_CB(WRITELINE(p500_state, tpi1_cb_w)) + MCFG_DEVICE_ADD(MOS6525_2_TAG, TPI6525, 0) + MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi2_pa_w)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi2_pb_w)) + MCFG_TPI6525_IN_PC_CB(READ8(p500_state, tpi2_pc_r)) + MCFG_TPI6525_OUT_PC_CB(WRITE8(p500_state, tpi2_pc_w)) MCFG_DEVICE_ADD(MOS6551A_TAG, MOS6551, VIC6567_CLOCK) MCFG_MOS6551_XTAL(XTAL_1_8432MHz) MCFG_MOS6551_IRQ_HANDLER(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w)) @@ -2240,8 +2170,19 @@ static MACHINE_CONFIG_START( p500_pal, p500_state ) // devices MCFG_PLS100_ADD(PLA1_TAG) MCFG_PLS100_ADD(PLA2_TAG) - MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf) - MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf) + MCFG_DEVICE_ADD(MOS6525_1_TAG, TPI6525, 0) + MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(p500_state, tpi1_irq_w)) + MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pa_r)) + MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi1_pa_w)) + MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, tpi1_pb_r)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi1_pb_w)) + MCFG_TPI6525_OUT_CA_CB(WRITELINE(p500_state, tpi1_ca_w)) + MCFG_TPI6525_OUT_CB_CB(WRITELINE(p500_state, tpi1_cb_w)) + MCFG_DEVICE_ADD(MOS6525_2_TAG, TPI6525, 0) + MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi2_pa_w)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi2_pb_w)) + MCFG_TPI6525_IN_PC_CB(READ8(p500_state, tpi2_pc_r)) + MCFG_TPI6525_OUT_PC_CB(WRITE8(p500_state, tpi2_pc_w)) MCFG_DEVICE_ADD(MOS6551A_TAG, MOS6551, 0) MCFG_MOS6551_XTAL(XTAL_1_8432MHz) MCFG_MOS6551_IRQ_HANDLER(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w)) @@ -2340,8 +2281,17 @@ static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2_state ) // devices MCFG_PLS100_ADD(PLA1_TAG) - MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf) - MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf) + MCFG_DEVICE_ADD(MOS6525_1_TAG, TPI6525, 0) + MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(cbm2_state, tpi1_irq_w)) + MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pa_r)) + MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi1_pa_w)) + MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pb_r)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi1_pb_w)) + MCFG_TPI6525_OUT_CA_CB(WRITELINE(cbm2_state, tpi1_ca_w)) + MCFG_DEVICE_ADD(MOS6525_2_TAG, TPI6525, 0) + MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi2_pa_w)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi2_pb_w)) + MCFG_TPI6525_IN_PC_CB(READ8(cbm2_state, tpi2_pc_r)) MCFG_DEVICE_ADD(MOS6551A_TAG, MOS6551, 0) MCFG_MOS6551_XTAL(XTAL_1_8432MHz) MCFG_MOS6551_IRQ_HANDLER(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w)) @@ -2454,8 +2404,8 @@ MACHINE_CONFIG_END //------------------------------------------------- static MACHINE_CONFIG_DERIVED_CLASS( cbm2hp_ntsc, cbm2lp_ntsc, cbm2hp_state ) - MCFG_DEVICE_REMOVE(MOS6525_2_TAG) - MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf) + MCFG_DEVICE_MODIFY(MOS6525_2_TAG) + MCFG_TPI6525_IN_PC_CB(READ8(cbm2hp_state, tpi2_pc_r)) MACHINE_CONFIG_END @@ -2489,7 +2439,11 @@ static MACHINE_CONFIG_DERIVED( bx256hp, b256hp ) MCFG_CPU_IO_MAP(ext_io) MCFG_PIC8259_ADD(EXT_I8259A_TAG, INPUTLINE(EXT_I8088_TAG, INPUT_LINE_IRQ0), VCC, NULL) - MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf) + MCFG_DEVICE_ADD(EXT_MOS6525_TAG, TPI6525, 0) + MCFG_TPI6525_IN_PA_CB(DEVREAD8(EXT_MOS6526_TAG, mos6526_device, pa_r)) + MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, ext_tpi_pb_r)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, ext_tpi_pb_w)) + MCFG_TPI6525_OUT_PC_CB(WRITE8(cbm2_state, ext_tpi_pc_w)) MCFG_DEVICE_ADD(EXT_MOS6526_TAG, MOS6526, XTAL_18MHz/9) MCFG_MOS6526_TOD(60) MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(cbm2_state, ext_cia_irq_w)) @@ -2509,8 +2463,8 @@ static MACHINE_CONFIG_DERIVED( cbm2hp_pal, cbm2hp_ntsc ) MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal) // devices - MCFG_DEVICE_REMOVE(MOS6525_2_TAG) - MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf) + MCFG_DEVICE_MODIFY(MOS6525_2_TAG) + MCFG_TPI6525_IN_PC_CB(READ8(cbm2hp_state, tpi2_pc_r)) MCFG_DEVICE_MODIFY(MOS6526_TAG) MCFG_MOS6526_TOD(50) @@ -2547,7 +2501,11 @@ static MACHINE_CONFIG_DERIVED( cbm730, cbm720 ) MCFG_CPU_IO_MAP(ext_io) MCFG_PIC8259_ADD(EXT_I8259A_TAG, INPUTLINE(EXT_I8088_TAG, INPUT_LINE_IRQ0), VCC, NULL) - MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf) + MCFG_DEVICE_ADD(EXT_MOS6525_TAG, TPI6525, 0) + MCFG_TPI6525_IN_PA_CB(DEVREAD8(EXT_MOS6526_TAG, mos6526_device, pa_r)) + MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, ext_tpi_pb_r)) + MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, ext_tpi_pb_w)) + MCFG_TPI6525_OUT_PC_CB(WRITE8(cbm2_state, ext_tpi_pc_w)) MCFG_DEVICE_ADD(EXT_MOS6526_TAG, MOS6526, XTAL_18MHz/9) MCFG_MOS6526_TOD(50) MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(cbm2_state, ext_cia_irq_w))