mirror of
https://github.com/holub/mame
synced 2025-04-26 18:23:08 +03:00
tpi6525_device: converted to devcb2 (nw)
This commit is contained in:
parent
f895dd6a79
commit
177b6f63ae
@ -138,26 +138,18 @@ 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()
|
||||
|
@ -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")
|
||||
|
@ -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,8 +352,19 @@ 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))
|
||||
|
@ -106,6 +106,15 @@ const device_type TPI6525 = &device_creator<tpi6525_device>;
|
||||
|
||||
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<const tpi6525_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<tpi6525_interface *>(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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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<class _Object> static devcb2_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_irq_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_in_pa_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_in_pa_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_pa_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_pa_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_in_pb_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_in_pb_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_pb_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_pb_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_in_pc_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_in_pc_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_pc_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_pc_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_ca_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_ca_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_cb_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(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__ */
|
||||
|
@ -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,7 +671,10 @@ 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
|
||||
|
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user