summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author mooglyguy <therealmogminer@gmail.com>2018-08-29 19:07:22 +0200
committer mooglyguy <therealmogminer@gmail.com>2018-08-29 19:07:51 +0200
commitb69e80c9f4b079918b8162ffabaf907a34cea3d2 (patch)
treebb4a07513094a62de29058b835db9f7d4a5631b6
parent8ac98fea56b7c409f5917d78ceafa6bb7a97b653 (diff)
i8251: Removed MCFG, nw
-rw-r--r--src/devices/bus/ieee488/softbox.cpp8
-rw-r--r--src/devices/bus/isa/myb3k_com.cpp12
-rw-r--r--src/devices/bus/isa/p1_sound.cpp6
-rw-r--r--src/devices/cpu/nec/v53.cpp23
-rw-r--r--src/devices/machine/i8251.h25
-rw-r--r--src/mame/drivers/alphatro.cpp4
-rw-r--r--src/mame/drivers/amust.cpp16
-rw-r--r--src/mame/drivers/att4425.cpp8
-rw-r--r--src/mame/drivers/bw2.cpp8
-rw-r--r--src/mame/drivers/cgc7900.cpp24
-rw-r--r--src/mame/drivers/cit101.cpp34
-rw-r--r--src/mame/drivers/compis.cpp8
-rw-r--r--src/mame/drivers/decwritr.cpp10
-rw-r--r--src/mame/drivers/duet16.cpp10
-rw-r--r--src/mame/drivers/dvk_ksm.cpp14
-rw-r--r--src/mame/drivers/einstein.cpp8
-rw-r--r--src/mame/drivers/excali64.cpp6
-rw-r--r--src/mame/drivers/fb01.cpp8
-rw-r--r--src/mame/drivers/fmtowns.cpp15
-rw-r--r--src/mame/drivers/horizon.cpp16
-rw-r--r--src/mame/drivers/ibm6580.cpp24
-rw-r--r--src/mame/drivers/imds2.cpp24
-rw-r--r--src/mame/drivers/isbc.cpp28
-rw-r--r--src/mame/drivers/isbc8010.cpp8
-rw-r--r--src/mame/drivers/konin.cpp10
-rw-r--r--src/mame/drivers/kyocera.cpp8
-rw-r--r--src/mame/drivers/m20.cpp16
-rw-r--r--src/mame/drivers/mbc55x.cpp4
-rw-r--r--src/mame/drivers/mc1502.cpp14
-rw-r--r--src/mame/drivers/meritum.cpp4
-rw-r--r--src/mame/drivers/mfabfz.cpp8
-rw-r--r--src/mame/drivers/mice.cpp12
-rw-r--r--src/mame/drivers/ms0515.cpp24
-rw-r--r--src/mame/drivers/nc.cpp12
-rw-r--r--src/mame/drivers/ngen.cpp16
-rw-r--r--src/mame/drivers/octopus.cpp8
-rw-r--r--src/mame/drivers/okean240.cpp8
-rw-r--r--src/mame/drivers/pc100.cpp10
-rw-r--r--src/mame/drivers/pc8401a.cpp16
-rw-r--r--src/mame/drivers/pc8801.cpp6
-rw-r--r--src/mame/drivers/peoplepc.cpp8
-rw-r--r--src/mame/drivers/pk8020.cpp10
-rw-r--r--src/mame/drivers/pmd85.cpp246
-rw-r--r--src/mame/drivers/poly88.cpp6
-rw-r--r--src/mame/drivers/qtsbc.cpp4
-rw-r--r--src/mame/drivers/rainbow.cpp10
-rw-r--r--src/mame/drivers/sage2.cpp34
-rw-r--r--src/mame/drivers/scopus.cpp8
-rw-r--r--src/mame/drivers/sdk80.cpp8
-rw-r--r--src/mame/drivers/sdk86.cpp8
-rw-r--r--src/mame/drivers/seattlecmp.cpp12
-rw-r--r--src/mame/drivers/selz80.cpp8
-rw-r--r--src/mame/drivers/sg1000.cpp8
-rw-r--r--src/mame/drivers/sm7238.cpp20
-rw-r--r--src/mame/drivers/softbox.cpp8
-rw-r--r--src/mame/drivers/sys9002.cpp16
-rw-r--r--src/mame/drivers/tandy2k.cpp12
-rw-r--r--src/mame/drivers/tsispch.cpp14
-rw-r--r--src/mame/drivers/v102.cpp4
-rw-r--r--src/mame/drivers/v1050.cpp18
-rw-r--r--src/mame/drivers/v550.cpp12
-rw-r--r--src/mame/drivers/vector4.cpp24
-rw-r--r--src/mame/drivers/vixen.cpp12
-rw-r--r--src/mame/drivers/votrpss.cpp8
-rw-r--r--src/mame/drivers/vt240.cpp15
-rw-r--r--src/mame/drivers/xor100.cpp26
-rw-r--r--src/mame/includes/pmd85.h2
67 files changed, 533 insertions, 551 deletions
diff --git a/src/devices/bus/ieee488/softbox.cpp b/src/devices/bus/ieee488/softbox.cpp
index 03af51971de..6529282f2b3 100644
--- a/src/devices/bus/ieee488/softbox.cpp
+++ b/src/devices/bus/ieee488/softbox.cpp
@@ -239,10 +239,10 @@ MACHINE_CONFIG_START(softbox_device::device_add_mconfig)
MCFG_DEVICE_IO_MAP(softbox_io)
// devices
- MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
+ i8251_device &i8251(I8251(config, I8251_TAG, 0));
+ i8251.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ i8251.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ i8251.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_rxd))
diff --git a/src/devices/bus/isa/myb3k_com.cpp b/src/devices/bus/isa/myb3k_com.cpp
index 1a281971c9c..fdc0a527c6f 100644
--- a/src/devices/bus/isa/myb3k_com.cpp
+++ b/src/devices/bus/isa/myb3k_com.cpp
@@ -32,12 +32,12 @@ DEFINE_DEVICE_TYPE(ISA8_MYB3K_COM, isa8_myb3k_com_device, "isa8_myb3k_com", "ADP
// device_add_mconfig - add device configuration
//-------------------------------------------------
MACHINE_CONFIG_START(isa8_myb3k_com_device::device_add_mconfig)
- MCFG_DEVICE_ADD( "usart", I8251, XTAL(15'974'400) / 8 )
- MCFG_I8251_TXD_HANDLER(WRITELINE("com1", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("com1", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("com1", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, isa8_myb3k_com_device, com_int_rx))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, isa8_myb3k_com_device, com_int_tx))
+ I8251( config, m_usart, XTAL(15'974'400) / 8 );
+ m_usart->txd_handler().set("com1", FUNC(rs232_port_device::write_txd));
+ m_usart->dtr_handler().set("com1", FUNC(rs232_port_device::write_dtr));
+ m_usart->rts_handler().set("com1", FUNC(rs232_port_device::write_rts));
+ m_usart->rxrdy_handler().set(FUNC(isa8_myb3k_com_device::com_int_rx));
+ m_usart->txrdy_handler().set(FUNC(isa8_myb3k_com_device::com_int_tx));
MCFG_DEVICE_ADD( "com1", RS232_PORT, isa8_myb3k_com, nullptr )
MCFG_RS232_RXD_HANDLER(WRITELINE("usart", i8251_device, write_rxd))
diff --git a/src/devices/bus/isa/p1_sound.cpp b/src/devices/bus/isa/p1_sound.cpp
index ee443231087..62b0bbca1d6 100644
--- a/src/devices/bus/isa/p1_sound.cpp
+++ b/src/devices/bus/isa/p1_sound.cpp
@@ -30,9 +30,9 @@ DEFINE_DEVICE_TYPE(P1_SOUND, p1_sound_device, "p1_sound", "Poisk-1 sound card (B
//-------------------------------------------------
MACHINE_CONFIG_START(p1_sound_device::device_add_mconfig)
- MCFG_DEVICE_ADD("midi", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("mdout", midi_port_device, write_txd))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(":isa", isa8_device, irq3_w))
+ I8251(config, m_midi, 0);
+ m_midi->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
+ m_midi->rxrdy_handler().set(":isa", FUNC(isa8_device::irq3_w));
MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
MCFG_MIDI_RX_HANDLER(WRITELINE("midi", i8251_device, write_rxd))
diff --git a/src/devices/cpu/nec/v53.cpp b/src/devices/cpu/nec/v53.cpp
index 676efd675e5..82b811c873a 100644
--- a/src/devices/cpu/nec/v53.cpp
+++ b/src/devices/cpu/nec/v53.cpp
@@ -504,8 +504,8 @@ WRITE_LINE_MEMBER(v53_base_device::internal_irq_w)
}
-MACHINE_CONFIG_START(v53_base_device::device_add_mconfig)
-
+void v53_base_device::device_add_mconfig(machine_config &config)
+{
PIT8254(config, m_v53tcu, 0); // functionality identical to uPD71054
m_v53tcu->set_clk<0>(16000000); // manual implicitly claims that these runs at same speed as the CPU
m_v53tcu->set_clk<1>(16000000);
@@ -537,16 +537,15 @@ MACHINE_CONFIG_START(v53_base_device::device_add_mconfig)
m_v53icu->in_sp_callback().set_constant(1);
m_v53icu->read_slave_ack_callback().set(FUNC(v53_base_device::get_pic_ack));
- MCFG_DEVICE_ADD("v53scu", V53_SCU, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(*this, v53_base_device, scu_txd_trampoline_cb))
- MCFG_I8251_DTR_HANDLER(WRITELINE(*this, v53_base_device, scu_dtr_trampoline_cb))
- MCFG_I8251_RTS_HANDLER(WRITELINE(*this, v53_base_device, scu_rts_trampoline_cb))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, v53_base_device,scu_rxrdy_trampoline_cb))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, v53_base_device,scu_txrdy_trampoline_cb))
- MCFG_I8251_TXEMPTY_HANDLER(WRITELINE(*this, v53_base_device, scu_txempty_trampoline_cb))
- MCFG_I8251_SYNDET_HANDLER(WRITELINE(*this, v53_base_device, scu_syndet_trampoline_cb))
-
-MACHINE_CONFIG_END
+ V53_SCU(config, m_v53scu, 0);
+ m_v53scu->txd_handler().set(FUNC(v53_base_device::scu_txd_trampoline_cb));
+ m_v53scu->dtr_handler().set(FUNC(v53_base_device::scu_dtr_trampoline_cb));
+ m_v53scu->rts_handler().set(FUNC(v53_base_device::scu_rts_trampoline_cb));
+ m_v53scu->rxrdy_handler().set(FUNC(v53_base_device::scu_rxrdy_trampoline_cb));
+ m_v53scu->txrdy_handler().set(FUNC(v53_base_device::scu_txrdy_trampoline_cb));
+ m_v53scu->txempty_handler().set(FUNC(v53_base_device::scu_txempty_trampoline_cb));
+ m_v53scu->syndet_handler().set(FUNC(v53_base_device::scu_syndet_trampoline_cb));
+}
v53_base_device::v53_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
diff --git a/src/devices/machine/i8251.h b/src/devices/machine/i8251.h
index 4eab12602d9..2cf0e67cea6 100644
--- a/src/devices/machine/i8251.h
+++ b/src/devices/machine/i8251.h
@@ -15,31 +15,6 @@
#include "diserial.h"
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_I8251_TXD_HANDLER(_devcb) \
- downcast<i8251_device &>(*device).set_txd_handler(DEVCB_##_devcb);
-
-#define MCFG_I8251_DTR_HANDLER(_devcb) \
- downcast<i8251_device &>(*device).set_dtr_handler(DEVCB_##_devcb);
-
-#define MCFG_I8251_RTS_HANDLER(_devcb) \
- downcast<i8251_device &>(*device).set_rts_handler(DEVCB_##_devcb);
-
-#define MCFG_I8251_RXRDY_HANDLER(_devcb) \
- downcast<i8251_device &>(*device).set_rxrdy_handler(DEVCB_##_devcb);
-
-#define MCFG_I8251_TXRDY_HANDLER(_devcb) \
- downcast<i8251_device &>(*device).set_txrdy_handler(DEVCB_##_devcb);
-
-#define MCFG_I8251_TXEMPTY_HANDLER(_devcb) \
- downcast<i8251_device &>(*device).set_txempty_handler(DEVCB_##_devcb);
-
-#define MCFG_I8251_SYNDET_HANDLER(_devcb) \
- downcast<i8251_device &>(*device).set_syndet_handler(DEVCB_##_devcb);
-
class i8251_device : public device_t,
public device_serial_interface
{
diff --git a/src/mame/drivers/alphatro.cpp b/src/mame/drivers/alphatro.cpp
index caf5ac6d9e0..bfbf7c899c8 100644
--- a/src/mame/drivers/alphatro.cpp
+++ b/src/mame/drivers/alphatro.cpp
@@ -743,8 +743,8 @@ MACHINE_CONFIG_START(alphatro_state::alphatro)
MCFG_MC6845_CHAR_WIDTH(8)
MCFG_MC6845_UPDATE_ROW_CB(alphatro_state, crtc_update_row)
- MCFG_DEVICE_ADD("usart", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(*this, alphatro_state, txdata_callback))
+ I8251(config, m_usart, 0);
+ m_usart->txd_handler().set(FUNC(alphatro_state::txdata_callback));
clock_device &usart_clock(CLOCK(config, "usart_clock", 19218)); // 19218 to load a real tape, 19222 to load a tape made by this driver
usart_clock.signal_handler().set(m_usart, FUNC(i8251_device::write_txc));
diff --git a/src/mame/drivers/amust.cpp b/src/mame/drivers/amust.cpp
index 9b88907458d..3b0f301f46d 100644
--- a/src/mame/drivers/amust.cpp
+++ b/src/mame/drivers/amust.cpp
@@ -419,20 +419,20 @@ MACHINE_CONFIG_START(amust_state::amust)
uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc));
uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc));
- MCFG_DEVICE_ADD("uart1", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ i8251_device &uart1(I8251(config, "uart1", 0));
+ uart1.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ uart1.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ uart1.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "keyboard")
MCFG_RS232_RXD_HANDLER(WRITELINE("uart1", i8251_device, write_rxd))
MCFG_RS232_CTS_HANDLER(WRITELINE("uart1", i8251_device, write_cts))
MCFG_RS232_DSR_HANDLER(WRITELINE("uart1", i8251_device, write_dsr))
- MCFG_DEVICE_ADD("uart2", I8251, 0)
- //MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- //MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- //MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ I8251(config, "uart2", 0);
+ //uart2.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ //uart2.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ //uart2.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("pit", PIT8253, 0)
diff --git a/src/mame/drivers/att4425.cpp b/src/mame/drivers/att4425.cpp
index a73ea90542f..283524085cf 100644
--- a/src/mame/drivers/att4425.cpp
+++ b/src/mame/drivers/att4425.cpp
@@ -286,10 +286,10 @@ MACHINE_CONFIG_START(att4425_state::att4425)
MCFG_DEVICE_ADD("line_clock", CLOCK, 9600*64)
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, att4425_state, write_line_clock))
- MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ I8251(config, m_i8251, 0);
+ m_i8251->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_i8251->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ m_i8251->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "keyboard")
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/bw2.cpp b/src/mame/drivers/bw2.cpp
index 82d84f08943..8a1e68e9078 100644
--- a/src/mame/drivers/bw2.cpp
+++ b/src/mame/drivers/bw2.cpp
@@ -584,10 +584,10 @@ MACHINE_CONFIG_START(bw2_state::bw2)
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
- MCFG_DEVICE_ADD(m_uart, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
+ I8251(config, m_uart, 0);
+ m_uart->txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ m_uart->dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ m_uart->rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart, i8251_device, write_rxd))
diff --git a/src/mame/drivers/cgc7900.cpp b/src/mame/drivers/cgc7900.cpp
index 6547c5312f5..6b02457a645 100644
--- a/src/mame/drivers/cgc7900.cpp
+++ b/src/mame/drivers/cgc7900.cpp
@@ -500,23 +500,23 @@ MACHINE_CONFIG_START(cgc7900_state::cgc7900)
k1135a.ft_handler().set(m_i8251_1, FUNC(i8251_device::write_txc));
k1135a.ft_handler().append(m_i8251_1, FUNC(i8251_device::write_rxc));
- MCFG_DEVICE_ADD(INS8251_0_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, cgc7900_state, irq<0xf>))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, cgc7900_state, irq<0x3>))
+ I8251(config, m_i8251_0, 0);
+ m_i8251_0->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_i8251_0->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ m_i8251_0->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ m_i8251_0->rxrdy_handler().set(FUNC(cgc7900_state::irq<0xf>));
+ m_i8251_0->txrdy_handler().set(FUNC(cgc7900_state::irq<0x3>));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "null_modem")
MCFG_RS232_RXD_HANDLER(WRITELINE(INS8251_0_TAG, i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(WRITELINE(INS8251_0_TAG, i8251_device, write_dsr))
- MCFG_DEVICE_ADD(INS8251_1_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs449", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs449", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs449", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, cgc7900_state, irq<0x8>))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, cgc7900_state, irq<0x1>))
+ I8251(config, m_i8251_1, 0);
+ m_i8251_1->txd_handler().set("rs449", FUNC(rs232_port_device::write_txd));
+ m_i8251_1->dtr_handler().set("rs449", FUNC(rs232_port_device::write_dtr));
+ m_i8251_1->rts_handler().set("rs449", FUNC(rs232_port_device::write_rts));
+ m_i8251_1->rxrdy_handler().set(FUNC(cgc7900_state::irq<0x8>));
+ m_i8251_1->txrdy_handler().set(FUNC(cgc7900_state::irq<0x1>));
MCFG_DEVICE_ADD("rs449", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(INS8251_1_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/cit101.cpp b/src/mame/drivers/cit101.cpp
index b7ed97eb12c..62848c4adbd 100644
--- a/src/mame/drivers/cit101.cpp
+++ b/src/mame/drivers/cit101.cpp
@@ -72,6 +72,8 @@ public:
, m_maincpu(*this, "maincpu")
, m_screen(*this, "screen")
, m_nvr(*this, "nvr")
+ , m_comuart(*this, "comuart")
+ , m_kbduart(*this, "kbduart")
, m_chargen(*this, "chargen")
, m_mainram(*this, "mainram")
, m_extraram(*this, "extraram")
@@ -109,6 +111,8 @@ private:
required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<er2055_device> m_nvr;
+ required_device<i8251_device> m_comuart;
+ required_device<i8251_device> m_kbduart;
required_region_ptr<u8> m_chargen;
required_shared_ptr<u8> m_mainram;
required_shared_ptr<u8> m_extraram;
@@ -117,8 +121,8 @@ private:
void cit101_state::machine_start()
{
- subdevice<i8251_device>("comuart")->write_cts(0);
- subdevice<i8251_device>("kbduart")->write_cts(0);
+ m_comuart->write_cts(0);
+ m_kbduart->write_cts(0);
m_brightness = 0xff;
@@ -344,12 +348,12 @@ MACHINE_CONFIG_START(cit101_state::cit101)
MCFG_SCREEN_UPDATE_DRIVER(cit101_state, screen_update)
MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", I8085_RST75_LINE))
- MCFG_DEVICE_ADD("comuart", I8251, 6.144_MHz_XTAL / 2)
- MCFG_I8251_TXD_HANDLER(WRITELINE("comm", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("comm", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("comm", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("uartint", input_merger_device, in_w<0>))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("uartint", input_merger_device, in_w<2>))
+ I8251(config, m_comuart, 6.144_MHz_XTAL / 2);
+ m_comuart->txd_handler().set("comm", FUNC(rs232_port_device::write_txd));
+ m_comuart->dtr_handler().set("comm", FUNC(rs232_port_device::write_dtr));
+ m_comuart->rts_handler().set("comm", FUNC(rs232_port_device::write_rts));
+ m_comuart->rxrdy_handler().set("uartint", FUNC(input_merger_device::in_w<0>));
+ m_comuart->txrdy_handler().set("uartint", FUNC(input_merger_device::in_w<2>));
MCFG_DEVICE_ADD("comm", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("comuart", i8251_device, write_rxd))
@@ -357,10 +361,10 @@ MACHINE_CONFIG_START(cit101_state::cit101)
// CTS can be disabled in SET-UP Mode C
// DSR, CD, SI, RI are examined only during the modem test, not "always ignored" as the User's Manual claims
- MCFG_DEVICE_ADD("auxuart", I8251, 6.144_MHz_XTAL / 2)
- MCFG_I8251_TXD_HANDLER(WRITELINE("printer", rs232_port_device, write_txd))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("uartint", input_merger_device, in_w<1>))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("uartint", input_merger_device, in_w<3>))
+ i8251_device &auxuart(I8251(config, "auxuart", 6.144_MHz_XTAL / 2));
+ auxuart.txd_handler().set("printer", FUNC(rs232_port_device::write_txd));
+ auxuart.rxrdy_handler().set("uartint", FUNC(input_merger_device::in_w<1>));
+ auxuart.txrdy_handler().set("uartint", FUNC(input_merger_device::in_w<3>));
MCFG_DEVICE_ADD("printer", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("auxuart", i8251_device, write_rxd))
@@ -369,9 +373,9 @@ MACHINE_CONFIG_START(cit101_state::cit101)
MCFG_INPUT_MERGER_ANY_HIGH("uartint")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", I8085_RST55_LINE))
- MCFG_DEVICE_ADD("kbduart", I8251, 6.144_MHz_XTAL / 2)
- MCFG_I8251_TXD_HANDLER(WRITELINE("keyboard", cit101_hle_keyboard_device, write_rxd))
- MCFG_I8251_RXRDY_HANDLER(INPUTLINE("maincpu", I8085_RST65_LINE))
+ I8251(config, m_kbduart, 6.144_MHz_XTAL / 2);
+ m_kbduart->txd_handler().set("keyboard", FUNC(cit101_hle_keyboard_device::write_rxd));
+ m_kbduart->rxrdy_handler().set_inputline("maincpu", I8085_RST65_LINE);
MCFG_DEVICE_ADD("keyboard", CIT101_HLE_KEYBOARD, 0)
MCFG_CIT101_HLE_KEYBOARD_TXD_CALLBACK(WRITELINE("kbduart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/compis.cpp b/src/mame/drivers/compis.cpp
index 70c73817d0e..69a3fadcd65 100644
--- a/src/mame/drivers/compis.cpp
+++ b/src/mame/drivers/compis.cpp
@@ -779,10 +779,10 @@ MACHINE_CONFIG_START(compis_state::compis)
MCFG_I8255_IN_PORTB_CB(READ8(*this, compis_state, ppi_pb_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, compis_state, ppi_pc_w))
- MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(COMPIS_KEYBOARD_TAG, compis_keyboard_device, si_w))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(I80130_TAG, i80130_device, ir2_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(I80186_TAG, i80186_cpu_device, int1_w))
+ I8251(config, m_uart, 0);
+ m_uart->txd_handler().set(COMPIS_KEYBOARD_TAG, FUNC(compis_keyboard_device::si_w));
+ m_uart->rxrdy_handler().set(I80130_TAG, FUNC(i80130_device::ir2_w));
+ m_uart->txrdy_handler().set(I80186_TAG, FUNC(i80186_cpu_device::int1_w));
MCFG_DEVICE_ADD(COMPIS_KEYBOARD_TAG, COMPIS_KEYBOARD, 0)
MCFG_COMPIS_KEYBOARD_OUT_TX_HANDLER(WRITELINE(I8251A_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/decwritr.cpp b/src/mame/drivers/decwritr.cpp
index afc6b9dff27..46c0f0be4f7 100644
--- a/src/mame/drivers/decwritr.cpp
+++ b/src/mame/drivers/decwritr.cpp
@@ -447,12 +447,12 @@ MACHINE_CONFIG_START(decwriter_state::la120)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
/* i8251 */
- MCFG_DEVICE_ADD("usart", I8251, XTAL(18'000'000) / 9)
+ I8251(config, "usart", XTAL(18'000'000) / 9);
/*
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("mainint", input_merger_device, in_w<1>))
+ usart.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ usart.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ usart.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
+ usart.rxrdy_handler().set("mainint", FUNC(input_merger_device::in_w<1>));
MCFG_INPUT_MERGER_ANY_HIGH("mainint")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", 0))
diff --git a/src/mame/drivers/duet16.cpp b/src/mame/drivers/duet16.cpp
index 9908e3eab07..382be0445b9 100644
--- a/src/mame/drivers/duet16.cpp
+++ b/src/mame/drivers/duet16.cpp
@@ -391,11 +391,11 @@ MACHINE_CONFIG_START(duet16_state::duet16)
upd7201_new_device& sio(UPD7201_NEW(config, "sio", 8_MHz_XTAL / 2));
sio.out_int_callback().set("pic", FUNC(pic8259_device::ir1_w)); // INT5
- MCFG_DEVICE_ADD("kbusart", I8251, 8_MHz_XTAL / 4)
- MCFG_I8251_TXD_HANDLER(WRITELINE("kbd", rs232_port_device, write_txd))
- MCFG_I8251_RTS_HANDLER(WRITELINE("kbusart", i8251_device, write_cts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("kbint", input_merger_device, in_w<0>))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("kbint", input_merger_device, in_w<1>))
+ i8251_device &kbusart(I8251(config, "kbusart", 8_MHz_XTAL / 4));
+ kbusart.txd_handler().set("kbd", FUNC(rs232_port_device::write_txd));
+ kbusart.rts_handler().set("kbusart", FUNC(i8251_device::write_cts));
+ kbusart.rxrdy_handler().set("kbint", FUNC(input_merger_device::in_w<0>));
+ kbusart.txrdy_handler().set("kbint", FUNC(input_merger_device::in_w<1>));
MCFG_DEVICE_ADD("kbd", RS232_PORT, duet16_keyboard_devices, "keyboard")
MCFG_RS232_RXD_HANDLER(WRITELINE("kbusart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/dvk_ksm.cpp b/src/mame/drivers/dvk_ksm.cpp
index 9d0d30c5f88..b3b62ea0ef0 100644
--- a/src/mame/drivers/dvk_ksm.cpp
+++ b/src/mame/drivers/dvk_ksm.cpp
@@ -448,9 +448,9 @@ MACHINE_CONFIG_START(ksm_state::ksm)
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, ksm_state, ksm_ppi_portc_w))
// D42 - serial connection to host
- MCFG_DEVICE_ADD( "i8251line", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir3_w))
+ I8251(config, m_i8251line, 0);
+ m_i8251line->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_i8251line->rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir3_w));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "null_modem")
MCFG_RS232_RXD_HANDLER(WRITELINE("i8251line", i8251_device, write_rxd))
@@ -458,10 +458,10 @@ MACHINE_CONFIG_START(ksm_state::ksm)
MCFG_RS232_DSR_HANDLER(WRITELINE("i8251line", i8251_device, write_dsr))
// D41 - serial connection to MS7004 keyboard
- MCFG_DEVICE_ADD( "i8251kbd", I8251, 0)
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir1_w))
- MCFG_I8251_RTS_HANDLER(WRITELINE(*this, ksm_state, write_brga))
- MCFG_I8251_DTR_HANDLER(WRITELINE(*this, ksm_state, write_brgb))
+ I8251(config, m_i8251kbd, 0);
+ m_i8251kbd->rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir1_w));
+ m_i8251kbd->rts_handler().set(FUNC(ksm_state::write_brga));
+ m_i8251kbd->dtr_handler().set(FUNC(ksm_state::write_brgb));
MCFG_DEVICE_ADD("ms7004", MS7004, 0)
MCFG_MS7004_TX_HANDLER(WRITELINE("i8251kbd", i8251_device, write_rxd))
diff --git a/src/mame/drivers/einstein.cpp b/src/mame/drivers/einstein.cpp
index ce680ac2deb..199a98a816b 100644
--- a/src/mame/drivers/einstein.cpp
+++ b/src/mame/drivers/einstein.cpp
@@ -647,10 +647,10 @@ MACHINE_CONFIG_START(einstein_state::einstein)
MCFG_TIMER_DRIVER_ADD("strobe", einstein_state, strobe_callback)
// uart
- MCFG_DEVICE_ADD(IC_I060, I8251, XTAL_X002 / 4)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
+ i8251_device &ic_i060(I8251(config, IC_I060, XTAL_X002 / 4));
+ ic_i060.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ ic_i060.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ ic_i060.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
// rs232 port
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
diff --git a/src/mame/drivers/excali64.cpp b/src/mame/drivers/excali64.cpp
index 839da6a9652..fd77b9c7b63 100644
--- a/src/mame/drivers/excali64.cpp
+++ b/src/mame/drivers/excali64.cpp
@@ -560,9 +560,9 @@ MACHINE_CONFIG_START(excali64_state::excali64)
MCFG_MACHINE_RESET_OVERRIDE(excali64_state, excali64)
- MCFG_DEVICE_ADD("uart", I8251, 0)
- //MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- //MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ I8251(config, "uart", 0);
+ //uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ //uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("pit", PIT8253, 0)
MCFG_PIT8253_CLK0(16_MHz_XTAL / 16) /* Timer 0: tone gen for speaker */
diff --git a/src/mame/drivers/fb01.cpp b/src/mame/drivers/fb01.cpp
index 5f12c6d18b1..fc1834ccb0a 100644
--- a/src/mame/drivers/fb01.cpp
+++ b/src/mame/drivers/fb01.cpp
@@ -203,10 +203,10 @@ MACHINE_CONFIG_START(fb01_state::fb01)
MCFG_HD44780_LCD_SIZE(2, 8) // 2x8 displayed as 1x16
MCFG_HD44780_PIXEL_UPDATE_CB(fb01_state,fb01_pixel_update)
- MCFG_DEVICE_ADD("upd71051", I8251, XTAL(4'000'000))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, fb01_state, upd71051_rxrdy_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, fb01_state, upd71051_txrdy_w))
- MCFG_I8251_TXD_HANDLER(WRITELINE("mdout", midi_port_device, write_txd))
+ I8251(config, m_upd71051, XTAL(4'000'000));
+ m_upd71051->rxrdy_handler().set(FUNC(fb01_state::upd71051_rxrdy_w));
+ m_upd71051->txrdy_handler().set(FUNC(fb01_state::upd71051_txrdy_w));
+ m_upd71051->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL(4'000'000) / 8) // 500KHz
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, fb01_state, write_usart_clock))
diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp
index cfec592dbca..3f9d83ac390 100644
--- a/src/mame/drivers/fmtowns.cpp
+++ b/src/mame/drivers/fmtowns.cpp
@@ -2861,13 +2861,14 @@ MACHINE_CONFIG_START(towns_state::towns_base)
//MCFG_VIDEO_START_OVERRIDE(towns_state,towns)
- MCFG_DEVICE_ADD("i8251", I8251, 0)
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, towns_state, towns_rxrdy_irq))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, towns_state, towns_txrdy_irq))
- MCFG_I8251_SYNDET_HANDLER(WRITELINE(*this, towns_state, towns_syndet_irq))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232c", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232c", rs232_port_device, write_rts))
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232c", rs232_port_device, write_txd))
+ I8251(config, m_i8251, 0);
+ m_i8251->rxrdy_handler().set(FUNC(towns_state::towns_rxrdy_irq));
+ m_i8251->txrdy_handler().set(FUNC(towns_state::towns_txrdy_irq));
+ m_i8251->syndet_handler().set(FUNC(towns_state::towns_syndet_irq));
+ m_i8251->dtr_handler().set("rs232c", FUNC(rs232_port_device::write_dtr));
+ m_i8251->rts_handler().set("rs232c", FUNC(rs232_port_device::write_rts));
+ m_i8251->txd_handler().set("rs232c", FUNC(rs232_port_device::write_txd));
+
MCFG_DEVICE_ADD("rs232c", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("i8251",i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(WRITELINE("i8251",i8251_device, write_dsr))
diff --git a/src/mame/drivers/horizon.cpp b/src/mame/drivers/horizon.cpp
index 1c2691ef90a..f5e47dfc061 100644
--- a/src/mame/drivers/horizon.cpp
+++ b/src/mame/drivers/horizon.cpp
@@ -186,20 +186,20 @@ MACHINE_CONFIG_START(horizon_state::horizon)
MCFG_DEVICE_IO_MAP(horizon_io)
// devices
- MCFG_DEVICE_ADD(I8251_L_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_rts))
+ I8251(config, m_usart_l, 0);
+ m_usart_l->txd_handler().set(RS232_A_TAG, FUNC(rs232_port_device::write_txd));
+ m_usart_l->dtr_handler().set(RS232_A_TAG, FUNC(rs232_port_device::write_dtr));
+ m_usart_l->rts_handler().set(RS232_A_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_A_TAG, RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_L_TAG, i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(WRITELINE(I8251_L_TAG, i8251_device, write_dsr))
MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
- MCFG_DEVICE_ADD(I8251_R_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_rts))
+ I8251(config, m_usart_r, 0);
+ m_usart_r->txd_handler().set(RS232_B_TAG, FUNC(rs232_port_device::write_txd));
+ m_usart_r->dtr_handler().set(RS232_B_TAG, FUNC(rs232_port_device::write_dtr));
+ m_usart_r->rts_handler().set(RS232_B_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_B_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_R_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/ibm6580.cpp b/src/mame/drivers/ibm6580.cpp
index 3e0590508ac..bc441e2de96 100644
--- a/src/mame/drivers/ibm6580.cpp
+++ b/src/mame/drivers/ibm6580.cpp
@@ -933,24 +933,24 @@ MACHINE_CONFIG_START(ibm6580_state::ibm6580)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", dw_floppies, "8sssd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", dw_floppies, "8sssd", floppy_image_device::default_floppy_formats)
- MCFG_DEVICE_ADD( "upd8251a", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232a", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232a", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir2_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir2_w))
+ i8251_device &upd8251a(I8251(config, "upd8251a", 0));
+ upd8251a.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd));
+ upd8251a.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr));
+ upd8251a.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts));
+ upd8251a.rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir2_w));
+ upd8251a.txrdy_handler().set("pic8259", FUNC(pic8259_device::ir2_w));
MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("upd8251a", i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(WRITELINE("upd8251a", i8251_device, write_dsr))
MCFG_RS232_CTS_HANDLER(WRITELINE("upd8251a", i8251_device, write_cts))
- MCFG_DEVICE_ADD( "upd8251b", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232b", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232b", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232b", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir2_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir2_w))
+ i8251_device &upd8251b(I8251(config, "upd8251b", 0));
+ upd8251b.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd));
+ upd8251b.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr));
+ upd8251b.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts));
+ upd8251b.rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir2_w));
+ upd8251b.txrdy_handler().set("pic8259", FUNC(pic8259_device::ir2_w));
MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("upd8251b", i8251_device, write_rxd))
diff --git a/src/mame/drivers/imds2.cpp b/src/mame/drivers/imds2.cpp
index c9bb9ef61e3..99c86a89f0c 100644
--- a/src/mame/drivers/imds2.cpp
+++ b/src/mame/drivers/imds2.cpp
@@ -781,18 +781,18 @@ MACHINE_CONFIG_START(imds2_state::imds2)
MCFG_PIT8253_OUT1_HANDLER(WRITELINE(*this, imds2_state , imds2_baud_clk_1_w))
MCFG_PIT8253_OUT2_HANDLER(WRITELINE("ipclocpic" , pic8259_device , ir4_w))
- MCFG_DEVICE_ADD("ipcusart0" , I8251 , 0)
- MCFG_I8251_RTS_HANDLER(WRITELINE("ipcusart0" , i8251_device , write_cts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("ipclocpic" , pic8259_device , ir0_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("ipclocpic" , pic8259_device , ir1_w))
- MCFG_I8251_TXD_HANDLER(WRITELINE("serial0" , rs232_port_device , write_txd))
-
- MCFG_DEVICE_ADD("ipcusart1" , I8251 , 0)
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("ipclocpic" , pic8259_device , ir2_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("ipclocpic" , pic8259_device , ir3_w))
- MCFG_I8251_TXD_HANDLER(WRITELINE("serial1" , rs232_port_device , write_txd))
- MCFG_I8251_RTS_HANDLER(WRITELINE("serial1" , rs232_port_device , write_rts))
- MCFG_I8251_DTR_HANDLER(WRITELINE("serial1" , rs232_port_device , write_dtr))
+ I8251(config , m_ipcusart0 , 0);
+ m_ipcusart0->rts_handler().set("ipcusart0" , FUNC(i8251_device::write_cts));
+ m_ipcusart0->rxrdy_handler().set("ipclocpic" , FUNC(pic8259_device::ir0_w));
+ m_ipcusart0->txrdy_handler().set("ipclocpic" , FUNC(pic8259_device::ir1_w));
+ m_ipcusart0->txd_handler().set("serial0" , FUNC(rs232_port_device::write_txd));
+
+ I8251(config , m_ipcusart1 , 0);
+ m_ipcusart1->rxrdy_handler().set("ipclocpic" , FUNC(pic8259_device::ir2_w));
+ m_ipcusart1->txrdy_handler().set("ipclocpic" , FUNC(pic8259_device::ir3_w));
+ m_ipcusart1->txd_handler().set("serial1" , FUNC(rs232_port_device::write_txd));
+ m_ipcusart1->rts_handler().set("serial1" , FUNC(rs232_port_device::write_rts));
+ m_ipcusart1->dtr_handler().set("serial1" , FUNC(rs232_port_device::write_dtr));
MCFG_DEVICE_ADD("serial0" , RS232_PORT, default_rs232_devices , nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("ipcusart0" , i8251_device , write_rxd))
diff --git a/src/mame/drivers/isbc.cpp b/src/mame/drivers/isbc.cpp
index 7b10f99a956..19fc24b10e0 100644
--- a/src/mame/drivers/isbc.cpp
+++ b/src/mame/drivers/isbc.cpp
@@ -344,17 +344,17 @@ MACHINE_CONFIG_START(isbc_state::isbc86)
MCFG_DEVICE_ADD("ppi", I8255A, 0)
- MCFG_DEVICE_ADD("uart8251", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic_0", pic8259_device, ir6_w))
+ I8251(config, m_uart8251, 0);
+ m_uart8251->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_uart8251->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ m_uart8251->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ m_uart8251->rxrdy_handler().set("pic_0", FUNC(pic8259_device::ir6_w));
/* video hardware */
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("uart8251", i8251_device, write_rxd))
- MCFG_RS232_CTS_HANDLER(WRITELINE("uart8251", i8251_device, write_cts))
- MCFG_RS232_DSR_HANDLER(WRITELINE("uart8251", i8251_device, write_dsr))
+ MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart8251, i8251_device, write_rxd))
+ MCFG_RS232_CTS_HANDLER(WRITELINE(m_uart8251, i8251_device, write_cts))
+ MCFG_RS232_DSR_HANDLER(WRITELINE(m_uart8251, i8251_device, write_dsr))
MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", isbc86_terminal)
MACHINE_CONFIG_END
@@ -377,12 +377,12 @@ MACHINE_CONFIG_START(isbc_state::rpc86)
MCFG_DEVICE_ADD("ppi", I8255A, 0)
- MCFG_DEVICE_ADD("uart8251", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic_0", pic8259_device, ir6_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("pic_0", pic8259_device, ir7_w))
+ I8251(config, m_uart8251, 0);
+ m_uart8251->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_uart8251->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ m_uart8251->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ m_uart8251->rxrdy_handler().set("pic_0", FUNC(pic8259_device::ir6_w));
+ m_uart8251->txrdy_handler().set("pic_0", FUNC(pic8259_device::ir7_w));
/* video hardware */
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
diff --git a/src/mame/drivers/isbc8010.cpp b/src/mame/drivers/isbc8010.cpp
index 8073f8cdedc..0d54771f6df 100644
--- a/src/mame/drivers/isbc8010.cpp
+++ b/src/mame/drivers/isbc8010.cpp
@@ -178,10 +178,10 @@ MACHINE_CONFIG_START(isbc8010_state::isbc8010)
MCFG_DEVICE_PROGRAM_MAP(isbc8010_mem)
MCFG_DEVICE_IO_MAP(isbc8010_io)
- MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
+ I8251(config, m_usart, 0);
+ m_usart->txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ m_usart->dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ m_usart->rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(I8255A_1_TAG, I8255A, 0)
MCFG_DEVICE_ADD(I8255A_2_TAG, I8255A, 0)
diff --git a/src/mame/drivers/konin.cpp b/src/mame/drivers/konin.cpp
index 51f517c0dda..ae2c597866b 100644
--- a/src/mame/drivers/konin.cpp
+++ b/src/mame/drivers/konin.cpp
@@ -160,11 +160,11 @@ MACHINE_CONFIG_START(konin_state::konin)
I8255(config, m_ioppi, 0);
- MCFG_DEVICE_ADD("uart", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, konin_state, picu_r3_w))
+ i8251_device &uart(I8251(config, "uart", 0));
+ uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ uart.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ uart.rxrdy_handler().set(FUNC(konin_state::picu_r3_w));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/kyocera.cpp b/src/mame/drivers/kyocera.cpp
index a7348a87446..e9cd74dbec9 100644
--- a/src/mame/drivers/kyocera.cpp
+++ b/src/mame/drivers/kyocera.cpp
@@ -1534,10 +1534,10 @@ MACHINE_CONFIG_START(tandy200_state::tandy200)
MCFG_DEVICE_ADD(RP5C01A_TAG, RP5C01, XTAL(32'768))
- MCFG_DEVICE_ADD(I8251_TAG, I8251, 0) /*XTAL(4'915'200)/2,*/
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
+ i8251_device &i8251(I8251(config, I8251_TAG, 0)); /*XTAL(4'915'200)/2,*/
+ i8251.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ i8251.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ i8251.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/m20.cpp b/src/mame/drivers/m20.cpp
index 926545878ca..d0ebbef8162 100644
--- a/src/mame/drivers/m20.cpp
+++ b/src/mame/drivers/m20.cpp
@@ -821,14 +821,14 @@ MACHINE_CONFIG_START(m20_state::m20)
MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
- MCFG_DEVICE_ADD("i8251_1", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("kbd", rs232_port_device, write_txd))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("i8259", pic8259_device, ir4_w))
-
- MCFG_DEVICE_ADD("i8251_2", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("i8259", pic8259_device, ir3_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("i8259", pic8259_device, ir5_w))
+ I8251(config, m_kbdi8251, 0);
+ m_kbdi8251->txd_handler().set("kbd", FUNC(rs232_port_device::write_txd));
+ m_kbdi8251->rxrdy_handler().set("i8259", FUNC(pic8259_device::ir4_w));
+
+ I8251(config, m_ttyi8251, 0);
+ m_ttyi8251->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_ttyi8251->rxrdy_handler().set("i8259", FUNC(pic8259_device::ir3_w));
+ m_ttyi8251->txrdy_handler().set("i8259", FUNC(pic8259_device::ir5_w));
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
MCFG_PIT8253_CLK0(1230782)
diff --git a/src/mame/drivers/mbc55x.cpp b/src/mame/drivers/mbc55x.cpp
index c160b6820ae..872a9b492b0 100644
--- a/src/mame/drivers/mbc55x.cpp
+++ b/src/mame/drivers/mbc55x.cpp
@@ -266,8 +266,8 @@ MACHINE_CONFIG_START(mbc55x_state::mbc55x)
SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, MONO_TAG, 0.75);
/* Devices */
- MCFG_DEVICE_ADD(I8251A_KB_TAG, I8251, 0)
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(PIC8259_TAG, pic8259_device, ir3_w))
+ I8251(config, m_kb_uart, 0);
+ m_kb_uart->rxrdy_handler().set(PIC8259_TAG, FUNC(pic8259_device::ir3_w));
MCFG_DEVICE_ADD(PIT8253_TAG, PIT8253, 0)
MCFG_PIT8253_CLK0(PIT_C0_CLOCK)
diff --git a/src/mame/drivers/mc1502.cpp b/src/mame/drivers/mc1502.cpp
index 63568bf5251..5a127e04836 100644
--- a/src/mame/drivers/mc1502.cpp
+++ b/src/mame/drivers/mc1502.cpp
@@ -262,14 +262,14 @@ MACHINE_CONFIG_START(mc1502_state::mc1502)
MCFG_I8255_IN_PORTC_CB(READ8("cent_status_in", input_buffer_device, bus_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, mc1502_state, mc1502_kppi_portc_w))
- MCFG_DEVICE_ADD("upd8251", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ I8251(config, m_upd8251, 0);
+ m_upd8251->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_upd8251->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ m_upd8251->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
/* XXX RxD data are accessible via PPI port C, bit 7 */
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir7_w)) /* default handler does nothing */
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir7_w))
- MCFG_I8251_SYNDET_HANDLER(WRITELINE(*this, mc1502_state, mc1502_i8251_syndet))
+ m_upd8251->rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir7_w)); /* default handler does nothing */
+ m_upd8251->txrdy_handler().set("pic8259", FUNC(pic8259_device::ir7_w));
+ m_upd8251->syndet_handler().set(FUNC(mc1502_state::mc1502_i8251_syndet));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("upd8251", i8251_device, write_rxd))
diff --git a/src/mame/drivers/meritum.cpp b/src/mame/drivers/meritum.cpp
index 72019dab2e9..94ef2df1218 100644
--- a/src/mame/drivers/meritum.cpp
+++ b/src/mame/drivers/meritum.cpp
@@ -400,8 +400,8 @@ MACHINE_CONFIG_START(meritum_state::meritum)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_ADD("usart", I8251, 10_MHz_XTAL / 4) // same as CPU clock
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
+ i8251_device &usart(I8251(config, "usart", 10_MHz_XTAL / 4)); // same as CPU clock
+ usart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("usart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/mfabfz.cpp b/src/mame/drivers/mfabfz.cpp
index de94db99fb0..0c9b3aa76f9 100644
--- a/src/mame/drivers/mfabfz.cpp
+++ b/src/mame/drivers/mfabfz.cpp
@@ -113,10 +113,10 @@ MACHINE_CONFIG_START(mfabfz_state::mfabfz)
uart1_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc));
uart1_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc));
- MCFG_DEVICE_ADD("uart1", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ i8251_device &uart1(I8251(config, "uart1", 0));
+ uart1.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ uart1.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ uart1.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE("uart1", i8251_device, write_rxd))
diff --git a/src/mame/drivers/mice.cpp b/src/mame/drivers/mice.cpp
index 0a6c6b38934..6a49a3e5f0c 100644
--- a/src/mame/drivers/mice.cpp
+++ b/src/mame/drivers/mice.cpp
@@ -168,12 +168,12 @@ MACHINE_CONFIG_START(mice_state::mice)
MCFG_DEVICE_PROGRAM_MAP(mice_mem)
MCFG_DEVICE_IO_MAP(mice_io)
- MCFG_DEVICE_ADD("uart", I8251, 6.144_MHz_XTAL / 2)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_TXRDY_HANDLER(INPUTLINE("maincpu", I8085_RST65_LINE))
- MCFG_I8251_RXRDY_HANDLER(INPUTLINE("maincpu", I8085_RST75_LINE))
+ i8251_device &uart(I8251(config, "uart", 6.144_MHz_XTAL / 2));
+ uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ uart.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ uart.txrdy_handler().set_inputline("maincpu", I8085_RST65_LINE);
+ uart.rxrdy_handler().set_inputline("maincpu", I8085_RST75_LINE);
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/ms0515.cpp b/src/mame/drivers/ms0515.cpp
index 5d0ac563e00..4b4ac024d79 100644
--- a/src/mame/drivers/ms0515.cpp
+++ b/src/mame/drivers/ms0515.cpp
@@ -550,27 +550,27 @@ MACHINE_CONFIG_START(ms0515_state::ms0515)
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, ms0515_state, ms0515_portc_w))
// serial connection to printer
- MCFG_DEVICE_ADD( "i8251line", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, ms0515_state, irq9_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, ms0515_state, irq8_w))
+ I8251(config, m_i8251line, 0);
+ m_i8251line->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_i8251line->rxrdy_handler().set(FUNC(ms0515_state::irq9_w));
+ m_i8251line->txrdy_handler().set(FUNC(ms0515_state::irq8_w));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("i8251line", i8251_device, write_rxd))
- MCFG_RS232_CTS_HANDLER(WRITELINE("i8251line", i8251_device, write_cts))
- MCFG_RS232_DSR_HANDLER(WRITELINE("i8251line", i8251_device, write_dsr))
+ MCFG_RS232_RXD_HANDLER(WRITELINE(m_i8251line, i8251_device, write_rxd))
+ MCFG_RS232_CTS_HANDLER(WRITELINE(m_i8251line, i8251_device, write_cts))
+ MCFG_RS232_DSR_HANDLER(WRITELINE(m_i8251line, i8251_device, write_dsr))
// MCFG_DEVICE_ADD("line_clock", CLOCK, 4800*16) // 8251 is set to /16 on the clock input
// MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, ms0515_state, write_line_clock))
// serial connection to MS7004 keyboard
- MCFG_DEVICE_ADD("i8251kbd", I8251, 0)
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, ms0515_state, irq5_w))
- MCFG_I8251_TXD_HANDLER(WRITELINE("ms7004", ms7004_device, write_rxd))
+ I8251(config, m_i8251kbd, 0);
+ m_i8251kbd->rxrdy_handler().set(FUNC(ms0515_state::irq5_w));
+ m_i8251kbd->txd_handler().set("ms7004", FUNC(ms7004_device::write_rxd));
MCFG_DEVICE_ADD("ms7004", MS7004, 0)
- MCFG_MS7004_TX_HANDLER(WRITELINE("i8251kbd", i8251_device, write_rxd))
- MCFG_MS7004_RTS_HANDLER(WRITELINE("i8251kbd", i8251_device, write_cts))
+ MCFG_MS7004_TX_HANDLER(WRITELINE(m_i8251kbd, i8251_device, write_rxd))
+ MCFG_MS7004_RTS_HANDLER(WRITELINE(m_i8251kbd, i8251_device, write_cts))
// baud rate is supposed to be 4800 but keyboard is slightly faster
MCFG_DEVICE_ADD("keyboard_clock", CLOCK, 4960*16)
diff --git a/src/mame/drivers/nc.cpp b/src/mame/drivers/nc.cpp
index aa93fb9faeb..9591e98f3a5 100644
--- a/src/mame/drivers/nc.cpp
+++ b/src/mame/drivers/nc.cpp
@@ -1406,7 +1406,7 @@ MACHINE_CONFIG_START(nc_state::nc_base)
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
/* uart */
- MCFG_DEVICE_ADD("uart", I8251, 0)
+ I8251(config, m_uart, 0);
MCFG_DEVICE_ADD("uart_clock", CLOCK, 19200)
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, nc_state, write_uart_clock))
@@ -1441,9 +1441,8 @@ MACHINE_CONFIG_START(nc100_state::nc100)
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(*this, nc100_state, write_nc100_centronics_ack))
/* uart */
- MCFG_DEVICE_MODIFY("uart")
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, nc100_state, nc100_rxrdy_callback))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, nc100_state, nc100_txrdy_callback))
+ m_uart->rxrdy_handler().set(FUNC(nc100_state::nc100_rxrdy_callback));
+ m_uart->txrdy_handler().set(FUNC(nc100_state::nc100_txrdy_callback));
/* rtc */
MCFG_DEVICE_ADD("rtc", TC8521, 32.768_kHz_XTAL)
@@ -1482,9 +1481,8 @@ MACHINE_CONFIG_START(nc200_state::nc200)
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(*this, nc200_state, write_nc200_centronics_ack))
/* uart */
- MCFG_DEVICE_MODIFY("uart")
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, nc200_state, nc200_rxrdy_callback))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, nc200_state, nc200_txrdy_callback))
+ m_uart->rxrdy_handler().set(FUNC(nc200_state::nc200_rxrdy_callback));
+ m_uart->txrdy_handler().set(FUNC(nc200_state::nc200_txrdy_callback));
MCFG_UPD765A_ADD("upd765", true, true)
MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(*this, nc200_state, nc200_fdc_interrupt))
diff --git a/src/mame/drivers/ngen.cpp b/src/mame/drivers/ngen.cpp
index d2ba92e7065..0280c9a1f93 100644
--- a/src/mame/drivers/ngen.cpp
+++ b/src/mame/drivers/ngen.cpp
@@ -1013,11 +1013,11 @@ MACHINE_CONFIG_START(ngen_state::ngen)
MCFG_VIDEO_SET_SCREEN("screen")
// keyboard UART (patent says i8251 is used for keyboard communications, it is located on the video board)
- MCFG_DEVICE_ADD("videouart", I8251, 0) // main clock unknown, Rx/Tx clocks are 19.53kHz
-// MCFG_I8251_TXEMPTY_HANDLER(WRITELINE("pic",pic8259_device,ir4_w))
- MCFG_I8251_TXD_HANDLER(WRITELINE("keyboard", rs232_port_device, write_txd))
+ I8251(config, m_viduart, 0); // main clock unknown, Rx/Tx clocks are 19.53kHz
+// m_viduart->txempty_handler().set("pic", FUNC(pic8259_device::ir4_w));
+ m_viduart->txd_handler().set("keyboard", FUNC(rs232_port_device::write_txd));
MCFG_DEVICE_ADD("keyboard", RS232_PORT, keyboard, "ngen")
- MCFG_RS232_RXD_HANDLER(WRITELINE("videouart", i8251_device, write_rxd))
+ MCFG_RS232_RXD_HANDLER(WRITELINE(m_viduart, i8251_device, write_rxd))
MCFG_DEVICE_ADD("refresh_clock", CLOCK, 19200*16) // should be 19530Hz
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, ngen_state,timer_clk_out))
@@ -1124,11 +1124,11 @@ MACHINE_CONFIG_START(ngen386_state::ngen386)
MCFG_VIDEO_SET_SCREEN("screen")
// keyboard UART (patent says i8251 is used for keyboard communications, it is located on the video board)
- MCFG_DEVICE_ADD("videouart", I8251, 0) // main clock unknown, Rx/Tx clocks are 19.53kHz
-// MCFG_I8251_TXEMPTY_HANDLER(WRITELINE("pic",pic8259_device,ir4_w))
- MCFG_I8251_TXD_HANDLER(WRITELINE("keyboard", rs232_port_device, write_txd))
+ I8251(config, m_viduart, 0); // main clock unknown, Rx/Tx clocks are 19.53kHz
+// m_viduart->txempty_handler().set("pic", FUNC(pic8259_device::ir4_w));
+ m_viduart->txd_handler().set("keyboard", FUNC(rs232_port_device::write_txd));
MCFG_DEVICE_ADD("keyboard", RS232_PORT, keyboard, "ngen")
- MCFG_RS232_RXD_HANDLER(WRITELINE("videouart", i8251_device, write_rxd))
+ MCFG_RS232_RXD_HANDLER(WRITELINE(m_viduart, i8251_device, write_rxd))
MCFG_DEVICE_ADD("refresh_clock", CLOCK, 19200*16) // should be 19530Hz
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, ngen386_state,timer_clk_out))
diff --git a/src/mame/drivers/octopus.cpp b/src/mame/drivers/octopus.cpp
index d5c7bb0621f..d9b269e6593 100644
--- a/src/mame/drivers/octopus.cpp
+++ b/src/mame/drivers/octopus.cpp
@@ -947,10 +947,10 @@ MACHINE_CONFIG_START(octopus_state::octopus)
m_rtc->irq_callback().set(m_pic2, FUNC(pic8259_device::ir2_w));
// Keyboard UART
- MCFG_DEVICE_ADD("keyboard", I8251, 0)
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic_slave",pic8259_device, ir4_w))
- MCFG_I8251_DTR_HANDLER(WRITELINE(*this, octopus_state,spk_w))
- MCFG_I8251_RTS_HANDLER(WRITELINE(*this, octopus_state,beep_w))
+ I8251(config, m_kb_uart, 0);
+ m_kb_uart->rxrdy_handler().set("pic_slave", FUNC(pic8259_device::ir4_w));
+ m_kb_uart->dtr_handler().set(FUNC(octopus_state::spk_w));
+ m_kb_uart->rts_handler().set(FUNC(octopus_state::beep_w));
MCFG_DEVICE_ADD("keyboard_port", RS232_PORT, keyboard, "octopus")
MCFG_RS232_RXD_HANDLER(WRITELINE("keyboard", i8251_device, write_rxd))
MCFG_DEVICE_ADD("keyboard_clock_rx", CLOCK, 9600 * 64)
diff --git a/src/mame/drivers/okean240.cpp b/src/mame/drivers/okean240.cpp
index d21bdbbd038..fb30a6eb43a 100644
--- a/src/mame/drivers/okean240.cpp
+++ b/src/mame/drivers/okean240.cpp
@@ -513,10 +513,10 @@ MACHINE_CONFIG_START(okean240_state::okean240t)
MCFG_DEVICE_PROGRAM_MAP(okean240_mem)
MCFG_DEVICE_IO_MAP(okean240t_io)
- MCFG_DEVICE_ADD("uart", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ i8251_device &uart(I8251(config, "uart", 0));
+ uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ uart.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/pc100.cpp b/src/mame/drivers/pc100.cpp
index 8d802d3322c..9316338dfb9 100644
--- a/src/mame/drivers/pc100.cpp
+++ b/src/mame/drivers/pc100.cpp
@@ -662,11 +662,11 @@ MACHINE_CONFIG_START(pc100_state::pc100)
MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0))
MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) // ???
- MCFG_DEVICE_ADD("uart8251", I8251, 0)
- //MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- //MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- //MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir1_w))
+ i8251_device &i8251(I8251(config, "uart8251", 0));
+ //i8251.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ //i8251.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ //i8251.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ i8251.rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir1_w));
MCFG_UPD765A_ADD("upd765", true, true)
MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(*this, pc100_state, irqnmi_w))
diff --git a/src/mame/drivers/pc8401a.cpp b/src/mame/drivers/pc8401a.cpp
index 253e32c1ed1..28987acefe4 100644
--- a/src/mame/drivers/pc8401a.cpp
+++ b/src/mame/drivers/pc8401a.cpp
@@ -587,10 +587,10 @@ MACHINE_CONFIG_START(pc8401a_state::pc8401a)
MCFG_I8255_IN_PORTC_CB(READ8(*this, pc8401a_state, ppi_pc_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pc8401a_state, ppi_pc_w))
- MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
+ i8251_device &uart(I8251(config, I8251_TAG, 0));
+ uart.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ uart.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ uart.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_rxd))
@@ -627,10 +627,10 @@ MACHINE_CONFIG_START(pc8500_state::pc8500)
MCFG_I8255_IN_PORTC_CB(READ8(*this, pc8401a_state, ppi_pc_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pc8401a_state, ppi_pc_w))
- MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
+ i8251_device &uart(I8251(config, I8251_TAG, 0));
+ uart.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ uart.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ uart.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/pc8801.cpp b/src/mame/drivers/pc8801.cpp
index 3a6603dacdc..fcd37b3afd9 100644
--- a/src/mame/drivers/pc8801.cpp
+++ b/src/mame/drivers/pc8801.cpp
@@ -2384,9 +2384,9 @@ MACHINE_CONFIG_START(pc8801_state::pc8801)
MCFG_SOFTWARE_LIST_ADD("tape_list","pc8801_cass")
- MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(*this, pc8801_state, txdata_callback))
- MCFG_I8251_RTS_HANDLER(WRITELINE(*this, pc8801_state, rxrdy_w))
+ i8251_device &i8251(I8251(config, I8251_TAG, 0));
+ i8251.txd_handler().set(FUNC(pc8801_state::txdata_callback));
+ i8251.rts_handler().set(FUNC(pc8801_state::rxrdy_w));
MCFG_FLOPPY_DRIVE_ADD("upd765:0", pc88_floppies, "525hd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("upd765:1", pc88_floppies, "525hd", floppy_image_device::default_floppy_formats)
diff --git a/src/mame/drivers/peoplepc.cpp b/src/mame/drivers/peoplepc.cpp
index 06cc28e0a5b..7aa1abc44ae 100644
--- a/src/mame/drivers/peoplepc.cpp
+++ b/src/mame/drivers/peoplepc.cpp
@@ -296,15 +296,15 @@ MACHINE_CONFIG_START(peoplepc_state::olypeopl)
MCFG_FLOPPY_DRIVE_ADD("upd765:0", peoplepc_floppies, "525qd", peoplepc_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("upd765:1", peoplepc_floppies, "525qd", peoplepc_state::floppy_formats)
- MCFG_DEVICE_ADD("i8251_0", I8251, 0)
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259_1", pic8259_device, ir1_w))
- MCFG_I8251_TXD_HANDLER(WRITELINE("kbd", rs232_port_device, write_txd))
+ I8251(config, m_8251key, 0);
+ m_8251key->rxrdy_handler().set("pic8259_1", FUNC(pic8259_device::ir1_w));
+ m_8251key->txd_handler().set("kbd", FUNC(rs232_port_device::write_txd));
MCFG_DEVICE_ADD("kbd", RS232_PORT, peoplepc_keyboard_devices, "keyboard")
MCFG_RS232_RXD_HANDLER(WRITELINE("i8251_0", i8251_device, write_rxd))
MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("keyboard", keyboard)
- MCFG_DEVICE_ADD("i8251_1", I8251, 0)
+ I8251(config, m_8251ser, 0);
MACHINE_CONFIG_END
ROM_START( olypeopl )
diff --git a/src/mame/drivers/pk8020.cpp b/src/mame/drivers/pk8020.cpp
index 886dbd73f42..854d8efafc4 100644
--- a/src/mame/drivers/pk8020.cpp
+++ b/src/mame/drivers/pk8020.cpp
@@ -233,17 +233,17 @@ MACHINE_CONFIG_START(pk8020_state::pk8020)
MCFG_DEVICE_ADD("pic8259", PIC8259, 0)
MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0))
- MCFG_DEVICE_ADD("i8251line", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir1_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir2_w))
+ I8251(config, m_rs232, 0);
+ m_rs232->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_rs232->rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir1_w));
+ m_rs232->txrdy_handler().set("pic8259", FUNC(pic8259_device::ir2_w));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("i8251line", i8251_device, write_rxd))
MCFG_RS232_CTS_HANDLER(WRITELINE("i8251line", i8251_device, write_cts))
MCFG_RS232_DSR_HANDLER(WRITELINE("i8251line", i8251_device, write_dsr))
- MCFG_DEVICE_ADD("i8251lan", I8251, 0)
+ I8251(config, m_lan, 0);
MCFG_DEVICE_ADD("wd1793", FD1793, 20_MHz_XTAL / 20)
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE("pic8259", pic8259_device, ir7_w))
diff --git a/src/mame/drivers/pmd85.cpp b/src/mame/drivers/pmd85.cpp
index cb17bc0fee6..5572ba5277d 100644
--- a/src/mame/drivers/pmd85.cpp
+++ b/src/mame/drivers/pmd85.cpp
@@ -580,12 +580,13 @@ static const struct CassetteOptions pmd85_cassette_options =
};
/* machine definition */
-MACHINE_CONFIG_START(pmd85_state::pmd85)
+void pmd85_state::pmd85(machine_config &config, bool with_uart)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I8080, 2000000) /* 2.048MHz ??? */
- MCFG_DEVICE_PROGRAM_MAP(pmd85_mem)
- MCFG_DEVICE_IO_MAP(pmd85_io_map)
- MCFG_QUANTUM_TIME(attotime::from_hz(60))
+ I8080(config, m_maincpu, 2000000); /* 2.048MHz ??? */
+ m_maincpu->set_addrmap(AS_PROGRAM, &pmd85_state::pmd85_mem);
+ m_maincpu->set_addrmap(AS_IO, &pmd85_state::pmd85_io_map);
+ config.m_minimum_quantum = attotime::from_hz(60);
/*******************************************************************************
@@ -608,145 +609,148 @@ MACHINE_CONFIG_START(pmd85_state::pmd85)
*******************************************************************************/
- MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
- MCFG_PIT8253_CLK0(0)
- MCFG_PIT8253_CLK1(2000000)
- MCFG_PIT8253_CLK2(1)
+ PIT8253(config, m_pit8253, 0);
+ m_pit8253->set_clk<0>(0);
+ m_pit8253->set_clk<1>(2000000);
+ m_pit8253->set_clk<2>(1);
/* video hardware */
- MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(0)
- MCFG_SCREEN_SIZE(288, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 288-1, 0, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(pmd85_state, screen_update_pmd85)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_color(rgb_t::green());
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(0);
+ screen.set_size(288, 256);
+ screen.set_visarea(0, 288-1, 0, 256-1);
+ screen.set_screen_update(FUNC(pmd85_state::screen_update_pmd85));
+ screen.set_palette("palette");
+
+ PALETTE(config, m_palette, 2);
+ m_palette->set_init("palette", FUNC(palette_device::palette_init_monochrome_highlight));
/* sound hardware */
SPEAKER(config, "mono").front_center();
WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25);
/* cassette */
- MCFG_CASSETTE_ADD("cassette")
- MCFG_CASSETTE_FORMATS(pmd85_cassette_formats)
- MCFG_CASSETTE_CREATE_OPTS(&pmd85_cassette_options)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED)
- MCFG_CASSETTE_INTERFACE("pmd85_cass")
+ CASSETTE(config, m_cassette);
+ m_cassette->set_formats(pmd85_cassette_formats);
+ m_cassette->set_create_opts(&pmd85_cassette_options);
+ m_cassette->set_default_state((cassette_state) (CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED));
+ m_cassette->set_interface("pmd85_cass");
/* software lists */
- MCFG_SOFTWARE_LIST_ADD("cass_list", "pmd85_cass")
+ SOFTWARE_LIST(config, "cass_list").set_original("pmd85_cass");
/* uart */
- MCFG_DEVICE_ADD("uart", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(*this, pmd85_state, write_cas_tx))
+ if (with_uart)
+ {
+ I8251(config, m_uart, 0);
+ m_uart->txd_handler().set(FUNC(pmd85_state::write_cas_tx));
+ }
/* internal ram */
- RAM(config, RAM_TAG).set_default_size("64K");
-MACHINE_CONFIG_END
+ RAM(config, m_ram).set_default_size("64K");
+}
-MACHINE_CONFIG_START(pmd85_state::pmd851)
+void pmd85_state::pmd851(machine_config &config)
+{
pmd85(config);
- MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(*this, pmd85_state, pmd85_ppi_0_porta_r))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, pmd85_state, pmd85_ppi_0_porta_w))
- MCFG_I8255_IN_PORTB_CB(READ8(*this, pmd85_state, pmd85_ppi_0_portb_r))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, pmd85_state, pmd85_ppi_0_portb_w))
- MCFG_I8255_IN_PORTC_CB(READ8(*this, pmd85_state, pmd85_ppi_0_portc_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pmd85_state, pmd85_ppi_0_portc_w))
-
- MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(*this, pmd85_state, pmd85_ppi_1_porta_r))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, pmd85_state, pmd85_ppi_1_porta_w))
- MCFG_I8255_IN_PORTB_CB(READ8(*this, pmd85_state, pmd85_ppi_1_portb_r))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, pmd85_state, pmd85_ppi_1_portb_w))
- MCFG_I8255_IN_PORTC_CB(READ8(*this, pmd85_state, pmd85_ppi_1_portc_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pmd85_state, pmd85_ppi_1_portc_w))
-
- MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(*this, pmd85_state, pmd85_ppi_2_porta_r))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, pmd85_state, pmd85_ppi_2_porta_w))
- MCFG_I8255_IN_PORTB_CB(READ8(*this, pmd85_state, pmd85_ppi_2_portb_r))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, pmd85_state, pmd85_ppi_2_portb_w))
- MCFG_I8255_IN_PORTC_CB(READ8(*this, pmd85_state, pmd85_ppi_2_portc_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pmd85_state, pmd85_ppi_2_portc_w))
-
- MCFG_DEVICE_ADD("ppi8255_3", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(*this, pmd85_state, pmd85_ppi_3_porta_r))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, pmd85_state, pmd85_ppi_3_porta_w))
- MCFG_I8255_IN_PORTB_CB(READ8(*this, pmd85_state, pmd85_ppi_3_portb_r))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, pmd85_state, pmd85_ppi_3_portb_w))
- MCFG_I8255_IN_PORTC_CB(READ8(*this, pmd85_state, pmd85_ppi_3_portc_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pmd85_state, pmd85_ppi_3_portc_w))
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(pmd85_state::pmd852a)
+ I8255(config, m_ppi8255_0, 0);
+ m_ppi8255_0->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_r));
+ m_ppi8255_0->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_r));
+ m_ppi8255_0->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portc_r));
+ m_ppi8255_0->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_w));
+ m_ppi8255_0->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_w));
+ m_ppi8255_0->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portc_w));
+
+ I8255(config, m_ppi8255_1, 0);
+ m_ppi8255_1->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_1_porta_r));
+ m_ppi8255_1->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portb_r));
+ m_ppi8255_1->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portc_r));
+ m_ppi8255_1->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_1_porta_w));
+ m_ppi8255_1->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portb_w));
+ m_ppi8255_1->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portc_w));
+
+ I8255(config, m_ppi8255_2, 0);
+ m_ppi8255_2->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_2_porta_r));
+ m_ppi8255_2->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portb_r));
+ m_ppi8255_2->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portc_r));
+ m_ppi8255_2->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_2_porta_w));
+ m_ppi8255_2->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portb_w));
+ m_ppi8255_2->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portc_w));
+
+ I8255(config, m_ppi8255_3, 0);
+ m_ppi8255_3->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_3_porta_r));
+ m_ppi8255_3->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_3_portb_r));
+ m_ppi8255_3->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_3_portc_r));
+ m_ppi8255_3->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_3_porta_w));
+ m_ppi8255_3->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_3_portb_w));
+ m_ppi8255_3->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_3_portc_w));
+}
+
+void pmd85_state::pmd852a(machine_config &config)
+{
pmd851(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(pmd852a_mem)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &pmd85_state::pmd852a_mem);
+}
-MACHINE_CONFIG_START(pmd85_state::pmd853)
+void pmd85_state::pmd853(machine_config &config)
+{
pmd851(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(pmd853_mem)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &pmd85_state::pmd853_mem);
+}
-MACHINE_CONFIG_START(pmd85_state::alfa)
- pmd85(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(alfa_mem)
-
- MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(*this, pmd85_state, pmd85_ppi_0_porta_r))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, pmd85_state, pmd85_ppi_0_porta_w))
- MCFG_I8255_IN_PORTB_CB(READ8(*this, pmd85_state, pmd85_ppi_0_portb_r))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, pmd85_state, pmd85_ppi_0_portb_w))
- MCFG_I8255_IN_PORTC_CB(READ8(*this, pmd85_state, pmd85_ppi_0_portc_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pmd85_state, pmd85_ppi_0_portc_w))
-
- MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(*this, pmd85_state, pmd85_ppi_1_porta_r))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, pmd85_state, pmd85_ppi_1_porta_w))
- MCFG_I8255_IN_PORTB_CB(READ8(*this, pmd85_state, pmd85_ppi_1_portb_r))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, pmd85_state, pmd85_ppi_1_portb_w))
- MCFG_I8255_IN_PORTC_CB(READ8(*this, pmd85_state, pmd85_ppi_1_portc_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pmd85_state, pmd85_ppi_1_portc_w))
-
- MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(*this, pmd85_state, pmd85_ppi_2_porta_r))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, pmd85_state, pmd85_ppi_2_porta_w))
- MCFG_I8255_IN_PORTB_CB(READ8(*this, pmd85_state, pmd85_ppi_2_portb_r))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, pmd85_state, pmd85_ppi_2_portb_w))
- MCFG_I8255_IN_PORTC_CB(READ8(*this, pmd85_state, pmd85_ppi_2_portc_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pmd85_state, pmd85_ppi_2_portc_w))
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(pmd85_state::mato)
+void pmd85_state::alfa(machine_config &config)
+{
pmd85(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(mato_mem)
- MCFG_DEVICE_IO_MAP(mato_io_map)
-
- MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(*this, pmd85_state, pmd85_ppi_0_porta_r))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, pmd85_state, pmd85_ppi_0_porta_w))
- MCFG_I8255_IN_PORTB_CB(READ8(*this, pmd85_state, mato_ppi_0_portb_r))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, pmd85_state, pmd85_ppi_0_portb_w))
- MCFG_I8255_IN_PORTC_CB(READ8(*this, pmd85_state, mato_ppi_0_portc_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pmd85_state, mato_ppi_0_portc_w))
-
- /* no uart */
- MCFG_DEVICE_REMOVE("uart")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(pmd85_state::c2717)
+ m_maincpu->set_addrmap(AS_PROGRAM, &pmd85_state::alfa_mem);
+
+ I8255(config, m_ppi8255_0, 0);
+ m_ppi8255_0->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_r));
+ m_ppi8255_0->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_r));
+ m_ppi8255_0->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portc_r));
+ m_ppi8255_0->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_w));
+ m_ppi8255_0->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_w));
+ m_ppi8255_0->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portc_w));
+
+ I8255(config, m_ppi8255_1, 0);
+ m_ppi8255_1->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_1_porta_r));
+ m_ppi8255_1->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portb_r));
+ m_ppi8255_1->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portc_r));
+ m_ppi8255_1->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_1_porta_w));
+ m_ppi8255_1->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portb_w));
+ m_ppi8255_1->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portc_w));
+
+ I8255(config, m_ppi8255_2, 0);
+ m_ppi8255_2->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_2_porta_r));
+ m_ppi8255_2->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portb_r));
+ m_ppi8255_2->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portc_r));
+ m_ppi8255_2->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_2_porta_w));
+ m_ppi8255_2->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portb_w));
+ m_ppi8255_2->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portc_w));
+}
+
+void pmd85_state::mato(machine_config &config)
+{
+ pmd85(config, false); /* no uart */
+ m_maincpu->set_addrmap(AS_PROGRAM, &pmd85_state::mato_mem);
+ m_maincpu->set_addrmap(AS_IO, &pmd85_state::mato_io_map);
+
+ I8255(config, m_ppi8255_0, 0);
+ m_ppi8255_0->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_r));
+ m_ppi8255_0->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_w));
+ m_ppi8255_0->in_pb_callback().set(FUNC(pmd85_state::mato_ppi_0_portb_r));
+ m_ppi8255_0->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_w));
+ m_ppi8255_0->in_pc_callback().set(FUNC(pmd85_state::mato_ppi_0_portc_r));
+ m_ppi8255_0->out_pc_callback().set(FUNC(pmd85_state::mato_ppi_0_portc_w));
+}
+
+void pmd85_state::c2717(machine_config &config)
+{
pmd851(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(c2717_mem)
-MACHINE_CONFIG_END
+ m_maincpu->set_addrmap(AS_PROGRAM, &pmd85_state::c2717_mem);
+}
ROM_START(pmd851)
diff --git a/src/mame/drivers/poly88.cpp b/src/mame/drivers/poly88.cpp
index b2736674513..218b727a0e9 100644
--- a/src/mame/drivers/poly88.cpp
+++ b/src/mame/drivers/poly88.cpp
@@ -227,9 +227,9 @@ MACHINE_CONFIG_START(poly88_state::poly88)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED)
/* uart */
- MCFG_DEVICE_ADD("uart", I8251, XTAL(16'588'800) / 9)
- MCFG_I8251_TXD_HANDLER(WRITELINE(*this, poly88_state,write_cas_tx))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, poly88_state,poly88_usart_rxready))
+ I8251(config, m_uart, XTAL(16'588'800) / 9);
+ m_uart->txd_handler().set(FUNC(poly88_state::write_cas_tx));
+ m_uart->rxrdy_handler().set(FUNC(poly88_state::poly88_usart_rxready));
/* snapshot */
MCFG_SNAPSHOT_ADD("snapshot", poly88_state, poly88, "img", 2)
diff --git a/src/mame/drivers/qtsbc.cpp b/src/mame/drivers/qtsbc.cpp
index 4a937b3bebb..7bdc8061e12 100644
--- a/src/mame/drivers/qtsbc.cpp
+++ b/src/mame/drivers/qtsbc.cpp
@@ -493,8 +493,8 @@ MACHINE_CONFIG_START(qtsbc_state::qtsbc)
m_pit->set_clk<1>(4_MHz_XTAL / 2);
m_pit->out_handler<1>().set(m_pit, FUNC(pit8253_device::write_clk2));
- MCFG_DEVICE_ADD("usart", I8251, 0) // U8
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
+ I8251(config, m_usart, 0); // U8
+ m_usart->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE("usart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp
index 727f3b514b1..aa22f3373aa 100644
--- a/src/mame/drivers/rainbow.cpp
+++ b/src/mame/drivers/rainbow.cpp
@@ -3333,11 +3333,11 @@ MACHINE_CONFIG_START(rainbow_state::rainbow)
MCFG_DEVICE_MODIFY("printer")
MCFG_SLOT_DEFAULT_OPTION("printer")
- MCFG_DEVICE_ADD("kbdser", I8251, 24.0734_MHz_XTAL / 5 / 2)
- MCFG_I8251_TXD_HANDLER(WRITELINE(*this, rainbow_state, kbd_tx))
- MCFG_I8251_DTR_HANDLER(WRITELINE(*this, rainbow_state, irq_hi_w))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, rainbow_state, kbd_rxready_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, rainbow_state, kbd_txready_w))
+ I8251(config, m_kbd8251, 24.0734_MHz_XTAL / 5 / 2);
+ m_kbd8251->txd_handler().set(FUNC(rainbow_state::kbd_tx));
+ m_kbd8251->dtr_handler().set(FUNC(rainbow_state::irq_hi_w));
+ m_kbd8251->rxrdy_handler().set(FUNC(rainbow_state::kbd_rxready_w));
+ m_kbd8251->txrdy_handler().set(FUNC(rainbow_state::kbd_txready_w));
MCFG_DEVICE_ADD(LK201_TAG, LK201, 0)
MCFG_LK201_TX_HANDLER(WRITELINE("kbdser", i8251_device, write_rxd))
diff --git a/src/mame/drivers/sage2.cpp b/src/mame/drivers/sage2.cpp
index ce7897bb311..b5cb29a0115 100644
--- a/src/mame/drivers/sage2.cpp
+++ b/src/mame/drivers/sage2.cpp
@@ -445,29 +445,29 @@ MACHINE_CONFIG_START(sage2_state::sage2)
MCFG_PIT8253_CLK2(XTAL(16'000'000)/2/13)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(*this, sage2_state, br2_w))
- MCFG_DEVICE_ADD(I8251_0_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(INPUTLINE(M68000_TAG, M68K_IRQ_5))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(I8259_TAG, pic8259_device, ir2_w))
+ I8251(config, m_usart0, 0);
+ m_usart0->txd_handler().set(RS232_A_TAG, FUNC(rs232_port_device::write_txd));
+ m_usart0->dtr_handler().set(RS232_A_TAG, FUNC(rs232_port_device::write_dtr));
+ m_usart0->rts_handler().set(RS232_A_TAG, FUNC(rs232_port_device::write_rts));
+ m_usart0->rxrdy_handler().set_inputline(M68000_TAG, M68K_IRQ_5);
+ m_usart0->txrdy_handler().set(I8259_TAG, FUNC(pic8259_device::ir2_w));
MCFG_DEVICE_ADD(RS232_A_TAG, RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_0_TAG, i8251_device, write_rxd))
- MCFG_RS232_DSR_HANDLER(WRITELINE(I8251_0_TAG, i8251_device, write_dsr))
- MCFG_RS232_CTS_HANDLER(WRITELINE(I8251_0_TAG, i8251_device, write_cts))
+ MCFG_RS232_RXD_HANDLER(WRITELINE(m_usart0, i8251_device, write_rxd))
+ MCFG_RS232_DSR_HANDLER(WRITELINE(m_usart0, i8251_device, write_dsr))
+ MCFG_RS232_CTS_HANDLER(WRITELINE(m_usart0, i8251_device, write_cts))
MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
- MCFG_DEVICE_ADD(I8251_1_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(I8259_TAG, pic8259_device, ir1_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(I8259_TAG, pic8259_device, ir3_w))
+ I8251(config, m_usart1, 0);
+ m_usart1->txd_handler().set(RS232_B_TAG, FUNC(rs232_port_device::write_txd));
+ m_usart1->dtr_handler().set(RS232_B_TAG, FUNC(rs232_port_device::write_dtr));
+ m_usart1->rts_handler().set(RS232_B_TAG, FUNC(rs232_port_device::write_rts));
+ m_usart1->rxrdy_handler().set(I8259_TAG, FUNC(pic8259_device::ir1_w));
+ m_usart1->txrdy_handler().set(I8259_TAG, FUNC(pic8259_device::ir3_w));
MCFG_DEVICE_ADD(RS232_B_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_1_TAG, i8251_device, write_rxd))
- MCFG_RS232_DSR_HANDLER(WRITELINE(I8251_1_TAG, i8251_device, write_dsr))
+ MCFG_RS232_RXD_HANDLER(WRITELINE(m_usart1, i8251_device, write_rxd))
+ MCFG_RS232_DSR_HANDLER(WRITELINE(m_usart1, i8251_device, write_dsr))
MCFG_UPD765A_ADD(UPD765_TAG, false, false)
MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(*this, sage2_state, fdc_irq))
diff --git a/src/mame/drivers/scopus.cpp b/src/mame/drivers/scopus.cpp
index 762ad4368e7..8c84ebe98b1 100644
--- a/src/mame/drivers/scopus.cpp
+++ b/src/mame/drivers/scopus.cpp
@@ -187,10 +187,10 @@ MACHINE_CONFIG_START(sagitta180_state::sagitta180)
MCFG_I8257_OUT_HRQ_CB(WRITELINE(*this, sagitta180_state, hrq_w))
MCFG_I8257_IN_MEMR_CB(READ8(*this, sagitta180_state, memory_read_byte))
- MCFG_DEVICE_ADD( "uart", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ i8251_device &uart(I8251(config, "uart", 0));
+ uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ uart.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/sdk80.cpp b/src/mame/drivers/sdk80.cpp
index 803f3c28432..ebdc7cd6a2d 100644
--- a/src/mame/drivers/sdk80.cpp
+++ b/src/mame/drivers/sdk80.cpp
@@ -128,10 +128,10 @@ MACHINE_CONFIG_START(sdk80_state::sdk80)
MCFG_DEVICE_PROGRAM_MAP(sdk80_mem)
MCFG_DEVICE_IO_MAP(sdk80_io)
- MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
+ I8251(config, m_usart, 0);
+ m_usart->txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ m_usart->dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ m_usart->rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(I8255A_0_TAG, I8255A, 0)
MCFG_DEVICE_ADD(I8255A_1_TAG, I8255A, 0)
diff --git a/src/mame/drivers/sdk86.cpp b/src/mame/drivers/sdk86.cpp
index 150bc51e7d0..0e73afc4be8 100644
--- a/src/mame/drivers/sdk86.cpp
+++ b/src/mame/drivers/sdk86.cpp
@@ -156,10 +156,10 @@ MACHINE_CONFIG_START(sdk86_state::sdk86)
config.set_default_layout(layout_sdk86);
/* Devices */
- MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_cts))
+ i8251_device &i8251(I8251(config, I8251_TAG, 0));
+ i8251.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ i8251.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ i8251.rts_handler().set(I8251_TAG, FUNC(i8251_device::write_cts));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/seattlecmp.cpp b/src/mame/drivers/seattlecmp.cpp
index dc68997df5b..0d9a1745a07 100644
--- a/src/mame/drivers/seattlecmp.cpp
+++ b/src/mame/drivers/seattlecmp.cpp
@@ -127,12 +127,12 @@ MACHINE_CONFIG_START(seattle_comp_state::seattle)
stc.fout_cb().set("stc", FUNC(am9513_device::source1_w));
// FOUT not shown on schematics, which inexplicably have Source 1 tied to Gate 5
- MCFG_DEVICE_ADD("uart", I8251, XTAL(24'000'000) / 12) // CLOCK on line 49
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic2", pic8259_device, ir1_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE("pic2", pic8259_device, ir5_w))
+ i8251_device &uart(I8251(config, "uart", XTAL(24'000'000) / 12)); // CLOCK on line 49
+ uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ uart.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ uart.rxrdy_handler().set("pic2", FUNC(pic8259_device::ir1_w));
+ uart.txrdy_handler().set("pic2", FUNC(pic8259_device::ir5_w));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/selz80.cpp b/src/mame/drivers/selz80.cpp
index 1c47c6fc10a..281731e6e2f 100644
--- a/src/mame/drivers/selz80.cpp
+++ b/src/mame/drivers/selz80.cpp
@@ -232,10 +232,10 @@ MACHINE_CONFIG_START(selz80_state::selz80)
m_clock->signal_handler().set("uart", FUNC(i8251_device::write_txc));
m_clock->signal_handler().append("uart", FUNC(i8251_device::write_rxc));
- MCFG_DEVICE_ADD("uart", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ i8251_device &uart(I8251(config, "uart", 0));
+ uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ uart.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd))
diff --git a/src/mame/drivers/sg1000.cpp b/src/mame/drivers/sg1000.cpp
index ee03d34b849..c427823a80a 100644
--- a/src/mame/drivers/sg1000.cpp
+++ b/src/mame/drivers/sg1000.cpp
@@ -641,10 +641,10 @@ MACHINE_CONFIG_START(sf7000_state::sf7000)
MCFG_I8255_OUT_PORTB_CB(WRITE8("cent_data_out", output_latch_device, bus_w))
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, sf7000_state, ppi_pc_w))
- MCFG_DEVICE_ADD(UPD8251_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
+ i8251_device &upd8251(I8251(config, UPD8251_TAG, 0));
+ upd8251.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ upd8251.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ upd8251.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(UPD8251_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/sm7238.cpp b/src/mame/drivers/sm7238.cpp
index e66fe8221db..42865b42358 100644
--- a/src/mame/drivers/sm7238.cpp
+++ b/src/mame/drivers/sm7238.cpp
@@ -403,11 +403,11 @@ MACHINE_CONFIG_START(sm7238_state::sm7238)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE("i8251line", i8251_device, write_rxc))
// serial connection to host
- MCFG_DEVICE_ADD("i8251line", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir1_w))
+ I8251(config, m_i8251line, 0);
+ m_i8251line->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_i8251line->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ m_i8251line->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ m_i8251line->rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir1_w));
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "null_modem")
MCFG_RS232_RXD_HANDLER(WRITELINE("i8251line", i8251_device, write_rxd))
@@ -415,17 +415,17 @@ MACHINE_CONFIG_START(sm7238_state::sm7238)
MCFG_RS232_DSR_HANDLER(WRITELINE("i8251line", i8251_device, write_dsr))
// serial connection to KM-035 keyboard
- MCFG_DEVICE_ADD("i8251kbd", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("keyboard", km035_device, write_rxd))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir3_w))
+ I8251(config, m_i8251kbd, 0);
+ m_i8251kbd->txd_handler().set("keyboard", FUNC(km035_device::write_rxd));
+ m_i8251kbd->rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir3_w));
MCFG_DEVICE_ADD("keyboard", KM035, 0)
MCFG_KM035_TX_HANDLER(WRITELINE("i8251kbd", i8251_device, write_rxd))
MCFG_KM035_RTS_HANDLER(WRITELINE("i8251kbd", i8251_device, write_cts))
// serial connection to printer
- MCFG_DEVICE_ADD("i8251prn", I8251, 0)
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir3_w))
+ I8251(config, m_i8251prn, 0);
+ m_i8251prn->rxrdy_handler().set("pic8259", FUNC(pic8259_device::ir3_w));
MCFG_DEVICE_ADD("prtr", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("i8251prn", i8251_device, write_rxd))
diff --git a/src/mame/drivers/softbox.cpp b/src/mame/drivers/softbox.cpp
index eb5e18aa604..1838468f8c0 100644
--- a/src/mame/drivers/softbox.cpp
+++ b/src/mame/drivers/softbox.cpp
@@ -367,10 +367,10 @@ MACHINE_CONFIG_START(softbox_state::softbox)
MCFG_DEVICE_IO_MAP(softbox_io)
// devices
- MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
+ i8251_device &i8251(I8251(config, I8251_TAG, 0));
+ i8251.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ i8251.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ i8251.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/sys9002.cpp b/src/mame/drivers/sys9002.cpp
index 2b2bba65452..70c16c2e744 100644
--- a/src/mame/drivers/sys9002.cpp
+++ b/src/mame/drivers/sys9002.cpp
@@ -151,10 +151,10 @@ MACHINE_CONFIG_START(sys9002_state::sys9002)
uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc));
uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc));
- MCFG_DEVICE_ADD("uart1", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232a", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232a", rs232_port_device, write_rts))
+ i8251_device &uart1(I8251(config, "uart1", 0));
+ uart1.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd));
+ uart1.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr));
+ uart1.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("uart1", i8251_device, write_rxd))
@@ -162,10 +162,10 @@ MACHINE_CONFIG_START(sys9002_state::sys9002)
MCFG_RS232_CTS_HANDLER(WRITELINE("uart1", i8251_device, write_cts))
MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", uart1)
- MCFG_DEVICE_ADD("uart2", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232b", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232b", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232b", rs232_port_device, write_rts))
+ i8251_device &uart2(I8251(config, "uart2", 0));
+ uart2.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd));
+ uart2.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr));
+ uart2.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE("uart2", i8251_device, write_rxd))
diff --git a/src/mame/drivers/tandy2k.cpp b/src/mame/drivers/tandy2k.cpp
index d300282f49e..bd793478727 100644
--- a/src/mame/drivers/tandy2k.cpp
+++ b/src/mame/drivers/tandy2k.cpp
@@ -824,12 +824,12 @@ MACHINE_CONFIG_START(tandy2k_state::tandy2k)
MCFG_I8255_IN_PORTB_CB(READ8(*this, tandy2k_state, ppi_pb_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, tandy2k_state, ppi_pc_w))
- MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, tandy2k_state, rxrdy_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, tandy2k_state, txrdy_w))
+ I8251(config, m_uart, 0);
+ m_uart->txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ m_uart->dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ m_uart->rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
+ m_uart->rxrdy_handler().set(FUNC(tandy2k_state::rxrdy_w));
+ m_uart->txrdy_handler().set(FUNC(tandy2k_state::txrdy_w));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251A_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/tsispch.cpp b/src/mame/drivers/tsispch.cpp
index 22e88d94a70..e6d8fc853bc 100644
--- a/src/mame/drivers/tsispch.cpp
+++ b/src/mame/drivers/tsispch.cpp
@@ -392,13 +392,13 @@ MACHINE_CONFIG_START(tsispch_state::prose2k)
MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0))
/* uarts */
- MCFG_DEVICE_ADD("i8251a_u15", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, tsispch_state, i8251_rxrdy_int))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, tsispch_state, i8251_txrdy_int))
- MCFG_I8251_TXEMPTY_HANDLER(WRITELINE(*this, tsispch_state, i8251_txempty_int))
+ i8251_device &u15(I8251(config, "i8251a_u15", 0));
+ u15.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ u15.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ u15.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ u15.rxrdy_handler().set(FUNC(tsispch_state::i8251_rxrdy_int));
+ u15.txrdy_handler().set(FUNC(tsispch_state::i8251_txrdy_int));
+ u15.txempty_handler().set(FUNC(tsispch_state::i8251_txempty_int));
clock_device &clock(CLOCK(config, "baudclock", 153600));
clock.signal_handler().set("i8251a_u15", FUNC(i8251_device::write_txc));
diff --git a/src/mame/drivers/v102.cpp b/src/mame/drivers/v102.cpp
index 0feb16f30cc..210c1815ac6 100644
--- a/src/mame/drivers/v102.cpp
+++ b/src/mame/drivers/v102.cpp
@@ -96,8 +96,8 @@ MACHINE_CONFIG_START(v102_state::v102)
upd7201_new_device& mpsc(UPD7201_NEW(config, "mpsc", XTAL(18'575'000) / 5)); // divider not verified
mpsc.out_int_callback().set("mainirq", FUNC(input_merger_device::in_w<0>));
- MCFG_DEVICE_ADD("usart", I8251, XTAL(18'575'000) / 5) // divider not verified
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("mainirq", input_merger_device, in_w<1>))
+ i8251_device &usart(I8251(config, "usart", XTAL(18'575'000) / 5)); // divider not verified
+ usart.rxrdy_handler().set("mainirq", FUNC(input_merger_device::in_w<1>));
MCFG_INPUT_MERGER_ANY_HIGH("mainirq")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", 0))
diff --git a/src/mame/drivers/v1050.cpp b/src/mame/drivers/v1050.cpp
index f80a152f79d..1bc28621983 100644
--- a/src/mame/drivers/v1050.cpp
+++ b/src/mame/drivers/v1050.cpp
@@ -1075,9 +1075,9 @@ MACHINE_CONFIG_START(v1050_state::v1050)
MCFG_I8255_IN_PORTA_CB(READ8(I8255A_DISP_TAG, i8255_device, pb_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, v1050_state, m6502_ppi_pc_w))
- MCFG_DEVICE_ADD(I8251A_KB_TAG, I8251, 0/*16_MHz_XTAL/8,*/)
- MCFG_I8251_TXD_HANDLER(WRITELINE(V1050_KEYBOARD_TAG, v1050_keyboard_device, si_w))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, v1050_state, kb_rxrdy_w))
+ I8251(config, m_uart_kb, 0/*16_MHz_XTAL/8,*/);
+ m_uart_kb->txd_handler().set(V1050_KEYBOARD_TAG, FUNC(v1050_keyboard_device::si_w));
+ m_uart_kb->rxrdy_handler().set(FUNC(v1050_state::kb_rxrdy_w));
MCFG_DEVICE_ADD(CLOCK_KB_TAG, CLOCK, 16_MHz_XTAL/4/13/8)
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, v1050_state, write_keyboard_clock))
@@ -1086,12 +1086,12 @@ MACHINE_CONFIG_START(v1050_state::v1050)
MCFG_DEVICE_ADD(V1050_KEYBOARD_TAG, V1050_KEYBOARD, 0)
MCFG_V1050_KEYBOARD_OUT_TX_HANDLER(WRITELINE(I8251A_KB_TAG, i8251_device, write_rxd))
- MCFG_DEVICE_ADD(I8251A_SIO_TAG, I8251, 0/*16_MHz_XTAL/8,*/)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, v1050_state, sio_rxrdy_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, v1050_state, sio_txrdy_w))
+ I8251(config, m_uart_sio, 0/*16_MHz_XTAL/8,*/);
+ m_uart_sio->txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ m_uart_sio->dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ m_uart_sio->rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
+ m_uart_sio->rxrdy_handler().set(FUNC(v1050_state::sio_rxrdy_w));
+ m_uart_sio->txrdy_handler().set(FUNC(v1050_state::sio_txrdy_w));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(I8251A_SIO_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/v550.cpp b/src/mame/drivers/v550.cpp
index e140b347155..546efa12438 100644
--- a/src/mame/drivers/v550.cpp
+++ b/src/mame/drivers/v550.cpp
@@ -34,6 +34,7 @@ public:
, m_maincpu(*this, "maincpu")
, m_screen(*this, "screen")
, m_chargen(*this, "chargen")
+ , m_usart(*this, "usart")
{ }
void v550(machine_config &config);
@@ -52,6 +53,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_region_ptr<u8> m_chargen;
+ required_device<i8251_device> m_usart;
};
@@ -68,8 +70,8 @@ void v550_state::io_map(address_map &map)
map(0x00, 0x01).rw("gdc", FUNC(upd7220_device::read), FUNC(upd7220_device::write));
map(0x10, 0x10).w("brg1", FUNC(com8116_device::stt_str_w));
map(0x20, 0x23).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x30, 0x30).rw("usart", FUNC(i8251_device::data_r), FUNC(i8251_device::data_w));
- map(0x31, 0x31).rw("usart", FUNC(i8251_device::status_r), FUNC(i8251_device::control_w));
+ map(0x30, 0x30).rw(m_usart, FUNC(i8251_device::data_r), FUNC(i8251_device::data_w));
+ map(0x31, 0x31).rw(m_usart, FUNC(i8251_device::status_r), FUNC(i8251_device::control_w));
map(0x40, 0x40).rw("mpsc", FUNC(upd7201_new_device::da_r), FUNC(upd7201_new_device::da_w));
map(0x41, 0x41).rw("mpsc", FUNC(upd7201_new_device::ca_r), FUNC(upd7201_new_device::ca_w));
map(0x48, 0x48).rw("mpsc", FUNC(upd7201_new_device::db_r), FUNC(upd7201_new_device::db_w));
@@ -102,7 +104,7 @@ INPUT_PORTS_END
void v550_state::machine_start()
{
- subdevice<i8251_device>("usart")->write_cts(0);
+ m_usart->write_cts(0);
}
MACHINE_CONFIG_START(v550_state::v550)
@@ -117,8 +119,8 @@ MACHINE_CONFIG_START(v550_state::v550)
MCFG_DEVICE_ADD("ppi", I8255, 0) // NEC D8255AC-5
- MCFG_DEVICE_ADD("usart", I8251, 34.846_MHz_XTAL / 16) // NEC D8251AC
- MCFG_I8251_RXRDY_HANDLER(WRITELINE("mainint", input_merger_device, in_w<1>))
+ I8251(config, m_usart, 34.846_MHz_XTAL / 16); // NEC D8251AC
+ m_usart->rxrdy_handler().set("mainint", FUNC(input_merger_device::in_w<1>));
upd7201_new_device& mpsc(UPD7201_NEW(config, "mpsc", 34.846_MHz_XTAL / 16)); // NEC D7201C
mpsc.out_int_callback().set("mainint", FUNC(input_merger_device::in_w<0>));
diff --git a/src/mame/drivers/vector4.cpp b/src/mame/drivers/vector4.cpp
index ed4b62df819..e73108e1973 100644
--- a/src/mame/drivers/vector4.cpp
+++ b/src/mame/drivers/vector4.cpp
@@ -82,30 +82,30 @@ MACHINE_CONFIG_START(vector4_state::vector4)
uart_clock.signal_handler().append("uart3", FUNC(i8251_device::write_txc));
uart_clock.signal_handler().append("uart3", FUNC(i8251_device::write_rxc));
- MCFG_DEVICE_ADD("uart1", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232a", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232a", rs232_port_device, write_rts))
+ i8251_device &uart1(I8251(config, "uart1", 0));
+ uart1.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd));
+ uart1.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr));
+ uart1.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE("uart1", i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(WRITELINE("uart1", i8251_device, write_dsr))
MCFG_RS232_CTS_HANDLER(WRITELINE("uart1", i8251_device, write_cts))
- MCFG_DEVICE_ADD("uart2", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232b", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232b", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232b", rs232_port_device, write_rts))
+ i8251_device &uart2(I8251(config, "uart2", 0));
+ uart2.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd));
+ uart2.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr));
+ uart2.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("uart2", i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(WRITELINE("uart2", i8251_device, write_dsr))
MCFG_RS232_CTS_HANDLER(WRITELINE("uart2", i8251_device, write_cts))
- MCFG_DEVICE_ADD("uart3", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232c", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232c", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232c", rs232_port_device, write_rts))
+ i8251_device &uart3(I8251(config, "uart3", 0));
+ uart3.txd_handler().set("rs232c", FUNC(rs232_port_device::write_txd));
+ uart3.dtr_handler().set("rs232c", FUNC(rs232_port_device::write_dtr));
+ uart3.rts_handler().set("rs232c", FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD("rs232c", RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE("uart3", i8251_device, write_rxd))
diff --git a/src/mame/drivers/vixen.cpp b/src/mame/drivers/vixen.cpp
index 19455fbff65..9f0bf04d2be 100644
--- a/src/mame/drivers/vixen.cpp
+++ b/src/mame/drivers/vixen.cpp
@@ -775,12 +775,12 @@ MACHINE_CONFIG_START(vixen_state::vixen)
i8155_io.out_pc_callback().set(FUNC(vixen_state::io_i8155_pc_w));
i8155_io.out_to_callback().set(FUNC(vixen_state::io_i8155_to_w));
- MCFG_DEVICE_ADD(P8251A_TAG, I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, vixen_state, rxrdy_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, vixen_state, txrdy_w))
+ I8251(config, m_usart, 0);
+ m_usart->txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
+ m_usart->dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
+ m_usart->rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
+ m_usart->rxrdy_handler().set(FUNC(vixen_state::rxrdy_w));
+ m_usart->txrdy_handler().set(FUNC(vixen_state::txrdy_w));
MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(P8251A_TAG, i8251_device, write_rxd))
diff --git a/src/mame/drivers/votrpss.cpp b/src/mame/drivers/votrpss.cpp
index 8ea03ea7a6d..ffa77f2d290 100644
--- a/src/mame/drivers/votrpss.cpp
+++ b/src/mame/drivers/votrpss.cpp
@@ -266,10 +266,10 @@ MACHINE_CONFIG_START(votrpss_state::votrpss)
MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0)
MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(votrpss_state, kbd_put))
- MCFG_DEVICE_ADD("uart", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ i8251_device &uart(I8251(config, "uart", 0));
+ uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ uart.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
// when serial is chosen, and you select terminal, nothing shows (by design). You can only type commands in.
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
diff --git a/src/mame/drivers/vt240.cpp b/src/mame/drivers/vt240.cpp
index b530fb2fb55..938eaf4142b 100644
--- a/src/mame/drivers/vt240.cpp
+++ b/src/mame/drivers/vt240.cpp
@@ -687,11 +687,11 @@ MACHINE_CONFIG_START(vt240_state::vt240)
MCFG_MC68681_B_TX_CALLBACK(WRITELINE("printer", rs232_port_device, write_txd))
MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(*this, vt240_state, duartout_w))
- MCFG_DEVICE_ADD("i8251", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE(*this, vt240_state, tx_w))
- MCFG_I8251_DTR_HANDLER(WRITELINE(*this, vt240_state, lben_w))
- MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, vt240_state, irq9_w))
- MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, vt240_state, irq7_w))
+ I8251(config, m_i8251, 0);
+ m_i8251->txd_handler().set(FUNC(vt240_state::tx_w));
+ m_i8251->dtr_handler().set(FUNC(vt240_state::lben_w));
+ m_i8251->rxrdy_handler().set(FUNC(vt240_state::irq9_w));
+ m_i8251->txrdy_handler().set(FUNC(vt240_state::irq7_w));
MCFG_DEVICE_ADD("lk201", LK201, 0)
MCFG_LK201_TX_HANDLER(WRITELINE("i8251", i8251_device, write_rxd))
@@ -718,9 +718,8 @@ MACHINE_CONFIG_START(vt240_state::mc7105)
MCFG_DEVICE_ADD("ms7004", MS7004, 0)
MCFG_MS7004_TX_HANDLER(WRITELINE("i8251", i8251_device, write_rxd))
- MCFG_DEVICE_MODIFY("i8251")
- MCFG_I8251_TXD_HANDLER(NOOP)
- //MCFG_I8251_TXD_HANDLER(WRITELINE("ms7004", ms7004_device, rx_w))
+ m_i8251->txd_handler().set_nop();
+ //m_i8251->txd_handler().set("ms7004", FUNC(ms7004_device::rx_w));
// baud rate is supposed to be 4800 but keyboard is slightly faster
MCFG_DEVICE_REMOVE("keyboard_clock")
diff --git a/src/mame/drivers/xor100.cpp b/src/mame/drivers/xor100.cpp
index 471f5353922..3bfebda64f9 100644
--- a/src/mame/drivers/xor100.cpp
+++ b/src/mame/drivers/xor100.cpp
@@ -486,24 +486,24 @@ MACHINE_CONFIG_START(xor100_state::xor100)
MCFG_DEVICE_IO_MAP(xor100_io)
/* devices */
- MCFG_DEVICE_ADD(I8251_A_TAG, I8251, 0/*8_MHz_XTAL / 2,*/)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_rts))
+ I8251(config, m_uart_a, 0/*8_MHz_XTAL / 2,*/);
+ m_uart_a->txd_handler().set(RS232_A_TAG, FUNC(rs232_port_device::write_txd));
+ m_uart_a->dtr_handler().set(RS232_A_TAG, FUNC(rs232_port_device::write_dtr));
+ m_uart_a->rts_handler().set(RS232_A_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_A_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_A_TAG, i8251_device, write_rxd))
- MCFG_RS232_DSR_HANDLER(WRITELINE(I8251_A_TAG, i8251_device, write_dsr))
+ MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart_a, i8251_device, write_rxd))
+ MCFG_RS232_DSR_HANDLER(WRITELINE(m_uart_a, i8251_device, write_dsr))
- MCFG_DEVICE_ADD(I8251_B_TAG, I8251, 0/*8_MHz_XTAL / 2,*/)
- MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_rts))
+ I8251(config, m_uart_b, 0/*8_MHz_XTAL / 2,*/);
+ m_uart_b->txd_handler().set(RS232_B_TAG, FUNC(rs232_port_device::write_txd));
+ m_uart_b->dtr_handler().set(RS232_B_TAG, FUNC(rs232_port_device::write_dtr));
+ m_uart_b->rts_handler().set(RS232_B_TAG, FUNC(rs232_port_device::write_rts));
MCFG_DEVICE_ADD(RS232_B_TAG, RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE(I8251_B_TAG, i8251_device, write_rxd))
- MCFG_RS232_DSR_HANDLER(WRITELINE(I8251_B_TAG, i8251_device, write_dsr))
- MCFG_RS232_CTS_HANDLER(WRITELINE(I8251_B_TAG, i8251_device, write_cts))
+ MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart_b, i8251_device, write_rxd))
+ MCFG_RS232_DSR_HANDLER(WRITELINE(m_uart_b, i8251_device, write_dsr))
+ MCFG_RS232_CTS_HANDLER(WRITELINE(m_uart_b, i8251_device, write_cts))
com8116_device &brg(COM8116(config, COM5016_TAG, 5.0688_MHz_XTAL));
brg.fr_handler().set(m_uart_a, FUNC(i8251_device::write_txc));
diff --git a/src/mame/includes/pmd85.h b/src/mame/includes/pmd85.h
index 26d5a7c9723..8d7e254b1a7 100644
--- a/src/mame/includes/pmd85.h
+++ b/src/mame/includes/pmd85.h
@@ -53,7 +53,7 @@ public:
m_leds(*this, "led%u", 0U)
{ }
- void pmd85(machine_config &config);
+ void pmd85(machine_config &config, bool with_uart = true);
void pmd851(machine_config &config);
void pmd853(machine_config &config);
void pmd852a(machine_config &config);