tmpz84c011c small cleanup.

note: if you want a handler for logging unmapped read/write, put it in the driver machine config, like we do with 8255, for example:
MCFG_I8255_OUT_PORTB_CB(LOGGER("PPI8255 - unmapped write port B", 0))
This commit is contained in:
Michaël Banaan Ananas 2014-06-20 23:41:14 +00:00
parent f1f05fcb07
commit bf43a3db23
2 changed files with 241 additions and 297 deletions

View File

@ -1,258 +1,83 @@
/***************************************************************************
Toshiba TMPZ84C011, TLCS-Z80 ASSP Family
Z80 CPU, CTC, CGC(6/8MHz), I/O8x5
TODO:
- CGC (clock generator/controller)
***************************************************************************/
#include "tmpz84c011.h"
// how do we actually install default handlers for logging?
/*
READ8_MEMBER(tmpz84c011_device::porta_default_r) { logerror("%s read port A but no handler assigned\n", machine().describe_context()); return 0xff; }
READ8_MEMBER(tmpz84c011_device::portb_default_r) { logerror("%s read port B but no handler assigned\n", machine().describe_context()); return 0xff; }
READ8_MEMBER(tmpz84c011_device::portc_default_r) { logerror("%s read port C but no handler assigned\n", machine().describe_context()); return 0xff; }
READ8_MEMBER(tmpz84c011_device::portd_default_r) { logerror("%s read port D but no handler assigned\n", machine().describe_context()); return 0xff; }
READ8_MEMBER(tmpz84c011_device::porte_default_r) { logerror("%s read port E but no handler assigned\n", machine().describe_context()); return 0xff; }
WRITE8_MEMBER(tmpz84c011_device::porta_default_w) { logerror("%s write %02x to port A but no handler assigned\n", machine().describe_context(), data); }
WRITE8_MEMBER(tmpz84c011_device::portb_default_w) { logerror("%s write %02x to port B but no handler assigned\n", machine().describe_context(), data); }
WRITE8_MEMBER(tmpz84c011_device::portc_default_w) { logerror("%s write %02x to port C but no handler assigned\n", machine().describe_context(), data); }
WRITE8_MEMBER(tmpz84c011_device::portd_default_w) { logerror("%s write %02x to port D but no handler assigned\n", machine().describe_context(), data); }
WRITE8_MEMBER(tmpz84c011_device::porte_default_w) { logerror("%s write %02x to port E but no handler assigned\n", machine().describe_context(), data); }
*/
READ8_MEMBER(tmpz84c011_device::tmpz84c011_pio_r)
{
int portdata = 0xff;
switch (offset)
{
case 0: /* PA_0 */
portdata = m_inports0();
break;
case 1: /* PB_0 */
portdata = m_inports1();
break;
case 2: /* PC_0 */
portdata = m_inports2();
break;
case 3: /* PD_0 */
portdata = m_inports3();
break;
case 4: /* PE_0 */
portdata = m_inports4();
break;
}
return portdata;
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_pio_w)
{
switch (offset)
{
case 0: /* PA_0 */
m_outports0(data);
break;
case 1: /* PB_0 */
m_outports1(data);
break;
case 2: /* PC_0 */
m_outports2(data);
break;
case 3: /* PD_0 */
m_outports3(data);
break;
case 4: /* PE_0 */
m_outports4(data);
break;
}
}
/* CPU interface */
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_pa_r)
{
return (tmpz84c011_pio_r(space,0) & ~m_pio_dir[0]) | (m_pio_latch[0] & m_pio_dir[0]);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_pb_r)
{
return (tmpz84c011_pio_r(space,1) & ~m_pio_dir[1]) | (m_pio_latch[1] & m_pio_dir[1]);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_pc_r)
{
return (tmpz84c011_pio_r(space,2) & ~m_pio_dir[2]) | (m_pio_latch[2] & m_pio_dir[2]);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_pd_r)
{
return (tmpz84c011_pio_r(space,3) & ~m_pio_dir[3]) | (m_pio_latch[3] & m_pio_dir[3]);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_pe_r)
{
return (tmpz84c011_pio_r(space,4) & ~m_pio_dir[4]) | (m_pio_latch[4] & m_pio_dir[4]);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_pa_w)
{
m_pio_latch[0] = data;
tmpz84c011_pio_w(space, 0, data);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_pb_w)
{
m_pio_latch[1] = data;
tmpz84c011_pio_w(space, 1, data);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_pc_w)
{
m_pio_latch[2] = data;
tmpz84c011_pio_w(space, 2, data);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_pd_w)
{
m_pio_latch[3] = data;
tmpz84c011_pio_w(space, 3, data);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_pe_w)
{
m_pio_latch[4] = data;
tmpz84c011_pio_w(space, 4, data);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pa_r)
{
return m_pio_dir[0];
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pb_r)
{
return m_pio_dir[1];
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pc_r)
{
return m_pio_dir[2];
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pd_r)
{
return m_pio_dir[3];
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pe_r)
{
return m_pio_dir[4];
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pa_w)
{
m_pio_dir[0] = data;
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pb_w)
{
m_pio_dir[1] = data;
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pc_w)
{
m_pio_dir[2] = data;
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pd_w)
{
m_pio_dir[3] = data;
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_0_dir_pe_w)
{
m_pio_dir[4] = data;
}
const device_type TMPZ84C011 = &device_creator<tmpz84c011_device>;
static ADDRESS_MAP_START( tmpz84c011_internal_io_map, AS_IO, 8, tmpz84c011_device )
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("ctc", z80ctc_device, read, write) AM_MIRROR(0xff00)
AM_RANGE(0x50, 0x50) AM_READWRITE(tmpz84c011_0_pa_r, tmpz84c011_0_pa_w) AM_MIRROR(0xff00)
AM_RANGE(0x51, 0x51) AM_READWRITE(tmpz84c011_0_pb_r, tmpz84c011_0_pb_w) AM_MIRROR(0xff00)
AM_RANGE(0x52, 0x52) AM_READWRITE(tmpz84c011_0_pc_r, tmpz84c011_0_pc_w) AM_MIRROR(0xff00)
AM_RANGE(0x30, 0x30) AM_READWRITE(tmpz84c011_0_pd_r, tmpz84c011_0_pd_w) AM_MIRROR(0xff00)
AM_RANGE(0x40, 0x40) AM_READWRITE(tmpz84c011_0_pe_r, tmpz84c011_0_pe_w) AM_MIRROR(0xff00)
AM_RANGE(0x54, 0x54) AM_READWRITE(tmpz84c011_0_dir_pa_r, tmpz84c011_0_dir_pa_w) AM_MIRROR(0xff00)
AM_RANGE(0x55, 0x55) AM_READWRITE(tmpz84c011_0_dir_pb_r, tmpz84c011_0_dir_pb_w) AM_MIRROR(0xff00)
AM_RANGE(0x56, 0x56) AM_READWRITE(tmpz84c011_0_dir_pc_r, tmpz84c011_0_dir_pc_w) AM_MIRROR(0xff00)
AM_RANGE(0x34, 0x34) AM_READWRITE(tmpz84c011_0_dir_pd_r, tmpz84c011_0_dir_pd_w) AM_MIRROR(0xff00)
AM_RANGE(0x44, 0x44) AM_READWRITE(tmpz84c011_0_dir_pe_r, tmpz84c011_0_dir_pe_w) AM_MIRROR(0xff00)
AM_RANGE(0x50, 0x50) AM_READWRITE(tmpz84c011_pa_r, tmpz84c011_pa_w) AM_MIRROR(0xff00)
AM_RANGE(0x51, 0x51) AM_READWRITE(tmpz84c011_pb_r, tmpz84c011_pb_w) AM_MIRROR(0xff00)
AM_RANGE(0x52, 0x52) AM_READWRITE(tmpz84c011_pc_r, tmpz84c011_pc_w) AM_MIRROR(0xff00)
AM_RANGE(0x30, 0x30) AM_READWRITE(tmpz84c011_pd_r, tmpz84c011_pd_w) AM_MIRROR(0xff00)
AM_RANGE(0x40, 0x40) AM_READWRITE(tmpz84c011_pe_r, tmpz84c011_pe_w) AM_MIRROR(0xff00)
AM_RANGE(0x54, 0x54) AM_READWRITE(tmpz84c011_dir_pa_r, tmpz84c011_dir_pa_w) AM_MIRROR(0xff00)
AM_RANGE(0x55, 0x55) AM_READWRITE(tmpz84c011_dir_pb_r, tmpz84c011_dir_pb_w) AM_MIRROR(0xff00)
AM_RANGE(0x56, 0x56) AM_READWRITE(tmpz84c011_dir_pc_r, tmpz84c011_dir_pc_w) AM_MIRROR(0xff00)
AM_RANGE(0x34, 0x34) AM_READWRITE(tmpz84c011_dir_pd_r, tmpz84c011_dir_pd_w) AM_MIRROR(0xff00)
AM_RANGE(0x44, 0x44) AM_READWRITE(tmpz84c011_dir_pe_r, tmpz84c011_dir_pe_w) AM_MIRROR(0xff00)
ADDRESS_MAP_END
tmpz84c011_device::tmpz84c011_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: z80_device(mconfig, TMPZ84C011, "TMPZ84C011", tag, owner, clock, "tmpz84c011", __FILE__),
m_io_space_config( "io", ENDIANNESS_LITTLE, 8, 16, 0, ADDRESS_MAP_NAME( tmpz84c011_internal_io_map ) ),
m_outports0(*this),
m_outports1(*this),
m_outports2(*this),
m_outports3(*this),
m_outports4(*this),
m_inports0(*this),
m_inports1(*this),
m_inports2(*this),
m_inports3(*this),
m_inports4(*this),
m_outportsa(*this),
m_outportsb(*this),
m_outportsc(*this),
m_outportsd(*this),
m_outportse(*this),
m_inportsa(*this),
m_inportsb(*this),
m_inportsc(*this),
m_inportsd(*this),
m_inportse(*this),
m_intr_cb(*this),
m_zc0_cb(*this),
m_zc1_cb(*this),
m_zc2_cb(*this)
{
memset(m_pio_dir, 0, 5);
memset(m_pio_latch, 0, 5);
}
WRITE_LINE_MEMBER( tmpz84c011_device::intr_cb_trampoline_w ) { m_intr_cb(state); }
WRITE_LINE_MEMBER( tmpz84c011_device::zc0_cb_trampoline_w ) { m_zc0_cb(state); }
WRITE_LINE_MEMBER( tmpz84c011_device::zc1_cb_trampoline_w ) { m_zc1_cb(state); }
WRITE_LINE_MEMBER( tmpz84c011_device::zc2_cb_trampoline_w ) { m_zc2_cb(state); }
const device_type TMPZ84C011 = &device_creator<tmpz84c011_device>;
static MACHINE_CONFIG_FRAGMENT( tmpz84c011 )
MCFG_DEVICE_ADD("ctc", Z80CTC, DERIVED_CLOCK(1,1) )
MCFG_Z80CTC_INTR_CB(WRITELINE(tmpz84c011_device, intr_cb_trampoline_w))
MCFG_Z80CTC_ZC0_CB(WRITELINE(tmpz84c011_device, zc0_cb_trampoline_w))
MCFG_Z80CTC_ZC1_CB(WRITELINE(tmpz84c011_device, zc1_cb_trampoline_w))
MCFG_Z80CTC_ZC2_CB(WRITELINE(tmpz84c011_device, zc2_cb_trampoline_w))
MACHINE_CONFIG_END
machine_config_constructor tmpz84c011_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( tmpz84c011 );
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void tmpz84c011_device::device_start()
{
z80_device::device_start();
m_outports0.resolve_safe();
m_outports1.resolve_safe();
m_outports2.resolve_safe();
m_outports3.resolve_safe();
m_outports4.resolve_safe();
// resolve callbacks
m_outportsa.resolve_safe();
m_outportsb.resolve_safe();
m_outportsc.resolve_safe();
m_outportsd.resolve_safe();
m_outportse.resolve_safe();
m_inports0.resolve_safe(0);
m_inports1.resolve_safe(0);
m_inports2.resolve_safe(0);
m_inports3.resolve_safe(0);
m_inports4.resolve_safe(0);
m_inportsa.resolve_safe(0);
m_inportsb.resolve_safe(0);
m_inportsc.resolve_safe(0);
m_inportsd.resolve_safe(0);
m_inportse.resolve_safe(0);
m_intr_cb.resolve_safe();
m_zc0_cb.resolve_safe();
m_zc1_cb.resolve_safe();
m_zc2_cb.resolve_safe();
// register for save states
save_item(NAME(m_pio_dir[0]));
save_item(NAME(m_pio_latch[0]));
save_item(NAME(m_pio_dir[1]));
@ -263,20 +88,147 @@ void tmpz84c011_device::device_start()
save_item(NAME(m_pio_latch[3]));
save_item(NAME(m_pio_dir[4]));
save_item(NAME(m_pio_latch[4]));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void tmpz84c011_device::device_reset()
{
z80_device::device_reset();
// initialize TMPZ84C011 PIO
for (int i = 0; i < 5; i++)
{
m_pio_dir[i] = m_pio_latch[i] = 0;
tmpz84c011_pio_w(*m_io, i, 0);
}
tmpz84c011_dir_pa_w(*m_io, 0, 0); tmpz84c011_pa_w(*m_io, 0, 0xff);
tmpz84c011_dir_pb_w(*m_io, 0, 0); tmpz84c011_pb_w(*m_io, 0, 0xff);
tmpz84c011_dir_pc_w(*m_io, 0, 0); tmpz84c011_pc_w(*m_io, 0, 0xff);
tmpz84c011_dir_pd_w(*m_io, 0, 0); tmpz84c011_pd_w(*m_io, 0, 0xff);
tmpz84c011_dir_pe_w(*m_io, 0, 0); tmpz84c011_pe_w(*m_io, 0, 0xff);
}
/* CPU interface */
READ8_MEMBER(tmpz84c011_device::tmpz84c011_pa_r)
{
return (m_inportsa() & ~m_pio_dir[0]) | (m_pio_latch[0] & m_pio_dir[0]);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_pb_r)
{
return (m_inportsb() & ~m_pio_dir[1]) | (m_pio_latch[1] & m_pio_dir[1]);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_pc_r)
{
return (m_inportsc() & ~m_pio_dir[2]) | (m_pio_latch[2] & m_pio_dir[2]);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_pd_r)
{
return (m_inportsd() & ~m_pio_dir[3]) | (m_pio_latch[3] & m_pio_dir[3]);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_pe_r)
{
return (m_inportse() & ~m_pio_dir[4]) | (m_pio_latch[4] & m_pio_dir[4]);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_pa_w)
{
m_pio_latch[0] = data;
m_outportsa(data | ~m_pio_dir[0]);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_pb_w)
{
m_pio_latch[1] = data;
m_outportsb(data | ~m_pio_dir[1]);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_pc_w)
{
m_pio_latch[2] = data;
m_outportsc(data | ~m_pio_dir[2]);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_pd_w)
{
m_pio_latch[3] = data;
m_outportsd(data | ~m_pio_dir[3]);
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_pe_w)
{
m_pio_latch[4] = data;
m_outportse(data | ~m_pio_dir[4]);
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pa_r)
{
return m_pio_dir[0];
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pb_r)
{
return m_pio_dir[1];
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pc_r)
{
return m_pio_dir[2];
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pd_r)
{
return m_pio_dir[3];
}
READ8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pe_r)
{
return m_pio_dir[4];
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pa_w)
{
m_pio_dir[0] = data;
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pb_w)
{
m_pio_dir[1] = data;
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pc_w)
{
m_pio_dir[2] = data;
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pd_w)
{
m_pio_dir[3] = data;
}
WRITE8_MEMBER(tmpz84c011_device::tmpz84c011_dir_pe_w)
{
m_pio_dir[4] = data;
}
WRITE_LINE_MEMBER( tmpz84c011_device::intr_cb_trampoline_w ) { m_intr_cb(state); }
WRITE_LINE_MEMBER( tmpz84c011_device::zc0_cb_trampoline_w ) { m_zc0_cb(state); }
WRITE_LINE_MEMBER( tmpz84c011_device::zc1_cb_trampoline_w ) { m_zc1_cb(state); }
WRITE_LINE_MEMBER( tmpz84c011_device::zc2_cb_trampoline_w ) { m_zc2_cb(state); }
static MACHINE_CONFIG_FRAGMENT( tmpz84c011 )
MCFG_DEVICE_ADD("ctc", Z80CTC, DERIVED_CLOCK(1,1) )
MCFG_Z80CTC_INTR_CB(WRITELINE(tmpz84c011_device, intr_cb_trampoline_w))
MCFG_Z80CTC_ZC0_CB(WRITELINE(tmpz84c011_device, zc0_cb_trampoline_w))
MCFG_Z80CTC_ZC1_CB(WRITELINE(tmpz84c011_device, zc1_cb_trampoline_w))
MCFG_Z80CTC_ZC2_CB(WRITELINE(tmpz84c011_device, zc2_cb_trampoline_w))
MACHINE_CONFIG_END
machine_config_constructor tmpz84c011_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( tmpz84c011 );
}

View File

@ -1,39 +1,48 @@
/***************************************************************************
Toshiba TMPZ84C011, TLCS-Z80 ASSP Family
Z80 CPU, CTC, CGC(6/8MHz), I/O8x5
***************************************************************************/
#include "emu.h"
#include "z80.h"
// TMPZ84C011 PIO callbacks
#define MCFG_TMPZ84C011_PORTA_READ_CB(_devcb) \
devcb = &tmpz84c011_device::set_inports0_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_inportsa_cb(*device, DEVCB_##_devcb);
#define MCFG_TMPZ84C011_PORTB_READ_CB(_devcb) \
devcb = &tmpz84c011_device::set_inports1_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_inportsb_cb(*device, DEVCB_##_devcb);
#define MCFG_TMPZ84C011_PORTC_READ_CB(_devcb) \
devcb = &tmpz84c011_device::set_inports2_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_inportsc_cb(*device, DEVCB_##_devcb);
#define MCFG_TMPZ84C011_PORTD_READ_CB(_devcb) \
devcb = &tmpz84c011_device::set_inports3_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_inportsd_cb(*device, DEVCB_##_devcb);
#define MCFG_TMPZ84C011_PORTE_READ_CB(_devcb) \
devcb = &tmpz84c011_device::set_inports4_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_inportse_cb(*device, DEVCB_##_devcb);
#define MCFG_TMPZ84C011_PORTA_WRITE_CB(_devcb) \
devcb = &tmpz84c011_device::set_outports0_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_outportsa_cb(*device, DEVCB_##_devcb);
#define MCFG_TMPZ84C011_PORTB_WRITE_CB(_devcb) \
devcb = &tmpz84c011_device::set_outports1_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_outportsb_cb(*device, DEVCB_##_devcb);
#define MCFG_TMPZ84C011_PORTC_WRITE_CB(_devcb) \
devcb = &tmpz84c011_device::set_outports2_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_outportsc_cb(*device, DEVCB_##_devcb);
#define MCFG_TMPZ84C011_PORTD_WRITE_CB(_devcb) \
devcb = &tmpz84c011_device::set_outports3_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_outportsd_cb(*device, DEVCB_##_devcb);
#define MCFG_TMPZ84C011_PORTE_WRITE_CB(_devcb) \
devcb = &tmpz84c011_device::set_outports4_cb(*device, DEVCB_##_devcb);
devcb = &tmpz84c011_device::set_outportse_cb(*device, DEVCB_##_devcb);
// CTC callbacks
#define MCFG_TMPZ84C011_Z80CTC_INTR_CB(_devcb) \
devcb = &tmpz84c011_device::set_intr_callback(*device, DEVCB_##_devcb);
@ -52,58 +61,43 @@ class tmpz84c011_device : public z80_device
public:
tmpz84c011_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32);
template<class _Object> static devcb_base & set_outports0_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outports0.set_callback(object); }
template<class _Object> static devcb_base & set_outports1_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outports1.set_callback(object); }
template<class _Object> static devcb_base & set_outports2_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outports2.set_callback(object); }
template<class _Object> static devcb_base & set_outports3_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outports3.set_callback(object); }
template<class _Object> static devcb_base & set_outports4_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outports4.set_callback(object); }
template<class _Object> static devcb_base & set_outportsa_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outportsa.set_callback(object); }
template<class _Object> static devcb_base & set_outportsb_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outportsb.set_callback(object); }
template<class _Object> static devcb_base & set_outportsc_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outportsc.set_callback(object); }
template<class _Object> static devcb_base & set_outportsd_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outportsd.set_callback(object); }
template<class _Object> static devcb_base & set_outportse_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outportse.set_callback(object); }
template<class _Object> static devcb_base & set_inports0_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inports0.set_callback(object); }
template<class _Object> static devcb_base & set_inports1_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inports1.set_callback(object); }
template<class _Object> static devcb_base & set_inports2_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inports2.set_callback(object); }
template<class _Object> static devcb_base & set_inports3_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inports3.set_callback(object); }
template<class _Object> static devcb_base & set_inports4_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inports4.set_callback(object); }
template<class _Object> static devcb_base & set_inportsa_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inportsa.set_callback(object); }
template<class _Object> static devcb_base & set_inportsb_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inportsb.set_callback(object); }
template<class _Object> static devcb_base & set_inportsc_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inportsc.set_callback(object); }
template<class _Object> static devcb_base & set_inportsd_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inportsd.set_callback(object); }
template<class _Object> static devcb_base & set_inportse_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inportse.set_callback(object); }
template<class _Object> static devcb_base &set_intr_callback(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_intr_cb.set_callback(object); }
template<class _Object> static devcb_base &set_zc0_callback(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_zc0_cb.set_callback(object); }
template<class _Object> static devcb_base &set_zc1_callback(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_zc1_cb.set_callback(object); }
template<class _Object> static devcb_base &set_zc2_callback(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_zc2_cb.set_callback(object); }
DECLARE_READ8_MEMBER(tmpz84c011_pio_r);
DECLARE_WRITE8_MEMBER(tmpz84c011_pio_w);
DECLARE_READ8_MEMBER(tmpz84c011_0_pa_r);
DECLARE_READ8_MEMBER(tmpz84c011_0_pb_r);
DECLARE_READ8_MEMBER(tmpz84c011_0_pc_r);
DECLARE_READ8_MEMBER(tmpz84c011_0_pd_r);
DECLARE_READ8_MEMBER(tmpz84c011_0_pe_r);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_pa_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_pb_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_pc_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_pd_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_pe_w);
DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pa_r);
DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pb_r);
DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pc_r);
DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pd_r);
DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pe_r);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pa_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pb_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pc_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pd_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pe_w);
DECLARE_READ8_MEMBER(porta_default_r);
DECLARE_READ8_MEMBER(portb_default_r);
DECLARE_READ8_MEMBER(portc_default_r);
DECLARE_READ8_MEMBER(portd_default_r);
DECLARE_READ8_MEMBER(porte_default_r);
DECLARE_WRITE8_MEMBER(porta_default_w);
DECLARE_WRITE8_MEMBER(portb_default_w);
DECLARE_WRITE8_MEMBER(portc_default_w);
DECLARE_WRITE8_MEMBER(portd_default_w);
DECLARE_WRITE8_MEMBER(porte_default_w);
DECLARE_READ8_MEMBER(tmpz84c011_pa_r);
DECLARE_READ8_MEMBER(tmpz84c011_pb_r);
DECLARE_READ8_MEMBER(tmpz84c011_pc_r);
DECLARE_READ8_MEMBER(tmpz84c011_pd_r);
DECLARE_READ8_MEMBER(tmpz84c011_pe_r);
DECLARE_WRITE8_MEMBER(tmpz84c011_pa_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_pb_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_pc_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_pd_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_pe_w);
DECLARE_READ8_MEMBER(tmpz84c011_dir_pa_r);
DECLARE_READ8_MEMBER(tmpz84c011_dir_pb_r);
DECLARE_READ8_MEMBER(tmpz84c011_dir_pc_r);
DECLARE_READ8_MEMBER(tmpz84c011_dir_pd_r);
DECLARE_READ8_MEMBER(tmpz84c011_dir_pe_r);
DECLARE_WRITE8_MEMBER(tmpz84c011_dir_pa_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_dir_pb_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_dir_pc_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_dir_pd_w);
DECLARE_WRITE8_MEMBER(tmpz84c011_dir_pe_w);
DECLARE_WRITE_LINE_MEMBER(intr_cb_trampoline_w);
DECLARE_WRITE_LINE_MEMBER(zc0_cb_trampoline_w);
@ -127,28 +121,26 @@ protected:
}
}
private:
UINT8 m_pio_dir[5];
UINT8 m_pio_latch[5];
private:
devcb_write8 m_outports0;
devcb_write8 m_outports1;
devcb_write8 m_outports2;
devcb_write8 m_outports3;
devcb_write8 m_outports4;
devcb_write8 m_outportsa;
devcb_write8 m_outportsb;
devcb_write8 m_outportsc;
devcb_write8 m_outportsd;
devcb_write8 m_outportse;
devcb_read8 m_inports0;
devcb_read8 m_inports1;
devcb_read8 m_inports2;
devcb_read8 m_inports3;
devcb_read8 m_inports4;
devcb_read8 m_inportsa;
devcb_read8 m_inportsb;
devcb_read8 m_inportsc;
devcb_read8 m_inportsd;
devcb_read8 m_inportse;
devcb_write_line m_intr_cb; // interrupt callback
devcb_write_line m_zc0_cb; // channel 0 zero crossing callbacks
devcb_write_line m_zc1_cb; // channel 1 zero crossing callbacks
devcb_write_line m_zc2_cb; // channel 2 zero crossing callbacks
};
extern const device_type TMPZ84C011;