diff options
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 |
commit | 8795d808087298025e66c818482f9d9b68968f1f (patch) | |
tree | 2b5edb3d3778917a83f28d7f613c5caf2f11b60c /src/mame/drivers | |
parent | 7c8d486909ffda985e169c454874cc08733f7ed6 (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.cpp | 18 | ||||
-rw-r--r-- | src/mame/drivers/seta2.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/tranz330.cpp | 32 | ||||
-rw-r--r-- | src/mame/drivers/zorba.cpp | 34 |
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 |