diff options
author | smf- <smf-@users.noreply.github.com> | 2013-12-23 10:34:34 +0000 |
---|---|---|
committer | smf- <smf-@users.noreply.github.com> | 2013-12-23 10:34:34 +0000 |
commit | 384846d81c4d0f014523063ce662373daef9a988 (patch) | |
tree | b87102f83e155da87e191bf6dd787aa86d15a474 | |
parent | faf947ed17932b8c1e9cacdb36117691b0af23cf (diff) |
replaced read rx callback in IM6402 with a write handler, which allows multiple chips to be connected together without using glue methods. [smf]
-rw-r--r-- | src/emu/machine/im6402.c | 19 | ||||
-rw-r--r-- | src/emu/machine/im6402.h | 3 | ||||
-rw-r--r-- | src/mess/drivers/kyocera.c | 4 | ||||
-rw-r--r-- | src/mess/drivers/wangpc.c | 1 | ||||
-rw-r--r-- | src/mess/drivers/wicat.c | 1 |
5 files changed, 17 insertions, 11 deletions
diff --git a/src/emu/machine/im6402.c b/src/emu/machine/im6402.c index 429fc42e7d1..4235413e055 100644 --- a/src/emu/machine/im6402.c +++ b/src/emu/machine/im6402.c @@ -103,7 +103,6 @@ void im6402_device::device_config_complete() // or initialize to defaults if none provided else { - memset(&m_in_rri_cb, 0, sizeof(m_in_rri_cb)); memset(&m_out_tro_cb, 0, sizeof(m_out_tro_cb)); memset(&m_out_dr_cb, 0, sizeof(m_out_dr_cb)); memset(&m_out_tbre_cb, 0, sizeof(m_out_tbre_cb)); @@ -119,7 +118,6 @@ void im6402_device::device_config_complete() void im6402_device::device_start() { // resolve callbacks - m_in_rri_func.resolve(m_in_rri_cb, *this); m_out_tro_func.resolve(m_out_tro_cb, *this); m_out_dr_func.resolve(m_out_dr_cb, *this); m_out_tbre_func.resolve(m_out_tbre_cb, *this); @@ -224,10 +222,7 @@ void im6402_device::tra_complete() void im6402_device::rcv_callback() { - if (m_in_rri_func.isnull()) - receive_register_update_bit(get_in_data_bit()); - else - receive_register_update_bit(m_in_rri_func()); + receive_register_update_bit(get_in_data_bit()); } @@ -443,3 +438,15 @@ WRITE_LINE_MEMBER( im6402_device::epe_w ) m_epe = state; } + +WRITE_LINE_MEMBER(im6402_device::write_rx) +{ + if (state) + { + input_callback(m_input_state | RX); + } + else + { + input_callback(m_input_state & ~RX); + } +} diff --git a/src/emu/machine/im6402.h b/src/emu/machine/im6402.h index f0f64839a27..3435a41fff8 100644 --- a/src/emu/machine/im6402.h +++ b/src/emu/machine/im6402.h @@ -73,7 +73,6 @@ struct im6402_interface int m_rrc; int m_trc; - devcb_read_line m_in_rri_cb; devcb_write_line m_out_tro_cb; devcb_write_line m_out_dr_cb; devcb_write_line m_out_tbre_cb; @@ -101,6 +100,7 @@ public: DECLARE_READ_LINE_MEMBER( fe_r ) { return m_fe; } DECLARE_READ_LINE_MEMBER( oe_r ) { return m_oe; } + DECLARE_WRITE_LINE_MEMBER( write_rx ); DECLARE_WRITE_LINE_MEMBER( rrc_w ); DECLARE_WRITE_LINE_MEMBER( trc_w ); DECLARE_WRITE_LINE_MEMBER( rrd_w ); @@ -133,7 +133,6 @@ private: inline void set_tbre(int state); inline void set_tre(int state); - devcb_resolved_read_line m_in_rri_func; devcb_resolved_write_line m_out_tro_func; devcb_resolved_write_line m_out_dr_func; devcb_resolved_write_line m_out_tbre_func; diff --git a/src/mess/drivers/kyocera.c b/src/mess/drivers/kyocera.c index 14e4b774814..45f54c783e4 100644 --- a/src/mess/drivers/kyocera.c +++ b/src/mess/drivers/kyocera.c @@ -1177,7 +1177,6 @@ static IM6402_INTERFACE( uart_intf ) { 0, 0, - DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, serial_port_device, rx), DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, serial_port_device, tx), DEVCB_NULL, DEVCB_NULL, @@ -1390,7 +1389,10 @@ static MACHINE_CONFIG_START( kc85, kc85_state ) MCFG_I8155_ADD(I8155_TAG, XTAL_4_9152MHz/2, kc85_8155_intf) MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, INPUTLINE(I8085_TAG, I8085_RST75_LINE)) MCFG_IM6402_ADD(IM6402_TAG, uart_intf) + MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL) + MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(IM6402_TAG, im6402_device, write_rx)) + MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, standard_centronics) MCFG_CASSETTE_ADD("cassette", kc85_cassette_interface) diff --git a/src/mess/drivers/wangpc.c b/src/mess/drivers/wangpc.c index ea5db0b43ef..7476a0ecedb 100644 --- a/src/mess/drivers/wangpc.c +++ b/src/mess/drivers/wangpc.c @@ -943,7 +943,6 @@ static IM6402_INTERFACE( uart_intf ) 0, // HACK should be 62500*16 62500*16, DEVCB_NULL, - DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(wangpc_state, uart_dr_w), DEVCB_DRIVER_LINE_MEMBER(wangpc_state, uart_tbre_w), DEVCB_NULL diff --git a/src/mess/drivers/wicat.c b/src/mess/drivers/wicat.c index 4ca010eb7ef..c20b474cd97 100644 --- a/src/mess/drivers/wicat.c +++ b/src/mess/drivers/wicat.c @@ -574,7 +574,6 @@ struct im6402_interface wicat_video_uart_intf = 0, // RRC 0, // TRC - DEVCB_NULL, //m_in_rri_cb; DEVCB_NULL, //m_out_tro_cb; DEVCB_NULL, //m_out_dr_cb; DEVCB_NULL, //m_out_tbre_cb; |