summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit384846d81c4d0f014523063ce662373daef9a988 (patch)
treeb87102f83e155da87e191bf6dd787aa86d15a474
parentfaf947ed17932b8c1e9cacdb36117691b0af23cf (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.c19
-rw-r--r--src/emu/machine/im6402.h3
-rw-r--r--src/mess/drivers/kyocera.c4
-rw-r--r--src/mess/drivers/wangpc.c1
-rw-r--r--src/mess/drivers/wicat.c1
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;