diff --git a/src/mess/drivers/ql.c b/src/mess/drivers/ql.c index 59a88851140..75e86c8eddc 100644 --- a/src/mess/drivers/ql.c +++ b/src/mess/drivers/ql.c @@ -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") diff --git a/src/mess/machine/zx8302.c b/src/mess/machine/zx8302.c index 6b518c25ffc..dbca89dfc23 100644 --- a/src/mess/machine/zx8302.c +++ b/src/mess/machine/zx8302.c @@ -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; +} diff --git a/src/mess/machine/zx8302.h b/src/mess/machine/zx8302.h index 18b380a3cb8..415bd74f2f3 100644 --- a/src/mess/machine/zx8302.h +++ b/src/mess/machine/zx8302.h @@ -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