mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
replaced read netin/dtr1/cts2 callbacks in ZX8302 with write handlers, which allows multiple chips to be connected together without using glue methods. [smf]
This commit is contained in:
parent
81383a5c52
commit
02e1e04274
@ -783,10 +783,7 @@ static ZX8302_INTERFACE( ql_zx8302_intf )
|
||||
DEVCB_DRIVER_LINE_MEMBER(ql_state, ql_comdata_w),
|
||||
DEVCB_NULL, // TXD1
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
|
||||
DEVCB_NULL, // DTR1
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, cts_r),
|
||||
DEVCB_NULL, // NETOUT
|
||||
DEVCB_NULL, // NETIN
|
||||
DEVCB_DRIVER_LINE_MEMBER(ql_state, zx8302_mdselck_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(MDV_1, microdrive_image_device, comms_in_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ql_state, zx8302_mdrdw_w),
|
||||
@ -1008,6 +1005,7 @@ static MACHINE_CONFIG_START( ql, ql_state )
|
||||
MCFG_MICRODRIVE_ADD(MDV_2, mdv2_config)
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL) // wired as DCE
|
||||
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL) // wired as DTE
|
||||
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(ZX8302_TAG, zx8302_device, write_cts2))
|
||||
|
||||
// cartridge
|
||||
MCFG_CARTSLOT_ADD("cart")
|
||||
|
@ -67,10 +67,7 @@ void zx8302_device::device_config_complete()
|
||||
memset(&out_comdata_cb, 0, sizeof(out_comdata_cb));
|
||||
memset(&out_txd1_cb, 0, sizeof(out_txd1_cb));
|
||||
memset(&out_txd2_cb, 0, sizeof(out_txd2_cb));
|
||||
memset(&in_dtr1_cb, 0, sizeof(in_dtr1_cb));
|
||||
memset(&in_cts2_cb, 0, sizeof(in_cts2_cb));
|
||||
memset(&out_netout_cb, 0, sizeof(out_netout_cb));
|
||||
memset(&in_netin_cb, 0, sizeof(in_netin_cb));
|
||||
memset(&out_mdselck_cb, 0, sizeof(out_mdselck_cb));
|
||||
memset(&out_mdseld_cb, 0, sizeof(out_mdseld_cb));
|
||||
memset(&out_mdrdw_cb, 0, sizeof(out_mdrdw_cb));
|
||||
@ -175,6 +172,8 @@ inline void zx8302_device::transmit_ipc_data()
|
||||
zx8302_device::zx8302_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, ZX8302, "Sinclair ZX8302", tag, owner, clock, "zx8302", __FILE__),
|
||||
device_serial_interface(mconfig, *this),
|
||||
m_dtr1(0),
|
||||
m_cts2(0),
|
||||
m_idr(1),
|
||||
m_irq(0),
|
||||
m_ctr(time(NULL) + RTC_BASE_ADJUST),
|
||||
@ -202,10 +201,7 @@ void zx8302_device::device_start()
|
||||
m_out_comdata_func.resolve(out_comdata_cb, *this);
|
||||
m_out_txd1_func.resolve(out_txd1_cb, *this);
|
||||
m_out_txd2_func.resolve(out_txd2_cb, *this);
|
||||
m_in_dtr1_func.resolve(in_dtr1_cb, *this);
|
||||
m_in_cts2_func.resolve(in_cts2_cb, *this);
|
||||
m_out_netout_func.resolve(out_netout_cb, *this);
|
||||
m_in_netin_func.resolve(in_netin_cb, *this);
|
||||
m_out_mdselck_func.resolve(out_mdselck_cb, *this);
|
||||
m_out_mdseld_func.resolve(out_mdseld_cb, *this);
|
||||
m_out_mdrdw_func.resolve(out_mdrdw_cb, *this);
|
||||
@ -225,6 +221,8 @@ void zx8302_device::device_start()
|
||||
m_gap_timer->adjust(attotime::zero, 0, attotime::from_msec(31));
|
||||
|
||||
// register for state saving
|
||||
save_item(NAME(m_dtr1));
|
||||
save_item(NAME(m_cts2));
|
||||
save_item(NAME(m_idr));
|
||||
save_item(NAME(m_tcr));
|
||||
save_item(NAME(m_tdr));
|
||||
@ -326,7 +324,7 @@ void zx8302_device::rcv_callback()
|
||||
switch (m_tcr & MODE_MASK)
|
||||
{
|
||||
case MODE_NET:
|
||||
receive_register_update_bit(m_in_netin_func());
|
||||
receive_register_update_bit(get_in_data_bit());
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -457,10 +455,10 @@ READ8_MEMBER( zx8302_device::status_r )
|
||||
// TODO microdrive GAP
|
||||
|
||||
// data terminal ready
|
||||
data |= m_in_dtr1_func() << 4;
|
||||
data |= m_dtr1 << 4;
|
||||
|
||||
// clear to send
|
||||
data |= m_in_cts2_func() << 5;
|
||||
data |= m_cts2 << 5;
|
||||
|
||||
// IPC busy
|
||||
data |= m_ipc_busy << 6;
|
||||
@ -634,3 +632,25 @@ WRITE_LINE_MEMBER( zx8302_device::extint_w )
|
||||
trigger_interrupt(INT_EXTERNAL);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( zx8302_device::write_netin )
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
input_callback(m_input_state | RX);
|
||||
}
|
||||
else
|
||||
{
|
||||
input_callback(m_input_state & ~RX);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( zx8302_device::write_dtr1 )
|
||||
{
|
||||
m_dtr1 = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( zx8302_device::write_cts2 )
|
||||
{
|
||||
m_cts2 = state;
|
||||
}
|
||||
|
@ -77,10 +77,7 @@ struct zx8302_interface
|
||||
devcb_write_line out_comdata_cb;
|
||||
devcb_write_line out_txd1_cb;
|
||||
devcb_write_line out_txd2_cb;
|
||||
devcb_read_line in_dtr1_cb;
|
||||
devcb_read_line in_cts2_cb;
|
||||
devcb_write_line out_netout_cb;
|
||||
devcb_read_line in_netin_cb;
|
||||
|
||||
// microdrive
|
||||
devcb_write_line out_mdselck_cb;
|
||||
@ -118,6 +115,10 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( comdata_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( extint_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( write_netin );
|
||||
DECLARE_WRITE_LINE_MEMBER( write_dtr1 );
|
||||
DECLARE_WRITE_LINE_MEMBER( write_cts2 );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
@ -194,10 +195,7 @@ private:
|
||||
devcb_resolved_write_line m_out_comdata_func;
|
||||
devcb_resolved_write_line m_out_txd1_func;
|
||||
devcb_resolved_write_line m_out_txd2_func;
|
||||
devcb_resolved_read_line m_in_dtr1_func;
|
||||
devcb_resolved_read_line m_in_cts2_func;
|
||||
devcb_resolved_write_line m_out_netout_func;
|
||||
devcb_resolved_read_line m_in_netin_func;
|
||||
|
||||
devcb_resolved_write_line m_out_mdselck_func;
|
||||
devcb_resolved_write_line m_out_mdseld_func;
|
||||
@ -208,6 +206,9 @@ private:
|
||||
devcb_resolved_write_line m_out_raw2_func;
|
||||
devcb_resolved_read_line m_in_raw2_func;
|
||||
|
||||
int m_dtr1;
|
||||
int m_cts2;
|
||||
|
||||
// registers
|
||||
UINT8 m_idr; // IPC data register
|
||||
UINT8 m_tcr; // transfer control register
|
||||
|
Loading…
Reference in New Issue
Block a user