summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2018-05-02 14:43:01 +1000
committer Vas Crabb <vas@vastheman.com>2018-05-02 14:43:01 +1000
commit8795d808087298025e66c818482f9d9b68968f1f (patch)
tree2b5edb3d3778917a83f28d7f613c5caf2f11b60c /src/mame/drivers
parent7c8d486909ffda985e169c454874cc08733f7ed6 (diff)
Allow devcb to be bound to a device/mixin or the target of a device
finder. This works outside machine configuration context so the workarounds in ATA HLE and MSX slots are no longer necessary. It also allows reduction in tag repetition in machine configuration (see converted osborne1.cpp, zorba.cpp or the more extreme tranz330.cpp). Allow reimagined device instantiation to take a device finder based on current device being configured to reduce repetition (see tranz330.cpp).
Diffstat (limited to 'src/mame/drivers')
-rw-r--r--src/mame/drivers/osborne1.cpp18
-rw-r--r--src/mame/drivers/seta2.cpp4
-rw-r--r--src/mame/drivers/tranz330.cpp32
-rw-r--r--src/mame/drivers/zorba.cpp34
4 files changed, 46 insertions, 42 deletions
diff --git a/src/mame/drivers/osborne1.cpp b/src/mame/drivers/osborne1.cpp
index 1e98a1af636..528bc0a0f85 100644
--- a/src/mame/drivers/osborne1.cpp
+++ b/src/mame/drivers/osborne1.cpp
@@ -291,7 +291,7 @@ MACHINE_CONFIG_START(osborne1_state::osborne1)
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())
MCFG_SCREEN_UPDATE_DRIVER(osborne1_state, screen_update)
- MCFG_SCREEN_RAW_PARAMS( MAIN_CLOCK, 1024, 0, 104*8, 260, 0, 24*10 )
+ MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK, 1024, 0, 104*8, 260, 0, 24*10)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", osborne1)
MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
@@ -301,12 +301,12 @@ MACHINE_CONFIG_START(osborne1_state::osborne1)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MCFG_DEVICE_ADD("pia_0", PIA6821, 0)
- MCFG_PIA_READPA_HANDLER(DEVREAD8(IEEE488_TAG, ieee488_device, dio_r))
+ MCFG_PIA_READPA_HANDLER(DEVREAD8(m_ieee, ieee488_device, dio_r))
MCFG_PIA_READPB_HANDLER(READ8(osborne1_state, ieee_pia_pb_r))
- MCFG_PIA_WRITEPA_HANDLER(DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w))
+ MCFG_PIA_WRITEPA_HANDLER(DEVWRITE8(m_ieee, ieee488_device, dio_w))
MCFG_PIA_WRITEPB_HANDLER(WRITE8(osborne1_state, ieee_pia_pb_w))
- MCFG_PIA_CA2_HANDLER(DEVWRITELINE(IEEE488_TAG, ieee488_device, ifc_w))
- MCFG_PIA_CB2_HANDLER(DEVWRITELINE(IEEE488_TAG, ieee488_device, ren_w))
+ MCFG_PIA_CA2_HANDLER(DEVWRITELINE(m_ieee, ieee488_device, ifc_w))
+ MCFG_PIA_CB2_HANDLER(DEVWRITELINE(m_ieee, ieee488_device, ren_w))
MCFG_PIA_IRQA_HANDLER(WRITELINE(osborne1_state, ieee_pia_irq_a_func))
MCFG_IEEE488_BUS_ADD()
@@ -324,10 +324,10 @@ MACHINE_CONFIG_START(osborne1_state::osborne1)
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(osborne1_state, serial_acia_irq_func))
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd))
- MCFG_RS232_DCD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_dcd))
- MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
- MCFG_RS232_RI_HANDLER(DEVWRITELINE("pia_1", pia6821_device, ca2_w))
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE(m_acia, acia6850_device, write_rxd))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE(m_acia, acia6850_device, write_dcd))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE(m_acia, acia6850_device, write_cts))
+ MCFG_RS232_RI_HANDLER(DEVWRITELINE(m_pia1, pia6821_device, ca2_w))
MCFG_DEVICE_ADD("mb8877", MB8877, MAIN_CLOCK/16)
MCFG_WD_FDC_FORCE_READY
diff --git a/src/mame/drivers/seta2.cpp b/src/mame/drivers/seta2.cpp
index 6d66a44cdc3..b2da542dac8 100644
--- a/src/mame/drivers/seta2.cpp
+++ b/src/mame/drivers/seta2.cpp
@@ -724,7 +724,7 @@ void seta2_state::telpacfl_map(address_map &map)
MCFG_DEVICE_ADD( _tag, FUNCUBE_TOUCHSCREEN, _clock )
#define MCFG_FUNCUBE_TOUCHSCREEN_TX_CALLBACK(_devcb) \
- devcb = &funcube_touchscreen_device::set_tx_cb(*device, DEVCB_##_devcb);
+ devcb = &downcast<funcube_touchscreen_device &>(*device).set_tx_cb(DEVCB_##_devcb);
class funcube_touchscreen_device : public device_t,
public device_serial_interface
@@ -733,7 +733,7 @@ public:
funcube_touchscreen_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ioport_constructor device_input_ports() const override;
- template<class _Object> static devcb_base &set_tx_cb(device_t &device, _Object object) { return downcast<funcube_touchscreen_device &>(device).m_tx_cb.set_callback(object); }
+ template <class Object> devcb_base &set_tx_cb(Object &&cb) { return m_tx_cb.set_callback(std::forward<Object>(cb)); }
protected:
virtual void device_start() override;
diff --git a/src/mame/drivers/tranz330.cpp b/src/mame/drivers/tranz330.cpp
index 9b6357cc10d..8eaaebf2ab1 100644
--- a/src/mame/drivers/tranz330.cpp
+++ b/src/mame/drivers/tranz330.cpp
@@ -23,6 +23,7 @@
#include "emu.h"
#include "includes/tranz330.h"
+#include "machine/input_merger.h"
#include "speaker.h"
#include "tranz330.lh"
@@ -141,7 +142,7 @@ static const z80_daisy_config tranz330_daisy_chain[] =
// ? - check purported RS232 hookup, inconsistent information found at the relevant webpage vs. user-submitted errata
void tranz330_state::tranz330(machine_config &config)
{
- m_cpu = Z80(config, CPU_TAG, XTAL(7'159'090)/2); //*
+ Z80(config, m_cpu, XTAL(7'159'090)/2); //*
m_cpu->set_addrmap(AS_PROGRAM, address_map_constructor(&tranz330_state::tranz330_mem, tag(), this));
m_cpu->set_addrmap(AS_IO, address_map_constructor(&tranz330_state::tranz330_io, tag(), this));
m_cpu->set_daisy_config(tranz330_daisy_chain);
@@ -151,31 +152,34 @@ void tranz330_state::tranz330(machine_config &config)
MSM6242(config, RTC_TAG, XTAL(32'768));
- m_pio = Z80PIO(config, PIO_TAG, XTAL(7'159'090)/2); //*
- m_pio->set_out_int_callback(DEVCB_INPUTLINE(CPU_TAG, INPUT_LINE_IRQ0)); //*
+ INPUT_MERGER_ANY_HIGH(config, "irq", 0)
+ .set_output_handler(DEVCB_INPUTLINE(m_cpu, INPUT_LINE_IRQ0));
+
+ Z80PIO(config, m_pio, XTAL(7'159'090)/2); //*
+ m_pio->set_out_int_callback(DEVCB_DEVWRITELINE("irq", input_merger_device, in_w<0>)); //*
m_pio->set_out_pa_callback(DEVCB_WRITE8(tranz330_state, pio_a_w));
m_pio->set_in_pa_callback(DEVCB_READ8(tranz330_state, card_r));
m_pio->set_in_pb_callback(DEVCB_READ8(tranz330_state, pio_b_r));
- m_dart = Z80DART(config, DART_TAG, XTAL(7'159'090)/2); //*
+ Z80DART(config, m_dart, XTAL(7'159'090)/2); //*
m_dart->set_out_syncb_callback(DEVCB_WRITELINE(tranz330_state, syncb_w));
- m_dart->set_out_txdb_callback(DEVCB_DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd)); //?
- m_dart->set_out_dtrb_callback(DEVCB_DEVWRITELINE(RS232_TAG, rs232_port_device, write_dtr)); //?
- m_dart->set_out_rtsb_callback(DEVCB_DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts)); //?
- m_dart->set_out_int_callback(DEVCB_INPUTLINE(CPU_TAG, INPUT_LINE_IRQ0));
+ m_dart->set_out_txdb_callback(DEVCB_DEVWRITELINE(m_rs232, rs232_port_device, write_txd)); //?
+ m_dart->set_out_dtrb_callback(DEVCB_DEVWRITELINE(m_rs232, rs232_port_device, write_dtr)); //?
+ m_dart->set_out_rtsb_callback(DEVCB_DEVWRITELINE(m_rs232, rs232_port_device, write_rts)); //?
+ m_dart->set_out_int_callback(DEVCB_DEVWRITELINE("irq", input_merger_device, in_w<1>));
- m_ctc = Z80CTC(config, CTC_TAG, XTAL(7'159'090)/2); //*
+ Z80CTC(config, m_ctc, XTAL(7'159'090)/2); //*
m_ctc->set_zc_callback<2>(DEVCB_WRITELINE(tranz330_state, sound_w));
- m_ctc->set_intr_callback(DEVCB_INPUTLINE(CPU_TAG, INPUT_LINE_IRQ0));
+ m_ctc->set_intr_callback(DEVCB_DEVWRITELINE("irq", input_merger_device, in_w<2>));
- m_rs232 = RS232_PORT(config, RS232_TAG, 0);
+ RS232_PORT(config, m_rs232, 0);
m_rs232->option_reset();
slot_options_default_rs232_devices(m_rs232);
m_rs232->set_default_option(nullptr);
m_rs232->set_fixed(false);
- m_rs232->set_rxd_handler(DEVCB_DEVWRITELINE(DART_TAG, z80dart_device, rxb_w));
- m_rs232->set_dcd_handler(DEVCB_DEVWRITELINE(DART_TAG, z80dart_device, dcdb_w));
- m_rs232->set_cts_handler(DEVCB_DEVWRITELINE(DART_TAG, z80dart_device, ctsb_w));
+ m_rs232->set_rxd_handler(DEVCB_DEVWRITELINE(m_dart, z80dart_device, rxb_w));
+ m_rs232->set_dcd_handler(DEVCB_DEVWRITELINE(m_dart, z80dart_device, dcdb_w));
+ m_rs232->set_cts_handler(DEVCB_DEVWRITELINE(m_dart, z80dart_device, ctsb_w));
// video
MIC10937(config, VFD_TAG, 60).set_port_value(0);
diff --git a/src/mame/drivers/zorba.cpp b/src/mame/drivers/zorba.cpp
index 90419732203..01e5ead77be 100644
--- a/src/mame/drivers/zorba.cpp
+++ b/src/mame/drivers/zorba.cpp
@@ -197,12 +197,12 @@ MACHINE_CONFIG_START(zorba_state::zorba)
// IEEE488 interface
MCFG_DEVICE_ADD("pia1", PIA6821, 0)
- MCFG_PIA_READPA_HANDLER(DEVREAD8(IEEE488_TAG, ieee488_device, dio_r)) // TODO: gated with PB1
- MCFG_PIA_WRITEPA_HANDLER(DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w)) // TODO: gated with PB1
+ MCFG_PIA_READPA_HANDLER(DEVREAD8(m_ieee, ieee488_device, dio_r)) // TODO: gated with PB1
+ MCFG_PIA_WRITEPA_HANDLER(DEVWRITE8(m_ieee, ieee488_device, dio_w)) // TODO: gated with PB1
MCFG_PIA_READPB_HANDLER(READ8(zorba_state, pia1_portb_r))
MCFG_PIA_WRITEPB_HANDLER(WRITE8(zorba_state, pia1_portb_w))
- MCFG_PIA_CA2_HANDLER(DEVWRITELINE(IEEE488_TAG, ieee488_device, ifc_w))
- MCFG_PIA_CB2_HANDLER(DEVWRITELINE(IEEE488_TAG, ieee488_device, ren_w))
+ MCFG_PIA_CA2_HANDLER(DEVWRITELINE(m_ieee, ieee488_device, ifc_w))
+ MCFG_PIA_CB2_HANDLER(DEVWRITELINE(m_ieee, ieee488_device, ren_w))
MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("irq1", input_merger_device, in_w<0>))
MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("irq1", input_merger_device, in_w<1>))
@@ -212,16 +212,16 @@ MACHINE_CONFIG_START(zorba_state::zorba)
MCFG_PIT8253_CLK1(24_MHz_XTAL / 3)
MCFG_PIT8253_CLK2(24_MHz_XTAL / 3)
MCFG_PIT8253_OUT0_HANDLER(WRITELINE(zorba_state, br1_w))
- MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("uart1", i8251_device, write_txc))
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart1", i8251_device, write_rxc))
- MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("uart2", i8251_device, write_txc))
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart2", i8251_device, write_rxc))
+ MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE(m_uart1, i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(m_uart1, i8251_device, write_rxc))
+ MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE(m_uart2, i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(m_uart2, i8251_device, write_rxc))
// CRTC
MCFG_DEVICE_ADD("crtc", I8275, 14.318'181_MHz_XTAL / 7)
MCFG_I8275_CHARACTER_WIDTH(8)
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(zorba_state, zorba_update_chr)
- MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma", z80dma_device, rdy_w))
+ MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE(m_dma, z80dma_device, rdy_w))
MCFG_I8275_IRQ_CALLBACK(DEVWRITELINE("irq0", input_merger_device, in_w<1>))
MCFG_VIDEO_SET_SCREEN("screen")
@@ -236,30 +236,30 @@ MACHINE_CONFIG_START(zorba_state::zorba)
// J1 IEEE-488
MCFG_IEEE488_BUS_ADD()
- MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE("pia1", pia6821_device, ca2_w)) // TODO: gated with PB1 from PIA
+ MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(m_pia1, pia6821_device, ca2_w)) // TODO: gated with PB1 from PIA
// J2 EIA RS232/internal modem
// TODO: this has additional lines compared to a regular RS232 port (TxC in, RxC in, RxC out, speaker in, power)
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(DEVWRITELINE("uart0", i8251_device, write_rxd)) // TODO: this line has a LED attached
- MCFG_RS232_CTS_HANDLER(DEVWRITELINE("uart0", i8251_device, write_cts)) // TODO: this line has a LED attached
- MCFG_RS232_DSR_HANDLER(DEVWRITELINE("uart0", i8251_device, write_dsr))
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE(m_uart0, i8251_device, write_rxd)) // TODO: this line has a LED attached
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE(m_uart0, i8251_device, write_cts)) // TODO: this line has a LED attached
+ MCFG_RS232_DSR_HANDLER(DEVWRITELINE(m_uart0, i8251_device, write_dsr))
// J3 Parallel printer
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("parprndata", "parprn")
MCFG_CENTRONICS_ADD("parprn", centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("uart1", i8251_device, write_cts))
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart1", i8251_device, write_dsr)) // TODO: shared with serial CTS
+ MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE(m_uart1, i8251_device, write_cts))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(m_uart1, i8251_device, write_dsr)) // TODO: shared with serial CTS
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(zorba_state, printer_fault_w))
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(zorba_state, printer_select_w))
// J3 Serial printer
MCFG_RS232_PORT_ADD("serprn", default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(DEVWRITELINE("uart1", i8251_device, write_rxd)) // TODO: this line has a LED attached
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE(m_uart1, i8251_device, write_rxd)) // TODO: this line has a LED attached
// J6 TTL-level serial keyboard
MCFG_DEVICE_ADD("keyboard", ZORBA_KEYBOARD, 0)
- MCFG_ZORBA_KEYBOARD_RXD_CB(DEVWRITELINE("uart2", i8251_device, write_rxd))
+ MCFG_ZORBA_KEYBOARD_RXD_CB(DEVWRITELINE(m_uart2, i8251_device, write_rxd))
MCFG_SOFTWARE_LIST_ADD("flop_list", "zorba")
MACHINE_CONFIG_END