summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author smf- <smf-@users.noreply.github.com>2013-12-22 22:05:13 +0000
committer smf- <smf-@users.noreply.github.com>2013-12-22 22:05:13 +0000
commit25b08cec6bd4f5ed88ed6eeef7e188fb0b17b9a3 (patch)
treed6b9d79cb951b2e626d475c839cff43e23c808dc
parentf3a8aceab46339c55609fa80cef99c3ad4aa153f (diff)
replaced read rx callback in Z80DART (and clones) with a write handler, which allows multiple chips to be connected together without using glue methods. [smf]
-rw-r--r--src/emu/bus/abcbus/sio.c6
-rw-r--r--src/emu/bus/wangpc/mcc.c12
-rw-r--r--src/emu/bus/wangpc/rtc.c8
-rw-r--r--src/emu/machine/z80dart.c29
-rw-r--r--src/emu/machine/z80dart.h7
-rw-r--r--src/mess/drivers/abc1600.c18
-rw-r--r--src/mess/drivers/abc80x.c75
-rw-r--r--src/mess/drivers/altos5.c5
-rw-r--r--src/mess/drivers/ampro.c4
-rw-r--r--src/mess/drivers/apricot.c3
-rw-r--r--src/mess/drivers/apricotf.c8
-rw-r--r--src/mess/drivers/apricotp.c8
-rw-r--r--src/mess/drivers/attache.c6
-rw-r--r--src/mess/drivers/bigbord2.c8
-rw-r--r--src/mess/drivers/bullet.c16
-rw-r--r--src/mess/drivers/bw12.c10
-rw-r--r--src/mess/drivers/compis.c10
-rw-r--r--src/mess/drivers/huebler.c13
-rw-r--r--src/mess/drivers/isbc.c16
-rw-r--r--src/mess/drivers/mikromik.c5
-rw-r--r--src/mess/drivers/mtx.c8
-rw-r--r--src/mess/drivers/mz2500.c6
-rw-r--r--src/mess/drivers/nanos.c16
-rw-r--r--src/mess/drivers/osbexec.c8
-rw-r--r--src/mess/drivers/pcm.c6
-rw-r--r--src/mess/drivers/qx10.c13
-rw-r--r--src/mess/drivers/rt1715.c6
-rw-r--r--src/mess/drivers/super6.c12
-rw-r--r--src/mess/drivers/superslave.c20
-rw-r--r--src/mess/drivers/tdv2324.c6
-rw-r--r--src/mess/drivers/tiki100.c12
-rw-r--r--src/mess/drivers/trs80m2.c8
-rw-r--r--src/mess/drivers/victor9k.c4
-rw-r--r--src/mess/drivers/x1.c8
-rw-r--r--src/mess/drivers/x1twin.c8
-rw-r--r--src/mess/drivers/xerox820.c13
-rw-r--r--src/mess/includes/abc1600.h1
-rw-r--r--src/mess/includes/abc80x.h6
-rw-r--r--src/mess/includes/huebler.h3
-rw-r--r--src/mess/machine/abc77.c12
-rw-r--r--src/mess/machine/abc77.h1
-rw-r--r--src/mess/machine/abc800kb.c12
-rw-r--r--src/mess/machine/abc800kb.h1
-rw-r--r--src/mess/machine/abc99.c31
-rw-r--r--src/mess/machine/abc99.h3
-rw-r--r--src/mess/machine/abckb.c25
-rw-r--r--src/mess/machine/abckb.h35
-rw-r--r--src/mess/machine/mc80.c6
-rw-r--r--src/mess/machine/tf20.c2
49 files changed, 337 insertions, 222 deletions
diff --git a/src/emu/bus/abcbus/sio.c b/src/emu/bus/abcbus/sio.c
index 2ea28e36237..eabd3663010 100644
--- a/src/emu/bus/abcbus/sio.c
+++ b/src/emu/bus/abcbus/sio.c
@@ -97,15 +97,17 @@ static Z80DART_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/emu/bus/wangpc/mcc.c b/src/emu/bus/wangpc/mcc.c
index c496277af49..ece33c4984f 100644
--- a/src/emu/bus/wangpc/mcc.c
+++ b/src/emu/bus/wangpc/mcc.c
@@ -66,15 +66,17 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
DEVCB_NULL
};
@@ -92,15 +94,17 @@ static Z80DART_INTERFACE( dart_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/emu/bus/wangpc/rtc.c b/src/emu/bus/wangpc/rtc.c
index bb8396589da..7d783334266 100644
--- a/src/emu/bus/wangpc/rtc.c
+++ b/src/emu/bus/wangpc/rtc.c
@@ -166,16 +166,18 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
diff --git a/src/emu/machine/z80dart.c b/src/emu/machine/z80dart.c
index beabd129dff..f770e6b7c30 100644
--- a/src/emu/machine/z80dart.c
+++ b/src/emu/machine/z80dart.c
@@ -166,13 +166,11 @@ void z80dart_device::device_config_complete()
{
m_rxca = m_txca = m_rxcb = m_txcb = 0;
- memset(&m_in_rxda_cb, 0, sizeof(m_in_rxda_cb));
memset(&m_out_txda_cb, 0, sizeof(m_out_txda_cb));
memset(&m_out_dtra_cb, 0, sizeof(m_out_dtra_cb));
memset(&m_out_rtsa_cb, 0, sizeof(m_out_rtsa_cb));
memset(&m_out_wrdya_cb, 0, sizeof(m_out_wrdya_cb));
memset(&m_out_synca_cb, 0, sizeof(m_out_synca_cb));
- memset(&m_in_rxdb_cb, 0, sizeof(m_in_rxdb_cb));
memset(&m_out_txdb_cb, 0, sizeof(m_out_txdb_cb));
memset(&m_out_dtrb_cb, 0, sizeof(m_out_dtrb_cb));
memset(&m_out_rtsb_cb, 0, sizeof(m_out_rtsb_cb));
@@ -200,7 +198,6 @@ void z80dart_device::device_start()
m_chanA->m_rxc = m_rxca;
m_chanA->m_txc = m_txca;
- m_chanA->m_in_rxd_cb = m_in_rxda_cb;
m_chanA->m_out_txd_cb = m_out_txda_cb;
m_chanA->m_out_dtr_cb = m_out_dtra_cb;
m_chanA->m_out_rts_cb = m_out_rtsa_cb;
@@ -213,8 +210,6 @@ void z80dart_device::device_start()
m_chanB->m_rxc = m_rxcb;
m_chanB->m_txc = m_txcb;
- m_chanB->m_in_rxd_cb = m_in_rxdb_cb;
- m_chanB->m_in_rxd_cb = m_in_rxdb_cb;
m_chanB->m_out_txd_cb = m_out_txdb_cb;
m_chanB->m_out_dtr_cb = m_out_dtrb_cb;
m_chanB->m_out_rts_cb = m_out_rtsb_cb;
@@ -509,7 +504,6 @@ void z80dart_channel::device_start()
m_index = m_uart->get_channel_index(this);
// resolve callbacks
- m_in_rxd_func.resolve(m_in_rxd_cb, *m_uart);
m_out_txd_func.resolve(m_out_txd_cb, *m_uart);
m_out_dtr_func.resolve(m_out_dtr_cb, *m_uart);
m_out_rts_func.resolve(m_out_rts_cb, *m_uart);
@@ -654,10 +648,7 @@ void z80dart_channel::rcv_callback()
{
if (m_wr[3] & WR3_RX_ENABLE)
{
- if (m_in_rxd_func.isnull())
- receive_register_update_bit(get_in_data_bit());
- else
- receive_register_update_bit(m_in_rxd_func());
+ receive_register_update_bit(get_in_data_bit());
}
}
@@ -1331,3 +1322,21 @@ void z80dart_channel::set_rts(int state)
serial_connection_out();
}
+
+
+//-------------------------------------------------
+// write_rx -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(z80dart_channel::write_rx)
+{
+ if (state)
+ {
+ input_callback(m_input_state | RX);
+ }
+ else
+ {
+ input_callback(m_input_state & ~RX);
+ }
+}
+
diff --git a/src/emu/machine/z80dart.h b/src/emu/machine/z80dart.h
index cbf1341b172..d0549917ac8 100644
--- a/src/emu/machine/z80dart.h
+++ b/src/emu/machine/z80dart.h
@@ -218,14 +218,12 @@ struct z80dart_interface
int m_rxcb;
int m_txcb;
- devcb_read_line m_in_rxda_cb;
devcb_write_line m_out_txda_cb;
devcb_write_line m_out_dtra_cb;
devcb_write_line m_out_rtsa_cb;
devcb_write_line m_out_wrdya_cb;
devcb_write_line m_out_synca_cb;
- devcb_read_line m_in_rxdb_cb;
devcb_write_line m_out_txdb_cb;
devcb_write_line m_out_dtrb_cb;
devcb_write_line m_out_rtsb_cb;
@@ -272,6 +270,7 @@ public:
void receive_data(UINT8 data);
+ DECLARE_WRITE_LINE_MEMBER( write_rx );
DECLARE_WRITE_LINE_MEMBER( cts_w );
DECLARE_WRITE_LINE_MEMBER( dcd_w );
DECLARE_WRITE_LINE_MEMBER( ri_w );
@@ -279,7 +278,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( txc_w );
DECLARE_WRITE_LINE_MEMBER( sync_w );
- devcb_read_line m_in_rxd_cb;
devcb_write_line m_out_txd_cb;
devcb_write_line m_out_dtr_cb;
devcb_write_line m_out_rts_cb;
@@ -437,7 +435,6 @@ protected:
int get_rx_word_length();
int get_tx_word_length();
- devcb_resolved_read_line m_in_rxd_func;
devcb_resolved_write_line m_out_txd_func;
devcb_resolved_write_line m_out_dtr_func;
devcb_resolved_write_line m_out_rts_func;
@@ -497,6 +494,8 @@ public:
// interrupt acknowledge
int m1_r();
+ DECLARE_WRITE_LINE_MEMBER( rxa_w ) { m_chanA->write_rx(state); }
+ DECLARE_WRITE_LINE_MEMBER( rxb_w ) { m_chanB->write_rx(state); }
DECLARE_WRITE_LINE_MEMBER( ctsa_w ) { m_chanA->cts_w(state); }
DECLARE_WRITE_LINE_MEMBER( ctsb_w ) { m_chanB->cts_w(state); }
DECLARE_WRITE_LINE_MEMBER( dcda_w ) { m_chanA->dcd_w(state); }
diff --git a/src/mess/drivers/abc1600.c b/src/mess/drivers/abc1600.c
index 10bce6de13c..b183e12d933 100644
--- a/src/mess/drivers/abc1600.c
+++ b/src/mess/drivers/abc1600.c
@@ -616,21 +616,23 @@ static Z80DART_INTERFACE( dart_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, rxd_r),
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, txd_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(MC68008P8_TAG, M68K_IRQ_5) // shared with SCC
+ DEVCB_CPU_INPUT_LINE(MC68008P8_TAG, M68K_IRQ_5), // shared with SCC
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -952,9 +954,17 @@ static MACHINE_CONFIG_START( abc1600, abc1600_state )
MCFG_FLOPPY_DRIVE_ADD(SAB1797_02P_TAG":0", abc1600_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(SAB1797_02P_TAG":1", abc1600_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(SAB1797_02P_TAG":2", abc1600_floppies, "525qd", floppy_image_device::default_floppy_formats)
+
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
- MCFG_ABC_KEYBOARD_PORT_ADD("abc99", DEVWRITELINE(Z8470AB1_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z8470AB1_TAG, z80dart_device, dcdb_w))
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z8470AB1_TAG, z80dart_device, rxa_w))
+
+ MCFG_ABC_KEYBOARD_PORT_ADD(ABC_KEYBOARD_PORT_TAG, "abc99")
+ MCFG_ABC_KEYBOARD_OUT_RX_HANDLER(DEVWRITELINE(Z8470AB1_TAG, z80dart_device, rxb_w))
+ MCFG_ABC_KEYBOARD_OUT_TRXC_HANDLER(DEVWRITELINE(Z8470AB1_TAG, z80dart_device, rxtxcb_w))
+ MCFG_ABC_KEYBOARD_OUT_KEYDOWN_HANDLER(DEVWRITELINE(Z8470AB1_TAG, z80dart_device, dcdb_w))
+
MCFG_ABCBUS_SLOT_ADD("bus0i", abc1600bus_cards, NULL)
MCFG_ABCBUS_SLOT_IRQ_CALLBACK(DEVWRITELINE(Z8536B1_TAG, z8536_device, pa7_w))
MCFG_ABCBUS_SLOT_ADD("bus0x", abc1600bus_cards, NULL)
diff --git a/src/mess/drivers/abc80x.c b/src/mess/drivers/abc80x.c
index 19fbe1b342b..a215b3f5d89 100644
--- a/src/mess/drivers/abc80x.c
+++ b/src/mess/drivers/abc80x.c
@@ -700,11 +700,6 @@ void abc800_state::clock_cassette(int state)
m_ctc_z0 = state;
}
-READ_LINE_MEMBER( abc800_state::sio_rxdb_r )
-{
- return m_sio_rxdb;
-}
-
WRITE_LINE_MEMBER( abc800_state::sio_txdb_w )
{
m_sio_txdb = state;
@@ -742,21 +737,23 @@ static Z80SIO_INTERFACE( sio_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(abc800_state, sio_rxdb_r),
DEVCB_DRIVER_LINE_MEMBER(abc800_state, sio_txdb_w),
DEVCB_DRIVER_LINE_MEMBER(abc800_state, sio_dtrb_w),
DEVCB_DRIVER_LINE_MEMBER(abc800_state, sio_rtsb_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -768,21 +765,23 @@ static Z80DART_INTERFACE( abc800_dart_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, rxd_r),
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, txd_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -806,21 +805,23 @@ static Z80DART_INTERFACE( abc802_dart_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, rxd_r),
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, txd_w),
DEVCB_DRIVER_LINE_MEMBER(abc802_state, lrs_w),
DEVCB_DRIVER_LINE_MEMBER(abc802_state, mux80_40_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -839,21 +840,22 @@ static Z80DART_INTERFACE( abc806_dart_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, rxd_r),
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, txd_w),
DEVCB_DRIVER_LINE_MEMBER(abc806_state, keydtr_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -913,7 +915,7 @@ void abc800_state::device_timer(emu_timer &timer, device_timer_id id, int param,
if (m_dfd_in && !dfd_in)
{
- m_sio_rxdb = !(m_tape_ctr == 15);
+ m_sio->rxb_w(!(m_tape_ctr == 15));
}
if (!dfd_in && (m_tape_ctr == 15))
@@ -947,9 +949,6 @@ void abc800_state::machine_start()
save_item(NAME(m_pling));
save_item(NAME(m_sb));
save_item(NAME(m_ctc_z0));
- save_item(NAME(m_sio_rxdb));
- save_item(NAME(m_sio_rxcb));
- save_item(NAME(m_sio_txcb));
save_item(NAME(m_sio_txdb));
save_item(NAME(m_sio_rtsb));
save_item(NAME(m_dfd_out));
@@ -996,9 +995,6 @@ void abc802_state::machine_start()
save_item(NAME(m_pling));
save_item(NAME(m_sb));
save_item(NAME(m_ctc_z0));
- save_item(NAME(m_sio_rxdb));
- save_item(NAME(m_sio_rxcb));
- save_item(NAME(m_sio_txcb));
save_item(NAME(m_sio_txdb));
save_item(NAME(m_sio_rtsb));
save_item(NAME(m_dfd_out));
@@ -1068,9 +1064,6 @@ void abc806_state::machine_start()
save_item(NAME(m_fetch_charram));
save_item(NAME(m_map));
save_item(NAME(m_ctc_z0));
- save_item(NAME(m_sio_rxdb));
- save_item(NAME(m_sio_rxcb));
- save_item(NAME(m_sio_txcb));
save_item(NAME(m_sio_txdb));
save_item(NAME(m_sio_rtsb));
save_item(NAME(m_dfd_out));
@@ -1149,14 +1142,19 @@ static MACHINE_CONFIG_START( abc800c, abc800c_state )
MCFG_CASSETTE_ADD("cassette", cass_intf)
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, ctsa_w))
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, ctsa_w))
- MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
+ MCFG_ABC_KEYBOARD_PORT_ADD(ABC_KEYBOARD_PORT_TAG, "abc800")
+ MCFG_ABC_KEYBOARD_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxb_w))
+ MCFG_ABC_KEYBOARD_OUT_TRXC_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w))
+ MCFG_ABC_KEYBOARD_OUT_KEYDOWN_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc830")
@@ -1199,14 +1197,19 @@ static MACHINE_CONFIG_START( abc800m, abc800m_state )
MCFG_CASSETTE_ADD("cassette", cass_intf)
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, ctsa_w))
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, ctsa_w))
- MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
+ MCFG_ABC_KEYBOARD_PORT_ADD(ABC_KEYBOARD_PORT_TAG, "abc800")
+ MCFG_ABC_KEYBOARD_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxb_w))
+ MCFG_ABC_KEYBOARD_OUT_TRXC_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w))
+ MCFG_ABC_KEYBOARD_OUT_KEYDOWN_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc830")
@@ -1249,14 +1252,19 @@ static MACHINE_CONFIG_START( abc802, abc802_state )
MCFG_CASSETTE_ADD("cassette", cass_intf)
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, ctsa_w))
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, ctsa_w))
- MCFG_ABC_KEYBOARD_PORT_ADD("abc55", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
+ MCFG_ABC_KEYBOARD_PORT_ADD(ABC_KEYBOARD_PORT_TAG, "abc55")
+ MCFG_ABC_KEYBOARD_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxb_w))
+ MCFG_ABC_KEYBOARD_OUT_TRXC_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w))
+ MCFG_ABC_KEYBOARD_OUT_KEYDOWN_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc834")
@@ -1292,14 +1300,19 @@ static MACHINE_CONFIG_START( abc806, abc806_state )
MCFG_Z80DART_ADD(Z80DART_TAG, ABC800_X01/2/2, abc806_dart_intf)
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, ctsa_w))
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, ctsa_w))
- MCFG_ABC_KEYBOARD_PORT_ADD("abc77", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
+ MCFG_ABC_KEYBOARD_PORT_ADD(ABC_KEYBOARD_PORT_TAG, "abc77")
+ MCFG_ABC_KEYBOARD_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxb_w))
+ MCFG_ABC_KEYBOARD_OUT_TRXC_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w))
+ MCFG_ABC_KEYBOARD_OUT_KEYDOWN_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
// ABC bus
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "abc832")
diff --git a/src/mess/drivers/altos5.c b/src/mess/drivers/altos5.c
index 593b20c05b2..9319ad4f229 100644
--- a/src/mess/drivers/altos5.c
+++ b/src/mess/drivers/altos5.c
@@ -382,7 +382,6 @@ static Z80DART_INTERFACE( dart_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
// printer
DEVCB_NULL,
@@ -390,7 +389,6 @@ static Z80DART_INTERFACE( dart_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0),
DEVCB_NULL,
@@ -405,7 +403,6 @@ static Z80SIO_INTERFACE( sio_intf )
0, 0, 0, 0,
// console#2
- DEVCB_NULL, // ChA in data
DEVCB_NULL, // out data
DEVCB_NULL, // DTR
DEVCB_NULL, // RTS
@@ -413,7 +410,6 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL, // SYNC
// console#1
- DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
@@ -501,6 +497,7 @@ static MACHINE_CONFIG_START( altos5, altos5_state )
MCFG_Z80SIO0_ADD("z80sio", XTAL_8MHz / 2, sio_intf )
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("z80sio", z80dart_device, rxb_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE("z80sio", z80dart_device, dcdb_w))
MCFG_RS232_OUT_RI_HANDLER(DEVWRITELINE("z80sio", z80dart_device, rib_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("z80sio", z80dart_device, ctsb_w))
diff --git a/src/mess/drivers/ampro.c b/src/mess/drivers/ampro.c
index 6e31c0e9468..a5f092eda72 100644
--- a/src/mess/drivers/ampro.c
+++ b/src/mess/drivers/ampro.c
@@ -122,14 +122,12 @@ static Z80DART_INTERFACE( dart_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL, // ChB in data
DEVCB_NULL, // out data
DEVCB_NULL, // DTR
DEVCB_NULL, // RTS
@@ -201,6 +199,8 @@ static MACHINE_CONFIG_START( ampro, ampro_state )
MCFG_Z80CTC_ADD( "z80ctc", XTAL_16MHz / 4, ctc_intf )
MCFG_Z80DART_ADD("z80dart", XTAL_16MHz / 4, dart_intf )
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("z80dart", z80dart_device, rxa_w))
+
MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc_tick", ampro_state, ctc_tick, attotime::from_hz(XTAL_16MHz / 8))
MCFG_WD1772x_ADD("fdc", XTAL_16MHz / 2)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", ampro_floppies, "525dd", floppy_image_device::default_floppy_formats)
diff --git a/src/mess/drivers/apricot.c b/src/mess/drivers/apricot.c
index 0e8f975f9d3..e1889b4857f 100644
--- a/src/mess/drivers/apricot.c
+++ b/src/mess/drivers/apricot.c
@@ -190,7 +190,6 @@ static Z80SIO_INTERFACE( apricot_z80sio_intf )
XTAL_4MHz / 16, XTAL_4MHz / 16,
// channel a
- DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
@@ -199,7 +198,6 @@ static Z80SIO_INTERFACE( apricot_z80sio_intf )
// channel b
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(apricot_state, data_selector_dtr_w),
DEVCB_DRIVER_LINE_MEMBER(apricot_state, data_selector_rts_w),
DEVCB_NULL,
@@ -408,6 +406,7 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, NULL)
// note: missing a receive clock callback to support external clock mode
// (m_data_selector_rts == 1 and m_data_selector_dtr == 0)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("ic15", z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE("ic15", z80dart_device, dcda_w))
MCFG_RS232_OUT_DSR_HANDLER(DEVWRITELINE("ic15", z80dart_device, synca_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("ic15", z80dart_device, ctsa_w))
diff --git a/src/mess/drivers/apricotf.c b/src/mess/drivers/apricotf.c
index 2ee3811b940..d98d3f0442d 100644
--- a/src/mess/drivers/apricotf.c
+++ b/src/mess/drivers/apricotf.c
@@ -245,16 +245,18 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(f1_state, sio_int_w)
+ DEVCB_DRIVER_LINE_MEMBER(f1_state, sio_int_w),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
diff --git a/src/mess/drivers/apricotp.c b/src/mess/drivers/apricotp.c
index e5bc2e07229..adaab62ab87 100644
--- a/src/mess/drivers/apricotp.c
+++ b/src/mess/drivers/apricotp.c
@@ -488,16 +488,18 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir4_w)
+ DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir4_w),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
diff --git a/src/mess/drivers/attache.c b/src/mess/drivers/attache.c
index 93c6ee96534..b68a4a78984 100644
--- a/src/mess/drivers/attache.c
+++ b/src/mess/drivers/attache.c
@@ -900,15 +900,17 @@ static Z80SIO_INTERFACE( sio_interface )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/drivers/bigbord2.c b/src/mess/drivers/bigbord2.c
index bb0304b79d7..025b3156f7e 100644
--- a/src/mess/drivers/bigbord2.c
+++ b/src/mess/drivers/bigbord2.c
@@ -431,16 +431,18 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(bigbord2_state, bigbord2_interrupt)
+ DEVCB_DRIVER_LINE_MEMBER(bigbord2_state, bigbord2_interrupt),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
diff --git a/src/mess/drivers/bullet.c b/src/mess/drivers/bullet.c
index 00f98596b1c..34de3211aa3 100644
--- a/src/mess/drivers/bullet.c
+++ b/src/mess/drivers/bullet.c
@@ -760,21 +760,23 @@ static Z80DART_INTERFACE( dart_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_DRIVER_LINE_MEMBER(bullet_state, dartardy_w),
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_DRIVER_LINE_MEMBER(bullet_state, dartbrdy_w),
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -1220,9 +1222,13 @@ static MACHINE_CONFIG_START( bullet, bullet_state )
MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":6", bullet_8_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":7", bullet_8_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, standard_centronics)
+
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, "serial_terminal")
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxa_w))
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("serial_terminal", terminal)
+
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxb_w))
// software lists
MCFG_SOFTWARE_LIST_ADD("flop_list", "wmbullet")
@@ -1262,9 +1268,13 @@ static MACHINE_CONFIG_START( bulletf, bulletf_state )
MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":8", bullet_35_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":9", bullet_35_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, standard_centronics)
+
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, "serial_terminal")
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxa_w))
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("serial_terminal", terminal)
+
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxb_w))
MCFG_SCSIBUS_ADD(SCSIBUS_TAG)
MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk0", SCSIHD, SCSI_ID_0)
diff --git a/src/mess/drivers/bw12.c b/src/mess/drivers/bw12.c
index 9bfcb753cdf..64ddd9000e3 100644
--- a/src/mess/drivers/bw12.c
+++ b/src/mess/drivers/bw12.c
@@ -450,21 +450,23 @@ static Z80SIO_INTERFACE( sio_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
/* PIT8253 Interface */
@@ -654,10 +656,12 @@ static MACHINE_CONFIG_START( common, bw12_state )
MCFG_AY3600_ADD(AY3600PRO002_TAG, 0, bw12_ay3600_intf)
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, ctsa_w))
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxb_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, dcdb_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, ctsb_w))
diff --git a/src/mess/drivers/compis.c b/src/mess/drivers/compis.c
index 869848bdb9c..50fe301eac6 100644
--- a/src/mess/drivers/compis.c
+++ b/src/mess/drivers/compis.c
@@ -641,21 +641,23 @@ static I8274_INTERFACE( mpsc_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(I80186_TAG, i80186_cpu_device, int3_w)
+ DEVCB_DEVICE_LINE_MEMBER(I80186_TAG, i80186_cpu_device, int3_w),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -762,10 +764,12 @@ static MACHINE_CONFIG_START( compis, compis_state )
MCFG_CASSETTE_ADD(CASSETTE_TAG, compis_cassette_interface)
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(I8274_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(I8274_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(I8274_TAG, z80dart_device, ctsa_w))
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(I8274_TAG, z80dart_device, rxb_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(I8274_TAG, z80dart_device, dcdb_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(I8274_TAG, z80dart_device, ctsb_w))
diff --git a/src/mess/drivers/huebler.c b/src/mess/drivers/huebler.c
index c6b1b0c7bd8..61e82fa4dde 100644
--- a/src/mess/drivers/huebler.c
+++ b/src/mess/drivers/huebler.c
@@ -284,9 +284,9 @@ static Z80PIO_INTERFACE( pio2_intf )
/* Z80-SIO Interface */
-READ_LINE_MEMBER(amu880_state::cassette_r)
+TIMER_DEVICE_CALLBACK_MEMBER( amu880_state::tape_tick )
{
- return m_cassette->input() < 0.0;
+ m_z80sio->rxa_w(m_cassette->input() < 0.0);
}
WRITE_LINE_MEMBER(amu880_state::cassette_w)
@@ -298,7 +298,6 @@ static Z80SIO_INTERFACE( sio_intf )
{
0, 0, 0, 0,
- DEVCB_DRIVER_LINE_MEMBER(amu880_state, cassette_r),
DEVCB_DRIVER_LINE_MEMBER(amu880_state, cassette_w),
DEVCB_NULL,
DEVCB_NULL,
@@ -310,9 +309,12 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
/* Z80 Daisy Chain */
@@ -409,6 +411,7 @@ static MACHINE_CONFIG_START( amu880, amu880_state )
MCFG_Z80SIO0_ADD(Z80SIO_TAG, XTAL_10MHz/4, sio_intf) // U856
MCFG_CASSETTE_ADD("cassette", amu880_cassette_interface)
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("tape", amu880_state, tape_tick, attotime::from_hz(44100))
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mess/drivers/isbc.c b/src/mess/drivers/isbc.c
index d479c7e3b2e..127b1a454a4 100644
--- a/src/mess/drivers/isbc.c
+++ b/src/mess/drivers/isbc.c
@@ -137,6 +137,11 @@ static const serial_terminal_interface terminal_intf =
DEVCB_DEVICE_LINE_MEMBER("uart8251", i8251_device, write_rx)
};
+static const serial_terminal_interface isbc_terminal_intf =
+{
+ DEVCB_DEVICE_LINE_MEMBER("uart8274", z80dart_device, rxb_w)
+};
+
static const struct pit8253_interface isbc86_pit_config =
{
{
@@ -228,21 +233,23 @@ static I8274_INTERFACE(isbc_uart8274_interface)
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("terminal", serial_terminal_device, tx_r),
DEVCB_DEVICE_LINE_MEMBER("terminal", serial_terminal_device, rx_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pic_0", pic8259_device, ir6_w)
+ DEVCB_DEVICE_LINE_MEMBER("pic_0", pic8259_device, ir6_w),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
static const i8251_interface isbc_uart8251_interface =
@@ -316,6 +323,7 @@ static MACHINE_CONFIG_START( isbc286, isbc_state )
MCFG_I8274_ADD("uart8274", XTAL_16MHz/4, isbc_uart8274_interface)
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("uart8274", z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE("uart8274", z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("uart8274", z80dart_device, ctsa_w))
@@ -330,7 +338,7 @@ static MACHINE_CONFIG_START( isbc286, isbc_state )
MCFG_ISBC_215_IRQ(DEVWRITELINE("pic_0", pic8259_device, ir5_w))
/* video hardware */
- MCFG_SERIAL_TERMINAL_ADD("terminal", terminal_intf, 9600)
+ MCFG_SERIAL_TERMINAL_ADD("terminal", isbc_terminal_intf, 9600)
MCFG_DEVICE_INPUT_DEFAULTS(isbc286_terminal)
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/mikromik.c b/src/mess/drivers/mikromik.c
index c6f903c6e9d..7b28920cd92 100644
--- a/src/mess/drivers/mikromik.c
+++ b/src/mess/drivers/mikromik.c
@@ -628,7 +628,6 @@ static UPD7201_INTERFACE( mpsc_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
@@ -640,7 +639,6 @@ static UPD7201_INTERFACE( mpsc_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(mm1_state, drq2_w), // receive DRQ
@@ -756,7 +754,10 @@ static MACHINE_CONFIG_START( mm1, mm1_state )
MCFG_UPD7201_ADD(UPD7201_TAG, XTAL_6_144MHz/2, mpsc_intf)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", mm1_floppies, "525qd", mm1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", mm1_floppies, "525qd", mm1_state::floppy_formats)
+
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, rxa_w))
+
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
MCFG_RS232_PORT_ADD(RS232_C_TAG, default_rs232_devices, NULL)
diff --git a/src/mess/drivers/mtx.c b/src/mess/drivers/mtx.c
index 7d306e7736d..e85cbf0b7ac 100644
--- a/src/mess/drivers/mtx.c
+++ b/src/mess/drivers/mtx.c
@@ -260,16 +260,18 @@ static Z80DART_INTERFACE( dart_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
/*-------------------------------------------------
diff --git a/src/mess/drivers/mz2500.c b/src/mess/drivers/mz2500.c
index 15e5a72bca7..0974cc5f08a 100644
--- a/src/mess/drivers/mz2500.c
+++ b/src/mess/drivers/mz2500.c
@@ -2120,15 +2120,17 @@ static Z80SIO_INTERFACE( mz2500_sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/drivers/nanos.c b/src/mess/drivers/nanos.c
index 500fc2b1b92..461b4701b56 100644
--- a/src/mess/drivers/nanos.c
+++ b/src/mess/drivers/nanos.c
@@ -168,16 +168,18 @@ static Z80SIO_INTERFACE( sio1_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(nanos_state, z80daisy_interrupt)
+ DEVCB_DRIVER_LINE_MEMBER(nanos_state, z80daisy_interrupt),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
static Z80SIO_INTERFACE( sio2_intf )
@@ -189,16 +191,18 @@ static Z80SIO_INTERFACE( sio2_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(nanos_state, z80daisy_interrupt)
+ DEVCB_DRIVER_LINE_MEMBER(nanos_state, z80daisy_interrupt),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
/* Z80 Daisy Chain */
diff --git a/src/mess/drivers/osbexec.c b/src/mess/drivers/osbexec.c
index fa29768d2ac..55272a41e76 100644
--- a/src/mess/drivers/osbexec.c
+++ b/src/mess/drivers/osbexec.c
@@ -464,16 +464,18 @@ static Z80SIO_INTERFACE( osbexec_sio_config )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL //DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_NULL, //DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
diff --git a/src/mess/drivers/pcm.c b/src/mess/drivers/pcm.c
index 7f2b99a83a4..37d266fa636 100644
--- a/src/mess/drivers/pcm.c
+++ b/src/mess/drivers/pcm.c
@@ -278,15 +278,17 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/drivers/qx10.c b/src/mess/drivers/qx10.c
index a56c163d315..8b1b7458acb 100644
--- a/src/mess/drivers/qx10.c
+++ b/src/mess/drivers/qx10.c
@@ -465,26 +465,28 @@ static UPD7201_INTERFACE(qx10_upd7201_interface)
{
0, 0, 0, 0, // channel b clock set by pit2 channel 2
- DEVCB_DEVICE_LINE_MEMBER("kbd", serial_keyboard_device, tx_r),
DEVCB_DEVICE_LINE_MEMBER("kbd", serial_keyboard_device, rx_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(qx10_state, keyboard_irq)
+ DEVCB_DRIVER_LINE_MEMBER(qx10_state, keyboard_irq),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
static struct serial_keyboard_interface qx10_keyboard_interface =
{
- DEVCB_NULL
+ DEVCB_DEVICE_LINE_MEMBER("upd7201", z80dart_device, rxa_w)
};
WRITE_LINE_MEMBER(qx10_state::keyboard_irq)
@@ -874,7 +876,10 @@ static MACHINE_CONFIG_START( qx10, qx10_state )
MCFG_UPD765A_ADD("upd765", true, true)
MCFG_FLOPPY_DRIVE_ADD("upd765:0", qx10_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("upd765:1", qx10_floppies, "525dd", floppy_image_device::default_floppy_formats)
+
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("upd7201", upd7201_device, rxb_w))
+
MCFG_QX10_KEYBOARD_ADD("kbd", qx10_keyboard_interface)
/* internal ram */
diff --git a/src/mess/drivers/rt1715.c b/src/mess/drivers/rt1715.c
index 849e7988d46..5147cec7a61 100644
--- a/src/mess/drivers/rt1715.c
+++ b/src/mess/drivers/rt1715.c
@@ -280,15 +280,17 @@ static Z80SIO_INTERFACE( rt1715_sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/drivers/super6.c b/src/mess/drivers/super6.c
index 92e42ec9ec5..c2ae9498494 100644
--- a/src/mess/drivers/super6.c
+++ b/src/mess/drivers/super6.c
@@ -371,21 +371,23 @@ static Z80DART_INTERFACE( dart_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -561,9 +563,13 @@ static MACHINE_CONFIG_START( super6, super6_state )
MCFG_COM8116_ADD(BR1945_TAG, XTAL_5_0688MHz, NULL, WRITELINE(super6_state, fr_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w))
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", super6_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", super6_floppies, NULL, floppy_image_device::default_floppy_formats)
+
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, "serial_terminal")
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxa_w))
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("serial_terminal", terminal)
+
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxb_w))
// internal ram
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mess/drivers/superslave.c b/src/mess/drivers/superslave.c
index ba5c60cf95a..631ed7c3cd9 100644
--- a/src/mess/drivers/superslave.c
+++ b/src/mess/drivers/superslave.c
@@ -276,21 +276,23 @@ static Z80DART_INTERFACE( dart0_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -302,21 +304,23 @@ static Z80DART_INTERFACE( dart1_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_D_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_D_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_D_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_D_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
@@ -403,19 +407,23 @@ static MACHINE_CONFIG_START( superslave, superslave_state )
MCFG_COM8116_ADD(BR1941_TAG, XTAL_5_0688MHz, NULL, WRITELINE(superslave_state, fr_w), WRITELINE(superslave_state, ft_w))
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, "serial_terminal")
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_0_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80DART_0_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80DART_0_TAG, z80dart_device, ctsa_w))
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("serial_terminal", terminal)
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_0_TAG, z80dart_device, rxb_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80DART_0_TAG, z80dart_device, dcdb_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80DART_0_TAG, z80dart_device, ctsb_w))
MCFG_RS232_PORT_ADD(RS232_C_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_1_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80DART_1_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80DART_1_TAG, z80dart_device, ctsa_w))
MCFG_RS232_PORT_ADD(RS232_D_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_1_TAG, z80dart_device, rxb_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(Z80DART_1_TAG, z80dart_device, dcdb_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(Z80DART_1_TAG, z80dart_device, ctsb_w))
diff --git a/src/mess/drivers/tdv2324.c b/src/mess/drivers/tdv2324.c
index b0fabde5e79..f271fea2918 100644
--- a/src/mess/drivers/tdv2324.c
+++ b/src/mess/drivers/tdv2324.c
@@ -296,15 +296,17 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/drivers/tiki100.c b/src/mess/drivers/tiki100.c
index 9f0243a838f..b1eb943f615 100644
--- a/src/mess/drivers/tiki100.c
+++ b/src/mess/drivers/tiki100.c
@@ -468,21 +468,22 @@ static Z80DART_INTERFACE( dart_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
/* Z80-PIO Interface */
@@ -707,8 +708,13 @@ static MACHINE_CONFIG_START( tiki100, tiki100_state )
MCFG_FD1797x_ADD(FD1797_TAG, XTAL_8MHz/8) // FD1767PL-02 or FD1797-PL
MCFG_FLOPPY_DRIVE_ADD(FD1797_TAG":0", tiki100_floppies, "525qd", tiki100_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(FD1797_TAG":1", tiki100_floppies, "525qd", tiki100_state::floppy_formats)
+
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxa_w))
+
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxb_w))
+
MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, standard_centronics)
MCFG_CASSETTE_ADD(CASSETTE_TAG, cassette_intf)
MCFG_TIMER_DRIVER_ADD_PERIODIC("tape", tiki100_state, tape_tick, attotime::from_hz(44100))
diff --git a/src/mess/drivers/trs80m2.c b/src/mess/drivers/trs80m2.c
index 0e33b03d9c7..d6d52b0fbdb 100644
--- a/src/mess/drivers/trs80m2.c
+++ b/src/mess/drivers/trs80m2.c
@@ -649,16 +649,18 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c
index b5be86d9ccd..5cff6ba028b 100644
--- a/src/mess/drivers/victor9k.c
+++ b/src/mess/drivers/victor9k.c
@@ -380,14 +380,12 @@ static UPD7201_INTERFACE( mpsc_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
@@ -1254,11 +1252,13 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":1", victor9k_floppies, "525qd", floppy_image_device::default_floppy_formats)
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, rxa_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, dcda_w))
MCFG_RS232_OUT_RI_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, ria_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, ctsa_w))
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, rxb_w))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, dcdb_w))
MCFG_RS232_OUT_RI_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, rib_w))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, ctsb_w))
diff --git a/src/mess/drivers/x1.c b/src/mess/drivers/x1.c
index 3a72700699e..993ddab55aa 100644
--- a/src/mess/drivers/x1.c
+++ b/src/mess/drivers/x1.c
@@ -2284,16 +2284,18 @@ static Z80SIO_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE("x1_cpu", INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE("x1_cpu", INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
static const z80_daisy_config x1_daisy[] =
diff --git a/src/mess/drivers/x1twin.c b/src/mess/drivers/x1twin.c
index 1a4306a123e..2c046ce6abd 100644
--- a/src/mess/drivers/x1twin.c
+++ b/src/mess/drivers/x1twin.c
@@ -450,16 +450,18 @@ static Z80DART_INTERFACE( sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE("x1_cpu", INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE("x1_cpu", INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
diff --git a/src/mess/drivers/xerox820.c b/src/mess/drivers/xerox820.c
index 004e7d4d789..554191d4ea3 100644
--- a/src/mess/drivers/xerox820.c
+++ b/src/mess/drivers/xerox820.c
@@ -423,21 +423,23 @@ static Z80SIO_INTERFACE( sio_intf )
{
0, 0, 0, 0,
- DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
/* Z80 CTC */
@@ -702,8 +704,13 @@ static MACHINE_CONFIG_START( xerox820, xerox820_state )
MCFG_FLOPPY_DRIVE_ADD(FD1771_TAG":0", xerox820_floppies, "sa400", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(FD1771_TAG":1", xerox820_floppies, "sa400", floppy_image_device::default_floppy_formats)
MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, NULL, WRITELINE(xerox820_state, fr_w), DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxtxcb_w))
+
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80sio0_device, rxa_w))
+
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
+ MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80sio0_device, rxb_w))
+
MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf)
/* internal ram */
diff --git a/src/mess/includes/abc1600.h b/src/mess/includes/abc1600.h
index 829e0e1600f..064a599a402 100644
--- a/src/mess/includes/abc1600.h
+++ b/src/mess/includes/abc1600.h
@@ -45,6 +45,7 @@
#define BUS2_TAG "bus2"
#define RS232_A_TAG "rs232a"
#define RS232_B_TAG "rs232b"
+#define ABC_KEYBOARD_PORT_TAG "kb"
diff --git a/src/mess/includes/abc80x.h b/src/mess/includes/abc80x.h
index 684c0ad111e..a147d1965b3 100644
--- a/src/mess/includes/abc80x.h
+++ b/src/mess/includes/abc80x.h
@@ -61,6 +61,7 @@
#define DISCRETE_TAG "discrete"
#define RS232_A_TAG "rs232a"
#define RS232_B_TAG "rs232b"
+#define ABC_KEYBOARD_PORT_TAG "kb"
//**************************************************************************
@@ -86,7 +87,6 @@ public:
m_char_ram(*this, "char_ram"),
m_io_sb(*this, "SB"),
m_ctc_z0(0),
- m_sio_rxdb(1),
m_sio_txcb(0),
m_sio_txdb(1),
m_sio_rtsb(1),
@@ -123,7 +123,6 @@ public:
void clock_cassette(int state);
DECLARE_READ8_MEMBER( pling_r );
- DECLARE_READ_LINE_MEMBER( keyboard_txd_r );
DECLARE_READ8_MEMBER( keyboard_col_r );
DECLARE_WRITE8_MEMBER( keyboard_row_w );
DECLARE_WRITE8_MEMBER( keyboard_ctrl_w );
@@ -133,7 +132,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( ctc_z0_w );
DECLARE_WRITE_LINE_MEMBER( ctc_z1_w );
DECLARE_WRITE_LINE_MEMBER( ctc_z2_w );
- DECLARE_READ_LINE_MEMBER( sio_rxdb_r );
DECLARE_WRITE_LINE_MEMBER( sio_txdb_w );
DECLARE_WRITE_LINE_MEMBER( sio_dtrb_w );
DECLARE_WRITE_LINE_MEMBER( sio_rtsb_w );
@@ -151,8 +149,6 @@ public:
// serial state
UINT8 m_sb;
int m_ctc_z0;
- int m_sio_rxdb;
- int m_sio_rxcb;
int m_sio_txcb;
int m_sio_txdb;
int m_sio_rtsb;
diff --git a/src/mess/includes/huebler.h b/src/mess/includes/huebler.h
index c1b3d270350..0b2e0315aa8 100644
--- a/src/mess/includes/huebler.h
+++ b/src/mess/includes/huebler.h
@@ -25,6 +25,7 @@ public:
amu880_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_cassette(*this, "cassette"),
+ m_z80sio(*this, Z80SIO_TAG),
m_kb_rom(*this, "keyboard"),
m_char_rom(*this, "chargen"),
m_video_ram(*this, "video_ram"),
@@ -51,6 +52,7 @@ public:
{ }
required_device<cassette_image_device> m_cassette;
+ required_device<z80dart_device> m_z80sio;
required_memory_region m_kb_rom;
required_memory_region m_char_rom;
required_shared_ptr<UINT8> m_video_ram;
@@ -77,6 +79,7 @@ public:
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_READ8_MEMBER( keyboard_r );
+ TIMER_DEVICE_CALLBACK_MEMBER( tape_tick );
void scan_keyboard();
diff --git a/src/mess/machine/abc77.c b/src/mess/machine/abc77.c
index 4789501a188..8d1ad08d1d9 100644
--- a/src/mess/machine/abc77.c
+++ b/src/mess/machine/abc77.c
@@ -383,6 +383,8 @@ inline void abc77_device::serial_output(int state)
if (m_txd != state)
{
m_txd = state;
+
+ m_slot->write_rx(m_txd);
}
}
@@ -527,16 +529,6 @@ void abc77_device::device_timer(emu_timer &timer, device_timer_id id, int param,
//-------------------------------------------------
-// rxd_r -
-//-------------------------------------------------
-
-int abc77_device::rxd_r()
-{
- return m_txd;
-}
-
-
-//-------------------------------------------------
// txd_w -
//-------------------------------------------------
diff --git a/src/mess/machine/abc77.h b/src/mess/machine/abc77.h
index 78d2dc158e3..f34285ce06b 100644
--- a/src/mess/machine/abc77.h
+++ b/src/mess/machine/abc77.h
@@ -42,7 +42,6 @@ public:
virtual ioport_constructor device_input_ports() const;
// abc_keyboard_interface overrides
- virtual int rxd_r();
virtual void txd_w(int state);
DECLARE_INPUT_CHANGED_MEMBER( keyboard_reset );
diff --git a/src/mess/machine/abc800kb.c b/src/mess/machine/abc800kb.c
index 897e16e01e8..55a18604f86 100644
--- a/src/mess/machine/abc800kb.c
+++ b/src/mess/machine/abc800kb.c
@@ -293,6 +293,8 @@ inline void abc800_keyboard_device::serial_output(int state)
if (m_txd != state)
{
m_txd = state;
+
+ m_slot->write_rx(m_txd);
}
}
@@ -397,16 +399,6 @@ void abc800_keyboard_device::device_timer(emu_timer &timer, device_timer_id id,
//-------------------------------------------------
-// rxd_r -
-//-------------------------------------------------
-
-int abc800_keyboard_device::rxd_r()
-{
- return m_txd;
-}
-
-
-//-------------------------------------------------
// txd_w -
//-------------------------------------------------
diff --git a/src/mess/machine/abc800kb.h b/src/mess/machine/abc800kb.h
index d00bfe2f3af..f669a76763a 100644
--- a/src/mess/machine/abc800kb.h
+++ b/src/mess/machine/abc800kb.h
@@ -41,7 +41,6 @@ public:
virtual ioport_constructor device_input_ports() const;
// abc_keyboard_interface overrides
- virtual int rxd_r();
virtual void txd_w(int state);
// not really public
diff --git a/src/mess/machine/abc99.c b/src/mess/machine/abc99.c
index fc5899e5e1f..a4272a52213 100644
--- a/src/mess/machine/abc99.c
+++ b/src/mess/machine/abc99.c
@@ -431,6 +431,21 @@ inline void abc99_device::serial_input()
//-------------------------------------------------
+// serial_output -
+//-------------------------------------------------
+
+inline void abc99_device::serial_output(int state)
+{
+ if (m_txd != state)
+ {
+ m_txd = state;
+
+ m_slot->write_rx(m_txd);
+ }
+}
+
+
+//-------------------------------------------------
// serial_clock -
//-------------------------------------------------
@@ -489,7 +504,8 @@ abc99_device::abc99_device(const machine_config &mconfig, const char *tag, devic
m_t1_z2(0),
m_t1_z5(0),
m_led_en(0),
- m_reset(1)
+ m_reset(1),
+ m_txd(1)
{
}
@@ -516,6 +532,7 @@ void abc99_device::device_start()
save_item(NAME(m_t1_z5));
save_item(NAME(m_led_en));
save_item(NAME(m_reset));
+ save_item(NAME(m_txd));
}
@@ -551,16 +568,6 @@ void abc99_device::device_timer(emu_timer &timer, device_timer_id id, int param,
//-------------------------------------------------
-// rxd_r -
-//-------------------------------------------------
-
-int abc99_device::rxd_r()
-{
- return m_so_z2 && m_so_z5;
-}
-
-
-//-------------------------------------------------
// txd_w -
//-------------------------------------------------
@@ -616,6 +623,7 @@ WRITE8_MEMBER( abc99_device::z2_p1_w )
// serial output
m_so_z2 = BIT(data, 0);
+ serial_output(m_so_z2 && m_so_z5);
// key down
key_down(!BIT(data, 1));
@@ -758,6 +766,7 @@ WRITE8_MEMBER( abc99_device::z5_p2_w )
// serial output
m_so_z5 = BIT(data, 6);
+ serial_output(m_so_z2 && m_so_z5);
// keyboard CPU T1
m_t1_z2 = BIT(data, 7);
diff --git a/src/mess/machine/abc99.h b/src/mess/machine/abc99.h
index f754679f996..f93953ef83b 100644
--- a/src/mess/machine/abc99.h
+++ b/src/mess/machine/abc99.h
@@ -40,7 +40,6 @@ public:
virtual ioport_constructor device_input_ports() const;
// abc_keyboard_interface overrides
- virtual int rxd_r();
virtual void txd_w(int state);
DECLARE_INPUT_CHANGED_MEMBER( keyboard_reset );
@@ -83,6 +82,7 @@ private:
};
inline void serial_input();
+ inline void serial_output(int state);
inline void serial_clock();
inline void key_down(int state);
inline void scan_mouse();
@@ -108,6 +108,7 @@ private:
int m_t1_z5;
int m_led_en;
int m_reset;
+ int m_txd;
};
diff --git a/src/mess/machine/abckb.c b/src/mess/machine/abckb.c
index 48a208e31bd..60319fd7ecd 100644
--- a/src/mess/machine/abckb.c
+++ b/src/mess/machine/abckb.c
@@ -52,8 +52,9 @@ abc_keyboard_interface::abc_keyboard_interface(const machine_config &mconfig, de
abc_keyboard_port_device::abc_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, ABC_KEYBOARD_PORT, "Luxor ABC keyboard port", tag, owner, clock, "abc_keyboard_port", __FILE__),
device_slot_interface(mconfig, *this),
- m_write_trxc(*this),
- m_write_keydown(*this)
+ m_out_rx_handler(*this),
+ m_out_trxc_handler(*this),
+ m_out_keydown_handler(*this)
{
}
@@ -67,8 +68,9 @@ void abc_keyboard_port_device::device_start()
m_card = dynamic_cast<abc_keyboard_interface *>(get_card_device());
// resolve callbacks
- m_write_trxc.resolve_safe();
- m_write_keydown.resolve_safe();
+ m_out_rx_handler.resolve_safe();
+ m_out_trxc_handler.resolve_safe();
+ m_out_keydown_handler.resolve_safe();
}
@@ -84,17 +86,12 @@ void abc_keyboard_port_device::device_reset()
//-------------------------------------------------
-// rxd_r -
+// write_rx -
//-------------------------------------------------
-READ_LINE_MEMBER( abc_keyboard_port_device::rxd_r )
+WRITE_LINE_MEMBER( abc_keyboard_port_device::write_rx )
{
- int state = 1;
-
- if (m_card != NULL)
- state = m_card->rxd_r();
-
- return state;
+ m_out_rx_handler(state);
}
@@ -115,7 +112,7 @@ WRITE_LINE_MEMBER( abc_keyboard_port_device::txd_w )
WRITE_LINE_MEMBER( abc_keyboard_port_device::trxc_w )
{
- m_write_trxc(state);
+ m_out_trxc_handler(state);
}
@@ -125,7 +122,7 @@ WRITE_LINE_MEMBER( abc_keyboard_port_device::trxc_w )
WRITE_LINE_MEMBER( abc_keyboard_port_device::keydown_w )
{
- m_write_keydown(state);
+ m_out_keydown_handler(state);
}
diff --git a/src/mess/machine/abckb.h b/src/mess/machine/abckb.h
index 6995520b544..f9c050b11ed 100644
--- a/src/mess/machine/abckb.h
+++ b/src/mess/machine/abckb.h
@@ -19,21 +19,21 @@
//**************************************************************************
-// MACROS / CONSTANTS
+// INTERFACE CONFIGURATION MACROS
//**************************************************************************
-#define ABC_KEYBOARD_PORT_TAG "kb"
-
+#define MCFG_ABC_KEYBOARD_PORT_ADD(_tag, _def_slot) \
+ MCFG_DEVICE_ADD(_tag, ABC_KEYBOARD_PORT, 0) \
+ MCFG_DEVICE_SLOT_INTERFACE(abc_keyboard_devices, _def_slot, false)
+#define MCFG_ABC_KEYBOARD_OUT_RX_HANDLER(_devcb) \
+ devcb = &abc_keyboard_port_device::set_out_rx_handler(*device, DEVCB2_##_devcb);
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
+#define MCFG_ABC_KEYBOARD_OUT_TRXC_HANDLER(_devcb) \
+ devcb = &abc_keyboard_port_device::set_out_trxc_handler(*device, DEVCB2_##_devcb);
-#define MCFG_ABC_KEYBOARD_PORT_ADD(_def_slot, _trxc, _keydown) \
- MCFG_DEVICE_ADD(ABC_KEYBOARD_PORT_TAG, ABC_KEYBOARD_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(abc_keyboard_devices, _def_slot, false) \
- downcast<abc_keyboard_port_device *>(device)->set_callbacks(DEVCB2_##_trxc, DEVCB2_##_keydown);
+#define MCFG_ABC_KEYBOARD_OUT_KEYDOWN_HANDLER(_devcb) \
+ devcb = &abc_keyboard_port_device::set_out_keydown_handler(*device, DEVCB2_##_devcb);
@@ -50,16 +50,15 @@ public:
// construction/destruction
abc_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- template<class _trxc, class _keydown> void set_callbacks(_trxc trxc, _keydown keydown) {
- m_write_trxc.set_callback(trxc);
- m_write_keydown.set_callback(keydown);
- }
+ template<class _Object> static devcb2_base &set_out_rx_handler(device_t &device, _Object object) { return downcast<abc_keyboard_port_device &>(device).m_out_rx_handler.set_callback(object); }
+ template<class _Object> static devcb2_base &set_out_trxc_handler(device_t &device, _Object object) { return downcast<abc_keyboard_port_device &>(device).m_out_trxc_handler.set_callback(object); }
+ template<class _Object> static devcb2_base &set_out_keydown_handler(device_t &device, _Object object) { return downcast<abc_keyboard_port_device &>(device).m_out_keydown_handler.set_callback(object); }
// computer interface
- DECLARE_READ_LINE_MEMBER( rxd_r );
DECLARE_WRITE_LINE_MEMBER( txd_w );
// peripheral interface
+ DECLARE_WRITE_LINE_MEMBER( write_rx );
DECLARE_WRITE_LINE_MEMBER( trxc_w );
DECLARE_WRITE_LINE_MEMBER( keydown_w );
@@ -68,8 +67,9 @@ protected:
virtual void device_start();
virtual void device_reset();
- devcb2_write_line m_write_trxc;
- devcb2_write_line m_write_keydown;
+ devcb2_write_line m_out_rx_handler;
+ devcb2_write_line m_out_trxc_handler;
+ devcb2_write_line m_out_keydown_handler;
abc_keyboard_interface *m_card;
};
@@ -81,7 +81,6 @@ public:
// construction/destruction
abc_keyboard_interface(const machine_config &mconfig, device_t &device);
- virtual int rxd_r() { return 1; };
virtual void txd_w(int state) { };
protected:
diff --git a/src/mess/machine/mc80.c b/src/mess/machine/mc80.c
index 67552aef017..9ac678da883 100644
--- a/src/mess/machine/mc80.c
+++ b/src/mess/machine/mc80.c
@@ -201,14 +201,16 @@ Z80SIO_INTERFACE( mc8030_asp_z80sio_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/machine/tf20.c b/src/mess/machine/tf20.c
index 1c7d7d3698e..1e0867f0b7d 100644
--- a/src/mess/machine/tf20.c
+++ b/src/mess/machine/tf20.c
@@ -93,14 +93,12 @@ static UPD7201_INTERFACE( tf20_upd7201_intf )
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,