mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
mos6530: updated to use devcb2. nw.
This commit is contained in:
parent
624d84ded6
commit
cbe9e22672
@ -376,7 +376,7 @@ WRITE8_MEMBER( c2040_device::via_pb_w )
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// mos6530_interface miot_intf uk3
|
// mos6530 uk3
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
READ8_MEMBER( c2040_device::miot_pb_r )
|
READ8_MEMBER( c2040_device::miot_pb_r )
|
||||||
@ -438,15 +438,6 @@ WRITE8_MEMBER( c2040_device::miot_pb_w )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6530_INTERFACE( miot_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_MEMBER(FDC_TAG, c2040_fdc_t, write),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c2040_device, miot_pb_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c2040_device, miot_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// SLOT_INTERFACE( c2040_floppies )
|
// SLOT_INTERFACE( c2040_floppies )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -489,7 +480,10 @@ static MACHINE_CONFIG_FRAGMENT( c2040 )
|
|||||||
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
|
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
|
||||||
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
|
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
|
||||||
|
|
||||||
MCFG_MOS6530_ADD(M6530_TAG, XTAL_16MHz/16, miot_intf)
|
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_16MHz/16)
|
||||||
|
MCFG_MOS6530_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
|
||||||
|
MCFG_MOS6530_IN_PB_CB(READ8(c2040_device, miot_pb_r))
|
||||||
|
MCFG_MOS6530_OUT_PB_CB(WRITE8(c2040_device, miot_pb_w))
|
||||||
|
|
||||||
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
|
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
|
||||||
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
|
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
|
||||||
@ -532,7 +526,10 @@ static MACHINE_CONFIG_FRAGMENT( c4040 )
|
|||||||
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
|
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
|
||||||
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
|
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
|
||||||
|
|
||||||
MCFG_MOS6530_ADD(M6530_TAG, XTAL_16MHz/16, miot_intf)
|
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_16MHz/16)
|
||||||
|
MCFG_MOS6530_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
|
||||||
|
MCFG_MOS6530_IN_PB_CB(READ8(c2040_device, miot_pb_r))
|
||||||
|
MCFG_MOS6530_OUT_PB_CB(WRITE8(c2040_device, miot_pb_w))
|
||||||
|
|
||||||
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
|
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
|
||||||
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
|
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
|
||||||
|
@ -555,7 +555,7 @@ WRITE8_MEMBER( c8050_device::via_pb_w )
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// mos6530_interface miot_intf uk3
|
// mos6530 uk3
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
READ8_MEMBER( c8050_device::pi_r )
|
READ8_MEMBER( c8050_device::pi_r )
|
||||||
@ -678,15 +678,6 @@ WRITE8_MEMBER( c8050_device::miot_pb_w )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6530_INTERFACE( c8050_miot_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c8050_device, pi_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c8050_device, pi_w),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c8050_device, miot_pb_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c8050_device, miot_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// LEGACY_FLOPPY_OPTIONS( c8050 )
|
// LEGACY_FLOPPY_OPTIONS( c8050 )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -765,7 +756,11 @@ static MACHINE_CONFIG_FRAGMENT( c8050 )
|
|||||||
MCFG_VIA6522_CA2_HANDLER(WRITELINE(c8050_device, mode_sel_w))
|
MCFG_VIA6522_CA2_HANDLER(WRITELINE(c8050_device, mode_sel_w))
|
||||||
MCFG_VIA6522_CB2_HANDLER(WRITELINE(c8050_device, rw_sel_w))
|
MCFG_VIA6522_CB2_HANDLER(WRITELINE(c8050_device, rw_sel_w))
|
||||||
|
|
||||||
MCFG_MOS6530_ADD(M6530_TAG, XTAL_12MHz/12, c8050_miot_intf)
|
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_12MHz/12)
|
||||||
|
MCFG_MOS6530_IN_PA_CB(READ8(c8050_device, pi_r))
|
||||||
|
MCFG_MOS6530_OUT_PA_CB(WRITE8(c8050_device, pi_w))
|
||||||
|
MCFG_MOS6530_IN_PB_CB(READ8(c8050_device, miot_pb_r))
|
||||||
|
MCFG_MOS6530_OUT_PB_CB(WRITE8(c8050_device, miot_pb_w))
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(c8050_floppy_interface)
|
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(c8050_floppy_interface)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
@ -805,7 +800,11 @@ static MACHINE_CONFIG_FRAGMENT( c8250 )
|
|||||||
MCFG_VIA6522_CA2_HANDLER(WRITELINE(c8050_device, mode_sel_w))
|
MCFG_VIA6522_CA2_HANDLER(WRITELINE(c8050_device, mode_sel_w))
|
||||||
MCFG_VIA6522_CB2_HANDLER(WRITELINE(c8050_device, rw_sel_w))
|
MCFG_VIA6522_CB2_HANDLER(WRITELINE(c8050_device, rw_sel_w))
|
||||||
|
|
||||||
MCFG_MOS6530_ADD(M6530_TAG, XTAL_12MHz/12, c8050_miot_intf)
|
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_12MHz/12)
|
||||||
|
MCFG_MOS6530_IN_PA_CB(READ8(c8050_device, pi_r))
|
||||||
|
MCFG_MOS6530_OUT_PA_CB(WRITE8(c8050_device, pi_w))
|
||||||
|
MCFG_MOS6530_IN_PB_CB(READ8(c8050_device, miot_pb_r))
|
||||||
|
MCFG_MOS6530_OUT_PB_CB(WRITE8(c8050_device, miot_pb_w))
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(c8250_floppy_interface)
|
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(c8250_floppy_interface)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
@ -845,7 +844,11 @@ static MACHINE_CONFIG_FRAGMENT( c8250lp )
|
|||||||
MCFG_VIA6522_CA2_HANDLER(WRITELINE(c8050_device, mode_sel_w))
|
MCFG_VIA6522_CA2_HANDLER(WRITELINE(c8050_device, mode_sel_w))
|
||||||
MCFG_VIA6522_CB2_HANDLER(WRITELINE(c8050_device, rw_sel_w))
|
MCFG_VIA6522_CB2_HANDLER(WRITELINE(c8050_device, rw_sel_w))
|
||||||
|
|
||||||
MCFG_MOS6530_ADD(M6530_TAG, XTAL_12MHz/12, c8050_miot_intf)
|
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_12MHz/12)
|
||||||
|
MCFG_MOS6530_IN_PA_CB(READ8(c8050_device, pi_r))
|
||||||
|
MCFG_MOS6530_OUT_PA_CB(WRITE8(c8050_device, pi_w))
|
||||||
|
MCFG_MOS6530_IN_PB_CB(READ8(c8050_device, miot_pb_r))
|
||||||
|
MCFG_MOS6530_OUT_PB_CB(WRITE8(c8050_device, miot_pb_w))
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(c8250_floppy_interface)
|
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(c8250_floppy_interface)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
@ -885,7 +888,11 @@ static MACHINE_CONFIG_FRAGMENT( sfd1001 )
|
|||||||
MCFG_VIA6522_CA2_HANDLER(WRITELINE(c8050_device, mode_sel_w))
|
MCFG_VIA6522_CA2_HANDLER(WRITELINE(c8050_device, mode_sel_w))
|
||||||
MCFG_VIA6522_CB2_HANDLER(WRITELINE(c8050_device, rw_sel_w))
|
MCFG_VIA6522_CB2_HANDLER(WRITELINE(c8050_device, rw_sel_w))
|
||||||
|
|
||||||
MCFG_MOS6530_ADD(M6530_TAG, XTAL_12MHz/12, c8050_miot_intf)
|
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_12MHz/12)
|
||||||
|
MCFG_MOS6530_IN_PA_CB(READ8(c8050_device, pi_r))
|
||||||
|
MCFG_MOS6530_OUT_PA_CB(WRITE8(c8050_device, pi_w))
|
||||||
|
MCFG_MOS6530_IN_PB_CB(READ8(c8050_device, miot_pb_r))
|
||||||
|
MCFG_MOS6530_OUT_PB_CB(WRITE8(c8050_device, miot_pb_w))
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c8250_floppy_interface)
|
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c8250_floppy_interface)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
@ -39,33 +39,14 @@ enum
|
|||||||
const device_type MOS6530 = &device_creator<mos6530_device>;
|
const device_type MOS6530 = &device_creator<mos6530_device>;
|
||||||
|
|
||||||
mos6530_device::mos6530_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos6530_device::mos6530_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
: device_t(mconfig, MOS6530, "MOS6530", tag, owner, clock, "mos6530", __FILE__)
|
: device_t(mconfig, MOS6530, "MOS6530", tag, owner, clock, "mos6530", __FILE__),
|
||||||
|
m_in_pa_cb(*this),
|
||||||
|
m_out_pa_cb(*this),
|
||||||
|
m_in_pb_cb(*this),
|
||||||
|
m_out_pb_cb(*this)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_config_complete - perform any
|
|
||||||
// operations now that the configuration is
|
|
||||||
// complete
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void mos6530_device::device_config_complete()
|
|
||||||
{
|
|
||||||
// inherit a copy of the static data
|
|
||||||
const mos6530_interface *intf = reinterpret_cast<const mos6530_interface *>(static_config());
|
|
||||||
if (intf != NULL)
|
|
||||||
*static_cast<mos6530_interface *>(this) = *intf;
|
|
||||||
|
|
||||||
// or initialize to defaults if none provided
|
|
||||||
else
|
|
||||||
{
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// device_start - device-specific startup
|
// device_start - device-specific startup
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -76,21 +57,21 @@ void mos6530_device::device_start()
|
|||||||
m_clock = clock();
|
m_clock = clock();
|
||||||
|
|
||||||
/* resolve callbacks */
|
/* resolve callbacks */
|
||||||
m_port[0].in_port_func.resolve(m_in_pa_cb, *this);
|
m_in_pa_cb.resolve_safe(0);
|
||||||
m_port[1].in_port_func.resolve(m_in_pb_cb, *this);
|
m_out_pa_cb.resolve_safe();
|
||||||
m_port[0].out_port_func.resolve(m_out_pa_cb, *this);
|
m_in_pb_cb.resolve_safe(0);
|
||||||
m_port[1].out_port_func.resolve(m_out_pb_cb, *this);
|
m_out_pb_cb.resolve_safe();
|
||||||
|
|
||||||
/* allocate timers */
|
/* allocate timers */
|
||||||
m_timer = timer_alloc(TIMER_END_CALLBACK);
|
m_timer = timer_alloc(TIMER_END_CALLBACK);
|
||||||
|
|
||||||
/* register for save states */
|
/* register for save states */
|
||||||
save_item(NAME(m_port[0].in));
|
save_item(NAME(m_port[0].m_in));
|
||||||
save_item(NAME(m_port[0].out));
|
save_item(NAME(m_port[0].m_out));
|
||||||
save_item(NAME(m_port[0].ddr));
|
save_item(NAME(m_port[0].m_ddr));
|
||||||
save_item(NAME(m_port[1].in));
|
save_item(NAME(m_port[1].m_in));
|
||||||
save_item(NAME(m_port[1].out));
|
save_item(NAME(m_port[1].m_out));
|
||||||
save_item(NAME(m_port[1].ddr));
|
save_item(NAME(m_port[1].m_ddr));
|
||||||
|
|
||||||
save_item(NAME(m_irqstate));
|
save_item(NAME(m_irqstate));
|
||||||
save_item(NAME(m_irqenable));
|
save_item(NAME(m_irqenable));
|
||||||
@ -106,10 +87,10 @@ void mos6530_device::device_start()
|
|||||||
void mos6530_device::device_reset()
|
void mos6530_device::device_reset()
|
||||||
{
|
{
|
||||||
/* reset I/O states */
|
/* reset I/O states */
|
||||||
m_port[0].out = 0;
|
m_port[0].m_out = 0;
|
||||||
m_port[0].ddr = 0;
|
m_port[0].m_ddr = 0;
|
||||||
m_port[1].out = 0;
|
m_port[1].m_out = 0;
|
||||||
m_port[1].ddr = 0;
|
m_port[1].m_ddr = 0;
|
||||||
|
|
||||||
/* reset IRQ states */
|
/* reset IRQ states */
|
||||||
m_irqenable = 0;
|
m_irqenable = 0;
|
||||||
@ -135,15 +116,12 @@ void mos6530_device::device_reset()
|
|||||||
|
|
||||||
void mos6530_device::update_irqstate()
|
void mos6530_device::update_irqstate()
|
||||||
{
|
{
|
||||||
UINT8 out = m_port[1].out;
|
UINT8 out = m_port[1].m_out;
|
||||||
|
|
||||||
if ( m_irqenable )
|
if (m_irqenable)
|
||||||
out = ( ( m_irqstate & TIMER_FLAG ) ? 0x00 : 0x80 ) | ( out & 0x7F );
|
out = ((m_irqstate & TIMER_FLAG) ? 0x00 : 0x80) | (out & 0x7F);
|
||||||
|
|
||||||
if (!m_port[1].out_port_func.isnull())
|
m_out_pb_cb((offs_t)0, out);
|
||||||
m_port[1].out_port_func(0, out);
|
|
||||||
else
|
|
||||||
logerror("6530MIOT chip %s: Port B is being written to but has no handler.\n", tag());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -246,28 +224,28 @@ WRITE8_MEMBER( mos6530_device::write )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* A1 selects the port */
|
/* A1 selects the port */
|
||||||
mos6530_port *port = &m_port[(offset >> 1) & 1];
|
mos6530_port *port = &m_port[BIT(offset, 1)];
|
||||||
|
|
||||||
/* if A0 == 1, we are writing to the port's DDR */
|
/* if A0 == 1, we are writing to the port's DDR */
|
||||||
if (offset & 1)
|
if (offset & 1)
|
||||||
port->ddr = data;
|
port->m_ddr = data;
|
||||||
|
|
||||||
/* if A0 == 0, we are writing to the port's output */
|
/* if A0 == 0, we are writing to the port's output */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UINT8 olddata = port->out;
|
UINT8 olddata = port->m_out;
|
||||||
port->out = data;
|
port->m_out = data;
|
||||||
|
|
||||||
if ( ( offset & 2 ) && m_irqenable )
|
if ((offset & 2) && m_irqenable)
|
||||||
{
|
{
|
||||||
olddata = ( ( m_irqstate & TIMER_FLAG ) ? 0x00 : 0x80 ) | ( olddata & 0x7F );
|
olddata = ((m_irqstate & TIMER_FLAG) ? 0x00 : 0x80) | (olddata & 0x7F);
|
||||||
data = ( ( m_irqstate & TIMER_FLAG ) ? 0x00 : 0x80 ) | ( data & 0x7F );
|
data = ((m_irqstate & TIMER_FLAG) ? 0x00 : 0x80) | (data & 0x7F);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!port->out_port_func.isnull())
|
if (!BIT(offset, 1))
|
||||||
port->out_port_func(0, data);
|
m_out_pa_cb((offs_t)0, data);
|
||||||
else
|
else
|
||||||
logerror("%s 6530MIOT chip %s: Port %c is being written to but has no handler. %02X\n", machine().describe_context(), tag(), 'A' + (offset & 1), data);
|
m_out_pb_cb((offs_t)0, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -308,30 +286,28 @@ READ8_MEMBER( mos6530_device::read )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* A1 selects the port */
|
/* A1 selects the port */
|
||||||
mos6530_port *port = &m_port[(offset >> 1) & 1];
|
mos6530_port *port = &m_port[BIT(offset, 1)];
|
||||||
|
|
||||||
/* if A0 == 1, we are reading the port's DDR */
|
/* if A0 == 1, we are reading the port's DDR */
|
||||||
if (offset & 1)
|
if (offset & 1)
|
||||||
val = port->ddr;
|
val = port->m_ddr;
|
||||||
|
|
||||||
/* if A0 == 0, we are reading the port as an input */
|
/* if A0 == 0, we are reading the port as an input */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UINT8 out = port->out;
|
UINT8 out = port->m_out;
|
||||||
|
|
||||||
if ( ( offset & 2 ) && m_irqenable )
|
if ((offset & 2) && m_irqenable)
|
||||||
out = ( ( m_irqstate & TIMER_FLAG ) ? 0x00 : 0x80 ) | ( out & 0x7F );
|
out = ((m_irqstate & TIMER_FLAG) ? 0x00 : 0x80) | (out & 0x7F);
|
||||||
|
|
||||||
/* call the input callback if it exists */
|
/* call the input callback if it exists */
|
||||||
if (!port->in_port_func.isnull())
|
if (!BIT(offset, 1))
|
||||||
{
|
port->m_in = m_in_pa_cb(0);
|
||||||
port->in = port->in_port_func(0);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
logerror("%s 6530MIOT chip %s: Port %c is being read but has no handler.\n", machine().describe_context(), tag(), 'A' + (offset & 1));
|
port->m_in = m_in_pb_cb(0);
|
||||||
|
|
||||||
/* apply the DDR to the result */
|
/* apply the DDR to the result */
|
||||||
val = (out & port->ddr) | (port->in & ~port->ddr);
|
val = (out & port->m_ddr) | (port->m_in & ~port->m_ddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return val;
|
return val;
|
||||||
@ -345,7 +321,7 @@ READ8_MEMBER( mos6530_device::read )
|
|||||||
|
|
||||||
void mos6530_device::porta_in_set(UINT8 data, UINT8 mask)
|
void mos6530_device::porta_in_set(UINT8 data, UINT8 mask)
|
||||||
{
|
{
|
||||||
m_port[0].in = (m_port[0].in & ~mask) | (data & mask);
|
m_port[0].m_in = (m_port[0].m_in & ~mask) | (data & mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -356,7 +332,7 @@ void mos6530_device::porta_in_set(UINT8 data, UINT8 mask)
|
|||||||
|
|
||||||
void mos6530_device::portb_in_set(UINT8 data, UINT8 mask)
|
void mos6530_device::portb_in_set(UINT8 data, UINT8 mask)
|
||||||
{
|
{
|
||||||
m_port[1].in = (m_port[1].in & ~mask) | (data & mask);
|
m_port[1].m_in = (m_port[1].m_in & ~mask) | (data & mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -367,7 +343,7 @@ void mos6530_device::portb_in_set(UINT8 data, UINT8 mask)
|
|||||||
|
|
||||||
UINT8 mos6530_device::porta_in_get()
|
UINT8 mos6530_device::porta_in_get()
|
||||||
{
|
{
|
||||||
return m_port[0].in;
|
return m_port[0].m_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -378,7 +354,7 @@ UINT8 mos6530_device::porta_in_get()
|
|||||||
|
|
||||||
UINT8 mos6530_device::portb_in_get()
|
UINT8 mos6530_device::portb_in_get()
|
||||||
{
|
{
|
||||||
return m_port[1].in;
|
return m_port[1].m_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -389,7 +365,7 @@ UINT8 mos6530_device::portb_in_get()
|
|||||||
|
|
||||||
UINT8 mos6530_device::porta_out_get()
|
UINT8 mos6530_device::porta_out_get()
|
||||||
{
|
{
|
||||||
return m_port[0].out;
|
return m_port[0].m_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -400,5 +376,5 @@ UINT8 mos6530_device::porta_out_get()
|
|||||||
|
|
||||||
UINT8 mos6530_device::portb_out_get()
|
UINT8 mos6530_device::portb_out_get()
|
||||||
{
|
{
|
||||||
return m_port[1].out;
|
return m_port[1].m_out;
|
||||||
}
|
}
|
||||||
|
@ -38,36 +38,28 @@
|
|||||||
TYPE DEFINITIONS
|
TYPE DEFINITIONS
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
struct mos6530_interface
|
|
||||||
{
|
|
||||||
devcb_read8 m_in_pa_cb;
|
|
||||||
devcb_write8 m_out_pa_cb;
|
|
||||||
|
|
||||||
devcb_read8 m_in_pb_cb;
|
|
||||||
devcb_write8 m_out_pb_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mos6530_port
|
struct mos6530_port
|
||||||
{
|
{
|
||||||
devcb_resolved_read8 in_port_func;
|
UINT8 m_in;
|
||||||
devcb_resolved_write8 out_port_func;
|
UINT8 m_out;
|
||||||
|
UINT8 m_ddr;
|
||||||
UINT8 in;
|
|
||||||
UINT8 out;
|
|
||||||
UINT8 ddr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
MACROS / CONSTANTS
|
MACROS / CONSTANTS
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
class mos6530_device : public device_t,
|
class mos6530_device : public device_t
|
||||||
mos6530_interface
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
mos6530_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
mos6530_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
~mos6530_device() {}
|
~mos6530_device() {}
|
||||||
|
|
||||||
|
template<class _Object> static devcb2_base &set_in_pa_callback(device_t &device, _Object object) { return downcast<mos6530_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<mos6530_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<mos6530_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<mos6530_device &>(device).m_out_pb_cb.set_callback(object); }
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER( read );
|
DECLARE_READ8_MEMBER( read );
|
||||||
DECLARE_WRITE8_MEMBER( write );
|
DECLARE_WRITE8_MEMBER( write );
|
||||||
|
|
||||||
@ -79,15 +71,17 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_config_complete();
|
|
||||||
virtual void device_start();
|
virtual void device_start();
|
||||||
virtual void device_reset();
|
virtual void device_reset();
|
||||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// internal state
|
// internal state
|
||||||
|
devcb2_read8 m_in_pa_cb;
|
||||||
|
devcb2_write8 m_out_pa_cb;
|
||||||
|
|
||||||
//devcb_resolved_write_line out_irq_func;
|
devcb2_read8 m_in_pb_cb;
|
||||||
|
devcb2_write8 m_out_pb_cb;
|
||||||
|
|
||||||
mos6530_port m_port[2];
|
mos6530_port m_port[2];
|
||||||
|
|
||||||
@ -115,11 +109,17 @@ private:
|
|||||||
extern const device_type MOS6530;
|
extern const device_type MOS6530;
|
||||||
|
|
||||||
|
|
||||||
#define MCFG_MOS6530_ADD(_tag, _clock, _config) \
|
#define MCFG_MOS6530_IN_PA_CB(_devcb) \
|
||||||
MCFG_DEVICE_ADD((_tag), MOS6530, _clock) \
|
devcb = &mos6530_device::set_in_pa_callback(*device, DEVCB2_##_devcb);
|
||||||
MCFG_DEVICE_CONFIG(_config)
|
|
||||||
|
#define MCFG_MOS6530_OUT_PA_CB(_devcb) \
|
||||||
|
devcb = &mos6530_device::set_out_pa_callback(*device, DEVCB2_##_devcb);
|
||||||
|
|
||||||
|
#define MCFG_MOS6530_IN_PB_CB(_devcb) \
|
||||||
|
devcb = &mos6530_device::set_in_pb_callback(*device, DEVCB2_##_devcb);
|
||||||
|
|
||||||
|
#define MCFG_MOS6530_OUT_PB_CB(_devcb) \
|
||||||
|
devcb = &mos6530_device::set_out_pb_callback(*device, DEVCB2_##_devcb);
|
||||||
|
|
||||||
#define MOS6530_INTERFACE(name) \
|
|
||||||
const mos6530_interface (name) =
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -261,23 +261,6 @@ WRITE8_MEMBER( kim1_state::kim1_u2_write_b )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static MOS6530_INTERFACE( kim1_u2_mos6530_interface )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_MEMBER(kim1_state, kim1_u2_read_a),
|
|
||||||
DEVCB_DRIVER_MEMBER(kim1_state, kim1_u2_write_a),
|
|
||||||
DEVCB_DRIVER_MEMBER(kim1_state, kim1_u2_read_b),
|
|
||||||
DEVCB_DRIVER_MEMBER(kim1_state, kim1_u2_write_b)
|
|
||||||
};
|
|
||||||
|
|
||||||
static MOS6530_INTERFACE( kim1_u3_mos6530_interface )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(kim1_state::kim1_cassette_input)
|
TIMER_DEVICE_CALLBACK_MEMBER(kim1_state::kim1_cassette_input)
|
||||||
{
|
{
|
||||||
double tap_val = m_cass->input();
|
double tap_val = m_cass->input();
|
||||||
@ -355,9 +338,15 @@ static MACHINE_CONFIG_START( kim1, kim1_state )
|
|||||||
MCFG_SOUND_ADD("dac", DAC, 0)
|
MCFG_SOUND_ADD("dac", DAC, 0)
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
|
|
||||||
/* Devices */
|
/* devices */
|
||||||
MCFG_MOS6530_ADD( "miot_u2", 1000000, kim1_u2_mos6530_interface )
|
MCFG_DEVICE_ADD("miot_u2", MOS6530, 1000000)
|
||||||
MCFG_MOS6530_ADD( "miot_u3", 1000000, kim1_u3_mos6530_interface )
|
MCFG_MOS6530_IN_PA_CB(READ8(kim1_state, kim1_u2_read_a))
|
||||||
|
MCFG_MOS6530_OUT_PA_CB(WRITE8(kim1_state, kim1_u2_write_a))
|
||||||
|
MCFG_MOS6530_IN_PB_CB(READ8(kim1_state, kim1_u2_read_b))
|
||||||
|
MCFG_MOS6530_OUT_PB_CB(WRITE8(kim1_state, kim1_u2_write_b))
|
||||||
|
|
||||||
|
MCFG_DEVICE_ADD("miot_u3", MOS6530, 1000000)
|
||||||
|
|
||||||
MCFG_CASSETTE_ADD( "cassette", kim1_cassette_interface )
|
MCFG_CASSETTE_ADD( "cassette", kim1_cassette_interface )
|
||||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("led_timer", kim1_state, kim1_update_leds, attotime::from_hz(60))
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("led_timer", kim1_state, kim1_update_leds, attotime::from_hz(60))
|
||||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("cassette_timer", kim1_state, kim1_cassette_input, attotime::from_hz(44100))
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("cassette_timer", kim1_state, kim1_cassette_input, attotime::from_hz(44100))
|
||||||
|
@ -181,14 +181,6 @@ WRITE8_MEMBER( mk2_state::mk2_write_b )
|
|||||||
m_maincpu->set_input_line(M6502_IRQ_LINE, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE );
|
m_maincpu->set_input_line(M6502_IRQ_LINE, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE );
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6530_INTERFACE( mk2_mos6530_interface )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_MEMBER(mk2_state, mk2_read_a),
|
|
||||||
DEVCB_DRIVER_MEMBER(mk2_state, mk2_write_a),
|
|
||||||
DEVCB_DRIVER_MEMBER(mk2_state, mk2_read_b),
|
|
||||||
DEVCB_DRIVER_MEMBER(mk2_state, mk2_write_b)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( mk2, mk2_state )
|
static MACHINE_CONFIG_START( mk2, mk2_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -196,11 +188,14 @@ static MACHINE_CONFIG_START( mk2, mk2_state )
|
|||||||
MCFG_CPU_PROGRAM_MAP(mk2_mem)
|
MCFG_CPU_PROGRAM_MAP(mk2_mem)
|
||||||
MCFG_QUANTUM_TIME(attotime::from_hz(60))
|
MCFG_QUANTUM_TIME(attotime::from_hz(60))
|
||||||
|
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MCFG_DEFAULT_LAYOUT(layout_mk2)
|
MCFG_DEFAULT_LAYOUT(layout_mk2)
|
||||||
|
|
||||||
MCFG_MOS6530_ADD( "miot", 1000000, mk2_mos6530_interface )
|
MCFG_DEVICE_ADD("miot", MOS6530, 1000000)
|
||||||
|
MCFG_MOS6530_IN_PA_CB(READ8(mk2_state, mk2_read_a))
|
||||||
|
MCFG_MOS6530_OUT_PA_CB(WRITE8(mk2_state, mk2_write_a))
|
||||||
|
MCFG_MOS6530_IN_PB_CB(READ8(mk2_state, mk2_read_b))
|
||||||
|
MCFG_MOS6530_OUT_PB_CB(WRITE8(mk2_state, mk2_write_b))
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
|
Loading…
Reference in New Issue
Block a user