summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Roberto Fresca <robbie@robertofresca.com>2018-10-19 21:26:45 +0200
committer Roberto Fresca <robbie@robertofresca.com>2018-10-19 21:26:45 +0200
commitabf0b1994aef0588b37101c70a01c3a99ecc3137 (patch)
treeb874b5b347d0f949b7df60d2720152bf811c90e3
parent24aff9c0314921e77e2a5fa88a9f393676cfa47d (diff)
parentc19574d00336caeeffb7fee8de5031847183d5ea (diff)
Merge branch 'master' of https://github.com/mamedev/mame
-rw-r--r--src/devices/bus/compucolor/floppy.h20
-rw-r--r--src/devices/machine/mb87030.cpp7
-rw-r--r--src/devices/machine/tms9914.h59
-rw-r--r--src/mame/drivers/bw12.cpp18
-rw-r--r--src/mame/drivers/bw2.cpp6
-rw-r--r--src/mame/drivers/c900.cpp6
-rw-r--r--src/mame/drivers/cgc7900.cpp12
-rw-r--r--src/mame/drivers/cgenie.cpp6
-rw-r--r--src/mame/drivers/cit101.cpp61
-rw-r--r--src/mame/drivers/clcd.cpp10
-rw-r--r--src/mame/drivers/compucolor.cpp12
-rw-r--r--src/mame/drivers/cybiko.cpp20
-rw-r--r--src/mame/drivers/decstation.cpp18
-rw-r--r--src/mame/drivers/dectalk.cpp6
-rw-r--r--src/mame/drivers/decwritr.cpp6
-rw-r--r--src/mame/drivers/dvk_ksm.cpp10
-rw-r--r--src/mame/drivers/ep64.cpp8
-rw-r--r--src/mame/drivers/fccpu30.cpp24
-rw-r--r--src/mame/drivers/fmtowns.cpp8
-rw-r--r--src/mame/drivers/force68k.cpp12
-rw-r--r--src/mame/drivers/gkigt.cpp6
-rw-r--r--src/mame/drivers/gridcomp.cpp23
-rw-r--r--src/mame/drivers/guab.cpp8
-rw-r--r--src/mame/drivers/h89.cpp19
-rw-r--r--src/mame/drivers/hk68v10.cpp6
-rw-r--r--src/mame/drivers/hp_ipc.cpp23
-rw-r--r--src/mame/drivers/ibm6580.cpp16
-rw-r--r--src/mame/drivers/isbc.cpp50
-rw-r--r--src/mame/drivers/isbc8010.cpp16
-rw-r--r--src/mame/drivers/kyocera.cpp18
-rw-r--r--src/mame/drivers/mcb216.cpp8
-rw-r--r--src/mame/drivers/mitchell.cpp61
-rw-r--r--src/mame/drivers/namcofl.cpp1
-rw-r--r--src/mame/drivers/pcat_dyn.cpp14
-rw-r--r--src/mame/drivers/pk8020.cpp8
-rw-r--r--src/mame/drivers/px4.cpp10
-rw-r--r--src/mame/drivers/qx10.cpp10
-rw-r--r--src/mame/drivers/rainbow.cpp41
-rw-r--r--src/mame/drivers/rex6000.cpp24
-rw-r--r--src/mame/drivers/sdk80.cpp29
-rw-r--r--src/mame/drivers/sdk86.cpp23
-rw-r--r--src/mame/drivers/sitcom.cpp4
-rw-r--r--src/mame/drivers/sm7238.cpp16
-rw-r--r--src/mame/drivers/twinkle.cpp26
-rw-r--r--src/mame/drivers/unixpc.cpp8
-rw-r--r--src/mame/drivers/vt240.cpp18
-rw-r--r--src/mame/machine/cit101_kbd.h12
-rw-r--r--src/mame/video/namcofl.cpp3
48 files changed, 392 insertions, 438 deletions
diff --git a/src/devices/bus/compucolor/floppy.h b/src/devices/bus/compucolor/floppy.h
index e879517a30b..63e9c78782a 100644
--- a/src/devices/bus/compucolor/floppy.h
+++ b/src/devices/bus/compucolor/floppy.h
@@ -16,17 +16,6 @@
#include "imagedev/floppy.h"
-
-//**************************************************************************
-// INTERFACE MACROS
-//**************************************************************************
-
-#define MCFG_COMPUCOLOR_FLOPPY_PORT_ADD(_tag, _slot_intf, _def_slot) \
- MCFG_DEVICE_ADD(_tag, COMPUCOLOR_FLOPPY_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -50,6 +39,15 @@ protected:
class compucolor_floppy_port_device : public rs232_port_device
{
public:
+ template <typename T>
+ compucolor_floppy_port_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt)
+ : rs232_port_device(mconfig, tag, owner, 0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
compucolor_floppy_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_WRITE_LINE_MEMBER( rw_w ) { if (m_dev) m_dev->rw_w(state); }
diff --git a/src/devices/machine/mb87030.cpp b/src/devices/machine/mb87030.cpp
index 8cafde3ba11..41b08682e81 100644
--- a/src/devices/machine/mb87030.cpp
+++ b/src/devices/machine/mb87030.cpp
@@ -408,6 +408,9 @@ void mb87030_device::step(bool timeout)
case State::TransferSendAck:
+ if (!(ctrl & S_INP))
+ m_temp = data;
+
scsi_set_ctrl(S_ACK, S_ACK);
scsi_bus->ctrl_wait(scsi_refid, 0, S_REQ);
@@ -582,7 +585,7 @@ WRITE8_MEMBER(mb87030_device::scmd_w)
case SCMD_CMD_SET_ACK_REQ:
LOG("%s: Set ACK/REQ\n", __FUNCTION__);
if (m_ssts & SSTS_INIT_CONNECTED) {
- if (m_pctl & 1) {
+ if (scsi_bus->ctrl_r() & S_INP) {
m_temp = scsi_bus->data_r();
} else {
scsi_bus->data_w(scsi_refid, m_temp);
@@ -701,7 +704,7 @@ WRITE8_MEMBER(mb87030_device::dreg_w)
READ8_MEMBER(mb87030_device::temp_r)
{
- m_temp = scsi_bus->data_r();
+ step(false);
LOG("%s: %02X\n", __FUNCTION__, m_temp);
return m_temp;
diff --git a/src/devices/machine/tms9914.h b/src/devices/machine/tms9914.h
index 08b413af2d9..14df9d80647 100644
--- a/src/devices/machine/tms9914.h
+++ b/src/devices/machine/tms9914.h
@@ -35,44 +35,6 @@
#pragma once
-// Set read and write callbacks to access DIO bus on IEEE-488
-#define MCFG_TMS9914_DIO_READWRITE_CB(_read , _write) \
- downcast<tms9914_device &>(*device).set_dio_read_cb(DEVCB_##_read); \
- downcast<tms9914_device &>(*device).set_dio_write_cb(DEVCB_##_write);
-
-// Set write callbacks to access uniline signals on IEEE-488
-#define MCFG_TMS9914_EOI_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_488_signal_write_cb(tms9914_device::IEEE_488_EOI , DEVCB_##_write);
-
-#define MCFG_TMS9914_DAV_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_488_signal_write_cb(tms9914_device::IEEE_488_DAV , DEVCB_##_write);
-
-#define MCFG_TMS9914_NRFD_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_488_signal_write_cb(tms9914_device::IEEE_488_NRFD , DEVCB_##_write);
-
-#define MCFG_TMS9914_NDAC_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_488_signal_write_cb(tms9914_device::IEEE_488_NDAC , DEVCB_##_write);
-
-#define MCFG_TMS9914_IFC_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_488_signal_write_cb(tms9914_device::IEEE_488_IFC , DEVCB_##_write);
-
-#define MCFG_TMS9914_SRQ_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_488_signal_write_cb(tms9914_device::IEEE_488_SRQ , DEVCB_##_write);
-
-#define MCFG_TMS9914_ATN_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_488_signal_write_cb(tms9914_device::IEEE_488_ATN , DEVCB_##_write);
-
-#define MCFG_TMS9914_REN_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_488_signal_write_cb(tms9914_device::IEEE_488_REN , DEVCB_##_write);
-
-// Set write callback for INT signal
-#define MCFG_TMS9914_INT_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_int_write_cb(DEVCB_##_write);
-
-// Set write callback for ACCRQ signal
-#define MCFG_TMS9914_ACCRQ_WRITE_CB(_write) \
- downcast<tms9914_device &>(*device).set_accrq_write_cb(DEVCB_##_write);
-
class tms9914_device : public device_t
{
public:
@@ -92,23 +54,11 @@ public:
IEEE_488_SIGNAL_COUNT
};
- template <class Object> devcb_base& set_dio_read_cb(Object &&cb)
- { return m_dio_read_func.set_callback(std::forward<Object>(cb)); }
-
- template <class Object> devcb_base& set_dio_write_cb(Object &&cb)
- { return m_dio_write_func.set_callback(std::forward<Object>(cb)); }
-
- template <class Object> devcb_base& set_488_signal_write_cb(ieee_488_signal_t signal , Object &&cb)
- { return m_signal_wr_fns[ signal ].set_callback(std::forward<Object>(cb)); }
-
- template <class Object> devcb_base& set_int_write_cb(Object &&cb)
- { return m_int_write_func.set_callback(std::forward<Object>(cb)); }
-
- template <class Object> devcb_base& set_accrq_write_cb(Object &&cb)
- { return m_accrq_write_func.set_callback(std::forward<Object>(cb)); }
-
+ // Set read and write callbacks to access DIO bus on IEEE-488
auto dio_read_cb() { return m_dio_read_func.bind(); }
auto dio_write_cb() { return m_dio_write_func.bind(); }
+
+ // Set write callbacks to access uniline signals on IEEE-488
auto eoi_write_cb() { return m_signal_wr_fns[IEEE_488_EOI].bind(); }
auto dav_write_cb() { return m_signal_wr_fns[IEEE_488_DAV].bind(); }
auto nrfd_write_cb() { return m_signal_wr_fns[IEEE_488_NRFD].bind(); }
@@ -118,7 +68,10 @@ public:
auto atn_write_cb() { return m_signal_wr_fns[IEEE_488_ATN].bind(); }
auto ren_write_cb() { return m_signal_wr_fns[IEEE_488_REN].bind(); }
+ // Set write callback for INT signal
auto int_write_cb() { return m_int_write_func.bind(); }
+
+ // Set write callback for ACCRQ signal
auto accrq_write_cb() { return m_accrq_write_func.bind(); }
DECLARE_WRITE_LINE_MEMBER(eoi_w);
diff --git a/src/mame/drivers/bw12.cpp b/src/mame/drivers/bw12.cpp
index 1a26bd62754..dc4b8ad955e 100644
--- a/src/mame/drivers/bw12.cpp
+++ b/src/mame/drivers/bw12.cpp
@@ -602,7 +602,7 @@ MACHINE_CONFIG_START(bw12_state::common)
MCFG_PIT8253_CLK0(XTAL(1'843'200))
MCFG_PIT8253_OUT0_HANDLER(WRITELINE(*this, bw12_state, pit_out0_w))
MCFG_PIT8253_CLK1(XTAL(1'843'200))
- MCFG_PIT8253_OUT1_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, rxtxcb_w))
+ MCFG_PIT8253_OUT1_HANDLER(WRITELINE(m_sio, z80dart_device, rxtxcb_w))
MCFG_PIT8253_CLK2(XTAL(1'843'200))
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(*this, bw12_state, pit_out2_w))
@@ -620,15 +620,15 @@ MACHINE_CONFIG_START(bw12_state::common)
m_kbc->control().set(FUNC(bw12_state::ay3600_control_r));
m_kbc->data_ready().set(FUNC(bw12_state::ay3600_data_ready_w));
- MCFG_DEVICE_ADD(RS232_A_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, rxa_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, dcda_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, ctsa_w))
+ rs232_port_device &rs232a(RS232_PORT(config, RS232_A_TAG, default_rs232_devices, nullptr));
+ rs232a.rxd_handler().set(m_sio, FUNC(z80dart_device::rxa_w));
+ rs232a.dcd_handler().set(m_sio, FUNC(z80dart_device::dcda_w));
+ rs232a.cts_handler().set(m_sio, FUNC(z80dart_device::ctsa_w));
- MCFG_DEVICE_ADD(RS232_B_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, rxb_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, dcdb_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE(Z80SIO_TAG, z80dart_device, ctsb_w))
+ rs232_port_device &rs232b(RS232_PORT(config, RS232_B_TAG, default_rs232_devices, nullptr));
+ rs232b.rxd_handler().set(m_sio, FUNC(z80dart_device::rxb_w));
+ rs232b.dcd_handler().set(m_sio, FUNC(z80dart_device::dcdb_w));
+ rs232b.cts_handler().set(m_sio, FUNC(z80dart_device::ctsb_w));
/* printer */
MCFG_DEVICE_ADD(CENTRONICS_TAG, CENTRONICS, centronics_devices, "printer")
diff --git a/src/mame/drivers/bw2.cpp b/src/mame/drivers/bw2.cpp
index 564a3d000af..4840fde41f5 100644
--- a/src/mame/drivers/bw2.cpp
+++ b/src/mame/drivers/bw2.cpp
@@ -588,9 +588,9 @@ MACHINE_CONFIG_START(bw2_state::bw2)
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))
- MCFG_RS232_DSR_HANDLER(WRITELINE(m_uart, i8251_device, write_dsr))
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_uart, FUNC(i8251_device::write_rxd));
+ rs232.dsr_handler().set(m_uart, FUNC(i8251_device::write_dsr));
WD2797(config, m_fdc, 16_MHz_XTAL / 16);
m_fdc->intrq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
diff --git a/src/mame/drivers/c900.cpp b/src/mame/drivers/c900.cpp
index 40ba63b7b8a..6be497e54ce 100644
--- a/src/mame/drivers/c900.cpp
+++ b/src/mame/drivers/c900.cpp
@@ -112,9 +112,9 @@ MACHINE_CONFIG_START(c900_state::c900)
scc.out_rtsb_callback().set("rs232", FUNC(rs232_port_device::write_rts));
//scc.out_int_callback().set("rs232", FUNC(c900_state::scc_int));
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER (WRITELINE ("scc", scc8030_device, rxb_w))
- MCFG_RS232_CTS_HANDLER (WRITELINE ("scc", scc8030_device, ctsb_w))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
+ rs232.rxd_handler().set("scc", FUNC(scc8030_device::rxb_w));
+ rs232.cts_handler().set("scc", FUNC(scc8030_device::ctsb_w));
MACHINE_CONFIG_END
ROM_START( c900 )
diff --git a/src/mame/drivers/cgc7900.cpp b/src/mame/drivers/cgc7900.cpp
index d14c727179c..ae9e76055a4 100644
--- a/src/mame/drivers/cgc7900.cpp
+++ b/src/mame/drivers/cgc7900.cpp
@@ -505,9 +505,9 @@ MACHINE_CONFIG_START(cgc7900_state::cgc7900)
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))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "null_modem"));
+ rs232.rxd_handler().set(m_i8251_0, FUNC(i8251_device::write_rxd));
+ rs232.dsr_handler().set(m_i8251_0, FUNC(i8251_device::write_dsr));
I8251(config, m_i8251_1, 0);
m_i8251_1->txd_handler().set("rs449", FUNC(rs232_port_device::write_txd));
@@ -516,9 +516,9 @@ MACHINE_CONFIG_START(cgc7900_state::cgc7900)
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))
- MCFG_RS232_DSR_HANDLER(WRITELINE(INS8251_1_TAG, i8251_device, write_dsr))
+ rs232_port_device &rs449(RS232_PORT(config, "rs449", default_rs232_devices, nullptr));
+ rs449.rxd_handler().set(m_i8251_1, FUNC(i8251_device::write_rxd));
+ rs449.dsr_handler().set(m_i8251_1, FUNC(i8251_device::write_dsr));
MACHINE_CONFIG_END
/***************************************************************************
diff --git a/src/mame/drivers/cgenie.cpp b/src/mame/drivers/cgenie.cpp
index d725aff113d..491d06eca38 100644
--- a/src/mame/drivers/cgenie.cpp
+++ b/src/mame/drivers/cgenie.cpp
@@ -472,9 +472,9 @@ MACHINE_CONFIG_START(cgenie_state::cgenie)
MCFG_SOFTWARE_LIST_ADD("cass_list", "cgenie_cass")
// serial port
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(*this, cgenie_state, rs232_rx_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(*this, cgenie_state, rs232_dcd_w))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(FUNC(cgenie_state::rs232_rx_w));
+ rs232.dcd_handler().set(FUNC(cgenie_state::rs232_dcd_w));
// cartridge expansion slot
MCFG_CG_EXP_SLOT_ADD("exp")
diff --git a/src/mame/drivers/cit101.cpp b/src/mame/drivers/cit101.cpp
index 0f450b1276b..5d1049db3c2 100644
--- a/src/mame/drivers/cit101.cpp
+++ b/src/mame/drivers/cit101.cpp
@@ -69,7 +69,6 @@ class cit101_state : public driver_device
public:
cit101_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
, m_screen(*this, "screen")
, m_nvr(*this, "nvr")
, m_comuart(*this, "comuart")
@@ -108,7 +107,6 @@ private:
bool m_blink;
u8 m_brightness;
- required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<er2055_device> m_nvr;
required_device<i8251_device> m_comuart;
@@ -329,18 +327,19 @@ static INPUT_PORTS_START( cit101 )
INPUT_PORTS_END
-MACHINE_CONFIG_START(cit101_state::cit101)
- MCFG_DEVICE_ADD("maincpu", I8085A, 6.144_MHz_XTAL)
- MCFG_DEVICE_PROGRAM_MAP(mem_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_I8085A_SID(CONSTANT(0)) // used to time NVR reads
- MCFG_I8085A_SOD(WRITELINE(*this, cit101_state, blink_w))
-
- MCFG_SCREEN_ADD("screen", RASTER)
- //MCFG_SCREEN_RAW_PARAMS(14.976_MHz_XTAL, 960, 0, 800, 260, 0, 240)
- MCFG_SCREEN_RAW_PARAMS(22.464_MHz_XTAL, 1440, 0, 1188, 260, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(cit101_state, screen_update)
- MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", I8085_RST75_LINE))
+void cit101_state::cit101(machine_config &config)
+{
+ i8085a_cpu_device &maincpu(I8085A(config, "maincpu", 6.144_MHz_XTAL));
+ maincpu.set_addrmap(AS_PROGRAM, &cit101_state::mem_map);
+ maincpu.set_addrmap(AS_IO, &cit101_state::io_map);
+ maincpu.in_sid_func().set_constant(0); // used to time NVR reads
+ maincpu.out_sod_func().set(FUNC(cit101_state::blink_w));
+
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ //m_screen->set_raw(14.976_MHz_XTAL, 960, 0, 800, 260, 0, 240);
+ m_screen->set_raw(22.464_MHz_XTAL, 1440, 0, 1188, 260, 0, 240);
+ m_screen->set_screen_update(FUNC(cit101_state::screen_update));
+ m_screen->screen_vblank().set_inputline("maincpu", I8085_RST75_LINE);
I8251(config, m_comuart, 6.144_MHz_XTAL / 2);
m_comuart->txd_handler().set("comm", FUNC(rs232_port_device::write_txd));
@@ -349,9 +348,9 @@ MACHINE_CONFIG_START(cit101_state::cit101)
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))
- MCFG_RS232_DSR_HANDLER(WRITELINE("comuart", i8251_device, write_dsr))
+ rs232_port_device &comm(RS232_PORT(config, "comm", default_rs232_devices, nullptr));
+ comm.rxd_handler().set("comuart", FUNC(i8251_device::write_rxd));
+ comm.dsr_handler().set("comuart", FUNC(i8251_device::write_dsr));
// 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
@@ -360,26 +359,24 @@ MACHINE_CONFIG_START(cit101_state::cit101)
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))
- MCFG_RS232_CTS_HANDLER(WRITELINE("auxuart", i8251_device, write_cts))
+ rs232_port_device &printer(RS232_PORT(config, "printer", default_rs232_devices, nullptr));
+ printer.rxd_handler().set("auxuart", FUNC(i8251_device::write_rxd));
+ printer.cts_handler().set("auxuart", FUNC(i8251_device::write_cts));
- MCFG_INPUT_MERGER_ANY_HIGH("uartint")
- MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", I8085_RST55_LINE))
+ INPUT_MERGER_ANY_HIGH(config, "uartint").output_handler().set_inputline("maincpu", I8085_RST55_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))
+ CIT101_HLE_KEYBOARD(config, "keyboard").txd_callback().set("kbduart", FUNC(i8251_device::write_rxd));
- MCFG_DEVICE_ADD("pit0", PIT8253, 0)
- MCFG_PIT8253_CLK0(6.144_MHz_XTAL / 4)
- MCFG_PIT8253_CLK1(6.144_MHz_XTAL / 4)
- //MCFG_PIT8253_CLK2(6.144_MHz_XTAL / 4)
- MCFG_PIT8253_OUT0_HANDLER(WRITELINE("auxuart", i8251_device, write_txc))
- MCFG_PIT8253_OUT1_HANDLER(WRITELINE("auxuart", i8251_device, write_rxc))
+ pit8253_device &pit0(PIT8253(config, "pit0", 0));
+ pit0.set_clk<0>(6.144_MHz_XTAL / 4);
+ pit0.set_clk<1>(6.144_MHz_XTAL / 4);
+ //pit0.set_clk<2>(6.144_MHz_XTAL / 4);
+ pit0.out_handler<0>().set("auxuart", FUNC(i8251_device::write_txc));
+ pit0.out_handler<1>().set("auxuart", FUNC(i8251_device::write_rxc));
// OUT2 might be used for an internal expansion similar to the VT100 STP.
// The output appears to be fixed to a 307.2 kHz rate; turning this off boosts driver performance.
@@ -402,8 +399,8 @@ MACHINE_CONFIG_START(cit101_state::cit101)
ppi.in_pc_callback().append("comm", FUNC(rs232_port_device::si_r)).lshift(3); // tied to CTS for loopback test
ppi.out_pc_callback().set(FUNC(cit101_state::nvr_control_w));
- MCFG_DEVICE_ADD("nvr", ER2055, 0)
-MACHINE_CONFIG_END
+ ER2055(config, m_nvr);
+}
// PCB ID: HAV-2P005B / CIT-101 / C. ITOH
diff --git a/src/mame/drivers/clcd.cpp b/src/mame/drivers/clcd.cpp
index 9d702084db6..e65106d4198 100644
--- a/src/mame/drivers/clcd.cpp
+++ b/src/mame/drivers/clcd.cpp
@@ -684,11 +684,11 @@ MACHINE_CONFIG_START(clcd_state::clcd)
m_acia->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
m_acia->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("acia", mos6551_device, write_rxd))
- MCFG_RS232_DCD_HANDLER(WRITELINE("acia", mos6551_device, write_dcd))
- MCFG_RS232_DSR_HANDLER(WRITELINE("acia", mos6551_device, write_dsr))
- MCFG_RS232_CTS_HANDLER(WRITELINE("via1", via6522_device, write_pb4))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_acia, FUNC(mos6551_device::write_rxd));
+ rs232.dcd_handler().set(m_acia, FUNC(mos6551_device::write_dcd));
+ rs232.dsr_handler().set(m_acia, FUNC(mos6551_device::write_dsr));
+ rs232.cts_handler().set("via1", FUNC(via6522_device::write_pb4));
CENTRONICS(config, m_centronics, centronics_devices, nullptr);
m_centronics->busy_handler().set("via1", FUNC(via6522_device::write_pb6)).invert();
diff --git a/src/mame/drivers/compucolor.cpp b/src/mame/drivers/compucolor.cpp
index 5e834e34369..80340822e16 100644
--- a/src/mame/drivers/compucolor.cpp
+++ b/src/mame/drivers/compucolor.cpp
@@ -425,14 +425,14 @@ MACHINE_CONFIG_START(compucolor2_state::compucolor2)
m_mioc->xi_callback().set(FUNC(compucolor2_state::xi_r));
m_mioc->xo_callback().set(FUNC(compucolor2_state::xo_w));
- MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(TMS5501_TAG, tms5501_device, rcv_w))
+ RS232_PORT(config, m_rs232, default_rs232_devices, nullptr);
+ m_rs232->rxd_handler().set(m_mioc, FUNC(tms5501_device::rcv_w));
- MCFG_COMPUCOLOR_FLOPPY_PORT_ADD("cd0", compucolor_floppy_port_devices, "floppy")
- MCFG_RS232_RXD_HANDLER(WRITELINE(TMS5501_TAG, tms5501_device, rcv_w))
+ COMPUCOLOR_FLOPPY_PORT(config, m_floppy0, compucolor_floppy_port_devices, "floppy");
+ m_floppy0->rxd_handler().set(m_mioc, FUNC(tms5501_device::rcv_w));
- MCFG_COMPUCOLOR_FLOPPY_PORT_ADD("cd1", compucolor_floppy_port_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(TMS5501_TAG, tms5501_device, rcv_w))
+ COMPUCOLOR_FLOPPY_PORT(config, m_floppy1, compucolor_floppy_port_devices, nullptr);
+ m_floppy1->rxd_handler().set(m_mioc, FUNC(tms5501_device::rcv_w));
// internal ram
RAM(config, RAM_TAG).set_default_size("32K").set_extra_options("8K,16K");
diff --git a/src/mame/drivers/cybiko.cpp b/src/mame/drivers/cybiko.cpp
index d05e76022f1..669087491e5 100644
--- a/src/mame/drivers/cybiko.cpp
+++ b/src/mame/drivers/cybiko.cpp
@@ -390,8 +390,8 @@ static DEVICE_INPUT_DEFAULTS_START( debug_serial ) // set up debug port to defau
DEVICE_INPUT_DEFAULTS_END
MACHINE_CONFIG_START(cybiko_state::cybikov1_debug_serial)
- MCFG_DEVICE_MODIFY("debug_serial")
- MCFG_RS232_RXD_HANDLER(WRITELINE("maincpu:sci2", h8_sci_device, rx_w))
+ auto &debug_serial(*subdevice<rs232_port_device>("debug_serial"));
+ debug_serial.rxd_handler().set("maincpu:sci2", FUNC(h8_sci_device::rx_w));
MCFG_DEVICE_MODIFY("maincpu:sci2")
MCFG_H8_SCI_TX_CALLBACK(WRITELINE("debug_serial", rs232_port_device, write_txd))
MACHINE_CONFIG_END
@@ -420,10 +420,10 @@ MACHINE_CONFIG_START(cybiko_state::cybikov1_base)
RAM(config, m_ram).set_default_size("512K").set_extra_options("1M");
/* serial debug port */
- MCFG_DEVICE_ADD ("debug_serial", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("null_modem", debug_serial)
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", debug_serial)
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("pty", debug_serial)
+ rs232_port_device &debug_serial(RS232_PORT(config, "debug_serial", default_rs232_devices, nullptr));
+ debug_serial.set_option_device_input_defaults("null_modem", DEVICE_INPUT_DEFAULTS_NAME(debug_serial));
+ debug_serial.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(debug_serial));
+ debug_serial.set_option_device_input_defaults("pty", DEVICE_INPUT_DEFAULTS_NAME(debug_serial));
/* quickload */
MCFG_QUICKLOAD_ADD("quickload", cybiko_state, cybiko, "bin,nv", 0)
@@ -473,8 +473,8 @@ MACHINE_CONFIG_START(cybiko_state::cybikov2)
m_ram->set_default_size("256K").set_extra_options("512K,1M");
/* serial debug port */
- MCFG_DEVICE_MODIFY("debug_serial")
- MCFG_RS232_RXD_HANDLER(WRITELINE("maincpu:sci2", h8_sci_device, rx_w))
+ auto &debug_serial(*subdevice<rs232_port_device>("debug_serial"));
+ debug_serial.rxd_handler().set("maincpu:sci2", FUNC(h8_sci_device::rx_w));
MCFG_DEVICE_MODIFY("maincpu:sci2")
MCFG_H8_SCI_TX_CALLBACK(WRITELINE("debug_serial", rs232_port_device, write_txd))
MACHINE_CONFIG_END
@@ -494,8 +494,8 @@ MACHINE_CONFIG_START(cybiko_state::cybikoxt)
m_ram->set_default_size("2M");
/* serial debug port */
- MCFG_DEVICE_MODIFY("debug_serial")
- MCFG_RS232_RXD_HANDLER(WRITELINE("maincpu:sci2", h8_sci_device, rx_w))
+ auto &debug_serial(*subdevice<rs232_port_device>("debug_serial"));
+ debug_serial.rxd_handler().set("maincpu:sci2", FUNC(h8_sci_device::rx_w));
MCFG_DEVICE_MODIFY("maincpu:sci2")
MCFG_H8_SCI_TX_CALLBACK(WRITELINE("debug_serial", rs232_port_device, write_txd))
diff --git a/src/mame/drivers/decstation.cpp b/src/mame/drivers/decstation.cpp
index f74e430c0b7..1cedabfbda5 100644
--- a/src/mame/drivers/decstation.cpp
+++ b/src/mame/drivers/decstation.cpp
@@ -397,15 +397,15 @@ MACHINE_CONFIG_START(decstation_state::kn02ba)
MCFG_DEVICE_ADD("lk201", LK201, 0)
MCFG_LK201_TX_HANDLER(WRITELINE("scc1", z80scc_device, rxb_w))
- MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("scc0", z80scc_device, rxa_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE("scc0", z80scc_device, dcda_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("scc0", z80scc_device, ctsa_w))
-
- MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("scc0", z80scc_device, rxb_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE("scc0", z80scc_device, dcdb_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("scc0", z80scc_device, ctsb_w))
+ rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, nullptr));
+ rs232a.rxd_handler().set(m_scc0, FUNC(z80scc_device::rxa_w));
+ rs232a.dcd_handler().set(m_scc0, FUNC(z80scc_device::dcda_w));
+ rs232a.cts_handler().set(m_scc0, FUNC(z80scc_device::ctsa_w));
+
+ rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr));
+ rs232b.rxd_handler().set(m_scc0, FUNC(z80scc_device::rxb_w));
+ rs232b.dcd_handler().set(m_scc0, FUNC(z80scc_device::dcdb_w));
+ rs232b.cts_handler().set(m_scc0, FUNC(z80scc_device::ctsb_w));
MCFG_NSCSI_BUS_ADD("scsibus")
MCFG_NSCSI_ADD("scsibus:0", dec_scsi_devices, "harddisk", false)
diff --git a/src/mame/drivers/dectalk.cpp b/src/mame/drivers/dectalk.cpp
index ab044202346..61728babbcb 100644
--- a/src/mame/drivers/dectalk.cpp
+++ b/src/mame/drivers/dectalk.cpp
@@ -880,7 +880,7 @@ MACHINE_CONFIG_START(dectalk_state::dectalk)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, XTAL(20'000'000)/2) /* E74 20MHz OSC (/2) */
MCFG_DEVICE_PROGRAM_MAP(m68k_mem)
- MCFG_DEVICE_ADD("duart", SCN2681, XTAL(3'686'400)) // MC2681 DUART ; Y3 3.6864MHz xtal */
+ MCFG_DEVICE_ADD(m_duart, SCN2681, XTAL(3'686'400)) // MC2681 DUART ; Y3 3.6864MHz xtal */
MCFG_MC68681_IRQ_CALLBACK(WRITELINE(*this, dectalk_state, duart_irq_handler))
MCFG_MC68681_A_TX_CALLBACK(WRITELINE(*this, dectalk_state, duart_txa))
MCFG_MC68681_B_TX_CALLBACK(WRITELINE("rs232", rs232_port_device, write_txd))
@@ -909,8 +909,8 @@ MACHINE_CONFIG_START(dectalk_state::dectalk)
/* Y2 is a 3.579545 MHz xtal for the dtmf decoder chip */
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("duart", scn2681_device, rx_b_w))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
+ rs232.rxd_handler().set(m_duart, FUNC(scn2681_device::rx_b_w));
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/decwritr.cpp b/src/mame/drivers/decwritr.cpp
index e1e2b450db7..ead4c944006 100644
--- a/src/mame/drivers/decwritr.cpp
+++ b/src/mame/drivers/decwritr.cpp
@@ -456,9 +456,9 @@ MACHINE_CONFIG_START(decwriter_state::la120)
MCFG_INPUT_MERGER_ANY_HIGH("mainint")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", 0))
- MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("usart", i8251_device, write_rxd))
- MCFG_RS232_DSR_HANDLER(WRITELINE("usart", i8251_device, write_dsr))
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
+ rs232.rxd_handler().set("usart", FUNC(i8251_device::write_rxd));
+ rs232.dsr_handler().set("usart", FUNC(i8251_device::write_dsr));
*/
ER1400(config, m_nvm);
diff --git a/src/mame/drivers/dvk_ksm.cpp b/src/mame/drivers/dvk_ksm.cpp
index 7f2ce0b4754..ca204512c90 100644
--- a/src/mame/drivers/dvk_ksm.cpp
+++ b/src/mame/drivers/dvk_ksm.cpp
@@ -447,13 +447,13 @@ MACHINE_CONFIG_START(ksm_state::ksm)
// D42 - serial connection to host
I8251(config, m_i8251line, 0);
- m_i8251line->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_i8251line->txd_handler().set(m_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))
- MCFG_RS232_CTS_HANDLER(WRITELINE("i8251line", i8251_device, write_cts))
- MCFG_RS232_DSR_HANDLER(WRITELINE("i8251line", i8251_device, write_dsr))
+ RS232_PORT(config, m_rs232, default_rs232_devices, "null_modem");
+ m_rs232->rxd_handler().set(m_i8251line, FUNC(i8251_device::write_rxd));
+ m_rs232->cts_handler().set(m_i8251line, FUNC(i8251_device::write_cts));
+ m_rs232->dsr_handler().set(m_i8251line, FUNC(i8251_device::write_dsr));
// D41 - serial connection to MS7004 keyboard
I8251(config, m_i8251kbd, 0);
diff --git a/src/mame/drivers/ep64.cpp b/src/mame/drivers/ep64.cpp
index 50c0475ae9a..5f6dc493815 100644
--- a/src/mame/drivers/ep64.cpp
+++ b/src/mame/drivers/ep64.cpp
@@ -578,10 +578,10 @@ MACHINE_CONFIG_START(ep64_state::ep64)
// video hardware
MCFG_NICK_ADD(NICK_TAG, SCREEN_TAG, XTAL(8'000'000))
- MCFG_NICK_VIRQ_CALLBACK(WRITELINE(DAVE_TAG, dave_device, int1_w))
+ MCFG_NICK_VIRQ_CALLBACK(WRITELINE(m_dave, dave_device, int1_w))
// sound hardware
- MCFG_DAVE_ADD(DAVE_TAG, XTAL(8'000'000), dave_64k_mem, dave_io)
+ MCFG_DAVE_ADD(m_dave, XTAL(8'000'000), dave_64k_mem, dave_io)
MCFG_DAVE_IRQ_CALLBACK(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
// devices
@@ -595,8 +595,8 @@ MACHINE_CONFIG_START(ep64_state::ep64)
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, ep64_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
- MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_CTS_HANDLER(WRITELINE(DAVE_TAG, dave_device, int2_w))
+ RS232_PORT(config, m_rs232, default_rs232_devices, nullptr);
+ m_rs232->rxd_handler().set(m_dave, FUNC(dave_device::int2_w));
MCFG_CASSETTE_ADD(CASSETTE1_TAG)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED)
diff --git a/src/mame/drivers/fccpu30.cpp b/src/mame/drivers/fccpu30.cpp
index 506dc0e00e9..712016c0f88 100644
--- a/src/mame/drivers/fccpu30.cpp
+++ b/src/mame/drivers/fccpu30.cpp
@@ -713,21 +713,21 @@ MACHINE_CONFIG_START(cpu30_state::cpu30)
/* DUSCC2 interrupt signal REQN is connected to LOCAL IRQ5 of the FGA-002 and level is programmable */
MCFG_DUSCC_OUT_INT_CB(WRITELINE("fga002", fga002_device, lirq5_w))
- MCFG_DEVICE_ADD(RS232P1_TAG, RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("duscc", duscc68562_device, rxb_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("duscc", duscc68562_device, ctsb_w))
+ rs232_port_device &rs232p1(RS232_PORT(config, RS232P1_TAG, default_rs232_devices, "terminal"));
+ rs232p1.rxd_handler().set(m_dusccterm, FUNC(duscc68562_device::rxb_w));
+ rs232p1.cts_handler().set(m_dusccterm, FUNC(duscc68562_device::ctsb_w));
- MCFG_DEVICE_ADD(RS232P2_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("duscc2", duscc68562_device, rxa_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("duscc2", duscc68562_device, ctsa_w))
+ rs232_port_device &rs232p2(RS232_PORT(config, RS232P2_TAG, default_rs232_devices, nullptr));
+ rs232p2.rxd_handler().set("duscc2", FUNC(duscc68562_device::rxa_w));
+ rs232p2.cts_handler().set("duscc2", FUNC(duscc68562_device::ctsa_w));
- MCFG_DEVICE_ADD(RS232P3_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("duscc2", duscc68562_device, rxb_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("duscc2", duscc68562_device, ctsb_w))
+ rs232_port_device &rs232p3(RS232_PORT(config, RS232P3_TAG, default_rs232_devices, nullptr));
+ rs232p3.rxd_handler().set("duscc2", FUNC(duscc68562_device::rxb_w));
+ rs232p3.cts_handler().set("duscc2", FUNC(duscc68562_device::ctsb_w));
- MCFG_DEVICE_ADD(RS232P4_TAG, RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("duscc", duscc68562_device, rxa_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("duscc", duscc68562_device, ctsa_w))
+ rs232_port_device &rs232p4(RS232_PORT(config, RS232P4_TAG, default_rs232_devices, "terminal"));
+ rs232p4.rxd_handler().set(m_dusccterm, FUNC(duscc68562_device::rxa_w));
+ rs232p4.cts_handler().set(m_dusccterm, FUNC(duscc68562_device::ctsa_w));
/* PIT Parallel Interface and Timer device, assumed strapped for on board clock */
PIT68230(config, m_pit1, XTAL(16'000'000) / 2); // The PIT clock is not verified on schema but reversed from behaviour
diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp
index 656db340a54..4d4c470d875 100644
--- a/src/mame/drivers/fmtowns.cpp
+++ b/src/mame/drivers/fmtowns.cpp
@@ -2866,10 +2866,10 @@ MACHINE_CONFIG_START(towns_state::towns_base)
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))
- MCFG_RS232_CTS_HANDLER(WRITELINE("i8251",i8251_device, write_cts))
+ rs232_port_device &rs232c(RS232_PORT(config, "rs232c", default_rs232_devices, nullptr));
+ rs232c.rxd_handler().set(m_i8251, FUNC(i8251_device::write_rxd));
+ rs232c.dsr_handler().set(m_i8251, FUNC(i8251_device::write_dsr));
+ rs232c.cts_handler().set(m_i8251, FUNC(i8251_device::write_cts));
MCFG_FMT_ICMEMCARD_ADD("icmemcard")
diff --git a/src/mame/drivers/force68k.cpp b/src/mame/drivers/force68k.cpp
index 4c2f72b8933..cb7a66ad7d7 100644
--- a/src/mame/drivers/force68k.cpp
+++ b/src/mame/drivers/force68k.cpp
@@ -558,18 +558,18 @@ MACHINE_CONFIG_START(force68k_state::fccpu1)
m_aciahost->txd_handler().set("rs232host", FUNC(rs232_port_device::write_txd));
m_aciahost->rts_handler().set("rs232host", FUNC(rs232_port_device::write_rts));
- MCFG_DEVICE_ADD("rs232host", RS232_PORT, default_rs232_devices, "null_modem")
- MCFG_RS232_RXD_HANDLER(WRITELINE("aciahost", acia6850_device, write_rxd))
- MCFG_RS232_CTS_HANDLER(WRITELINE("aciahost", acia6850_device, write_cts))
+ rs232_port_device &rs232host(RS232_PORT(config, "rs232host", default_rs232_devices, "null_modem"));
+ rs232host.rxd_handler().set(m_aciahost, FUNC(acia6850_device::write_rxd));
+ rs232host.cts_handler().set(m_aciahost, FUNC(acia6850_device::write_cts));
/* P4/Terminal Port config */
ACIA6850(config, m_aciaterm, 0);
m_aciaterm->txd_handler().set("rs232trm", FUNC(rs232_port_device::write_txd));
m_aciaterm->rts_handler().set("rs232trm", FUNC(rs232_port_device::write_rts));
- MCFG_DEVICE_ADD("rs232trm", RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("aciaterm", acia6850_device, write_rxd))
- MCFG_RS232_CTS_HANDLER(WRITELINE("aciaterm", acia6850_device, write_cts))
+ rs232_port_device &rs232trm(RS232_PORT(config, "rs232trm", default_rs232_devices, "terminal"));
+ rs232trm.rxd_handler().set(m_aciaterm, FUNC(acia6850_device::write_rxd));
+ rs232trm.cts_handler().set(m_aciaterm, FUNC(acia6850_device::write_cts));
/* P5/Remote Port config */
ACIA6850(config, m_aciaremt, 0);
diff --git a/src/mame/drivers/gkigt.cpp b/src/mame/drivers/gkigt.cpp
index 690d5bd7226..93f59f3fa01 100644
--- a/src/mame/drivers/gkigt.cpp
+++ b/src/mame/drivers/gkigt.cpp
@@ -619,9 +619,9 @@ MACHINE_CONFIG_START(igt_gameking_state::igt_gameking)
MCFG_DEVICE_ADD("quart2", SC28C94, XTAL(24'000'000) / 6)
MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", I960_IRQ0))
- MCFG_DEVICE_ADD("diag", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("quart1", sc28c94_device, rx_d_w))
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
+ rs232_port_device &diag(RS232_PORT(config, "diag", default_rs232_devices, nullptr));
+ diag.rxd_handler().set("quart1", FUNC(sc28c94_device::rx_d_w));
+ diag.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal));
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_igt_gameking)
diff --git a/src/mame/drivers/gridcomp.cpp b/src/mame/drivers/gridcomp.cpp
index 02a19f116fa..8d1d2e12889 100644
--- a/src/mame/drivers/gridcomp.cpp
+++ b/src/mame/drivers/gridcomp.cpp
@@ -399,17 +399,18 @@ MACHINE_CONFIG_START(gridcomp_state::grid1101)
i7220.irq_callback().set(I80130_TAG, FUNC(i80130_device::ir1_w));
i7220.drq_callback().set(I80130_TAG, FUNC(i80130_device::ir1_w));
- MCFG_DEVICE_ADD("hpib", TMS9914, XTAL(4'000'000))
- MCFG_TMS9914_INT_WRITE_CB(WRITELINE(I80130_TAG, i80130_device, ir5_w))
- MCFG_TMS9914_DIO_READWRITE_CB(READ8(IEEE488_TAG, ieee488_device, dio_r), WRITE8(IEEE488_TAG, ieee488_device, host_dio_w))
- MCFG_TMS9914_EOI_WRITE_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_eoi_w))
- MCFG_TMS9914_DAV_WRITE_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_dav_w))
- MCFG_TMS9914_NRFD_WRITE_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_nrfd_w))
- MCFG_TMS9914_NDAC_WRITE_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_ndac_w))
- MCFG_TMS9914_IFC_WRITE_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_ifc_w))
- MCFG_TMS9914_SRQ_WRITE_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_srq_w))
- MCFG_TMS9914_ATN_WRITE_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_atn_w))
- MCFG_TMS9914_REN_WRITE_CB(WRITELINE(IEEE488_TAG, ieee488_device, host_ren_w))
+ tms9914_device &hpib(TMS9914(config, "hpib", XTAL(4'000'000)));
+ hpib.int_write_cb().set(I80130_TAG, FUNC(i80130_device::ir5_w));
+ hpib.dio_read_cb().set(IEEE488_TAG, FUNC(ieee488_device::dio_r));
+ hpib.dio_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dio_w));
+ hpib.eoi_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_eoi_w));
+ hpib.dav_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dav_w));
+ hpib.nrfd_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_nrfd_w));
+ hpib.ndac_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ndac_w));
+ hpib.ifc_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ifc_w));
+ hpib.srq_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w));
+ hpib.atn_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w));
+ hpib.ren_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ren_w));
MCFG_IEEE488_BUS_ADD()
MCFG_IEEE488_EOI_CALLBACK(WRITELINE("hpib", tms9914_device, eoi_w))
MCFG_IEEE488_DAV_CALLBACK(WRITELINE("hpib", tms9914_device, dav_w))
diff --git a/src/mame/drivers/guab.cpp b/src/mame/drivers/guab.cpp
index 03a1690f7f9..cd8280ac891 100644
--- a/src/mame/drivers/guab.cpp
+++ b/src/mame/drivers/guab.cpp
@@ -534,10 +534,10 @@ MACHINE_CONFIG_START(guab_state::guab)
acia1.rts_handler().set("rs232_1", FUNC(rs232_port_device::write_rts));
acia1.irq_handler().set_inputline("maincpu", 4);
- MCFG_DEVICE_ADD("rs232_1", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("acia6850_1", acia6850_device, write_rxd))
- MCFG_RS232_CTS_HANDLER(WRITELINE("acia6850_1", acia6850_device, write_cts))
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("keyboard", acia_1_rs232_defaults)
+ rs232_port_device &rs232(RS232_PORT(config, "rs232_1", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set("acia6850_1", FUNC(acia6850_device::write_rxd));
+ rs232.cts_handler().set("acia6850_1", FUNC(acia6850_device::write_cts));
+ rs232.set_option_device_input_defaults("keyboard", DEVICE_INPUT_DEFAULTS_NAME(acia_1_rs232_defaults));
clock_device &acia_clock(CLOCK(config, "acia_clock", 153600)); // source? the ptm doesn't seem to output any common baud values
acia_clock.signal_handler().set("acia6850_1", FUNC(acia6850_device::write_txc));
diff --git a/src/mame/drivers/h89.cpp b/src/mame/drivers/h89.cpp
index 6dd41e6938c..becea35114b 100644
--- a/src/mame/drivers/h89.cpp
+++ b/src/mame/drivers/h89.cpp
@@ -185,21 +185,22 @@ static DEVICE_INPUT_DEFAULTS_START( terminal )
DEVICE_INPUT_DEFAULTS_END
-MACHINE_CONFIG_START(h89_state::h89)
+void h89_state::h89(machine_config & config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",Z80, XTAL(12'288'000) / 6)
- MCFG_DEVICE_PROGRAM_MAP(h89_mem)
- MCFG_DEVICE_IO_MAP(h89_io)
+ Z80(config, m_maincpu, XTAL(12'288'000) / 6);
+ m_maincpu->set_addrmap(AS_PROGRAM, &h89_state::h89_mem);
+ m_maincpu->set_addrmap(AS_IO, &h89_state::h89_io);
ins8250_device &uart(INS8250(config, "ins8250", XTAL(1'843'200)));
uart.out_tx_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
- MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("ins8250", ins8250_uart_device, rx_w))
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, "terminal"));
+ rs232.rxd_handler().set("ins8250", FUNC(ins8250_uart_device::rx_w));
+ rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal));
- MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer", h89_state, h89_irq_timer, attotime::from_hz(100))
-MACHINE_CONFIG_END
+ TIMER(config, "irq_timer", 0).configure_periodic(timer_device::expired_delegate(FUNC(h89_state::h89_irq_timer), this), attotime::from_hz(100));
+}
/* ROM definition */
ROM_START( h89 )
diff --git a/src/mame/drivers/hk68v10.cpp b/src/mame/drivers/hk68v10.cpp
index fbacf6cebf6..935d25039c6 100644
--- a/src/mame/drivers/hk68v10.cpp
+++ b/src/mame/drivers/hk68v10.cpp
@@ -350,9 +350,9 @@ MACHINE_CONFIG_START(hk68v10_state::hk68v10)
m_sccterm->out_dtra_callback().set("rs232trm", FUNC(rs232_port_device::write_dtr));
m_sccterm->out_rtsa_callback().set("rs232trm", FUNC(rs232_port_device::write_rts));
- MCFG_DEVICE_ADD("rs232trm", RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_sccterm, scc8530_device, rxa_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE(m_sccterm, scc8530_device, ctsa_w))
+ rs232_port_device &rs232trm(RS232_PORT(config, "rs232trm", default_rs232_devices, "terminal"));
+ rs232trm.rxd_handler().set(m_sccterm, FUNC(scc8530_device::rxa_w));
+ rs232trm.cts_handler().set(m_sccterm, FUNC(scc8530_device::ctsa_w));
MCFG_VME_DEVICE_ADD("vme")
MCFG_VME_SLOT_ADD("vme", 1, hk68_vme_cards, nullptr)
diff --git a/src/mame/drivers/hp_ipc.cpp b/src/mame/drivers/hp_ipc.cpp
index a4cb3238067..1f67ed30a59 100644
--- a/src/mame/drivers/hp_ipc.cpp
+++ b/src/mame/drivers/hp_ipc.cpp
@@ -767,17 +767,18 @@ MACHINE_CONFIG_START(hp_ipc_state::hp_ipc_base)
mouse.set_default_option("hp_46060b");
mouse.set_hp_hil_slot(this, "mlc");
- MCFG_DEVICE_ADD("hpib", TMS9914, 4_MHz_XTAL)
- MCFG_TMS9914_INT_WRITE_CB(WRITELINE(*this, hp_ipc_state, irq_3))
- MCFG_TMS9914_DIO_READWRITE_CB(READ8(IEEE488_TAG , ieee488_device , dio_r) , WRITE8(IEEE488_TAG , ieee488_device , host_dio_w))
- MCFG_TMS9914_EOI_WRITE_CB(WRITELINE(IEEE488_TAG , ieee488_device , host_eoi_w))
- MCFG_TMS9914_DAV_WRITE_CB(WRITELINE(IEEE488_TAG , ieee488_device , host_dav_w))
- MCFG_TMS9914_NRFD_WRITE_CB(WRITELINE(IEEE488_TAG , ieee488_device , host_nrfd_w))
- MCFG_TMS9914_NDAC_WRITE_CB(WRITELINE(IEEE488_TAG , ieee488_device , host_ndac_w))
- MCFG_TMS9914_IFC_WRITE_CB(WRITELINE(IEEE488_TAG , ieee488_device , host_ifc_w))
- MCFG_TMS9914_SRQ_WRITE_CB(WRITELINE(IEEE488_TAG , ieee488_device , host_srq_w))
- MCFG_TMS9914_ATN_WRITE_CB(WRITELINE(IEEE488_TAG , ieee488_device , host_atn_w))
- MCFG_TMS9914_REN_WRITE_CB(WRITELINE(IEEE488_TAG , ieee488_device , host_ren_w))
+ tms9914_device &hpib(TMS9914(config, "hpib", 4_MHz_XTAL));
+ hpib.int_write_cb().set(FUNC(hp_ipc_state::irq_3));
+ hpib.dio_read_cb().set(IEEE488_TAG, FUNC(ieee488_device::dio_r));
+ hpib.dio_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dio_w));
+ hpib.eoi_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_eoi_w));
+ hpib.dav_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dav_w));
+ hpib.nrfd_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_nrfd_w));
+ hpib.ndac_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ndac_w));
+ hpib.ifc_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ifc_w));
+ hpib.srq_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w));
+ hpib.atn_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w));
+ hpib.ren_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ren_w));
MCFG_IEEE488_BUS_ADD()
MCFG_IEEE488_EOI_CALLBACK(WRITELINE("hpib" , tms9914_device , eoi_w))
MCFG_IEEE488_DAV_CALLBACK(WRITELINE("hpib" , tms9914_device , dav_w))
diff --git a/src/mame/drivers/ibm6580.cpp b/src/mame/drivers/ibm6580.cpp
index 092c062daca..98310683fbc 100644
--- a/src/mame/drivers/ibm6580.cpp
+++ b/src/mame/drivers/ibm6580.cpp
@@ -938,10 +938,10 @@ MACHINE_CONFIG_START(ibm6580_state::ibm6580)
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))
+ rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, nullptr));
+ rs232a.rxd_handler().set("upd8251a", FUNC(i8251_device::write_rxd));
+ rs232a.dsr_handler().set("upd8251a", FUNC(i8251_device::write_dsr));
+ rs232a.cts_handler().set("upd8251a", FUNC(i8251_device::write_cts));
i8251_device &upd8251b(I8251(config, "upd8251b", 0));
upd8251b.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd));
@@ -950,10 +950,10 @@ MACHINE_CONFIG_START(ibm6580_state::ibm6580)
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))
- MCFG_RS232_DSR_HANDLER(WRITELINE("upd8251b", i8251_device, write_dsr))
- MCFG_RS232_CTS_HANDLER(WRITELINE("upd8251b", i8251_device, write_cts))
+ rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr));
+ rs232b.rxd_handler().set("upd8251b", FUNC(i8251_device::write_rxd));
+ rs232b.dsr_handler().set("upd8251b", FUNC(i8251_device::write_dsr));
+ rs232b.cts_handler().set("upd8251b", FUNC(i8251_device::write_cts));
MCFG_SOFTWARE_LIST_ADD("flop_list", "ibm6580")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/isbc.cpp b/src/mame/drivers/isbc.cpp
index 9e738703524..aeef4555fb9 100644
--- a/src/mame/drivers/isbc.cpp
+++ b/src/mame/drivers/isbc.cpp
@@ -347,11 +347,11 @@ MACHINE_CONFIG_START(isbc_state::isbc86)
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(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)
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
+ rs232.rxd_handler().set(m_uart8251, FUNC(i8251_device::write_rxd));
+ rs232.cts_handler().set(m_uart8251, FUNC(i8251_device::write_cts));
+ rs232.dsr_handler().set(m_uart8251, FUNC(i8251_device::write_dsr));
+ rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(isbc86_terminal));
MACHINE_CONFIG_END
MACHINE_CONFIG_START(isbc_state::rpc86)
@@ -381,11 +381,11 @@ MACHINE_CONFIG_START(isbc_state::rpc86)
m_uart8251->txrdy_handler().set("pic_0", FUNC(pic8259_device::ir7_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_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", isbc286_terminal)
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
+ rs232.rxd_handler().set(m_uart8251, FUNC(i8251_device::write_rxd));
+ //rs232.cts_handler().set(m_uart8251, FUNC(i8251_device::write_cts));
+ rs232.dsr_handler().set(m_uart8251, FUNC(i8251_device::write_dsr));
+ rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(isbc286_terminal));
MCFG_ISBX_SLOT_ADD("sbx1", 0, isbx_cards, nullptr)
//MCFG_ISBX_SLOT_MINTR0_CALLBACK(WRITELINE("pic_0", pic8259_device, ir3_w))
@@ -484,28 +484,28 @@ MACHINE_CONFIG_START(isbc_state::isbc286)
m_uart8274->out_int_callback().set("pic_0", FUNC(pic8259_device::ir6_w));
#endif
- MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, nullptr)
+ rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, nullptr));
#if 0
- MCFG_RS232_RXD_HANDLER(WRITELINE("uart8274", z80dart_device, rxa_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE("uart8274", z80dart_device, dcda_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("uart8274", z80dart_device, ctsa_w))
+ rs232a.rxd_handler().set(m_uart8274, FUNC(z80dart_device::rxa_w));
+ rs232a.dcd_handler().set(m_uart8274, FUNC(z80dart_device::dcda_w));
+ rs232a.cts_handler().set(m_uart8274, FUNC(z80dart_device::ctsa_w));
#else
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart8274, i8274_new_device, rxa_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(m_uart8274, i8274_new_device, dcda_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE(m_uart8274, i8274_new_device, ctsa_w))
+ rs232a.rxd_handler().set(m_uart8274, FUNC(i8274_new_device::rxa_w));
+ rs232a.dcd_handler().set(m_uart8274, FUNC(i8274_new_device::dcda_w));
+ rs232a.cts_handler().set(m_uart8274, FUNC(i8274_new_device::ctsa_w));
#endif
- MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, "terminal")
+ rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, "terminal"));
#if 0
- MCFG_RS232_RXD_HANDLER(WRITELINE("uart8274", z80dart_device, rxb_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE("uart8274", z80dart_device, dcdb_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("uart8274", z80dart_device, ctsb_w))
+ rs232b.rxd_handler().set(m_uart8274, FUNC(z80dart_device::rxb_w));
+ rs232b.dcd_handler().set(m_uart8274, FUNC(z80dart_device::dcdb_w));
+ rs232b.cts_handler().set(m_uart8274, FUNC(z80dart_device::ctsb_w));
#else
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart8274, i8274_new_device, rxb_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(m_uart8274, i8274_new_device, dcdb_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE(m_uart8274, i8274_new_device, ctsb_w))
+ rs232b.rxd_handler().set(m_uart8274, FUNC(i8274_new_device::rxb_w));
+ rs232b.dcd_handler().set(m_uart8274, FUNC(i8274_new_device::dcdb_w));
+ rs232b.cts_handler().set(m_uart8274, FUNC(i8274_new_device::ctsb_w));
#endif
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", isbc286_terminal)
+ rs232b.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(isbc286_terminal));
MCFG_ISBX_SLOT_ADD("sbx1", 0, isbx_cards, nullptr)
MCFG_ISBX_SLOT_MINTR0_CALLBACK(WRITELINE("pic_1", pic8259_device, ir3_w))
diff --git a/src/mame/drivers/isbc8010.cpp b/src/mame/drivers/isbc8010.cpp
index 21e76fd841b..a6c4b4017fa 100644
--- a/src/mame/drivers/isbc8010.cpp
+++ b/src/mame/drivers/isbc8010.cpp
@@ -182,14 +182,14 @@ MACHINE_CONFIG_START(isbc8010_state::isbc8010)
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)
-
- MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE(I8251A_TAG, i8251_device, write_rxd))
- MCFG_RS232_DSR_HANDLER(WRITELINE(I8251A_TAG, i8251_device, write_dsr))
- MCFG_RS232_CTS_HANDLER(WRITELINE(I8251A_TAG, i8251_device, write_cts))
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
+ I8255A(config, m_ppi_0);
+ I8255A(config, m_ppi_1);
+
+ RS232_PORT(config, m_rs232, default_rs232_devices, "terminal");
+ m_rs232->rxd_handler().set(m_usart, FUNC(i8251_device::write_rxd));
+ m_rs232->dsr_handler().set(m_usart, FUNC(i8251_device::write_dsr));
+ m_rs232->cts_handler().set(m_usart, FUNC(i8251_device::write_cts));
+ m_rs232->set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal));
MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL(18'432'000)/60)
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, isbc8010_state, usart_clock_tick))
diff --git a/src/mame/drivers/kyocera.cpp b/src/mame/drivers/kyocera.cpp
index c8ad6c26c48..1a490e5da5c 100644
--- a/src/mame/drivers/kyocera.cpp
+++ b/src/mame/drivers/kyocera.cpp
@@ -1374,8 +1374,8 @@ MACHINE_CONFIG_START(kc85_state::kc85)
IM6402(config, m_uart, 0, 0);
m_uart->tro_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
- MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart, im6402_device, write_rri))
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_uart, FUNC(im6402_device::write_rri));
MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, kc85_state, write_centronics_busy))
@@ -1424,8 +1424,8 @@ MACHINE_CONFIG_START(pc8201_state::pc8201)
IM6402(config, m_uart, 0, 0);
m_uart->tro_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
- MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart, im6402_device, write_rri))
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_uart, FUNC(im6402_device::write_rri));
MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, kc85_state, write_centronics_busy))
@@ -1484,8 +1484,8 @@ MACHINE_CONFIG_START(trsm100_state::trsm100)
IM6402(config, m_uart, 0, 0);
m_uart->tro_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
- MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart, im6402_device, write_rri))
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_uart, FUNC(im6402_device::write_rri));
MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
MCFG_CASSETTE_ADD("cassette")
@@ -1544,9 +1544,9 @@ MACHINE_CONFIG_START(tandy200_state::tandy200)
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))
- MCFG_RS232_DSR_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_dsr))
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(I8251_TAG, FUNC(i8251_device::write_rxd));
+ rs232.dsr_handler().set(I8251_TAG, FUNC(i8251_device::write_dsr));
// MCFG_MC14412_ADD(MC14412_TAG, XTAL(1'000'000))
MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
diff --git a/src/mame/drivers/mcb216.cpp b/src/mame/drivers/mcb216.cpp
index bed9565e0a0..a6ca9952aec 100644
--- a/src/mame/drivers/mcb216.cpp
+++ b/src/mame/drivers/mcb216.cpp
@@ -132,8 +132,8 @@ MACHINE_CONFIG_START(mcb216_state::mcb216)
m_tms5501->xmt_callback().set("rs232", FUNC(rs232_port_device::write_txd));
m_tms5501->int_callback().set_inputline("maincpu", 0);
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("tms5501", tms5501_device, rcv_w))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
+ rs232.rxd_handler().set(m_tms5501, FUNC(tms5501_device::rcv_w));
MACHINE_CONFIG_END
MACHINE_CONFIG_START(mcb216_state::cb308)
@@ -149,8 +149,8 @@ MACHINE_CONFIG_START(mcb216_state::cb308)
m_tms5501->xmt_callback().set("rs232", FUNC(rs232_port_device::write_txd));
m_tms5501->int_callback().set_inputline("maincpu", 0);
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("tms5501", tms5501_device, rcv_w))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
+ rs232.rxd_handler().set(m_tms5501, FUNC(tms5501_device::rcv_w));
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/mitchell.cpp b/src/mame/drivers/mitchell.cpp
index 89035778207..8a3d33d7bdd 100644
--- a/src/mame/drivers/mitchell.cpp
+++ b/src/mame/drivers/mitchell.cpp
@@ -2073,11 +2073,12 @@ ROM_START( spangbl )
ROM_LOAD( "ic125.14", 0x030000, 0x10000, CRC(bd5c2f4b) SHA1(3c71d63637633a98ab513e4336e2954af3f964f4) )
ROM_END
+// There is a bank of 8 dipswitches that needs to be hooked up
ROM_START( spangbl2 )
ROM_REGION( 0x50000*2, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "ic2.1", 0x00000, 0x08000, CRC(4403f652) SHA1(62a232985a334ea8af840c2c3e766f316cc9e3da) ) // 1ST AND 2ND HALF IDENTICAL, but found as is on two different boards
- ROM_CONTINUE(0x50000,0x8000)
- ROM_LOAD( "ic18.2", 0x60000, 0x04000, CRC(6f377832) SHA1(25755ed77a797f50fdfbb4c42a04f51d3d08f87c) )
+ // IC2 can be found as 27C512 with 1st and 2nd half identical or as 27C256
+ ROM_LOAD( "sp2-19.ic2", 0x00000, 0x08000, CRC(6f52f8df) SHA1(a203e5cee601ea660860c38ac8e377a54f619c12) ) // 27C256
+ ROM_LOAD( "sp-18.ic18", 0x60000, 0x04000, CRC(6f377832) SHA1(25755ed77a797f50fdfbb4c42a04f51d3d08f87c) ) // 27C020
ROM_CONTINUE(0x10000,0x4000)
ROM_CONTINUE(0x64000,0x4000)
ROM_CONTINUE(0x14000,0x4000)
@@ -2093,38 +2094,44 @@ ROM_START( spangbl2 )
ROM_CONTINUE(0x28000,0x4000)
ROM_CONTINUE(0x7c000,0x4000)
ROM_CONTINUE(0x2c000,0x4000)
- ROM_LOAD( "ic19.3", 0x40000, 0x04000, CRC(7c776309) SHA1(8861ed11484ca0727dfbc3003888a9de32ed8ecc) )
+ ROM_LOAD( "sp-17.ic19", 0x40000, 0x04000, CRC(7c776309) SHA1(8861ed11484ca0727dfbc3003888a9de32ed8ecc) ) // 27C256
ROM_CONTINUE(0x48000,0x4000)
ROM_CONTINUE(0x44000,0x4000)
ROM_CONTINUE(0x4c000,0x4000)
- ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 + M5205 samples */
- ROM_LOAD( "ic28.4", 0x00000, 0x10000, CRC(02b07d0a) SHA1(77cb9bf1b0d93ebad1bd8cdbedb7fdbad23697be) )
- ROM_LOAD( "ic45.5", 0x10000, 0x10000, CRC(95c32824) SHA1(02de90a7bfbe89feb7708fda8dfac4ed32bc0773) )
+ ROM_REGION( 0x20000, "audiocpu", 0 ) // Sound Z80 + M5205 samples
+ ROM_LOAD( "sp-20.ic28", 0x00000, 0x10000, CRC(02b07d0a) SHA1(77cb9bf1b0d93ebad1bd8cdbedb7fdbad23697be) ) // 27C512
+ ROM_LOAD( "sp-21.ic45", 0x10000, 0x10000, CRC(95c32824) SHA1(02de90a7bfbe89feb7708fda8dfac4ed32bc0773) ) // 27C512
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT| ROMREGION_ERASE00 )
- ROM_LOAD16_BYTE( "ic79.11", 0x000001, 0x10000, CRC(10839ddd) SHA1(bfb56aa5d6ee1d3aa19e346264bee90d64545e51) )
- ROM_LOAD16_BYTE( "ic78.7", 0x000000, 0x10000, CRC(c1d5df89) SHA1(a86e641af1b41c8f642fe3a14ebcbe6c27f80c79) )
- ROM_LOAD16_BYTE( "ic49.10", 0x020001, 0x10000, CRC(113c2753) SHA1(37b480b5d9c581d3c807c81924b4bbbc21d0698d) )
- ROM_LOAD16_BYTE( "ic48.6", 0x020000, 0x10000, CRC(4ffae6c9) SHA1(71df3c374a24d6a90e78d33929cb91d05bd10b78) )
- ROM_LOAD16_BYTE( "ic81.13", 0x080001, 0x10000, CRC(ebe9c63a) SHA1(1aeeea5051086405ceb803ca7a5bfd82a07ade0f) )
- ROM_LOAD16_BYTE( "ic80.9", 0x080000, 0x10000, CRC(f680051d) SHA1(b6e09e14baf839961f46e0986d2c17f7edfaf13d) )
- ROM_LOAD16_BYTE( "ic51.12", 0x0a0001, 0x10000, CRC(beb49dc9) SHA1(c93f65b0f4ce0a0f400202f2998b89abad1f6942) )
- ROM_LOAD16_BYTE( "ic50.8", 0x0a0000, 0x10000, CRC(3f91014c) SHA1(b3947caa0c667d871c19d7dda6536d043ad296f2) )
+ ROM_LOAD16_BYTE( "sp-31.ic79", 0x000001, 0x10000, CRC(10839ddd) SHA1(bfb56aa5d6ee1d3aa19e346264bee90d64545e51) ) // 27C512
+ ROM_LOAD16_BYTE( "sp-23.ic78", 0x000000, 0x10000, CRC(c1d5df89) SHA1(a86e641af1b41c8f642fe3a14ebcbe6c27f80c79) ) // 27C512
+ ROM_LOAD16_BYTE( "sp-30.ic49", 0x020001, 0x10000, CRC(113c2753) SHA1(37b480b5d9c581d3c807c81924b4bbbc21d0698d) ) // 27C512
+ ROM_LOAD16_BYTE( "sp-22.ic46", 0x020000, 0x10000, CRC(4ffae6c9) SHA1(71df3c374a24d6a90e78d33929cb91d05bd10b78) ) // 27C512
+ ROM_LOAD16_BYTE( "sp-33.ic81", 0x080001, 0x10000, CRC(ebe9c63a) SHA1(1aeeea5051086405ceb803ca7a5bfd82a07ade0f) ) // 27C512
+ ROM_LOAD16_BYTE( "sp-25.ic80", 0x080000, 0x10000, CRC(f680051d) SHA1(b6e09e14baf839961f46e0986d2c17f7edfaf13d) ) // 27C512
+ ROM_LOAD16_BYTE( "sp-32.ic51", 0x0a0001, 0x10000, CRC(beb49dc9) SHA1(c93f65b0f4ce0a0f400202f2998b89abad1f6942) ) // 27C512
+ ROM_LOAD16_BYTE( "sp-24.ic50", 0x0a0000, 0x10000, CRC(3f91014c) SHA1(b3947caa0c667d871c19d7dda6536d043ad296f2) ) // 27C512
ROM_REGION( 0x040000, "gfx2", ROMREGION_INVERT )
- ROM_LOAD( "ic94.17", 0x000000, 0x10000, CRC(a56f3c20) SHA1(cb440e0e612da8b8a50fe25a6336869b62ab4cfd) )
- ROM_LOAD( "ic95.16", 0x020000, 0x10000, CRC(14df4659) SHA1(d73fab0a8c1e56a26cc15333a294e876f1552bc9) )
- ROM_LOAD( "ic124.15", 0x010000, 0x10000, CRC(4702c768) SHA1(ff996f1355f32451fa57836c2255027a8108eb40) )
- ROM_LOAD( "ic125.14", 0x030000, 0x10000, CRC(bd5c2f4b) SHA1(3c71d63637633a98ab513e4336e2954af3f964f4) )
-
- /* Unused */
- ROM_REGION( 0x008000, "key", 0)
- ROM_LOAD( "extra-27c256.bin", 0x00000, 0x08000, CRC(100dda13) SHA1(9a0b6d4439127abc4995c9df3839bfe1f13d8bc2) )
-
- /* Unsused */
- ROM_REGION( 0x000104, "plds", 0)
- ROM_LOAD( "1-pal16l8.ic32", 0x0000, 0x0104, CRC(b78ee715) SHA1(df9ed2bef394b4e26ac87bd39d81f4df2b5cefe5) )
+ ROM_LOAD( "sp-29.ic94", 0x000000, 0x10000, CRC(a56f3c20) SHA1(cb440e0e612da8b8a50fe25a6336869b62ab4cfd) ) // 27C512
+ ROM_LOAD( "sp-28.ic95", 0x020000, 0x10000, CRC(14df4659) SHA1(d73fab0a8c1e56a26cc15333a294e876f1552bc9) ) // 27C512
+ ROM_LOAD( "sp-27.ic124", 0x010000, 0x10000, CRC(4702c768) SHA1(ff996f1355f32451fa57836c2255027a8108eb40) ) // 27C512
+ ROM_LOAD( "sp-26.ic125", 0x030000, 0x10000, CRC(bd5c2f4b) SHA1(3c71d63637633a98ab513e4336e2954af3f964f4) ) // 27C512
+
+ // Unused
+ ROM_REGION( 0x008800, "extra", 0)
+ // "sp2-15" contains the same pattern repeated several times
+ ROM_LOAD( "sp2-15.bin", 0x00000, 0x08000, CRC(100dda13) SHA1(9a0b6d4439127abc4995c9df3839bfe1f13d8bc2) ) // 27C256
+ // "sp2-16" can be found as a 76161 PROM or as a 27C256 with its first 6KB empty
+ ROM_LOAD( "sp2-16.bin", 0x08000, 0x00800, CRC(16dbd461) SHA1(1759ad71df8deb5452b3ee92aa2ece1ee79ff469) ) // M1-76161-5
+
+ // Unsused
+ ROM_REGION( 0x000505, "plds", 0)
+ ROM_LOAD( "1-hy18cv8s.ic4", 0x0000, 0x0155, CRC(a93edbf5) SHA1(57ac314e6d501be903e313aec4e083d642bebebe) )
+ ROM_LOAD( "2-pal16l8acn.ic32", 0x0155, 0x0104, CRC(b78ee715) SHA1(df9ed2bef394b4e26ac87bd39d81f4df2b5cefe5) )
+ ROM_LOAD( "3-hy18cv8s.ic101", 0x0259, 0x0155, CRC(c5c1b9e2) SHA1(df10e706a212709bec415943a6409dd0eb8f72aa) )
+ ROM_LOAD( "4-gal20v8.bin", 0x03ae, 0x0157, CRC(29a2653d) SHA1(38426af27d9c48e650c74fc3d9a9a612d11e413c) )
ROM_END
/* seems to be the same basic hardware, but the memory map and io map are different at least.. */
diff --git a/src/mame/drivers/namcofl.cpp b/src/mame/drivers/namcofl.cpp
index 426bf6f4602..15c255b2e09 100644
--- a/src/mame/drivers/namcofl.cpp
+++ b/src/mame/drivers/namcofl.cpp
@@ -599,6 +599,7 @@ MACHINE_CONFIG_START(namcofl_state::namcofl)
m_c123tmap->set_color_base(0x1000);
NAMCO_C116(config, m_c116, 0);
+ m_c116->enable_shadows();
MCFG_VIDEO_START_OVERRIDE(namcofl_state,namcofl)
diff --git a/src/mame/drivers/pcat_dyn.cpp b/src/mame/drivers/pcat_dyn.cpp
index 72ff59519f0..68f39874ebc 100644
--- a/src/mame/drivers/pcat_dyn.cpp
+++ b/src/mame/drivers/pcat_dyn.cpp
@@ -197,13 +197,13 @@ MACHINE_CONFIG_START(pcat_dyn_state::pcat_dyn)
uart.out_rts_callback().set("serport", FUNC(rs232_port_device::write_rts));
uart.out_int_callback().set("pic8259_1", FUNC(pic8259_device::ir4_w));
- MCFG_DEVICE_ADD( "serport", RS232_PORT, pcat_dyn_com, "msmouse" )
- MCFG_SLOT_FIXED(true)
- MCFG_RS232_RXD_HANDLER(WRITELINE("ns16550", ins8250_uart_device, rx_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE("ns16550", ins8250_uart_device, dcd_w))
- MCFG_RS232_DSR_HANDLER(WRITELINE("ns16550", ins8250_uart_device, dsr_w))
- MCFG_RS232_RI_HANDLER(WRITELINE("ns16550", ins8250_uart_device, ri_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("ns16550", ins8250_uart_device, cts_w))
+ rs232_port_device &serport(RS232_PORT(config, "serport", pcat_dyn_com, "msmouse"));
+ serport.set_fixed(true);
+ serport.rxd_handler().set("ns16550", FUNC(ins8250_uart_device::rx_w));
+ serport.dcd_handler().set("ns16550", FUNC(ins8250_uart_device::dcd_w));
+ serport.dsr_handler().set("ns16550", FUNC(ins8250_uart_device::dsr_w));
+ serport.ri_handler().set("ns16550", FUNC(ins8250_uart_device::ri_w));
+ serport.cts_handler().set("ns16550", FUNC(ins8250_uart_device::cts_w));
MCFG_DEVICE_ADD("isa", ISA8, 0)
MCFG_ISA8_CPU("maincpu")
diff --git a/src/mame/drivers/pk8020.cpp b/src/mame/drivers/pk8020.cpp
index 7532358a663..df4816d16db 100644
--- a/src/mame/drivers/pk8020.cpp
+++ b/src/mame/drivers/pk8020.cpp
@@ -238,10 +238,10 @@ MACHINE_CONFIG_START(pk8020_state::pk8020)
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))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_rs232, FUNC(i8251_device::write_rxd));
+ rs232.cts_handler().set(m_rs232, FUNC(i8251_device::write_cts));
+ rs232.dsr_handler().set(m_rs232, FUNC(i8251_device::write_dsr));
I8251(config, m_lan, 0);
diff --git a/src/mame/drivers/px4.cpp b/src/mame/drivers/px4.cpp
index 0d443f09eda..b582b4e5251 100644
--- a/src/mame/drivers/px4.cpp
+++ b/src/mame/drivers/px4.cpp
@@ -1535,11 +1535,11 @@ MACHINE_CONFIG_START(px4_state::px4)
MCFG_EPSON_SIO_PIN(WRITELINE(*this, px4_state, sio_pin_w))
// rs232 port
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(*this, px4_state, rs232_rx_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(*this, px4_state, rs232_dcd_w))
- MCFG_RS232_DSR_HANDLER(WRITELINE(*this, px4_state, rs232_dsr_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE(*this, px4_state, rs232_cts_w))
+ RS232_PORT(config, m_rs232, default_rs232_devices, nullptr);
+ m_rs232->rxd_handler().set(FUNC(px4_state::rs232_rx_w));
+ m_rs232->dcd_handler().set(FUNC(px4_state::rs232_dcd_w));
+ m_rs232->dsr_handler().set(FUNC(px4_state::rs232_dsr_w));
+ m_rs232->cts_handler().set(FUNC(px4_state::rs232_cts_w));
// rom capsules
MCFG_GENERIC_CARTSLOT_ADD("capsule1", generic_plain_slot, "px4_cart")
diff --git a/src/mame/drivers/qx10.cpp b/src/mame/drivers/qx10.cpp
index b94c8b8e409..52201c6c584 100644
--- a/src/mame/drivers/qx10.cpp
+++ b/src/mame/drivers/qx10.cpp
@@ -777,7 +777,7 @@ MACHINE_CONFIG_START(qx10_state::qx10)
UPD7201(config, m_scc, MAIN_CLK/4); // channel b clock set by pit2 channel 2
// Channel A: Keyboard
- m_scc->out_txda_callback().set("kbd", FUNC(rs232_port_device::write_txd));
+ m_scc->out_txda_callback().set(m_kbd, FUNC(rs232_port_device::write_txd));
// Channel B: RS232
m_scc->out_txdb_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
m_scc->out_dtrb_callback().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
@@ -814,11 +814,11 @@ MACHINE_CONFIG_START(qx10_state::qx10)
FLOPPY_CONNECTOR(config, m_floppy[0], qx10_floppies, "525dd", floppy_image_device::default_floppy_formats);
FLOPPY_CONNECTOR(config, m_floppy[1], qx10_floppies, "525dd", floppy_image_device::default_floppy_formats);
- MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_scc, upd7201_device, rxb_w))
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_scc, FUNC(upd7201_device::rxb_w));
- MCFG_DEVICE_ADD("kbd", RS232_PORT, keyboard, "qx10")
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_scc, z80dart_device, rxa_w))
+ RS232_PORT(config, m_kbd, keyboard, "qx10");
+ m_kbd->rxd_handler().set(m_scc, FUNC(upd7201_device::rxa_w));
/* internal ram */
RAM(config, RAM_TAG).set_default_size("256K");
diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp
index 37bcfef0172..646d84ed48d 100644
--- a/src/mame/drivers/rainbow.cpp
+++ b/src/mame/drivers/rainbow.cpp
@@ -3282,14 +3282,13 @@ MACHINE_CONFIG_START(rainbow_state::rainbow)
m_hdc->out_step_callback().set(FUNC(rainbow_state::hdc_step)); // STEP PULSE
m_hdc->out_dirin_callback().set(FUNC(rainbow_state::hdc_direction));
- m_hdc->in_wf_callback().set(FUNC(rainbow_state::hdc_write_fault)); // WRITE FAULT (set to GND if not serviced)
+ // WF + DRDY are actually wired to a routine here:
+ m_hdc->in_wf_callback().set(FUNC(rainbow_state::hdc_write_fault)); // WRITE FAULT (fatal until next reset)
+ m_hdc->in_drdy_callback().set(FUNC(rainbow_state::hdc_drive_ready)); // DRIVE_READY (VCC = ready)
- m_hdc->in_drdy_callback().set(FUNC(rainbow_state::hdc_drive_ready)); // DRIVE_READY (set to VCC if not serviced)
-
- m_hdc->in_sc_callback().set_constant(1); // SEEK COMPLETE (set to VCC if not serviced)
-
- m_hdc->in_tk000_callback().set_constant(1); // CURRENTLY NOT EVALUATED WITHIN 'WD2010'
- m_hdc->in_wf_callback().set_constant(1); // "
+ // Always set seek complete and track 00 signal (not super clean, but does not affect operation):
+ m_hdc->in_sc_callback().set_constant(1); // SEEK COMPLETE (VCC = complete)
+ m_hdc->in_tk000_callback().set_constant(1); // TRACK 00 signal (= from drive)
MCFG_HARDDISK_ADD("decharddisk1")
/// ******************************** / HARD DISK CONTROLLER ****************************************
@@ -3312,27 +3311,25 @@ MACHINE_CONFIG_START(rainbow_state::rainbow)
UPD7201_NEW(config, m_mpsc, 24.0734_MHz_XTAL / 5 / 2); // 2.4073 MHz (nominally 2.5 MHz)
m_mpsc->out_int_callback().set(FUNC(rainbow_state::mpsc_irq));
- m_mpsc->out_txda_callback().set("comm", FUNC(rs232_port_device::write_txd));
+ m_mpsc->out_txda_callback().set(m_comm_port, FUNC(rs232_port_device::write_txd));
m_mpsc->out_txdb_callback().set("printer", FUNC(rs232_port_device::write_txd));
// RTS and DTR outputs are not connected
- MCFG_DEVICE_ADD("comm", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_mpsc, upd7201_new_device, rxa_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE(m_mpsc, upd7201_new_device, ctsa_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(m_mpsc, upd7201_new_device, dcda_w))
+ RS232_PORT(config, m_comm_port, default_rs232_devices, nullptr);
+ m_comm_port->rxd_handler().set(m_mpsc, FUNC(upd7201_new_device::rxa_w));
+ m_comm_port->cts_handler().set(m_mpsc, FUNC(upd7201_new_device::ctsa_w));
+ m_comm_port->dcd_handler().set(m_mpsc, FUNC(upd7201_new_device::dcda_w));
- MCFG_DEVICE_ADD("printer", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_mpsc, upd7201_new_device, rxb_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(m_mpsc, upd7201_new_device, ctsb_w)) // actually DTR
+ rs232_port_device &printer(RS232_PORT(config, "printer", default_rs232_devices, nullptr));
+ printer.rxd_handler().set(m_mpsc, FUNC(upd7201_new_device::rxb_w));
+ printer.dcd_handler().set(m_mpsc, FUNC(upd7201_new_device::ctsb_w)); // actually DTR
- MCFG_DEVICE_MODIFY("comm")
- MCFG_SLOT_OPTION_ADD("microsoft_mouse", MSFT_HLE_SERIAL_MOUSE)
- MCFG_SLOT_OPTION_ADD("logitech_mouse", LOGITECH_HLE_SERIAL_MOUSE)
- MCFG_SLOT_OPTION_ADD("msystems_mouse", MSYSTEMS_HLE_SERIAL_MOUSE)
- MCFG_SLOT_DEFAULT_OPTION("logitech_mouse")
+ m_comm_port->option_add("microsoft_mouse", MSFT_HLE_SERIAL_MOUSE);
+ m_comm_port->option_add("logitech_mouse", LOGITECH_HLE_SERIAL_MOUSE);
+ m_comm_port->option_add("msystems_mouse", MSYSTEMS_HLE_SERIAL_MOUSE);
+ m_comm_port->set_default_option("logitech_mouse");
- MCFG_DEVICE_MODIFY("printer")
- MCFG_SLOT_DEFAULT_OPTION("printer")
+ printer.set_default_option("printer");
I8251(config, m_kbd8251, 24.0734_MHz_XTAL / 5 / 2);
m_kbd8251->txd_handler().set(FUNC(rainbow_state::kbd_tx));
diff --git a/src/mame/drivers/rex6000.cpp b/src/mame/drivers/rex6000.cpp
index 92973c5e49b..cc605ff6e1b 100644
--- a/src/mame/drivers/rex6000.cpp
+++ b/src/mame/drivers/rex6000.cpp
@@ -927,12 +927,12 @@ MACHINE_CONFIG_START(rex6000_state::rex6000)
m_uart->out_rts_callback().set("serport", FUNC(rs232_port_device::write_rts));
m_uart->out_int_callback().set(FUNC(rex6000_state::serial_irq));
- MCFG_DEVICE_ADD( "serport", RS232_PORT, default_rs232_devices, nullptr )
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart, ins8250_uart_device, rx_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(m_uart, ins8250_uart_device, dcd_w))
- MCFG_RS232_DSR_HANDLER(WRITELINE(m_uart, ins8250_uart_device, dsr_w))
- MCFG_RS232_RI_HANDLER(WRITELINE(m_uart, ins8250_uart_device, ri_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE(m_uart, ins8250_uart_device, cts_w))
+ rs232_port_device &serport(RS232_PORT(config, "serport", default_rs232_devices, nullptr));
+ serport.rxd_handler().set(m_uart, FUNC(ins8250_uart_device::rx_w));
+ serport.dcd_handler().set(m_uart, FUNC(ins8250_uart_device::dcd_w));
+ serport.dsr_handler().set(m_uart, FUNC(ins8250_uart_device::dsr_w));
+ serport.ri_handler().set(m_uart, FUNC(ins8250_uart_device::ri_w));
+ serport.cts_handler().set(m_uart, FUNC(ins8250_uart_device::cts_w));
/* quickload */
MCFG_QUICKLOAD_ADD("quickload", rex6000_state, rex6000, "rex,ds2", 0)
@@ -977,12 +977,12 @@ MACHINE_CONFIG_START(oz750_state::oz750)
m_uart->out_rts_callback().set("serport", FUNC(rs232_port_device::write_rts));
m_uart->out_int_callback().set(FUNC(rex6000_state::serial_irq));
- MCFG_DEVICE_ADD( "serport", RS232_PORT, default_rs232_devices, nullptr )
- MCFG_RS232_RXD_HANDLER(WRITELINE(m_uart, ins8250_uart_device, rx_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE(m_uart, ins8250_uart_device, dcd_w))
- MCFG_RS232_DSR_HANDLER(WRITELINE(m_uart, ins8250_uart_device, dsr_w))
- MCFG_RS232_RI_HANDLER(WRITELINE(m_uart, ins8250_uart_device, ri_w))
- //MCFG_RS232_CTS_HANDLER(WRITELINE(m_uart, ins8250_uart_device, cts_w))
+ rs232_port_device &serport(RS232_PORT(config, "serport", default_rs232_devices, nullptr));
+ serport.rxd_handler().set(m_uart, FUNC(ins8250_uart_device::rx_w));
+ serport.dcd_handler().set(m_uart, FUNC(ins8250_uart_device::dcd_w));
+ serport.dsr_handler().set(m_uart, FUNC(ins8250_uart_device::dsr_w));
+ serport.ri_handler().set(m_uart, FUNC(ins8250_uart_device::ri_w));
+ //serport.cts_handler().set(m_uart, FUNC(ins8250_uart_device::cts_w));
/* video hardware */
MCFG_SCREEN_ADD("screen", LCD)
diff --git a/src/mame/drivers/sdk80.cpp b/src/mame/drivers/sdk80.cpp
index 1a3be1c2c6f..a271dcb4822 100644
--- a/src/mame/drivers/sdk80.cpp
+++ b/src/mame/drivers/sdk80.cpp
@@ -121,29 +121,30 @@ static DEVICE_INPUT_DEFAULTS_START( terminal ) // set up terminal to default to
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 )
DEVICE_INPUT_DEFAULTS_END
-MACHINE_CONFIG_START(sdk80_state::sdk80)
+void sdk80_state::sdk80(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I8080A, XTAL(18'432'000)/9)
- MCFG_DEVICE_PROGRAM_MAP(sdk80_mem)
- MCFG_DEVICE_IO_MAP(sdk80_io)
+ I8080A(config, m_maincpu, XTAL(18'432'000)/9);
+ m_maincpu->set_addrmap(AS_PROGRAM, &sdk80_state::sdk80_mem);
+ m_maincpu->set_addrmap(AS_IO, &sdk80_state::sdk80_io);
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)
+ I8255A(config, m_ppi_0);
+ I8255A(config, m_ppi_1);
- MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE(I8251A_TAG, i8251_device, write_rxd))
- MCFG_RS232_DSR_HANDLER(WRITELINE(I8251A_TAG, i8251_device, write_dsr))
- MCFG_RS232_CTS_HANDLER(WRITELINE(I8251A_TAG, i8251_device, write_cts))
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
+ RS232_PORT(config, m_rs232, default_rs232_devices, "terminal");
+ m_rs232->rxd_handler().set(m_usart, FUNC(i8251_device::write_rxd));
+ m_rs232->dsr_handler().set(m_usart, FUNC(i8251_device::write_dsr));
+ m_rs232->cts_handler().set(m_usart, FUNC(i8251_device::write_cts));
+ m_rs232->set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal));
- MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL(18'432'000)/60)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, sdk80_state, usart_clock_tick))
-MACHINE_CONFIG_END
+ clock_device &clock(CLOCK(config, "usart_clock", XTAL(18'432'000)/60));
+ clock.signal_handler().set(FUNC(sdk80_state::usart_clock_tick));
+}
/* ROM definition */
ROM_START( sdk80 )
diff --git a/src/mame/drivers/sdk86.cpp b/src/mame/drivers/sdk86.cpp
index 62232115d66..490d855cad0 100644
--- a/src/mame/drivers/sdk86.cpp
+++ b/src/mame/drivers/sdk86.cpp
@@ -145,11 +145,12 @@ static DEVICE_INPUT_DEFAULTS_START( terminal )
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 )
DEVICE_INPUT_DEFAULTS_END
-MACHINE_CONFIG_START(sdk86_state::sdk86)
+void sdk86_state::sdk86(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", I8086, XTAL(14'745'600)/3) /* divided down by i8284 clock generator; jumper selection allows it to be slowed to 2.5MHz, hence changing divider from 3 to 6 */
- MCFG_DEVICE_PROGRAM_MAP(sdk86_mem)
- MCFG_DEVICE_IO_MAP(sdk86_io)
+ I8086(config, m_maincpu, XTAL(14'745'600)/3); /* divided down by i8284 clock generator; jumper selection allows it to be slowed to 2.5MHz, hence changing divider from 3 to 6 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &sdk86_state::sdk86_mem);
+ m_maincpu->set_addrmap(AS_IO, &sdk86_state::sdk86_io);
/* video hardware */
config.set_default_layout(layout_sdk86);
@@ -160,10 +161,10 @@ MACHINE_CONFIG_START(sdk86_state::sdk86)
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))
- MCFG_RS232_DSR_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_dsr))
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, "terminal"));
+ rs232.rxd_handler().set(I8251_TAG, FUNC(i8251_device::write_rxd));
+ rs232.dsr_handler().set(I8251_TAG, FUNC(i8251_device::write_dsr));
+ rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal));
clock_device &usart_clock(CLOCK(config, "usart_clock", XTAL(14'745'600)/3/16));
usart_clock.signal_handler().set(I8251_TAG, FUNC(i8251_device::write_txc));
@@ -176,9 +177,9 @@ MACHINE_CONFIG_START(sdk86_state::sdk86)
kbdc.in_shift_callback().set_constant(0); // Shift key
kbdc.in_ctrl_callback().set_constant(0);
- MCFG_DEVICE_ADD("port1", I8255A, 0)
- MCFG_DEVICE_ADD("port2", I8255A, 0)
-MACHINE_CONFIG_END
+ I8255A(config, "port1");
+ I8255A(config, "port2");
+}
/* ROM definition */
ROM_START( sdk86 )
diff --git a/src/mame/drivers/sitcom.cpp b/src/mame/drivers/sitcom.cpp
index ef26cbdbda6..e2c062a321d 100644
--- a/src/mame/drivers/sitcom.cpp
+++ b/src/mame/drivers/sitcom.cpp
@@ -372,8 +372,8 @@ MACHINE_CONFIG_START(sitcom_state::sitcom)
MCFG_DL1414_UPDATE_HANDLER(WRITE16(*this, sitcom_state, update_ds<1>))
// host interface
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "null_modem")
- MCFG_RS232_RXD_HANDLER(WRITELINE(*this, sitcom_state, update_rxd))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "null_modem"));
+ rs232.rxd_handler().set(FUNC(sitcom_state::update_rxd));
MCFG_SOFTWARE_LIST_ADD("bitb_list", "sitcom")
config.set_default_layout(layout_sitcom);
diff --git a/src/mame/drivers/sm7238.cpp b/src/mame/drivers/sm7238.cpp
index 1a1c26dafda..38170e09129 100644
--- a/src/mame/drivers/sm7238.cpp
+++ b/src/mame/drivers/sm7238.cpp
@@ -406,10 +406,10 @@ MACHINE_CONFIG_START(sm7238_state::sm7238)
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))
- MCFG_RS232_CTS_HANDLER(WRITELINE("i8251line", i8251_device, write_cts))
- MCFG_RS232_DSR_HANDLER(WRITELINE("i8251line", i8251_device, write_dsr))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "null_modem"));
+ rs232.rxd_handler().set(m_i8251line, FUNC(i8251_device::write_rxd));
+ rs232.cts_handler().set(m_i8251line, FUNC(i8251_device::write_cts));
+ rs232.dsr_handler().set(m_i8251line, FUNC(i8251_device::write_dsr));
// serial connection to KM-035 keyboard
I8251(config, m_i8251kbd, 0);
@@ -424,10 +424,10 @@ MACHINE_CONFIG_START(sm7238_state::sm7238)
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))
- MCFG_RS232_CTS_HANDLER(WRITELINE("i8251prn", i8251_device, write_cts))
- MCFG_RS232_DSR_HANDLER(WRITELINE("i8251prn", i8251_device, write_dsr))
+ rs232_port_device &prtr(RS232_PORT(config, "prtr", default_rs232_devices, nullptr));
+ prtr.rxd_handler().set(m_i8251prn, FUNC(i8251_device::write_rxd));
+ prtr.cts_handler().set(m_i8251prn, FUNC(i8251_device::write_cts));
+ prtr.dsr_handler().set(m_i8251prn, FUNC(i8251_device::write_dsr));
MACHINE_CONFIG_END
ROM_START( sm7238 )
diff --git a/src/mame/drivers/twinkle.cpp b/src/mame/drivers/twinkle.cpp
index b656674bda5..8470176ad3d 100644
--- a/src/mame/drivers/twinkle.cpp
+++ b/src/mame/drivers/twinkle.cpp
@@ -1109,19 +1109,19 @@ MACHINE_CONFIG_START(twinkle_state::twinkle)
m_ata->irq_handler().set(FUNC(twinkle_state::spu_ata_irq));
m_ata->dmarq_handler().set(FUNC(twinkle_state::spu_ata_dmarq));
- MCFG_DEVICE_ADD("rtc", RTC65271, 0)
-
- MCFG_DEVICE_ADD("fdc37c665gt", FDC37C665GT, XTAL(24'000'000))
-
- MCFG_DEVICE_ADD("rs232", RS232_PORT, 0)
- MCFG_SLOT_OPTION_ADD("xvd701", JVC_XVD701)
-// MCFG_SLOT_OPTION_ADD("xvs1100", JVC_XVS1100) // 8th mix only
- MCFG_SLOT_DEFAULT_OPTION("xvd701")
- MCFG_RS232_RXD_HANDLER(WRITELINE("fdc37c665gt:uart2", ins8250_uart_device, rx_w))
- MCFG_RS232_DCD_HANDLER(WRITELINE("fdc37c665gt:uart2", ins8250_uart_device, dcd_w))
- MCFG_RS232_DSR_HANDLER(WRITELINE("fdc37c665gt:uart2", ins8250_uart_device, dsr_w))
- MCFG_RS232_RI_HANDLER(WRITELINE("fdc37c665gt:uart2", ins8250_uart_device, ri_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("fdc37c665gt:uart2", ins8250_uart_device, cts_w))
+ RTC65271(config, "rtc", 0);
+
+ FDC37C665GT(config, "fdc37c665gt", XTAL(24'000'000));
+
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", 0));
+ rs232.option_add("xvd701", JVC_XVD701);
+// rs232.option_add("xvs1100", JVC_XVS1100); // 8th mix only
+ rs232.set_default_option("xvd701");
+ rs232.rxd_handler().set("fdc37c665gt:uart2", FUNC(ins8250_uart_device::rx_w));
+ rs232.dcd_handler().set("fdc37c665gt:uart2", FUNC(ins8250_uart_device::dcd_w));
+ rs232.dsr_handler().set("fdc37c665gt:uart2", FUNC(ins8250_uart_device::dsr_w));
+ rs232.ri_handler().set("fdc37c665gt:uart2", FUNC(ins8250_uart_device::ri_w));
+ rs232.cts_handler().set("fdc37c665gt:uart2", FUNC(ins8250_uart_device::cts_w));
ns16550_device &uart(*subdevice<ns16550_device>("fdc37c665gt:uart2"));
uart.out_tx_callback().set("rs232", FUNC(rs232_port_device::write_txd));
diff --git a/src/mame/drivers/unixpc.cpp b/src/mame/drivers/unixpc.cpp
index 33a9c640971..b71015bb4ab 100644
--- a/src/mame/drivers/unixpc.cpp
+++ b/src/mame/drivers/unixpc.cpp
@@ -398,10 +398,10 @@ MACHINE_CONFIG_START(unixpc_state::unixpc)
// TODO: RTC
//MCFG_DEVICE_ADD("rtc", TC8250, 32.768_kHz_XTAL)
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("mpsc", upd7201_new_device, rxa_w))
- MCFG_RS232_DSR_HANDLER(WRITELINE("mpsc", upd7201_new_device, dcda_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("mpsc", upd7201_new_device, ctsa_w))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set("mpsc", FUNC(upd7201_new_device::rxa_w));
+ rs232.dsr_handler().set("mpsc", FUNC(upd7201_new_device::dcda_w));
+ rs232.cts_handler().set("mpsc", FUNC(upd7201_new_device::ctsa_w));
MCFG_DEVICE_ADD("printer", CENTRONICS, centronics_devices, nullptr)
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("printlatch", "printer")
diff --git a/src/mame/drivers/vt240.cpp b/src/mame/drivers/vt240.cpp
index 938eaf4142b..3e872ede8b2 100644
--- a/src/mame/drivers/vt240.cpp
+++ b/src/mame/drivers/vt240.cpp
@@ -681,9 +681,9 @@ MACHINE_CONFIG_START(vt240_state::vt240)
MCFG_UPD7220_BLANK_CALLBACK(INPUTLINE("charcpu", I8085_RST55_LINE))
MCFG_VIDEO_SET_SCREEN("screen")
- MCFG_DEVICE_ADD("duart", SCN2681, XTAL(7'372'800) / 2)
+ MCFG_DEVICE_ADD(m_duart, SCN2681, XTAL(7'372'800) / 2)
MCFG_MC68681_IRQ_CALLBACK(WRITELINE(*this, vt240_state, irq13_w))
- MCFG_MC68681_A_TX_CALLBACK(WRITELINE("host", rs232_port_device, write_txd))
+ MCFG_MC68681_A_TX_CALLBACK(WRITELINE(m_host, rs232_port_device, write_txd))
MCFG_MC68681_B_TX_CALLBACK(WRITELINE("printer", rs232_port_device, write_txd))
MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(*this, vt240_state, duartout_w))
@@ -699,14 +699,14 @@ MACHINE_CONFIG_START(vt240_state::vt240)
MCFG_DEVICE_ADD("keyboard_clock", CLOCK, 4800 * 64) // 8251 is set to /64 on the clock input
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, vt240_state, write_keyboard_clock))
- MCFG_DEVICE_ADD("host", RS232_PORT, default_rs232_devices, "null_modem")
- MCFG_RS232_RXD_HANDLER(WRITELINE("duart", scn2681_device, rx_a_w))
- MCFG_RS232_DSR_HANDLER(WRITELINE("duart", scn2681_device, ip5_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("duart", scn2681_device, ip0_w))
+ RS232_PORT(config, m_host, default_rs232_devices, "null_modem");
+ m_host->rxd_handler().set(m_duart, FUNC(scn2681_device::rx_a_w));
+ m_host->dsr_handler().set(m_duart, FUNC(scn2681_device::ip5_w));
+ m_host->cts_handler().set(m_duart, FUNC(scn2681_device::ip0_w));
- MCFG_DEVICE_ADD("printer", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("duart", scn2681_device, rx_b_w))
- MCFG_RS232_DSR_HANDLER(WRITELINE("duart", scn2681_device, ip1_w))
+ rs232_port_device &printer(RS232_PORT(config, "printer", default_rs232_devices, nullptr));
+ printer.rxd_handler().set(m_duart, FUNC(scn2681_device::rx_b_w));
+ printer.dsr_handler().set(m_duart, FUNC(scn2681_device::ip1_w));
X2212(config, "x2212");
MACHINE_CONFIG_END
diff --git a/src/mame/machine/cit101_kbd.h b/src/mame/machine/cit101_kbd.h
index 4ffc070e269..1b36653f44a 100644
--- a/src/mame/machine/cit101_kbd.h
+++ b/src/mame/machine/cit101_kbd.h
@@ -17,14 +17,6 @@
//**************************************************************************
-// CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_CIT101_HLE_KEYBOARD_TXD_CALLBACK(_devcb) \
- downcast<cit101_hle_keyboard_device &>(*device).set_txd_callback(DEVCB_##_devcb);
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -34,10 +26,10 @@ class cit101_hle_keyboard_device : public device_t, public device_matrix_keyboar
{
public:
// construction/destruction
- cit101_hle_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+ cit101_hle_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
// configuration
- template <class Object> devcb_base &set_txd_callback(Object &&cb) { return m_txd_callback.set_callback(std::forward<Object>(cb)); }
+ auto txd_callback() { return m_txd_callback.bind(); }
DECLARE_WRITE_LINE_MEMBER(write_rxd);
diff --git a/src/mame/video/namcofl.cpp b/src/mame/video/namcofl.cpp
index a0a1cacd2c6..8e7ec0721bc 100644
--- a/src/mame/video/namcofl.cpp
+++ b/src/mame/video/namcofl.cpp
@@ -99,7 +99,8 @@ WRITE32_MEMBER(namcofl_state::namcofl_spritebank_w)
int namcofl_state::FLobjcode2tile(int code)
{
- if ((code & 0x2000) && (m_sprbank & 2)) { code += 0x4000; }
+ if (BIT(code, 13))
+ return (m_sprbank << 13) | (code & 0x1fff);
return code;
}