From c3fb11c2c98a5c28ece6a27093a0f9def350ac64 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sat, 7 Jul 2018 02:40:29 +1000 Subject: [PATCH] devcb3 There are multiple issues with the current device callbacks: * They always dispatch through a pointer-to-member * Chained callbacks are a linked list so the branch unit can't predict the early * There's a runtime decision made on the left/right shift direction * There are runtime NULL checks on various objects * Binding a lambda isn't practical * Arbitrary transformations are not supported * When chaining callbacks it isn't clear what the MCFG_DEVCB_ modifiers apply to * It isn't possible to just append to a callback in derived configuration * The macros need a magic, hidden local called devcb * Moving code that uses the magic locals around is error-prone * Writing the MCFG_ macros to make a device usable is a pain * You can't discover applicable MCFG_ macros with intellisense * Macros are not scoped * Using an inappropriate macro isn't detected at compile time * Lots of other things This changeset overcomes the biggest obstacle to remving MCFG_ macros altogether. Essentially, to allow a devcb to be configured, call .bind() and expose the result (a bind target for the callback). Bind target methods starting with "set" repace the current callbacks; methods starting with "append" append to them. You can't reconfigure a callback after resolving it. There's no need to use a macro matching the handler signatures - use FUNC for everything. Current device is implied if no tag/finder is supplied (no need for explicit this). Lambdas are supported, and the memory space and offset are optional. These kinds of things work: * .read_cb().set([this] () { return something; }); * .read_cb().set([this] (offs_t offset) { return ~offset; }); * .write_cb().set([this] (offs_t offset, u8 data) { m_array[offset] = data; }); * .write_cb().set([this] (int state) { some_var = state; }); Arbitrary transforms are allowed, and they can modify offset/mask for example: * .read_cb().set(FUNC(my_state::handler)).transform([] (u8 data) { return bitswap<4>(data, 1, 3, 0, 2); }); * .read_cb().set(m_dev, FUNC(some_device::member)).transform([] (offs_t &offset, u8 data) { offset ^= 3; return data; }); It's possible to stack arbitrary transforms, at the cost of compile time (the whole transform stack gets inlined at compile time). Shifts count as an arbitrary transform, but mask/exor does not. Order of mask/shift/exor now matters. Modifications are applied in the specified order. These are NOT EQUIVALENT: * .read_cb().set(FUNC(my_state::handler)).mask(0x06).lshift(2); * .read_cb().set(FUNC(my_state::handler)).lshift(2).mask(0x06); The bit helper no longer reverses its behaviour for read callbacks, and I/O ports are no longer aware of the field mask. Binding a read callback to no-op is not supported - specify a constant. The GND and VCC aliases have been removed intentionally - they're TTL-centric, and were already being abused. Other quirks have been preserved, including write logger only logging when the data is non-zero (quite unhelpful in many of the cases where it's used). Legacy syntax is still supported for simple cases, but will be phased out. New devices should not have MCFG_ macros. I don't think I've missed any fundamental issues, but if I've broken something, let me know. --- src/devices/bus/a1bus/a1bus.h | 4 +- src/devices/bus/a2bus/a2bus.h | 6 +- src/devices/bus/a2bus/a2eauxslot.h | 4 +- src/devices/bus/a2bus/a2mcms.cpp | 2 +- src/devices/bus/a2bus/pc_xporter.cpp | 4 +- src/devices/bus/a800/a8sio.h | 2 +- src/devices/bus/abcbus/abcbus.h | 20 +- src/devices/bus/abckb/abckb.h | 6 +- src/devices/bus/adam/exp.h | 2 +- src/devices/bus/amiga/keyboard/keyboard.h | 6 +- src/devices/bus/amiga/zorro/zorro.h | 22 +- src/devices/bus/apricot/expansion/expansion.h | 12 +- src/devices/bus/apricot/keyboard/keyboard.h | 2 +- src/devices/bus/bbc/1mhzbus/1mhzbus.h | 4 +- src/devices/bus/bbc/fdc/fdc.h | 4 +- src/devices/bus/bbc/joyport/joyport.h | 4 +- src/devices/bus/bbc/tube/tube.h | 2 +- src/devices/bus/bbc/tube/tube_80186.cpp | 28 +- src/devices/bus/bbc/tube/tube_casper.cpp | 31 +- src/devices/bus/bbc/userport/userport.h | 4 +- src/devices/bus/bml3/bml3bus.h | 6 +- src/devices/bus/c64/exp.h | 12 +- src/devices/bus/cbm2/user.h | 8 +- src/devices/bus/cbmiec/cbmiec.h | 10 +- src/devices/bus/cbus/pc9801_cbus.h | 14 +- src/devices/bus/centronics/ctronics.h | 43 +- src/devices/bus/cgenie/expansion/expansion.h | 6 +- src/devices/bus/coco/cococart.h | 18 +- src/devices/bus/coleco/ctrl.h | 2 +- src/devices/bus/comx35/exp.h | 2 +- src/devices/bus/cpc/cpcexp.h | 10 +- src/devices/bus/dmv/dmvbus.h | 10 +- src/devices/bus/ecbbus/ecbbus.h | 4 +- src/devices/bus/econet/econet.h | 4 +- src/devices/bus/einstein/pipe/pipe.h | 6 +- src/devices/bus/einstein/userport/userport.h | 2 +- src/devices/bus/electron/cart/slot.h | 4 +- src/devices/bus/electron/exp.h | 4 +- src/devices/bus/electron/m2105.cpp | 4 +- src/devices/bus/ep64/exp.h | 6 +- src/devices/bus/epson_sio/epson_sio.h | 4 +- src/devices/bus/gamegear/ggext.h | 4 +- src/devices/bus/hexbus/tp0370.h | 6 +- src/devices/bus/hp80_io/hp80_io.h | 4 +- src/devices/bus/hp9845_io/hp9845_io.h | 6 +- src/devices/bus/hp_dio/hp_dio.h | 8 +- src/devices/bus/hp_hil/hp_hil.h | 6 +- src/devices/bus/ieee488/c2040fdc.h | 6 +- src/devices/bus/ieee488/c8050.cpp | 171 +- src/devices/bus/ieee488/c8050fdc.h | 26 +- src/devices/bus/ieee488/hp9895.cpp | 25 +- src/devices/bus/ieee488/ieee488.h | 18 +- src/devices/bus/interpro/keyboard/keyboard.h | 2 +- src/devices/bus/interpro/mouse/mouse.h | 2 +- src/devices/bus/interpro/sr/sr.h | 16 +- src/devices/bus/iq151/iq151.h | 12 +- src/devices/bus/isa/gus.h | 22 +- src/devices/bus/isa/hdc.h | 4 +- src/devices/bus/isa/isa.h | 38 +- src/devices/bus/isa/p1_hdc.cpp | 16 +- src/devices/bus/isa/wdxt_gen.cpp | 63 +- src/devices/bus/kc/kc.h | 12 +- src/devices/bus/lpci/i82371sb.h | 4 +- src/devices/bus/lpci/southbridge.cpp | 4 +- src/devices/bus/midi/midi.h | 2 +- src/devices/bus/msx_slot/cartridge.h | 4 +- src/devices/bus/nasbus/nasbus.h | 2 +- src/devices/bus/newbrain/eim.cpp | 16 +- src/devices/bus/nubus/nubus.h | 12 +- src/devices/bus/oricext/oricext.h | 2 +- src/devices/bus/pc1512/mouse.h | 8 +- src/devices/bus/pc_kbd/pc_kbdc.h | 4 +- src/devices/bus/pet/cass.h | 2 +- src/devices/bus/pet/user.h | 57 +- src/devices/bus/plus4/exp.h | 8 +- src/devices/bus/pofo/exp.h | 6 +- src/devices/bus/psi_kbd/psi_kbd.h | 4 +- src/devices/bus/psx/ctlrport.h | 4 +- src/devices/bus/ql/exp.h | 8 +- src/devices/bus/rs232/rs232.h | 24 +- src/devices/bus/s100/s100.h | 34 +- src/devices/bus/s100/wunderbus.cpp | 2 +- src/devices/bus/scsi/scsi.h | 64 +- src/devices/bus/sms_ctrl/smsctrl.h | 4 +- src/devices/bus/spectrum/exp.h | 4 +- src/devices/bus/ss50/interface.h | 4 +- src/devices/bus/ss50/mpc.cpp | 32 +- src/devices/bus/sunkbd/sunkbd.h | 2 +- src/devices/bus/svi3x8/expander/expander.h | 14 +- src/devices/bus/svi3x8/slot/slot.h | 6 +- src/devices/bus/ti8x/ti8x.h | 4 +- src/devices/bus/ti99/gromport/gromport.h | 4 +- src/devices/bus/ti99/internal/992board.h | 8 +- src/devices/bus/ti99/internal/998board.h | 8 +- src/devices/bus/ti99/internal/datamux.h | 2 +- src/devices/bus/ti99/internal/evpcconn.h | 2 +- src/devices/bus/ti99/internal/genboard.h | 4 +- src/devices/bus/ti99/internal/ioport.h | 4 +- src/devices/bus/ti99/joyport/joyport.h | 2 +- src/devices/bus/ti99/peb/peribox.h | 8 +- src/devices/bus/ti99x/990_dk.h | 2 +- src/devices/bus/ti99x/990_hd.h | 2 +- src/devices/bus/ti99x/990_tap.h | 2 +- src/devices/bus/tiki100/exp.h | 10 +- src/devices/bus/tiki100/hdc.cpp | 10 +- src/devices/bus/tvc/tvc.h | 4 +- src/devices/bus/vcs_ctrl/ctrl.h | 2 +- src/devices/bus/vic10/exp.h | 8 +- src/devices/bus/vic20/exp.h | 6 +- src/devices/bus/vic20/vic1011.cpp | 25 +- src/devices/bus/vidbrain/exp.h | 2 +- src/devices/bus/vip/exp.h | 6 +- src/devices/bus/vme/vme.h | 2 +- src/devices/bus/vme/vme_mzr8300.cpp | 18 +- src/devices/bus/vtech/memexp/memexp.h | 6 +- src/devices/bus/wangpc/wangpc.h | 20 +- src/devices/bus/x68k/x68kexp.h | 8 +- src/devices/bus/z88/z88.h | 2 +- src/devices/cpu/adsp2100/adsp2100.h | 8 +- src/devices/cpu/amis2000/amis2000.h | 12 +- src/devices/cpu/apexc/apexc.h | 4 +- src/devices/cpu/cop400/cop400.h | 22 +- src/devices/cpu/cosmac/cosmac.h | 20 +- src/devices/cpu/cp1610/cp1610.h | 2 +- src/devices/cpu/dsp32/dsp32.h | 2 +- src/devices/cpu/e0c6200/e0c6s46.h | 6 +- src/devices/cpu/esrip/esrip.h | 6 +- src/devices/cpu/h8/h83002.h | 4 +- src/devices/cpu/h8/h8_sci.h | 6 +- src/devices/cpu/hcd62121/hcd62121.h | 12 +- src/devices/cpu/hd61700/hd61700.h | 14 +- src/devices/cpu/hmcs40/hmcs40.h | 8 +- src/devices/cpu/hphybrid/hphybrid.h | 2 +- src/devices/cpu/i386/i386.h | 4 +- src/devices/cpu/i8085/i8085.h | 12 +- src/devices/cpu/i8089/i8089.h | 4 +- src/devices/cpu/i86/i186.h | 12 +- src/devices/cpu/i86/i286.h | 2 +- src/devices/cpu/i86/i86.h | 8 +- src/devices/cpu/jaguar/jaguar.h | 2 +- src/devices/cpu/lc8670/lc8670.h | 2 +- src/devices/cpu/lh5801/lh5801.h | 2 +- src/devices/cpu/lr35902/lr35902.h | 4 +- src/devices/cpu/m6502/m5074x.h | 16 +- src/devices/cpu/m6502/m6502.h | 2 +- src/devices/cpu/m6800/m6801.h | 4 +- src/devices/cpu/m6805/m68705.h | 14 +- src/devices/cpu/m6805/m68hc05.h | 18 +- src/devices/cpu/m6809/konami.h | 2 +- src/devices/cpu/m6809/m6809.h | 2 +- src/devices/cpu/mb88xx/mb88xx.h | 26 +- src/devices/cpu/mcs40/mcs40.h | 38 +- src/devices/cpu/mcs48/mcs48.h | 27 +- src/devices/cpu/mcs51/mcs51.h | 22 +- src/devices/cpu/melps4/melps4.h | 20 +- src/devices/cpu/mips/r3000.h | 8 +- src/devices/cpu/mn10200/mn10200.h | 4 +- src/devices/cpu/nanoprocessor/nanoprocessor.h | 4 +- src/devices/cpu/nec/v25.h | 21 +- src/devices/cpu/nec/v53.cpp | 12 +- src/devices/cpu/nec/v53.h | 52 +- src/devices/cpu/patinhofeio/patinhofeio_cpu.h | 8 +- src/devices/cpu/pic16c5x/pic16c5x.h | 16 +- src/devices/cpu/pps4/pps4.h | 6 +- src/devices/cpu/psx/dma.h | 2 +- src/devices/cpu/psx/irq.h | 2 +- src/devices/cpu/psx/psx.h | 12 +- src/devices/cpu/psx/rcnt.h | 6 +- src/devices/cpu/psx/sio.h | 10 +- src/devices/cpu/rsp/rsp.h | 10 +- src/devices/cpu/s2650/s2650.h | 9 +- src/devices/cpu/sc61860/sc61860.h | 16 +- src/devices/cpu/scudsp/scudsp.h | 6 +- src/devices/cpu/sm510/sm500.h | 2 +- src/devices/cpu/sm510/sm510.h | 18 +- src/devices/cpu/sm8500/sm8500.h | 4 +- src/devices/cpu/superfx/superfx.h | 2 +- src/devices/cpu/t11/t11.h | 2 +- src/devices/cpu/tlcs90/tlcs90.h | 36 +- src/devices/cpu/tlcs900/tlcs900.h | 108 +- src/devices/cpu/tms1000/tms0270.h | 6 +- src/devices/cpu/tms1000/tms1k_base.h | 8 +- src/devices/cpu/tms32010/tms32010.h | 2 +- src/devices/cpu/tms32025/tms32025.h | 12 +- src/devices/cpu/tms32031/tms32031.h | 8 +- src/devices/cpu/tms34010/tms34010.h | 2 +- src/devices/cpu/tms7000/tms7000.h | 18 +- src/devices/cpu/tms9900/tms9995.h | 10 +- src/devices/cpu/tms9900/tms99com.h | 14 +- src/devices/cpu/ucom4/ucom4.h | 22 +- src/devices/cpu/upd7725/upd7725.h | 22 +- src/devices/cpu/upd7810/upd7810.h | 48 +- src/devices/cpu/z8/z8.h | 16 +- src/devices/cpu/z80/tmpz84c011.h | 26 +- src/devices/cpu/z80/tmpz84c015.h | 69 +- src/devices/cpu/z80/z80.h | 6 +- src/devices/cpu/z8000/z8000.h | 2 +- src/devices/imagedev/flopdrv.h | 2 +- src/devices/imagedev/midiin.h | 2 +- src/devices/imagedev/printer.h | 2 +- src/devices/machine/1mb5.h | 8 +- src/devices/machine/40105.h | 6 +- src/devices/machine/53c7xx.h | 6 +- src/devices/machine/64h156.h | 6 +- src/devices/machine/6522via.cpp | 4 +- src/devices/machine/6522via.h | 60 +- src/devices/machine/6525tpi.h | 18 +- src/devices/machine/6532riot.h | 10 +- src/devices/machine/68153bim.h | 14 +- src/devices/machine/6821pia.h | 33 +- src/devices/machine/68230pit.h | 24 +- src/devices/machine/68307.h | 8 +- src/devices/machine/68340.h | 20 +- src/devices/machine/6840ptm.h | 12 +- src/devices/machine/6850acia.h | 9 +- src/devices/machine/68561mpcc.h | 12 +- src/devices/machine/7200fifo.h | 6 +- src/devices/machine/7400.h | 8 +- src/devices/machine/7404.h | 12 +- src/devices/machine/74123.h | 2 +- src/devices/machine/74145.h | 20 +- src/devices/machine/74153.h | 4 +- src/devices/machine/74157.h | 11 +- src/devices/machine/74161.h | 12 +- src/devices/machine/74165.h | 4 +- src/devices/machine/74166.h | 4 +- src/devices/machine/74175.h | 28 +- src/devices/machine/74259.h | 20 +- src/devices/machine/7474.h | 6 +- src/devices/machine/8042kbdc.h | 10 +- src/devices/machine/82s129.h | 20 +- src/devices/machine/8364_paula.h | 4 +- src/devices/machine/8530scc.h | 2 +- src/devices/machine/aakart.h | 4 +- src/devices/machine/adc0808.h | 20 +- src/devices/machine/adc0844.h | 18 +- src/devices/machine/akiko.h | 12 +- src/devices/machine/am53cf96.h | 2 +- src/devices/machine/am9513.h | 18 +- src/devices/machine/am9517a.h | 39 +- src/devices/machine/am9519.h | 2 +- src/devices/machine/amigafdc.h | 10 +- src/devices/machine/at45dbxx.h | 2 +- src/devices/machine/at_keybc.h | 12 +- src/devices/machine/ataintf.h | 6 +- src/devices/machine/atmel_arm_aic.h | 2 +- src/devices/machine/ay31015.h | 40 +- src/devices/machine/busmouse.h | 2 +- src/devices/machine/cdp1852.h | 8 +- src/devices/machine/cdp1871.h | 26 +- src/devices/machine/cdp1879.h | 2 +- src/devices/machine/clock.h | 7 +- src/devices/machine/com8116.h | 9 +- src/devices/machine/cr511b.h | 18 +- src/devices/machine/cs4031.cpp | 4 +- src/devices/machine/cs4031.h | 18 +- src/devices/machine/cxd1095.h | 20 +- src/devices/machine/dmac.h | 14 +- src/devices/machine/dp8390.h | 16 +- src/devices/machine/ds1315.h | 2 +- src/devices/machine/ds1386.h | 6 +- src/devices/machine/ds75161a.h | 32 +- src/devices/machine/e05a03.h | 10 +- src/devices/machine/e05a30.h | 18 +- src/devices/machine/eepromser.h | 3 +- src/devices/machine/fdc37c93x.h | 10 +- src/devices/machine/fga002.h | 10 +- src/devices/machine/gayle.h | 10 +- src/devices/machine/gen_fifo.h | 4 +- src/devices/machine/gen_latch.h | 3 +- src/devices/machine/hd63450.h | 20 +- src/devices/machine/hd64610.h | 4 +- src/devices/machine/hdc92x4.h | 12 +- src/devices/machine/hp_taco.h | 6 +- src/devices/machine/i7220.h | 4 +- src/devices/machine/i80130.h | 12 +- src/devices/machine/i8087.h | 4 +- src/devices/machine/i8155.h | 21 +- src/devices/machine/i8212.h | 8 +- src/devices/machine/i8214.h | 6 +- src/devices/machine/i82371sb.cpp | 4 +- src/devices/machine/i82371sb.h | 8 +- src/devices/machine/i8243.h | 4 +- src/devices/machine/i8251.h | 21 +- src/devices/machine/i8255.h | 24 +- src/devices/machine/i8257.h | 32 +- src/devices/machine/i82586.h | 2 +- src/devices/machine/i8271.h | 8 +- src/devices/machine/i8279.h | 14 +- src/devices/machine/i8355.h | 8 +- src/devices/machine/ie15_kbd.h | 2 +- src/devices/machine/im6402.h | 8 +- src/devices/machine/input_merger.h | 3 +- src/devices/machine/ins8154.h | 10 +- src/devices/machine/ins8250.h | 21 +- src/devices/machine/k053252.h | 10 +- src/devices/machine/kb3600.h | 26 +- src/devices/machine/kr2376.h | 22 +- src/devices/machine/latch8.h | 32 +- src/devices/machine/ldv1000.h | 2 +- src/devices/machine/lh5810.h | 12 +- src/devices/machine/mb8421.h | 4 +- src/devices/machine/mb87078.h | 2 +- src/devices/machine/mb8795.h | 8 +- src/devices/machine/mb89352.h | 4 +- src/devices/machine/mb89363b.h | 24 +- src/devices/machine/mb89374.h | 10 +- src/devices/machine/mc14411.h | 48 +- src/devices/machine/mc146818.h | 4 +- src/devices/machine/mc2661.h | 16 +- src/devices/machine/mc68328.h | 48 +- src/devices/machine/mc6843.h | 2 +- src/devices/machine/mc6846.h | 12 +- src/devices/machine/mc6852.h | 8 +- src/devices/machine/mc6854.h | 8 +- src/devices/machine/mc68681.h | 19 +- src/devices/machine/mc68901.h | 18 +- src/devices/machine/mccs1850.h | 6 +- src/devices/machine/microtch.h | 2 +- src/devices/machine/mm5740.h | 24 +- src/devices/machine/mm58167.h | 2 +- src/devices/machine/mm74c922.h | 12 +- src/devices/machine/mos6526.h | 24 +- src/devices/machine/mos6529.h | 16 +- src/devices/machine/mos6530.h | 8 +- src/devices/machine/mos6530n.h | 83 +- src/devices/machine/mos6551.h | 15 +- src/devices/machine/mos8722.h | 10 +- src/devices/machine/mpu401.h | 2 +- src/devices/machine/msm58321.h | 10 +- src/devices/machine/msm6242.h | 3 +- src/devices/machine/msm6253.h | 18 +- src/devices/machine/ncr5380.h | 2 +- src/devices/machine/ncr5380n.h | 4 +- src/devices/machine/ncr5385.h | 2 +- src/devices/machine/ncr5390.h | 4 +- src/devices/machine/ncr539x.h | 4 +- src/devices/machine/nsc810.h | 16 +- src/devices/machine/nscsi_cb.h | 12 +- src/devices/machine/output_latch.h | 17 +- src/devices/machine/pc_fdc.h | 4 +- src/devices/machine/pc_lpt.h | 2 +- src/devices/machine/pci-ide.h | 3 +- src/devices/machine/pci9050.h | 4 +- src/devices/machine/pckeybrd.h | 6 +- src/devices/machine/pdc.h | 4 +- src/devices/machine/phi.h | 28 +- src/devices/machine/pic8259.h | 9 +- src/devices/machine/pit8253.h | 7 +- src/devices/machine/pxa255.h | 6 +- src/devices/machine/ripple_counter.h | 6 +- src/devices/machine/rp5c01.h | 2 +- src/devices/machine/rp5c15.h | 4 +- src/devices/machine/rstbuf.h | 2 +- src/devices/machine/rtc4543.h | 2 +- src/devices/machine/rtc65271.h | 2 +- src/devices/machine/s2636.h | 2 +- src/devices/machine/s3c2400.h | 18 +- src/devices/machine/s3c2410.h | 26 +- src/devices/machine/s3c2440.h | 26 +- src/devices/machine/s3c44b0.h | 14 +- src/devices/machine/saa1043.h | 36 +- src/devices/machine/scnxx562.h | 26 +- src/devices/machine/sis85c496.cpp | 4 +- src/devices/machine/smartmed.h | 2 +- src/devices/machine/smc91c9x.h | 4 +- src/devices/machine/smpc.h | 24 +- src/devices/machine/steppers.h | 2 +- src/devices/machine/te7750.h | 57 +- src/devices/machine/timekpr.h | 4 +- src/devices/machine/tmp68301.h | 4 +- src/devices/machine/tms1024.h | 19 +- src/devices/machine/tms5501.h | 8 +- src/devices/machine/tms9901.h | 36 +- src/devices/machine/tms9902.h | 8 +- src/devices/machine/tube.h | 12 +- src/devices/machine/upd71071.h | 28 +- src/devices/machine/upd765.h | 15 +- src/devices/machine/vrc4373.h | 2 +- src/devices/machine/wd11c00_17.h | 33 +- src/devices/machine/wd2010.h | 45 +- src/devices/machine/wd33c93.h | 2 +- src/devices/machine/wd7600.cpp | 4 +- src/devices/machine/wd7600.h | 18 +- src/devices/machine/wd_fdc.h | 15 +- src/devices/machine/ym2148.h | 8 +- src/devices/machine/ym3802.h | 4 +- src/devices/machine/z80ctc.h | 12 +- src/devices/machine/z80daisy_generic.h | 2 +- src/devices/machine/z80dart.h | 45 +- src/devices/machine/z80dma.h | 14 +- src/devices/machine/z80pio.h | 22 +- src/devices/machine/z80scc.h | 30 +- src/devices/machine/z80sio.cpp | 27 +- src/devices/machine/z80sio.h | 51 +- src/devices/machine/z80sti.h | 16 +- src/devices/machine/z8536.h | 14 +- src/devices/sound/2203intf.h | 3 +- src/devices/sound/2608intf.h | 2 +- src/devices/sound/2610intf.h | 3 +- src/devices/sound/2612intf.h | 2 +- src/devices/sound/262intf.h | 2 +- src/devices/sound/3526intf.h | 2 +- src/devices/sound/3812intf.h | 3 +- src/devices/sound/8950intf.h | 10 +- src/devices/sound/ad1848.h | 4 +- src/devices/sound/aica.h | 4 +- src/devices/sound/asc.h | 2 +- src/devices/sound/astrocde.h | 18 +- src/devices/sound/ay8910.h | 15 +- src/devices/sound/cdp1869.h | 4 +- src/devices/sound/dave.h | 6 +- src/devices/sound/es1373.h | 3 +- src/devices/sound/es5503.h | 4 +- src/devices/sound/es5506.h | 8 +- src/devices/sound/es8712.h | 4 +- src/devices/sound/ics2115.h | 2 +- src/devices/sound/k007232.h | 2 +- src/devices/sound/k054539.h | 2 +- src/devices/sound/k056800.h | 2 +- src/devices/sound/lc7535.h | 2 +- src/devices/sound/mea8000.h | 2 +- src/devices/sound/mm5837.h | 2 +- src/devices/sound/mos6560.h | 4 +- src/devices/sound/mos6581.h | 4 +- src/devices/sound/msm5205.h | 25 +- src/devices/sound/msm5232.h | 2 +- src/devices/sound/nes_apu.h | 4 +- src/devices/sound/pokey.h | 22 +- src/devices/sound/qs1000.h | 14 +- src/devices/sound/s14001a.h | 4 +- src/devices/sound/scsp.h | 6 +- src/devices/sound/sn76496.h | 2 +- src/devices/sound/sp0250.h | 2 +- src/devices/sound/sp0256.h | 4 +- src/devices/sound/spu.h | 2 +- src/devices/sound/st0016.h | 2 +- src/devices/sound/t6721a.h | 8 +- src/devices/sound/tms5110.h | 14 +- src/devices/sound/tms5220.h | 14 +- src/devices/sound/upd1771.h | 2 +- src/devices/sound/upd7759.h | 2 +- src/devices/sound/upd934g.h | 2 +- src/devices/sound/votrax.h | 2 +- src/devices/sound/ym2151.h | 6 +- src/devices/sound/ymf271.h | 2 +- src/devices/sound/ymf278b.h | 2 +- src/devices/sound/ymz280b.h | 3 +- src/devices/sound/zsg2.h | 2 +- src/devices/video/315_5124.h | 18 +- src/devices/video/315_5313.h | 10 +- src/devices/video/cdp1861.h | 6 +- src/devices/video/cdp1862.h | 6 +- src/devices/video/cesblit.h | 2 +- src/devices/video/crt9007.h | 22 +- src/devices/video/crt9212.h | 6 +- src/devices/video/crtc_ega.h | 8 +- src/devices/video/dl1416.h | 4 +- src/devices/video/dm9368.h | 4 +- src/devices/video/ef9364.h | 2 +- src/devices/video/ef9365.h | 2 +- src/devices/video/gba_lcd.h | 10 +- src/devices/video/hd44352.h | 2 +- src/devices/video/hd61830.h | 2 +- src/devices/video/hlcd0515.h | 4 +- src/devices/video/hlcd0538.h | 4 +- src/devices/video/huc6202.h | 24 +- src/devices/video/huc6260.h | 8 +- src/devices/video/huc6270.h | 2 +- src/devices/video/huc6272.h | 2 +- src/devices/video/i8244.h | 4 +- src/devices/video/i82730.h | 2 +- src/devices/video/i8275.h | 16 +- src/devices/video/imagetek_i4100.h | 2 +- src/devices/video/mb88303.h | 6 +- src/devices/video/mc6845.h | 32 +- src/devices/video/mc6847.h | 9 +- src/devices/video/mos6566.h | 8 +- src/devices/video/ppu2c0x.h | 1 + src/devices/video/ppu2c0x_vt.h | 4 +- src/devices/video/psx.h | 2 +- src/devices/video/saa5050.h | 2 +- src/devices/video/scn2674.h | 4 +- src/devices/video/snes_ppu.h | 9 +- src/devices/video/tms34061.h | 2 +- src/devices/video/tms9927.h | 6 +- src/devices/video/tms9928a.h | 6 +- src/devices/video/upd3301.h | 16 +- src/devices/video/upd7220.h | 8 +- src/devices/video/v9938.h | 2 +- src/devices/video/vic4567.h | 16 +- src/devices/video/voodoo.h | 6 +- src/devices/video/zeus2.h | 4 +- src/emu/devcb.cpp | 1033 ++---- src/emu/devcb.h | 3084 ++++++++++++++--- src/emu/device.cpp | 11 + src/emu/device.h | 9 +- src/emu/emu.h | 1 - src/emu/emufwd.h | 6 +- src/emu/mconfig.h | 2 - src/emu/output.h | 5 +- src/emu/screen.h | 8 +- src/emu/validity.cpp | 6 - src/mame/audio/atarijsa.h | 14 +- src/mame/audio/cage.h | 2 +- src/mame/audio/cmi01a.h | 2 +- src/mame/audio/dsbz80.cpp | 23 +- src/mame/audio/dsbz80.h | 2 +- src/mame/audio/efo_zsu.cpp | 20 +- src/mame/audio/exidy.h | 8 +- src/mame/audio/harddriv.cpp | 18 +- src/mame/audio/irem.cpp | 38 +- src/mame/audio/irem.h | 7 +- src/mame/audio/namco52.h | 4 +- src/mame/audio/rad_eu3a05.h | 2 +- src/mame/audio/segag80r.cpp | 2 +- src/mame/audio/segam1audio.cpp | 12 +- src/mame/audio/segam1audio.h | 8 +- src/mame/audio/segasnd.h | 2 +- src/mame/audio/seibu.h | 4 +- src/mame/audio/svis_snd.h | 2 +- src/mame/audio/tvc.h | 2 +- src/mame/audio/williams.cpp | 24 +- src/mame/audio/zaccaria.h | 2 +- src/mame/drivers/24cdjuke.cpp | 6 +- src/mame/drivers/2mindril.cpp | 12 +- src/mame/drivers/68ksbc.cpp | 29 +- src/mame/drivers/a7150.cpp | 20 +- src/mame/drivers/abc80x.cpp | 12 +- src/mame/drivers/aerofgt.cpp | 18 +- src/mame/drivers/alesis.cpp | 30 +- src/mame/drivers/alpha68k.cpp | 8 +- src/mame/drivers/alphatpx.cpp | 20 +- src/mame/drivers/alphatro.cpp | 6 +- src/mame/drivers/altair.cpp | 6 +- src/mame/drivers/altos2.cpp | 37 +- src/mame/drivers/altos486.cpp | 10 +- src/mame/drivers/altos5.cpp | 24 +- src/mame/drivers/altos8600.cpp | 49 +- src/mame/drivers/amiga.cpp | 38 +- src/mame/drivers/ampro.cpp | 20 +- src/mame/drivers/amust.cpp | 6 +- src/mame/drivers/apc.cpp | 14 +- src/mame/drivers/apricot.cpp | 28 +- src/mame/drivers/asteroid.cpp | 38 +- src/mame/drivers/astrocde.cpp | 32 +- src/mame/drivers/asuka.cpp | 96 +- src/mame/drivers/atarist.cpp | 24 +- src/mame/drivers/atarisy1.cpp | 12 +- src/mame/drivers/attache.cpp | 64 +- src/mame/drivers/aussiebyte.cpp | 36 +- src/mame/drivers/avt.cpp | 28 +- src/mame/drivers/balsente.cpp | 24 +- src/mame/drivers/bbc.cpp | 8 +- src/mame/drivers/bbusters.cpp | 16 +- src/mame/drivers/bebox.cpp | 14 +- src/mame/drivers/bigbord2.cpp | 22 +- src/mame/drivers/bladestl.cpp | 6 +- src/mame/drivers/bml3.cpp | 6 +- src/mame/drivers/bombjack.cpp | 18 +- src/mame/drivers/bw2.cpp | 16 +- src/mame/drivers/capbowl.cpp | 20 +- src/mame/drivers/cat.cpp | 9 +- src/mame/drivers/ccastles.cpp | 28 +- src/mame/drivers/cclimber.cpp | 62 +- src/mame/drivers/ccs2810.cpp | 62 +- src/mame/drivers/ccs300.cpp | 6 +- src/mame/drivers/cdc721.cpp | 18 +- src/mame/drivers/centiped.cpp | 28 +- src/mame/drivers/cgc7900.cpp | 10 +- src/mame/drivers/cidelsa.cpp | 24 +- src/mame/drivers/cit101.cpp | 36 +- src/mame/drivers/clcd.cpp | 26 +- src/mame/drivers/cloak.cpp | 14 +- src/mame/drivers/cloud9.cpp | 26 +- src/mame/drivers/clshroad.cpp | 20 +- src/mame/drivers/cntsteer.cpp | 18 +- src/mame/drivers/coco12.cpp | 70 +- src/mame/drivers/coco3.cpp | 22 +- src/mame/drivers/codata.cpp | 16 +- src/mame/drivers/commando.cpp | 19 +- src/mame/drivers/compucolor.cpp | 6 +- src/mame/drivers/comx35.cpp | 4 +- src/mame/drivers/cortex.cpp | 9 +- src/mame/drivers/cosmicos.cpp | 2 +- src/mame/drivers/cp1.cpp | 24 +- src/mame/drivers/cpzodiac.cpp | 22 +- src/mame/drivers/crshrace.cpp | 16 +- src/mame/drivers/darkseal.cpp | 4 +- src/mame/drivers/dblewing.cpp | 16 +- src/mame/drivers/ddenlovr.cpp | 55 +- src/mame/drivers/dec8.cpp | 72 +- src/mame/drivers/deco32.cpp | 53 +- src/mame/drivers/decwritr.cpp | 18 +- src/mame/drivers/destroyr.cpp | 6 +- src/mame/drivers/dietgo.cpp | 14 +- src/mame/drivers/divebomb.cpp | 20 +- src/mame/drivers/dkong.cpp | 39 +- src/mame/drivers/dmax8000.cpp | 22 +- src/mame/drivers/dms86.cpp | 49 +- src/mame/drivers/dmv.cpp | 28 +- src/mame/drivers/docastle.cpp | 30 +- src/mame/drivers/dragon.cpp | 24 +- src/mame/drivers/dragrace.cpp | 38 +- src/mame/drivers/dreambal.cpp | 12 +- src/mame/drivers/dsb46.cpp | 18 +- src/mame/drivers/duet16.cpp | 30 +- src/mame/drivers/dynamoah.cpp | 27 +- src/mame/drivers/dynax.cpp | 40 +- src/mame/drivers/dynduke.cpp | 20 +- src/mame/drivers/einstein.cpp | 8 +- src/mame/drivers/eti660.cpp | 14 +- src/mame/drivers/exterm.cpp | 14 +- src/mame/drivers/f1gp.cpp | 12 +- src/mame/drivers/fanucspmg.cpp | 4 +- src/mame/drivers/fc100.cpp | 10 +- src/mame/drivers/firefox.cpp | 36 +- src/mame/drivers/fmtowns.cpp | 4 +- src/mame/drivers/ft68m.cpp | 14 +- src/mame/drivers/gaelco.cpp | 34 +- src/mame/drivers/gaelco3d.cpp | 3 +- src/mame/drivers/gaiden.cpp | 16 +- src/mame/drivers/galaga.cpp | 114 +- src/mame/drivers/galastrm.cpp | 16 +- src/mame/drivers/galaxold.cpp | 22 +- src/mame/drivers/gaplus.cpp | 23 +- src/mame/drivers/gimix.cpp | 10 +- src/mame/drivers/gladiatr.cpp | 22 +- src/mame/drivers/gng.cpp | 22 +- src/mame/drivers/gotcha.cpp | 19 +- src/mame/drivers/groundfx.cpp | 18 +- src/mame/drivers/gstriker.cpp | 20 +- src/mame/drivers/gsword.cpp | 14 +- src/mame/drivers/guab.cpp | 6 +- src/mame/drivers/gunbustr.cpp | 18 +- src/mame/drivers/h8.cpp | 10 +- src/mame/drivers/harriet.cpp | 6 +- src/mame/drivers/hazelgr.cpp | 16 +- src/mame/drivers/hazeltin.cpp | 6 +- src/mame/drivers/hnayayoi.cpp | 20 +- src/mame/drivers/holeland.cpp | 16 +- src/mame/drivers/hp16500.cpp | 25 +- src/mame/drivers/i7000.cpp | 4 +- src/mame/drivers/ibm6580.cpp | 10 +- src/mame/drivers/igs017.cpp | 12 +- src/mame/drivers/imds2.cpp | 4 +- src/mame/drivers/imolagp.cpp | 14 +- src/mame/drivers/imsai.cpp | 12 +- src/mame/drivers/inder.cpp | 11 +- src/mame/drivers/interpro.cpp | 8 +- src/mame/drivers/ipc.cpp | 59 +- src/mame/drivers/irisha.cpp | 16 +- src/mame/drivers/isbc.cpp | 52 +- src/mame/drivers/isbc8030.cpp | 64 +- src/mame/drivers/iteagle.cpp | 14 +- src/mame/drivers/jade.cpp | 11 +- src/mame/drivers/jp.cpp | 36 +- src/mame/drivers/jpmsys5.cpp | 119 +- src/mame/drivers/kaypro.cpp | 61 +- src/mame/drivers/kdt6.cpp | 60 +- src/mame/drivers/kingobox.cpp | 62 +- src/mame/drivers/kinst.cpp | 3 +- src/mame/drivers/konin.cpp | 16 +- src/mame/drivers/kopunch.cpp | 26 +- src/mame/drivers/kyugo.cpp | 8 +- src/mame/drivers/liberatr.cpp | 18 +- src/mame/drivers/m24.cpp | 2 +- src/mame/drivers/m79152pc.cpp | 6 +- src/mame/drivers/magmax.cpp | 6 +- src/mame/drivers/mappy.cpp | 258 +- src/mame/drivers/marineb.cpp | 25 +- src/mame/drivers/mbee.cpp | 28 +- src/mame/drivers/mc8020.cpp | 8 +- src/mame/drivers/mc8030.cpp | 6 +- src/mame/drivers/mccpm.cpp | 6 +- src/mame/drivers/meritm.cpp | 24 +- src/mame/drivers/metro.cpp | 2 +- src/mame/drivers/mfabfz.cpp | 37 +- src/mame/drivers/mice.cpp | 10 +- src/mame/drivers/micro3d.cpp | 6 +- src/mame/drivers/microdec.cpp | 65 +- src/mame/drivers/microkit.cpp | 2 +- src/mame/drivers/microterm.cpp | 37 +- src/mame/drivers/milwaukee.cpp | 45 +- src/mame/drivers/miniframe.cpp | 22 +- src/mame/drivers/mits680b.cpp | 6 +- src/mame/drivers/mk14.cpp | 2 +- src/mame/drivers/mmd1.cpp | 4 +- src/mame/drivers/model1.cpp | 18 +- src/mame/drivers/model2.cpp | 49 +- src/mame/drivers/model3.cpp | 10 +- src/mame/drivers/mrflea.cpp | 18 +- src/mame/drivers/multi8.cpp | 6 +- src/mame/drivers/munchmo.cpp | 3 +- src/mame/drivers/mx2178.cpp | 10 +- src/mame/drivers/namcos12.cpp | 13 +- src/mame/drivers/namcos23.cpp | 49 +- src/mame/drivers/nbmj9195.cpp | 18 +- src/mame/drivers/nemesis.cpp | 18 +- src/mame/drivers/neogeo.cpp | 16 +- src/mame/drivers/neogeocd.cpp | 3 +- src/mame/drivers/ngen.cpp | 20 +- src/mame/drivers/ninjaw.cpp | 28 +- src/mame/drivers/norautp.cpp | 22 +- src/mame/drivers/nss.cpp | 6 +- src/mame/drivers/ob68k1a.cpp | 60 +- src/mame/drivers/octopus.cpp | 20 +- src/mame/drivers/okean240.cpp | 8 +- src/mame/drivers/olyboss.cpp | 22 +- src/mame/drivers/onyx.cpp | 12 +- src/mame/drivers/osbexec.cpp | 39 +- src/mame/drivers/othello.cpp | 2 +- src/mame/drivers/othunder.cpp | 16 +- src/mame/drivers/p8k.cpp | 12 +- src/mame/drivers/pacman.cpp | 8 +- src/mame/drivers/pandoras.cpp | 16 +- src/mame/drivers/pc100.cpp | 2 +- src/mame/drivers/pc88va.cpp | 4 +- src/mame/drivers/pc9801.cpp | 38 +- src/mame/drivers/pcd.cpp | 2 +- src/mame/drivers/pcm.cpp | 16 +- src/mame/drivers/pecom.cpp | 2 +- src/mame/drivers/peoplepc.cpp | 4 +- src/mame/drivers/peyper.cpp | 4 +- src/mame/drivers/pg685.cpp | 6 +- src/mame/drivers/pimps.cpp | 56 +- src/mame/drivers/pktgaldx.cpp | 10 +- src/mame/drivers/play_2.cpp | 14 +- src/mame/drivers/play_3.cpp | 16 +- src/mame/drivers/playch10.cpp | 46 +- src/mame/drivers/plus4.cpp | 40 +- src/mame/drivers/pm68k.cpp | 10 +- src/mame/drivers/pntnpuzl.cpp | 12 +- src/mame/drivers/pokechmp.cpp | 26 +- src/mame/drivers/polepos.cpp | 102 +- src/mame/drivers/polgar.cpp | 22 +- src/mame/drivers/policetr.cpp | 9 +- src/mame/drivers/poly.cpp | 9 +- src/mame/drivers/prof80.cpp | 42 +- src/mame/drivers/proteus.cpp | 24 +- src/mame/drivers/pulsar.cpp | 10 +- src/mame/drivers/punchout.cpp | 18 +- src/mame/drivers/pve500.cpp | 34 +- src/mame/drivers/qtsbc.cpp | 12 +- src/mame/drivers/qvt6800.cpp | 6 +- src/mame/drivers/qx10.cpp | 10 +- src/mame/drivers/raiden.cpp | 20 +- src/mame/drivers/rainbow.cpp | 6 +- src/mame/drivers/rc702.cpp | 25 +- src/mame/drivers/retofinv.cpp | 14 +- src/mame/drivers/rmnimbus.cpp | 4 +- src/mame/drivers/rohga.cpp | 32 +- src/mame/drivers/royalmah.cpp | 18 +- src/mame/drivers/runaway.cpp | 14 +- src/mame/drivers/s7.cpp | 18 +- src/mame/drivers/sbrain.cpp | 14 +- src/mame/drivers/sbrkout.cpp | 26 +- src/mame/drivers/scopus.cpp | 6 +- src/mame/drivers/sdk85.cpp | 12 +- src/mame/drivers/sdk86.cpp | 10 +- src/mame/drivers/seattle.cpp | 6 +- src/mame/drivers/seattlecmp.cpp | 24 +- src/mame/drivers/segac2.cpp | 29 +- src/mame/drivers/segae.cpp | 14 +- src/mame/drivers/segajw.cpp | 24 +- src/mame/drivers/segam1.cpp | 18 +- src/mame/drivers/segas16a.cpp | 2 +- src/mame/drivers/segas16b.cpp | 11 +- src/mame/drivers/segas18.cpp | 38 +- src/mame/drivers/segas24.cpp | 57 +- src/mame/drivers/segas32.cpp | 84 +- src/mame/drivers/segaufo.cpp | 120 +- src/mame/drivers/segaxbd.cpp | 22 +- src/mame/drivers/segaybd.cpp | 18 +- src/mame/drivers/selz80.cpp | 10 +- src/mame/drivers/seta.cpp | 8 +- src/mame/drivers/seta2.cpp | 2 +- src/mame/drivers/sfcbox.cpp | 6 +- src/mame/drivers/shangkid.cpp | 61 +- src/mame/drivers/shougi.cpp | 18 +- src/mame/drivers/slapfght.cpp | 60 +- src/mame/drivers/slapshot.cpp | 24 +- src/mame/drivers/snes.cpp | 6 +- src/mame/drivers/snesb.cpp | 6 +- src/mame/drivers/splash.cpp | 10 +- src/mame/drivers/stargame.cpp | 21 +- src/mame/drivers/starwars.cpp | 53 +- src/mame/drivers/studio2.cpp | 8 +- src/mame/drivers/subs.cpp | 18 +- src/mame/drivers/sun1.cpp | 59 +- src/mame/drivers/super6.cpp | 28 +- src/mame/drivers/superchs.cpp | 16 +- src/mame/drivers/superslave.cpp | 16 +- src/mame/drivers/suprloco.cpp | 10 +- src/mame/drivers/suprslam.cpp | 14 +- src/mame/drivers/supstarf.cpp | 4 +- src/mame/drivers/swtpc.cpp | 82 +- src/mame/drivers/swtpc09.cpp | 14 +- src/mame/drivers/sys9002.cpp | 10 +- src/mame/drivers/systec.cpp | 6 +- src/mame/drivers/taito_b.cpp | 302 +- src/mame/drivers/taito_f2.cpp | 56 +- src/mame/drivers/taito_h.cpp | 42 +- src/mame/drivers/taito_l.cpp | 60 +- src/mame/drivers/taito_z.cpp | 142 +- src/mame/drivers/taitoair.cpp | 14 +- src/mame/drivers/taitojc.cpp | 14 +- src/mame/drivers/taotaido.cpp | 24 +- src/mame/drivers/tatsumi.cpp | 6 +- src/mame/drivers/tavernie.cpp | 6 +- src/mame/drivers/thedealr.cpp | 18 +- src/mame/drivers/tim100.cpp | 46 +- src/mame/drivers/timelimt.cpp | 12 +- src/mame/drivers/tmc1800.cpp | 8 +- src/mame/drivers/tmc2000e.cpp | 4 +- src/mame/drivers/tmc600.cpp | 12 +- src/mame/drivers/toaplan2.cpp | 859 +++-- src/mame/drivers/tomcat.cpp | 18 +- src/mame/drivers/topspeed.cpp | 24 +- src/mame/drivers/tranz330.cpp | 12 +- src/mame/drivers/triplhnt.cpp | 47 +- src/mame/drivers/trs80dt1.cpp | 20 +- src/mame/drivers/ts803.cpp | 12 +- src/mame/drivers/tsamurai.cpp | 18 +- src/mame/drivers/tv912.cpp | 61 +- src/mame/drivers/twincobr.cpp | 14 +- src/mame/drivers/undrfire.cpp | 44 +- src/mame/drivers/unior.cpp | 19 +- src/mame/drivers/univac.cpp | 32 +- src/mame/drivers/v100.cpp | 30 +- src/mame/drivers/v1050.cpp | 14 +- src/mame/drivers/v550.cpp | 10 +- src/mame/drivers/v6809.cpp | 14 +- src/mame/drivers/vaportra.cpp | 4 +- src/mame/drivers/vastar.cpp | 8 +- src/mame/drivers/vector4.cpp | 14 +- src/mame/drivers/victor9k.cpp | 11 +- src/mame/drivers/vip.cpp | 2 +- src/mame/drivers/votrpss.cpp | 12 +- src/mame/drivers/votrtnt.cpp | 6 +- src/mame/drivers/vt100.cpp | 30 +- src/mame/drivers/vta2000.cpp | 28 +- src/mame/drivers/vtech1.cpp | 33 +- src/mame/drivers/wardner.cpp | 14 +- src/mame/drivers/warriorb.cpp | 28 +- src/mame/drivers/wgp.cpp | 14 +- src/mame/drivers/wicat.cpp | 18 +- src/mame/drivers/williams.cpp | 52 +- src/mame/drivers/wiping.cpp | 13 +- src/mame/drivers/xain.cpp | 27 +- src/mame/drivers/xerox820.cpp | 14 +- src/mame/drivers/xor100.cpp | 10 +- src/mame/drivers/z100.cpp | 4 +- src/mame/drivers/z88.cpp | 13 +- src/mame/drivers/zac2650.cpp | 24 +- src/mame/drivers/zn.cpp | 37 +- src/mame/drivers/zorba.cpp | 28 +- src/mame/drivers/zsbc3.cpp | 42 +- src/mame/includes/alesis.h | 2 +- src/mame/includes/apexc.h | 1 - src/mame/includes/apollo.h | 10 +- src/mame/includes/asteroid.h | 7 +- src/mame/includes/balsente.h | 1 - src/mame/includes/ccastles.h | 1 - src/mame/includes/cloud9.h | 2 - src/mame/includes/cvs.h | 6 +- src/mame/includes/dec8.h | 1 - src/mame/includes/dragon.h | 4 +- src/mame/includes/galaxold.h | 2 +- src/mame/includes/gng.h | 2 - src/mame/includes/jpmsys5.h | 1 - src/mame/includes/kopunch.h | 6 + src/mame/includes/liberatr.h | 2 - src/mame/includes/pgm2.h | 1 - src/mame/includes/super6.h | 26 +- src/mame/includes/taito_b.h | 34 +- src/mame/includes/triplhnt.h | 4 - src/mame/includes/v1050.h | 4 +- src/mame/includes/xbox_pci.h | 8 +- src/mame/includes/z88.h | 6 +- src/mame/machine/315_5296.h | 94 +- src/mame/machine/315_5338a.h | 77 +- src/mame/machine/315_5649.h | 52 +- src/mame/machine/6883sam.h | 2 +- src/mame/machine/abc80kb.h | 2 +- src/mame/machine/acs8600_ics.cpp | 120 +- src/mame/machine/acs8600_ics.h | 43 +- src/mame/machine/apollo.cpp | 14 +- src/mame/machine/apollo_kbd.h | 4 +- src/mame/machine/apricotkb.h | 2 +- src/mame/machine/at.cpp | 46 +- src/mame/machine/atarigen.h | 2 +- src/mame/machine/balsente.cpp | 5 - src/mame/machine/c117.h | 2 +- src/mame/machine/cammu.h | 2 +- src/mame/machine/cat702.h | 2 +- src/mame/machine/cit101_kbd.h | 2 +- src/mame/machine/compiskb.h | 2 +- src/mame/machine/cuda.h | 8 +- src/mame/machine/dec_lk201.h | 2 +- src/mame/machine/deco104.h | 4 - src/mame/machine/deco146.h | 12 +- src/mame/machine/deco_irq.h | 12 +- src/mame/machine/egret.h | 8 +- src/mame/machine/esqpanel.h | 4 +- src/mame/machine/fm_scsi.h | 4 +- src/mame/machine/gaelco3d.h | 2 +- src/mame/machine/hp9845_printer.h | 6 +- src/mame/machine/ibm6580_fdc.h | 6 +- src/mame/machine/ibm6580_kbd.h | 15 +- src/mame/machine/interpro_ioga.h | 27 +- src/mame/machine/interpro_sga.h | 2 +- src/mame/machine/ioptimer.h | 2 +- src/mame/machine/isbc_208.h | 2 +- src/mame/machine/isbc_215g.h | 2 +- src/mame/machine/k573cass.h | 18 +- src/mame/machine/kay_kbd.h | 8 +- src/mame/machine/kc_keyb.h | 2 +- src/mame/machine/km035.h | 4 +- src/mame/machine/m24_kbd.h | 2 +- src/mame/machine/m24_z8000.h | 2 +- src/mame/machine/mackbd.cpp | 25 +- src/mame/machine/mackbd.h | 2 +- src/mame/machine/microdrv.h | 2 +- src/mame/machine/micropolis.h | 6 +- src/mame/machine/midikbd.h | 2 +- src/mame/machine/midwayic.h | 6 +- src/mame/machine/mm1kb.h | 2 +- src/mame/machine/model1io.cpp | 43 +- src/mame/machine/model1io.h | 32 +- src/mame/machine/model1io2.cpp | 80 +- src/mame/machine/model1io2.h | 32 +- src/mame/machine/ms7004.h | 4 +- src/mame/machine/msx_matsushita.h | 2 +- src/mame/machine/namco06.h | 24 +- src/mame/machine/namco51.h | 14 +- src/mame/machine/namco53.h | 15 +- src/mame/machine/namco62.h | 12 +- src/mame/machine/namco_c148.h | 4 +- src/mame/machine/namcoio.h | 39 +- src/mame/machine/nb1412m2.h | 2 +- src/mame/machine/nextkbd.h | 6 +- src/mame/machine/nextmo.h | 4 +- src/mame/machine/pc1512kb.h | 4 +- src/mame/machine/pc9801_kbd.h | 2 +- src/mame/machine/pcd_kbd.h | 2 +- src/mame/machine/pcshare.cpp | 4 +- src/mame/machine/ps2timer.h | 3 +- src/mame/machine/psxcd.h | 2 +- src/mame/machine/qimi.h | 2 +- src/mame/machine/rad_eu3a05gpio.h | 6 +- src/mame/machine/segaic16.h | 15 +- src/mame/machine/seibucop/seibucop.h | 4 +- src/mame/machine/tait8741.h | 8 +- src/mame/machine/taito68705interface.h | 6 +- src/mame/machine/taitocchip.h | 14 +- src/mame/machine/taitoio.h | 140 +- src/mame/machine/taitosjsec.h | 8 +- src/mame/machine/tandy2kb.h | 4 +- src/mame/machine/trs80m2kb.h | 2 +- src/mame/machine/upd65031.h | 12 +- src/mame/machine/v1050kb.h | 2 +- src/mame/machine/victor9k_fdc.h | 21 +- src/mame/machine/victor9k_kb.h | 4 +- src/mame/machine/vs9209.h | 68 +- src/mame/machine/vt100_kbd.h | 2 +- src/mame/machine/wangpckb.h | 2 +- src/mame/machine/x820kb.h | 2 +- src/mame/machine/xbox.cpp | 4 +- src/mame/machine/znmcu.h | 10 +- src/mame/machine/zx8302.h | 28 +- src/mame/video/733_asr.h | 4 +- src/mame/video/911_vdt.h | 4 +- src/mame/video/abc800.cpp | 11 +- src/mame/video/abc802.cpp | 13 +- src/mame/video/atarivad.h | 2 +- src/mame/video/bfm_dm01.h | 2 +- src/mame/video/cidelsa.cpp | 6 +- src/mame/video/comx35.cpp | 4 +- src/mame/video/decodmd1.cpp | 14 +- src/mame/video/dynax_blitter_rev2.h | 22 +- src/mame/video/exidy440.cpp | 14 +- src/mame/video/gime.h | 6 +- src/mame/video/gp9001.h | 17 +- src/mame/video/gtia.h | 4 +- src/mame/video/k051960.h | 6 +- src/mame/video/k052109.h | 2 +- src/mame/video/k053250_ps.h | 2 +- src/mame/video/k057714.h | 2 +- src/mame/video/k1ge.h | 8 +- src/mame/video/liberatr.cpp | 6 - src/mame/video/nick.h | 2 +- src/mame/video/pcd.h | 2 +- src/mame/video/pecom.cpp | 2 +- src/mame/video/runaway.cpp | 3 +- src/mame/video/segaic24.h | 4 +- src/mame/video/seibu_crtc.h | 10 +- src/mame/video/taito_b.cpp | 6 +- src/mame/video/tc0180vcu.h | 4 +- src/mame/video/tia.h | 6 +- src/mame/video/tmc1800.cpp | 4 +- src/mame/video/tmc600.cpp | 2 +- src/mame/video/uv201.h | 6 +- src/mame/video/vsystem_gga.h | 2 +- src/mame/video/vtvideo.h | 8 +- src/mame/video/wpc_dmd.h | 2 +- src/mame/video/ygv608.h | 4 +- src/mame/video/zx8301.h | 2 +- 1008 files changed, 10915 insertions(+), 9605 deletions(-) diff --git a/src/devices/bus/a1bus/a1bus.h b/src/devices/bus/a1bus/a1bus.h index 6ab28767a29..484cba5b70f 100644 --- a/src/devices/bus/a1bus/a1bus.h +++ b/src/devices/bus/a1bus/a1bus.h @@ -20,10 +20,10 @@ downcast(*device).set_cputag(_cputag); #define MCFG_A1BUS_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_A1BUS_OUT_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/bus/a2bus/a2bus.h b/src/devices/bus/a2bus/a2bus.h index 546c2592885..1e1d2b832ee 100644 --- a/src/devices/bus/a2bus/a2bus.h +++ b/src/devices/bus/a2bus/a2bus.h @@ -33,13 +33,13 @@ downcast(*device).set_cputag(_cputag); #define MCFG_A2BUS_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_A2BUS_OUT_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); #define MCFG_A2BUS_OUT_INH_CB(_devcb) \ - devcb = &downcast(*device).set_out_inh_callback(DEVCB_##_devcb); + downcast(*device).set_out_inh_callback(DEVCB_##_devcb); // 7M = XTAL(14'318'181) / 2 or XTAL(28'636'363) / 4 (for IIgs) static constexpr uint32_t A2BUS_7M_CLOCK = 7159090; diff --git a/src/devices/bus/a2bus/a2eauxslot.h b/src/devices/bus/a2bus/a2eauxslot.h index 2101f5cfc6b..1da89b18d7a 100644 --- a/src/devices/bus/a2bus/a2eauxslot.h +++ b/src/devices/bus/a2bus/a2eauxslot.h @@ -23,10 +23,10 @@ downcast(*device).set_cputag(_cputag); #define MCFG_A2EAUXSLOT_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_A2EAUXSLOT_OUT_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); #define MCFG_A2EAUXSLOT_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \ MCFG_DEVICE_ADD(_tag, A2EAUXSLOT_SLOT, 0) \ diff --git a/src/devices/bus/a2bus/a2mcms.cpp b/src/devices/bus/a2bus/a2mcms.cpp index 6d11cbebf27..1442d7d68bc 100644 --- a/src/devices/bus/a2bus/a2mcms.cpp +++ b/src/devices/bus/a2bus/a2mcms.cpp @@ -39,7 +39,7 @@ DEFINE_DEVICE_TYPE(A2BUS_MCMS2, a2bus_mcms2_device, "a2mcms2", "Mountain Compute #define ENGINE_TAG "engine" #define MCFG_MCMS_IRQ_CALLBACK(_cb) \ - devcb = &downcast(*device).set_irq_cb(DEVCB_##_cb); + downcast(*device).set_irq_cb(DEVCB_##_cb); /*************************************************************************** FUNCTION PROTOTYPES diff --git a/src/devices/bus/a2bus/pc_xporter.cpp b/src/devices/bus/a2bus/pc_xporter.cpp index 0495fb4fbf6..dd8671b7b87 100644 --- a/src/devices/bus/a2bus/pc_xporter.cpp +++ b/src/devices/bus/a2bus/pc_xporter.cpp @@ -147,8 +147,8 @@ MACHINE_CONFIG_START(a2bus_pcxporter_device::device_add_mconfig) MCFG_I8237_OUT_DACK_2_CB(WRITELINE(*this, a2bus_pcxporter_device, pc_dack2_w)) MCFG_I8237_OUT_DACK_3_CB(WRITELINE(*this, a2bus_pcxporter_device, pc_dack3_w)) - MCFG_DEVICE_ADD(m_pic8259, PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(INPUTLINE(m_v30, 0)) + PIC8259(config, m_pic8259, 0); + m_pic8259->out_int_callback().set_inputline(m_v30, 0); MCFG_DEVICE_ADD(m_isabus, ISA8, 0) MCFG_ISA8_CPU(m_v30) diff --git a/src/devices/bus/a800/a8sio.h b/src/devices/bus/a800/a8sio.h index 448edf5602f..a2c88b08328 100644 --- a/src/devices/bus/a800/a8sio.h +++ b/src/devices/bus/a800/a8sio.h @@ -46,7 +46,7 @@ downcast(*device).set_a8sio_slot(_nbtag, _tag); #define MCFG_A8SIO_DATA_IN_CB(_devcb) \ - devcb = &downcast(*device).set_data_in_callback(DEVCB_##_devcb); + downcast(*device).set_data_in_callback(DEVCB_##_devcb); class a8sio_slot_device : public device_t, diff --git a/src/devices/bus/abcbus/abcbus.h b/src/devices/bus/abcbus/abcbus.h index b66744c2ec2..5bd338b05d7 100644 --- a/src/devices/bus/abcbus/abcbus.h +++ b/src/devices/bus/abcbus/abcbus.h @@ -120,34 +120,34 @@ #define MCFG_ABCBUS_SLOT_IRQ_CALLBACK(_irq) \ - devcb = &downcast(device)->set_irq_callback(DEVCB_##_irq); + downcast(device)->set_irq_callback(DEVCB_##_irq); #define MCFG_ABCBUS_SLOT_NMI_CALLBACK(_nmi) \ - devcb = &downcast(device)->set_nmi_callback(DEVCB_##_nmi); + downcast(device)->set_nmi_callback(DEVCB_##_nmi); #define MCFG_ABCBUS_SLOT_RDY_CALLBACK(_rdy) \ - devcb = &downcast(device)->set_rdy_callback(DEVCB_##_rdy); + downcast(device)->set_rdy_callback(DEVCB_##_rdy); #define MCFG_ABCBUS_SLOT_RESIN_CALLBACK(_resin) \ - devcb = &downcast(device)->set_resin_callback(DEVCB_##_resin); + downcast(device)->set_resin_callback(DEVCB_##_resin); #define MCFG_ABCBUS_SLOT_PREN_CALLBACK(_pren) \ - devcb = &downcast(device)->set_pren_callback(DEVCB_##_pren); + downcast(device)->set_pren_callback(DEVCB_##_pren); #define MCFG_ABCBUS_SLOT_TRRQ_CALLBACK(_trrq) \ - devcb = &downcast(device)->set_trrq_callback(DEVCB_##_trrq); + downcast(device)->set_trrq_callback(DEVCB_##_trrq); #define MCFG_ABCBUS_SLOT_XINT2_CALLBACK(_xint2) \ - devcb = &downcast(device)->set_xint2_callback(DEVCB_##_xint2); + downcast(device)->set_xint2_callback(DEVCB_##_xint2); #define MCFG_ABCBUS_SLOT_XINT3_CALLBACK(_xint3) \ - devcb = &downcast(device)->set_xint3_callback(DEVCB_##_xint3); + downcast(device)->set_xint3_callback(DEVCB_##_xint3); #define MCFG_ABCBUS_SLOT_XINT4_CALLBACK(_xint4) \ - devcb = &downcast(device)->set_xint4_callback(DEVCB_##_xint4); + downcast(device)->set_xint4_callback(DEVCB_##_xint4); #define MCFG_ABCBUS_SLOT_XINT5_CALLBACK(_xint5) \ - devcb = &downcast(device)->set_xint5_callback(DEVCB_##_xint5); + downcast(device)->set_xint5_callback(DEVCB_##_xint5); diff --git a/src/devices/bus/abckb/abckb.h b/src/devices/bus/abckb/abckb.h index 2f1256299ba..7ec223fc942 100644 --- a/src/devices/bus/abckb/abckb.h +++ b/src/devices/bus/abckb/abckb.h @@ -23,13 +23,13 @@ MCFG_DEVICE_SLOT_INTERFACE(abc_keyboard_devices, _def_slot, false) #define MCFG_ABC_KEYBOARD_OUT_RX_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_rx_handler(DEVCB_##_devcb); + downcast(*device).set_out_rx_handler(DEVCB_##_devcb); #define MCFG_ABC_KEYBOARD_OUT_TRXC_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_trxc_handler(DEVCB_##_devcb); + downcast(*device).set_out_trxc_handler(DEVCB_##_devcb); #define MCFG_ABC_KEYBOARD_OUT_KEYDOWN_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_keydown_handler(DEVCB_##_devcb); + downcast(*device).set_out_keydown_handler(DEVCB_##_devcb); diff --git a/src/devices/bus/adam/exp.h b/src/devices/bus/adam/exp.h index 9743577e7ec..7751c0f4c64 100644 --- a/src/devices/bus/adam/exp.h +++ b/src/devices/bus/adam/exp.h @@ -34,7 +34,7 @@ #define MCFG_ADAM_EXPANSION_SLOT_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/amiga/keyboard/keyboard.h b/src/devices/bus/amiga/keyboard/keyboard.h index 772a904f889..5fb210afa29 100644 --- a/src/devices/bus/amiga/keyboard/keyboard.h +++ b/src/devices/bus/amiga/keyboard/keyboard.h @@ -28,13 +28,13 @@ MCFG_DEVICE_SLOT_INTERFACE(amiga_keyboard_devices, _def_slot, false) #define MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_kclk_handler(DEVCB_##_devcb); + downcast(*device).set_kclk_handler(DEVCB_##_devcb); #define MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_kdat_handler(DEVCB_##_devcb); + downcast(*device).set_kdat_handler(DEVCB_##_devcb); #define MCFG_AMIGA_KEYBOARD_KRST_HANDLER(_devcb) \ - devcb = &downcast(*device).set_krst_handler(DEVCB_##_devcb); + downcast(*device).set_krst_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/amiga/zorro/zorro.h b/src/devices/bus/amiga/zorro/zorro.h index 02ece4b59a4..3686f050002 100644 --- a/src/devices/bus/amiga/zorro/zorro.h +++ b/src/devices/bus/amiga/zorro/zorro.h @@ -172,16 +172,16 @@ // callbacks #define MCFG_EXPANSION_SLOT_OVR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ovr_handler(DEVCB_##_devcb); + downcast(*device).set_ovr_handler(DEVCB_##_devcb); #define MCFG_EXPANSION_SLOT_INT2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int2_handler(DEVCB_##_devcb); + downcast(*device).set_int2_handler(DEVCB_##_devcb); #define MCFG_EXPANSION_SLOT_INT6_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int6_handler(DEVCB_##_devcb); + downcast(*device).set_int6_handler(DEVCB_##_devcb); #define MCFG_EXPANSION_SLOT_IPL_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ipl_handler(DEVCB_##_devcb); + downcast(*device).set_ipl_handler(DEVCB_##_devcb); // ======================> zorro 2 bus @@ -193,25 +193,25 @@ MCFG_ZORRO_SLOT_ADD(ZORROBUS_TAG, _tag, _slot_intf, _def_slot) #define MCFG_ZORRO2_OVR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ovr_handler(DEVCB_##_devcb); + downcast(*device).set_ovr_handler(DEVCB_##_devcb); #define MCFG_ZORRO2_INT2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int2_handler(DEVCB_##_devcb); + downcast(*device).set_int2_handler(DEVCB_##_devcb); #define MCFG_ZORRO2_INT6_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int6_handler(DEVCB_##_devcb); + downcast(*device).set_int6_handler(DEVCB_##_devcb); #define MCFG_ZORRO2_EINT1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_eint1_handler(DEVCB_##_devcb); + downcast(*device).set_eint1_handler(DEVCB_##_devcb); #define MCFG_ZORRO2_EINT4_HANDLER(_devcb) \ - devcb = &downcast(*device).set_eint4_handler(DEVCB_##_devcb); + downcast(*device).set_eint4_handler(DEVCB_##_devcb); #define MCFG_ZORRO2_EINT5_HANDLER(_devcb) \ - devcb = &downcast(*device).set_eint5_handler(DEVCB_##_devcb); + downcast(*device).set_eint5_handler(DEVCB_##_devcb); #define MCFG_ZORRO2_EINT7_HANDLER(_devcb) \ - devcb = &downcast(*device).set_eint7_handler(DEVCB_##_devcb); + downcast(*device).set_eint7_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/apricot/expansion/expansion.h b/src/devices/bus/apricot/expansion/expansion.h index 02ebbbe32ce..e7f2b881819 100644 --- a/src/devices/bus/apricot/expansion/expansion.h +++ b/src/devices/bus/apricot/expansion/expansion.h @@ -64,22 +64,22 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) #define MCFG_EXPANSION_DMA1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dma1_handler(DEVCB_##_devcb); + downcast(*device).set_dma1_handler(DEVCB_##_devcb); #define MCFG_EXPANSION_DMA2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dma2_handler(DEVCB_##_devcb); + downcast(*device).set_dma2_handler(DEVCB_##_devcb); #define MCFG_EXPANSION_EXT1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ext1_handler(DEVCB_##_devcb); + downcast(*device).set_ext1_handler(DEVCB_##_devcb); #define MCFG_EXPANSION_EXT2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ext2_handler(DEVCB_##_devcb); + downcast(*device).set_ext2_handler(DEVCB_##_devcb); #define MCFG_EXPANSION_INT2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int2_handler(DEVCB_##_devcb); + downcast(*device).set_int2_handler(DEVCB_##_devcb); #define MCFG_EXPANSION_INT3_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int3_handler(DEVCB_##_devcb); + downcast(*device).set_int3_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/apricot/keyboard/keyboard.h b/src/devices/bus/apricot/keyboard/keyboard.h index 857a78b7d1c..b71c2a47c5f 100644 --- a/src/devices/bus/apricot/keyboard/keyboard.h +++ b/src/devices/bus/apricot/keyboard/keyboard.h @@ -43,7 +43,7 @@ MCFG_DEVICE_SLOT_INTERFACE(apricot_keyboard_devices, _def_slot, false) #define MCFG_APRICOT_KEYBOARD_IN_HANDLER(_devcb) \ - devcb = &downcast(*device).set_in_handler(DEVCB_##_devcb); + downcast(*device).set_in_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/bbc/1mhzbus/1mhzbus.h b/src/devices/bus/bbc/1mhzbus/1mhzbus.h index e2237bef0ff..15e4721e556 100644 --- a/src/devices/bus/bbc/1mhzbus/1mhzbus.h +++ b/src/devices/bus/bbc/1mhzbus/1mhzbus.h @@ -100,10 +100,10 @@ MCFG_BBC_1MHZBUS_SLOT_NMI_HANDLER(WRITELINE(DEVICE_SELF_OWNER, bbc_1mhzbus_slot_device, nmi_w)) #define MCFG_BBC_1MHZBUS_SLOT_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_BBC_1MHZBUS_SLOT_NMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_nmi_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/bbc/fdc/fdc.h b/src/devices/bus/bbc/fdc/fdc.h index 4e2363560ba..892db41fe1d 100644 --- a/src/devices/bus/bbc/fdc/fdc.h +++ b/src/devices/bus/bbc/fdc/fdc.h @@ -22,10 +22,10 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed) #define MCFG_BBC_FDC_SLOT_INTRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_intrq_handler(DEVCB_##_devcb); + downcast(*device).set_intrq_handler(DEVCB_##_devcb); #define MCFG_BBC_FDC_SLOT_DRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_drq_handler(DEVCB_##_devcb); + downcast(*device).set_drq_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/bbc/joyport/joyport.h b/src/devices/bus/bbc/joyport/joyport.h index bfc93f2d9e2..a11e39a38ec 100644 --- a/src/devices/bus/bbc/joyport/joyport.h +++ b/src/devices/bus/bbc/joyport/joyport.h @@ -42,10 +42,10 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) #define MCFG_BBC_JOYPORT_CB1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cb1_handler(DEVCB_##_devcb); + downcast(*device).set_cb1_handler(DEVCB_##_devcb); #define MCFG_BBC_JOYPORT_CB2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cb2_handler(DEVCB_##_devcb); + downcast(*device).set_cb2_handler(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/bus/bbc/tube/tube.h b/src/devices/bus/bbc/tube/tube.h index b60d349df47..722207d8d93 100644 --- a/src/devices/bus/bbc/tube/tube.h +++ b/src/devices/bus/bbc/tube/tube.h @@ -54,7 +54,7 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) #define MCFG_BBC_TUBE_SLOT_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/bbc/tube/tube_80186.cpp b/src/devices/bus/bbc/tube/tube_80186.cpp index 46350c4a13b..432341ea15b 100644 --- a/src/devices/bus/bbc/tube/tube_80186.cpp +++ b/src/devices/bus/bbc/tube/tube_80186.cpp @@ -53,25 +53,25 @@ ROM_END // device_add_mconfig - add device configuration //------------------------------------------------- -MACHINE_CONFIG_START(bbc_tube_80186_device::device_add_mconfig) - MCFG_DEVICE_ADD("i80186", I80186, XTAL(20'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(tube_80186_mem) - MCFG_DEVICE_IO_MAP(tube_80186_io) - //MCFG_80186_CHIP_SELECT_CB(WRITE16(*this, bbc_tube_80186_device, chip_select_cb)) - MCFG_80186_TMROUT0_HANDLER(INPUTLINE("i80186", INPUT_LINE_HALT)) MCFG_DEVCB_INVERT - MCFG_80186_TMROUT1_HANDLER(INPUTLINE("i80186", INPUT_LINE_NMI)) MCFG_DEVCB_INVERT +void bbc_tube_80186_device::device_add_mconfig(machine_config &config) +{ + I80186(config, m_i80186, 20_MHz_XTAL / 2); + m_i80186->set_addrmap(AS_PROGRAM, &bbc_tube_80186_device::tube_80186_mem); + m_i80186->set_addrmap(AS_IO, &bbc_tube_80186_device::tube_80186_io); + //m_i80186->chip_select_callback().set(FUNC(bbc_tube_80186_device::chip_select_cb)); + m_i80186->tmrout0_handler().set_inputline(m_i80186, INPUT_LINE_HALT).invert(); + m_i80186->tmrout1_handler().set_inputline(m_i80186, INPUT_LINE_NMI).invert(); - MCFG_TUBE_ADD("ula") - MCFG_TUBE_PIRQ_HANDLER(WRITELINE("i80186", i80186_cpu_device, int0_w)) - MCFG_TUBE_DRQ_HANDLER(WRITELINE("i80186", i80186_cpu_device, drq0_w)) + TUBE(config, m_ula, 0); + m_ula->pirq_handler().set(m_i80186, FUNC(i80186_cpu_device::int0_w)); + m_ula->drq_handler().set(m_i80186, FUNC(i80186_cpu_device::drq0_w)); /* internal ram */ - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("512K") + RAM(config, m_ram, 0).set_default_size("512K"); /* software lists */ - MCFG_SOFTWARE_LIST_ADD("flop_ls_80186", "bbc_flop_80186") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "flop_ls_80186").set_original("bbc_flop_80186"); +} //------------------------------------------------- // rom_region - device-specific ROM region diff --git a/src/devices/bus/bbc/tube/tube_casper.cpp b/src/devices/bus/bbc/tube/tube_casper.cpp index 02c19165fd0..393305616b8 100644 --- a/src/devices/bus/bbc/tube/tube_casper.cpp +++ b/src/devices/bus/bbc/tube/tube_casper.cpp @@ -48,25 +48,26 @@ ROM_END // device_add_mconfig - add device configuration //------------------------------------------------- -MACHINE_CONFIG_START(bbc_tube_casper_device::device_add_mconfig) - MCFG_DEVICE_ADD(m_m68000, M68000, XTAL(4'000'000)) - MCFG_DEVICE_PROGRAM_MAP(tube_casper_mem) +void bbc_tube_casper_device::device_add_mconfig(machine_config &config) +{ + M68000(config, m_m68000, 4_MHz_XTAL); + m_m68000->set_addrmap(AS_PROGRAM, &bbc_tube_casper_device::tube_casper_mem); - MCFG_DEVICE_ADD(m_via6522_0, VIA6522, XTAL(4'000'000) / 2) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(m_via6522_1, via6522_device, write_pa)) - MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_via6522_1, via6522_device, write_cb1)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_via6522_1, via6522_device, write_ca1)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(DEVICE_SELF_OWNER, bbc_tube_slot_device, irq_w)) + VIA6522(config, m_via6522_0, 4_MHz_XTAL / 2); + m_via6522_0->writepb_handler().set(m_via6522_1, FUNC(via6522_device::write_pa)); + m_via6522_0->ca2_handler().set(m_via6522_1, FUNC(via6522_device::write_cb1)); + m_via6522_0->cb2_handler().set(m_via6522_1, FUNC(via6522_device::write_ca1)); + m_via6522_0->irq_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_tube_slot_device::irq_w)); - MCFG_DEVICE_ADD(m_via6522_1, VIA6522, XTAL(4'000'000) / 2) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(m_via6522_0, via6522_device, write_pa)) - MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_via6522_0, via6522_device, write_cb1)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_via6522_0, via6522_device, write_ca1)) - MCFG_VIA6522_IRQ_HANDLER(INPUTLINE(m_m68000, M68K_IRQ_1)) + VIA6522(config, m_via6522_1, 4_MHz_XTAL / 2); + m_via6522_1->writepb_handler().set(m_via6522_0, FUNC(via6522_device::write_pa)); + m_via6522_1->ca2_handler().set(m_via6522_0, FUNC(via6522_device::write_cb1)); + m_via6522_1->cb2_handler().set(m_via6522_0, FUNC(via6522_device::write_ca1)); + m_via6522_1->irq_handler().set_inputline(m_m68000, M68K_IRQ_1); /* software lists */ - MCFG_SOFTWARE_LIST_ADD("flop_ls_casper", "bbc_flop_68000") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "flop_ls_casper").set_original("bbc_flop_68000"); +} //------------------------------------------------- // rom_region - device-specific ROM region diff --git a/src/devices/bus/bbc/userport/userport.h b/src/devices/bus/bbc/userport/userport.h index f19911a4631..22003968ee9 100644 --- a/src/devices/bus/bbc/userport/userport.h +++ b/src/devices/bus/bbc/userport/userport.h @@ -41,10 +41,10 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) #define MCFG_BBC_USERPORT_CB1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cb1_handler(DEVCB_##_devcb); + downcast(*device).set_cb1_handler(DEVCB_##_devcb); #define MCFG_BBC_USERPORT_CB2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cb2_handler(DEVCB_##_devcb); + downcast(*device).set_cb2_handler(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/bus/bml3/bml3bus.h b/src/devices/bus/bml3/bml3bus.h index be5e419b8f8..918e7b449b1 100644 --- a/src/devices/bus/bml3/bml3bus.h +++ b/src/devices/bus/bml3/bml3bus.h @@ -24,13 +24,13 @@ downcast(*device).set_cputag(_cputag); #define MCFG_BML3BUS_OUT_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); #define MCFG_BML3BUS_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_BML3BUS_OUT_FIRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_firq_callback(DEVCB_##_devcb); + downcast(*device).set_out_firq_callback(DEVCB_##_devcb); #define MCFG_BML3BUS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \ MCFG_DEVICE_ADD(_tag, BML3BUS_SLOT, 0) \ diff --git a/src/devices/bus/c64/exp.h b/src/devices/bus/c64/exp.h index de35666a5d2..ff3c8eadbab 100644 --- a/src/devices/bus/c64/exp.h +++ b/src/devices/bus/c64/exp.h @@ -68,22 +68,22 @@ #define MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_C64_EXPANSION_SLOT_NMI_CALLBACK(_write) \ - devcb = &downcast(*device).set_nmi_wr_callback(DEVCB_##_write); + downcast(*device).set_nmi_wr_callback(DEVCB_##_write); #define MCFG_C64_EXPANSION_SLOT_RESET_CALLBACK(_write) \ - devcb = &downcast(*device).set_reset_wr_callback(DEVCB_##_write); + downcast(*device).set_reset_wr_callback(DEVCB_##_write); #define MCFG_C64_EXPANSION_SLOT_CD_INPUT_CALLBACK(_read) \ - devcb = &downcast(*device).set_cd_rd_callback(DEVCB_##_read); + downcast(*device).set_cd_rd_callback(DEVCB_##_read); #define MCFG_C64_EXPANSION_SLOT_CD_OUTPUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_cd_wr_callback(DEVCB_##_write); + downcast(*device).set_cd_wr_callback(DEVCB_##_write); #define MCFG_C64_EXPANSION_SLOT_DMA_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma_wr_callback(DEVCB_##_write); + downcast(*device).set_dma_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/cbm2/user.h b/src/devices/bus/cbm2/user.h index 7ebe6ddbf34..55a76c2d4fb 100644 --- a/src/devices/bus/cbm2/user.h +++ b/src/devices/bus/cbm2/user.h @@ -48,16 +48,16 @@ #define MCFG_CBM2_USER_PORT_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_CBM2_USER_PORT_SP_CALLBACK(_write) \ - devcb = &downcast(*device).set_sp_wr_callback(DEVCB_##_write); + downcast(*device).set_sp_wr_callback(DEVCB_##_write); #define MCFG_CBM2_USER_PORT_CNT_CALLBACK(_write) \ - devcb = &downcast(*device).set_cnt_wr_callback(DEVCB_##_write); + downcast(*device).set_cnt_wr_callback(DEVCB_##_write); #define MCFG_CBM2_USER_PORT_FLAG_CALLBACK(_write) \ - devcb = &downcast(*device).set_flag_wr_callback(DEVCB_##_write); + downcast(*device).set_flag_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/cbmiec/cbmiec.h b/src/devices/bus/cbmiec/cbmiec.h index da951186a81..0ed382142e0 100644 --- a/src/devices/bus/cbmiec/cbmiec.h +++ b/src/devices/bus/cbmiec/cbmiec.h @@ -31,19 +31,19 @@ #define MCFG_CBM_IEC_BUS_SRQ_CALLBACK(_write) \ - devcb = &downcast(device)->set_srq_callback(DEVCB_##_write); + downcast(device)->set_srq_callback(DEVCB_##_write); #define MCFG_CBM_IEC_BUS_ATN_CALLBACK(_write) \ - devcb = &downcast(device)->set_atn_callback(DEVCB_##_write); + downcast(device)->set_atn_callback(DEVCB_##_write); #define MCFG_CBM_IEC_BUS_CLK_CALLBACK(_write) \ - devcb = &downcast(device)->set_clk_callback(DEVCB_##_write); + downcast(device)->set_clk_callback(DEVCB_##_write); #define MCFG_CBM_IEC_BUS_DATA_CALLBACK(_write) \ - devcb = &downcast(device)->set_data_callback(DEVCB_##_write); + downcast(device)->set_data_callback(DEVCB_##_write); #define MCFG_CBM_IEC_BUS_RESET_CALLBACK(_write) \ - devcb = &downcast(device)->set_reset_callback(DEVCB_##_write); + downcast(device)->set_reset_callback(DEVCB_##_write); #define MCFG_CBM_IEC_SLOT_ADD(_tag, _address, _slot_intf, _def_slot) \ diff --git a/src/devices/bus/cbus/pc9801_cbus.h b/src/devices/bus/cbus/pc9801_cbus.h index 9f2f72591fb..4fb77ebe7fb 100644 --- a/src/devices/bus/cbus/pc9801_cbus.h +++ b/src/devices/bus/cbus/pc9801_cbus.h @@ -31,25 +31,25 @@ downcast(*device).set_cpu_tag(_cputag); #define MCFG_PC9801CBUS_INT0_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_callback<0>(DEVCB_##_devcb); + downcast(*device).set_int_callback<0>(DEVCB_##_devcb); #define MCFG_PC9801CBUS_INT1_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_callback<1>(DEVCB_##_devcb); + downcast(*device).set_int_callback<1>(DEVCB_##_devcb); #define MCFG_PC9801CBUS_INT2_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_callback<2>(DEVCB_##_devcb); + downcast(*device).set_int_callback<2>(DEVCB_##_devcb); #define MCFG_PC9801CBUS_INT3_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_callback<3>(DEVCB_##_devcb); + downcast(*device).set_int_callback<3>(DEVCB_##_devcb); #define MCFG_PC9801CBUS_INT4_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_callback<4>(DEVCB_##_devcb); + downcast(*device).set_int_callback<4>(DEVCB_##_devcb); #define MCFG_PC9801CBUS_INT5_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_callback<5>(DEVCB_##_devcb); + downcast(*device).set_int_callback<5>(DEVCB_##_devcb); #define MCFG_PC9801CBUS_INT6_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_callback<6>(DEVCB_##_devcb); + downcast(*device).set_int_callback<6>(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/centronics/ctronics.h b/src/devices/bus/centronics/ctronics.h index 3c73690199d..a9e9c921546 100644 --- a/src/devices/bus/centronics/ctronics.h +++ b/src/devices/bus/centronics/ctronics.h @@ -15,55 +15,55 @@ #define MCFG_CENTRONICS_STROBE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_strobe_handler(DEVCB_##_devcb); + downcast(*device).set_strobe_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_DATA0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data0_handler(DEVCB_##_devcb); + downcast(*device).set_data0_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_DATA1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data1_handler(DEVCB_##_devcb); + downcast(*device).set_data1_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_DATA2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data2_handler(DEVCB_##_devcb); + downcast(*device).set_data2_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_DATA3_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data3_handler(DEVCB_##_devcb); + downcast(*device).set_data3_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_DATA4_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data4_handler(DEVCB_##_devcb); + downcast(*device).set_data4_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_DATA5_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data5_handler(DEVCB_##_devcb); + downcast(*device).set_data5_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_DATA6_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data6_handler(DEVCB_##_devcb); + downcast(*device).set_data6_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_DATA7_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data7_handler(DEVCB_##_devcb); + downcast(*device).set_data7_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_ACK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ack_handler(DEVCB_##_devcb); + downcast(*device).set_ack_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_BUSY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_busy_handler(DEVCB_##_devcb); + downcast(*device).set_busy_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_PERROR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_perror_handler(DEVCB_##_devcb); + downcast(*device).set_perror_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_SELECT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_select_handler(DEVCB_##_devcb); + downcast(*device).set_select_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_AUTOFD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_autofd_handler(DEVCB_##_devcb); + downcast(*device).set_autofd_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_FAULT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_fault_handler(DEVCB_##_devcb); + downcast(*device).set_fault_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_INIT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_init_handler(DEVCB_##_devcb); + downcast(*device).set_init_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_SELECT_IN_HANDLER(_devcb) \ - devcb = &downcast(*device).set_select_in_handler(DEVCB_##_devcb); + downcast(*device).set_select_in_handler(DEVCB_##_devcb); #define MCFG_CENTRONICS_OUTPUT_LATCH_ADD(_tag, _centronics_tag) \ MCFG_DEVICE_ADD(_tag, OUTPUT_LATCH, 0) \ @@ -125,6 +125,15 @@ public: template devcb_base &set_init_handler(Object &&cb) { return m_init_handler.set_callback(std::forward(cb)); } template devcb_base &set_select_in_handler(Object &&cb) { return m_select_in_handler.set_callback(std::forward(cb)); } + auto ack_handler() { return m_ack_handler.bind(); } + auto busy_handler() { return m_busy_handler.bind(); } + auto perror_handler() { return m_perror_handler.bind(); } + auto select_handler() { return m_select_handler.bind(); } + auto autofd_handler() { return m_autofd_handler.bind(); } + auto fault_handler() { return m_fault_handler.bind(); } + auto init_handler() { return m_init_handler.bind(); } + auto select_in_handler() { return m_select_in_handler.bind(); } + DECLARE_WRITE_LINE_MEMBER( write_strobe ); DECLARE_WRITE_LINE_MEMBER( write_data0 ); DECLARE_WRITE_LINE_MEMBER( write_data1 ); diff --git a/src/devices/bus/cgenie/expansion/expansion.h b/src/devices/bus/cgenie/expansion/expansion.h index 1e01a3f64a1..2dd6f659f5e 100644 --- a/src/devices/bus/cgenie/expansion/expansion.h +++ b/src/devices/bus/cgenie/expansion/expansion.h @@ -50,13 +50,13 @@ MCFG_DEVICE_SLOT_INTERFACE(cg_exp_slot_carts, nullptr, false) #define MCFG_CG_EXP_SLOT_INT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int_handler(DEVCB_##_devcb); + downcast(*device).set_int_handler(DEVCB_##_devcb); #define MCFG_CG_EXP_SLOT_NMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_nmi_handler(DEVCB_##_devcb); #define MCFG_CG_EXP_SLOT_RESET_HANDLER(_devcb) \ - devcb = &downcast(*device).set_reset_handler(DEVCB_##_devcb); + downcast(*device).set_reset_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/coco/cococart.h b/src/devices/bus/coco/cococart.h index 440630e05a3..325d5f2e1d6 100644 --- a/src/devices/bus/coco/cococart.h +++ b/src/devices/bus/coco/cococart.h @@ -26,13 +26,13 @@ typedef delegate cococart_base_update_delegate; #define MCFG_COCO_CARTRIDGE_CART_CB(_devcb) \ - devcb = &downcast(*device).set_cart_callback(DEVCB_##_devcb); + downcast(*device).set_cart_callback(DEVCB_##_devcb); #define MCFG_COCO_CARTRIDGE_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_nmi_callback(DEVCB_##_devcb); #define MCFG_COCO_CARTRIDGE_HALT_CB(_devcb) \ - devcb = &downcast(*device).set_halt_callback(DEVCB_##_devcb); + downcast(*device).set_halt_callback(DEVCB_##_devcb); // ======================> cococart_slot_device @@ -61,11 +61,23 @@ public: }; // construction/destruction + template + cococart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&opts, const char *dflt) + : cococart_slot_device(mconfig, tag, owner, clock) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } cococart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); template devcb_base &set_cart_callback(Object &&cb) { return m_cart_callback.set_callback(std::forward(cb)); } template devcb_base &set_nmi_callback(Object &&cb) { return m_nmi_callback.set_callback(std::forward(cb)); } template devcb_base &set_halt_callback(Object &&cb) { return m_halt_callback.set_callback(std::forward(cb)); } + auto cart_callback() { return m_cart_callback.bind(); } + auto nmi_callback() { return m_nmi_callback.bind(); } + auto halt_callback() { return m_halt_callback.bind(); } // device-level overrides virtual void device_start() override; diff --git a/src/devices/bus/coleco/ctrl.h b/src/devices/bus/coleco/ctrl.h index 9d605415cb4..b36c256067b 100644 --- a/src/devices/bus/coleco/ctrl.h +++ b/src/devices/bus/coleco/ctrl.h @@ -27,7 +27,7 @@ #define MCFG_COLECOVISION_CONTROL_PORT_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/comx35/exp.h b/src/devices/bus/comx35/exp.h index 6ffa7e9b67c..4aaf1d793fa 100644 --- a/src/devices/bus/comx35/exp.h +++ b/src/devices/bus/comx35/exp.h @@ -57,7 +57,7 @@ #define MCFG_COMX_EXPANSION_SLOT_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/cpc/cpcexp.h b/src/devices/bus/cpc/cpcexp.h index 0633ffd4c6b..e24c0b99d1c 100644 --- a/src/devices/bus/cpc/cpcexp.h +++ b/src/devices/bus/cpc/cpcexp.h @@ -60,19 +60,19 @@ //************************************************************************** #define MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); #define MCFG_CPC_EXPANSION_SLOT_OUT_RESET_CB(_devcb) \ - devcb = &downcast(*device).set_out_reset_callback(DEVCB_##_devcb); + downcast(*device).set_out_reset_callback(DEVCB_##_devcb); #define MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(_devcb) \ - devcb = &downcast(*device).set_out_romdis_callback(DEVCB_##_devcb); + downcast(*device).set_out_romdis_callback(DEVCB_##_devcb); #define MCFG_CPC_EXPANSION_SLOT_ROM_SELECT(_devcb) \ - devcb = &downcast(*device).set_out_rom_select_callback(DEVCB_##_devcb); + downcast(*device).set_out_rom_select_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/bus/dmv/dmvbus.h b/src/devices/bus/dmv/dmvbus.h index 2c683ef7a31..a10eab52bc0 100644 --- a/src/devices/bus/dmv/dmvbus.h +++ b/src/devices/bus/dmv/dmvbus.h @@ -111,16 +111,16 @@ DECLARE_DEVICE_TYPE(DMVCART_SLOT, dmvcart_slot_device) ***************************************************************************/ #define MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(_read_devcb, _write_devcb) \ - devcb = &downcast(*device).set_prog_read_callback(DEVCB_##_read_devcb); \ - devcb = &downcast(*device).set_prog_write_callback(DEVCB_##_write_devcb); + downcast(*device).set_prog_read_callback(DEVCB_##_read_devcb); \ + downcast(*device).set_prog_write_callback(DEVCB_##_write_devcb); #define MCFG_DMVCART_SLOT_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); #define MCFG_DMVCART_SLOT_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_DMVCART_SLOT_OUT_THOLD_CB(_devcb) \ - devcb = &downcast(*device).set_out_thold_callback(DEVCB_##_devcb); + downcast(*device).set_out_thold_callback(DEVCB_##_devcb); #endif // MAME_BUS_DMV_DMVBUS_H diff --git a/src/devices/bus/ecbbus/ecbbus.h b/src/devices/bus/ecbbus/ecbbus.h index b446b6ee0ae..f4d53b5cc9a 100644 --- a/src/devices/bus/ecbbus/ecbbus.h +++ b/src/devices/bus/ecbbus/ecbbus.h @@ -70,10 +70,10 @@ #define MCFG_ECBBUS_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_ECBBUS_NMI_CALLBACK(_write) \ - devcb = &downcast(*device).set_nmi_wr_callback(DEVCB_##_write); + downcast(*device).set_nmi_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/econet/econet.h b/src/devices/bus/econet/econet.h index 01040acd84c..611d9aa49bf 100644 --- a/src/devices/bus/econet/econet.h +++ b/src/devices/bus/econet/econet.h @@ -36,10 +36,10 @@ #define MCFG_ECONET_CLK_CALLBACK(_write) \ - devcb = &downcast(*device).set_clk_wr_callback(DEVCB_##_write); + downcast(*device).set_clk_wr_callback(DEVCB_##_write); #define MCFG_ECONET_DATA_CALLBACK(_write) \ - devcb = &downcast(*device).set_data_wr_callback(DEVCB_##_write); + downcast(*device).set_data_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/einstein/pipe/pipe.h b/src/devices/bus/einstein/pipe/pipe.h index 078a88fe004..31fe5345be8 100644 --- a/src/devices/bus/einstein/pipe/pipe.h +++ b/src/devices/bus/einstein/pipe/pipe.h @@ -54,13 +54,13 @@ MCFG_DEVICE_SLOT_INTERFACE(tatung_pipe_cards, nullptr, false) #define MCFG_TATUNG_PIPE_INT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int_handler(DEVCB_##_devcb); + downcast(*device).set_int_handler(DEVCB_##_devcb); #define MCFG_TATUNG_PIPE_NMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_nmi_handler(DEVCB_##_devcb); #define MCFG_TATUNG_PIPE_RESET_HANDLER(_devcb) \ - devcb = &downcast(*device).set_reset_handler(DEVCB_##_devcb); + downcast(*device).set_reset_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/einstein/userport/userport.h b/src/devices/bus/einstein/userport/userport.h index a0c650b2193..4bdbaed36d2 100644 --- a/src/devices/bus/einstein/userport/userport.h +++ b/src/devices/bus/einstein/userport/userport.h @@ -32,7 +32,7 @@ MCFG_DEVICE_SLOT_INTERFACE(einstein_userport_cards, nullptr, false) #define MCFG_EINSTEIN_USERPORT_BSTB_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bstb_handler(DEVCB_##_devcb); + downcast(*device).set_bstb_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/electron/cart/slot.h b/src/devices/bus/electron/cart/slot.h index 3b7b934ff1e..9e4b66182f1 100644 --- a/src/devices/bus/electron/cart/slot.h +++ b/src/devices/bus/electron/cart/slot.h @@ -110,10 +110,10 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) #define MCFG_ELECTRON_CARTSLOT_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_ELECTRON_CARTSLOT_NMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_nmi_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/electron/exp.h b/src/devices/bus/electron/exp.h index 7457c6099fc..ddac72c4d2b 100644 --- a/src/devices/bus/electron/exp.h +++ b/src/devices/bus/electron/exp.h @@ -111,10 +111,10 @@ AC RETURNS (pins 3,4) - adaptor. A total of 6W may be drawn from these lines as MCFG_ELECTRON_EXPANSION_SLOT_NMI_HANDLER(WRITELINE(DEVICE_SELF_OWNER, electron_expansion_slot_device, nmi_w)) #define MCFG_ELECTRON_EXPANSION_SLOT_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_ELECTRON_EXPANSION_SLOT_NMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_nmi_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/electron/m2105.cpp b/src/devices/bus/electron/m2105.cpp index 77c4b196c90..0f32fff7331 100644 --- a/src/devices/bus/electron/m2105.cpp +++ b/src/devices/bus/electron/m2105.cpp @@ -87,8 +87,8 @@ MACHINE_CONFIG_START(electron_m2105_device::device_add_mconfig) MCFG_RS232_RXD_HANDLER(WRITELINE("duart", scn2681_device, rx_a_w)) /* printer */ - MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer") - MCFG_CENTRONICS_ACK_HANDLER(WRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */ + CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->ack_handler().set(m_via6522_1, FUNC(via6522_device::write_ca1)).invert(); // ack seems to be inverted? MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") /* speech hardware */ diff --git a/src/devices/bus/ep64/exp.h b/src/devices/bus/ep64/exp.h index b101fa29f70..5a89296f3a5 100644 --- a/src/devices/bus/ep64/exp.h +++ b/src/devices/bus/ep64/exp.h @@ -71,13 +71,13 @@ downcast(*device).set_dave_tag(_tag); #define MCFG_EP64_EXPANSION_BUS_SLOT_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_EP64_EXPANSION_BUS_SLOT_NMI_CALLBACK(_write) \ - devcb = &downcast(*device).set_nmi_wr_callback(DEVCB_##_write); + downcast(*device).set_nmi_wr_callback(DEVCB_##_write); #define MCFG_EP64_EXPANSION_BUS_SLOT_WAIT_CALLBACK(_write) \ - devcb = &downcast(*device).set_wait_wr_callback(DEVCB_##_write); + downcast(*device).set_wait_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/epson_sio/epson_sio.h b/src/devices/bus/epson_sio/epson_sio.h index 8da0a4b3e44..189e36c5bdf 100644 --- a/src/devices/bus/epson_sio/epson_sio.h +++ b/src/devices/bus/epson_sio/epson_sio.h @@ -22,10 +22,10 @@ MCFG_DEVICE_SLOT_INTERFACE(epson_sio_devices, _def_slot, false) #define MCFG_EPSON_SIO_RX(_rx) \ - devcb = &downcast(device)->set_rx_callback(DEVCB_##_rx); + downcast(device)->set_rx_callback(DEVCB_##_rx); #define MCFG_EPSON_SIO_PIN(_pin) \ - devcb = &downcast(device)->set_pin_callback(DEVCB_##_pin); + downcast(device)->set_pin_callback(DEVCB_##_pin); //************************************************************************** diff --git a/src/devices/bus/gamegear/ggext.h b/src/devices/bus/gamegear/ggext.h index d4dae3eb277..71d6ecfcf72 100644 --- a/src/devices/bus/gamegear/ggext.h +++ b/src/devices/bus/gamegear/ggext.h @@ -30,11 +30,11 @@ #define MCFG_GG_EXT_PORT_TH_INPUT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_th_input_handler(DEVCB_##_devcb); + downcast(*device).set_th_input_handler(DEVCB_##_devcb); #define MCFG_GG_EXT_PORT_PIXEL_HANDLER(_devcb) \ - devcb = &downcast(*device).set_pixel_handler(DEVCB_##_devcb); + downcast(*device).set_pixel_handler(DEVCB_##_devcb); diff --git a/src/devices/bus/hexbus/tp0370.h b/src/devices/bus/hexbus/tp0370.h index 94d32a5b87c..0888f7ad859 100644 --- a/src/devices/bus/hexbus/tp0370.h +++ b/src/devices/bus/hexbus/tp0370.h @@ -73,13 +73,13 @@ private: */ #define MCFG_IBC_HEXBUS_OUT_CALLBACK(_write) \ - devcb = &ibc_device::set_hexbus_wr_callback(*device, DEVCB_##_write); + ibc_device::set_hexbus_wr_callback(*device, DEVCB_##_write); #define MCFG_IBC_HSKLATCH_CALLBACK(_write) \ - devcb = &ibc_device::set_hsklatch_wr_callback(*device, DEVCB_##_write); + ibc_device::set_hsklatch_wr_callback(*device, DEVCB_##_write); #define MCFG_IBC_INT_CALLBACK(_write) \ - devcb = &ibc_device::set_ibc_int_callback(*device, DEVCB_##_write); + ibc_device::set_ibc_int_callback(*device, DEVCB_##_write); DECLARE_DEVICE_TYPE_NS(IBC, bus::hexbus, ibc_device) #endif diff --git a/src/devices/bus/hp80_io/hp80_io.h b/src/devices/bus/hp80_io/hp80_io.h index a1bd90f47ed..11025d30d03 100644 --- a/src/devices/bus/hp80_io/hp80_io.h +++ b/src/devices/bus/hp80_io/hp80_io.h @@ -19,10 +19,10 @@ downcast(*device).set_slot_no(_idx); #define MCFG_HP80_IO_IRL_CB(_devcb) \ - devcb = &downcast(*device).set_irl_cb_func(DEVCB_##_devcb); + downcast(*device).set_irl_cb_func(DEVCB_##_devcb); #define MCFG_HP80_IO_HALT_CB(_devcb) \ - devcb = &downcast(*device).set_halt_cb_func(DEVCB_##_devcb); + downcast(*device).set_halt_cb_func(DEVCB_##_devcb); #define HP80_IO_FIRST_SC 3 // Lowest SC used by I/O cards diff --git a/src/devices/bus/hp9845_io/hp9845_io.h b/src/devices/bus/hp9845_io/hp9845_io.h index 8b4065ce9e3..4f18ab75939 100644 --- a/src/devices/bus/hp9845_io/hp9845_io.h +++ b/src/devices/bus/hp9845_io/hp9845_io.h @@ -19,13 +19,13 @@ MCFG_DEVICE_SLOT_INTERFACE(hp9845_io_slot_devices, nullptr, false) #define MCFG_HP9845_IO_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_cb_func(DEVCB_##_devcb); + downcast(*device).set_irq_cb_func(DEVCB_##_devcb); #define MCFG_HP9845_IO_STS_CB(_devcb) \ - devcb = &downcast(*device).set_sts_cb_func(DEVCB_##_devcb); + downcast(*device).set_sts_cb_func(DEVCB_##_devcb); #define MCFG_HP9845_IO_FLG_CB(_devcb) \ - devcb = &downcast(*device).set_flg_cb_func(DEVCB_##_devcb); + downcast(*device).set_flg_cb_func(DEVCB_##_devcb); #define HP9845_IO_FIRST_SC 1 // Lowest SC used by I/O cards diff --git a/src/devices/bus/hp_dio/hp_dio.h b/src/devices/bus/hp_dio/hp_dio.h index c11d6f8f7e0..b63b44c0482 100644 --- a/src/devices/bus/hp_dio/hp_dio.h +++ b/src/devices/bus/hp_dio/hp_dio.h @@ -27,16 +27,16 @@ downcast(*device).set_cputag(_cputag); #define MCFG_ISA_OUT_IRQ3_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq3_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq3_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ4_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq4_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq4_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ5_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq5_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq5_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ6_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq6_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq6_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/bus/hp_hil/hp_hil.h b/src/devices/bus/hp_hil/hp_hil.h index f4cdbb5a771..a11c53be461 100644 --- a/src/devices/bus/hp_hil/hp_hil.h +++ b/src/devices/bus/hp_hil/hp_hil.h @@ -82,10 +82,10 @@ //************************************************************************** #define MCFG_HP_HIL_INT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_devcb); + downcast(*device).set_int_callback(DEVCB_##_devcb); #define MCFG_HP_HIL_NMI_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_nmi_callback(DEVCB_##_devcb); #define MCFG_HP_HIL_SLOT_ADD(_mlc_tag, _tag, _slot_intf, _def_slot) \ MCFG_DEVICE_ADD(_tag, HP_HIL_SLOT, 0) \ @@ -131,6 +131,8 @@ public: template devcb_base &set_int_callback(Object &&cb) { return int_cb.set_callback(std::forward(cb)); } template devcb_base &set_nmi_callback(Object &&cb) { return nmi_cb.set_callback(std::forward(cb)); } + auto int_callback() { return int_cb.bind(); } + auto nmi_callback() { return nmi_cb.bind(); } void add_hp_hil_device(device_hp_hil_interface *device); bool get_int(void) { return m_r3 & 1; } diff --git a/src/devices/bus/ieee488/c2040fdc.h b/src/devices/bus/ieee488/c2040fdc.h index 1c552c1c508..7e27f1f1b81 100644 --- a/src/devices/bus/ieee488/c2040fdc.h +++ b/src/devices/bus/ieee488/c2040fdc.h @@ -24,13 +24,13 @@ //************************************************************************** #define MCFG_C2040_SYNC_CALLBACK(_write) \ - devcb = &downcast(*device).set_sync_wr_callback(DEVCB_##_write); + downcast(*device).set_sync_wr_callback(DEVCB_##_write); #define MCFG_C2040_READY_CALLBACK(_write) \ - devcb = &downcast(*device).set_ready_wr_callback(DEVCB_##_write); + downcast(*device).set_ready_wr_callback(DEVCB_##_write); #define MCFG_C2040_ERROR_CALLBACK(_write) \ - devcb = &downcast(*device).set_error_wr_callback(DEVCB_##_write); + downcast(*device).set_error_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/ieee488/c8050.cpp b/src/devices/bus/ieee488/c8050.cpp index ca9ae2cfa2d..94d8e9a89dc 100644 --- a/src/devices/bus/ieee488/c8050.cpp +++ b/src/devices/bus/ieee488/c8050.cpp @@ -35,7 +35,6 @@ #define M6532_0_TAG "uc1" #define M6532_1_TAG "ue1" #define M6504_TAG "uh3" -#define M6522_TAG "um3" #define M6530_TAG "uk3" #define FDC_TAG "fdc" @@ -207,14 +206,14 @@ void c8050_device::c8050_main_mem(address_map &map) void c8050_device::c8050_fdc_mem(address_map &map) { map.global_mask(0x1fff); - map(0x0000, 0x003f).mirror(0x0300).m(M6530_TAG, FUNC(mos6530_new_device::ram_map)); - map(0x0040, 0x004f).mirror(0x0330).m(M6522_TAG, FUNC(via6522_device::map)); - map(0x0080, 0x008f).mirror(0x0330).m(M6530_TAG, FUNC(mos6530_new_device::io_map)); + map(0x0000, 0x003f).mirror(0x0300).m(m_miot, FUNC(mos6530_new_device::ram_map)); + map(0x0040, 0x004f).mirror(0x0330).m(m_via, FUNC(via6522_device::map)); + map(0x0080, 0x008f).mirror(0x0330).m(m_miot, FUNC(mos6530_new_device::io_map)); map(0x0400, 0x07ff).ram().share("share1"); map(0x0800, 0x0bff).ram().share("share2"); map(0x0c00, 0x0fff).ram().share("share3"); map(0x1000, 0x13ff).ram().share("share4"); - map(0x1c00, 0x1fff).m(M6530_TAG, FUNC(mos6530_new_device::rom_map)); + map(0x1c00, 0x1fff).m(m_miot, FUNC(mos6530_new_device::rom_map)); } @@ -225,9 +224,9 @@ void c8050_device::c8050_fdc_mem(address_map &map) void c8050_device::c8250lp_fdc_mem(address_map &map) { map.global_mask(0x1fff); - map(0x0000, 0x003f).mirror(0x0300).m(M6530_TAG, FUNC(mos6530_new_device::ram_map)); - map(0x0040, 0x004f).mirror(0x0330).m(M6522_TAG, FUNC(via6522_device::map)); - map(0x0080, 0x008f).mirror(0x0330).m(M6530_TAG, FUNC(mos6530_new_device::io_map)); + map(0x0000, 0x003f).mirror(0x0300).m(m_miot, FUNC(mos6530_new_device::ram_map)); + map(0x0040, 0x004f).mirror(0x0330).m(m_via, FUNC(via6522_device::map)); + map(0x0080, 0x008f).mirror(0x0330).m(m_miot, FUNC(mos6530_new_device::io_map)); map(0x0400, 0x07ff).ram().share("share1"); map(0x0800, 0x0bff).ram().share("share2"); map(0x0c00, 0x0fff).ram().share("share3"); @@ -243,9 +242,9 @@ void c8050_device::c8250lp_fdc_mem(address_map &map) void c8050_device::sfd1001_fdc_mem(address_map &map) { map.global_mask(0x1fff); - map(0x0000, 0x003f).mirror(0x0300).m(M6530_TAG, FUNC(mos6530_new_device::ram_map)); - map(0x0040, 0x004f).mirror(0x0330).m(M6522_TAG, FUNC(via6522_device::map)); - map(0x0080, 0x008f).mirror(0x0330).m(M6530_TAG, FUNC(mos6530_new_device::io_map)); + map(0x0000, 0x003f).mirror(0x0300).m(m_miot, FUNC(mos6530_new_device::ram_map)); + map(0x0040, 0x004f).mirror(0x0330).m(m_via, FUNC(via6522_device::map)); + map(0x0080, 0x008f).mirror(0x0330).m(m_miot, FUNC(mos6530_new_device::io_map)); map(0x0400, 0x07ff).ram().share("share1"); map(0x0800, 0x0bff).ram().share("share2"); map(0x0c00, 0x0fff).ram().share("share3"); @@ -550,29 +549,29 @@ MACHINE_CONFIG_START(c8050_device::device_add_mconfig) MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0)) // controller - MCFG_DEVICE_ADD(M6504_TAG, M6504, XTAL(12'000'000)/12) + MCFG_DEVICE_ADD(m_fdccpu, M6504, XTAL(12'000'000)/12) MCFG_DEVICE_PROGRAM_MAP(c8050_fdc_mem) - MCFG_DEVICE_ADD(M6522_TAG, VIA6522, XTAL(12'000'000)/12) - MCFG_VIA6522_READPA_HANDLER(READ8(FDC_TAG, c8050_fdc_device, read)) + MCFG_DEVICE_ADD(m_via, VIA6522, XTAL(12'000'000)/12) + MCFG_VIA6522_READPA_HANDLER(READ8(m_fdc, c8050_fdc_device, read)) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c8050_device, via_pb_w)) - MCFG_VIA6522_CA2_HANDLER(WRITELINE(FDC_TAG, c8050_fdc_device, mode_sel_w)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(FDC_TAG, c8050_fdc_device, rw_sel_w)) + MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, mode_sel_w)) + MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, rw_sel_w)) - MCFG_DEVICE_ADD(M6530_TAG, MOS6530_NEW, XTAL(12'000'000)/12) - MCFG_MOS6530n_OUT_PA_CB(WRITE8(FDC_TAG, c8050_fdc_device, write)) - MCFG_MOS6530n_OUT_PB0_CB(WRITELINE(FDC_TAG, c8050_fdc_device, drv_sel_w)) - MCFG_MOS6530n_OUT_PB1_CB(WRITELINE(FDC_TAG, c8050_fdc_device, ds0_w)) - MCFG_MOS6530n_OUT_PB2_CB(WRITELINE(FDC_TAG, c8050_fdc_device, ds1_w)) - MCFG_MOS6530n_IN_PB3_CB(READLINE(FDC_TAG, c8050_fdc_device, wps_r)) - MCFG_MOS6530n_IN_PB6_CB(VCC) // SINGLE SIDED - MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE)) + MOS6530_NEW(config, m_miot, XTAL(12'000'000)/12); + m_miot->pa_wr_callback().set(m_fdc, FUNC(c8050_fdc_device::write)); + m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c8050_fdc_device::drv_sel_w)); + m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c8050_fdc_device::ds0_w)); + m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w)); + m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r)); + m_miot->pb_rd_callback<6>().set_constant(1); // SINGLE SIDED + m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE); - MCFG_DEVICE_ADD(FDC_TAG, C8050_FDC, XTAL(12'000'000)/2) - MCFG_C8050_SYNC_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_pb7)) - MCFG_C8050_READY_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_ca1)) - MCFG_C8050_BRDY_CALLBACK(INPUTLINE(M6504_TAG, M6502_SET_OVERFLOW)) MCFG_DEVCB_XOR(1) - MCFG_C8050_ERROR_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_cb1)) + C8050_FDC(config, m_fdc, XTAL(12'000'000)/2); + m_fdc->sync_wr_callback().set(m_via, FUNC(via6522_device::write_pb7)); + m_fdc->ready_wr_callback().set(m_via, FUNC(via6522_device::write_ca1)); + m_fdc->brdy_wr_callback().set_inputline(m_fdccpu, M6502_SET_OVERFLOW).invert(); + m_fdc->error_wr_callback().set(m_via, FUNC(via6522_device::write_cb1)); MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8050_floppies, "525ssqd", c8050_device::floppy_formats) MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8050_floppies, "525ssqd", c8050_device::floppy_formats) MACHINE_CONFIG_END @@ -595,30 +594,30 @@ MACHINE_CONFIG_START(c8250_device::device_add_mconfig) MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0)) // controller - MCFG_DEVICE_ADD(M6504_TAG, M6504, XTAL(12'000'000)/12) + MCFG_DEVICE_ADD(m_fdccpu, M6504, XTAL(12'000'000)/12) MCFG_DEVICE_PROGRAM_MAP(c8050_fdc_mem) - MCFG_DEVICE_ADD(M6522_TAG, VIA6522, XTAL(12'000'000)/12) - MCFG_VIA6522_READPA_HANDLER(READ8(FDC_TAG, c8050_fdc_device, read)) + MCFG_DEVICE_ADD(m_via, VIA6522, XTAL(12'000'000)/12) + MCFG_VIA6522_READPA_HANDLER(READ8(m_fdc, c8050_fdc_device, read)) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c8050_device, via_pb_w)) - MCFG_VIA6522_CA2_HANDLER(WRITELINE(FDC_TAG, c8050_fdc_device, mode_sel_w)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(FDC_TAG, c8050_fdc_device, rw_sel_w)) + MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, mode_sel_w)) + MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, rw_sel_w)) - MCFG_DEVICE_ADD(M6530_TAG, MOS6530_NEW, XTAL(12'000'000)/12) - MCFG_MOS6530n_OUT_PA_CB(WRITE8(FDC_TAG, c8050_fdc_device, write)) - MCFG_MOS6530n_OUT_PB0_CB(WRITELINE(FDC_TAG, c8050_fdc_device, drv_sel_w)) - MCFG_MOS6530n_OUT_PB1_CB(WRITELINE(FDC_TAG, c8050_fdc_device, ds0_w)) - MCFG_MOS6530n_OUT_PB2_CB(WRITELINE(FDC_TAG, c8050_fdc_device, ds1_w)) - MCFG_MOS6530n_IN_PB3_CB(READLINE(FDC_TAG, c8050_fdc_device, wps_r)) - MCFG_MOS6530n_OUT_PB4_CB(WRITELINE(FDC_TAG, c8050_fdc_device, odd_hd_w)) - MCFG_MOS6530n_IN_PB6_CB(GND) // DOUBLE SIDED - MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE)) + MOS6530_NEW(config, m_miot, XTAL(12'000'000)/12); + m_miot->pa_wr_callback().set(m_fdc, FUNC(c8050_fdc_device::write)); + m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c8050_fdc_device::drv_sel_w)); + m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c8050_fdc_device::ds0_w)); + m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w)); + m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r)); + m_miot->pb_wr_callback<4>().set(m_fdc, FUNC(c8050_fdc_device::odd_hd_w)); + m_miot->pb_rd_callback<6>().set_constant(0); // DOUBLE SIDED + m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE); - MCFG_DEVICE_ADD(FDC_TAG, C8050_FDC, XTAL(12'000'000)/2) - MCFG_C8050_SYNC_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_pb7)) - MCFG_C8050_READY_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_ca1)) - MCFG_C8050_BRDY_CALLBACK(INPUTLINE(M6504_TAG, M6502_SET_OVERFLOW)) MCFG_DEVCB_XOR(1) - MCFG_C8050_ERROR_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_cb1)) + C8050_FDC(config, m_fdc, XTAL(12'000'000)/2); + m_fdc->sync_wr_callback().set(m_via, FUNC(via6522_device::write_pb7)); + m_fdc->ready_wr_callback().set(m_via, FUNC(via6522_device::write_ca1)); + m_fdc->brdy_wr_callback().set_inputline(m_fdccpu, M6502_SET_OVERFLOW).invert(); + m_fdc->error_wr_callback().set(m_via, FUNC(via6522_device::write_cb1)); MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8250_floppies, "525qd", c8250_device::floppy_formats) MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8250_floppies, "525qd", c8250_device::floppy_formats) MACHINE_CONFIG_END @@ -641,30 +640,30 @@ MACHINE_CONFIG_START(c8250lp_device::device_add_mconfig) MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0)) // controller - MCFG_DEVICE_ADD(M6504_TAG, M6504, XTAL(12'000'000)/12) + MCFG_DEVICE_ADD(m_fdccpu, M6504, XTAL(12'000'000)/12) MCFG_DEVICE_PROGRAM_MAP(c8250lp_fdc_mem) - MCFG_DEVICE_ADD(M6522_TAG, VIA6522, XTAL(12'000'000)/12) - MCFG_VIA6522_READPA_HANDLER(READ8(FDC_TAG, c8050_fdc_device, read)) + MCFG_DEVICE_ADD(m_via, VIA6522, XTAL(12'000'000)/12) + MCFG_VIA6522_READPA_HANDLER(READ8(m_fdc, c8050_fdc_device, read)) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c8050_device, via_pb_w)) - MCFG_VIA6522_CA2_HANDLER(WRITELINE(FDC_TAG, c8050_fdc_device, mode_sel_w)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(FDC_TAG, c8050_fdc_device, rw_sel_w)) + MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, mode_sel_w)) + MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, rw_sel_w)) - MCFG_DEVICE_ADD(M6530_TAG, MOS6530_NEW, XTAL(12'000'000)/12) - MCFG_MOS6530n_OUT_PA_CB(WRITE8(FDC_TAG, c8050_fdc_device, write)) - MCFG_MOS6530n_OUT_PB0_CB(WRITELINE(FDC_TAG, c8050_fdc_device, drv_sel_w)) - MCFG_MOS6530n_OUT_PB1_CB(WRITELINE(FDC_TAG, c8050_fdc_device, ds0_w)) - MCFG_MOS6530n_OUT_PB2_CB(WRITELINE(FDC_TAG, c8050_fdc_device, ds1_w)) - MCFG_MOS6530n_IN_PB3_CB(READLINE(FDC_TAG, c8050_fdc_device, wps_r)) - MCFG_MOS6530n_OUT_PB4_CB(WRITELINE(FDC_TAG, c8050_fdc_device, odd_hd_w)) - MCFG_MOS6530n_IN_PB6_CB(GND) // DOUBLE SIDED - MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE)) + MOS6530_NEW(config, m_miot, XTAL(12'000'000)/12); + m_miot->pa_wr_callback().set(m_fdc, FUNC(c8050_fdc_device::write)); + m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c8050_fdc_device::drv_sel_w)); + m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c8050_fdc_device::ds0_w)); + m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w)); + m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r)); + m_miot->pb_wr_callback<4>().set(m_fdc, FUNC(c8050_fdc_device::odd_hd_w)); + m_miot->pb_rd_callback<6>().set_constant(0); // DOUBLE SIDED + m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE); - MCFG_DEVICE_ADD(FDC_TAG, C8050_FDC, XTAL(12'000'000)/2) - MCFG_C8050_SYNC_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_pb7)) - MCFG_C8050_READY_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_ca1)) - MCFG_C8050_BRDY_CALLBACK(INPUTLINE(M6504_TAG, M6502_SET_OVERFLOW)) MCFG_DEVCB_XOR(1) - MCFG_C8050_ERROR_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_cb1)) + C8050_FDC(config, m_fdc, XTAL(12'000'000)/2); + m_fdc->sync_wr_callback().set(m_via, FUNC(via6522_device::write_pb7)); + m_fdc->ready_wr_callback().set(m_via, FUNC(via6522_device::write_ca1)); + m_fdc->brdy_wr_callback().set_inputline(m_fdccpu, M6502_SET_OVERFLOW).invert(); + m_fdc->error_wr_callback().set(m_via, FUNC(via6522_device::write_cb1)); MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8250_floppies, "525qd", c8250lp_device::floppy_formats) MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8250_floppies, "525qd", c8250lp_device::floppy_formats) MACHINE_CONFIG_END @@ -687,29 +686,29 @@ MACHINE_CONFIG_START(sfd1001_device::device_add_mconfig) MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0)) // controller - MCFG_DEVICE_ADD(M6504_TAG, M6504, XTAL(12'000'000)/12) + MCFG_DEVICE_ADD(m_fdccpu, M6504, XTAL(12'000'000)/12) MCFG_DEVICE_PROGRAM_MAP(sfd1001_fdc_mem) - MCFG_DEVICE_ADD(M6522_TAG, VIA6522, XTAL(12'000'000)/12) - MCFG_VIA6522_READPA_HANDLER(READ8(FDC_TAG, c8050_fdc_device, read)) + MCFG_DEVICE_ADD(m_via, VIA6522, XTAL(12'000'000)/12) + MCFG_VIA6522_READPA_HANDLER(READ8(m_fdc, c8050_fdc_device, read)) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c8050_device, via_pb_w)) - MCFG_VIA6522_CA2_HANDLER(WRITELINE(FDC_TAG, c8050_fdc_device, mode_sel_w)) - MCFG_VIA6522_CB2_HANDLER(WRITELINE(FDC_TAG, c8050_fdc_device, rw_sel_w)) + MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, mode_sel_w)) + MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, rw_sel_w)) - MCFG_DEVICE_ADD(M6530_TAG, MOS6530_NEW, XTAL(12'000'000)/12) - MCFG_MOS6530n_OUT_PA_CB(WRITE8(FDC_TAG, c8050_fdc_device, write)) - MCFG_MOS6530n_OUT_PB1_CB(WRITELINE(FDC_TAG, c8050_fdc_device, ds0_w)) - MCFG_MOS6530n_OUT_PB2_CB(WRITELINE(FDC_TAG, c8050_fdc_device, ds1_w)) - MCFG_MOS6530n_IN_PB3_CB(READLINE(FDC_TAG, c8050_fdc_device, wps_r)) - MCFG_MOS6530n_OUT_PB4_CB(WRITELINE(FDC_TAG, c8050_fdc_device, odd_hd_w)) - MCFG_MOS6530n_IN_PB6_CB(GND) // DOUBLE SIDED - MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE)) + MOS6530_NEW(config, m_miot, XTAL(12'000'000)/12); + m_miot->pa_wr_callback().set(m_fdc, FUNC(c8050_fdc_device::write)); + m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c8050_fdc_device::ds0_w)); + m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w)); + m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r)); + m_miot->pb_wr_callback<4>().set(m_fdc, FUNC(c8050_fdc_device::odd_hd_w)); + m_miot->pb_rd_callback<6>().set_constant(0); // DOUBLE SIDED + m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE); - MCFG_DEVICE_ADD(FDC_TAG, C8050_FDC, XTAL(12'000'000)/2) - MCFG_C8050_SYNC_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_pb7)) - MCFG_C8050_READY_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_ca1)) - MCFG_C8050_BRDY_CALLBACK(INPUTLINE(M6504_TAG, M6502_SET_OVERFLOW)) MCFG_DEVCB_XOR(1) - MCFG_C8050_ERROR_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_cb1)) + C8050_FDC(config, m_fdc, XTAL(12'000'000)/2); + m_fdc->sync_wr_callback().set(m_via, FUNC(via6522_device::write_pb7)); + m_fdc->ready_wr_callback().set(m_via, FUNC(via6522_device::write_ca1)); + m_fdc->brdy_wr_callback().set_inputline(m_fdccpu, M6502_SET_OVERFLOW).invert(); + m_fdc->error_wr_callback().set(m_via, FUNC(via6522_device::write_cb1)); MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", sfd1001_floppies, "525qd", sfd1001_device::floppy_formats) MACHINE_CONFIG_END @@ -779,7 +778,7 @@ c8050_device::c8050_device(const machine_config &mconfig, device_type type, cons m_riot0(*this, M6532_0_TAG), m_riot1(*this, M6532_1_TAG), m_miot(*this, M6530_TAG), - m_via(*this, M6522_TAG), + m_via(*this, "um3"), m_floppy0(*this, FDC_TAG ":0"), m_floppy1(*this, FDC_TAG ":1"), m_fdc(*this, FDC_TAG), diff --git a/src/devices/bus/ieee488/c8050fdc.h b/src/devices/bus/ieee488/c8050fdc.h index 9bae3891284..2f75511b817 100644 --- a/src/devices/bus/ieee488/c8050fdc.h +++ b/src/devices/bus/ieee488/c8050fdc.h @@ -18,24 +18,6 @@ -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_C8050_SYNC_CALLBACK(_write) \ - devcb = &downcast(*device).set_sync_wr_callback(DEVCB_##_write); - -#define MCFG_C8050_READY_CALLBACK(_write) \ - devcb = &downcast(*device).set_ready_wr_callback(DEVCB_##_write); - -#define MCFG_C8050_BRDY_CALLBACK(_write) \ - devcb = &downcast(*device).set_brdy_wr_callback(DEVCB_##_write); - -#define MCFG_C8050_ERROR_CALLBACK(_write) \ - devcb = &downcast(*device).set_error_wr_callback(DEVCB_##_write); - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -48,10 +30,10 @@ public: // construction/destruction c8050_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_sync_wr_callback(Object &&cb) { return m_write_sync.set_callback(std::forward(cb)); } - template devcb_base &set_ready_wr_callback(Object &&cb) { return m_write_ready.set_callback(std::forward(cb)); } - template devcb_base &set_brdy_wr_callback(Object &&cb) { return m_write_brdy.set_callback(std::forward(cb)); } - template devcb_base &set_error_wr_callback(Object &&cb) { return m_write_error.set_callback(std::forward(cb)); } + auto sync_wr_callback() { return m_write_sync.bind(); } + auto ready_wr_callback() { return m_write_ready.bind(); } + auto brdy_wr_callback() { return m_write_brdy.bind(); } + auto error_wr_callback() { return m_write_error.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/bus/ieee488/hp9895.cpp b/src/devices/bus/ieee488/hp9895.cpp index 31e0e4989df..72d99ce1c4f 100644 --- a/src/devices/bus/ieee488/hp9895.cpp +++ b/src/devices/bus/ieee488/hp9895.cpp @@ -891,18 +891,19 @@ MACHINE_CONFIG_START(hp9895_device::device_add_mconfig) MCFG_DEVICE_IO_MAP(z80_io_map) MCFG_Z80_SET_REFRESH_CALLBACK(WRITE8(*this, hp9895_device , z80_m1_w)) - MCFG_DEVICE_ADD("phi" , PHI , 0) - MCFG_PHI_EOI_WRITE_CB(WRITELINE(*this, hp9895_device , phi_eoi_w)) - MCFG_PHI_DAV_WRITE_CB(WRITELINE(*this, hp9895_device , phi_dav_w)) - MCFG_PHI_NRFD_WRITE_CB(WRITELINE(*this, hp9895_device , phi_nrfd_w)) - MCFG_PHI_NDAC_WRITE_CB(WRITELINE(*this, hp9895_device , phi_ndac_w)) - MCFG_PHI_IFC_WRITE_CB(WRITELINE(*this, hp9895_device , phi_ifc_w)) - MCFG_PHI_SRQ_WRITE_CB(WRITELINE(*this, hp9895_device , phi_srq_w)) - MCFG_PHI_ATN_WRITE_CB(WRITELINE(*this, hp9895_device , phi_atn_w)) - MCFG_PHI_REN_WRITE_CB(WRITELINE(*this, hp9895_device , phi_ren_w)) - MCFG_PHI_DIO_READWRITE_CB(READ8(*this, hp9895_device , phi_dio_r) , WRITE8(*this, hp9895_device , phi_dio_w)) - MCFG_PHI_INT_WRITE_CB(WRITELINE(*this, hp9895_device , phi_int_w)) - MCFG_PHI_SYS_CNTRL_READ_CB(GND) + PHI(config, m_phi, 0); + m_phi->signal_write_cb().set(FUNC(hp9895_device::phi_eoi_w)); + m_phi->signal_write_cb().set(FUNC(hp9895_device::phi_dav_w)); + m_phi->signal_write_cb().set(FUNC(hp9895_device::phi_nrfd_w)); + m_phi->signal_write_cb().set(FUNC(hp9895_device::phi_ndac_w)); + m_phi->signal_write_cb().set(FUNC(hp9895_device::phi_ifc_w)); + m_phi->signal_write_cb().set(FUNC(hp9895_device::phi_srq_w)); + m_phi->signal_write_cb().set(FUNC(hp9895_device::phi_atn_w)); + m_phi->signal_write_cb().set(FUNC(hp9895_device::phi_ren_w)); + m_phi->dio_read_cb().set(FUNC(hp9895_device::phi_dio_r)); + m_phi->dio_write_cb().set(FUNC(hp9895_device::phi_dio_w)); + m_phi->int_write_cb().set(FUNC(hp9895_device::phi_int_w)); + m_phi->sys_cntrl_read_cb().set_constant(0); MCFG_FLOPPY_DRIVE_ADD("floppy0" , hp9895_floppies , "8dsdd" , hp9895_floppy_formats) MCFG_SLOT_FIXED(true) diff --git a/src/devices/bus/ieee488/ieee488.h b/src/devices/bus/ieee488/ieee488.h index 2920eaa2320..9dd05039e0a 100644 --- a/src/devices/bus/ieee488/ieee488.h +++ b/src/devices/bus/ieee488/ieee488.h @@ -32,35 +32,35 @@ #define MCFG_IEEE488_EOI_CALLBACK(_write) \ - devcb = &downcast(device)->set_eoi_callback(DEVCB_##_write); + downcast(device)->set_eoi_callback(DEVCB_##_write); #define MCFG_IEEE488_DAV_CALLBACK(_write) \ - devcb = &downcast(device)->set_dav_callback(DEVCB_##_write); + downcast(device)->set_dav_callback(DEVCB_##_write); #define MCFG_IEEE488_NRFD_CALLBACK(_write) \ - devcb = &downcast(device)->set_nrfd_callback(DEVCB_##_write); + downcast(device)->set_nrfd_callback(DEVCB_##_write); #define MCFG_IEEE488_NDAC_CALLBACK(_write) \ - devcb = &downcast(device)->set_ndac_callback(DEVCB_##_write); + downcast(device)->set_ndac_callback(DEVCB_##_write); #define MCFG_IEEE488_IFC_CALLBACK(_write) \ - devcb = &downcast(device)->set_ifc_callback(DEVCB_##_write); + downcast(device)->set_ifc_callback(DEVCB_##_write); #define MCFG_IEEE488_SRQ_CALLBACK(_write) \ - devcb = &downcast(device)->set_srq_callback(DEVCB_##_write); + downcast(device)->set_srq_callback(DEVCB_##_write); #define MCFG_IEEE488_ATN_CALLBACK(_write) \ - devcb = &downcast(device)->set_atn_callback(DEVCB_##_write); + downcast(device)->set_atn_callback(DEVCB_##_write); #define MCFG_IEEE488_REN_CALLBACK(_write) \ - devcb = &downcast(device)->set_ren_callback(DEVCB_##_write); + downcast(device)->set_ren_callback(DEVCB_##_write); // This CB reports changes to the DIO lines on the bus (whose value comes from // ANDing the DIO lines of each device on the bus) // This CB is needed by those controllers that start a parallel poll and wait // for some condition to be set by devices on the DIO lines (e.g. PHI controller). #define MCFG_IEEE488_DIO_CALLBACK(_write) \ - devcb = &downcast(device)->set_dio_callback(DEVCB_##_write); + downcast(device)->set_dio_callback(DEVCB_##_write); #define MCFG_IEEE488_SLOT_ADD(_tag, _address, _slot_intf, _def_slot) \ MCFG_DEVICE_ADD(_tag, IEEE488_SLOT, 0) \ diff --git a/src/devices/bus/interpro/keyboard/keyboard.h b/src/devices/bus/interpro/keyboard/keyboard.h index f4bfc7cc0cb..9d40e5a9e96 100644 --- a/src/devices/bus/interpro/keyboard/keyboard.h +++ b/src/devices/bus/interpro/keyboard/keyboard.h @@ -10,7 +10,7 @@ MCFG_DEVICE_SLOT_INTERFACE(slot_intf, def_slot, false) #define MCFG_INTERPRO_KEYBOARD_RXD_HANDLER(cb) \ - devcb = &downcast(*device).set_rxd_handler(DEVCB_##cb); + downcast(*device).set_rxd_handler(DEVCB_##cb); class device_interpro_keyboard_port_interface; diff --git a/src/devices/bus/interpro/mouse/mouse.h b/src/devices/bus/interpro/mouse/mouse.h index d3a03f494a8..d13ee669e48 100644 --- a/src/devices/bus/interpro/mouse/mouse.h +++ b/src/devices/bus/interpro/mouse/mouse.h @@ -6,7 +6,7 @@ #pragma once #define MCFG_MOUSE_STATE_CB(_state_cb) \ - devcb = &downcast(*device).set_state_callback(DEVCB_##_state_cb); + downcast(*device).set_state_callback(DEVCB_##_state_cb); class device_interpro_mouse_port_interface; diff --git a/src/devices/bus/interpro/sr/sr.h b/src/devices/bus/interpro/sr/sr.h index ec584f0b7db..9d23fad04e5 100644 --- a/src/devices/bus/interpro/sr/sr.h +++ b/src/devices/bus/interpro/sr/sr.h @@ -7,16 +7,16 @@ #pragma once #define MCFG_CBUS_OUT_IRQ0_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq0_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq0_callback(DEVCB_##_devcb); #define MCFG_CBUS_OUT_IRQ1_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq1_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq1_callback(DEVCB_##_devcb); #define MCFG_CBUS_OUT_IRQ2_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); #define MCFG_CBUS_OUT_VBLANK_CB(_devcb) \ - devcb = &downcast(*device).set_out_vblank_callback(DEVCB_##_devcb); + downcast(*device).set_out_vblank_callback(DEVCB_##_devcb); #define MCFG_CBUS_SLOT_ADD(_bus_tag, _slot_tag, _slot_intf, _def_slot, _fixed) \ MCFG_DEVICE_ADD(_slot_tag, CBUS_SLOT, 0) \ @@ -28,16 +28,16 @@ #define MCFG_SRX_OUT_IRQ0_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq0_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq0_callback(DEVCB_##_devcb); #define MCFG_SRX_OUT_IRQ1_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq1_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq1_callback(DEVCB_##_devcb); #define MCFG_SRX_OUT_IRQ2_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); #define MCFG_SRX_OUT_VBLANK_CB(_devcb) \ - devcb = &downcast(*device).set_out_vblank_callback(DEVCB_##_devcb); + downcast(*device).set_out_vblank_callback(DEVCB_##_devcb); #define MCFG_SRX_SLOT_ADD(_bus_tag, _slot_tag, _slot_intf, _def_slot, _fixed) \ MCFG_DEVICE_ADD(_slot_tag, SRX_SLOT, 0) \ diff --git a/src/devices/bus/iq151/iq151.h b/src/devices/bus/iq151/iq151.h index 270e47193af..e68d27a007d 100644 --- a/src/devices/bus/iq151/iq151.h +++ b/src/devices/bus/iq151/iq151.h @@ -145,22 +145,22 @@ DECLARE_DEVICE_TYPE(IQ151CART_SLOT, iq151cart_slot_device) ***************************************************************************/ #define MCFG_IQ151CART_SLOT_OUT_IRQ0_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq0_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq0_callback(DEVCB_##_devcb); #define MCFG_IQ151CART_SLOT_OUT_IRQ1_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq1_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq1_callback(DEVCB_##_devcb); #define MCFG_IQ151CART_SLOT_OUT_IRQ2_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); #define MCFG_IQ151CART_SLOT_OUT_IRQ3_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq3_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq3_callback(DEVCB_##_devcb); #define MCFG_IQ151CART_SLOT_OUT_IRQ4_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq4_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq4_callback(DEVCB_##_devcb); #define MCFG_IQ151CART_SLOT_OUT_DRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq_callback(DEVCB_##_devcb); #define MCFG_IQ151CART_SLOT_SCREEN_TAG(screen_tag) \ downcast(*device).set_screen_tag(screen_tag); diff --git a/src/devices/bus/isa/gus.h b/src/devices/bus/isa/gus.h index 09f86e0b091..47428309970 100644 --- a/src/devices/bus/isa/gus.h +++ b/src/devices/bus/isa/gus.h @@ -46,37 +46,37 @@ #include "machine/6850acia.h" #define MCFG_GF1_TXIRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txirq_handler(DEVCB_##_devcb); + downcast(*device).set_txirq_handler(DEVCB_##_devcb); #define MCFG_GF1_RXIRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rxirq_handler(DEVCB_##_devcb); + downcast(*device).set_rxirq_handler(DEVCB_##_devcb); #define MCFG_GF1_WAVE_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_wave_irq_handler(DEVCB_##_devcb); + downcast(*device).set_wave_irq_handler(DEVCB_##_devcb); #define MCFG_GF1_RAMP_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ramp_irq_handler(DEVCB_##_devcb); + downcast(*device).set_ramp_irq_handler(DEVCB_##_devcb); #define MCFG_GF1_TIMER1_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_timer1_irq_handler(DEVCB_##_devcb); + downcast(*device).set_timer1_irq_handler(DEVCB_##_devcb); #define MCFG_GF1_TIMER2_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_timer2_irq_handler(DEVCB_##_devcb); + downcast(*device).set_timer2_irq_handler(DEVCB_##_devcb); #define MCFG_GF1_SB_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sb_irq_handler(DEVCB_##_devcb); + downcast(*device).set_sb_irq_handler(DEVCB_##_devcb); #define MCFG_GF1_DMA_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dma_irq_handler(DEVCB_##_devcb); + downcast(*device).set_dma_irq_handler(DEVCB_##_devcb); #define MCFG_GF1_DRQ1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_drq1_handler(DEVCB_##_devcb); + downcast(*device).set_drq1_handler(DEVCB_##_devcb); #define MCFG_GF1_DRQ2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_drq2_handler(DEVCB_##_devcb); + downcast(*device).set_drq2_handler(DEVCB_##_devcb); #define MCFG_GF1_NMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_nmi_handler(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/bus/isa/hdc.h b/src/devices/bus/isa/hdc.h index a935fe9288d..3e91c57d063 100644 --- a/src/devices/bus/isa/hdc.h +++ b/src/devices/bus/isa/hdc.h @@ -20,10 +20,10 @@ // XT HD controller device #define MCFG_XTHDC_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_XTHDC_DRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_drq_handler(DEVCB_##_devcb); + downcast(*device).set_drq_handler(DEVCB_##_devcb); class xt_hdc_device : public device_t diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h index 47bd9a23993..36654de4e17 100644 --- a/src/devices/bus/isa/isa.h +++ b/src/devices/bus/isa/isa.h @@ -85,62 +85,62 @@ downcast(*device).set_custom_spaces(); #define MCFG_ISA_BUS_IOCHCK(_iochck) \ - devcb = &downcast(device)->set_iochck_callback(DEVCB_##_iochck); + downcast(device)->set_iochck_callback(DEVCB_##_iochck); #define MCFG_ISA_OUT_IRQ2_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ3_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq3_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq3_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ4_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq4_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq4_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ5_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq5_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq5_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ6_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq6_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq6_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ7_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq7_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq7_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_DRQ1_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq1_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq1_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_DRQ2_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq2_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq2_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_DRQ3_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq3_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq3_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ10_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq10_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq10_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ11_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq11_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq11_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ12_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq12_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq12_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ14_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq14_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq14_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_IRQ15_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq15_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq15_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_DRQ0_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq0_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq0_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_DRQ5_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq5_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq5_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_DRQ6_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq6_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq6_callback(DEVCB_##_devcb); #define MCFG_ISA_OUT_DRQ7_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq7_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq7_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/isa/p1_hdc.cpp b/src/devices/bus/isa/p1_hdc.cpp index 9fdfe607e1e..8b743bdac03 100644 --- a/src/devices/bus/isa/p1_hdc.cpp +++ b/src/devices/bus/isa/p1_hdc.cpp @@ -26,8 +26,6 @@ } \ } while (0) -#define KM1809VG7_TAG "d17" - //************************************************************************** // DEVICE DEFINITIONS @@ -59,12 +57,12 @@ ROM_END //------------------------------------------------- MACHINE_CONFIG_START(p1_hdc_device::device_add_mconfig) - MCFG_DEVICE_ADD(KM1809VG7_TAG, WD2010, 5000000) // XXX clock? - MCFG_WD2010_IN_DRDY_CB(VCC) - MCFG_WD2010_IN_INDEX_CB(VCC) - MCFG_WD2010_IN_WF_CB(VCC) - MCFG_WD2010_IN_TK000_CB(VCC) - MCFG_WD2010_IN_SC_CB(VCC) + WD2010(config, m_hdc, 5'000'000); // XXX clock? + m_hdc->in_drdy_callback().set_constant(1); + m_hdc->in_index_callback().set_constant(1); + m_hdc->in_wf_callback().set_constant(1); + m_hdc->in_tk000_callback().set_constant(1); + m_hdc->in_sc_callback().set_constant(1); MCFG_HARDDISK_ADD("hard0") MCFG_HARDDISK_ADD("hard1") @@ -117,7 +115,7 @@ WRITE8_MEMBER(p1_hdc_device::p1_HDC_w) p1_hdc_device::p1_hdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, P1_HDC, tag, owner, clock) , device_isa8_card_interface(mconfig, *this) - , m_hdc(*this, KM1809VG7_TAG) + , m_hdc(*this, "d17") { } diff --git a/src/devices/bus/isa/wdxt_gen.cpp b/src/devices/bus/isa/wdxt_gen.cpp index 244383a4cef..18778d5c092 100644 --- a/src/devices/bus/isa/wdxt_gen.cpp +++ b/src/devices/bus/isa/wdxt_gen.cpp @@ -53,8 +53,6 @@ Notes: //************************************************************************** #define WD1015_TAG "u6" -#define WD11C00_17_TAG "u11" -#define WD2010A_TAG "u7" @@ -94,7 +92,7 @@ const tiny_rom_entry *wdxt_gen_device::device_rom_region() const void wdxt_gen_device::wd1015_io(address_map &map) { - map(0x00, 0xff).rw(WD11C00_17_TAG, FUNC(wd11c00_17_device::read), FUNC(wd11c00_17_device::write)); + map(0x00, 0xff).rw(m_host, FUNC(wd11c00_17_device::read), FUNC(wd11c00_17_device::write)); } @@ -140,34 +138,35 @@ WRITE8_MEMBER( wdxt_gen_device::ram_w ) //------------------------------------------------- MACHINE_CONFIG_START(wdxt_gen_device::device_add_mconfig) - MCFG_DEVICE_ADD(WD1015_TAG, I8049, 5000000) - MCFG_DEVICE_IO_MAP(wd1015_io) - MCFG_MCS48_PORT_T0_IN_CB(READLINE(WD11C00_17_TAG, wd11c00_17_device, busy_r)) - MCFG_MCS48_PORT_T1_IN_CB(READLINE(*this, wdxt_gen_device, wd1015_t1_r)) - MCFG_MCS48_PORT_P1_IN_CB(READ8(*this, wdxt_gen_device, wd1015_p1_r)) - MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(*this, wdxt_gen_device, wd1015_p1_w)) - MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, wdxt_gen_device, wd1015_p2_r)) - MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(*this, wdxt_gen_device, wd1015_p2_w)) + mcs48_cpu_device &cpu(I8049(config, m_maincpu, 5000000)); + cpu.set_addrmap(AS_IO, &wdxt_gen_device::wd1015_io); + cpu.t0_in_cb().set(m_host, FUNC(wd11c00_17_device::busy_r)); + cpu.t1_in_cb().set(FUNC(wdxt_gen_device::wd1015_t1_r)); + cpu.p1_in_cb().set(FUNC(wdxt_gen_device::wd1015_p1_r)); + cpu.p1_out_cb().set(FUNC(wdxt_gen_device::wd1015_p1_w)); + cpu.p2_in_cb().set(FUNC(wdxt_gen_device::wd1015_p2_r)); + cpu.p2_out_cb().set(FUNC(wdxt_gen_device::wd1015_p2_w)); - MCFG_DEVICE_ADD(WD11C00_17_TAG, WD11C00_17, 5000000) - MCFG_WD11C00_17_OUT_IRQ5_CB(WRITELINE(*this, wdxt_gen_device, irq5_w)) - MCFG_WD11C00_17_OUT_DRQ3_CB(WRITELINE(*this, wdxt_gen_device, drq3_w)) - MCFG_WD11C00_17_OUT_MR_CB(WRITELINE(*this, wdxt_gen_device, mr_w)) - MCFG_WD11C00_17_OUT_RA3_CB(INPUTLINE(WD1015_TAG, MCS48_INPUT_IRQ)) - MCFG_WD11C00_17_IN_RD322_CB(READ8(*this, wdxt_gen_device, rd322_r)) - MCFG_WD11C00_17_IN_RAMCS_CB(READ8(*this, wdxt_gen_device, ram_r)) - MCFG_WD11C00_17_OUT_RAMWR_CB(WRITE8(*this, wdxt_gen_device, ram_w)) - MCFG_WD11C00_17_IN_CS1010_CB(READ8(WD2010A_TAG, wd2010_device, read)) - MCFG_WD11C00_17_OUT_CS1010_CB(WRITE8(WD2010A_TAG, wd2010_device, write)) - MCFG_DEVICE_ADD(WD2010A_TAG, WD2010, 5000000) - MCFG_WD2010_OUT_BCR_CB(WRITELINE(WD11C00_17_TAG, wd11c00_17_device, clct_w)) - MCFG_WD2010_IN_BCS_CB(READ8(WD11C00_17_TAG, wd11c00_17_device, read)) - MCFG_WD2010_OUT_BCS_CB(WRITE8(WD11C00_17_TAG, wd11c00_17_device, write)) - MCFG_WD2010_IN_DRDY_CB(VCC) - MCFG_WD2010_IN_INDEX_CB(VCC) - MCFG_WD2010_IN_WF_CB(VCC) - MCFG_WD2010_IN_TK000_CB(VCC) - MCFG_WD2010_IN_SC_CB(VCC) + WD11C00_17(config, m_host, 5000000); + m_host->out_irq5_callback().set(FUNC(wdxt_gen_device::irq5_w)); + m_host->out_drq3_callback().set(FUNC(wdxt_gen_device::drq3_w)); + m_host->out_mr_callback().set(FUNC(wdxt_gen_device::mr_w)); + m_host->out_ra3_callback().set_inputline(m_maincpu, MCS48_INPUT_IRQ); + m_host->in_rd322_callback().set(FUNC(wdxt_gen_device::rd322_r)); + m_host->in_ramcs_callback().set(FUNC(wdxt_gen_device::ram_r)); + m_host->out_ramwr_callback().set(FUNC(wdxt_gen_device::ram_w)); + m_host->in_cs1010_callback().set(m_hdc, FUNC(wd2010_device::read)); + m_host->out_cs1010_callback().set(m_hdc, FUNC(wd2010_device::write)); + + WD2010(config, m_hdc, 5000000); + m_hdc->out_bcr_callback().set(m_host, FUNC(wd11c00_17_device::clct_w)); + m_hdc->in_bcs_callback().set(m_host, FUNC(wd11c00_17_device::read)); + m_hdc->out_bcs_callback().set(m_host, FUNC(wd11c00_17_device::write)); + m_hdc->in_drdy_callback().set_constant(1); + m_hdc->in_index_callback().set_constant(1); + m_hdc->in_wf_callback().set_constant(1); + m_hdc->in_tk000_callback().set_constant(1); + m_hdc->in_sc_callback().set_constant(1); MCFG_HARDDISK_ADD("hard0") MCFG_HARDDISK_ADD("hard1") @@ -186,8 +185,8 @@ wdxt_gen_device::wdxt_gen_device(const machine_config &mconfig, const char *tag, : device_t(mconfig, ISA8_WDXT_GEN, tag, owner, clock) , device_isa8_card_interface(mconfig, *this) , m_maincpu(*this, WD1015_TAG) - , m_host(*this, WD11C00_17_TAG) - , m_hdc(*this, WD2010A_TAG) + , m_host(*this, "u11") + , m_hdc(*this, "u7") { } diff --git a/src/devices/bus/kc/kc.h b/src/devices/bus/kc/kc.h index 083f60e3a66..0689169c5ee 100644 --- a/src/devices/bus/kc/kc.h +++ b/src/devices/bus/kc/kc.h @@ -121,26 +121,26 @@ DECLARE_DEVICE_TYPE(KCCART_SLOT, kccart_slot_device) ***************************************************************************/ #define MCFG_KCEXP_SLOT_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_KCEXP_SLOT_OUT_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); #define MCFG_KCEXP_SLOT_OUT_HALT_CB(_devcb) \ - devcb = &downcast(*device).set_out_halt_callback(DEVCB_##_devcb); + downcast(*device).set_out_halt_callback(DEVCB_##_devcb); #define MCFG_KCEXP_SLOT_NEXT_SLOT(_next_slot_tag) \ downcast(*device).set_next_slot(_next_slot_tag); #define MCFG_KCCART_SLOT_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_KCCART_SLOT_OUT_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); #define MCFG_KCCART_SLOT_OUT_HALT_CB(_devcb) \ - devcb = &downcast(*device).set_out_halt_callback(DEVCB_##_devcb); + downcast(*device).set_out_halt_callback(DEVCB_##_devcb); #define MCFG_KCCART_SLOT_NEXT_SLOT(_next_slot_tag) \ downcast(*device).set_next_slot(_next_slot_tag); diff --git a/src/devices/bus/lpci/i82371sb.h b/src/devices/bus/lpci/i82371sb.h index a3904279614..0352b13e445 100644 --- a/src/devices/bus/lpci/i82371sb.h +++ b/src/devices/bus/lpci/i82371sb.h @@ -67,9 +67,9 @@ private: DECLARE_DEVICE_TYPE(I82371SB, i82371sb_device) #define MCFG_I82371SB_SMI_CB(_devcb) \ - devcb = &downcast(*device).set_smi_callback(DEVCB_##_devcb); + downcast(*device).set_smi_callback(DEVCB_##_devcb); #define MCFG_I82371SB_BOOT_STATE_HOOK(_devcb) \ - devcb = &downcast(*device).set_boot_state_hook(DEVCB_##_devcb); + downcast(*device).set_boot_state_hook(DEVCB_##_devcb); #endif // MAME_BUS_LPCI_I82371SB_H diff --git a/src/devices/bus/lpci/southbridge.cpp b/src/devices/bus/lpci/southbridge.cpp index 27eead94a7b..25b37e3a298 100644 --- a/src/devices/bus/lpci/southbridge.cpp +++ b/src/devices/bus/lpci/southbridge.cpp @@ -69,12 +69,12 @@ MACHINE_CONFIG_START(southbridge_device::device_add_mconfig) MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE(":maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, southbridge_device, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir2_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide", ata_devices, "hdd", nullptr, false) MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE("pic8259_slave", pic8259_device, ir6_w)) diff --git a/src/devices/bus/midi/midi.h b/src/devices/bus/midi/midi.h index 114c6bf948b..5ca8bb92e2c 100644 --- a/src/devices/bus/midi/midi.h +++ b/src/devices/bus/midi/midi.h @@ -11,7 +11,7 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) #define MCFG_MIDI_RX_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rx_handler(DEVCB_##_devcb); + downcast(*device).set_rx_handler(DEVCB_##_devcb); class device_midi_port_interface; diff --git a/src/devices/bus/msx_slot/cartridge.h b/src/devices/bus/msx_slot/cartridge.h index ff8fbb96fb3..be0856e8d82 100644 --- a/src/devices/bus/msx_slot/cartridge.h +++ b/src/devices/bus/msx_slot/cartridge.h @@ -17,13 +17,13 @@ DECLARE_DEVICE_TYPE(MSX_SLOT_YAMAHA_EXPANSION, msx_slot_yamaha_expansion_device) #define MCFG_MSX_SLOT_CARTRIDGE_ADD(_tag, _devcb) \ MCFG_DEVICE_ADD(_tag, MSX_SLOT_CARTRIDGE, 0) \ MCFG_DEVICE_SLOT_INTERFACE(msx_cart, nullptr, false) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_MSX_SLOT_YAMAHA_EXPANSION_ADD(_tag, _devcb, _default) \ MCFG_DEVICE_ADD(_tag, MSX_SLOT_YAMAHA_EXPANSION, 0) \ MCFG_DEVICE_SLOT_INTERFACE(msx_yamaha_60pin, _default, false) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class msx_slot_cartridge_device : public device_t diff --git a/src/devices/bus/nasbus/nasbus.h b/src/devices/bus/nasbus/nasbus.h index 477a737e7f9..8a0a1d3775f 100644 --- a/src/devices/bus/nasbus/nasbus.h +++ b/src/devices/bus/nasbus/nasbus.h @@ -114,7 +114,7 @@ downcast(*device).set_nasbus_slot(this, NASBUS_TAG); #define MCFG_NASBUS_RAM_DISABLE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ram_disable_handler(DEVCB_##_devcb); + downcast(*device).set_ram_disable_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/newbrain/eim.cpp b/src/devices/bus/newbrain/eim.cpp index 65994afe2ca..b778b092694 100644 --- a/src/devices/bus/newbrain/eim.cpp +++ b/src/devices/bus/newbrain/eim.cpp @@ -78,14 +78,14 @@ MACHINE_CONFIG_START(newbrain_eim_device::device_add_mconfig) MCFG_DEVICE_ADD(ADC0809_TAG, ADC0809, 500000) MCFG_ADC0808_EOC_CB(WRITELINE(*this, newbrain_eim_device, adc_eoc_w)) - MCFG_ADC0808_IN0_CB(GND) - MCFG_ADC0808_IN1_CB(GND) - MCFG_ADC0808_IN2_CB(GND) - MCFG_ADC0808_IN3_CB(GND) - MCFG_ADC0808_IN4_CB(GND) - MCFG_ADC0808_IN5_CB(GND) - MCFG_ADC0808_IN6_CB(GND) - MCFG_ADC0808_IN7_CB(GND) + MCFG_ADC0808_IN0_CB(CONSTANT(0)) + MCFG_ADC0808_IN1_CB(CONSTANT(0)) + MCFG_ADC0808_IN2_CB(CONSTANT(0)) + MCFG_ADC0808_IN3_CB(CONSTANT(0)) + MCFG_ADC0808_IN4_CB(CONSTANT(0)) + MCFG_ADC0808_IN5_CB(CONSTANT(0)) + MCFG_ADC0808_IN6_CB(CONSTANT(0)) + MCFG_ADC0808_IN7_CB(CONSTANT(0)) MCFG_DEVICE_ADD(MC6850_TAG, ACIA6850, 0) MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, newbrain_eim_device, acia_interrupt)) diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h index 011a87a861d..37c5700df6e 100644 --- a/src/devices/bus/nubus/nubus.h +++ b/src/devices/bus/nubus/nubus.h @@ -23,22 +23,22 @@ downcast(*device).set_cputag(_cputag); #define MCFG_NUBUS_OUT_IRQ9_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq9_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq9_callback(DEVCB_##_devcb); #define MCFG_NUBUS_OUT_IRQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_irqa_callback(DEVCB_##_devcb); + downcast(*device).set_out_irqa_callback(DEVCB_##_devcb); #define MCFG_NUBUS_OUT_IRQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_irqb_callback(DEVCB_##_devcb); + downcast(*device).set_out_irqb_callback(DEVCB_##_devcb); #define MCFG_NUBUS_OUT_IRQC_CB(_devcb) \ - devcb = &downcast(*device).set_out_irqc_callback(DEVCB_##_devcb); + downcast(*device).set_out_irqc_callback(DEVCB_##_devcb); #define MCFG_NUBUS_OUT_IRQD_CB(_devcb) \ - devcb = &downcast(*device).set_out_irqd_callback(DEVCB_##_devcb); + downcast(*device).set_out_irqd_callback(DEVCB_##_devcb); #define MCFG_NUBUS_OUT_IRQE_CB(_devcb) \ - devcb = &downcast(*device).set_out_irqe_callback(DEVCB_##_devcb); + downcast(*device).set_out_irqe_callback(DEVCB_##_devcb); #define MCFG_NUBUS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \ MCFG_DEVICE_ADD(_tag, NUBUS_SLOT, 0) \ diff --git a/src/devices/bus/oricext/oricext.h b/src/devices/bus/oricext/oricext.h index febcc9384e0..0daf45dc612 100644 --- a/src/devices/bus/oricext/oricext.h +++ b/src/devices/bus/oricext/oricext.h @@ -17,7 +17,7 @@ MCFG_DEVICE_ADD(_tag, ORICEXT_CONNECTOR, 0) \ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ downcast(device)->set_cputag(_cputag); \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_irq); + downcast(*device).set_irq_handler(DEVCB_##_irq); class oricext_device; diff --git a/src/devices/bus/pc1512/mouse.h b/src/devices/bus/pc1512/mouse.h index ca98296f53d..db432598a98 100644 --- a/src/devices/bus/pc1512/mouse.h +++ b/src/devices/bus/pc1512/mouse.h @@ -37,16 +37,16 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) #define MCFG_PC1512_MOUSE_PORT_X_CB(_write) \ - devcb = &downcast(*device).set_x_wr_callback(DEVCB_##_write); + downcast(*device).set_x_wr_callback(DEVCB_##_write); #define MCFG_PC1512_MOUSE_PORT_Y_CB(_write) \ - devcb = &downcast(*device).set_y_wr_callback(DEVCB_##_write); + downcast(*device).set_y_wr_callback(DEVCB_##_write); #define MCFG_PC1512_MOUSE_PORT_M1_CB(_write) \ - devcb = &downcast(*device).set_m1_wr_callback(DEVCB_##_write); + downcast(*device).set_m1_wr_callback(DEVCB_##_write); #define MCFG_PC1512_MOUSE_PORT_M2_CB(_write) \ - devcb = &downcast(*device).set_m2_wr_callback(DEVCB_##_write); + downcast(*device).set_m2_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/pc_kbd/pc_kbdc.h b/src/devices/bus/pc_kbd/pc_kbdc.h index 75a17da2d19..4e20fc68a1c 100644 --- a/src/devices/bus/pc_kbd/pc_kbdc.h +++ b/src/devices/bus/pc_kbd/pc_kbdc.h @@ -21,10 +21,10 @@ set the data line and then set the clock line. //************************************************************************** #define MCFG_PC_KBDC_OUT_CLOCK_CB(_devcb) \ - devcb = &downcast(*device).set_out_clock_callback(DEVCB_##_devcb); + downcast(*device).set_out_clock_callback(DEVCB_##_devcb); #define MCFG_PC_KBDC_OUT_DATA_CB(_devcb) \ - devcb = &downcast(*device).set_out_data_callback(DEVCB_##_devcb); + downcast(*device).set_out_data_callback(DEVCB_##_devcb); #define MCFG_PC_KBDC_SLOT_ADD(_kbdc_tag, _tag, _slot_intf, _def_slot) \ MCFG_DEVICE_ADD(_tag, PC_KBDC_SLOT, 0 ) \ diff --git a/src/devices/bus/pet/cass.h b/src/devices/bus/pet/cass.h index c843f58282b..29d64278a3b 100644 --- a/src/devices/bus/pet/cass.h +++ b/src/devices/bus/pet/cass.h @@ -39,7 +39,7 @@ #define MCFG_PET_DATASSETTE_PORT_ADD(_tag, _slot_intf, _def_slot, _devcb) \ MCFG_DEVICE_ADD(_tag, PET_DATASSETTE_PORT, 0) \ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ - devcb = &downcast(*device).set_read_handler(DEVCB_##_devcb); + downcast(*device).set_read_handler(DEVCB_##_devcb); diff --git a/src/devices/bus/pet/user.h b/src/devices/bus/pet/user.h index 651e121a2fa..71e1c19e799 100644 --- a/src/devices/bus/pet/user.h +++ b/src/devices/bus/pet/user.h @@ -28,61 +28,61 @@ #define MCFG_PET_USER_PORT_2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_2_handler(DEVCB_##_devcb); + downcast(*device).set_2_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_3_HANDLER(_devcb) \ - devcb = &downcast(*device).set_3_handler(DEVCB_##_devcb); + downcast(*device).set_3_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_4_HANDLER(_devcb) \ - devcb = &downcast(*device).set_4_handler(DEVCB_##_devcb); + downcast(*device).set_4_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_5_HANDLER(_devcb) \ - devcb = &downcast(*device).set_5_handler(DEVCB_##_devcb); + downcast(*device).set_5_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_6_HANDLER(_devcb) \ - devcb = &downcast(*device).set_6_handler(DEVCB_##_devcb); + downcast(*device).set_6_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_7_HANDLER(_devcb) \ - devcb = &downcast(*device).set_7_handler(DEVCB_##_devcb); + downcast(*device).set_7_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_8_HANDLER(_devcb) \ - devcb = &downcast(*device).set_8_handler(DEVCB_##_devcb); + downcast(*device).set_8_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_9_HANDLER(_devcb) \ - devcb = &downcast(*device).set_9_handler(DEVCB_##_devcb); + downcast(*device).set_9_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_10_HANDLER(_devcb) \ - devcb = &downcast(*device).set_10_handler(DEVCB_##_devcb); + downcast(*device).set_10_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_B_HANDLER(_devcb) \ - devcb = &downcast(*device).set_b_handler(DEVCB_##_devcb); + downcast(*device).set_b_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_C_HANDLER(_devcb) \ - devcb = &downcast(*device).set_c_handler(DEVCB_##_devcb); + downcast(*device).set_c_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_D_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d_handler(DEVCB_##_devcb); + downcast(*device).set_d_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_E_HANDLER(_devcb) \ - devcb = &downcast(*device).set_e_handler(DEVCB_##_devcb); + downcast(*device).set_e_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_F_HANDLER(_devcb) \ - devcb = &downcast(*device).set_f_handler(DEVCB_##_devcb); + downcast(*device).set_f_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_H_HANDLER(_devcb) \ - devcb = &downcast(*device).set_h_handler(DEVCB_##_devcb); + downcast(*device).set_h_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_J_HANDLER(_devcb) \ - devcb = &downcast(*device).set_j_handler(DEVCB_##_devcb); + downcast(*device).set_j_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_K_HANDLER(_devcb) \ - devcb = &downcast(*device).set_k_handler(DEVCB_##_devcb); + downcast(*device).set_k_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_L_HANDLER(_devcb) \ - devcb = &downcast(*device).set_l_handler(DEVCB_##_devcb); + downcast(*device).set_l_handler(DEVCB_##_devcb); #define MCFG_PET_USER_PORT_M_HANDLER(_devcb) \ - devcb = &downcast(*device).set_m_handler(DEVCB_##_devcb); + downcast(*device).set_m_handler(DEVCB_##_devcb); DECLARE_DEVICE_TYPE(PET_USER_PORT, pet_user_port_device) @@ -125,6 +125,25 @@ public: template devcb_base &set_k_handler(Object &&cb) { return m_k_handler.set_callback(std::forward(cb)); } template devcb_base &set_l_handler(Object &&cb) { return m_l_handler.set_callback(std::forward(cb)); } template devcb_base &set_m_handler(Object &&cb) { return m_m_handler.set_callback(std::forward(cb)); } + auto p2_handler() { return m_2_handler.bind(); } + auto p3_handler() { return m_3_handler.bind(); } + auto p4_handler() { return m_4_handler.bind(); } + auto p5_handler() { return m_5_handler.bind(); } + auto p6_handler() { return m_6_handler.bind(); } + auto p7_handler() { return m_7_handler.bind(); } + auto p8_handler() { return m_8_handler.bind(); } + auto p9_handler() { return m_9_handler.bind(); } + auto p10_handler() { return m_10_handler.bind(); } + auto pb_handler() { return m_b_handler.bind(); } + auto pc_handler() { return m_c_handler.bind(); } + auto pd_handler() { return m_d_handler.bind(); } + auto pe_handler() { return m_e_handler.bind(); } + auto pf_handler() { return m_f_handler.bind(); } + auto ph_handler() { return m_h_handler.bind(); } + auto pj_handler() { return m_j_handler.bind(); } + auto pk_handler() { return m_k_handler.bind(); } + auto pl_handler() { return m_l_handler.bind(); } + auto pm_handler() { return m_m_handler.bind(); } DECLARE_WRITE_LINE_MEMBER( write_2 ); DECLARE_WRITE_LINE_MEMBER( write_3 ); diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h index 09fc78e3b23..35dc291fa52 100644 --- a/src/devices/bus/plus4/exp.h +++ b/src/devices/bus/plus4/exp.h @@ -67,16 +67,16 @@ #define MCFG_PLUS4_EXPANSION_SLOT_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_PLUS4_EXPANSION_SLOT_CD_INPUT_CALLBACK(_read) \ - devcb = &downcast(*device).set_cd_rd_callback(DEVCB_##_read); + downcast(*device).set_cd_rd_callback(DEVCB_##_read); #define MCFG_PLUS4_EXPANSION_SLOT_CD_OUTPUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_cd_wr_callback(DEVCB_##_write); + downcast(*device).set_cd_wr_callback(DEVCB_##_write); #define MCFG_PLUS4_EXPANSION_SLOT_AEC_CALLBACK(_write) \ - devcb = &downcast(*device).set_aec_wr_callback(DEVCB_##_write); + downcast(*device).set_aec_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/pofo/exp.h b/src/devices/bus/pofo/exp.h index 08db6ef24ee..ab0685d28ca 100644 --- a/src/devices/bus/pofo/exp.h +++ b/src/devices/bus/pofo/exp.h @@ -64,13 +64,13 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) #define MCFG_PORTFOLIO_EXPANSION_SLOT_EINT_CALLBACK(_write) \ - devcb = &downcast(*device).set_eint_wr_callback(DEVCB_##_write); + downcast(*device).set_eint_wr_callback(DEVCB_##_write); #define MCFG_PORTFOLIO_EXPANSION_SLOT_NMIO_CALLBACK(_write) \ - devcb = &downcast(*device).set_nmio_wr_callback(DEVCB_##_write); + downcast(*device).set_nmio_wr_callback(DEVCB_##_write); #define MCFG_PORTFOLIO_EXPANSION_SLOT_WAKE_CALLBACK(_write) \ - devcb = &downcast(*device).set_wake_wr_callback(DEVCB_##_write); + downcast(*device).set_wake_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/psi_kbd/psi_kbd.h b/src/devices/bus/psi_kbd/psi_kbd.h index 1b35adca1c6..8e62b1df17b 100644 --- a/src/devices/bus/psi_kbd/psi_kbd.h +++ b/src/devices/bus/psi_kbd/psi_kbd.h @@ -40,10 +40,10 @@ MCFG_DEVICE_SLOT_INTERFACE(psi_keyboard_devices, _def_slot, false) #define MCFG_PSI_KEYBOARD_RX_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rx_handler(DEVCB_##_devcb); + downcast(*device).set_rx_handler(DEVCB_##_devcb); #define MCFG_PSI_KEYBOARD_KEY_STROBE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_key_strobe_handler(DEVCB_##_devcb); + downcast(*device).set_key_strobe_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/psx/ctlrport.h b/src/devices/bus/psx/ctlrport.h index 29c8f38b604..ba9191b239d 100644 --- a/src/devices/bus/psx/ctlrport.h +++ b/src/devices/bus/psx/ctlrport.h @@ -82,10 +82,10 @@ private: }; #define MCFG_PSX_CONTROLLER_PORTS_DSR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dsr_handler(DEVCB_##_devcb); + downcast(*device).set_dsr_handler(DEVCB_##_devcb); #define MCFG_PSX_CONTROLLER_PORTS_RXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rxd_handler(DEVCB_##_devcb); + downcast(*device).set_rxd_handler(DEVCB_##_devcb); class psxcontrollerports_device : public device_t { diff --git a/src/devices/bus/ql/exp.h b/src/devices/bus/ql/exp.h index 9f9c6cb22f3..ed5febc4854 100644 --- a/src/devices/bus/ql/exp.h +++ b/src/devices/bus/ql/exp.h @@ -53,16 +53,16 @@ //************************************************************************** #define MCFG_QL_EXPANSION_SLOT_IPL0L_CALLBACK(_write) \ - devcb = &downcast(*device).set_ipl0l_wr_callback(DEVCB_##_write); + downcast(*device).set_ipl0l_wr_callback(DEVCB_##_write); #define MCFG_QL_EXPANSION_SLOT_IPL1L_CALLBACK(_write) \ - devcb = &downcast(*device).set_ipl1l_wr_callback(DEVCB_##_write); + downcast(*device).set_ipl1l_wr_callback(DEVCB_##_write); #define MCFG_QL_EXPANSION_SLOT_BERRL_CALLBACK(_write) \ - devcb = &downcast(*device).set_berrl_wr_callback(DEVCB_##_write); + downcast(*device).set_berrl_wr_callback(DEVCB_##_write); #define MCFG_QL_EXPANSION_SLOT_EXTINTL_CALLBACK(_write) \ - devcb = &downcast(*device).set_extintl_wr_callback(DEVCB_##_write); + downcast(*device).set_extintl_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/rs232/rs232.h b/src/devices/bus/rs232/rs232.h index c4db0af2313..b58f876cb48 100644 --- a/src/devices/bus/rs232/rs232.h +++ b/src/devices/bus/rs232/rs232.h @@ -9,28 +9,28 @@ #define MCFG_RS232_RXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rxd_handler(DEVCB_##_devcb); + downcast(*device).set_rxd_handler(DEVCB_##_devcb); #define MCFG_RS232_DCD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dcd_handler(DEVCB_##_devcb); + downcast(*device).set_dcd_handler(DEVCB_##_devcb); #define MCFG_RS232_DSR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dsr_handler(DEVCB_##_devcb); + downcast(*device).set_dsr_handler(DEVCB_##_devcb); #define MCFG_RS232_RI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ri_handler(DEVCB_##_devcb); + downcast(*device).set_ri_handler(DEVCB_##_devcb); #define MCFG_RS232_SI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_si_handler(DEVCB_##_devcb); + downcast(*device).set_si_handler(DEVCB_##_devcb); #define MCFG_RS232_CTS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cts_handler(DEVCB_##_devcb); + downcast(*device).set_cts_handler(DEVCB_##_devcb); #define MCFG_RS232_RXC_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rxc_handler(DEVCB_##_devcb); + downcast(*device).set_rxc_handler(DEVCB_##_devcb); #define MCFG_RS232_TXC_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txc_handler(DEVCB_##_devcb); + downcast(*device).set_txc_handler(DEVCB_##_devcb); #define RS232_BAUD_110 (0x00) #define RS232_BAUD_150 (0x01) @@ -143,6 +143,14 @@ public: template devcb_base &set_cts_handler(Object &&cb) { return m_cts_handler.set_callback(std::forward(cb)); } template devcb_base &set_rxc_handler(Object &&cb) { return m_rxc_handler.set_callback(std::forward(cb)); } template devcb_base &set_txc_handler(Object &&cb) { return m_txc_handler.set_callback(std::forward(cb)); } + auto rxd_handler() { return m_rxd_handler.bind(); } + auto dcd_handler() { return m_dcd_handler.bind(); } + auto dsr_handler() { return m_dsr_handler.bind(); } + auto ri_handler() { return m_ri_handler.bind(); } + auto si_handler() { return m_si_handler.bind(); } + auto cts_handler() { return m_cts_handler.bind(); } + auto rxc_handler() { return m_rxc_handler.bind(); } + auto txc_handler() { return m_txc_handler.bind(); } DECLARE_WRITE_LINE_MEMBER( write_txd ); DECLARE_WRITE_LINE_MEMBER( write_dtr ); diff --git a/src/devices/bus/s100/s100.h b/src/devices/bus/s100/s100.h index 99fe0891261..139839a7172 100644 --- a/src/devices/bus/s100/s100.h +++ b/src/devices/bus/s100/s100.h @@ -77,55 +77,55 @@ #define MCFG_S100_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_S100_NMI_CALLBACK(_write) \ - devcb = &downcast(*device).set_nmi_wr_callback(DEVCB_##_write); + downcast(*device).set_nmi_wr_callback(DEVCB_##_write); #define MCFG_S100_VI0_CALLBACK(_write) \ - devcb = &downcast(*device).set_vi0_wr_callback(DEVCB_##_write); + downcast(*device).set_vi0_wr_callback(DEVCB_##_write); #define MCFG_S100_VI1_CALLBACK(_write) \ - devcb = &downcast(*device).set_vi1_wr_callback(DEVCB_##_write); + downcast(*device).set_vi1_wr_callback(DEVCB_##_write); #define MCFG_S100_VI2_CALLBACK(_write) \ - devcb = &downcast(*device).set_vi2_wr_callback(DEVCB_##_write); + downcast(*device).set_vi2_wr_callback(DEVCB_##_write); #define MCFG_S100_VI3_CALLBACK(_write) \ - devcb = &downcast(*device).set_vi3_wr_callback(DEVCB_##_write); + downcast(*device).set_vi3_wr_callback(DEVCB_##_write); #define MCFG_S100_VI4_CALLBACK(_write) \ - devcb = &downcast(*device).set_vi4_wr_callback(DEVCB_##_write); + downcast(*device).set_vi4_wr_callback(DEVCB_##_write); #define MCFG_S100_VI5_CALLBACK(_write) \ - devcb = &downcast(*device).set_vi5_wr_callback(DEVCB_##_write); + downcast(*device).set_vi5_wr_callback(DEVCB_##_write); #define MCFG_S100_VI6_CALLBACK(_write) \ - devcb = &downcast(*device).set_vi6_wr_callback(DEVCB_##_write); + downcast(*device).set_vi6_wr_callback(DEVCB_##_write); #define MCFG_S100_VI7_CALLBACK(_write) \ - devcb = &downcast(*device).set_vi7_wr_callback(DEVCB_##_write); + downcast(*device).set_vi7_wr_callback(DEVCB_##_write); #define MCFG_S100_DMA0_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma0_wr_callback(DEVCB_##_write); + downcast(*device).set_dma0_wr_callback(DEVCB_##_write); #define MCFG_S100_DMA1_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma1_wr_callback(DEVCB_##_write); + downcast(*device).set_dma1_wr_callback(DEVCB_##_write); #define MCFG_S100_DMA2_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma2_wr_callback(DEVCB_##_write); + downcast(*device).set_dma2_wr_callback(DEVCB_##_write); #define MCFG_S100_DMA3_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma3_wr_callback(DEVCB_##_write); + downcast(*device).set_dma3_wr_callback(DEVCB_##_write); #define MCFG_S100_RDY_CALLBACK(_write) \ - devcb = &downcast(*device).set_rdy_wr_callback(DEVCB_##_write); + downcast(*device).set_rdy_wr_callback(DEVCB_##_write); #define MCFG_S100_HOLD_CALLBACK(_write) \ - devcb = &downcast(*device).set_hold_wr_callback(DEVCB_##_write); + downcast(*device).set_hold_wr_callback(DEVCB_##_write); #define MCFG_S100_ERROR_CALLBACK(_write) \ - devcb = &downcast(*device).set_error_wr_callback(DEVCB_##_write); + downcast(*device).set_error_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/s100/wunderbus.cpp b/src/devices/bus/s100/wunderbus.cpp index a327bfa3966..490929ec252 100644 --- a/src/devices/bus/s100/wunderbus.cpp +++ b/src/devices/bus/s100/wunderbus.cpp @@ -90,7 +90,7 @@ WRITE_LINE_MEMBER( s100_wunderbus_device::rtc_tp_w ) MACHINE_CONFIG_START(s100_wunderbus_device::device_add_mconfig) MCFG_DEVICE_ADD(I8259A_TAG, PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, s100_wunderbus_device, pic_int_w)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_DEVICE_ADD(INS8250_1_TAG, INS8250, XTAL(18'432'000)/10) MCFG_INS8250_OUT_TX_CB(WRITELINE(RS232_A_TAG, rs232_port_device, write_txd)) diff --git a/src/devices/bus/scsi/scsi.h b/src/devices/bus/scsi/scsi.h index d6c93129667..154b346d6a4 100644 --- a/src/devices/bus/scsi/scsi.h +++ b/src/devices/bus/scsi/scsi.h @@ -18,55 +18,55 @@ #define SCSI_PORT_DEVICE7 "7" #define MCFG_SCSI_BSY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bsy_handler(DEVCB_##_devcb); + downcast(*device).set_bsy_handler(DEVCB_##_devcb); #define MCFG_SCSI_SEL_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sel_handler(DEVCB_##_devcb); + downcast(*device).set_sel_handler(DEVCB_##_devcb); #define MCFG_SCSI_CD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cd_handler(DEVCB_##_devcb); + downcast(*device).set_cd_handler(DEVCB_##_devcb); #define MCFG_SCSI_IO_HANDLER(_devcb) \ - devcb = &downcast(*device).set_io_handler(DEVCB_##_devcb); + downcast(*device).set_io_handler(DEVCB_##_devcb); #define MCFG_SCSI_MSG_HANDLER(_devcb) \ - devcb = &downcast(*device).set_msg_handler(DEVCB_##_devcb); + downcast(*device).set_msg_handler(DEVCB_##_devcb); #define MCFG_SCSI_REQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_req_handler(DEVCB_##_devcb); + downcast(*device).set_req_handler(DEVCB_##_devcb); #define MCFG_SCSI_ACK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ack_handler(DEVCB_##_devcb); + downcast(*device).set_ack_handler(DEVCB_##_devcb); #define MCFG_SCSI_ATN_HANDLER(_devcb) \ - devcb = &downcast(*device).set_atn_handler(DEVCB_##_devcb); + downcast(*device).set_atn_handler(DEVCB_##_devcb); #define MCFG_SCSI_RST_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rst_handler(DEVCB_##_devcb); + downcast(*device).set_rst_handler(DEVCB_##_devcb); #define MCFG_SCSI_DATA0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data0_handler(DEVCB_##_devcb); + downcast(*device).set_data0_handler(DEVCB_##_devcb); #define MCFG_SCSI_DATA1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data1_handler(DEVCB_##_devcb); + downcast(*device).set_data1_handler(DEVCB_##_devcb); #define MCFG_SCSI_DATA2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data2_handler(DEVCB_##_devcb); + downcast(*device).set_data2_handler(DEVCB_##_devcb); #define MCFG_SCSI_DATA3_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data3_handler(DEVCB_##_devcb); + downcast(*device).set_data3_handler(DEVCB_##_devcb); #define MCFG_SCSI_DATA4_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data4_handler(DEVCB_##_devcb); + downcast(*device).set_data4_handler(DEVCB_##_devcb); #define MCFG_SCSI_DATA5_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data5_handler(DEVCB_##_devcb); + downcast(*device).set_data5_handler(DEVCB_##_devcb); #define MCFG_SCSI_DATA6_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data6_handler(DEVCB_##_devcb); + downcast(*device).set_data6_handler(DEVCB_##_devcb); #define MCFG_SCSI_DATA7_HANDLER(_devcb) \ - devcb = &downcast(*device).set_data7_handler(DEVCB_##_devcb); + downcast(*device).set_data7_handler(DEVCB_##_devcb); #define MCFG_SCSI_OUTPUT_LATCH_ADD(_tag, scsi_port_tag) \ MCFG_DEVICE_ADD(_tag, OUTPUT_LATCH, 0) \ @@ -117,6 +117,36 @@ public: template devcb_base &set_data5_handler(Object &&cb) { return m_data5_handler.set_callback(std::forward(cb)); } template devcb_base &set_data6_handler(Object &&cb) { return m_data6_handler.set_callback(std::forward(cb)); } template devcb_base &set_data7_handler(Object &&cb) { return m_data7_handler.set_callback(std::forward(cb)); } + auto bsy_handler() { return m_bsy_handler.bind(); } + auto sel_handler() { return m_sel_handler.bind(); } + auto cd_handler() { return m_cd_handler.bind(); } + auto io_handler() { return m_io_handler.bind(); } + auto msg_handler() { return m_msg_handler.bind(); } + auto req_handler() { return m_req_handler.bind(); } + auto ack_handler() { return m_ack_handler.bind(); } + auto atn_handler() { return m_atn_handler.bind(); } + auto rst_handler() { return m_rst_handler.bind(); } + auto data0_handler() { return m_data0_handler.bind(); } + auto data1_handler() { return m_data1_handler.bind(); } + auto data2_handler() { return m_data2_handler.bind(); } + auto data3_handler() { return m_data3_handler.bind(); } + auto data4_handler() { return m_data4_handler.bind(); } + auto data5_handler() { return m_data5_handler.bind(); } + auto data6_handler() { return m_data6_handler.bind(); } + auto data7_handler() { return m_data7_handler.bind(); } + + template + void set_data_input_buffer(T &&tag) + { + data0_handler().set(tag, FUNC(input_buffer_device::write_bit0)); + data1_handler().set(tag, FUNC(input_buffer_device::write_bit1)); + data2_handler().set(tag, FUNC(input_buffer_device::write_bit2)); + data3_handler().set(tag, FUNC(input_buffer_device::write_bit3)); + data4_handler().set(tag, FUNC(input_buffer_device::write_bit4)); + data5_handler().set(tag, FUNC(input_buffer_device::write_bit5)); + data6_handler().set(tag, FUNC(input_buffer_device::write_bit6)); + data7_handler().set(tag, FUNC(input_buffer_device::write_bit7)); + } DECLARE_WRITE_LINE_MEMBER( write_bsy ); DECLARE_WRITE_LINE_MEMBER( write_sel ); diff --git a/src/devices/bus/sms_ctrl/smsctrl.h b/src/devices/bus/sms_ctrl/smsctrl.h index 9ead03ca812..d116f2c769d 100644 --- a/src/devices/bus/sms_ctrl/smsctrl.h +++ b/src/devices/bus/sms_ctrl/smsctrl.h @@ -27,11 +27,11 @@ #define MCFG_SMS_CONTROL_PORT_TH_INPUT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_th_input_handler(DEVCB_##_devcb); + downcast(*device).set_th_input_handler(DEVCB_##_devcb); #define MCFG_SMS_CONTROL_PORT_PIXEL_HANDLER(_devcb) \ - devcb = &downcast(*device).set_pixel_handler(DEVCB_##_devcb); + downcast(*device).set_pixel_handler(DEVCB_##_devcb); diff --git a/src/devices/bus/spectrum/exp.h b/src/devices/bus/spectrum/exp.h index f868853bdf4..f795fc05ad8 100644 --- a/src/devices/bus/spectrum/exp.h +++ b/src/devices/bus/spectrum/exp.h @@ -66,10 +66,10 @@ MCFG_SPECTRUM_EXPANSION_SLOT_NMI_HANDLER(WRITELINE(DEVICE_SELF_OWNER, spectrum_expansion_slot_device, nmi_w)) #define MCFG_SPECTRUM_EXPANSION_SLOT_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_SPECTRUM_EXPANSION_SLOT_NMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_nmi_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/ss50/interface.h b/src/devices/bus/ss50/interface.h index 5b79e00894c..1865eda6324 100644 --- a/src/devices/bus/ss50/interface.h +++ b/src/devices/bus/ss50/interface.h @@ -20,10 +20,10 @@ MCFG_DEVICE_SLOT_INTERFACE(ss50_##_slot_intf, _def_slot, false) #define MCFG_SS50_INTERFACE_IRQ_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_irq_cb(DEVCB_##_devcb); + downcast(*device).set_irq_cb(DEVCB_##_devcb); #define MCFG_SS50_INTERFACE_FIRQ_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_firq_cb(DEVCB_##_devcb); + downcast(*device).set_firq_cb(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/bus/ss50/mpc.cpp b/src/devices/bus/ss50/mpc.cpp index 8489e23e29b..25a6ed43951 100644 --- a/src/devices/bus/ss50/mpc.cpp +++ b/src/devices/bus/ss50/mpc.cpp @@ -25,13 +25,13 @@ class ss50_mpc_device : public device_t, public ss50_card_interface public: // construction/destruction ss50_mpc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : device_t(mconfig, SS50_MPC, tag, owner, clock), - ss50_card_interface(mconfig, *this), - m_pia(*this, "pia"), - m_loopback(*this, "loopback"), - m_counter(*this, "counter"), - m_baud_jumper(*this, "BAUD"), - m_count_select(false) + : device_t(mconfig, SS50_MPC, tag, owner, clock) + , ss50_card_interface(mconfig, *this) + , m_pia(*this, "pia") + , m_loopback(*this, "loopback") + , m_counter(*this, "counter") + , m_baud_jumper(*this, "BAUD") + , m_count_select(false) { } @@ -101,15 +101,15 @@ DEVICE_INPUT_DEFAULTS_END //------------------------------------------------- MACHINE_CONFIG_START(ss50_mpc_device::device_add_mconfig) - MCFG_DEVICE_ADD("pia", PIA6821, 0) // actually MC6820 - MCFG_PIA_WRITEPA_HANDLER(WRITELINE("outgate", input_merger_device, in_w<0>)) MCFG_DEVCB_BIT(0) - MCFG_PIA_CB2_HANDLER(WRITELINE(*this, ss50_mpc_device, reader_control_w)) - MCFG_PIA_READPB_HANDLER(IOPORT("STOP")) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_INPUT(READLINE(*this, ss50_mpc_device, count_r)) MCFG_DEVCB_BIT(7) - MCFG_PIA_WRITEPB_HANDLER(WRITELINE(*this, ss50_mpc_device, count_select_w)) MCFG_DEVCB_BIT(2) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("counter", ripple_counter_device, reset_w)) MCFG_DEVCB_BIT(0) - //MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, ss50_mpc_device, pia_irq_w)) - //MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, ss50_mpc_device, pia_irq_w)) + PIA6821(config, m_pia, 0); // actually MC6820 + m_pia->writepa_handler().set("outgate", FUNC(input_merger_device::in_w<0>)).bit(0); + m_pia->cb2_handler().set(FUNC(ss50_mpc_device::reader_control_w)); + m_pia->readpb_handler().set_ioport("STOP").mask(0x01).lshift(6); + m_pia->readpb_handler().append(FUNC(ss50_mpc_device::count_r)).lshift(7); + m_pia->writepb_handler().set(FUNC(ss50_mpc_device::count_select_w)).bit(2); + m_pia->writepb_handler().append(m_counter, FUNC(ripple_counter_device::reset_w)).bit(0); + //m_pia->irqa_handler().set(FUNC(ss50_mpc_device::pia_irq_w)); + //m_pia->irqb_handler().set(FUNC(ss50_mpc_device::pia_irq_w)); MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(WRITELINE(*this, ss50_mpc_device, serial_input_w)) diff --git a/src/devices/bus/sunkbd/sunkbd.h b/src/devices/bus/sunkbd/sunkbd.h index d40d9e20a39..037c81f66ba 100644 --- a/src/devices/bus/sunkbd/sunkbd.h +++ b/src/devices/bus/sunkbd/sunkbd.h @@ -9,7 +9,7 @@ #define MCFG_SUNKBD_RXD_HANDLER(cb) \ - devcb = &downcast(*device).set_rxd_handler(DEVCB_##cb); + downcast(*device).set_rxd_handler(DEVCB_##cb); class device_sun_keyboard_port_interface; diff --git a/src/devices/bus/svi3x8/expander/expander.h b/src/devices/bus/svi3x8/expander/expander.h index 0ec5be756c8..549a17c5970 100644 --- a/src/devices/bus/svi3x8/expander/expander.h +++ b/src/devices/bus/svi3x8/expander/expander.h @@ -49,25 +49,25 @@ MCFG_DEVICE_ADD(_tag, SVI_EXPANDER, 0) \ MCFG_DEVICE_SLOT_INTERFACE(svi_expander_modules, nullptr, false) #define MCFG_SVI_EXPANDER_INT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int_handler(DEVCB_##_devcb); + downcast(*device).set_int_handler(DEVCB_##_devcb); #define MCFG_SVI_EXPANDER_ROMDIS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_romdis_handler(DEVCB_##_devcb); + downcast(*device).set_romdis_handler(DEVCB_##_devcb); #define MCFG_SVI_EXPANDER_RAMDIS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ramdis_handler(DEVCB_##_devcb); + downcast(*device).set_ramdis_handler(DEVCB_##_devcb); #define MCFG_SVI_EXPANDER_CTRL1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ctrl1_handler(DEVCB_##_devcb); + downcast(*device).set_ctrl1_handler(DEVCB_##_devcb); #define MCFG_SVI_EXPANDER_CTRL2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ctrl2_handler(DEVCB_##_devcb); + downcast(*device).set_ctrl2_handler(DEVCB_##_devcb); #define MCFG_SVI_EXPANDER_EXCSR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_excsr_handler(DEVCB_##_devcb); + downcast(*device).set_excsr_handler(DEVCB_##_devcb); #define MCFG_SVI_EXPANDER_EXCSW_HANDLER(_devcb) \ - devcb = &downcast(*device).set_excsw_handler(DEVCB_##_devcb); + downcast(*device).set_excsw_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/svi3x8/slot/slot.h b/src/devices/bus/svi3x8/slot/slot.h index 84764b1dc4f..702c005b770 100644 --- a/src/devices/bus/svi3x8/slot/slot.h +++ b/src/devices/bus/svi3x8/slot/slot.h @@ -54,13 +54,13 @@ downcast(*device).set_bus(this, "slotbus"); #define MCFG_SVI_SLOT_INT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int_handler(DEVCB_##_devcb); + downcast(*device).set_int_handler(DEVCB_##_devcb); #define MCFG_SVI_SLOT_ROMDIS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_romdis_handler(DEVCB_##_devcb); + downcast(*device).set_romdis_handler(DEVCB_##_devcb); #define MCFG_SVI_SLOT_RAMDIS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ramdis_handler(DEVCB_##_devcb); + downcast(*device).set_ramdis_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/ti8x/ti8x.h b/src/devices/bus/ti8x/ti8x.h index b17321d2ce5..1a01aeda2e3 100644 --- a/src/devices/bus/ti8x/ti8x.h +++ b/src/devices/bus/ti8x/ti8x.h @@ -43,10 +43,10 @@ DECLARE_DEVICE_TYPE(TI8X_LINK_PORT, ti8x_link_port_device) #define MCFG_TI8X_LINK_TIP_HANDLER(cb) \ - devcb = &downcast(*device).set_tip_handler(DEVCB_##cb); + downcast(*device).set_tip_handler(DEVCB_##cb); #define MCFG_TI8X_LINK_RING_HANDLER(cb) \ - devcb = &downcast(*device).set_ring_handler(DEVCB_##cb); + downcast(*device).set_ring_handler(DEVCB_##cb); class device_ti8x_link_port_interface; diff --git a/src/devices/bus/ti99/gromport/gromport.h b/src/devices/bus/ti99/gromport/gromport.h index 3f7941e9641..7d370ce39d6 100644 --- a/src/devices/bus/ti99/gromport/gromport.h +++ b/src/devices/bus/ti99/gromport/gromport.h @@ -106,10 +106,10 @@ void gromport8(device_slot_interface &device); MCFG_DEVICE_SLOT_INTERFACE(gromport8, "single", false) #define MCFG_GROMPORT_READY_HANDLER( _ready ) \ - devcb = &downcast(*device).set_ready_callback(DEVCB_##_ready); + downcast(*device).set_ready_callback(DEVCB_##_ready); #define MCFG_GROMPORT_RESET_HANDLER( _reset ) \ - devcb = &downcast(*device).set_reset_callback(DEVCB_##_reset); + downcast(*device).set_reset_callback(DEVCB_##_reset); DECLARE_DEVICE_TYPE_NS(TI99_GROMPORT, bus::ti99::gromport, gromport_device) diff --git a/src/devices/bus/ti99/internal/992board.h b/src/devices/bus/ti99/internal/992board.h index 02ffb5b25d1..7e79c8d1358 100644 --- a/src/devices/bus/ti99/internal/992board.h +++ b/src/devices/bus/ti99/internal/992board.h @@ -163,16 +163,16 @@ public: bus::ti99::internal::video992_device::TOTAL_VERT_NTSC, bus::ti99::internal::video992_device::VERT_DISPLAY_START_NTSC - 12, bus::ti99::internal::video992_device::VERT_DISPLAY_START_NTSC + 192 + 12 ) #define MCFG_VIDEO992_MEM_ACCESS_CB(_devcb) \ - devcb = &downcast(*device).set_readmem_callback(DEVCB_##_devcb); + downcast(*device).set_readmem_callback(DEVCB_##_devcb); #define MCFG_VIDEO992_HOLD_CB(_devcb) \ - devcb = &downcast(*device).set_hold_callback(DEVCB_##_devcb); + downcast(*device).set_hold_callback(DEVCB_##_devcb); #define MCFG_VIDEO992_INT_CB(_devcb) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_devcb); + downcast(*device).set_int_callback(DEVCB_##_devcb); #define MCFG_SET_ROMBANK_HANDLER( _devcb ) \ - devcb = &downcast(*device).set_rombank_callback(DEVCB_##_devcb); + downcast(*device).set_rombank_callback(DEVCB_##_devcb); DECLARE_DEVICE_TYPE_NS(VIDEO99224, bus::ti99::internal, video992_24_device) DECLARE_DEVICE_TYPE_NS(VIDEO99232, bus::ti99::internal, video992_32_device) diff --git a/src/devices/bus/ti99/internal/998board.h b/src/devices/bus/ti99/internal/998board.h index 820199f536d..e59e80b437e 100644 --- a/src/devices/bus/ti99/internal/998board.h +++ b/src/devices/bus/ti99/internal/998board.h @@ -702,16 +702,16 @@ private: } } } // end namespace bus::ti99::internal #define MCFG_MAINBOARD8_READY_CALLBACK(_write) \ - devcb = &downcast(*device).set_ready_wr_callback(DEVCB_##_write); + downcast(*device).set_ready_wr_callback(DEVCB_##_write); #define MCFG_MAINBOARD8_RESET_CALLBACK(_write) \ - devcb = &downcast(*device).set_reset_wr_callback(DEVCB_##_write); + downcast(*device).set_reset_wr_callback(DEVCB_##_write); #define MCFG_MAINBOARD8_HOLD_CALLBACK(_write) \ - devcb = &downcast(*device).set_hold_wr_callback(DEVCB_##_write); + downcast(*device).set_hold_wr_callback(DEVCB_##_write); #define MCFG_OSO_INT_CALLBACK(_int) \ - devcb = &downcast(*device).set_int_callback(DEVCB##_int); + downcast(*device).set_int_callback(DEVCB##_int); DECLARE_DEVICE_TYPE_NS(TI99_MAINBOARD8, bus::ti99::internal, mainboard8_device) DECLARE_DEVICE_TYPE_NS(TI99_VAQUERRO, bus::ti99::internal, vaquerro_device) diff --git a/src/devices/bus/ti99/internal/datamux.h b/src/devices/bus/ti99/internal/datamux.h index 47d2d1f84c3..72695279332 100644 --- a/src/devices/bus/ti99/internal/datamux.h +++ b/src/devices/bus/ti99/internal/datamux.h @@ -141,7 +141,7 @@ private: /******************************************************************************/ #define MCFG_DMUX_READY_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_ready_callback(DEVCB_##_intcallb); + downcast(*device).set_ready_callback(DEVCB_##_intcallb); } } } // end namespace bus::ti99::internal diff --git a/src/devices/bus/ti99/internal/evpcconn.h b/src/devices/bus/ti99/internal/evpcconn.h index 9f1af61ccf9..67e5784cd4f 100644 --- a/src/devices/bus/ti99/internal/evpcconn.h +++ b/src/devices/bus/ti99/internal/evpcconn.h @@ -37,6 +37,6 @@ DECLARE_DEVICE_TYPE_NS(TI99_EVPCCONN, bus::ti99::internal, evpc_clock_connector) #define MCFG_ADD_EVPC_CONNECTOR( _tag, _vdpint ) \ MCFG_DEVICE_ADD(_tag, TI99_EVPCCONN, 0) \ - devcb = &downcast(*device).set_vdpint_callback(DEVCB_##_vdpint); + downcast(*device).set_vdpint_callback(DEVCB_##_vdpint); #endif // MAME_BUS_TI99_INTERNAL_EVPCCONN_H diff --git a/src/devices/bus/ti99/internal/genboard.h b/src/devices/bus/ti99/internal/genboard.h index 260f02932b1..e83e81cfc26 100644 --- a/src/devices/bus/ti99/internal/genboard.h +++ b/src/devices/bus/ti99/internal/genboard.h @@ -108,7 +108,7 @@ private: }; #define MCFG_GENEVE_KBINT_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_intcallb); + downcast(*device).set_int_callback(DEVCB_##_intcallb); /*****************************************************************************/ @@ -308,7 +308,7 @@ private: }; #define MCFG_GENEVE_READY_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_ready_callback(DEVCB_##_intcallb); + downcast(*device).set_ready_callback(DEVCB_##_intcallb); } } } // end namespace bus::ti99::internal diff --git a/src/devices/bus/ti99/internal/ioport.h b/src/devices/bus/ti99/internal/ioport.h index 4c21a11651e..0468649a72f 100644 --- a/src/devices/bus/ti99/internal/ioport.h +++ b/src/devices/bus/ti99/internal/ioport.h @@ -99,9 +99,9 @@ void ti99_io_port_ev(device_slot_interface &device); MCFG_DEVICE_SLOT_INTERFACE(ti99_io_port_ev, "peb", false) #define MCFG_IOPORT_EXTINT_HANDLER( _extint ) \ - devcb = &downcast(*device).set_extint_callback(DEVCB_##_extint); + downcast(*device).set_extint_callback(DEVCB_##_extint); #define MCFG_IOPORT_READY_HANDLER( _ready ) \ - devcb = &downcast(*device).set_ready_callback(DEVCB_##_ready); + downcast(*device).set_ready_callback(DEVCB_##_ready); #endif /* __TI99IOPORT__ */ diff --git a/src/devices/bus/ti99/joyport/joyport.h b/src/devices/bus/ti99/joyport/joyport.h index c455058c387..3808f5bff7c 100644 --- a/src/devices/bus/ti99/joyport/joyport.h +++ b/src/devices/bus/ti99/joyport/joyport.h @@ -75,7 +75,7 @@ void ti99_joystick_port_gen(device_slot_interface &device); DECLARE_DEVICE_TYPE_NS(TI99_JOYPORT, bus::ti99::joyport, joyport_device) #define MCFG_JOYPORT_INT_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_intcallb); + downcast(*device).set_int_callback(DEVCB_##_intcallb); #define MCFG_GENEVE_JOYPORT_ADD( _tag ) \ MCFG_DEVICE_ADD(_tag, TI99_JOYPORT, 0) \ diff --git a/src/devices/bus/ti99/peb/peribox.h b/src/devices/bus/ti99/peb/peribox.h index 71ad9eb589b..d83c8f0aa44 100644 --- a/src/devices/bus/ti99/peb/peribox.h +++ b/src/devices/bus/ti99/peb/peribox.h @@ -250,16 +250,16 @@ private: MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _default, false) #define MCFG_PERIBOX_INTA_HANDLER( _inta ) \ - devcb = &downcast(*device).set_inta_callback(DEVCB_##_inta); + downcast(*device).set_inta_callback(DEVCB_##_inta); #define MCFG_PERIBOX_INTB_HANDLER( _intb ) \ - devcb = &downcast(*device).set_intb_callback(DEVCB_##_intb); + downcast(*device).set_intb_callback(DEVCB_##_intb); #define MCFG_PERIBOX_READY_HANDLER( _ready ) \ - devcb = &downcast(*device).set_ready_callback(DEVCB_##_ready); + downcast(*device).set_ready_callback(DEVCB_##_ready); #define MCFG_PERIBOX_LCP_HANDLER( _lcp ) \ - devcb = &downcast(*device).set_lcp_callback(DEVCB_##_lcp); + downcast(*device).set_lcp_callback(DEVCB_##_lcp); } } } // end namespace bus::ti99::peb diff --git a/src/devices/bus/ti99x/990_dk.h b/src/devices/bus/ti99x/990_dk.h index 79bebc674d6..cb5dd86a61e 100644 --- a/src/devices/bus/ti99x/990_dk.h +++ b/src/devices/bus/ti99x/990_dk.h @@ -69,6 +69,6 @@ private: // LEGACY_FLOPPY_OPTIONS_EXTERN(fd800); #define MCFG_FD800_INT_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_intcallb); + downcast(*device).set_int_callback(DEVCB_##_intcallb); #endif // MAME_BUS_TI99X_990_DK_H diff --git a/src/devices/bus/ti99x/990_hd.h b/src/devices/bus/ti99x/990_hd.h index 57f0f55fa27..77b4f6a2749 100644 --- a/src/devices/bus/ti99x/990_hd.h +++ b/src/devices/bus/ti99x/990_hd.h @@ -75,7 +75,7 @@ private: }; #define MCFG_TI990_HDC_INT_CALLBACK( _write ) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_write); + downcast(*device).set_int_callback(DEVCB_##_write); DECLARE_DEVICE_TYPE(TI990_HDC, ti990_hdc_device) diff --git a/src/devices/bus/ti99x/990_tap.h b/src/devices/bus/ti99x/990_tap.h index a86725dd079..9bc8b04666b 100644 --- a/src/devices/bus/ti99x/990_tap.h +++ b/src/devices/bus/ti99x/990_tap.h @@ -61,6 +61,6 @@ private: }; #define MCFG_TI990_TAPE_INT_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_intcallb); + downcast(*device).set_int_callback(DEVCB_##_intcallb); #endif // MAME_BUS_TI99X_990_TAP_H diff --git a/src/devices/bus/tiki100/exp.h b/src/devices/bus/tiki100/exp.h index 5636ce6e5a7..fb82a62fdce 100644 --- a/src/devices/bus/tiki100/exp.h +++ b/src/devices/bus/tiki100/exp.h @@ -39,19 +39,19 @@ #define MCFG_TIKI100_BUS_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_TIKI100_BUS_NMI_CALLBACK(_write) \ - devcb = &downcast(*device).set_nmi_wr_callback(DEVCB_##_write); + downcast(*device).set_nmi_wr_callback(DEVCB_##_write); #define MCFG_TIKI100_BUS_BUSRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_busrq_wr_callback(DEVCB_##_write); + downcast(*device).set_busrq_wr_callback(DEVCB_##_write); #define MCFG_TIKI100_BUS_IN_MREQ_CALLBACK(_read) \ - devcb = &downcast(*device).set_mrq_rd_callback(DEVCB_##_read); + downcast(*device).set_mrq_rd_callback(DEVCB_##_read); #define MCFG_TIKI100_BUS_OUT_MREQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_mrq_wr_callback(DEVCB_##_write); + downcast(*device).set_mrq_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/tiki100/hdc.cpp b/src/devices/bus/tiki100/hdc.cpp index 1807d39b10d..9a0b10384c7 100644 --- a/src/devices/bus/tiki100/hdc.cpp +++ b/src/devices/bus/tiki100/hdc.cpp @@ -33,11 +33,11 @@ DEFINE_DEVICE_TYPE(TIKI100_HDC, tiki100_hdc_device, "tiki100_hdc", "TIKI-100 Win MACHINE_CONFIG_START(tiki100_hdc_device::device_add_mconfig) MCFG_DEVICE_ADD(WD1010_TAG, WD2010, 5000000) //MCFG_WD2010_OUT_INTRQ_CB() - MCFG_WD2010_IN_DRDY_CB(VCC) - MCFG_WD2010_IN_INDEX_CB(VCC) - MCFG_WD2010_IN_WF_CB(VCC) - MCFG_WD2010_IN_TK000_CB(VCC) - MCFG_WD2010_IN_SC_CB(VCC) + MCFG_WD2010_IN_DRDY_CB(CONSTANT(1)) + MCFG_WD2010_IN_INDEX_CB(CONSTANT(1)) + MCFG_WD2010_IN_WF_CB(CONSTANT(1)) + MCFG_WD2010_IN_TK000_CB(CONSTANT(1)) + MCFG_WD2010_IN_SC_CB(CONSTANT(1)) MCFG_HARDDISK_ADD("hard0") MCFG_HARDDISK_ADD("hard1") diff --git a/src/devices/bus/tvc/tvc.h b/src/devices/bus/tvc/tvc.h index 9fd9db95e14..584e121f428 100644 --- a/src/devices/bus/tvc/tvc.h +++ b/src/devices/bus/tvc/tvc.h @@ -125,9 +125,9 @@ DECLARE_DEVICE_TYPE(TVCEXP_SLOT, tvcexp_slot_device) ***************************************************************************/ #define MCFG_TVCEXP_SLOT_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_TVCEXP_SLOT_OUT_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); #endif // MAME_BUS_TVC_TVC_H diff --git a/src/devices/bus/vcs_ctrl/ctrl.h b/src/devices/bus/vcs_ctrl/ctrl.h index 2018d70ba34..271001b3486 100644 --- a/src/devices/bus/vcs_ctrl/ctrl.h +++ b/src/devices/bus/vcs_ctrl/ctrl.h @@ -27,7 +27,7 @@ #define MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(_write) \ - devcb = &downcast(*device).set_trigger_wr_callback(DEVCB_##_write); + downcast(*device).set_trigger_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/vic10/exp.h b/src/devices/bus/vic10/exp.h index c504be951cf..56754923a02 100644 --- a/src/devices/bus/vic10/exp.h +++ b/src/devices/bus/vic10/exp.h @@ -53,16 +53,16 @@ //************************************************************************** #define MCFG_VIC10_EXPANSION_SLOT_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_VIC10_EXPANSION_SLOT_RES_CALLBACK(_write) \ - devcb = &downcast(*device).set_res_wr_callback(DEVCB_##_write); + downcast(*device).set_res_wr_callback(DEVCB_##_write); #define MCFG_VIC10_EXPANSION_SLOT_CNT_CALLBACK(_write) \ - devcb = &downcast(*device).set_cnt_wr_callback(DEVCB_##_write); + downcast(*device).set_cnt_wr_callback(DEVCB_##_write); #define MCFG_VIC10_EXPANSION_SLOT_SP_CALLBACK(_write) \ - devcb = &downcast(*device).set_sp_wr_callback(DEVCB_##_write); + downcast(*device).set_sp_wr_callback(DEVCB_##_write); #define MCFG_VIC10_EXPANSION_SLOT_IRQ_CALLBACKS(_irq, _res) \ diff --git a/src/devices/bus/vic20/exp.h b/src/devices/bus/vic20/exp.h index 231c6821f1d..eadac324dfb 100644 --- a/src/devices/bus/vic20/exp.h +++ b/src/devices/bus/vic20/exp.h @@ -59,13 +59,13 @@ #define MCFG_VIC20_EXPANSION_SLOT_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_VIC20_EXPANSION_SLOT_NMI_CALLBACK(_write) \ - devcb = &downcast(*device).set_nmi_wr_callback(DEVCB_##_write); + downcast(*device).set_nmi_wr_callback(DEVCB_##_write); #define MCFG_VIC20_EXPANSION_SLOT_RES_CALLBACK(_write) \ - devcb = &downcast(*device).set_res_wr_callback(DEVCB_##_write); + downcast(*device).set_res_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/vic20/vic1011.cpp b/src/devices/bus/vic20/vic1011.cpp index cb136d4a0a4..893536a5b09 100644 --- a/src/devices/bus/vic20/vic1011.cpp +++ b/src/devices/bus/vic20/vic1011.cpp @@ -11,14 +11,6 @@ -//************************************************************************** -// MACROS/CONSTANTS -//************************************************************************** - -#define RS232_TAG "rs232" - - - //************************************************************************** // DEVICE DEFINITIONS //************************************************************************** @@ -30,13 +22,14 @@ DEFINE_DEVICE_TYPE(VIC1011, vic1011_device, "vic1011", "VIC-1011 RS-232C") // device_add_mconfig - add device configuration //------------------------------------------------- -MACHINE_CONFIG_START(vic1011_device::device_add_mconfig) - MCFG_DEVICE_ADD(RS232_TAG, RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE(DEVICE_SELF, vic1011_device, output_rxd)) - MCFG_RS232_DCD_HANDLER(WRITELINE(DEVICE_SELF, vic1011_device, output_h)) MCFG_DEVCB_XOR(1) - MCFG_RS232_CTS_HANDLER(WRITELINE(DEVICE_SELF, vic1011_device, output_k)) MCFG_DEVCB_XOR(1) - MCFG_RS232_DSR_HANDLER(WRITELINE(DEVICE_SELF, vic1011_device, output_l)) MCFG_DEVCB_XOR(1) -MACHINE_CONFIG_END +void vic1011_device::device_add_mconfig(machine_config &config) +{ + RS232_PORT(config, m_rs232, default_rs232_devices, nullptr); + m_rs232->rxd_handler().set(FUNC(vic1011_device::output_rxd)); + m_rs232->dcd_handler().set(FUNC(vic1011_device::output_h)).invert(); + m_rs232->cts_handler().set(FUNC(vic1011_device::output_k)).invert(); + m_rs232->dsr_handler().set(FUNC(vic1011_device::output_l)).invert(); +} //************************************************************************** @@ -50,7 +43,7 @@ MACHINE_CONFIG_END vic1011_device::vic1011_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, VIC1011, tag, owner, clock) , device_pet_user_port_interface(mconfig, *this) - , m_rs232(*this, RS232_TAG) + , m_rs232(*this, "rs232") { } diff --git a/src/devices/bus/vidbrain/exp.h b/src/devices/bus/vidbrain/exp.h index b7f3f5cad7a..fdb4b6a6ac7 100644 --- a/src/devices/bus/vidbrain/exp.h +++ b/src/devices/bus/vidbrain/exp.h @@ -60,7 +60,7 @@ #define MCFG_VIDEOBRAIN_EXPANSION_SLOT_EXTRES_CALLBACK(_write) \ - devcb = &downcast(*device).set_extres_wr_callback(DEVCB_##_write); + downcast(*device).set_extres_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/vip/exp.h b/src/devices/bus/vip/exp.h index 98eda45bdbe..b9bc3235fa7 100644 --- a/src/devices/bus/vip/exp.h +++ b/src/devices/bus/vip/exp.h @@ -57,13 +57,13 @@ #define MCFG_VIP_EXPANSION_SLOT_INT_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_wr_callback(DEVCB_##_write); + downcast(*device).set_int_wr_callback(DEVCB_##_write); #define MCFG_VIP_EXPANSION_SLOT_DMA_OUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma_out_wr_callback(DEVCB_##_write); + downcast(*device).set_dma_out_wr_callback(DEVCB_##_write); #define MCFG_VIP_EXPANSION_SLOT_DMA_IN_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma_in_wr_callback(DEVCB_##_write); + downcast(*device).set_dma_in_wr_callback(DEVCB_##_write); diff --git a/src/devices/bus/vme/vme.h b/src/devices/bus/vme/vme.h index 8f86d90bd29..a2b2ab944eb 100644 --- a/src/devices/bus/vme/vme.h +++ b/src/devices/bus/vme/vme.h @@ -59,7 +59,7 @@ // Callbacks to the board from the VME bus comes through here #define MCFG_VME_J1_CB(_devcb) \ - devcb = &downcast(*device).set_vme_j1_callback(DEVCB_##_devcb); + downcast(*device).set_vme_j1_callback(DEVCB_##_devcb); //void vme_slot1(device_slot_interface &device); // Disabled until we know how to combine a board driver and a slot device. void vme_slots(device_slot_interface &device); diff --git a/src/devices/bus/vme/vme_mzr8300.cpp b/src/devices/bus/vme/vme_mzr8300.cpp index c5a94ca1b8e..158845770e4 100644 --- a/src/devices/bus/vme/vme_mzr8300.cpp +++ b/src/devices/bus/vme/vme_mzr8300.cpp @@ -136,15 +136,15 @@ MACHINE_CONFIG_START(vme_mzr8300_card_device::device_add_mconfig) MCFG_RS232_RXD_HANDLER(WRITELINE("sio0", upd7201_new_device, rxb_w)) MCFG_RS232_CTS_HANDLER(WRITELINE("sio0", upd7201_new_device, ctsb_w)) - MCFG_DEVICE_ADD("stc", AM9513, XTAL(4'000'000)) - MCFG_AM9513_OUT1_CALLBACK(WRITELINE("sio0", upd7201_new_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio0", upd7201_new_device, txca_w)) - MCFG_AM9513_OUT2_CALLBACK(WRITELINE("sio0", upd7201_new_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio0", upd7201_new_device, txcb_w)) - MCFG_AM9513_OUT3_CALLBACK(WRITELINE("sio1", upd7201_new_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio1", upd7201_new_device, txca_w)) - MCFG_AM9513_OUT4_CALLBACK(WRITELINE("sio1", upd7201_new_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio1", upd7201_new_device, txcb_w)) + am9513_device &stc(AM9513(config, "stc", 4_MHz_XTAL)); + stc.out1_cb().set("sio0", FUNC(upd7201_new_device::rxca_w)); + stc.out1_cb().append("sio0", FUNC(upd7201_new_device::txca_w)); + stc.out2_cb().set("sio0", FUNC(upd7201_new_device::rxcb_w)); + stc.out2_cb().append("sio0", FUNC(upd7201_new_device::txcb_w)); + stc.out3_cb().set("sio1", FUNC(upd7201_new_device::rxca_w)); + stc.out3_cb().append("sio1", FUNC(upd7201_new_device::txca_w)); + stc.out4_cb().set("sio1", FUNC(upd7201_new_device::rxcb_w)); + stc.out4_cb().append("sio1", FUNC(upd7201_new_device::txcb_w)); MACHINE_CONFIG_END diff --git a/src/devices/bus/vtech/memexp/memexp.h b/src/devices/bus/vtech/memexp/memexp.h index 91737e003bc..87bde42bf5d 100644 --- a/src/devices/bus/vtech/memexp/memexp.h +++ b/src/devices/bus/vtech/memexp/memexp.h @@ -47,13 +47,13 @@ MCFG_DEVICE_SLOT_INTERFACE(vtech_memexp_carts, nullptr, false) #define MCFG_MEMEXP_SLOT_INT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int_handler(DEVCB_##_devcb); + downcast(*device).set_int_handler(DEVCB_##_devcb); #define MCFG_MEMEXP_SLOT_NMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_nmi_handler(DEVCB_##_devcb); #define MCFG_MEMEXP_SLOT_RESET_HANDLER(_devcb) \ - devcb = &downcast(*device).set_reset_handler(DEVCB_##_devcb); + downcast(*device).set_reset_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/wangpc/wangpc.h b/src/devices/bus/wangpc/wangpc.h index 1510eba9fbf..1f10892f7fc 100644 --- a/src/devices/bus/wangpc/wangpc.h +++ b/src/devices/bus/wangpc/wangpc.h @@ -39,34 +39,34 @@ #define MCFG_WANGPC_BUS_IRQ2_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq2_wr_callback(DEVCB_##_write); + downcast(*device).set_irq2_wr_callback(DEVCB_##_write); #define MCFG_WANGPC_BUS_IRQ3_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq3_wr_callback(DEVCB_##_write); + downcast(*device).set_irq3_wr_callback(DEVCB_##_write); #define MCFG_WANGPC_BUS_IRQ4_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq4_wr_callback(DEVCB_##_write); + downcast(*device).set_irq4_wr_callback(DEVCB_##_write); #define MCFG_WANGPC_BUS_IRQ5_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq5_wr_callback(DEVCB_##_write); + downcast(*device).set_irq5_wr_callback(DEVCB_##_write); #define MCFG_WANGPC_BUS_IRQ6_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq6_wr_callback(DEVCB_##_write); + downcast(*device).set_irq6_wr_callback(DEVCB_##_write); #define MCFG_WANGPC_BUS_IRQ7_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq7_wr_callback(DEVCB_##_write); + downcast(*device).set_irq7_wr_callback(DEVCB_##_write); #define MCFG_WANGPC_BUS_DRQ1_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq1_wr_callback(DEVCB_##_write); + downcast(*device).set_drq1_wr_callback(DEVCB_##_write); #define MCFG_WANGPC_BUS_DRQ2_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq2_wr_callback(DEVCB_##_write); + downcast(*device).set_drq2_wr_callback(DEVCB_##_write); #define MCFG_WANGPC_BUS_DRQ3_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq3_wr_callback(DEVCB_##_write); + downcast(*device).set_drq3_wr_callback(DEVCB_##_write); #define MCFG_WANGPC_BUS_IOERROR_CALLBACK(_write) \ - devcb = &downcast(*device).set_ioerror_wr_callback(DEVCB_##_write); + downcast(*device).set_ioerror_wr_callback(DEVCB_##_write); //************************************************************************** diff --git a/src/devices/bus/x68k/x68kexp.h b/src/devices/bus/x68k/x68kexp.h index 3b0a0080e1e..56f9feea8a5 100644 --- a/src/devices/bus/x68k/x68kexp.h +++ b/src/devices/bus/x68k/x68kexp.h @@ -78,16 +78,16 @@ //************************************************************************** #define MCFG_X68K_EXPANSION_SLOT_OUT_IRQ2_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq2_callback(DEVCB_##_devcb); #define MCFG_X68K_EXPANSION_SLOT_OUT_IRQ4_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq4_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq4_callback(DEVCB_##_devcb); #define MCFG_X68K_EXPANSION_SLOT_OUT_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); + downcast(*device).set_out_nmi_callback(DEVCB_##_devcb); #define MCFG_X68K_EXPANSION_SLOT_OUT_RESET_CB(_devcb) \ - devcb = &downcast(*device).set_out_reset_callback(DEVCB_##_devcb); + downcast(*device).set_out_reset_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/bus/z88/z88.h b/src/devices/bus/z88/z88.h index f5b63fcbfd0..de8ecdc883f 100644 --- a/src/devices/bus/z88/z88.h +++ b/src/devices/bus/z88/z88.h @@ -139,6 +139,6 @@ DECLARE_DEVICE_TYPE(Z88CART_SLOT, z88cart_slot_device) ***************************************************************************/ #define MCFG_Z88CART_SLOT_OUT_FLP_CB(_devcb) \ - devcb = &downcast(*device).set_out_flp_callback(DEVCB_##_devcb); + downcast(*device).set_out_flp_callback(DEVCB_##_devcb); #endif // MAME_BUS_Z88_Z88_H diff --git a/src/devices/cpu/adsp2100/adsp2100.h b/src/devices/cpu/adsp2100/adsp2100.h index 31c7d257572..337de47771d 100644 --- a/src/devices/cpu/adsp2100/adsp2100.h +++ b/src/devices/cpu/adsp2100/adsp2100.h @@ -181,16 +181,16 @@ enum //************************************************************************** #define MCFG_ADSP21XX_SPORT_RX_CB(_devcb) \ - devcb = &downcast(*device).set_sport_rx_callback(DEVCB_##_devcb); + downcast(*device).set_sport_rx_callback(DEVCB_##_devcb); #define MCFG_ADSP21XX_SPORT_TX_CB(_devcb) \ - devcb = &downcast(*device).set_sport_tx_callback(DEVCB_##_devcb); + downcast(*device).set_sport_tx_callback(DEVCB_##_devcb); #define MCFG_ADSP21XX_TIMER_FIRED_CB(_devcb) \ - devcb = &downcast(*device).set_timer_fired_callback(DEVCB_##_devcb); + downcast(*device).set_timer_fired_callback(DEVCB_##_devcb); #define MCFG_ADSP21XX_DMOVLAY_CB(_devcb) \ - devcb = &downcast(*device).set_dmovlay_callback(DEVCB_##_devcb); + downcast(*device).set_dmovlay_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/cpu/amis2000/amis2000.h b/src/devices/cpu/amis2000/amis2000.h index abf3b55fca8..2e15b6572ff 100644 --- a/src/devices/cpu/amis2000/amis2000.h +++ b/src/devices/cpu/amis2000/amis2000.h @@ -14,25 +14,25 @@ // generic input pins (4 bits each) #define MCFG_AMI_S2000_READ_K_CB(_devcb) \ - devcb = &downcast(*device).set_read_k_callback(DEVCB_##_devcb); + downcast(*device).set_read_k_callback(DEVCB_##_devcb); #define MCFG_AMI_S2000_READ_I_CB(_devcb) \ - devcb = &downcast(*device).set_read_i_callback(DEVCB_##_devcb); + downcast(*device).set_read_i_callback(DEVCB_##_devcb); // 8-bit external databus coupled as input/output pins #define MCFG_AMI_S2000_READ_D_CB(_devcb) \ - devcb = &downcast(*device).set_read_d_callback(DEVCB_##_devcb); + downcast(*device).set_read_d_callback(DEVCB_##_devcb); #define MCFG_AMI_S2000_WRITE_D_CB(_devcb) \ - devcb = &downcast(*device).set_write_d_callback(DEVCB_##_devcb); + downcast(*device).set_write_d_callback(DEVCB_##_devcb); // 13-bit external address bus coupled as output pins #define MCFG_AMI_S2000_WRITE_A_CB(_devcb) \ - devcb = &downcast(*device).set_write_a_callback(DEVCB_##_devcb); + downcast(*device).set_write_a_callback(DEVCB_##_devcb); // F_out pin (only for S2152) #define MCFG_AMI_S2152_FOUT_CB(_devcb) \ - devcb = &downcast(*device).set_write_f_callback(DEVCB_##_devcb); + downcast(*device).set_write_f_callback(DEVCB_##_devcb); // S2000 has a hardcoded 7seg table, that (unlike S2200) is officially // uncustomizable, but wildfire proves to be an exception to that rule. diff --git a/src/devices/cpu/apexc/apexc.h b/src/devices/cpu/apexc/apexc.h index 74a19a594be..4da1108a518 100644 --- a/src/devices/cpu/apexc/apexc.h +++ b/src/devices/cpu/apexc/apexc.h @@ -7,10 +7,10 @@ #pragma once #define MCFG_APEXC_TAPE_READ_CB(_devcb) \ - devcb = &downcast(*device).set_tape_read_cb(DEVCB_##_devcb); + downcast(*device).set_tape_read_cb(DEVCB_##_devcb); #define MCFG_APEXC_TAPE_PUNCH_CB(_devcb) \ - devcb = &downcast(*device).set_tape_punch_cb(DEVCB_##_devcb); + downcast(*device).set_tape_punch_cb(DEVCB_##_devcb); enum { diff --git a/src/devices/cpu/cop400/cop400.h b/src/devices/cpu/cop400/cop400.h index 197cf86abf1..5dbff8a9281 100644 --- a/src/devices/cpu/cop400/cop400.h +++ b/src/devices/cpu/cop400/cop400.h @@ -17,40 +17,40 @@ // L pins: 8-bit bi-directional #define MCFG_COP400_READ_L_CB(_devcb) \ - devcb = &downcast(*device).set_read_l_callback(DEVCB_##_devcb); + downcast(*device).set_read_l_callback(DEVCB_##_devcb); #define MCFG_COP400_WRITE_L_CB(_devcb) \ - devcb = &downcast(*device).set_write_l_callback(DEVCB_##_devcb); + downcast(*device).set_write_l_callback(DEVCB_##_devcb); // output state when pins are in tri-state, default 0 #define MCFG_COP400_READ_L_TRISTATE_CB(_devcb) \ - devcb = &downcast(*device).set_read_l_tristate_callback(DEVCB_##_devcb); + downcast(*device).set_read_l_tristate_callback(DEVCB_##_devcb); // G pins: 4-bit bi-directional #define MCFG_COP400_READ_G_CB(_devcb) \ - devcb = &downcast(*device).set_read_g_callback(DEVCB_##_devcb); + downcast(*device).set_read_g_callback(DEVCB_##_devcb); #define MCFG_COP400_WRITE_G_CB(_devcb) \ - devcb = &downcast(*device).set_write_g_callback(DEVCB_##_devcb); + downcast(*device).set_write_g_callback(DEVCB_##_devcb); // D outputs: 4-bit general purpose output #define MCFG_COP400_WRITE_D_CB(_devcb) \ - devcb = &downcast(*device).set_write_d_callback(DEVCB_##_devcb); + downcast(*device).set_write_d_callback(DEVCB_##_devcb); // IN inputs: 4-bit general purpose input #define MCFG_COP400_READ_IN_CB(_devcb) \ - devcb = &downcast(*device).set_read_in_callback(DEVCB_##_devcb); + downcast(*device).set_read_in_callback(DEVCB_##_devcb); // SI/SO lines: serial in/out or counter/gen.purpose #define MCFG_COP400_READ_SI_CB(_devcb) \ - devcb = &downcast(*device).set_read_si_callback(DEVCB_##_devcb); + downcast(*device).set_read_si_callback(DEVCB_##_devcb); #define MCFG_COP400_WRITE_SO_CB(_devcb) \ - devcb = &downcast(*device).set_write_so_callback(DEVCB_##_devcb); + downcast(*device).set_write_so_callback(DEVCB_##_devcb); // SK output line: logic-controlled clock or gen.purpose #define MCFG_COP400_WRITE_SK_CB(_devcb) \ - devcb = &downcast(*device).set_write_sk_callback(DEVCB_##_devcb); + downcast(*device).set_write_sk_callback(DEVCB_##_devcb); // CKI/CKO lines: only CKO input here #define MCFG_COP400_READ_CKO_CB(_devcb) \ - devcb = &downcast(*device).set_read_cko_callback(DEVCB_##_devcb); + downcast(*device).set_read_cko_callback(DEVCB_##_devcb); /*************************************************************************** diff --git a/src/devices/cpu/cosmac/cosmac.h b/src/devices/cpu/cosmac/cosmac.h index 4a535f3c4c1..d5c98c8c992 100644 --- a/src/devices/cpu/cosmac/cosmac.h +++ b/src/devices/cpu/cosmac/cosmac.h @@ -88,34 +88,34 @@ //************************************************************************** #define MCFG_COSMAC_WAIT_CALLBACK(_read) \ - devcb = &downcast(*device).set_wait_rd_callback(DEVCB_##_read); + downcast(*device).set_wait_rd_callback(DEVCB_##_read); #define MCFG_COSMAC_CLEAR_CALLBACK(_read) \ - devcb = &downcast(*device).set_clear_rd_callback(DEVCB_##_read); + downcast(*device).set_clear_rd_callback(DEVCB_##_read); #define MCFG_COSMAC_EF1_CALLBACK(_read) \ - devcb = &downcast(*device).set_ef1_rd_callback(DEVCB_##_read); + downcast(*device).set_ef1_rd_callback(DEVCB_##_read); #define MCFG_COSMAC_EF2_CALLBACK(_read) \ - devcb = &downcast(*device).set_ef2_rd_callback(DEVCB_##_read); + downcast(*device).set_ef2_rd_callback(DEVCB_##_read); #define MCFG_COSMAC_EF3_CALLBACK(_read) \ - devcb = &downcast(*device).set_ef3_rd_callback(DEVCB_##_read); + downcast(*device).set_ef3_rd_callback(DEVCB_##_read); #define MCFG_COSMAC_EF4_CALLBACK(_read) \ - devcb = &downcast(*device).set_ef4_rd_callback(DEVCB_##_read); + downcast(*device).set_ef4_rd_callback(DEVCB_##_read); #define MCFG_COSMAC_Q_CALLBACK(_write) \ - devcb = &downcast(*device).set_q_wr_callback(DEVCB_##_write); + downcast(*device).set_q_wr_callback(DEVCB_##_write); #define MCFG_COSMAC_DMAR_CALLBACK(_read) \ - devcb = &downcast(*device).set_dma_rd_callback(DEVCB_##_read); + downcast(*device).set_dma_rd_callback(DEVCB_##_read); #define MCFG_COSMAC_DMAW_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma_wr_callback(DEVCB_##_write); + downcast(*device).set_dma_wr_callback(DEVCB_##_write); #define MCFG_COSMAC_SC_CALLBACK(_write) \ - devcb = &downcast(*device).set_sc_wr_callback(DEVCB_##_write); + downcast(*device).set_sc_wr_callback(DEVCB_##_write); diff --git a/src/devices/cpu/cp1610/cp1610.h b/src/devices/cpu/cp1610/cp1610.h index d2ab4fa18bf..280546fc436 100644 --- a/src/devices/cpu/cp1610/cp1610.h +++ b/src/devices/cpu/cp1610/cp1610.h @@ -20,7 +20,7 @@ #define CP1610_INT_INTR INPUT_LINE_NMI /* Non-Maskable */ #define MCFG_CP1610_BEXT_CALLBACK(_read) \ - devcb = &downcast(device)->set_bext_callback(DEVCB_##_read); + downcast(device)->set_bext_callback(DEVCB_##_read); class cp1610_cpu_device : public cpu_device diff --git a/src/devices/cpu/dsp32/dsp32.h b/src/devices/cpu/dsp32/dsp32.h index 7de09dd1198..59289064f90 100644 --- a/src/devices/cpu/dsp32/dsp32.h +++ b/src/devices/cpu/dsp32/dsp32.h @@ -31,7 +31,7 @@ const int DSP32_OUTPUT_PDF = 0x02; //************************************************************************** #define MCFG_DSP32C_OUTPUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_output_pins_callback(DEVCB_##_write); + downcast(*device).set_output_pins_callback(DEVCB_##_write); // ======================> dsp32c_device diff --git a/src/devices/cpu/e0c6200/e0c6s46.h b/src/devices/cpu/e0c6200/e0c6s46.h index 7e9c4d0f91b..0d9f86c5772 100644 --- a/src/devices/cpu/e0c6200/e0c6s46.h +++ b/src/devices/cpu/e0c6200/e0c6s46.h @@ -16,7 +16,7 @@ // 5 4-bit R output ports #define MCFG_E0C6S46_WRITE_R_CB(R, _devcb) \ - devcb = &downcast(*device).set_write_r##R##_callback(DEVCB_##_devcb); + downcast(*device).set_write_r##R##_callback(DEVCB_##_devcb); enum { @@ -29,9 +29,9 @@ enum // 4 4-bit P I/O ports #define MCFG_E0C6S46_READ_P_CB(R, _devcb) \ - devcb = &downcast(*device).set_read_r##P##_callback(DEVCB_##_devcb); + downcast(*device).set_read_r##P##_callback(DEVCB_##_devcb); #define MCFG_E0C6S46_WRITE_P_CB(R, _devcb) \ - devcb = &downcast(*device).set_write_r##P##_callback(DEVCB_##_devcb); + downcast(*device).set_write_r##P##_callback(DEVCB_##_devcb); enum { diff --git a/src/devices/cpu/esrip/esrip.h b/src/devices/cpu/esrip/esrip.h index a97675e9be4..b9df5365da3 100644 --- a/src/devices/cpu/esrip/esrip.h +++ b/src/devices/cpu/esrip/esrip.h @@ -20,13 +20,13 @@ #define ESRIP_DRAW(name) int name(int l, int r, int fig, int attr, int addr, int col, int x_scale, int bank) #define MCFG_ESRIP_FDT_R_CALLBACK(_read) \ - devcb = &downcast(*device).set_fdt_r_callback(DEVCB_##_read); + downcast(*device).set_fdt_r_callback(DEVCB_##_read); #define MCFG_ESRIP_FDT_W_CALLBACK(_write) \ - devcb = &downcast(*device).set_fdt_w_callback(DEVCB_##_write); + downcast(*device).set_fdt_w_callback(DEVCB_##_write); #define MCFG_ESRIP_STATUS_IN_CALLBACK(_read) \ - devcb = &downcast(*device).set_status_in_callback(DEVCB_##_read); + downcast(*device).set_status_in_callback(DEVCB_##_read); #define MCFG_ESRIP_DRAW_CALLBACK_OWNER(_class, _method) \ downcast(*device).set_draw_callback(esrip_device::draw_delegate(&_class::_method, #_class "::" #_method, this)); diff --git a/src/devices/cpu/h8/h83002.h b/src/devices/cpu/h8/h83002.h index 457e604aa21..32047b60390 100644 --- a/src/devices/cpu/h8/h83002.h +++ b/src/devices/cpu/h8/h83002.h @@ -26,9 +26,9 @@ #include "h8_watchdog.h" #define MCFG_H83002_TEND0_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_tend0_callback(DEVCB_##_devcb); + downcast(*device).set_tend0_callback(DEVCB_##_devcb); #define MCFG_H83002_TEND1_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_tend1_callback(DEVCB_##_devcb); + downcast(*device).set_tend1_callback(DEVCB_##_devcb); class h83002_device : public h8h_device { public: diff --git a/src/devices/cpu/h8/h8_sci.h b/src/devices/cpu/h8/h8_sci.h index 3c2db4147df..065c5e4b305 100644 --- a/src/devices/cpu/h8/h8_sci.h +++ b/src/devices/cpu/h8/h8_sci.h @@ -25,10 +25,10 @@ downcast(device)->set_external_clock_period(_period); #define MCFG_H8_SCI_TX_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_tx_cb(DEVCB_##_devcb); + downcast(*device).set_tx_cb(DEVCB_##_devcb); #define MCFG_H8_SCI_CLK_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_clk_cb(DEVCB_##_devcb); + downcast(*device).set_clk_cb(DEVCB_##_devcb); class h8_sci_device : public device_t { public: @@ -56,6 +56,8 @@ public: template devcb_base &set_tx_cb(Object &&cb) { return tx_cb.set_callback(std::forward(cb)); } template devcb_base &set_clk_cb(Object &&cb) { return clk_cb.set_callback(std::forward(cb)); } + auto tx_handler() { return tx_cb.bind(); } + auto clk_handler() { return clk_cb.bind(); } uint64_t internal_update(uint64_t current_time); diff --git a/src/devices/cpu/hcd62121/hcd62121.h b/src/devices/cpu/hcd62121/hcd62121.h index 0c2da71fec5..7e85bc2af96 100644 --- a/src/devices/cpu/hcd62121/hcd62121.h +++ b/src/devices/cpu/hcd62121/hcd62121.h @@ -6,12 +6,12 @@ #pragma once -#define MCFG_HCD62121_KOL_CB(_devcb) devcb = &downcast(*device).set_kol_callback(DEVCB_##_devcb); -#define MCFG_HCD62121_KOH_CB(_devcb) devcb = &downcast(*device).set_koh_callback(DEVCB_##_devcb); -#define MCFG_HCD62121_PORT_CB(_devcb) devcb = &downcast(*device).set_port_callback(DEVCB_##_devcb); -#define MCFG_HCD62121_OPT_CB(_devcb) devcb = &downcast(*device).set_opt_callback(DEVCB_##_devcb); -#define MCFG_HCD62121_KI_CB(_devcb) devcb = &downcast(*device).set_ki_callback(DEVCB_##_devcb); -#define MCFG_HCD62121_IN0_CB(_devcb) devcb = &downcast(*device).set_in0_callback(DEVCB_##_devcb); +#define MCFG_HCD62121_KOL_CB(_devcb) downcast(*device).set_kol_callback(DEVCB_##_devcb); +#define MCFG_HCD62121_KOH_CB(_devcb) downcast(*device).set_koh_callback(DEVCB_##_devcb); +#define MCFG_HCD62121_PORT_CB(_devcb) downcast(*device).set_port_callback(DEVCB_##_devcb); +#define MCFG_HCD62121_OPT_CB(_devcb) downcast(*device).set_opt_callback(DEVCB_##_devcb); +#define MCFG_HCD62121_KI_CB(_devcb) downcast(*device).set_ki_callback(DEVCB_##_devcb); +#define MCFG_HCD62121_IN0_CB(_devcb) downcast(*device).set_in0_callback(DEVCB_##_devcb); class hcd62121_cpu_device : public cpu_device diff --git a/src/devices/cpu/hd61700/hd61700.h b/src/devices/cpu/hd61700/hd61700.h index cb139878221..8b69bf41913 100644 --- a/src/devices/cpu/hd61700/hd61700.h +++ b/src/devices/cpu/hd61700/hd61700.h @@ -16,25 +16,25 @@ //************************************************************************** #define MCFG_HD61700_LCD_CTRL_CB(_devcb) \ - devcb = &downcast(*device).set_lcd_ctrl_callback(DEVCB_##_devcb); + downcast(*device).set_lcd_ctrl_callback(DEVCB_##_devcb); #define MCFG_HD61700_LCD_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_lcd_write_callback(DEVCB_##_devcb); + downcast(*device).set_lcd_write_callback(DEVCB_##_devcb); #define MCFG_HD61700_LCD_READ_CB(_devcb) \ - devcb = &downcast(*device).set_lcd_read_callback(DEVCB_##_devcb); + downcast(*device).set_lcd_read_callback(DEVCB_##_devcb); #define MCFG_HD61700_KB_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_kb_write_callback(DEVCB_##_devcb); + downcast(*device).set_kb_write_callback(DEVCB_##_devcb); #define MCFG_HD61700_KB_READ_CB(_devcb) \ - devcb = &downcast(*device).set_kb_read_callback(DEVCB_##_devcb); + downcast(*device).set_kb_read_callback(DEVCB_##_devcb); #define MCFG_HD61700_PORT_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_callback(DEVCB_##_devcb); + downcast(*device).set_port_write_callback(DEVCB_##_devcb); #define MCFG_HD61700_PORT_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_callback(DEVCB_##_devcb); + downcast(*device).set_port_read_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/cpu/hmcs40/hmcs40.h b/src/devices/cpu/hmcs40/hmcs40.h index 355780dee11..ffa5ea26d5e 100644 --- a/src/devices/cpu/hmcs40/hmcs40.h +++ b/src/devices/cpu/hmcs40/hmcs40.h @@ -16,15 +16,15 @@ // max 8 4-bit R ports #define MCFG_HMCS40_READ_R_CB(R, _devcb) \ - devcb = &downcast(*device).set_read_r##R##_callback(DEVCB_##_devcb); + downcast(*device).set_read_r##R##_callback(DEVCB_##_devcb); #define MCFG_HMCS40_WRITE_R_CB(R, _devcb) \ - devcb = &downcast(*device).set_write_r##R##_callback(DEVCB_##_devcb); + downcast(*device).set_write_r##R##_callback(DEVCB_##_devcb); // 16-bit discrete #define MCFG_HMCS40_READ_D_CB(_devcb) \ - devcb = &downcast(*device).set_read_d_callback(DEVCB_##_devcb); + downcast(*device).set_read_d_callback(DEVCB_##_devcb); #define MCFG_HMCS40_WRITE_D_CB(_devcb) \ - devcb = &downcast(*device).set_write_d_callback(DEVCB_##_devcb); + downcast(*device).set_write_d_callback(DEVCB_##_devcb); enum { diff --git a/src/devices/cpu/hphybrid/hphybrid.h b/src/devices/cpu/hphybrid/hphybrid.h index 404100a8115..4b03035950a 100644 --- a/src/devices/cpu/hphybrid/hphybrid.h +++ b/src/devices/cpu/hphybrid/hphybrid.h @@ -45,7 +45,7 @@ // PA changed callback #define MCFG_HPHYBRID_PA_CHANGED(_devcb) \ - devcb = &downcast(*device).set_pa_changed_func(DEVCB_##_devcb); + downcast(*device).set_pa_changed_func(DEVCB_##_devcb); class hp_hybrid_cpu_device : public cpu_device { diff --git a/src/devices/cpu/i386/i386.h b/src/devices/cpu/i386/i386.h index c6039009209..92a5e4ddbc5 100644 --- a/src/devices/cpu/i386/i386.h +++ b/src/devices/cpu/i386/i386.h @@ -26,10 +26,10 @@ #define MCFG_I386_SMIACT(_devcb) \ - devcb = &downcast(*device).set_smiact(DEVCB_##_devcb); + downcast(*device).set_smiact(DEVCB_##_devcb); #define MCFG_I486_FERR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ferr(DEVCB_##_devcb); + downcast(*device).set_ferr(DEVCB_##_devcb); #define X86_NUM_CPUS 4 diff --git a/src/devices/cpu/i8085/i8085.h b/src/devices/cpu/i8085/i8085.h index 8c70aa03d71..899dd0b85b8 100644 --- a/src/devices/cpu/i8085/i8085.h +++ b/src/devices/cpu/i8085/i8085.h @@ -18,19 +18,19 @@ // STATUS changed callback #define MCFG_I8085A_STATUS(_devcb) \ - devcb = &downcast(*device).set_out_status_func(DEVCB_##_devcb); + downcast(*device).set_out_status_func(DEVCB_##_devcb); // INTE changed callback #define MCFG_I8085A_INTE(_devcb) \ - devcb = &downcast(*device).set_out_inte_func(DEVCB_##_devcb); + downcast(*device).set_out_inte_func(DEVCB_##_devcb); // SID changed callback (8085A only) #define MCFG_I8085A_SID(_devcb) \ - devcb = &downcast(*device).set_in_sid_func(DEVCB_##_devcb); + downcast(*device).set_in_sid_func(DEVCB_##_devcb); // SOD changed callback (8085A only) #define MCFG_I8085A_SOD(_devcb) \ - devcb = &downcast(*device).set_out_sod_func(DEVCB_##_devcb); + downcast(*device).set_out_sod_func(DEVCB_##_devcb); // CLK rate callback (8085A only) #define MCFG_I8085A_CLK_OUT_DEVICE(_tag) \ @@ -71,6 +71,10 @@ public: template devcb_base &set_in_sid_func(Object &&cb) { return m_in_sid_func.set_callback(std::forward(cb)); } template devcb_base &set_out_sod_func(Object &&cb) { return m_out_sod_func.set_callback(std::forward(cb)); } template void set_clk_out(Object &&cb) { m_clk_out_func = std::forward(cb); } + auto out_status_func() { return m_out_status_func.bind(); } + auto out_inte_func() { return m_out_inte_func.bind(); } + auto in_sid_func() { return m_in_sid_func.bind(); } + auto out_sod_func() { return m_out_sod_func.bind(); } protected: i8085a_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int cputype); diff --git a/src/devices/cpu/i8089/i8089.h b/src/devices/cpu/i8089/i8089.h index 57dc9baea3d..0ea8c523f0a 100644 --- a/src/devices/cpu/i8089/i8089.h +++ b/src/devices/cpu/i8089/i8089.h @@ -26,10 +26,10 @@ downcast(*device).set_data_width(_data_width); #define MCFG_I8089_SINTR1(_sintr1) \ - devcb = &downcast(device)->set_sintr1_callback(DEVCB_##_sintr1); + downcast(device)->set_sintr1_callback(DEVCB_##_sintr1); #define MCFG_I8089_SINTR2(_sintr2) \ - devcb = &downcast(device)->set_sintr2_callback(DEVCB_##_sintr2); + downcast(device)->set_sintr2_callback(DEVCB_##_sintr2); //************************************************************************** diff --git a/src/devices/cpu/i86/i186.h b/src/devices/cpu/i86/i186.h index ca281a58604..297a185ba66 100644 --- a/src/devices/cpu/i86/i186.h +++ b/src/devices/cpu/i86/i186.h @@ -20,6 +20,10 @@ public: template devcb_base &set_chip_select_callback(Object &&cb) { return m_out_chip_select_func.set_callback(std::forward(cb)); } template devcb_base &set_tmrout0_handler(Object &&cb) { return m_out_tmrout0_func.set_callback(std::forward(cb)); } template devcb_base &set_tmrout1_handler(Object &&cb) { return m_out_tmrout1_func.set_callback(std::forward(cb)); } + auto read_slave_ack_callback() { return m_read_slave_ack_func.bind(); } + auto chip_select_callback() { return m_out_chip_select_func.bind(); } + auto tmrout0_handler() { return m_out_tmrout0_func.bind(); } + auto tmrout1_handler() { return m_out_tmrout1_func.bind(); } IRQ_CALLBACK_MEMBER(int_callback); DECLARE_WRITE_LINE_MEMBER(drq0_w) { if(state) drq_callback(0); m_dma[0].drq_state = state; } @@ -157,15 +161,15 @@ public: }; #define MCFG_80186_IRQ_SLAVE_ACK(_devcb) \ - devcb = &downcast(*device).set_read_slave_ack_callback(DEVCB_##_devcb); + downcast(*device).set_read_slave_ack_callback(DEVCB_##_devcb); #define MCFG_80186_CHIP_SELECT_CB(_devcb) \ - devcb = &downcast(*device).set_chip_select_callback(DEVCB_##_devcb); + downcast(*device).set_chip_select_callback(DEVCB_##_devcb); #define MCFG_80186_TMROUT0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_tmrout0_handler(DEVCB_##_devcb); + downcast(*device).set_tmrout0_handler(DEVCB_##_devcb); #define MCFG_80186_TMROUT1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_tmrout1_handler(DEVCB_##_devcb); + downcast(*device).set_tmrout1_handler(DEVCB_##_devcb); #endif // MAME_CPU_I86_I186_H diff --git a/src/devices/cpu/i86/i286.h b/src/devices/cpu/i86/i286.h index dbf5e245673..0012cd63699 100644 --- a/src/devices/cpu/i86/i286.h +++ b/src/devices/cpu/i86/i286.h @@ -165,6 +165,6 @@ private: downcast(*device).set_a20_callback(i80286_cpu_device::a20_cb(&_class::_a20_cb, this)); #define MCFG_80286_SHUTDOWN(_devcb) \ - devcb = &downcast(*device).set_shutdown_callback(DEVCB_##_devcb); + downcast(*device).set_shutdown_callback(DEVCB_##_devcb); #endif // MAME_CPU_I86_I286_H diff --git a/src/devices/cpu/i86/i86.h b/src/devices/cpu/i86/i86.h index 2631003c576..55202931ae1 100644 --- a/src/devices/cpu/i86/i86.h +++ b/src/devices/cpu/i86/i86.h @@ -17,10 +17,10 @@ DECLARE_DEVICE_TYPE(I8088, i8088_cpu_device) #define MCFG_I8086_LOCK_HANDLER(_write) \ - devcb = &downcast(*device).set_lock_handler(DEVCB_##_write); + downcast(*device).set_lock_handler(DEVCB_##_write); #define MCFG_I8086_IF_HANDLER(_write) \ - devcb = &downcast(*device).set_if_handler(DEVCB_##_write); + downcast(*device).set_if_handler(DEVCB_##_write); #define MCFG_I8086_STACK_MAP(map) \ MCFG_DEVICE_ADDRESS_MAP(i8086_cpu_device::AS_STACK, map) @@ -32,10 +32,10 @@ DECLARE_DEVICE_TYPE(I8088, i8088_cpu_device) MCFG_DEVICE_ADDRESS_MAP(i8086_cpu_device::AS_EXTRA, map) #define MCFG_I8086_ESC_OPCODE_HANDLER(_write) \ - devcb = &downcast(*device).set_esc_opcode_handler(DEVCB_##_write); + downcast(*device).set_esc_opcode_handler(DEVCB_##_write); #define MCFG_I8086_ESC_DATA_HANDLER(_write) \ - devcb = &downcast(*device).set_esc_data_handler(DEVCB_##_write); + downcast(*device).set_esc_data_handler(DEVCB_##_write); enum { diff --git a/src/devices/cpu/jaguar/jaguar.h b/src/devices/cpu/jaguar/jaguar.h index 40a4292f65b..79c6b77bc1c 100644 --- a/src/devices/cpu/jaguar/jaguar.h +++ b/src/devices/cpu/jaguar/jaguar.h @@ -65,7 +65,7 @@ enum ***************************************************************************/ #define MCFG_JAGUAR_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int_func(DEVCB_##_devcb); + downcast(*device).set_int_func(DEVCB_##_devcb); /*************************************************************************** diff --git a/src/devices/cpu/lc8670/lc8670.h b/src/devices/cpu/lc8670/lc8670.h index c52a2a7ae72..3856b4a8e4b 100644 --- a/src/devices/cpu/lc8670/lc8670.h +++ b/src/devices/cpu/lc8670/lc8670.h @@ -49,7 +49,7 @@ enum downcast(*device).set_cpu_clock(lc8670_cpu_device::clock_source::RC, _rc_clock); \ downcast(*device).set_cpu_clock(lc8670_cpu_device::clock_source::CF, _cf_clock); #define MCFG_LC8670_BANKSWITCH_CB(_devcb) \ - devcb = &downcast(*device).set_bankswitch_cb(DEVCB_##_devcb); + downcast(*device).set_bankswitch_cb(DEVCB_##_devcb); #define MCFG_LC8670_LCD_UPDATE_CB(_cb) \ downcast(*device).set_lcd_update_cb(_cb); diff --git a/src/devices/cpu/lh5801/lh5801.h b/src/devices/cpu/lh5801/lh5801.h index 1d004105a9c..02a359b6cb1 100644 --- a/src/devices/cpu/lh5801/lh5801.h +++ b/src/devices/cpu/lh5801/lh5801.h @@ -61,7 +61,7 @@ enum #define MCFG_LH5801_IN(_devcb) \ - devcb = &downcast(*device).set_in_func(DEVCB_##_devcb); + downcast(*device).set_in_func(DEVCB_##_devcb); class lh5801_cpu_device : public cpu_device diff --git a/src/devices/cpu/lr35902/lr35902.h b/src/devices/cpu/lr35902/lr35902.h index 5fad91ff8e2..ab70377a21e 100644 --- a/src/devices/cpu/lr35902/lr35902.h +++ b/src/devices/cpu/lr35902/lr35902.h @@ -7,7 +7,7 @@ #define MCFG_LR35902_TIMER_CB(_devcb) \ - devcb = &downcast(*device).set_timer_cb(DEVCB_##_devcb); + downcast(*device).set_timer_cb(DEVCB_##_devcb); // The first release of this CPU has a bug where the programcounter // is not incremented properly after an interrupt after the halt opcode. @@ -19,7 +19,7 @@ // a 16-bit register in the $fe** region. // note: oldval is in hiword, newval is in loword #define MCFG_LR35902_INCDEC16_CB(_devcb) \ - devcb = &downcast(*device).set_incdec16_cb(DEVCB_##_devcb); + downcast(*device).set_incdec16_cb(DEVCB_##_devcb); enum diff --git a/src/devices/cpu/m6502/m5074x.h b/src/devices/cpu/m6502/m5074x.h index 2782d09f2d7..cb1b71a962c 100644 --- a/src/devices/cpu/m6502/m5074x.h +++ b/src/devices/cpu/m6502/m5074x.h @@ -20,28 +20,28 @@ //************************************************************************** #define MCFG_M5074X_PORT0_READ_CALLBACK(_read) \ - devcb = &downcast(*device).set_p0_rd_callback(DEVCB_##_read); + downcast(*device).set_p0_rd_callback(DEVCB_##_read); #define MCFG_M5074X_PORT1_READ_CALLBACK(_read) \ - devcb = &downcast(*device).set_p1_rd_callback(DEVCB_##_read); + downcast(*device).set_p1_rd_callback(DEVCB_##_read); #define MCFG_M5074X_PORT2_READ_CALLBACK(_read) \ - devcb = &downcast(*device).set_p2_rd_callback(DEVCB_##_read); + downcast(*device).set_p2_rd_callback(DEVCB_##_read); #define MCFG_M5074X_PORT3_READ_CALLBACK(_read) \ - devcb = &downcast(*device).set_p3_rd_callback(DEVCB_##_read); + downcast(*device).set_p3_rd_callback(DEVCB_##_read); #define MCFG_M5074X_PORT0_WRITE_CALLBACK(_write) \ - devcb = &downcast(*device).set_p0_wr_callback(DEVCB_##_write); + downcast(*device).set_p0_wr_callback(DEVCB_##_write); #define MCFG_M5074X_PORT1_WRITE_CALLBACK(_write) \ - devcb = &downcast(*device).set_p1_wr_callback(DEVCB_##_write); + downcast(*device).set_p1_wr_callback(DEVCB_##_write); #define MCFG_M5074X_PORT2_WRITE_CALLBACK(_write) \ - devcb = &downcast(*device).set_p2_wr_callback(DEVCB_##_write); + downcast(*device).set_p2_wr_callback(DEVCB_##_write); #define MCFG_M5074X_PORT3_WRITE_CALLBACK(_write) \ - devcb = &downcast(*device).set_p3_wr_callback(DEVCB_##_write); + downcast(*device).set_p3_wr_callback(DEVCB_##_write); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/cpu/m6502/m6502.h b/src/devices/cpu/m6502/m6502.h index c16757581f3..0a230508e43 100644 --- a/src/devices/cpu/m6502/m6502.h +++ b/src/devices/cpu/m6502/m6502.h @@ -15,7 +15,7 @@ downcast(device)->disable_cache(); #define MCFG_M6502_SYNC_CALLBACK(_cb) \ - devcb = &downcast(*device).set_sync_callback(DEVCB_##_cb); + downcast(*device).set_sync_callback(DEVCB_##_cb); class m6502_device : public cpu_device { public: diff --git a/src/devices/cpu/m6800/m6801.h b/src/devices/cpu/m6800/m6801.h index 8c8c98d8104..34a371edcef 100644 --- a/src/devices/cpu/m6800/m6801.h +++ b/src/devices/cpu/m6800/m6801.h @@ -51,9 +51,9 @@ enum #define MCFG_M6801_SC2(_devcb) \ - devcb = &downcast(*device).set_out_sc2_func(DEVCB_##_devcb); + downcast(*device).set_out_sc2_func(DEVCB_##_devcb); #define MCFG_M6801_SER_TX(_devcb) \ - devcb = &downcast(*device).set_out_sertx_func(DEVCB_##_devcb); + downcast(*device).set_out_sertx_func(DEVCB_##_devcb); class m6801_cpu_device : public m6800_cpu_device diff --git a/src/devices/cpu/m6805/m68705.h b/src/devices/cpu/m6805/m68705.h index 04e2e273640..ac9f4942db9 100644 --- a/src/devices/cpu/m6805/m68705.h +++ b/src/devices/cpu/m6805/m68705.h @@ -25,25 +25,25 @@ DECLARE_DEVICE_TYPE(M68705U3, m68705u3_device) // ======================> m68705_device #define MCFG_M68705_PORTA_R_CB(obj) \ - devcb = &downcast(*device).set_port_cb_r<0>(DEVCB_##obj); + downcast(*device).set_port_cb_r<0>(DEVCB_##obj); #define MCFG_M68705_PORTB_R_CB(obj) \ - devcb = &downcast(*device).set_port_cb_r<1>(DEVCB_##obj); + downcast(*device).set_port_cb_r<1>(DEVCB_##obj); #define MCFG_M68705_PORTC_R_CB(obj) \ - devcb = &downcast(*device).set_port_cb_r<2>(DEVCB_##obj); + downcast(*device).set_port_cb_r<2>(DEVCB_##obj); #define MCFG_M68705_PORTD_R_CB(obj) \ - devcb = &downcast(*device).set_port_cb_r<3>(DEVCB_##obj); + downcast(*device).set_port_cb_r<3>(DEVCB_##obj); #define MCFG_M68705_PORTA_W_CB(obj) \ - devcb = &downcast(*device).set_port_cb_w<0>(DEVCB_##obj); + downcast(*device).set_port_cb_w<0>(DEVCB_##obj); #define MCFG_M68705_PORTB_W_CB(obj) \ - devcb = &downcast(*device).set_port_cb_w<1>(DEVCB_##obj); + downcast(*device).set_port_cb_w<1>(DEVCB_##obj); #define MCFG_M68705_PORTC_W_CB(obj) \ - devcb = &downcast(*device).set_port_cb_w<2>(DEVCB_##obj); + downcast(*device).set_port_cb_w<2>(DEVCB_##obj); class m68705_device : public m6805_base_device, public device_nvram_interface diff --git a/src/devices/cpu/m6805/m68hc05.h b/src/devices/cpu/m6805/m68hc05.h index 99dae24ffeb..4aaa856b867 100644 --- a/src/devices/cpu/m6805/m68hc05.h +++ b/src/devices/cpu/m6805/m68hc05.h @@ -26,31 +26,31 @@ DECLARE_DEVICE_TYPE(M68HC705C8A, m68hc705c8a_device) // ======================> m68hc05_device #define MCFG_M68HC05_PORTA_R_CB(obj) \ - devcb = &downcast(*device).set_port_cb_r<0>(DEVCB_##obj); + downcast(*device).set_port_cb_r<0>(DEVCB_##obj); #define MCFG_M68HC05_PORTB_R_CB(obj) \ - devcb = &downcast(*device).set_port_cb_r<1>(DEVCB_##obj); + downcast(*device).set_port_cb_r<1>(DEVCB_##obj); #define MCFG_M68HC05_PORTC_R_CB(obj) \ - devcb = &downcast(*device).set_port_cb_r<2>(DEVCB_##obj); + downcast(*device).set_port_cb_r<2>(DEVCB_##obj); #define MCFG_M68HC05_PORTD_R_CB(obj) \ - devcb = &downcast(*device).set_port_cb_r<3>(DEVCB_##obj); + downcast(*device).set_port_cb_r<3>(DEVCB_##obj); #define MCFG_M68HC05_PORTA_W_CB(obj) \ - devcb = &downcast(*device).set_port_cb_w<0>(DEVCB_##obj); + downcast(*device).set_port_cb_w<0>(DEVCB_##obj); #define MCFG_M68HC05_PORTB_W_CB(obj) \ - devcb = &downcast(*device).set_port_cb_w<1>(DEVCB_##obj); + downcast(*device).set_port_cb_w<1>(DEVCB_##obj); #define MCFG_M68HC05_PORTC_W_CB(obj) \ - devcb = &downcast(*device).set_port_cb_w<2>(DEVCB_##obj); + downcast(*device).set_port_cb_w<2>(DEVCB_##obj); #define MCFG_M68HC05_PORTD_W_CB(obj) \ - devcb = &downcast(*device).set_port_cb_w<3>(DEVCB_##obj); + downcast(*device).set_port_cb_w<3>(DEVCB_##obj); #define MCFG_M68HC05_TCMP_CB(obj) \ - devcb = &downcast(*device).set_tcmp_cb(DEVCB_##obj); + downcast(*device).set_tcmp_cb(DEVCB_##obj); class m68hc05_device : public m6805_base_device diff --git a/src/devices/cpu/m6809/konami.h b/src/devices/cpu/m6809/konami.h index 08d1c75026e..0ca8adda93f 100644 --- a/src/devices/cpu/m6809/konami.h +++ b/src/devices/cpu/m6809/konami.h @@ -21,7 +21,7 @@ //************************************************************************** #define MCFG_KONAMICPU_LINE_CB(_devcb) \ - devcb = &downcast(*device).set_line_callback(DEVCB_##_devcb); + downcast(*device).set_line_callback(DEVCB_##_devcb); // device type definition diff --git a/src/devices/cpu/m6809/m6809.h b/src/devices/cpu/m6809/m6809.h index 6451a3074ca..fdd9120b1ca 100644 --- a/src/devices/cpu/m6809/m6809.h +++ b/src/devices/cpu/m6809/m6809.h @@ -307,7 +307,7 @@ public: // MC6809E has LIC line to indicate opcode/data fetch #define MCFG_MC6809E_LIC_CB(_devcb) \ - devcb = &downcast(*device).set_lic_cb(DEVCB_##_devcb); + downcast(*device).set_lic_cb(DEVCB_##_devcb); class mc6809e_device : public m6809_base_device diff --git a/src/devices/cpu/mb88xx/mb88xx.h b/src/devices/cpu/mb88xx/mb88xx.h index 6afe25aa57d..8c071ad8cec 100644 --- a/src/devices/cpu/mb88xx/mb88xx.h +++ b/src/devices/cpu/mb88xx/mb88xx.h @@ -54,47 +54,47 @@ // K (K3-K0): input-only port #define MCFG_MB88XX_READ_K_CB(_devcb) \ - devcb = &downcast(*device).set_read_k_callback(DEVCB_##_devcb); + downcast(*device).set_read_k_callback(DEVCB_##_devcb); // O (O7-O4 = OH, O3-O0 = OL): output through PLA #define MCFG_MB88XX_WRITE_O_CB(_devcb) \ - devcb = &downcast(*device).set_write_o_callback(DEVCB_##_devcb); + downcast(*device).set_write_o_callback(DEVCB_##_devcb); // P (P3-P0): output-only port #define MCFG_MB88XX_WRITE_P_CB(_devcb) \ - devcb = &downcast(*device).set_write_p_callback(DEVCB_##_devcb); + downcast(*device).set_write_p_callback(DEVCB_##_devcb); // R0 (R3-R0): input/output port #define MCFG_MB88XX_READ_R0_CB(_devcb) \ - devcb = &downcast(*device).set_read_r_callback(0, DEVCB_##_devcb); + downcast(*device).set_read_r_callback(0, DEVCB_##_devcb); #define MCFG_MB88XX_WRITE_R0_CB(_devcb) \ - devcb = &downcast(*device).set_write_r_callback(0, DEVCB_##_devcb); + downcast(*device).set_write_r_callback(0, DEVCB_##_devcb); // R1 (R7-R4): input/output port #define MCFG_MB88XX_READ_R1_CB(_devcb) \ - devcb = &downcast(*device).set_read_r_callback(1, DEVCB_##_devcb); + downcast(*device).set_read_r_callback(1, DEVCB_##_devcb); #define MCFG_MB88XX_WRITE_R1_CB(_devcb) \ - devcb = &downcast(*device).set_write_r_callback(1, DEVCB_##_devcb); + downcast(*device).set_write_r_callback(1, DEVCB_##_devcb); // R2 (R11-R8): input/output port #define MCFG_MB88XX_READ_R2_CB(_devcb) \ - devcb = &downcast(*device).set_read_r_callback(2, DEVCB_##_devcb); + downcast(*device).set_read_r_callback(2, DEVCB_##_devcb); #define MCFG_MB88XX_WRITE_R2_CB(_devcb) \ - devcb = &downcast(*device).set_write_r_callback(2, DEVCB_##_devcb); + downcast(*device).set_write_r_callback(2, DEVCB_##_devcb); // R3 (R15-R12): input/output port #define MCFG_MB88XX_READ_R3_CB(_devcb) \ - devcb = &downcast(*device).set_read_r_callback(3, DEVCB_##_devcb); + downcast(*device).set_read_r_callback(3, DEVCB_##_devcb); #define MCFG_MB88XX_WRITE_R3_CB(_devcb) \ - devcb = &downcast(*device).set_write_r_callback(3, DEVCB_##_devcb); + downcast(*device).set_write_r_callback(3, DEVCB_##_devcb); // SI: serial input #define MCFG_MB88XX_READ_SI_CB(_devcb) \ - devcb = &downcast(*device).set_read_si_callback(DEVCB_##_devcb); + downcast(*device).set_read_si_callback(DEVCB_##_devcb); // SO: serial output #define MCFG_MB88XX_WRITE_SO_CB(_devcb) \ - devcb = &downcast(*device).set_write_so_callback(DEVCB_##_devcb); + downcast(*device).set_write_so_callback(DEVCB_##_devcb); // Configure 32 byte PLA; if nullptr (default) assume direct output #define MCFG_MB88XX_OUTPUT_PLA(_pla) \ diff --git a/src/devices/cpu/mcs40/mcs40.h b/src/devices/cpu/mcs40/mcs40.h index a56a1813f34..73cc2a10fe4 100644 --- a/src/devices/cpu/mcs40/mcs40.h +++ b/src/devices/cpu/mcs40/mcs40.h @@ -36,65 +36,65 @@ enum downcast(*device).set_bus_cycle_cb((MCS40CB_##obj)); #define MCFG_I4004_SYNC_CB(obj) \ - devcb = &downcast(*device).set_sync_cb(DEVCB_##obj); + downcast(*device).set_sync_cb(DEVCB_##obj); #define MCFG_I4004_CM_ROM_CB(obj) \ - devcb = &downcast(*device).set_cm_rom_cb(DEVCB_##obj); + downcast(*device).set_cm_rom_cb(DEVCB_##obj); #define MCFG_I4004_CM_RAM0_CB(obj) \ - devcb = &downcast(*device).set_cm_ram_cb<0>(DEVCB_##obj); + downcast(*device).set_cm_ram_cb<0>(DEVCB_##obj); #define MCFG_I4004_CM_RAM1_CB(obj) \ - devcb = &downcast(*device).set_cm_ram_cb<1>(DEVCB_##obj); + downcast(*device).set_cm_ram_cb<1>(DEVCB_##obj); #define MCFG_I4004_CM_RAM2_CB(obj) \ - devcb = &downcast(*device).set_cm_ram_cb<2>(DEVCB_##obj); + downcast(*device).set_cm_ram_cb<2>(DEVCB_##obj); #define MCFG_I4004_CM_RAM3_CB(obj) \ - devcb = &downcast(*device).set_cm_ram_cb<3>(DEVCB_##obj); + downcast(*device).set_cm_ram_cb<3>(DEVCB_##obj); #define MCFG_I4004_4289_PM_CB(obj) \ - devcb = &downcast(*device).set_4289_pm_cb(DEVCB_##obj); + downcast(*device).set_4289_pm_cb(DEVCB_##obj); #define MCFG_I4004_4289_F_L_CB(obj) \ - devcb = &downcast(*device).set_4289_f_l_cb(DEVCB_##obj); + downcast(*device).set_4289_f_l_cb(DEVCB_##obj); #define MCFG_I4040_BUS_CYCLE_CB(obj) \ downcast(*device).set_bus_cycle_cb((MCS40CB_##obj)); #define MCFG_I4040_SYNC_CB(obj) \ - devcb = &downcast(*device).set_sync_cb(DEVCB_##obj); + downcast(*device).set_sync_cb(DEVCB_##obj); #define MCFG_I4040_CM_ROM0_CB(obj) \ - devcb = &downcast(*device).set_cm_rom_cb<0>(DEVCB_##obj); + downcast(*device).set_cm_rom_cb<0>(DEVCB_##obj); #define MCFG_I4040_CM_ROM1_CB(obj) \ - devcb = &downcast(*device).set_cm_rom_cb<1>(DEVCB_##obj); + downcast(*device).set_cm_rom_cb<1>(DEVCB_##obj); #define MCFG_I4040_CM_RAM0_CB(obj) \ - devcb = &downcast(*device).set_cm_ram_cb<0>(DEVCB_##obj); + downcast(*device).set_cm_ram_cb<0>(DEVCB_##obj); #define MCFG_I4040_CM_RAM1_CB(obj) \ - devcb = &downcast(*device).set_cm_ram_cb<1>(DEVCB_##obj); + downcast(*device).set_cm_ram_cb<1>(DEVCB_##obj); #define MCFG_I4040_CM_RAM2_CB(obj) \ - devcb = &downcast(*device).set_cm_ram_cb<2>(DEVCB_##obj); + downcast(*device).set_cm_ram_cb<2>(DEVCB_##obj); #define MCFG_I4040_CM_RAM3_CB(obj) \ - devcb = &downcast(*device).set_cm_ram_cb<3>(DEVCB_##obj); + downcast(*device).set_cm_ram_cb<3>(DEVCB_##obj); #define MCFG_I4040_CY_CB(obj) \ - devcb = &downcast(*device).set_cy_cb(DEVCB_##obj); + downcast(*device).set_cy_cb(DEVCB_##obj); #define MCFG_I4040_STP_ACK_CB(obj) \ - devcb = &downcast(*device).set_stp_ack_cb(DEVCB_##obj); + downcast(*device).set_stp_ack_cb(DEVCB_##obj); #define MCFG_I4040_4289_PM_CB(obj) \ - devcb = &downcast(*device).set_4289_pm_cb(DEVCB_##obj); + downcast(*device).set_4289_pm_cb(DEVCB_##obj); #define MCFG_I4040_4289_F_L_CB(obj) \ - devcb = &downcast(*device).set_4289_f_l_cb(DEVCB_##obj); + downcast(*device).set_4289_f_l_cb(DEVCB_##obj); diff --git a/src/devices/cpu/mcs48/mcs48.h b/src/devices/cpu/mcs48/mcs48.h index ae26c1a2d62..fe8affa2387 100644 --- a/src/devices/cpu/mcs48/mcs48.h +++ b/src/devices/cpu/mcs48/mcs48.h @@ -69,33 +69,33 @@ enum #define MCFG_MCS48_PORT_P1_IN_CB(_devcb) \ - devcb = &downcast(*device).set_port_in_cb(0, DEVCB_##_devcb); + downcast(*device).set_port_in_cb(0, DEVCB_##_devcb); #define MCFG_MCS48_PORT_P1_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_port_out_cb(0, DEVCB_##_devcb); + downcast(*device).set_port_out_cb(0, DEVCB_##_devcb); #define MCFG_MCS48_PORT_P2_IN_CB(_devcb) \ - devcb = &downcast(*device).set_port_in_cb(1, DEVCB_##_devcb); + downcast(*device).set_port_in_cb(1, DEVCB_##_devcb); #define MCFG_MCS48_PORT_P2_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_port_out_cb(1, DEVCB_##_devcb); + downcast(*device).set_port_out_cb(1, DEVCB_##_devcb); #define MCFG_MCS48_PORT_T0_IN_CB(_devcb) \ - devcb = &downcast(*device).set_test_in_cb(0, DEVCB_##_devcb); + downcast(*device).set_test_in_cb(0, DEVCB_##_devcb); #define MCFG_MCS48_PORT_T0_CLK_DEVICE(_tag) \ downcast(*device).set_t0_clk_cb(clock_update_delegate(FUNC(device_t::set_unscaled_clock), _tag, (device_t *)nullptr)); #define MCFG_MCS48_PORT_T0_CLK_CUSTOM(_class, _func) \ downcast(*device).set_t0_clk_cb(clock_update_delegate(&_class::_func, #_class "::" _func, owner)); #define MCFG_MCS48_PORT_T1_IN_CB(_devcb) \ - devcb = &downcast(*device).set_test_in_cb(1, DEVCB_##_devcb); + downcast(*device).set_test_in_cb(1, DEVCB_##_devcb); #define MCFG_MCS48_PORT_BUS_IN_CB(_devcb) \ - devcb = &downcast(*device).set_bus_in_cb(DEVCB_##_devcb); + downcast(*device).set_bus_in_cb(DEVCB_##_devcb); #define MCFG_MCS48_PORT_BUS_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_bus_out_cb(DEVCB_##_devcb); + downcast(*device).set_bus_out_cb(DEVCB_##_devcb); // PROG line to 8243 expander #define MCFG_MCS48_PORT_PROG_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_prog_out_cb(DEVCB_##_devcb); + downcast(*device).set_prog_out_cb(DEVCB_##_devcb); /*************************************************************************** @@ -149,6 +149,15 @@ public: template devcb_base &set_test_in_cb(int n, Object &&cb) { return m_test_in_cb[n].set_callback(std::forward(cb)); } template void set_t0_clk_cb(Object &&cb) { m_t0_clk_func = std::forward(cb); } template devcb_base &set_prog_out_cb(Object &&cb) { return m_prog_out_cb.set_callback(std::forward(cb)); } + auto p1_in_cb() { return m_port_in_cb[0].bind(); } + auto p2_in_cb() { return m_port_in_cb[1].bind(); } + auto p1_out_cb() { return m_port_out_cb[0].bind(); } + auto p2_out_cb() { return m_port_out_cb[1].bind(); } + auto bus_in_cb() { return m_bus_in_cb.bind(); } + auto bus_out_cb() { return m_bus_out_cb.bind(); } + auto t0_in_cb() { return m_test_in_cb[0].bind(); } + auto t1_in_cb() { return m_test_in_cb[1].bind(); } + auto prog_out_cb() { return m_prog_out_cb.bind(); } DECLARE_READ8_MEMBER(p1_r); DECLARE_READ8_MEMBER(p2_r); diff --git a/src/devices/cpu/mcs51/mcs51.h b/src/devices/cpu/mcs51/mcs51.h index cb3c7f635f1..51ffe2978d5 100644 --- a/src/devices/cpu/mcs51/mcs51.h +++ b/src/devices/cpu/mcs51/mcs51.h @@ -33,30 +33,30 @@ #define MCFG_MCS51_PORT_P0_IN_CB(_devcb) \ - devcb = &downcast(*device).set_port_in_cb(0, DEVCB_##_devcb); + downcast(*device).set_port_in_cb(0, DEVCB_##_devcb); #define MCFG_MCS51_PORT_P0_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_port_out_cb(0, DEVCB_##_devcb); + downcast(*device).set_port_out_cb(0, DEVCB_##_devcb); #define MCFG_MCS51_PORT_P1_IN_CB(_devcb) \ - devcb = &downcast(*device).set_port_in_cb(1, DEVCB_##_devcb); + downcast(*device).set_port_in_cb(1, DEVCB_##_devcb); #define MCFG_MCS51_PORT_P1_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_port_out_cb(1, DEVCB_##_devcb); + downcast(*device).set_port_out_cb(1, DEVCB_##_devcb); #define MCFG_MCS51_PORT_P2_IN_CB(_devcb) \ - devcb = &downcast(*device).set_port_in_cb(2, DEVCB_##_devcb); + downcast(*device).set_port_in_cb(2, DEVCB_##_devcb); #define MCFG_MCS51_PORT_P2_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_port_out_cb(2, DEVCB_##_devcb); + downcast(*device).set_port_out_cb(2, DEVCB_##_devcb); #define MCFG_MCS51_PORT_P3_IN_CB(_devcb) \ - devcb = &downcast(*device).set_port_in_cb(3, DEVCB_##_devcb); + downcast(*device).set_port_in_cb(3, DEVCB_##_devcb); #define MCFG_MCS51_PORT_P3_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_port_out_cb(3, DEVCB_##_devcb); + downcast(*device).set_port_out_cb(3, DEVCB_##_devcb); #define MCFG_MCS51_SERIAL_RX_CB(_devcb) \ - devcb = &downcast(*device).set_serial_rx_cb(DEVCB_##_devcb); + downcast(*device).set_serial_rx_cb(DEVCB_##_devcb); #define MCFG_MCS51_SERIAL_TX_CB(_devcb) \ - devcb = &downcast(*device).set_serial_tx_cb(DEVCB_##_devcb); + downcast(*device).set_serial_tx_cb(DEVCB_##_devcb); enum @@ -100,6 +100,8 @@ public: void set_port_forced_input(uint8_t port, uint8_t forced_input) { m_forced_inputs[port] = forced_input; } template devcb_base &set_serial_rx_cb(Object &&cb) { return m_serial_rx_cb.set_callback(std::forward(cb)); } template devcb_base &set_serial_tx_cb(Object &&cb) { return m_serial_tx_cb.set_callback(std::forward(cb)); } + template auto port_in_cb() { return m_port_in_cb[N].bind(); } + template auto port_out_cb() { return m_port_out_cb[N].bind(); } void program_internal(address_map &map); void data_internal(address_map &map); diff --git a/src/devices/cpu/melps4/melps4.h b/src/devices/cpu/melps4/melps4.h index e7bbe83b238..17b0c9ea623 100644 --- a/src/devices/cpu/melps4/melps4.h +++ b/src/devices/cpu/melps4/melps4.h @@ -16,37 +16,37 @@ // K input or A/D input port, up to 16 pins #define MCFG_MELPS4_READ_K_CB(_devcb) \ - devcb = &downcast(*device).set_read_k_callback(DEVCB_##_devcb); + downcast(*device).set_read_k_callback(DEVCB_##_devcb); // D discrete I/O port, up to 16 pins - offset 0-15 for bit, 16 for all pins clear #define MCFG_MELPS4_READ_D_CB(_devcb) \ - devcb = &downcast(*device).set_read_d_callback(DEVCB_##_devcb); + downcast(*device).set_read_d_callback(DEVCB_##_devcb); #define MCFG_MELPS4_WRITE_D_CB(_devcb) \ - devcb = &downcast(*device).set_write_d_callback(DEVCB_##_devcb); + downcast(*device).set_write_d_callback(DEVCB_##_devcb); // 8-bit S generic I/O port #define MCFG_MELPS4_READ_S_CB(_devcb) \ - devcb = &downcast(*device).set_read_s_callback(DEVCB_##_devcb); + downcast(*device).set_read_s_callback(DEVCB_##_devcb); #define MCFG_MELPS4_WRITE_S_CB(_devcb) \ - devcb = &downcast(*device).set_write_s_callback(DEVCB_##_devcb); + downcast(*device).set_write_s_callback(DEVCB_##_devcb); // 4-bit F generic I/O port #define MCFG_MELPS4_READ_F_CB(_devcb) \ - devcb = &downcast(*device).set_read_f_callback(DEVCB_##_devcb); + downcast(*device).set_read_f_callback(DEVCB_##_devcb); #define MCFG_MELPS4_WRITE_F_CB(_devcb) \ - devcb = &downcast(*device).set_write_f_callback(DEVCB_##_devcb); + downcast(*device).set_write_f_callback(DEVCB_##_devcb); // 4-bit G generic output port #define MCFG_MELPS4_WRITE_G_CB(_devcb) \ - devcb = &downcast(*device).set_write_g_callback(DEVCB_##_devcb); + downcast(*device).set_write_g_callback(DEVCB_##_devcb); // 1-bit U generic output port #define MCFG_MELPS4_WRITE_U_CB(_devcb) \ - devcb = &downcast(*device).set_write_u_callback(DEVCB_##_devcb); + downcast(*device).set_write_u_callback(DEVCB_##_devcb); // T timer I/O pin (use execute_set_input for reads) #define MCFG_MELPS4_WRITE_T_CB(_devcb) \ - devcb = &downcast(*device).set_write_t_callback(DEVCB_##_devcb); + downcast(*device).set_write_t_callback(DEVCB_##_devcb); #define MELPS4_PORTD_CLR 16 diff --git a/src/devices/cpu/mips/r3000.h b/src/devices/cpu/mips/r3000.h index 79529b01195..db8313309e2 100644 --- a/src/devices/cpu/mips/r3000.h +++ b/src/devices/cpu/mips/r3000.h @@ -22,16 +22,16 @@ downcast(*device).set_endianness(_endianness); #define MCFG_R3000_BRCOND0_INPUT(_devcb) \ - devcb = &downcast(*device).set_brcond0_input(DEVCB_##_devcb); + downcast(*device).set_brcond0_input(DEVCB_##_devcb); #define MCFG_R3000_BRCOND1_INPUT(_devcb) \ - devcb = &downcast(*device).set_brcond1_input(DEVCB_##_devcb); + downcast(*device).set_brcond1_input(DEVCB_##_devcb); #define MCFG_R3000_BRCOND2_INPUT(_devcb) \ - devcb = &downcast(*device).set_brcond2_input(DEVCB_##_devcb); + downcast(*device).set_brcond2_input(DEVCB_##_devcb); #define MCFG_R3000_BRCOND3_INPUT(_devcb) \ - devcb = &downcast(*device).set_brcond3_input(DEVCB_##_devcb); + downcast(*device).set_brcond3_input(DEVCB_##_devcb); /*************************************************************************** diff --git a/src/devices/cpu/mn10200/mn10200.h b/src/devices/cpu/mn10200/mn10200.h index 714fd9385e7..8fd12ef5118 100644 --- a/src/devices/cpu/mn10200/mn10200.h +++ b/src/devices/cpu/mn10200/mn10200.h @@ -15,9 +15,9 @@ // port setup #define MCFG_MN10200_READ_PORT_CB(X, _devcb) \ - devcb = &downcast(*device).set_read_port##X##_callback(DEVCB_##_devcb); + downcast(*device).set_read_port##X##_callback(DEVCB_##_devcb); #define MCFG_MN10200_WRITE_PORT_CB(X, _devcb) \ - devcb = &downcast(*device).set_write_port##X##_callback(DEVCB_##_devcb); + downcast(*device).set_write_port##X##_callback(DEVCB_##_devcb); enum { diff --git a/src/devices/cpu/nanoprocessor/nanoprocessor.h b/src/devices/cpu/nanoprocessor/nanoprocessor.h index a4de6b661fb..42f43c60e01 100644 --- a/src/devices/cpu/nanoprocessor/nanoprocessor.h +++ b/src/devices/cpu/nanoprocessor/nanoprocessor.h @@ -62,12 +62,12 @@ constexpr unsigned HP_NANO_IE_DC = 7; // DC line used as interrupt enable/ma // DC0 is in bit 0, DC1 in bit 1 and so on. // Keep in mind that DC7 usually masks the interrupt signal. #define MCFG_HP_NANO_DC_CHANGED(_devcb) \ - devcb = &downcast(*device).set_dc_changed_func(DEVCB_##_devcb); + downcast(*device).set_dc_changed_func(DEVCB_##_devcb); // Callback to read the input state of DC lines // All lines that are not in input are to be reported at "1" #define MCFG_HP_NANO_READ_DC_CB(_devcb) \ - devcb = &downcast(*device).set_read_dc_func(DEVCB_##_devcb); + downcast(*device).set_read_dc_func(DEVCB_##_devcb); class hp_nanoprocessor_device : public cpu_device { diff --git a/src/devices/cpu/nec/v25.h b/src/devices/cpu/nec/v25.h index 9deaa0951ae..af7d5eb4d93 100644 --- a/src/devices/cpu/nec/v25.h +++ b/src/devices/cpu/nec/v25.h @@ -27,26 +27,26 @@ enum #define MCFG_V25_PORT_PT_READ_CB(_devcb) \ - devcb = &downcast(*device).set_pt_in_cb(DEVCB_##_devcb); + downcast(*device).set_pt_in_cb(DEVCB_##_devcb); #define MCFG_V25_PORT_P0_READ_CB(_devcb) \ - devcb = &downcast(*device).set_p0_in_cb(DEVCB_##_devcb); + downcast(*device).set_p0_in_cb(DEVCB_##_devcb); #define MCFG_V25_PORT_P1_READ_CB(_devcb) \ - devcb = &downcast(*device).set_p1_in_cb(DEVCB_##_devcb); + downcast(*device).set_p1_in_cb(DEVCB_##_devcb); #define MCFG_V25_PORT_P2_READ_CB(_devcb) \ - devcb = &downcast(*device).set_p2_in_cb(DEVCB_##_devcb); + downcast(*device).set_p2_in_cb(DEVCB_##_devcb); #define MCFG_V25_PORT_P0_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_p0_out_cb(DEVCB_##_devcb); + downcast(*device).set_p0_out_cb(DEVCB_##_devcb); #define MCFG_V25_PORT_P1_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_p1_out_cb(DEVCB_##_devcb); + downcast(*device).set_p1_out_cb(DEVCB_##_devcb); #define MCFG_V25_PORT_P2_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_p2_out_cb(DEVCB_##_devcb); + downcast(*device).set_p2_out_cb(DEVCB_##_devcb); class v25_common_device : public cpu_device { @@ -58,10 +58,17 @@ public: template devcb_base &set_p0_in_cb(Object &&cb) { return m_p0_in.set_callback(std::forward(cb)); } template devcb_base &set_p1_in_cb(Object &&cb) { return m_p1_in.set_callback(std::forward(cb)); } template devcb_base &set_p2_in_cb(Object &&cb) { return m_p2_in.set_callback(std::forward(cb)); } + auto pt_in_cb() { return m_pt_in.bind(); } + auto p0_in_cb() { return m_p0_in.bind(); } + auto p1_in_cb() { return m_p1_in.bind(); } + auto p2_in_cb() { return m_p2_in.bind(); } template devcb_base &set_p0_out_cb(Object &&cb) { return m_p0_out.set_callback(std::forward(cb)); } template devcb_base &set_p1_out_cb(Object &&cb) { return m_p1_out.set_callback(std::forward(cb)); } template devcb_base &set_p2_out_cb(Object &&cb) { return m_p2_out.set_callback(std::forward(cb)); } + auto p0_out_cb() { return m_p0_out.bind(); } + auto p1_out_cb() { return m_p1_out.bind(); } + auto p2_out_cb() { return m_p2_out.bind(); } TIMER_CALLBACK_MEMBER(v25_timer_callback); diff --git a/src/devices/cpu/nec/v53.cpp b/src/devices/cpu/nec/v53.cpp index fc30638836b..d71e9d89d62 100644 --- a/src/devices/cpu/nec/v53.cpp +++ b/src/devices/cpu/nec/v53.cpp @@ -496,7 +496,6 @@ MACHINE_CONFIG_START(v53_base_device::device_add_mconfig) MCFG_PIT8253_OUT1_HANDLER(WRITELINE( *this, v53_base_device, tcu_out1_trampoline_cb )) MCFG_PIT8253_OUT2_HANDLER(WRITELINE( *this, v53_base_device, tcu_out2_trampoline_cb )) - MCFG_DEVICE_ADD("upd71071dma", V53_DMAU, 4000000) MCFG_AM9517A_OUT_HREQ_CB(WRITELINE(*this, v53_base_device, hreq_trampoline_cb)) MCFG_AM9517A_OUT_EOP_CB(WRITELINE(*this, v53_base_device, eop_trampoline_cb)) @@ -515,13 +514,10 @@ MACHINE_CONFIG_START(v53_base_device::device_add_mconfig) MCFG_AM9517A_OUT_DACK_2_CB(WRITELINE(*this, v53_base_device, dma_dack2_trampoline_w)) MCFG_AM9517A_OUT_DACK_3_CB(WRITELINE(*this, v53_base_device, dma_dack3_trampoline_w)) - - MCFG_DEVICE_ADD("upd71059pic", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, v53_base_device, internal_irq_w)) - MCFG_PIC8259_IN_SP_CB(VCC) - MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, v53_base_device, get_pic_ack)) - - + pic8259_device &upd71059pic(PIC8259(config, "upd71059pic", 0)); + upd71059pic.out_int_callback().set(FUNC(v53_base_device::internal_irq_w)); + upd71059pic.in_sp_callback().set_constant(1); + upd71059pic.read_slave_ack_callback().set(FUNC(v53_base_device::get_pic_ack)); MCFG_DEVICE_ADD("v53scu", V53_SCU, 0) MCFG_I8251_TXD_HANDLER(WRITELINE(*this, v53_base_device, scu_txd_trampoline_cb)) diff --git a/src/devices/cpu/nec/v53.h b/src/devices/cpu/nec/v53.h index ef3450bb74e..536b8f8f458 100644 --- a/src/devices/cpu/nec/v53.h +++ b/src/devices/cpu/nec/v53.h @@ -16,25 +16,25 @@ // SCU #define MCFG_V53_SCU_TXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txd_handler(DEVCB_##_devcb); + downcast(*device).set_txd_handler(DEVCB_##_devcb); #define MCFG_V53_SCU_DTR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dtr_handler(DEVCB_##_devcb); + downcast(*device).set_dtr_handler(DEVCB_##_devcb); #define MCFG_V53_SCU_RTS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rts_handler(DEVCB_##_devcb); + downcast(*device).set_rts_handler(DEVCB_##_devcb); #define MCFG_V53_SCU_RXRDY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rxrdy_handler(DEVCB_##_devcb); + downcast(*device).set_rxrdy_handler(DEVCB_##_devcb); #define MCFG_V53_SCU_TXRDY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txrdy_handler(DEVCB_##_devcb); + downcast(*device).set_txrdy_handler(DEVCB_##_devcb); #define MCFG_V53_SCU_TXEMPTY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txempty_handler(DEVCB_##_devcb); + downcast(*device).set_txempty_handler(DEVCB_##_devcb); #define MCFG_V53_SCU_SYNDET_HANDLER(_devcb) \ - devcb = &downcast(*device).set_syndet_handler(DEVCB_##_devcb); + downcast(*device).set_syndet_handler(DEVCB_##_devcb); // TCU #define MCFG_V53_TCU_CLK0(_clk) \ @@ -47,63 +47,63 @@ downcast(*device).set_clk2(_clk); #define MCFG_V53_TCU_OUT0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out0_handler(DEVCB_##_devcb); + downcast(*device).set_out0_handler(DEVCB_##_devcb); #define MCFG_V53_TCU_OUT1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out1_handler(DEVCB_##_devcb); + downcast(*device).set_out1_handler(DEVCB_##_devcb); #define MCFG_V53_TCU_OUT2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out2_handler(DEVCB_##_devcb); + downcast(*device).set_out2_handler(DEVCB_##_devcb); // DMAU #define MCFG_V53_DMAU_OUT_HREQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_hreq_callback(DEVCB_##_devcb); + downcast(*device).set_out_hreq_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_EOP_CB(_devcb) \ - devcb = &downcast(*device).set_out_eop_callback(DEVCB_##_devcb); + downcast(*device).set_out_eop_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_IN_MEMR_CB(_devcb) \ - devcb = &downcast(*device).set_in_memr_callback(DEVCB_##_devcb); + downcast(*device).set_in_memr_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_MEMW_CB(_devcb) \ - devcb = &downcast(*device).set_out_memw_callback(DEVCB_##_devcb); + downcast(*device).set_out_memw_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_IN_IOR_0_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_0_callback(DEVCB_##_devcb); + downcast(*device).set_in_ior_0_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_IN_IOR_1_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_1_callback(DEVCB_##_devcb); + downcast(*device).set_in_ior_1_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_IN_IOR_2_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_2_callback(DEVCB_##_devcb); + downcast(*device).set_in_ior_2_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_IN_IOR_3_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_3_callback(DEVCB_##_devcb); + downcast(*device).set_in_ior_3_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_IOW_0_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_0_callback(DEVCB_##_devcb); + downcast(*device).set_out_iow_0_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_IOW_1_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_1_callback(DEVCB_##_devcb); + downcast(*device).set_out_iow_1_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_IOW_2_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_2_callback(DEVCB_##_devcb); + downcast(*device).set_out_iow_2_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_IOW_3_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_3_callback(DEVCB_##_devcb); + downcast(*device).set_out_iow_3_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_DACK_0_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_0_callback(DEVCB_##_devcb); + downcast(*device).set_out_dack_0_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_DACK_1_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_1_callback(DEVCB_##_devcb); + downcast(*device).set_out_dack_1_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_DACK_2_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_2_callback(DEVCB_##_devcb); + downcast(*device).set_out_dack_2_callback(DEVCB_##_devcb); #define MCFG_V53_DMAU_OUT_DACK_3_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_3_callback(DEVCB_##_devcb); + downcast(*device).set_out_dack_3_callback(DEVCB_##_devcb); diff --git a/src/devices/cpu/patinhofeio/patinhofeio_cpu.h b/src/devices/cpu/patinhofeio/patinhofeio_cpu.h index ecff53f7249..c1f0dafab7a 100644 --- a/src/devices/cpu/patinhofeio/patinhofeio_cpu.h +++ b/src/devices/cpu/patinhofeio/patinhofeio_cpu.h @@ -6,13 +6,13 @@ #pragma once #define MCFG_PATINHO_RC_READ_CB(_devcb) \ - devcb = &downcast(*device).set_rc_read_callback(DEVCB_##_devcb); + downcast(*device).set_rc_read_callback(DEVCB_##_devcb); #define MCFG_PATINHO_BUTTONS_READ_CB(_devcb) \ - devcb = &downcast(*device).set_buttons_read_callback(DEVCB_##_devcb); + downcast(*device).set_buttons_read_callback(DEVCB_##_devcb); #define MCFG_PATINHO_IODEV_READ_CB(devnumber, _devcb) \ - devcb = &downcast(*device).set_iodev_read_callback(devnumber, DEVCB_##_devcb); + downcast(*device).set_iodev_read_callback(devnumber, DEVCB_##_devcb); #define MCFG_PATINHO_IODEV_WRITE_CB(devnumber, _devcb) \ - devcb = &downcast(*device).set_iodev_write_callback(devnumber, DEVCB_##_devcb); + downcast(*device).set_iodev_write_callback(devnumber, DEVCB_##_devcb); /* register IDs */ enum diff --git a/src/devices/cpu/pic16c5x/pic16c5x.h b/src/devices/cpu/pic16c5x/pic16c5x.h index f83e2a420b4..e337ca196d5 100644 --- a/src/devices/cpu/pic16c5x/pic16c5x.h +++ b/src/devices/cpu/pic16c5x/pic16c5x.h @@ -37,27 +37,27 @@ enum // port a, 4 or 8 bits, 2-way #define MCFG_PIC16C5x_READ_A_CB(_devcb) \ - devcb = &downcast(*device).set_read_a_callback(DEVCB_##_devcb); + downcast(*device).set_read_a_callback(DEVCB_##_devcb); #define MCFG_PIC16C5x_WRITE_A_CB(_devcb) \ - devcb = &downcast(*device).set_write_a_callback(DEVCB_##_devcb); + downcast(*device).set_write_a_callback(DEVCB_##_devcb); // port b, 8 bits, 2-way #define MCFG_PIC16C5x_READ_B_CB(_devcb) \ - devcb = &downcast(*device).set_read_b_callback(DEVCB_##_devcb); + downcast(*device).set_read_b_callback(DEVCB_##_devcb); #define MCFG_PIC16C5x_WRITE_B_CB(_devcb) \ - devcb = &downcast(*device).set_write_b_callback(DEVCB_##_devcb); + downcast(*device).set_write_b_callback(DEVCB_##_devcb); // port c, 8 bits, 2-way #define MCFG_PIC16C5x_READ_C_CB(_devcb) \ - devcb = &downcast(*device).set_read_c_callback(DEVCB_##_devcb); + downcast(*device).set_read_c_callback(DEVCB_##_devcb); #define MCFG_PIC16C5x_WRITE_C_CB(_devcb) \ - devcb = &downcast(*device).set_write_c_callback(DEVCB_##_devcb); + downcast(*device).set_write_c_callback(DEVCB_##_devcb); // port d, 8 bits, 2-way #define MCFG_PIC16C5x_READ_D_CB(_devcb) \ - devcb = &downcast(*device).set_read_d_callback(DEVCB_##_devcb); + downcast(*device).set_read_d_callback(DEVCB_##_devcb); #define MCFG_PIC16C5x_WRITE_D_CB(_devcb) \ - devcb = &downcast(*device).set_write_d_callback(DEVCB_##_devcb); + downcast(*device).set_write_d_callback(DEVCB_##_devcb); // CONFIG register #define MCFG_PIC16C5x_SET_CONFIG(_data) \ diff --git a/src/devices/cpu/pps4/pps4.h b/src/devices/cpu/pps4/pps4.h index d74621890b3..aceb23e2294 100644 --- a/src/devices/cpu/pps4/pps4.h +++ b/src/devices/cpu/pps4/pps4.h @@ -29,13 +29,13 @@ enum //************************************************************************** #define MCFG_PPS4_DISCRETE_INPUT_A_CB(_devcb) \ - devcb = &downcast(*device).set_dia_cb(DEVCB_##_devcb); + downcast(*device).set_dia_cb(DEVCB_##_devcb); #define MCFG_PPS4_DISCRETE_INPUT_B_CB(_devcb) \ - devcb = &downcast(*device).set_dib_cb(DEVCB_##_devcb); + downcast(*device).set_dib_cb(DEVCB_##_devcb); #define MCFG_PPS4_DISCRETE_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_do_cb(DEVCB_##_devcb); + downcast(*device).set_do_cb(DEVCB_##_devcb); //************************************************************************** // DEVICE TYPE DEFINITIONS diff --git a/src/devices/cpu/psx/dma.h b/src/devices/cpu/psx/dma.h index 7be62c0eb0d..97785439bb3 100644 --- a/src/devices/cpu/psx/dma.h +++ b/src/devices/cpu/psx/dma.h @@ -16,7 +16,7 @@ DECLARE_DEVICE_TYPE(PSX_DMA, psxdma_device) #define MCFG_PSX_DMA_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class psxdma_device : public device_t { diff --git a/src/devices/cpu/psx/irq.h b/src/devices/cpu/psx/irq.h index 93e0d6ce737..051c68a089d 100644 --- a/src/devices/cpu/psx/irq.h +++ b/src/devices/cpu/psx/irq.h @@ -16,7 +16,7 @@ DECLARE_DEVICE_TYPE(PSX_IRQ, psxirq_device) #define MCFG_PSX_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class psxirq_device : public device_t { diff --git a/src/devices/cpu/psx/psx.h b/src/devices/cpu/psx/psx.h index ca417ee9607..646c5e8a4b1 100644 --- a/src/devices/cpu/psx/psx.h +++ b/src/devices/cpu/psx/psx.h @@ -121,19 +121,19 @@ enum psxcpu_device::getcpu( *this, cputag )->subdevice("dma")->install_write_handler( channel, handler ); #define MCFG_PSX_GPU_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_gpu_read_handler(DEVCB_##_devcb); + downcast(*device).set_gpu_read_handler(DEVCB_##_devcb); #define MCFG_PSX_GPU_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_gpu_write_handler(DEVCB_##_devcb); + downcast(*device).set_gpu_write_handler(DEVCB_##_devcb); #define MCFG_PSX_SPU_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_spu_read_handler(DEVCB_##_devcb); + downcast(*device).set_spu_read_handler(DEVCB_##_devcb); #define MCFG_PSX_SPU_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_spu_write_handler(DEVCB_##_devcb); + downcast(*device).set_spu_write_handler(DEVCB_##_devcb); #define MCFG_PSX_CD_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cd_read_handler(DEVCB_##_devcb); + downcast(*device).set_cd_read_handler(DEVCB_##_devcb); #define MCFG_PSX_CD_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cd_write_handler(DEVCB_##_devcb); + downcast(*device).set_cd_write_handler(DEVCB_##_devcb); #define MCFG_PSX_DISABLE_ROM_BERR \ downcast(device)->set_disable_rom_berr(true); diff --git a/src/devices/cpu/psx/rcnt.h b/src/devices/cpu/psx/rcnt.h index 2047d229c3e..9332a5c174d 100644 --- a/src/devices/cpu/psx/rcnt.h +++ b/src/devices/cpu/psx/rcnt.h @@ -16,11 +16,11 @@ DECLARE_DEVICE_TYPE(PSX_RCNT, psxrcnt_device) #define MCFG_PSX_RCNT_IRQ0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq0_handler(DEVCB_##_devcb); + downcast(*device).set_irq0_handler(DEVCB_##_devcb); #define MCFG_PSX_RCNT_IRQ1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq1_handler(DEVCB_##_devcb); + downcast(*device).set_irq1_handler(DEVCB_##_devcb); #define MCFG_PSX_RCNT_IRQ2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq2_handler(DEVCB_##_devcb); + downcast(*device).set_irq2_handler(DEVCB_##_devcb); #define PSX_RC_STOP ( 0x01 ) #define PSX_RC_RESET ( 0x04 ) /* guess */ #define PSX_RC_COUNTTARGET ( 0x08 ) diff --git a/src/devices/cpu/psx/sio.h b/src/devices/cpu/psx/sio.h index fe2cb6af269..0548480abeb 100644 --- a/src/devices/cpu/psx/sio.h +++ b/src/devices/cpu/psx/sio.h @@ -17,19 +17,19 @@ DECLARE_DEVICE_TYPE(PSX_SIO0, psxsio0_device) DECLARE_DEVICE_TYPE(PSX_SIO1, psxsio1_device) #define MCFG_PSX_SIO_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_PSX_SIO_SCK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sck_handler(DEVCB_##_devcb); + downcast(*device).set_sck_handler(DEVCB_##_devcb); #define MCFG_PSX_SIO_TXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txd_handler(DEVCB_##_devcb); + downcast(*device).set_txd_handler(DEVCB_##_devcb); #define MCFG_PSX_SIO_DTR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dtr_handler(DEVCB_##_devcb); + downcast(*device).set_dtr_handler(DEVCB_##_devcb); #define MCFG_PSX_SIO_RTS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rts_handler(DEVCB_##_devcb); + downcast(*device).set_rts_handler(DEVCB_##_devcb); #define SIO_BUF_SIZE ( 8 ) diff --git a/src/devices/cpu/rsp/rsp.h b/src/devices/cpu/rsp/rsp.h index 4c4c315e111..0e07b732ad2 100644 --- a/src/devices/cpu/rsp/rsp.h +++ b/src/devices/cpu/rsp/rsp.h @@ -84,19 +84,19 @@ enum #define RSPDRC_STRICT_VERIFY 0x0001 /* verify all instructions */ #define MCFG_RSP_DP_REG_R_CB(_devcb) \ - devcb = &downcast(*device).set_dp_reg_r_callback(DEVCB_##_devcb); + downcast(*device).set_dp_reg_r_callback(DEVCB_##_devcb); #define MCFG_RSP_DP_REG_W_CB(_devcb) \ - devcb = &downcast(*device).set_dp_reg_w_callback(DEVCB_##_devcb); + downcast(*device).set_dp_reg_w_callback(DEVCB_##_devcb); #define MCFG_RSP_SP_REG_R_CB(_devcb) \ - devcb = &downcast(*device).set_sp_reg_r_callback(DEVCB_##_devcb); + downcast(*device).set_sp_reg_r_callback(DEVCB_##_devcb); #define MCFG_RSP_SP_REG_W_CB(_devcb) \ - devcb = &downcast(*device).set_sp_reg_w_callback(DEVCB_##_devcb); + downcast(*device).set_sp_reg_w_callback(DEVCB_##_devcb); #define MCFG_RSP_SP_SET_STATUS_CB(_devcb) \ - devcb = &downcast(*device).set_status_callback(DEVCB_##_devcb); + downcast(*device).set_status_callback(DEVCB_##_devcb); class rsp_device : public cpu_device diff --git a/src/devices/cpu/s2650/s2650.h b/src/devices/cpu/s2650/s2650.h index 666c79cad5b..9bf1f03cf2f 100644 --- a/src/devices/cpu/s2650/s2650.h +++ b/src/devices/cpu/s2650/s2650.h @@ -28,13 +28,13 @@ DECLARE_DEVICE_TYPE(S2650, s2650_device) #define MCFG_S2650_SENSE_INPUT(_devcb) \ - devcb = &downcast(*device).set_sense_handler(DEVCB_##_devcb); + downcast(*device).set_sense_handler(DEVCB_##_devcb); #define MCFG_S2650_FLAG_OUTPUT(_devcb) \ - devcb = &downcast(*device).set_flag_handler(DEVCB_##_devcb); + downcast(*device).set_flag_handler(DEVCB_##_devcb); #define MCFG_S2650_INTACK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_intack_handler(DEVCB_##_devcb); + downcast(*device).set_intack_handler(DEVCB_##_devcb); class s2650_device : public cpu_device, public s2650_disassembler::config { @@ -46,6 +46,9 @@ public: template devcb_base &set_sense_handler(Object &&cb) { return m_sense_handler.set_callback(std::forward(cb)); } template devcb_base &set_flag_handler(Object &&cb) { return m_flag_handler.set_callback(std::forward(cb)); } template devcb_base &set_intack_handler(Object &&cb) { return m_intack_handler.set_callback(std::forward(cb)); } + auto sense_handler() { return m_sense_handler.bind(); } + auto flag_handler() { return m_flag_handler.bind(); } + auto intack_handler() { return m_intack_handler.bind(); } protected: // device-level overrides diff --git a/src/devices/cpu/sc61860/sc61860.h b/src/devices/cpu/sc61860/sc61860.h index 18ea784db2d..cd38606e486 100644 --- a/src/devices/cpu/sc61860/sc61860.h +++ b/src/devices/cpu/sc61860/sc61860.h @@ -45,28 +45,28 @@ enum #define MCFG_SC61860_READ_RESET_HANDLER(_devcb) \ - devcb = &downcast(*device).set_reset_cb(DEVCB_##_devcb); + downcast(*device).set_reset_cb(DEVCB_##_devcb); #define MCFG_SC61860_READ_BRK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_brk_cb(DEVCB_##_devcb); + downcast(*device).set_brk_cb(DEVCB_##_devcb); #define MCFG_SC61860_READ_X_HANDLER(_devcb) \ - devcb = &downcast(*device).set_x_cb(DEVCB_##_devcb); + downcast(*device).set_x_cb(DEVCB_##_devcb); #define MCFG_SC61860_READ_A_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ina_cb(DEVCB_##_devcb); + downcast(*device).set_ina_cb(DEVCB_##_devcb); #define MCFG_SC61860_WRITE_A_HANDLER(_devcb) \ - devcb = &downcast(*device).set_outa_cb(DEVCB_##_devcb); + downcast(*device).set_outa_cb(DEVCB_##_devcb); #define MCFG_SC61860_READ_B_HANDLER(_devcb) \ - devcb = &downcast(*device).set_inb_cb(DEVCB_##_devcb); + downcast(*device).set_inb_cb(DEVCB_##_devcb); #define MCFG_SC61860_WRITE_B_HANDLER(_devcb) \ - devcb = &downcast(*device).set_outb_cb(DEVCB_##_devcb); + downcast(*device).set_outb_cb(DEVCB_##_devcb); #define MCFG_SC61860_WRITE_C_HANDLER(_devcb) \ - devcb = &downcast(*device).set_outc_cb(DEVCB_##_devcb); + downcast(*device).set_outc_cb(DEVCB_##_devcb); class sc61860_device : public cpu_device { diff --git a/src/devices/cpu/scudsp/scudsp.h b/src/devices/cpu/scudsp/scudsp.h index 6fb8133e51e..d7b7440acaf 100644 --- a/src/devices/cpu/scudsp/scudsp.h +++ b/src/devices/cpu/scudsp/scudsp.h @@ -37,13 +37,13 @@ enum #define MCFG_SCUDSP_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_SCUDSP_IN_DMA_CB(_devcb) \ - devcb = &downcast(*device).set_in_dma_callback(DEVCB_##_devcb); + downcast(*device).set_in_dma_callback(DEVCB_##_devcb); #define MCFG_SCUDSP_OUT_DMA_CB(_devcb) \ - devcb = &downcast(*device).set_out_dma_callback(DEVCB_##_devcb); + downcast(*device).set_out_dma_callback(DEVCB_##_devcb); #define SCUDSP_RESET INPUT_LINE_RESET /* Non-Maskable */ diff --git a/src/devices/cpu/sm510/sm500.h b/src/devices/cpu/sm510/sm500.h index 813d9cf70e5..c0c9d112504 100644 --- a/src/devices/cpu/sm510/sm500.h +++ b/src/devices/cpu/sm510/sm500.h @@ -18,7 +18,7 @@ // LCD segment outputs: H1/2 as a0, O group as a1-a4, O data as d0-d3 #define MCFG_SM500_WRITE_O_CB(_devcb) \ - devcb = &downcast(*device).set_write_o_callback(DEVCB_##_devcb); + downcast(*device).set_write_o_callback(DEVCB_##_devcb); // see sm510.h for ACL, K, R, alpha, beta diff --git a/src/devices/cpu/sm510/sm510.h b/src/devices/cpu/sm510/sm510.h index 69521f8de4d..986381dd63c 100644 --- a/src/devices/cpu/sm510/sm510.h +++ b/src/devices/cpu/sm510/sm510.h @@ -15,26 +15,26 @@ // 4-bit K input port (pull-down) #define MCFG_SM510_READ_K_CB(_devcb) \ - devcb = &downcast(*device).set_read_k_callback(DEVCB_##_devcb); + downcast(*device).set_read_k_callback(DEVCB_##_devcb); // when in halt state, any K input going High can wake up the CPU, // driver is required to use set_input_line(SM510_INPUT_LINE_K, state) #define SM510_INPUT_LINE_K 0 // 1-bit BA(aka alpha) input pin (pull-up) #define MCFG_SM510_READ_BA_CB(_devcb) \ - devcb = &downcast(*device).set_read_ba_callback(DEVCB_##_devcb); + downcast(*device).set_read_ba_callback(DEVCB_##_devcb); // 1-bit B(beta) input pin (pull-up) #define MCFG_SM510_READ_B_CB(_devcb) \ - devcb = &downcast(*device).set_read_b_callback(DEVCB_##_devcb); + downcast(*device).set_read_b_callback(DEVCB_##_devcb); // 8-bit S strobe output port #define MCFG_SM510_WRITE_S_CB(_devcb) \ - devcb = &downcast(*device).set_write_s_callback(DEVCB_##_devcb); + downcast(*device).set_write_s_callback(DEVCB_##_devcb); // 1/2/4-bit R (buzzer/melody) output port #define MCFG_SM510_WRITE_R_CB(_devcb) \ - devcb = &downcast(*device).set_write_r_callback(DEVCB_##_devcb); + downcast(*device).set_write_r_callback(DEVCB_##_devcb); // For SM510, SM500, SM5A, R port output is selected with a mask option, // either from the divider or direct contol. Documented options are: // SM510/SM5A: control, 2(4096Hz meant for alarm sound) @@ -45,15 +45,15 @@ // LCD segment outputs: H1-4 as offset(low), a/b/c 1-16 as data d0-d15 #define MCFG_SM510_WRITE_SEGA_CB(_devcb) \ - devcb = &downcast(*device).set_write_sega_callback(DEVCB_##_devcb); + downcast(*device).set_write_sega_callback(DEVCB_##_devcb); #define MCFG_SM510_WRITE_SEGB_CB(_devcb) \ - devcb = &downcast(*device).set_write_segb_callback(DEVCB_##_devcb); + downcast(*device).set_write_segb_callback(DEVCB_##_devcb); #define MCFG_SM510_WRITE_SEGC_CB(_devcb) \ - devcb = &downcast(*device).set_write_segc_callback(DEVCB_##_devcb); + downcast(*device).set_write_segc_callback(DEVCB_##_devcb); // LCD bs output: same as above, but only up to 2 bits used #define MCFG_SM510_WRITE_SEGBS_CB(_devcb) \ - devcb = &downcast(*device).set_write_segbs_callback(DEVCB_##_devcb); + downcast(*device).set_write_segbs_callback(DEVCB_##_devcb); // LCD output lazy combination #define MCFG_SM510_WRITE_SEGS_CB(_devcb) \ diff --git a/src/devices/cpu/sm8500/sm8500.h b/src/devices/cpu/sm8500/sm8500.h index ddb4916fc1f..247a283685f 100644 --- a/src/devices/cpu/sm8500/sm8500.h +++ b/src/devices/cpu/sm8500/sm8500.h @@ -6,10 +6,10 @@ #pragma once #define MCFG_SM8500_DMA_CB(_devcb) \ - devcb = &downcast(*device).set_dma_cb(DEVCB_##_devcb); + downcast(*device).set_dma_cb(DEVCB_##_devcb); #define MCFG_SM8500_TIMER_CB(_devcb) \ - devcb = &downcast(*device).set_timer_cb(DEVCB_##_devcb); + downcast(*device).set_timer_cb(DEVCB_##_devcb); enum { diff --git a/src/devices/cpu/superfx/superfx.h b/src/devices/cpu/superfx/superfx.h index 14cc48d401f..90e98790d4f 100644 --- a/src/devices/cpu/superfx/superfx.h +++ b/src/devices/cpu/superfx/superfx.h @@ -90,7 +90,7 @@ enum #define MCFG_SUPERFX_OUT_IRQ(_devcb) \ - devcb = &downcast(*device).set_out_irq_func(DEVCB_##_devcb); + downcast(*device).set_out_irq_func(DEVCB_##_devcb); class superfx_device : public cpu_device, public superfx_disassembler::config diff --git a/src/devices/cpu/t11/t11.h b/src/devices/cpu/t11/t11.h index a6e12b51518..5c4d964ff46 100644 --- a/src/devices/cpu/t11/t11.h +++ b/src/devices/cpu/t11/t11.h @@ -32,7 +32,7 @@ enum downcast(*device).set_initial_mode(_mode); #define MCFG_T11_RESET(_devcb) \ - devcb = &downcast(*device).set_out_reset_func(DEVCB_##_devcb); + downcast(*device).set_out_reset_func(DEVCB_##_devcb); class t11_device : public cpu_device { diff --git a/src/devices/cpu/tlcs90/tlcs90.h b/src/devices/cpu/tlcs90/tlcs90.h index 9fb16ad5bd4..73a168efb84 100644 --- a/src/devices/cpu/tlcs90/tlcs90.h +++ b/src/devices/cpu/tlcs90/tlcs90.h @@ -8,59 +8,59 @@ // I/O callbacks #define MCFG_TLCS90_PORT_P0_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(0, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(0, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P1_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(1, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(1, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P2_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(2, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(2, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P3_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(3, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(3, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P4_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(4, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(4, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P5_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(5, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(5, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P6_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(6, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(6, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P7_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(7, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(7, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P8_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(8, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(8, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P0_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(0, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(0, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P1_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(1, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(1, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P2_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(2, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(2, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P3_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(3, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(3, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P4_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(4, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(4, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P5_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(5, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(5, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P6_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(6, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(6, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P7_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(7, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(7, DEVCB_##_devcb); #define MCFG_TLCS90_PORT_P8_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(8, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(8, DEVCB_##_devcb); enum tlcs90_e_irq { INTSWI = 0, INTNMI, INTWD, INT0, INTT0, INTT1, INTT2, INTT3, INTT4, INT1, INTT5, INT2, INTRX, INTTX, INTMAX }; diff --git a/src/devices/cpu/tlcs900/tlcs900.h b/src/devices/cpu/tlcs900/tlcs900.h index 0da3f597a61..2fd1d37fbaa 100644 --- a/src/devices/cpu/tlcs900/tlcs900.h +++ b/src/devices/cpu/tlcs900/tlcs900.h @@ -613,37 +613,37 @@ protected: }; #define MCFG_TMP95C061_PORT1_READ( _port_read ) \ - devcb = &downcast(*device).set_port1_read(DEVCB_##_port_read); + downcast(*device).set_port1_read(DEVCB_##_port_read); #define MCFG_TMP95C061_PORT1_WRITE( _port_write ) \ - devcb = &downcast(*device).set_port1_write(DEVCB_##_port_write); + downcast(*device).set_port1_write(DEVCB_##_port_write); #define MCFG_TMP95C061_PORT2_WRITE( _port_write ) \ - devcb = &downcast(*device).set_port2_write(DEVCB_##_port_write); + downcast(*device).set_port2_write(DEVCB_##_port_write); #define MCFG_TMP95C061_PORT5_READ( _port_read ) \ - devcb = &downcast(*device).set_port5_read(DEVCB_##_port_read); + downcast(*device).set_port5_read(DEVCB_##_port_read); #define MCFG_TMP95C061_PORT5_WRITE( _port_write ) \ - devcb = &downcast(*device).set_port5_write(DEVCB_##_port_write); + downcast(*device).set_port5_write(DEVCB_##_port_write); #define MCFG_TMP95C061_PORT6_READ( _port_read ) \ - devcb = &downcast(*device).set_port6_read(DEVCB_##_port_read); + downcast(*device).set_port6_read(DEVCB_##_port_read); #define MCFG_TMP95C061_PORT6_WRITE( _port_write ) \ - devcb = &downcast(*device).set_port6_write(DEVCB_##_port_write); + downcast(*device).set_port6_write(DEVCB_##_port_write); #define MCFG_TMP95C061_PORT7_READ( _port_read ) \ - devcb = &downcast(*device).set_port7_read(DEVCB_##_port_read); + downcast(*device).set_port7_read(DEVCB_##_port_read); #define MCFG_TMP95C061_PORT7_WRITE( _port_write ) \ - devcb = &downcast(*device).set_port7_write(DEVCB_##_port_write); + downcast(*device).set_port7_write(DEVCB_##_port_write); #define MCFG_TMP95C061_PORT8_READ( _port_read ) \ - devcb = &downcast(*device).set_port8_read(DEVCB_##_port_read); + downcast(*device).set_port8_read(DEVCB_##_port_read); #define MCFG_TMP95C061_PORT8_WRITE( _port_write ) \ - devcb = &downcast(*device).set_port8_write(DEVCB_##_port_write); + downcast(*device).set_port8_write(DEVCB_##_port_write); #define MCFG_TMP95C061_PORT9_READ( _port_read ) \ - devcb = &downcast(*device).set_port9_read(DEVCB_##_port_read); + downcast(*device).set_port9_read(DEVCB_##_port_read); #define MCFG_TMP95C061_PORTA_READ( _port_read ) \ - devcb = &downcast(*device).set_porta_read(DEVCB_##_port_read); + downcast(*device).set_porta_read(DEVCB_##_port_read); #define MCFG_TMP95C061_PORTA_WRITE( _port_write ) \ - devcb = &downcast(*device).set_porta_write(DEVCB_##_port_write); + downcast(*device).set_porta_write(DEVCB_##_port_write); #define MCFG_TMP95C061_PORTB_READ( _port_read ) \ - devcb = &downcast(*device).set_portb_read(DEVCB_##_port_read); + downcast(*device).set_portb_read(DEVCB_##_port_read); #define MCFG_TMP95C061_PORTB_WRITE( _port_write ) \ - devcb = &downcast(*device).set_portb_write(DEVCB_##_port_write); + downcast(*device).set_portb_write(DEVCB_##_port_write); class tmp95c061_device : public tlcs900h_device { @@ -728,44 +728,44 @@ private: }; -#define MCFG_TMP95C063_PORT0_READ( _port_read ) devcb = &downcast(*device).set_port0_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT0_WRITE( _port_write ) devcb = &downcast(*device).set_port0_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORT1_READ( _port_read ) devcb = &downcast(*device).set_port1_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT1_WRITE( _port_write ) devcb = &downcast(*device).set_port1_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORT2_READ( _port_read ) devcb = &downcast(*device).set_port2_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT2_WRITE( _port_write ) devcb = &downcast(*device).set_port2_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORT3_READ( _port_read ) devcb = &downcast(*device).set_port3_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT3_WRITE( _port_write ) devcb = &downcast(*device).set_port3_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORT4_READ( _port_read ) devcb = &downcast(*device).set_port4_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT4_WRITE( _port_write ) devcb = &downcast(*device).set_port4_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORT5_READ( _port_read ) devcb = &downcast(*device).set_port5_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT5_WRITE( _port_write ) devcb = &downcast(*device).set_port5_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORT6_READ( _port_read ) devcb = &downcast(*device).set_port6_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT6_WRITE( _port_write ) devcb = &downcast(*device).set_port6_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORT7_READ( _port_read ) devcb = &downcast(*device).set_port7_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT7_WRITE( _port_write ) devcb = &downcast(*device).set_port7_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORT8_READ( _port_read ) devcb = &downcast(*device).set_port8_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT8_WRITE( _port_write ) devcb = &downcast(*device).set_port8_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORT9_READ( _port_read ) devcb = &downcast(*device).set_port9_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORT9_WRITE( _port_write ) devcb = &downcast(*device).set_port9_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORTA_READ( _port_read ) devcb = &downcast(*device).set_porta_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORTA_WRITE( _port_write ) devcb = &downcast(*device).set_porta_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORTB_READ( _port_read ) devcb = &downcast(*device).set_portb_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORTB_WRITE( _port_write ) devcb = &downcast(*device).set_portb_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORTC_READ( _port_read ) devcb = &downcast(*device).set_portc_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORTC_WRITE( _port_write ) devcb = &downcast(*device).set_portc_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORTD_READ( _port_read ) devcb = &downcast(*device).set_portd_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORTD_WRITE( _port_write ) devcb = &downcast(*device).set_portd_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_PORTE_READ( _port_read ) devcb = &downcast(*device).set_porte_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_PORTE_WRITE( _port_write ) devcb = &downcast(*device).set_porte_write(DEVCB_##_port_write); -#define MCFG_TMP95C063_AN0_READ( _port_read ) devcb = &downcast(*device).set_an0_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_AN1_READ( _port_read ) devcb = &downcast(*device).set_an1_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_AN2_READ( _port_read ) devcb = &downcast(*device).set_an2_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_AN3_READ( _port_read ) devcb = &downcast(*device).set_an3_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_AN4_READ( _port_read ) devcb = &downcast(*device).set_an4_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_AN5_READ( _port_read ) devcb = &downcast(*device).set_an5_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_AN6_READ( _port_read ) devcb = &downcast(*device).set_an6_read(DEVCB_##_port_read); -#define MCFG_TMP95C063_AN7_READ( _port_read ) devcb = &downcast(*device).set_an7_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT0_READ( _port_read ) downcast(*device).set_port0_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT0_WRITE( _port_write ) downcast(*device).set_port0_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORT1_READ( _port_read ) downcast(*device).set_port1_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT1_WRITE( _port_write ) downcast(*device).set_port1_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORT2_READ( _port_read ) downcast(*device).set_port2_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT2_WRITE( _port_write ) downcast(*device).set_port2_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORT3_READ( _port_read ) downcast(*device).set_port3_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT3_WRITE( _port_write ) downcast(*device).set_port3_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORT4_READ( _port_read ) downcast(*device).set_port4_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT4_WRITE( _port_write ) downcast(*device).set_port4_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORT5_READ( _port_read ) downcast(*device).set_port5_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT5_WRITE( _port_write ) downcast(*device).set_port5_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORT6_READ( _port_read ) downcast(*device).set_port6_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT6_WRITE( _port_write ) downcast(*device).set_port6_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORT7_READ( _port_read ) downcast(*device).set_port7_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT7_WRITE( _port_write ) downcast(*device).set_port7_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORT8_READ( _port_read ) downcast(*device).set_port8_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT8_WRITE( _port_write ) downcast(*device).set_port8_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORT9_READ( _port_read ) downcast(*device).set_port9_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORT9_WRITE( _port_write ) downcast(*device).set_port9_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORTA_READ( _port_read ) downcast(*device).set_porta_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORTA_WRITE( _port_write ) downcast(*device).set_porta_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORTB_READ( _port_read ) downcast(*device).set_portb_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORTB_WRITE( _port_write ) downcast(*device).set_portb_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORTC_READ( _port_read ) downcast(*device).set_portc_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORTC_WRITE( _port_write ) downcast(*device).set_portc_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORTD_READ( _port_read ) downcast(*device).set_portd_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORTD_WRITE( _port_write ) downcast(*device).set_portd_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_PORTE_READ( _port_read ) downcast(*device).set_porte_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_PORTE_WRITE( _port_write ) downcast(*device).set_porte_write(DEVCB_##_port_write); +#define MCFG_TMP95C063_AN0_READ( _port_read ) downcast(*device).set_an0_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_AN1_READ( _port_read ) downcast(*device).set_an1_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_AN2_READ( _port_read ) downcast(*device).set_an2_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_AN3_READ( _port_read ) downcast(*device).set_an3_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_AN4_READ( _port_read ) downcast(*device).set_an4_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_AN5_READ( _port_read ) downcast(*device).set_an5_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_AN6_READ( _port_read ) downcast(*device).set_an6_read(DEVCB_##_port_read); +#define MCFG_TMP95C063_AN7_READ( _port_read ) downcast(*device).set_an7_read(DEVCB_##_port_read); class tmp95c063_device : public tlcs900h_device { diff --git a/src/devices/cpu/tms1000/tms0270.h b/src/devices/cpu/tms1000/tms0270.h index 64f28d4b544..d0947e5bc47 100644 --- a/src/devices/cpu/tms1000/tms0270.h +++ b/src/devices/cpu/tms1000/tms0270.h @@ -16,13 +16,13 @@ // TMS0270 was designed to interface with TMS5100, set it up at driver level #define MCFG_TMS0270_READ_CTL_CB(_devcb) \ - devcb = &downcast(*device).set_read_ctl_callback(DEVCB_##_devcb); + downcast(*device).set_read_ctl_callback(DEVCB_##_devcb); #define MCFG_TMS0270_WRITE_CTL_CB(_devcb) \ - devcb = &downcast(*device).set_write_ctl_callback(DEVCB_##_devcb); + downcast(*device).set_write_ctl_callback(DEVCB_##_devcb); #define MCFG_TMS0270_WRITE_PDC_CB(_devcb) \ - devcb = &downcast(*device).set_write_pdc_callback(DEVCB_##_devcb); + downcast(*device).set_write_pdc_callback(DEVCB_##_devcb); class tms0270_cpu_device : public tms0980_cpu_device diff --git a/src/devices/cpu/tms1000/tms1k_base.h b/src/devices/cpu/tms1000/tms1k_base.h index ed7164f2d43..481e9ad0d49 100644 --- a/src/devices/cpu/tms1000/tms1k_base.h +++ b/src/devices/cpu/tms1000/tms1k_base.h @@ -19,11 +19,11 @@ // K input pins #define MCFG_TMS1XXX_READ_K_CB(_devcb) \ - devcb = &downcast(*device).set_read_k_callback(DEVCB_##_devcb); + downcast(*device).set_read_k_callback(DEVCB_##_devcb); // O/Segment output pins #define MCFG_TMS1XXX_WRITE_O_CB(_devcb) \ - devcb = &downcast(*device).set_write_o_callback(DEVCB_##_devcb); + downcast(*device).set_write_o_callback(DEVCB_##_devcb); // Use this if the output PLA is unknown: // If the microinstructions (or other) PLA is unknown, try using one from another romset. @@ -32,11 +32,11 @@ // R output pins (also called D on some chips) #define MCFG_TMS1XXX_WRITE_R_CB(_devcb) \ - devcb = &downcast(*device).set_write_r_callback(DEVCB_##_devcb); + downcast(*device).set_write_r_callback(DEVCB_##_devcb); // OFF request on TMS0980 and up #define MCFG_TMS1XXX_POWER_OFF_CB(_devcb) \ - devcb = &downcast(*device).set_power_off_callback(DEVCB_##_devcb); + downcast(*device).set_power_off_callback(DEVCB_##_devcb); // HALT input pin on CMOS chips (use set_input_line) #define TMS1XXX_INPUT_LINE_HALT 0 diff --git a/src/devices/cpu/tms32010/tms32010.h b/src/devices/cpu/tms32010/tms32010.h index 0c1e705ada9..023bb1787a4 100644 --- a/src/devices/cpu/tms32010/tms32010.h +++ b/src/devices/cpu/tms32010/tms32010.h @@ -18,7 +18,7 @@ #define MCFG_TMS32010_BIO_IN_CB(_devcb) \ - devcb = &downcast(*device).set_bio_in_cb(DEVCB_##_devcb); /* BIO input */ + downcast(*device).set_bio_in_cb(DEVCB_##_devcb); /* BIO input */ #define TMS32010_INT_PENDING 0x80000000 diff --git a/src/devices/cpu/tms32025/tms32025.h b/src/devices/cpu/tms32025/tms32025.h index 6a3354f5bbd..de7f2681bb7 100644 --- a/src/devices/cpu/tms32025/tms32025.h +++ b/src/devices/cpu/tms32025/tms32025.h @@ -24,22 +24,22 @@ #define MCFG_TMS32025_BIO_IN_CB(_devcb) \ - devcb = &downcast(*device).set_bio_in_cb(DEVCB_##_devcb); /* BIO input */ + downcast(*device).set_bio_in_cb(DEVCB_##_devcb); /* BIO input */ #define MCFG_TMS32025_HOLD_IN_CB(_devcb) \ - devcb = &downcast(*device).set_hold_in_cb(DEVCB_##_devcb); /* HOLD input */ + downcast(*device).set_hold_in_cb(DEVCB_##_devcb); /* HOLD input */ #define MCFG_TMS32025_HOLD_ACK_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_hold_ack_out_cb(DEVCB_##_devcb); /* HOLD Acknowledge output */ + downcast(*device).set_hold_ack_out_cb(DEVCB_##_devcb); /* HOLD Acknowledge output */ #define MCFG_TMS32025_XF_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_xf_out_cb(DEVCB_##_devcb); /* XF output */ + downcast(*device).set_xf_out_cb(DEVCB_##_devcb); /* XF output */ #define MCFG_TMS32025_DR_IN_CB(_devcb) \ - devcb = &downcast(*device).set_dr_in_cb(DEVCB_##_devcb); /* Serial Data Receive input */ + downcast(*device).set_dr_in_cb(DEVCB_##_devcb); /* Serial Data Receive input */ #define MCFG_TMS32025_DX_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_dx_out_cb(DEVCB_##_devcb); /* Serial Data Transmit output */ + downcast(*device).set_dx_out_cb(DEVCB_##_devcb); /* Serial Data Transmit output */ /**************************************************************************** diff --git a/src/devices/cpu/tms32031/tms32031.h b/src/devices/cpu/tms32031/tms32031.h index dc11f88d8dd..14b7ab015db 100644 --- a/src/devices/cpu/tms32031/tms32031.h +++ b/src/devices/cpu/tms32031/tms32031.h @@ -95,16 +95,16 @@ enum downcast(*device).set_mcbl_mode(_mode); #define MCFG_TMS3203X_XF0_CB(_devcb) \ - devcb = &downcast(*device).set_xf0_callback(DEVCB_##_devcb); + downcast(*device).set_xf0_callback(DEVCB_##_devcb); #define MCFG_TMS3203X_XF1_CB(_devcb) \ - devcb = &downcast(*device).set_xf1_callback(DEVCB_##_devcb); + downcast(*device).set_xf1_callback(DEVCB_##_devcb); #define MCFG_TMS3203X_IACK_CB(_devcb) \ - devcb = &downcast(*device).set_iack_callback(DEVCB_##_devcb); + downcast(*device).set_iack_callback(DEVCB_##_devcb); #define MCFG_TMS3203X_HOLDA_CB(_devcb) \ - devcb = &downcast(*device).set_holda_callback(DEVCB_##_devcb); + downcast(*device).set_holda_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/cpu/tms34010/tms34010.h b/src/devices/cpu/tms34010/tms34010.h index 27176ceb54e..6d835a18975 100644 --- a/src/devices/cpu/tms34010/tms34010.h +++ b/src/devices/cpu/tms34010/tms34010.h @@ -125,7 +125,7 @@ enum #define MCFG_TMS340X0_OUTPUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_output_int_callback(DEVCB_##_devcb); + downcast(*device).set_output_int_callback(DEVCB_##_devcb); #define TMS340X0_TO_SHIFTREG_CB_MEMBER(_name) void _name(address_space &space, offs_t address, uint16_t *shiftreg) diff --git a/src/devices/cpu/tms7000/tms7000.h b/src/devices/cpu/tms7000/tms7000.h index 125a43d5dec..a1a50084b18 100644 --- a/src/devices/cpu/tms7000/tms7000.h +++ b/src/devices/cpu/tms7000/tms7000.h @@ -16,29 +16,29 @@ // read-only on 70x0 #define MCFG_TMS7000_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(0, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(0, DEVCB_##_devcb); #define MCFG_TMS7000_OUT_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(0, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(0, DEVCB_##_devcb); // write-only #define MCFG_TMS7000_OUT_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(1, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(1, DEVCB_##_devcb); #define MCFG_TMS7000_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(2, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(2, DEVCB_##_devcb); #define MCFG_TMS7000_OUT_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(2, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(2, DEVCB_##_devcb); #define MCFG_TMS7000_IN_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(3, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(3, DEVCB_##_devcb); #define MCFG_TMS7000_OUT_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(3, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(3, DEVCB_##_devcb); // TMS70C46 only #define MCFG_TMS7000_IN_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_port_read_cb(4, DEVCB_##_devcb); + downcast(*device).set_port_read_cb(4, DEVCB_##_devcb); #define MCFG_TMS7000_OUT_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_port_write_cb(4, DEVCB_##_devcb); + downcast(*device).set_port_write_cb(4, DEVCB_##_devcb); enum { TMS7000_PC=1, TMS7000_SP, TMS7000_ST }; diff --git a/src/devices/cpu/tms9900/tms9995.h b/src/devices/cpu/tms9900/tms9995.h index 940ec0f43ee..956d35cf11c 100644 --- a/src/devices/cpu/tms9900/tms9995.h +++ b/src/devices/cpu/tms9900/tms9995.h @@ -28,19 +28,19 @@ enum }; #define MCFG_TMS9995_EXTOP_HANDLER( _extop) \ - devcb = &downcast(*device).set_extop_callback(DEVCB_##_extop); + downcast(*device).set_extop_callback(DEVCB_##_extop); #define MCFG_TMS9995_IAQ_HANDLER( _iaq ) \ - devcb = &downcast(*device).set_iaq_callback(DEVCB_##_iaq); + downcast(*device).set_iaq_callback(DEVCB_##_iaq); #define MCFG_TMS9995_CLKOUT_HANDLER( _clkout ) \ - devcb = &downcast(*device).set_clkout_callback(DEVCB_##_clkout); + downcast(*device).set_clkout_callback(DEVCB_##_clkout); #define MCFG_TMS9995_HOLDA_HANDLER( _holda ) \ - devcb = &downcast(*device).set_holda_callback(DEVCB_##_holda); + downcast(*device).set_holda_callback(DEVCB_##_holda); #define MCFG_TMS9995_DBIN_HANDLER( _dbin ) \ - devcb = &downcast(*device).set_dbin_callback(DEVCB_##_dbin); + downcast(*device).set_dbin_callback(DEVCB_##_dbin); #define MCFG_TMS9995_ENABLE_OVINT( _ovint ) \ downcast(device)->set_overflow_interrupt( _ovint ); diff --git a/src/devices/cpu/tms9900/tms99com.h b/src/devices/cpu/tms9900/tms99com.h index 2ee65b3f2cc..033511ef350 100644 --- a/src/devices/cpu/tms9900/tms99com.h +++ b/src/devices/cpu/tms9900/tms99com.h @@ -47,25 +47,25 @@ MCFG_DEVICE_IO_MAP(_iomap) #define MCFG_TMS99xx_EXTOP_HANDLER( _extop) \ - devcb = &downcast(*device).set_extop_callback(DEVCB_##_extop); + downcast(*device).set_extop_callback(DEVCB_##_extop); #define MCFG_TMS99xx_INTLEVEL_HANDLER( _intlevel ) \ - devcb = &downcast(*device).set_intlevel_callback(DEVCB_##_intlevel); + downcast(*device).set_intlevel_callback(DEVCB_##_intlevel); #define MCFG_TMS99xx_IAQ_HANDLER( _iaq ) \ - devcb = &downcast(*device).set_iaq_callback(DEVCB_##_iaq); + downcast(*device).set_iaq_callback(DEVCB_##_iaq); #define MCFG_TMS99xx_CLKOUT_HANDLER( _clkout ) \ - devcb = &downcast(*device).set_clkout_callback(DEVCB_##_clkout); + downcast(*device).set_clkout_callback(DEVCB_##_clkout); #define MCFG_TMS99xx_WAIT_HANDLER( _wait ) \ - devcb = &downcast(*device).set_wait_callback(DEVCB_##_wait); + downcast(*device).set_wait_callback(DEVCB_##_wait); #define MCFG_TMS99xx_HOLDA_HANDLER( _holda ) \ - devcb = &downcast(*device).set_holda_callback(DEVCB_##_holda); + downcast(*device).set_holda_callback(DEVCB_##_holda); #define MCFG_TMS99xx_DBIN_HANDLER( _dbin ) \ - devcb = &downcast(*device).set_dbin_callback(DEVCB_##_dbin); + downcast(*device).set_dbin_callback(DEVCB_##_dbin); enum { diff --git a/src/devices/cpu/ucom4/ucom4.h b/src/devices/cpu/ucom4/ucom4.h index 77f963a61e9..fe93029ac91 100644 --- a/src/devices/cpu/ucom4/ucom4.h +++ b/src/devices/cpu/ucom4/ucom4.h @@ -14,35 +14,35 @@ // I/O ports setup #define MCFG_UCOM4_READ_A_CB(_devcb) \ - devcb = &downcast(*device).set_read_a_callback(DEVCB_##_devcb); + downcast(*device).set_read_a_callback(DEVCB_##_devcb); #define MCFG_UCOM4_READ_B_CB(_devcb) \ - devcb = &downcast(*device).set_read_b_callback(DEVCB_##_devcb); + downcast(*device).set_read_b_callback(DEVCB_##_devcb); #define MCFG_UCOM4_READ_C_CB(_devcb) \ - devcb = &downcast(*device).set_read_c_callback(DEVCB_##_devcb); + downcast(*device).set_read_c_callback(DEVCB_##_devcb); #define MCFG_UCOM4_WRITE_C_CB(_devcb) \ - devcb = &downcast(*device).set_write_c_callback(DEVCB_##_devcb); + downcast(*device).set_write_c_callback(DEVCB_##_devcb); #define MCFG_UCOM4_READ_D_CB(_devcb) \ - devcb = &downcast(*device).set_read_d_callback(DEVCB_##_devcb); + downcast(*device).set_read_d_callback(DEVCB_##_devcb); #define MCFG_UCOM4_WRITE_D_CB(_devcb) \ - devcb = &downcast(*device).set_write_d_callback(DEVCB_##_devcb); + downcast(*device).set_write_d_callback(DEVCB_##_devcb); #define MCFG_UCOM4_WRITE_E_CB(_devcb) \ - devcb = &downcast(*device).set_write_e_callback(DEVCB_##_devcb); + downcast(*device).set_write_e_callback(DEVCB_##_devcb); #define MCFG_UCOM4_WRITE_F_CB(_devcb) \ - devcb = &downcast(*device).set_write_f_callback(DEVCB_##_devcb); + downcast(*device).set_write_f_callback(DEVCB_##_devcb); #define MCFG_UCOM4_WRITE_G_CB(_devcb) \ - devcb = &downcast(*device).set_write_g_callback(DEVCB_##_devcb); + downcast(*device).set_write_g_callback(DEVCB_##_devcb); #define MCFG_UCOM4_WRITE_H_CB(_devcb) \ - devcb = &downcast(*device).set_write_h_callback(DEVCB_##_devcb); + downcast(*device).set_write_h_callback(DEVCB_##_devcb); #define MCFG_UCOM4_WRITE_I_CB(_devcb) \ - devcb = &downcast(*device).set_write_i_callback(DEVCB_##_devcb); + downcast(*device).set_write_i_callback(DEVCB_##_devcb); enum { diff --git a/src/devices/cpu/upd7725/upd7725.h b/src/devices/cpu/upd7725/upd7725.h index 93d5019245b..0b4cb717f81 100644 --- a/src/devices/cpu/upd7725/upd7725.h +++ b/src/devices/cpu/upd7725/upd7725.h @@ -30,37 +30,37 @@ enum #define MCFG_NECDSP_IN_INT_CB(_devcb) \ - devcb = &downcast(*device).set_in_int_callback(DEVCB_##_devcb); + downcast(*device).set_in_int_callback(DEVCB_##_devcb); #define MCFG_NECDSP_IN_SI_CB(_devcb) \ - devcb = &downcast(*device).set_in_si_callback(DEVCB_##_devcb); + downcast(*device).set_in_si_callback(DEVCB_##_devcb); #define MCFG_NECDSP_IN_SCK_CB(_devcb) \ - devcb = &downcast(*device).set_in_sck_callback(DEVCB_##_devcb); + downcast(*device).set_in_sck_callback(DEVCB_##_devcb); #define MCFG_NECDSP_IN_SIEN_CB(_devcb) \ - devcb = &downcast(*device).set_in_sien_callback(DEVCB_##_devcb); + downcast(*device).set_in_sien_callback(DEVCB_##_devcb); #define MCFG_NECDSP_IN_SOEN_CB(_devcb) \ - devcb = &downcast(*device).set_in_soen_callback(DEVCB_##_devcb); + downcast(*device).set_in_soen_callback(DEVCB_##_devcb); #define MCFG_NECDSP_IN_DACK_CB(_devcb) \ - devcb = &downcast(*device).set_in_dack_callback(DEVCB_##_devcb); + downcast(*device).set_in_dack_callback(DEVCB_##_devcb); #define MCFG_NECDSP_OUT_P0_CB(_devcb) \ - devcb = &downcast(*device).set_out_p0_callback(DEVCB_##_devcb); + downcast(*device).set_out_p0_callback(DEVCB_##_devcb); #define MCFG_NECDSP_OUT_P1_CB(_devcb) \ - devcb = &downcast(*device).set_out_p1_callback(DEVCB_##_devcb); + downcast(*device).set_out_p1_callback(DEVCB_##_devcb); #define MCFG_NECDSP_OUT_SO_CB(_devcb) \ - devcb = &downcast(*device).set_out_so_callback(DEVCB_##_devcb); + downcast(*device).set_out_so_callback(DEVCB_##_devcb); #define MCFG_NECDSP_OUT_SORQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_sorq_callback(DEVCB_##_devcb); + downcast(*device).set_out_sorq_callback(DEVCB_##_devcb); #define MCFG_NECDSP_OUT_DRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq_callback(DEVCB_##_devcb); // ======================> necdsp_device diff --git a/src/devices/cpu/upd7810/upd7810.h b/src/devices/cpu/upd7810/upd7810.h index a609707f1d9..497ffc0acb7 100644 --- a/src/devices/cpu/upd7810/upd7810.h +++ b/src/devices/cpu/upd7810/upd7810.h @@ -39,74 +39,74 @@ enum #define MCFG_UPD7810_TO(_devcb) \ - devcb = &downcast(*device).set_to_func(DEVCB_##_devcb); + downcast(*device).set_to_func(DEVCB_##_devcb); #define MCFG_UPD7810_CO0(_devcb) \ - devcb = &downcast(*device).set_co0_func(DEVCB_##_devcb); + downcast(*device).set_co0_func(DEVCB_##_devcb); #define MCFG_UPD7810_CO1(_devcb) \ - devcb = &downcast(*device).set_co1_func(DEVCB_##_devcb); + downcast(*device).set_co1_func(DEVCB_##_devcb); #define MCFG_UPD7810_TXD(_devcb) \ - devcb = &downcast(*device).set_txd_func(DEVCB_##_devcb); + downcast(*device).set_txd_func(DEVCB_##_devcb); #define MCFG_UPD7810_RXD(_devcb) \ - devcb = &downcast(*device).set_rxd_func(DEVCB_##_devcb); + downcast(*device).set_rxd_func(DEVCB_##_devcb); #define MCFG_UPD7810_AN0(_devcb) \ - devcb = &downcast(*device).set_an0_func(DEVCB_##_devcb); + downcast(*device).set_an0_func(DEVCB_##_devcb); #define MCFG_UPD7810_AN1(_devcb) \ - devcb = &downcast(*device).set_an1_func(DEVCB_##_devcb); + downcast(*device).set_an1_func(DEVCB_##_devcb); #define MCFG_UPD7810_AN2(_devcb) \ - devcb = &downcast(*device).set_an2_func(DEVCB_##_devcb); + downcast(*device).set_an2_func(DEVCB_##_devcb); #define MCFG_UPD7810_AN3(_devcb) \ - devcb = &downcast(*device).set_an3_func(DEVCB_##_devcb); + downcast(*device).set_an3_func(DEVCB_##_devcb); #define MCFG_UPD7810_AN4(_devcb) \ - devcb = &downcast(*device).set_an4_func(DEVCB_##_devcb); + downcast(*device).set_an4_func(DEVCB_##_devcb); #define MCFG_UPD7810_AN5(_devcb) \ - devcb = &downcast(*device).set_an5_func(DEVCB_##_devcb); + downcast(*device).set_an5_func(DEVCB_##_devcb); #define MCFG_UPD7810_AN6(_devcb) \ - devcb = &downcast(*device).set_an6_func(DEVCB_##_devcb); + downcast(*device).set_an6_func(DEVCB_##_devcb); #define MCFG_UPD7810_AN7(_devcb) \ - devcb = &downcast(*device).set_an7_func(DEVCB_##_devcb); + downcast(*device).set_an7_func(DEVCB_##_devcb); #define MCFG_UPD7810_PORTA_READ_CB(_devcb) \ - devcb = &downcast(*device).set_pa_in_cb(DEVCB_##_devcb); + downcast(*device).set_pa_in_cb(DEVCB_##_devcb); #define MCFG_UPD7810_PORTB_READ_CB(_devcb) \ - devcb = &downcast(*device).set_pb_in_cb(DEVCB_##_devcb); + downcast(*device).set_pb_in_cb(DEVCB_##_devcb); #define MCFG_UPD7810_PORTC_READ_CB(_devcb) \ - devcb = &downcast(*device).set_pc_in_cb(DEVCB_##_devcb); + downcast(*device).set_pc_in_cb(DEVCB_##_devcb); #define MCFG_UPD7810_PORTD_READ_CB(_devcb) \ - devcb = &downcast(*device).set_pd_in_cb(DEVCB_##_devcb); + downcast(*device).set_pd_in_cb(DEVCB_##_devcb); #define MCFG_UPD7810_PORTF_READ_CB(_devcb) \ - devcb = &downcast(*device).set_pf_in_cb(DEVCB_##_devcb); + downcast(*device).set_pf_in_cb(DEVCB_##_devcb); #define MCFG_UPD7810_PORTA_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_pa_out_cb(DEVCB_##_devcb); + downcast(*device).set_pa_out_cb(DEVCB_##_devcb); #define MCFG_UPD7810_PORTB_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_pb_out_cb(DEVCB_##_devcb); + downcast(*device).set_pb_out_cb(DEVCB_##_devcb); #define MCFG_UPD7810_PORTC_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_pc_out_cb(DEVCB_##_devcb); + downcast(*device).set_pc_out_cb(DEVCB_##_devcb); #define MCFG_UPD7810_PORTD_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_pd_out_cb(DEVCB_##_devcb); + downcast(*device).set_pd_out_cb(DEVCB_##_devcb); #define MCFG_UPD7810_PORTF_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_pf_out_cb(DEVCB_##_devcb); + downcast(*device).set_pf_out_cb(DEVCB_##_devcb); #define MCFG_UPD7807_PORTA_READ_CB MCFG_UPD7810_PORTA_READ_CB @@ -121,7 +121,7 @@ enum #define MCFG_UPD7807_PORTF_WRITE_CB MCFG_UPD7810_PORTF_WRITE_CB #define MCFG_UPD7807_PORTT_READ_CB(_devcb) \ - devcb = &downcast(*device).set_pt_in_cb(DEVCB_##_devcb); + downcast(*device).set_pt_in_cb(DEVCB_##_devcb); class upd7810_device : public cpu_device diff --git a/src/devices/cpu/z8/z8.h b/src/devices/cpu/z8/z8.h index f0f135296e4..551ac1b87f0 100644 --- a/src/devices/cpu/z8/z8.h +++ b/src/devices/cpu/z8/z8.h @@ -13,29 +13,29 @@ #define MCFG_Z8_PORT_P0_READ_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(0, DEVCB_##_devcb); + downcast(*device).set_input_cb(0, DEVCB_##_devcb); #define MCFG_Z8_PORT_P1_READ_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(1, DEVCB_##_devcb); + downcast(*device).set_input_cb(1, DEVCB_##_devcb); #define MCFG_Z8_PORT_P2_READ_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(2, DEVCB_##_devcb); + downcast(*device).set_input_cb(2, DEVCB_##_devcb); #define MCFG_Z8_PORT_P3_READ_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(3, DEVCB_##_devcb); + downcast(*device).set_input_cb(3, DEVCB_##_devcb); #define MCFG_Z8_PORT_P0_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(0, DEVCB_##_devcb); + downcast(*device).set_output_cb(0, DEVCB_##_devcb); #define MCFG_Z8_PORT_P1_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(1, DEVCB_##_devcb); + downcast(*device).set_output_cb(1, DEVCB_##_devcb); #define MCFG_Z8_PORT_P2_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(2, DEVCB_##_devcb); + downcast(*device).set_output_cb(2, DEVCB_##_devcb); #define MCFG_Z8_PORT_P3_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(3, DEVCB_##_devcb); + downcast(*device).set_output_cb(3, DEVCB_##_devcb); class z8_device : public cpu_device diff --git a/src/devices/cpu/z80/tmpz84c011.h b/src/devices/cpu/z80/tmpz84c011.h index b210dbd1589..bef9986698c 100644 --- a/src/devices/cpu/z80/tmpz84c011.h +++ b/src/devices/cpu/z80/tmpz84c011.h @@ -25,46 +25,46 @@ // CTC callbacks #define MCFG_TMPZ84C011_ZC0_CB(_devcb) \ - devcb = &downcast(*device).set_zc0_callback(DEVCB_##_devcb); + downcast(*device).set_zc0_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C011_ZC1_CB(_devcb) \ - devcb = &downcast(*device).set_zc1_callback(DEVCB_##_devcb); + downcast(*device).set_zc1_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C011_ZC2_CB(_devcb) \ - devcb = &downcast(*device).set_zc2_callback(DEVCB_##_devcb); + downcast(*device).set_zc2_callback(DEVCB_##_devcb); // I/O callbacks #define MCFG_TMPZ84C011_PORTA_READ_CB(_devcb) \ - devcb = &downcast(*device).set_inportsa_cb(DEVCB_##_devcb); + downcast(*device).set_inportsa_cb(DEVCB_##_devcb); #define MCFG_TMPZ84C011_PORTB_READ_CB(_devcb) \ - devcb = &downcast(*device).set_inportsb_cb(DEVCB_##_devcb); + downcast(*device).set_inportsb_cb(DEVCB_##_devcb); #define MCFG_TMPZ84C011_PORTC_READ_CB(_devcb) \ - devcb = &downcast(*device).set_inportsc_cb(DEVCB_##_devcb); + downcast(*device).set_inportsc_cb(DEVCB_##_devcb); #define MCFG_TMPZ84C011_PORTD_READ_CB(_devcb) \ - devcb = &downcast(*device).set_inportsd_cb(DEVCB_##_devcb); + downcast(*device).set_inportsd_cb(DEVCB_##_devcb); #define MCFG_TMPZ84C011_PORTE_READ_CB(_devcb) \ - devcb = &downcast(*device).set_inportse_cb(DEVCB_##_devcb); + downcast(*device).set_inportse_cb(DEVCB_##_devcb); #define MCFG_TMPZ84C011_PORTA_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_outportsa_cb(DEVCB_##_devcb); + downcast(*device).set_outportsa_cb(DEVCB_##_devcb); #define MCFG_TMPZ84C011_PORTB_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_outportsb_cb(DEVCB_##_devcb); + downcast(*device).set_outportsb_cb(DEVCB_##_devcb); #define MCFG_TMPZ84C011_PORTC_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_outportsc_cb(DEVCB_##_devcb); + downcast(*device).set_outportsc_cb(DEVCB_##_devcb); #define MCFG_TMPZ84C011_PORTD_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_outportsd_cb(DEVCB_##_devcb); + downcast(*device).set_outportsd_cb(DEVCB_##_devcb); #define MCFG_TMPZ84C011_PORTE_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_outportse_cb(DEVCB_##_devcb); + downcast(*device).set_outportse_cb(DEVCB_##_devcb); /*************************************************************************** diff --git a/src/devices/cpu/z80/tmpz84c015.h b/src/devices/cpu/z80/tmpz84c015.h index 18f221f3b34..93b4d897c16 100644 --- a/src/devices/cpu/z80/tmpz84c015.h +++ b/src/devices/cpu/z80/tmpz84c015.h @@ -24,80 +24,80 @@ // SIO callbacks #define MCFG_TMPZ84C015_OUT_TXDA_CB(_devcb) \ - devcb = &downcast(*device).set_out_txda_callback(DEVCB_##_devcb); + downcast(*device).set_out_txda_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_DTRA_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtra_callback(DEVCB_##_devcb); + downcast(*device).set_out_dtra_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_RTSA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rtsa_callback(DEVCB_##_devcb); + downcast(*device).set_out_rtsa_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_WRDYA_CB(_devcb) \ - devcb = &downcast(*device).set_out_wrdya_callback(DEVCB_##_devcb); + downcast(*device).set_out_wrdya_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_SYNCA_CB(_devcb) \ - devcb = &downcast(*device).set_out_synca_callback(DEVCB_##_devcb); + downcast(*device).set_out_synca_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_TXDB_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdb_callback(DEVCB_##_devcb); + downcast(*device).set_out_txdb_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_DTRB_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtrb_callback(DEVCB_##_devcb); + downcast(*device).set_out_dtrb_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_RTSB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rtsb_callback(DEVCB_##_devcb); + downcast(*device).set_out_rtsb_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_WRDYB_CB(_devcb) \ - devcb = &downcast(*device).set_out_wrdyb_callback(DEVCB_##_devcb); + downcast(*device).set_out_wrdyb_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_SYNCB_CB(_devcb) \ - devcb = &downcast(*device).set_out_syncb_callback(DEVCB_##_devcb); + downcast(*device).set_out_syncb_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_RXDRQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rxdrqa_callback(DEVCB_##_devcb); + downcast(*device).set_out_rxdrqa_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_TXDRQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdrqa_callback(DEVCB_##_devcb); + downcast(*device).set_out_txdrqa_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_RXDRQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rxdrqb_callback(DEVCB_##_devcb); + downcast(*device).set_out_rxdrqb_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_TXDRQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdrqb_callback(DEVCB_##_devcb); + downcast(*device).set_out_txdrqb_callback(DEVCB_##_devcb); // CTC callbacks #define MCFG_TMPZ84C015_ZC0_CB(_devcb) \ - devcb = &downcast(*device).set_zc_callback<0>(DEVCB_##_devcb); + downcast(*device).set_zc_callback<0>(DEVCB_##_devcb); #define MCFG_TMPZ84C015_ZC1_CB(_devcb) \ - devcb = &downcast(*device).set_zc_callback<1>(DEVCB_##_devcb); + downcast(*device).set_zc_callback<1>(DEVCB_##_devcb); #define MCFG_TMPZ84C015_ZC2_CB(_devcb) \ - devcb = &downcast(*device).set_zc_callback<2>(DEVCB_##_devcb); + downcast(*device).set_zc_callback<2>(DEVCB_##_devcb); #define MCFG_TMPZ84C015_ZC3_CB(_devcb) \ - devcb = &downcast(*device).set_zc_callback<3>(DEVCB_##_devcb); + downcast(*device).set_zc_callback<3>(DEVCB_##_devcb); // PIO callbacks #define MCFG_TMPZ84C015_IN_PA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_PA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_ARDY_CB(_devcb) \ - devcb = &downcast(*device).set_out_ardy_callback(DEVCB_##_devcb); + downcast(*device).set_out_ardy_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_IN_PB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_PB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); #define MCFG_TMPZ84C015_OUT_BRDY_CB(_devcb) \ - devcb = &downcast(*device).set_out_brdy_callback(DEVCB_##_devcb); + downcast(*device).set_out_brdy_callback(DEVCB_##_devcb); /*************************************************************************** @@ -115,27 +115,48 @@ public: template devcb_base &set_out_rtsa_callback(Object &&cb) { return m_out_rtsa_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_wrdya_callback(Object &&cb) { return m_out_wrdya_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_synca_callback(Object &&cb) { return m_out_synca_cb.set_callback(std::forward(cb)); } + auto out_txda_callback() { return m_out_txda_cb.bind(); } + auto out_dtra_callback() { return m_out_dtra_cb.bind(); } + auto out_rtsa_callback() { return m_out_rtsa_cb.bind(); } + auto out_wrdya_callback() { return m_out_wrdya_cb.bind(); } + auto out_synca_callback() { return m_out_synca_cb.bind(); } template devcb_base &set_out_txdb_callback(Object &&cb) { return m_out_txdb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_dtrb_callback(Object &&cb) { return m_out_dtrb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_rtsb_callback(Object &&cb) { return m_out_rtsb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_wrdyb_callback(Object &&cb) { return m_out_wrdyb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_syncb_callback(Object &&cb) { return m_out_syncb_cb.set_callback(std::forward(cb)); } + auto out_txdb_callback() { return m_out_txdb_cb.bind(); } + auto out_dtrb_callback() { return m_out_dtrb_cb.bind(); } + auto out_rtsb_callback() { return m_out_rtsb_cb.bind(); } + auto out_wrdyb_callback() { return m_out_wrdyb_cb.bind(); } + auto out_syncb_callback() { return m_out_syncb_cb.bind(); } template devcb_base &set_out_rxdrqa_callback(Object &&cb) { return m_out_rxdrqa_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_txdrqa_callback(Object &&cb) { return m_out_txdrqa_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_rxdrqb_callback(Object &&cb) { return m_out_rxdrqb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_txdrqb_callback(Object &&cb) { return m_out_txdrqb_cb.set_callback(std::forward(cb)); } + auto out_rxdrqa_callback() { return m_out_rxdrqa_cb.bind(); } + auto out_txdrqa_callback() { return m_out_txdrqa_cb.bind(); } + auto out_rxdrqb_callback() { return m_out_rxdrqb_cb.bind(); } + auto out_txdrqb_callback() { return m_out_txdrqb_cb.bind(); } template devcb_base &set_zc_callback(Object &&cb) { return m_zc_cb[N].set_callback(std::forward(cb)); } + template auto zc_callback() { return m_zc_cb[N].bind(); } template devcb_base &set_in_pa_callback(Object &&cb) { return m_in_pa_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_pa_callback(Object &&cb) { return m_out_pa_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_ardy_callback(Object &&cb) { return m_out_ardy_cb.set_callback(std::forward(cb)); } + auto in_pa_callback() { return m_in_pa_cb.bind(); } + auto out_pa_callback() { return m_out_pa_cb.bind(); } + auto out_ardy_callback() { return m_out_ardy_cb.bind(); } template devcb_base &set_in_pb_callback(Object &&cb) { return m_in_pb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_pb_callback(Object &&cb) { return m_out_pb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_brdy_callback(Object &&cb) { return m_out_brdy_cb.set_callback(std::forward(cb)); } + auto in_pb_callback() { return m_in_pb_cb.bind(); } + auto out_pb_callback() { return m_out_pb_cb.bind(); } + auto out_brdy_callback() { return m_out_brdy_cb.bind(); } // SIO public interface DECLARE_WRITE_LINE_MEMBER( rxa_w ) { m_sio->rxa_w(state); } diff --git a/src/devices/cpu/z80/z80.h b/src/devices/cpu/z80/z80.h index 9e7471c9826..8af446f9882 100644 --- a/src/devices/cpu/z80/z80.h +++ b/src/devices/cpu/z80/z80.h @@ -8,13 +8,13 @@ #include "machine/z80daisy.h" #define MCFG_Z80_SET_IRQACK_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_irqack_cb(DEVCB_##_devcb); + downcast(*device).set_irqack_cb(DEVCB_##_devcb); #define MCFG_Z80_SET_REFRESH_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_refresh_cb(DEVCB_##_devcb); + downcast(*device).set_refresh_cb(DEVCB_##_devcb); #define MCFG_Z80_SET_HALT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_halt_cb(DEVCB_##_devcb); + downcast(*device).set_halt_cb(DEVCB_##_devcb); enum { diff --git a/src/devices/cpu/z8000/z8000.h b/src/devices/cpu/z8000/z8000.h index 93cab12a193..1bd2311c6ed 100644 --- a/src/devices/cpu/z8000/z8000.h +++ b/src/devices/cpu/z8000/z8000.h @@ -30,7 +30,7 @@ enum #define Z8000_HALT 0x0100 /* halted flag */ #define MCFG_Z8000_MO(_devcb) \ - devcb = &downcast(*device).set_mo_callback(DEVCB_##_devcb); + downcast(*device).set_mo_callback(DEVCB_##_devcb); class z8002_device : public cpu_device, public z8000_disassembler::config { diff --git a/src/devices/imagedev/flopdrv.h b/src/devices/imagedev/flopdrv.h index 1546eec8546..11182f2dc00 100644 --- a/src/devices/imagedev/flopdrv.h +++ b/src/devices/imagedev/flopdrv.h @@ -88,7 +88,7 @@ struct chrn_id #define FLOPPY_DRIVE_INDEX 0x0020 #define MCFG_LEGACY_FLOPPY_IDX_CB(_devcb) \ - devcb = &downcast(*device).set_out_idx_func(DEVCB_##_devcb); + downcast(*device).set_out_idx_func(DEVCB_##_devcb); class legacy_floppy_image_device : public device_t, public device_image_interface diff --git a/src/devices/imagedev/midiin.h b/src/devices/imagedev/midiin.h index aaba86fc2d1..b429bc4f65f 100644 --- a/src/devices/imagedev/midiin.h +++ b/src/devices/imagedev/midiin.h @@ -16,7 +16,7 @@ #include "diserial.h" #define MCFG_MIDIIN_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback(DEVCB_##_devcb); + downcast(*device).set_input_callback(DEVCB_##_devcb); /*************************************************************************** diff --git a/src/devices/imagedev/printer.h b/src/devices/imagedev/printer.h index 41f2dbb03cd..099d19cab9e 100644 --- a/src/devices/imagedev/printer.h +++ b/src/devices/imagedev/printer.h @@ -14,7 +14,7 @@ #pragma once #define MCFG_PRINTER_ONLINE_CB(_devcb) \ - devcb = &downcast(*device).set_online_callback(DEVCB_##_devcb); + downcast(*device).set_online_callback(DEVCB_##_devcb); /*************************************************************************** TYPE DEFINITIONS diff --git a/src/devices/machine/1mb5.h b/src/devices/machine/1mb5.h index 9c7c76eab3e..09c05d2fd8c 100644 --- a/src/devices/machine/1mb5.h +++ b/src/devices/machine/1mb5.h @@ -14,16 +14,16 @@ #pragma once #define MCFG_1MB5_IRL_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irl_handler(DEVCB_##_devcb); + downcast(*device).set_irl_handler(DEVCB_##_devcb); #define MCFG_1MB5_HALT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_halt_handler(DEVCB_##_devcb); + downcast(*device).set_halt_handler(DEVCB_##_devcb); #define MCFG_1MB5_RESET_HANDLER(_devcb) \ - devcb = &downcast(*device).set_reset_handler(DEVCB_##_devcb); + downcast(*device).set_reset_handler(DEVCB_##_devcb); #define MCFG_1MB5_INT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int_handler(DEVCB_##_devcb); + downcast(*device).set_int_handler(DEVCB_##_devcb); class hp_1mb5_device : public device_t { diff --git a/src/devices/machine/40105.h b/src/devices/machine/40105.h index 7b8b82819e0..77b58bbaf08 100644 --- a/src/devices/machine/40105.h +++ b/src/devices/machine/40105.h @@ -31,13 +31,13 @@ ///************************************************************************* #define MCFG_40105_DATA_IN_READY_CB(_dir) \ - devcb = &downcast(device)->set_dir_callback(DEVCB_##_dir); + downcast(device)->set_dir_callback(DEVCB_##_dir); #define MCFG_40105_DATA_OUT_READY_CB(_dor) \ - devcb = &downcast(device)->set_dor_callback(DEVCB_##_dor); + downcast(device)->set_dor_callback(DEVCB_##_dor); #define MCFG_40105_DATA_OUT_CB(_out) \ - devcb = &downcast(device)->set_data_out_callback(DEVCB_##_out); + downcast(device)->set_data_out_callback(DEVCB_##_out); diff --git a/src/devices/machine/53c7xx.h b/src/devices/machine/53c7xx.h index f2af9e616f8..8887a78a5ef 100644 --- a/src/devices/machine/53c7xx.h +++ b/src/devices/machine/53c7xx.h @@ -17,13 +17,13 @@ #define MCFG_NCR53C7XX_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_NCR53C7XX_HOST_WRITE(_devcb) \ - devcb = &downcast(*device).set_host_write(DEVCB_##_devcb); + downcast(*device).set_host_write(DEVCB_##_devcb); #define MCFG_NCR53C7XX_HOST_READ(_devcb) \ - devcb = &downcast(*device).set_host_read(DEVCB_##_devcb); + downcast(*device).set_host_read(DEVCB_##_devcb); class ncr53c7xx_device : public nscsi_device, public device_execute_interface { diff --git a/src/devices/machine/64h156.h b/src/devices/machine/64h156.h index 62e1ccabff9..24244e64517 100644 --- a/src/devices/machine/64h156.h +++ b/src/devices/machine/64h156.h @@ -71,13 +71,13 @@ //************************************************************************** #define MCFG_64H156_ATN_CALLBACK(_write) \ - devcb = &downcast(*device).set_atn_wr_callback(DEVCB_##_write); + downcast(*device).set_atn_wr_callback(DEVCB_##_write); #define MCFG_64H156_SYNC_CALLBACK(_write) \ - devcb = &downcast(*device).set_sync_wr_callback(DEVCB_##_write); + downcast(*device).set_sync_wr_callback(DEVCB_##_write); #define MCFG_64H156_BYTE_CALLBACK(_write) \ - devcb = &downcast(*device).set_byte_wr_callback(DEVCB_##_write); + downcast(*device).set_byte_wr_callback(DEVCB_##_write); diff --git a/src/devices/machine/6522via.cpp b/src/devices/machine/6522via.cpp index 9c6b2936c8c..cd6588374c5 100644 --- a/src/devices/machine/6522via.cpp +++ b/src/devices/machine/6522via.cpp @@ -954,7 +954,7 @@ WRITE8_MEMBER( via6522_device::write ) } } -void via6522_device::write_pa(int line, int state) +void via6522_device::set_pa_line(int line, int state) { if (state) m_in_a |= (1 << line); @@ -1020,7 +1020,7 @@ WRITE_LINE_MEMBER( via6522_device::write_ca2 ) } } -void via6522_device::write_pb(int line, int state) +void via6522_device::set_pb_line(int line, int state) { if (state) m_in_b |= (1 << line); diff --git a/src/devices/machine/6522via.h b/src/devices/machine/6522via.h index facb67b34a3..5b3823b2b5c 100644 --- a/src/devices/machine/6522via.h +++ b/src/devices/machine/6522via.h @@ -24,29 +24,29 @@ // TODO: REMOVE THESE #define MCFG_VIA6522_READPA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_readpa_handler(DEVCB_##_devcb); + downcast(*device).set_readpa_handler(DEVCB_##_devcb); #define MCFG_VIA6522_READPB_HANDLER(_devcb) \ - devcb = &downcast(*device).set_readpb_handler(DEVCB_##_devcb); + downcast(*device).set_readpb_handler(DEVCB_##_devcb); // TODO: CONVERT THESE TO WRITE LINE #define MCFG_VIA6522_WRITEPA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_writepa_handler(DEVCB_##_devcb); + downcast(*device).set_writepa_handler(DEVCB_##_devcb); #define MCFG_VIA6522_WRITEPB_HANDLER(_devcb) \ - devcb = &downcast(*device).set_writepb_handler(DEVCB_##_devcb); + downcast(*device).set_writepb_handler(DEVCB_##_devcb); #define MCFG_VIA6522_CA2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ca2_handler(DEVCB_##_devcb); + downcast(*device).set_ca2_handler(DEVCB_##_devcb); #define MCFG_VIA6522_CB1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cb1_handler(DEVCB_##_devcb); + downcast(*device).set_cb1_handler(DEVCB_##_devcb); #define MCFG_VIA6522_CB2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cb2_handler(DEVCB_##_devcb); + downcast(*device).set_cb2_handler(DEVCB_##_devcb); #define MCFG_VIA6522_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); /*************************************************************************** @@ -85,41 +85,49 @@ public: // TODO: REMOVE THESE template devcb_base &set_readpa_handler(Object &&cb) { return m_in_a_handler.set_callback(std::forward(cb)); } template devcb_base &set_readpb_handler(Object &&cb) { return m_in_b_handler.set_callback(std::forward(cb)); } + auto readpa_handler() { return m_in_a_handler.bind(); } + auto readpb_handler() { return m_in_b_handler.bind(); } // TODO: CONVERT THESE TO WRITE LINE template devcb_base &set_writepa_handler(Object &&cb) { return m_out_a_handler.set_callback(std::forward(cb)); } template devcb_base &set_writepb_handler(Object &&cb) { return m_out_b_handler.set_callback(std::forward(cb)); } + auto writepa_handler() { return m_out_a_handler.bind(); } + auto writepb_handler() { return m_out_b_handler.bind(); } template devcb_base &set_ca2_handler(Object &&cb) { return m_ca2_handler.set_callback(std::forward(cb)); } template devcb_base &set_cb1_handler(Object &&cb) { return m_cb1_handler.set_callback(std::forward(cb)); } template devcb_base &set_cb2_handler(Object &&cb) { return m_cb2_handler.set_callback(std::forward(cb)); } template devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward(cb)); } + auto ca2_handler() { return m_ca2_handler.bind(); } + auto cb1_handler() { return m_cb1_handler.bind(); } + auto cb2_handler() { return m_cb2_handler.bind(); } + auto irq_handler() { return m_irq_handler.bind(); } virtual void map(address_map &map); DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); - DECLARE_WRITE_LINE_MEMBER( write_pa0 ) { write_pa(0, state); } - DECLARE_WRITE_LINE_MEMBER( write_pa1 ) { write_pa(1, state); } - DECLARE_WRITE_LINE_MEMBER( write_pa2 ) { write_pa(2, state); } - DECLARE_WRITE_LINE_MEMBER( write_pa3 ) { write_pa(3, state); } - DECLARE_WRITE_LINE_MEMBER( write_pa4 ) { write_pa(4, state); } - DECLARE_WRITE_LINE_MEMBER( write_pa5 ) { write_pa(5, state); } - DECLARE_WRITE_LINE_MEMBER( write_pa6 ) { write_pa(6, state); } - DECLARE_WRITE_LINE_MEMBER( write_pa7 ) { write_pa(7, state); } + DECLARE_WRITE_LINE_MEMBER( write_pa0 ) { set_pa_line(0, state); } + DECLARE_WRITE_LINE_MEMBER( write_pa1 ) { set_pa_line(1, state); } + DECLARE_WRITE_LINE_MEMBER( write_pa2 ) { set_pa_line(2, state); } + DECLARE_WRITE_LINE_MEMBER( write_pa3 ) { set_pa_line(3, state); } + DECLARE_WRITE_LINE_MEMBER( write_pa4 ) { set_pa_line(4, state); } + DECLARE_WRITE_LINE_MEMBER( write_pa5 ) { set_pa_line(5, state); } + DECLARE_WRITE_LINE_MEMBER( write_pa6 ) { set_pa_line(6, state); } + DECLARE_WRITE_LINE_MEMBER( write_pa7 ) { set_pa_line(7, state); } DECLARE_WRITE8_MEMBER( write_pa ); DECLARE_WRITE_LINE_MEMBER( write_ca1 ); DECLARE_WRITE_LINE_MEMBER( write_ca2 ); - DECLARE_WRITE_LINE_MEMBER( write_pb0 ) { write_pb(0, state); } - DECLARE_WRITE_LINE_MEMBER( write_pb1 ) { write_pb(1, state); } - DECLARE_WRITE_LINE_MEMBER( write_pb2 ) { write_pb(2, state); } - DECLARE_WRITE_LINE_MEMBER( write_pb3 ) { write_pb(3, state); } - DECLARE_WRITE_LINE_MEMBER( write_pb4 ) { write_pb(4, state); } - DECLARE_WRITE_LINE_MEMBER( write_pb5 ) { write_pb(5, state); } - DECLARE_WRITE_LINE_MEMBER( write_pb6 ) { write_pb(6, state); } - DECLARE_WRITE_LINE_MEMBER( write_pb7 ) { write_pb(7, state); } + DECLARE_WRITE_LINE_MEMBER( write_pb0 ) { set_pb_line(0, state); } + DECLARE_WRITE_LINE_MEMBER( write_pb1 ) { set_pb_line(1, state); } + DECLARE_WRITE_LINE_MEMBER( write_pb2 ) { set_pb_line(2, state); } + DECLARE_WRITE_LINE_MEMBER( write_pb3 ) { set_pb_line(3, state); } + DECLARE_WRITE_LINE_MEMBER( write_pb4 ) { set_pb_line(4, state); } + DECLARE_WRITE_LINE_MEMBER( write_pb5 ) { set_pb_line(5, state); } + DECLARE_WRITE_LINE_MEMBER( write_pb6 ) { set_pb_line(6, state); } + DECLARE_WRITE_LINE_MEMBER( write_pb7 ) { set_pb_line(7, state); } DECLARE_WRITE8_MEMBER( write_pb ); DECLARE_WRITE_LINE_MEMBER( write_cb1 ); DECLARE_WRITE_LINE_MEMBER( write_cb2 ); @@ -143,8 +151,8 @@ private: void clear_int(int data); void shift_out(); void shift_in(); - void write_pa(int line, int state); - void write_pb(int line, int state); + void set_pa_line(int line, int state); + void set_pb_line(int line, int state); uint8_t input_pa(); void output_pa(); diff --git a/src/devices/machine/6525tpi.h b/src/devices/machine/6525tpi.h index a844de2ac0f..a17b0ebb01c 100644 --- a/src/devices/machine/6525tpi.h +++ b/src/devices/machine/6525tpi.h @@ -125,31 +125,31 @@ DECLARE_DEVICE_TYPE(TPI6525, tpi6525_device) #define MCFG_TPI6525_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_TPI6525_IN_PA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_TPI6525_OUT_PA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_TPI6525_IN_PB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_TPI6525_OUT_PB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); #define MCFG_TPI6525_IN_PC_CB(_devcb) \ - devcb = &downcast(*device).set_in_pc_callback(DEVCB_##_devcb); + downcast(*device).set_in_pc_callback(DEVCB_##_devcb); #define MCFG_TPI6525_OUT_PC_CB(_devcb) \ - devcb = &downcast(*device).set_out_pc_callback(DEVCB_##_devcb); + downcast(*device).set_out_pc_callback(DEVCB_##_devcb); #define MCFG_TPI6525_OUT_CA_CB(_devcb) \ - devcb = &downcast(*device).set_out_ca_callback(DEVCB_##_devcb); + downcast(*device).set_out_ca_callback(DEVCB_##_devcb); #define MCFG_TPI6525_OUT_CB_CB(_devcb) \ - devcb = &downcast(*device).set_out_cb_callback(DEVCB_##_devcb); + downcast(*device).set_out_cb_callback(DEVCB_##_devcb); #endif // MAME_MACHINE_6525TPI_H diff --git a/src/devices/machine/6532riot.h b/src/devices/machine/6532riot.h index f51aa8766f5..25dbbcb1acc 100644 --- a/src/devices/machine/6532riot.h +++ b/src/devices/machine/6532riot.h @@ -18,19 +18,19 @@ //************************************************************************** #define MCFG_RIOT6532_IN_PA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_RIOT6532_OUT_PA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_RIOT6532_IN_PB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_RIOT6532_OUT_PB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); #define MCFG_RIOT6532_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); /*************************************************************************** diff --git a/src/devices/machine/68153bim.h b/src/devices/machine/68153bim.h index 0a81715ca18..a0e223b6b2e 100644 --- a/src/devices/machine/68153bim.h +++ b/src/devices/machine/68153bim.h @@ -46,25 +46,25 @@ MCFG_DEVICE_ADD(_tag, EI68C153, _clock) #define MCFG_BIM68153_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); // These callback sets INTAL0 and INTAL1 but is probably not needed as the // shorthand OUT_IACK0..OUT_IACK3 below embedd the channel information #define MCFG_BIM68153_OUT_INTAL0_CB(_devcb) \ - devcb = &downcast(*device).set_out_intal0_callback(DEVCB_##_devcb); + downcast(*device).set_out_intal0_callback(DEVCB_##_devcb); #define MCFG_BIM68153_OUT_INTAL1_CB(_devcb) \ - devcb = &downcast(*device).set_out_intal1_callback(DEVCB_##_devcb); + downcast(*device).set_out_intal1_callback(DEVCB_##_devcb); // LOCAL IACK callbacks emulating the INTAL0 and INTAL1 outputs for INTAE requesting a vector from a sub device #define MCFG_BIM68153_OUT_IACK0_CB(_devcb) \ - devcb = &downcast(*device).set_out_iack0_callback(DEVCB_##_devcb); + downcast(*device).set_out_iack0_callback(DEVCB_##_devcb); #define MCFG_BIM68153_OUT_IACK1_CB(_devcb) \ - devcb = &downcast(*device).set_out_iack1_callback(DEVCB_##_devcb); + downcast(*device).set_out_iack1_callback(DEVCB_##_devcb); #define MCFG_BIM68153_OUT_IACK2_CB(_devcb) \ - devcb = &downcast(*device).set_out_iack2_callback(DEVCB_##_devcb); + downcast(*device).set_out_iack2_callback(DEVCB_##_devcb); #define MCFG_BIM68153_OUT_IACK3_CB(_devcb) \ - devcb = &downcast(*device).set_out_iack3_callback(DEVCB_##_devcb); + downcast(*device).set_out_iack3_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/6821pia.h b/src/devices/machine/6821pia.h index 236aae0f301..76fd7f96e2b 100644 --- a/src/devices/machine/6821pia.h +++ b/src/devices/machine/6821pia.h @@ -33,38 +33,38 @@ // TODO: REMOVE THESE #define MCFG_PIA_READPA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_readpa_handler(DEVCB_##_devcb); + downcast(*device).set_readpa_handler(DEVCB_##_devcb); #define MCFG_PIA_READPB_HANDLER(_devcb) \ - devcb = &downcast(*device).set_readpb_handler(DEVCB_##_devcb); + downcast(*device).set_readpb_handler(DEVCB_##_devcb); #define MCFG_PIA_READCA1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_readca1_handler(DEVCB_##_devcb); + downcast(*device).set_readca1_handler(DEVCB_##_devcb); #define MCFG_PIA_READCA2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_readca2_handler(DEVCB_##_devcb); + downcast(*device).set_readca2_handler(DEVCB_##_devcb); #define MCFG_PIA_READCB1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_readcb1_handler(DEVCB_##_devcb); + downcast(*device).set_readcb1_handler(DEVCB_##_devcb); // TODO: CONVERT THESE TO WRITE LINE #define MCFG_PIA_WRITEPA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_writepa_handler(DEVCB_##_devcb); + downcast(*device).set_writepa_handler(DEVCB_##_devcb); #define MCFG_PIA_WRITEPB_HANDLER(_devcb) \ - devcb = &downcast(*device).set_writepb_handler(DEVCB_##_devcb); + downcast(*device).set_writepb_handler(DEVCB_##_devcb); #define MCFG_PIA_CA2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ca2_handler(DEVCB_##_devcb); + downcast(*device).set_ca2_handler(DEVCB_##_devcb); #define MCFG_PIA_CB2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cb2_handler(DEVCB_##_devcb); + downcast(*device).set_cb2_handler(DEVCB_##_devcb); #define MCFG_PIA_IRQA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irqa_handler(DEVCB_##_devcb); + downcast(*device).set_irqa_handler(DEVCB_##_devcb); #define MCFG_PIA_IRQB_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irqb_handler(DEVCB_##_devcb); + downcast(*device).set_irqb_handler(DEVCB_##_devcb); /*************************************************************************** @@ -86,15 +86,26 @@ public: template devcb_base &set_readca1_handler(Obj &&object) { return m_in_ca1_handler.set_callback(std::forward(object)); } template devcb_base &set_readca2_handler(Obj &&object) { return m_in_ca2_handler.set_callback(std::forward(object)); } template devcb_base &set_readcb1_handler(Obj &&object) { return m_in_cb1_handler.set_callback(std::forward(object)); } + auto readpa_handler() { return m_in_a_handler.bind(); } + auto readpb_handler() { return m_in_b_handler.bind(); } + auto readca1_handler() { return m_in_ca1_handler.bind(); } + auto readca2_handler() { return m_in_ca2_handler.bind(); } + auto readcb1_handler() { return m_in_cb1_handler.bind(); } // TODO: CONVERT THESE TO WRITE LINE template devcb_base &set_writepa_handler(Obj &&object) { return m_out_a_handler.set_callback(std::forward(object)); } template devcb_base &set_writepb_handler(Obj &&object) { return m_out_b_handler.set_callback(std::forward(object)); } + auto writepa_handler() { return m_out_a_handler.bind(); } + auto writepb_handler() { return m_out_b_handler.bind(); } template devcb_base &set_ca2_handler(Obj &&object) { return m_ca2_handler.set_callback(std::forward(object)); } template devcb_base &set_cb2_handler(Obj &&object) { return m_cb2_handler.set_callback(std::forward(object)); } template devcb_base &set_irqa_handler(Obj &&object) { return m_irqa_handler.set_callback(std::forward(object)); } template devcb_base &set_irqb_handler(Obj &&object) { return m_irqb_handler.set_callback(std::forward(object)); } + auto ca2_handler() { return m_ca2_handler.bind(); } + auto cb2_handler() { return m_cb2_handler.bind(); } + auto irqa_handler() { return m_irqa_handler.bind(); } + auto irqb_handler() { return m_irqb_handler.bind(); } uint8_t reg_r(uint8_t offset); void reg_w(uint8_t offset, uint8_t data); diff --git a/src/devices/machine/68230pit.h b/src/devices/machine/68230pit.h index c155c1d6b29..eaf7356d202 100644 --- a/src/devices/machine/68230pit.h +++ b/src/devices/machine/68230pit.h @@ -43,40 +43,40 @@ //************************************************************************** #define MCFG_PIT68230_PA_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pa_in_callback(DEVCB_##_devcb); + downcast(*device).set_pa_in_callback(DEVCB_##_devcb); #define MCFG_PIT68230_PA_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pa_out_callback(DEVCB_##_devcb); + downcast(*device).set_pa_out_callback(DEVCB_##_devcb); #define MCFG_PIT68230_PB_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pb_in_callback(DEVCB_##_devcb); + downcast(*device).set_pb_in_callback(DEVCB_##_devcb); #define MCFG_PIT68230_PB_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pb_out_callback(DEVCB_##_devcb); + downcast(*device).set_pb_out_callback(DEVCB_##_devcb); #define MCFG_PIT68230_PC_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pc_in_callback(DEVCB_##_devcb); + downcast(*device).set_pc_in_callback(DEVCB_##_devcb); #define MCFG_PIT68230_PC_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pc_out_callback(DEVCB_##_devcb); + downcast(*device).set_pc_out_callback(DEVCB_##_devcb); #define MCFG_PIT68230_H1_CB(_devcb) \ - devcb = &downcast(*device).set_h1_out_callback(DEVCB_##_devcb); + downcast(*device).set_h1_out_callback(DEVCB_##_devcb); #define MCFG_PIT68230_H2_CB(_devcb) \ - devcb = &downcast(*device).set_h2_out_callback(DEVCB_##_devcb); + downcast(*device).set_h2_out_callback(DEVCB_##_devcb); #define MCFG_PIT68230_H3_CB(_devcb) \ - devcb = &downcast(*device).set_h3_out_callback(DEVCB_##_devcb); + downcast(*device).set_h3_out_callback(DEVCB_##_devcb); #define MCFG_PIT68230_H4_CB(_devcb) \ - devcb = &downcast(*device).set_h4_out_callback(DEVCB_##_devcb); + downcast(*device).set_h4_out_callback(DEVCB_##_devcb); #define MCFG_PIT68230_TIMER_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_tirq_out_callback(DEVCB_##_devcb); + downcast(*device).set_tirq_out_callback(DEVCB_##_devcb); #define MCFG_PIT68230_PORT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_pirq_out_callback(DEVCB_##_devcb); + downcast(*device).set_pirq_out_callback(DEVCB_##_devcb); /*----------------------------------------------------------------------- * Registers RS1-RS5 R/W Description diff --git a/src/devices/machine/68307.h b/src/devices/machine/68307.h index c159dfd796b..cce3630aede 100644 --- a/src/devices/machine/68307.h +++ b/src/devices/machine/68307.h @@ -12,17 +12,17 @@ /* trampolines so we can specify the 68681 serial configuration when adding the CPU */ #define MCFG_MC68307_SERIAL_A_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_a_tx_cb(DEVCB_##_cb); + downcast(*device).set_a_tx_cb(DEVCB_##_cb); #define MCFG_MC68307_SERIAL_B_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_b_tx_cb(DEVCB_##_cb); + downcast(*device).set_b_tx_cb(DEVCB_##_cb); // deprecated: use ipX_w() instead #define MCFG_MC68307_SERIAL_INPORT_CALLBACK(_cb) \ - devcb = &downcast(*device).set_inport_cb(DEVCB_##_cb); + downcast(*device).set_inport_cb(DEVCB_##_cb); #define MCFG_MC68307_SERIAL_OUTPORT_CALLBACK(_cb) \ - devcb = &downcast(*device).set_outport_cb(DEVCB_##_cb); + downcast(*device).set_outport_cb(DEVCB_##_cb); class m68307_cpu_device : public m68000_device diff --git a/src/devices/machine/68340.h b/src/devices/machine/68340.h index fcec19e453d..29febd8ef75 100644 --- a/src/devices/machine/68340.h +++ b/src/devices/machine/68340.h @@ -17,37 +17,37 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** #define MCFG_MC68340_PA_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pa_in_callback(DEVCB_##_devcb); + downcast(*device).set_pa_in_callback(DEVCB_##_devcb); #define MCFG_MC68340_PA_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pa_out_callback(DEVCB_##_devcb); + downcast(*device).set_pa_out_callback(DEVCB_##_devcb); #define MCFG_MC68340_PB_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pb_in_callback(DEVCB_##_devcb); + downcast(*device).set_pb_in_callback(DEVCB_##_devcb); #define MCFG_MC68340_PB_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_pb_out_callback(DEVCB_##_devcb); + downcast(*device).set_pb_out_callback(DEVCB_##_devcb); #define MCFG_MC68340_ADD_CRYSTAL(_crystal) \ downcast(*device).set_crystal(_crystal); #define MCFG_MC68340_TOUT1_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_tout1_out_callback(DEVCB_##_devcb); + downcast(*device).set_tout1_out_callback(DEVCB_##_devcb); #define MCFG_MC68340_TIN1_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_tin1_out_callback(DEVCB_##_devcb); + downcast(*device).set_tin1_out_callback(DEVCB_##_devcb); #define MCFG_MC68340_TGATE1_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_tgate1_out_callback(DEVCB_##_devcb); + downcast(*device).set_tgate1_out_callback(DEVCB_##_devcb); #define MCFG_MC68340_TOUT2_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_tout2_out_callback(DEVCB_##_devcb); + downcast(*device).set_tout2_out_callback(DEVCB_##_devcb); #define MCFG_MC68340_TIN2_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_tin2_out_callback(DEVCB_##_devcb); + downcast(*device).set_tin2_out_callback(DEVCB_##_devcb); #define MCFG_MC68340_TGATE2_INPUT_CB(_devcb) \ - devcb = &downcast(*device).set_tgate2_out_callback(DEVCB_##_devcb); + downcast(*device).set_tgate2_out_callback(DEVCB_##_devcb); class m68340_cpu_device : public fscpu32_device { diff --git a/src/devices/machine/6840ptm.h b/src/devices/machine/6840ptm.h index 0fd9f3b1196..dbae5eeeb23 100644 --- a/src/devices/machine/6840ptm.h +++ b/src/devices/machine/6840ptm.h @@ -23,16 +23,16 @@ downcast(*device).set_external_clocks(_clk0, _clk1, _clk2); #define MCFG_PTM6840_O1_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback(0, DEVCB_##_devcb); + downcast(*device).set_out_callback(0, DEVCB_##_devcb); #define MCFG_PTM6840_O2_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback(1, DEVCB_##_devcb); + downcast(*device).set_out_callback(1, DEVCB_##_devcb); #define MCFG_PTM6840_O3_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback(2, DEVCB_##_devcb); + downcast(*device).set_out_callback(2, DEVCB_##_devcb); #define MCFG_PTM6840_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS @@ -50,6 +50,10 @@ public: void set_external_clocks(const XTAL &clock0, const XTAL &clock1, const XTAL &clock2) { set_external_clocks(clock0.dvalue(), clock1.dvalue(), clock2.dvalue()); } template devcb_base &set_out_callback(int index, Object &&cb) { return m_out_cb[index].set_callback(std::forward(cb)); } template devcb_base &set_irq_callback(Object &&cb) { return m_irq_cb.set_callback(std::forward(cb)); } + auto o1_callback() { return m_out_cb[0].bind(); } + auto o2_callback() { return m_out_cb[1].bind(); } + auto o3_callback() { return m_out_cb[2].bind(); } + auto irq_callback() { return m_irq_cb.bind(); } int status(int clock) const { return m_enabled[clock]; } // get whether timer is enabled int irq_state() const { return m_irq; } // get IRQ state diff --git a/src/devices/machine/6850acia.h b/src/devices/machine/6850acia.h index 1dc975911d8..4d4086fd4af 100644 --- a/src/devices/machine/6850acia.h +++ b/src/devices/machine/6850acia.h @@ -15,13 +15,13 @@ #define MCFG_ACIA6850_TXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txd_handler(DEVCB_##_devcb); + downcast(*device).set_txd_handler(DEVCB_##_devcb); #define MCFG_ACIA6850_RTS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rts_handler(DEVCB_##_devcb); + downcast(*device).set_rts_handler(DEVCB_##_devcb); #define MCFG_ACIA6850_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class acia6850_device : public device_t { @@ -33,6 +33,9 @@ public: template devcb_base &set_txd_handler(Object &&cb) { return m_txd_handler.set_callback(std::forward(cb)); } template devcb_base &set_rts_handler(Object &&cb) { return m_rts_handler.set_callback(std::forward(cb)); } template devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward(cb)); } + auto txd_handler() { return m_txd_handler.bind(); } + auto rts_handler() { return m_rts_handler.bind(); } + auto irq_handler() { return m_irq_handler.bind(); } DECLARE_WRITE8_MEMBER( control_w ); DECLARE_READ8_MEMBER( status_r ); diff --git a/src/devices/machine/68561mpcc.h b/src/devices/machine/68561mpcc.h index ad4f4f2dda4..24b3c3c7da7 100644 --- a/src/devices/machine/68561mpcc.h +++ b/src/devices/machine/68561mpcc.h @@ -68,22 +68,22 @@ /* Callbacks to be called by us for signals driven by the MPCC */ #define MCFG_MPCC_OUT_TXD_CB(_devcb) \ - devcb = &downcast(*device).set_out_txd_callback(DEVCB_##_devcb); + downcast(*device).set_out_txd_callback(DEVCB_##_devcb); #define MCFG_MPCC_OUT_DTR_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtr_callback(DEVCB_##_devcb); + downcast(*device).set_out_dtr_callback(DEVCB_##_devcb); #define MCFG_MPCC_OUT_RTS_CB(_devcb) \ - devcb = &downcast(*device).set_out_rts_callback(DEVCB_##_devcb); + downcast(*device).set_out_rts_callback(DEVCB_##_devcb); #define MCFG_MPCC_OUT_TRXC_CB(_devcb) \ - devcb = &downcast(*device).set_out_trxc_callback(DEVCB_##_devcb); + downcast(*device).set_out_trxc_callback(DEVCB_##_devcb); #define MCFG_MPCC_OUT_RTXC_CB(_devcb) \ - devcb = &downcast(*device).set_out_rtxc_callback(DEVCB_##_devcb); + downcast(*device).set_out_rtxc_callback(DEVCB_##_devcb); #define MCFG_MPCC_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); diff --git a/src/devices/machine/7200fifo.h b/src/devices/machine/7200fifo.h index 1b89b53406b..642932691c0 100644 --- a/src/devices/machine/7200fifo.h +++ b/src/devices/machine/7200fifo.h @@ -61,13 +61,13 @@ The following chips are functionally equivalent and pin-compatible. downcast(*device).set_ram_size(_ramsize); #define MCFG_FIFO7200_EF_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ef_handler(DEVCB_##_devcb); + downcast(*device).set_ef_handler(DEVCB_##_devcb); #define MCFG_FIFO7200_FF_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ff_handler(DEVCB_##_devcb); + downcast(*device).set_ff_handler(DEVCB_##_devcb); #define MCFG_FIFO7200_HF_HANDLER(_devcb) \ - devcb = &downcast(*device).set_hf_handler(DEVCB_##_devcb); + downcast(*device).set_hf_handler(DEVCB_##_devcb); diff --git a/src/devices/machine/7400.h b/src/devices/machine/7400.h index 0f7d7cb67a6..a96c02bcf87 100644 --- a/src/devices/machine/7400.h +++ b/src/devices/machine/7400.h @@ -35,16 +35,16 @@ #define MCFG_7400_Y1_CB(_devcb) \ - devcb = &downcast(*device).set_y1_cb(DEVCB_##_devcb); + downcast(*device).set_y1_cb(DEVCB_##_devcb); #define MCFG_7400_Y2_CB(_devcb) \ - devcb = &downcast(*device).set_y2_cb(DEVCB_##_devcb); + downcast(*device).set_y2_cb(DEVCB_##_devcb); #define MCFG_7400_Y3_CB(_devcb) \ - devcb = &downcast(*device).set_y3_cb(DEVCB_##_devcb); + downcast(*device).set_y3_cb(DEVCB_##_devcb); #define MCFG_7400_Y4_CB(_devcb) \ - devcb = &downcast(*device).set_y4_cb(DEVCB_##_devcb); + downcast(*device).set_y4_cb(DEVCB_##_devcb); class ttl7400_device : public device_t diff --git a/src/devices/machine/7404.h b/src/devices/machine/7404.h index 31900c1ac9d..4d767fbfed4 100644 --- a/src/devices/machine/7404.h +++ b/src/devices/machine/7404.h @@ -62,22 +62,22 @@ #define MCFG_7404_Y1_CB(_devcb) \ - devcb = &downcast(*device).set_y1_cb(DEVCB_##_devcb); + downcast(*device).set_y1_cb(DEVCB_##_devcb); #define MCFG_7404_Y2_CB(_devcb) \ - devcb = &downcast(*device).set_y2_cb(DEVCB_##_devcb); + downcast(*device).set_y2_cb(DEVCB_##_devcb); #define MCFG_7404_Y3_CB(_devcb) \ - devcb = &downcast(*device).set_y3_cb(DEVCB_##_devcb); + downcast(*device).set_y3_cb(DEVCB_##_devcb); #define MCFG_7404_Y4_CB(_devcb) \ - devcb = &downcast(*device).set_y4_cb(DEVCB_##_devcb); + downcast(*device).set_y4_cb(DEVCB_##_devcb); #define MCFG_7404_Y5_CB(_devcb) \ - devcb = &downcast(*device).set_y5_cb(DEVCB_##_devcb); + downcast(*device).set_y5_cb(DEVCB_##_devcb); #define MCFG_7404_Y6_CB(_devcb) \ - devcb = &downcast(*device).set_y6_cb(DEVCB_##_devcb); + downcast(*device).set_y6_cb(DEVCB_##_devcb); class ttl7404_device : public device_t { diff --git a/src/devices/machine/74123.h b/src/devices/machine/74123.h index 075e56c8206..b5f0fc7e15b 100644 --- a/src/devices/machine/74123.h +++ b/src/devices/machine/74123.h @@ -76,7 +76,7 @@ downcast(*device).set_clear_pin_value(_value); #define MCFG_TTL74123_OUTPUT_CHANGED_CB(_devcb) \ - devcb = &downcast(*device).set_output_changed_callback(DEVCB_##_devcb); + downcast(*device).set_output_changed_callback(DEVCB_##_devcb); /* constants for the different ways the cap/res can be connected. This determines the formula for calculating the pulse width */ diff --git a/src/devices/machine/74145.h b/src/devices/machine/74145.h index 553d4ee86db..c396c1c1fbf 100644 --- a/src/devices/machine/74145.h +++ b/src/devices/machine/74145.h @@ -18,34 +18,34 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** #define MCFG_TTL74145_OUTPUT_LINE_0_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_0_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_0_callback(DEVCB_##_devcb); #define MCFG_TTL74145_OUTPUT_LINE_1_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_1_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_1_callback(DEVCB_##_devcb); #define MCFG_TTL74145_OUTPUT_LINE_2_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_2_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_2_callback(DEVCB_##_devcb); #define MCFG_TTL74145_OUTPUT_LINE_3_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_3_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_3_callback(DEVCB_##_devcb); #define MCFG_TTL74145_OUTPUT_LINE_4_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_4_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_4_callback(DEVCB_##_devcb); #define MCFG_TTL74145_OUTPUT_LINE_5_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_5_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_5_callback(DEVCB_##_devcb); #define MCFG_TTL74145_OUTPUT_LINE_6_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_6_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_6_callback(DEVCB_##_devcb); #define MCFG_TTL74145_OUTPUT_LINE_7_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_7_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_7_callback(DEVCB_##_devcb); #define MCFG_TTL74145_OUTPUT_LINE_8_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_8_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_8_callback(DEVCB_##_devcb); #define MCFG_TTL74145_OUTPUT_LINE_9_CB(_devcb) \ - devcb = &downcast(*device).set_output_line_9_callback(DEVCB_##_devcb); + downcast(*device).set_output_line_9_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/74153.h b/src/devices/machine/74153.h index 4ce38d32a9e..fc234463e30 100644 --- a/src/devices/machine/74153.h +++ b/src/devices/machine/74153.h @@ -30,10 +30,10 @@ //************************************************************************** #define MCFG_TTL153_ZA_CB(_devcb) \ - devcb = &downcast(*device).set_za_callback(DEVCB_##_devcb); + downcast(*device).set_za_callback(DEVCB_##_devcb); #define MCFG_TTL153_ZB_CB(_devcb) \ - devcb = &downcast(*device).set_zb_callback(DEVCB_##_devcb); + downcast(*device).set_zb_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/74157.h b/src/devices/machine/74157.h index 196194c8ddb..96a23d64235 100644 --- a/src/devices/machine/74157.h +++ b/src/devices/machine/74157.h @@ -30,13 +30,13 @@ //************************************************************************** #define MCFG_74157_A_IN_CB(_devcb) \ - devcb = &downcast(*device).set_a_in_callback(DEVCB_##_devcb); + downcast(*device).set_a_in_callback(DEVCB_##_devcb); #define MCFG_74157_B_IN_CB(_devcb) \ - devcb = &downcast(*device).set_b_in_callback(DEVCB_##_devcb); + downcast(*device).set_b_in_callback(DEVCB_##_devcb); #define MCFG_74157_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback(DEVCB_##_devcb); + downcast(*device).set_out_callback(DEVCB_##_devcb); //************************************************************************** @@ -49,12 +49,15 @@ class ls157_device : public device_t { public: // construction/destruction - ls157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + ls157_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); // static configuration template devcb_base &set_a_in_callback(Object &&cb) { return m_a_in_cb.set_callback(std::forward(cb)); } template devcb_base &set_b_in_callback(Object &&cb) { return m_b_in_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_callback(Object &&cb) { return m_out_cb.set_callback(std::forward(cb)); } + auto a_in_callback() { return m_a_in_cb.bind(); } + auto b_in_callback() { return m_b_in_cb.bind(); } + auto out_callback() { return m_out_cb.bind(); } // data writes DECLARE_WRITE8_MEMBER(a_w) { write_a(data); } diff --git a/src/devices/machine/74161.h b/src/devices/machine/74161.h index 8428411c05b..932428bdb78 100644 --- a/src/devices/machine/74161.h +++ b/src/devices/machine/74161.h @@ -59,22 +59,22 @@ #define MCFG_7416x_QA_CB(_devcb) \ - devcb = &downcast(*device).set_qa_cb(DEVCB_##_devcb); + downcast(*device).set_qa_cb(DEVCB_##_devcb); #define MCFG_7416x_QB_CB(_devcb) \ - devcb = &downcast(*device).set_qb_cb(DEVCB_##_devcb); + downcast(*device).set_qb_cb(DEVCB_##_devcb); #define MCFG_7416x_QC_CB(_devcb) \ - devcb = &downcast(*device).set_qc_cb(DEVCB_##_devcb); + downcast(*device).set_qc_cb(DEVCB_##_devcb); #define MCFG_7416x_QD_CB(_devcb) \ - devcb = &downcast(*device).set_qd_cb(DEVCB_##_devcb); + downcast(*device).set_qd_cb(DEVCB_##_devcb); #define MCFG_7416x_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(DEVCB_##_devcb); + downcast(*device).set_output_cb(DEVCB_##_devcb); #define MCFG_7416x_TC_CB(_devcb) \ - devcb = &downcast(*device).set_tc_cb(DEVCB_##_devcb); + downcast(*device).set_tc_cb(DEVCB_##_devcb); class ttl7416x_device : public device_t { diff --git a/src/devices/machine/74165.h b/src/devices/machine/74165.h index 8b608760572..1db3f2809fe 100644 --- a/src/devices/machine/74165.h +++ b/src/devices/machine/74165.h @@ -31,10 +31,10 @@ //************************************************************************** #define MCFG_TTL165_DATA_CB(_devcb) \ - devcb = &downcast(*device).set_data_callback(DEVCB_##_devcb); + downcast(*device).set_data_callback(DEVCB_##_devcb); #define MCFG_TTL165_QH_CB(_devcb) \ - devcb = &downcast(*device).set_qh_callback(DEVCB_##_devcb); + downcast(*device).set_qh_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/74166.h b/src/devices/machine/74166.h index 77497b1be5e..a256f904bf4 100644 --- a/src/devices/machine/74166.h +++ b/src/devices/machine/74166.h @@ -31,10 +31,10 @@ //************************************************************************** #define MCFG_TTL166_DATA_CB(_devcb) \ - devcb = &downcast(*device).set_data_callback(DEVCB_##_devcb); + downcast(*device).set_data_callback(DEVCB_##_devcb); #define MCFG_TTL166_QH_CB(_devcb) \ - devcb = &downcast(*device).set_qh_callback(DEVCB_##_devcb); + downcast(*device).set_qh_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/74175.h b/src/devices/machine/74175.h index e8f17a5ecbb..f4f1912f085 100644 --- a/src/devices/machine/74175.h +++ b/src/devices/machine/74175.h @@ -49,46 +49,46 @@ #define MCFG_74174_Q1_CB(_devcb) \ - devcb = &downcast(*device).set_q1_cb(DEVCB_##_devcb); + downcast(*device).set_q1_cb(DEVCB_##_devcb); #define MCFG_74174_Q2_CB(_devcb) \ - devcb = &downcast(*device).set_q2_cb(DEVCB_##_devcb); + downcast(*device).set_q2_cb(DEVCB_##_devcb); #define MCFG_74174_Q3_CB(_devcb) \ - devcb = &downcast(*device).set_q3_cb(DEVCB_##_devcb); + downcast(*device).set_q3_cb(DEVCB_##_devcb); #define MCFG_74174_Q4_CB(_devcb) \ - devcb = &downcast(*device).set_q4_cb(DEVCB_##_devcb); + downcast(*device).set_q4_cb(DEVCB_##_devcb); #define MCFG_74175_Q1_CB(_devcb) \ - devcb = &downcast(*device).set_q1_cb(DEVCB_##_devcb); + downcast(*device).set_q1_cb(DEVCB_##_devcb); #define MCFG_74175_Q2_CB(_devcb) \ - devcb = &downcast(*device).set_q2_cb(DEVCB_##_devcb); + downcast(*device).set_q2_cb(DEVCB_##_devcb); #define MCFG_74175_Q3_CB(_devcb) \ - devcb = &downcast(*device).set_q3_cb(DEVCB_##_devcb); + downcast(*device).set_q3_cb(DEVCB_##_devcb); #define MCFG_74175_Q4_CB(_devcb) \ - devcb = &downcast(*device).set_q4_cb(DEVCB_##_devcb); + downcast(*device).set_q4_cb(DEVCB_##_devcb); #define MCFG_74174_Q5_CB(_devcb) \ - devcb = &downcast(*device).set_q5_cb(DEVCB_##_devcb); + downcast(*device).set_q5_cb(DEVCB_##_devcb); #define MCFG_74174_Q6_CB(_devcb) \ - devcb = &downcast(*device).set_q6_cb(DEVCB_##_devcb); + downcast(*device).set_q6_cb(DEVCB_##_devcb); #define MCFG_74175_NOT_Q1_CB(_devcb) \ - devcb = &downcast(*device).set_not_q1_cb(DEVCB_##_devcb); + downcast(*device).set_not_q1_cb(DEVCB_##_devcb); #define MCFG_74175_NOT_Q2_CB(_devcb) \ - devcb = &downcast(*device).set_not_q2_cb(DEVCB_##_devcb); + downcast(*device).set_not_q2_cb(DEVCB_##_devcb); #define MCFG_74175_NOT_Q3_CB(_devcb) \ - devcb = &downcast(*device).set_not_q3_cb(DEVCB_##_devcb); + downcast(*device).set_not_q3_cb(DEVCB_##_devcb); #define MCFG_74175_NOT_Q4_CB(_devcb) \ - devcb = &downcast(*device).set_not_q1_cb(DEVCB_##_devcb); + downcast(*device).set_not_q1_cb(DEVCB_##_devcb); class ttl741745_device : public device_t diff --git a/src/devices/machine/74259.h b/src/devices/machine/74259.h index 60a43a2a55d..990c1f1ca58 100644 --- a/src/devices/machine/74259.h +++ b/src/devices/machine/74259.h @@ -37,24 +37,24 @@ //************************************************************************** #define MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_q_out_cb<0>(DEVCB_##_devcb); + downcast(*device).set_q_out_cb<0>(DEVCB_##_devcb); #define MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_q_out_cb<1>(DEVCB_##_devcb); + downcast(*device).set_q_out_cb<1>(DEVCB_##_devcb); #define MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_q_out_cb<2>(DEVCB_##_devcb); + downcast(*device).set_q_out_cb<2>(DEVCB_##_devcb); #define MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_q_out_cb<3>(DEVCB_##_devcb); + downcast(*device).set_q_out_cb<3>(DEVCB_##_devcb); #define MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_q_out_cb<4>(DEVCB_##_devcb); + downcast(*device).set_q_out_cb<4>(DEVCB_##_devcb); #define MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_q_out_cb<5>(DEVCB_##_devcb); + downcast(*device).set_q_out_cb<5>(DEVCB_##_devcb); #define MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_q_out_cb<6>(DEVCB_##_devcb); + downcast(*device).set_q_out_cb<6>(DEVCB_##_devcb); #define MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_q_out_cb<7>(DEVCB_##_devcb); + downcast(*device).set_q_out_cb<7>(DEVCB_##_devcb); #define MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_parallel_out_cb(DEVCB_##_devcb); + downcast(*device).set_parallel_out_cb(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS @@ -68,6 +68,8 @@ public: // static configuration template devcb_base &set_q_out_cb(Object &&cb) { return m_q_out_cb[Bit].set_callback(std::forward(cb)); } template devcb_base &set_parallel_out_cb(Object &&cb) { return m_parallel_out_cb.set_callback(std::forward(cb)); } + template auto q_out_cb() { return m_q_out_cb[Bit].bind(); } + auto parallel_out_cb() { return m_parallel_out_cb.bind(); } // data write handlers void write_bit(offs_t offset, bool d); diff --git a/src/devices/machine/7474.h b/src/devices/machine/7474.h index 2d4cab1a9df..0a6a678ddfb 100644 --- a/src/devices/machine/7474.h +++ b/src/devices/machine/7474.h @@ -52,10 +52,10 @@ //************************************************************************** #define MCFG_7474_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(DEVCB_##_devcb); + downcast(*device).set_output_cb(DEVCB_##_devcb); #define MCFG_7474_COMP_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_comp_output_cb(DEVCB_##_devcb); + downcast(*device).set_comp_output_cb(DEVCB_##_devcb); //************************************************************************** @@ -73,6 +73,8 @@ public: // static configuration helpers template devcb_base &set_output_cb(Object &&cb) { return m_output_func.set_callback(std::forward(cb)); } template devcb_base &set_comp_output_cb(Object &&cb) { return m_comp_output_func.set_callback(std::forward(cb)); } + auto output_cb() { return m_output_func.bind(); } + auto comp_output_cb() { return m_comp_output_func.bind(); } // public interfaces DECLARE_WRITE_LINE_MEMBER( clear_w ); diff --git a/src/devices/machine/8042kbdc.h b/src/devices/machine/8042kbdc.h index b7f1610497e..2d5b63d96bc 100644 --- a/src/devices/machine/8042kbdc.h +++ b/src/devices/machine/8042kbdc.h @@ -24,19 +24,19 @@ downcast(*device).set_keyboard_type(kbdc8042_device::_kbdt); #define MCFG_KBDC8042_SYSTEM_RESET_CB(_devcb) \ - devcb = &downcast(*device).set_system_reset_callback(DEVCB_##_devcb); + downcast(*device).set_system_reset_callback(DEVCB_##_devcb); #define MCFG_KBDC8042_GATE_A20_CB(_devcb) \ - devcb = &downcast(*device).set_gate_a20_callback(DEVCB_##_devcb); + downcast(*device).set_gate_a20_callback(DEVCB_##_devcb); #define MCFG_KBDC8042_INPUT_BUFFER_FULL_CB(_devcb) \ - devcb = &downcast(*device).set_input_buffer_full_callback(DEVCB_##_devcb); + downcast(*device).set_input_buffer_full_callback(DEVCB_##_devcb); #define MCFG_KBDC8042_OUTPUT_BUFFER_EMPTY_CB(_devcb) \ - devcb = &downcast(*device).set_output_buffer_empty_callback(DEVCB_##_devcb); + downcast(*device).set_output_buffer_empty_callback(DEVCB_##_devcb); #define MCFG_KBDC8042_SPEAKER_CB(_devcb) \ - devcb = &downcast(*device).set_speaker_callback(DEVCB_##_devcb); + downcast(*device).set_speaker_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/82s129.h b/src/devices/machine/82s129.h index 1eb79166a30..9b5ef9d3bf1 100644 --- a/src/devices/machine/82s129.h +++ b/src/devices/machine/82s129.h @@ -47,34 +47,34 @@ #define MCFG_82S126_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_out_cb(DEVCB_##_devcb); + downcast(*device).set_out_cb(DEVCB_##_devcb); #define MCFG_82S126_O1_CB(_devcb) \ - devcb = &downcast(*device).set_o1_cb(DEVCB_##_devcb); + downcast(*device).set_o1_cb(DEVCB_##_devcb); #define MCFG_82S126_O2_CB(_devcb) \ - devcb = &downcast(*device).set_o2_cb(DEVCB_##_devcb); + downcast(*device).set_o2_cb(DEVCB_##_devcb); #define MCFG_82S126_O3_CB(_devcb) \ - devcb = &downcast(*device).set_o3_cb(DEVCB_##_devcb); + downcast(*device).set_o3_cb(DEVCB_##_devcb); #define MCFG_82S126_O4_CB(_devcb) \ - devcb = &downcast(*device).set_o4_cb(DEVCB_##_devcb); + downcast(*device).set_o4_cb(DEVCB_##_devcb); #define MCFG_82S129_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_out_cb(DEVCB_##_devcb); + downcast(*device).set_out_cb(DEVCB_##_devcb); #define MCFG_82S129_O1_CB(_devcb) \ - devcb = &downcast(*device).set_o1_cb(DEVCB_##_devcb); + downcast(*device).set_o1_cb(DEVCB_##_devcb); #define MCFG_82S129_O2_CB(_devcb) \ - devcb = &downcast(*device).set_o2_cb(DEVCB_##_devcb); + downcast(*device).set_o2_cb(DEVCB_##_devcb); #define MCFG_82S129_O3_CB(_devcb) \ - devcb = &downcast(*device).set_o3_cb(DEVCB_##_devcb); + downcast(*device).set_o3_cb(DEVCB_##_devcb); #define MCFG_82S129_O4_CB(_devcb) \ - devcb = &downcast(*device).set_o4_cb(DEVCB_##_devcb); + downcast(*device).set_o4_cb(DEVCB_##_devcb); #define MCFG_82S129_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, PROM82S129, 0) diff --git a/src/devices/machine/8364_paula.h b/src/devices/machine/8364_paula.h index db9ed3727c0..31e2c2661bf 100644 --- a/src/devices/machine/8364_paula.h +++ b/src/devices/machine/8364_paula.h @@ -49,10 +49,10 @@ //************************************************************************** #define MCFG_PAULA_MEM_READ_CB(_devcb) \ - devcb = &downcast(*device).set_mem_r_callback(DEVCB_##_devcb); + downcast(*device).set_mem_r_callback(DEVCB_##_devcb); #define MCFG_PAULA_INT_CB(_devcb) \ - devcb = &downcast(*device).set_int_w_callback(DEVCB_##_devcb); + downcast(*device).set_int_w_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/8530scc.h b/src/devices/machine/8530scc.h index 5333fda0060..457a0d36334 100644 --- a/src/devices/machine/8530scc.h +++ b/src/devices/machine/8530scc.h @@ -12,7 +12,7 @@ #define MAME_MACHINE_8530SCC_H #define MCFG_Z8530_INTRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_intrq_wr_callback(DEVCB_##_write); + downcast(*device).set_intrq_wr_callback(DEVCB_##_write); class scc8530_t : public device_t { diff --git a/src/devices/machine/aakart.h b/src/devices/machine/aakart.h index f432055f59c..661a1f33086 100644 --- a/src/devices/machine/aakart.h +++ b/src/devices/machine/aakart.h @@ -18,10 +18,10 @@ Acorn Archimedes KART interface //************************************************************************** #define MCFG_AAKART_OUT_TX_CB(_devcb) \ - devcb = &downcast(*device).set_out_tx_callback(DEVCB_##_devcb); + downcast(*device).set_out_tx_callback(DEVCB_##_devcb); #define MCFG_AAKART_OUT_RX_CB(_devcb) \ - devcb = &downcast(*device).set_out_rx_callback(DEVCB_##_devcb); + downcast(*device).set_out_rx_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/adc0808.h b/src/devices/machine/adc0808.h index ace9fcf4682..4d717446be0 100644 --- a/src/devices/machine/adc0808.h +++ b/src/devices/machine/adc0808.h @@ -42,35 +42,35 @@ //************************************************************************** #define MCFG_ADC0808_EOC_CB(_devcb) \ - devcb = &downcast(*device).set_eoc_callback(DEVCB_##_devcb); + downcast(*device).set_eoc_callback(DEVCB_##_devcb); // common hookup where the eoc output is connected to a flip-flop #define MCFG_ADC0808_EOC_FF_CB(_devcb) \ - devcb = &downcast(*device).set_eoc_ff_callback(DEVCB_##_devcb); + downcast(*device).set_eoc_ff_callback(DEVCB_##_devcb); #define MCFG_ADC0808_IN0_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 0); + downcast(*device).set_in_callback(DEVCB_##_devcb, 0); #define MCFG_ADC0808_IN1_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 1); + downcast(*device).set_in_callback(DEVCB_##_devcb, 1); #define MCFG_ADC0808_IN2_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 2); + downcast(*device).set_in_callback(DEVCB_##_devcb, 2); #define MCFG_ADC0808_IN3_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 3); + downcast(*device).set_in_callback(DEVCB_##_devcb, 3); #define MCFG_ADC0808_IN4_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 4); + downcast(*device).set_in_callback(DEVCB_##_devcb, 4); #define MCFG_ADC0808_IN5_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 5); + downcast(*device).set_in_callback(DEVCB_##_devcb, 5); #define MCFG_ADC0808_IN6_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 6); + downcast(*device).set_in_callback(DEVCB_##_devcb, 6); #define MCFG_ADC0808_IN7_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 7); + downcast(*device).set_in_callback(DEVCB_##_devcb, 7); //************************************************************************** diff --git a/src/devices/machine/adc0844.h b/src/devices/machine/adc0844.h index e31740b3d09..d7133695128 100644 --- a/src/devices/machine/adc0844.h +++ b/src/devices/machine/adc0844.h @@ -34,19 +34,19 @@ MCFG_DEVICE_ADD(_tag, ADC0844, 0) #define MCFG_ADC0844_INTR_CB(_devcb) \ - devcb = &downcast(*device).set_intr_callback(DEVCB_##_devcb); + downcast(*device).set_intr_callback(DEVCB_##_devcb); #define MCFG_ADC0844_CH1_CB(_devcb) \ - devcb = &downcast(*device).set_ch1_callback(DEVCB_##_devcb); + downcast(*device).set_ch1_callback(DEVCB_##_devcb); #define MCFG_ADC0844_CH2_CB(_devcb) \ - devcb = &downcast(*device).set_ch2_callback(DEVCB_##_devcb); + downcast(*device).set_ch2_callback(DEVCB_##_devcb); #define MCFG_ADC0844_CH3_CB(_devcb) \ - devcb = &downcast(*device).set_ch3_callback(DEVCB_##_devcb); + downcast(*device).set_ch3_callback(DEVCB_##_devcb); #define MCFG_ADC0844_CH4_CB(_devcb) \ - devcb = &downcast(*device).set_ch4_callback(DEVCB_##_devcb); + downcast(*device).set_ch4_callback(DEVCB_##_devcb); #define MCFG_ADC0848_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, ADC0848, 0) @@ -58,16 +58,16 @@ #define MCFG_ADC0848_CH4_CB MCFG_ADC0844_CH4_CB #define MCFG_ADC0848_CH5_CB(_devcb) \ - devcb = &downcast(*device).set_ch5_callback(DEVCB_##_devcb); + downcast(*device).set_ch5_callback(DEVCB_##_devcb); #define MCFG_ADC0848_CH6_CB(_devcb) \ - devcb = &downcast(*device).set_ch6_callback(DEVCB_##_devcb); + downcast(*device).set_ch6_callback(DEVCB_##_devcb); #define MCFG_ADC0848_CH7_CB(_devcb) \ - devcb = &downcast(*device).set_ch7_callback(DEVCB_##_devcb); + downcast(*device).set_ch7_callback(DEVCB_##_devcb); #define MCFG_ADC0848_CH8_CB(_devcb) \ - devcb = &downcast(*device).set_ch8_callback(DEVCB_##_devcb); + downcast(*device).set_ch8_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/akiko.h b/src/devices/machine/akiko.h index d72b5b58ce5..49e2623adbe 100644 --- a/src/devices/machine/akiko.h +++ b/src/devices/machine/akiko.h @@ -29,22 +29,22 @@ MCFG_DEVICE_ADD(_tag, AKIKO, 0) #define MCFG_AKIKO_MEM_READ_CB(_devcb) \ - devcb = &downcast(*device).set_mem_r_callback(DEVCB_##_devcb); + downcast(*device).set_mem_r_callback(DEVCB_##_devcb); #define MCFG_AKIKO_MEM_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_mem_w_callback(DEVCB_##_devcb); + downcast(*device).set_mem_w_callback(DEVCB_##_devcb); #define MCFG_AKIKO_INT_CB(_devcb) \ - devcb = &downcast(*device).set_int_w_callback(DEVCB_##_devcb); + downcast(*device).set_int_w_callback(DEVCB_##_devcb); #define MCFG_AKIKO_SCL_HANDLER(_devcb) \ - devcb = &downcast(*device).set_scl_handler(DEVCB_##_devcb); + downcast(*device).set_scl_handler(DEVCB_##_devcb); #define MCFG_AKIKO_SDA_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sda_read_handler(DEVCB_##_devcb); + downcast(*device).set_sda_read_handler(DEVCB_##_devcb); #define MCFG_AKIKO_SDA_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sda_write_handler(DEVCB_##_devcb); + downcast(*device).set_sda_write_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/am53cf96.h b/src/devices/machine/am53cf96.h index ba7b46ab2c7..02e64599827 100644 --- a/src/devices/machine/am53cf96.h +++ b/src/devices/machine/am53cf96.h @@ -13,7 +13,7 @@ #include "legscsi.h" #define MCFG_AM53CF96_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class am53cf96_device : public legacy_scsi_host_adapter { diff --git a/src/devices/machine/am9513.h b/src/devices/machine/am9513.h index c11a659624f..51fdfd54091 100644 --- a/src/devices/machine/am9513.h +++ b/src/devices/machine/am9513.h @@ -39,17 +39,17 @@ //************************************************************************** #define MCFG_AM9513_OUT1_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_out_cb(0, DEVCB_##_devcb); + downcast(*device).set_out_cb(0, DEVCB_##_devcb); #define MCFG_AM9513_OUT2_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_out_cb(1, DEVCB_##_devcb); + downcast(*device).set_out_cb(1, DEVCB_##_devcb); #define MCFG_AM9513_OUT3_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_out_cb(2, DEVCB_##_devcb); + downcast(*device).set_out_cb(2, DEVCB_##_devcb); #define MCFG_AM9513_OUT4_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_out_cb(3, DEVCB_##_devcb); + downcast(*device).set_out_cb(3, DEVCB_##_devcb); #define MCFG_AM9513_OUT5_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_out_cb(4, DEVCB_##_devcb); + downcast(*device).set_out_cb(4, DEVCB_##_devcb); #define MCFG_AM9513_FOUT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_fout_cb(DEVCB_##_devcb); + downcast(*device).set_fout_cb(DEVCB_##_devcb); @@ -68,6 +68,12 @@ public: // static configuration template devcb_base &set_out_cb(int c, Object &&cb) { assert(c >= 0 && c < 5); return m_out_cb[c].set_callback(std::forward(cb)); } template devcb_base &set_fout_cb(Object &&cb) { return m_fout_cb.set_callback(std::forward(cb)); } + auto out1_cb() { return m_out_cb[0].bind(); } + auto out2_cb() { return m_out_cb[1].bind(); } + auto out3_cb() { return m_out_cb[2].bind(); } + auto out4_cb() { return m_out_cb[3].bind(); } + auto out5_cb() { return m_out_cb[4].bind(); } + auto fout_cb() { return m_fout_cb.bind(); } // 8-bit data bus interface DECLARE_READ8_MEMBER(read8); diff --git a/src/devices/machine/am9517a.h b/src/devices/machine/am9517a.h index 8527dfaa42f..dd262cec356 100644 --- a/src/devices/machine/am9517a.h +++ b/src/devices/machine/am9517a.h @@ -53,13 +53,20 @@ public: template devcb_base &set_out_hreq_callback(Object &&cb) { return m_out_hreq_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_eop_callback(Object &&cb) { return m_out_eop_cb.set_callback(std::forward(cb)); } + auto out_hreq_callback() { return m_out_hreq_cb.bind(); } + auto out_eop_callback() { return m_out_eop_cb.bind(); } template devcb_base &set_in_memr_callback(Object &&cb) { return m_in_memr_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_memw_callback(Object &&cb) { return m_out_memw_cb.set_callback(std::forward(cb)); } + auto in_memr_callback() { return m_in_memr_cb.bind(); } + auto out_memw_callback() { return m_out_memw_cb.bind(); } template devcb_base &set_in_ior_callback(Object &&cb) { return m_in_ior_cb[C].set_callback(std::forward(cb)); } template devcb_base &set_out_iow_callback(Object &&cb) { return m_out_iow_cb[C].set_callback(std::forward(cb)); } template devcb_base &set_out_dack_callback(Object &&cb) { return m_out_dack_cb[C].set_callback(std::forward(cb)); } + template auto in_ior_callback() { return m_in_ior_cb[C].bind(); } + template auto out_iow_callback() { return m_out_iow_cb[C].bind(); } + template auto out_dack_callback() { return m_out_dack_cb[C].bind(); } virtual DECLARE_READ8_MEMBER( read ); virtual DECLARE_WRITE8_MEMBER( write ); @@ -179,52 +186,52 @@ DECLARE_DEVICE_TYPE(PCXPORT_DMAC, pcxport_dmac_device) ***************************************************************************/ #define MCFG_AM9517A_OUT_HREQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_hreq_callback(DEVCB_##_devcb); + downcast(*device).set_out_hreq_callback(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_EOP_CB(_devcb) \ - devcb = &downcast(*device).set_out_eop_callback(DEVCB_##_devcb); + downcast(*device).set_out_eop_callback(DEVCB_##_devcb); #define MCFG_AM9517A_IN_MEMR_CB(_devcb) \ - devcb = &downcast(*device).set_in_memr_callback(DEVCB_##_devcb); + downcast(*device).set_in_memr_callback(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_MEMW_CB(_devcb) \ - devcb = &downcast(*device).set_out_memw_callback(DEVCB_##_devcb); + downcast(*device).set_out_memw_callback(DEVCB_##_devcb); #define MCFG_AM9517A_IN_IOR_0_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_callback<0>(DEVCB_##_devcb); + downcast(*device).set_in_ior_callback<0>(DEVCB_##_devcb); #define MCFG_AM9517A_IN_IOR_1_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_callback<1>(DEVCB_##_devcb); + downcast(*device).set_in_ior_callback<1>(DEVCB_##_devcb); #define MCFG_AM9517A_IN_IOR_2_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_callback<2>(DEVCB_##_devcb); + downcast(*device).set_in_ior_callback<2>(DEVCB_##_devcb); #define MCFG_AM9517A_IN_IOR_3_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_callback<3>(DEVCB_##_devcb); + downcast(*device).set_in_ior_callback<3>(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_IOW_0_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_iow_callback<0>(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_IOW_1_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_iow_callback<1>(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_IOW_2_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_callback<2>(DEVCB_##_devcb); + downcast(*device).set_out_iow_callback<2>(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_IOW_3_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_callback<3>(DEVCB_##_devcb); + downcast(*device).set_out_iow_callback<3>(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_DACK_0_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_dack_callback<0>(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_DACK_1_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_dack_callback<1>(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_DACK_2_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_callback<2>(DEVCB_##_devcb); + downcast(*device).set_out_dack_callback<2>(DEVCB_##_devcb); #define MCFG_AM9517A_OUT_DACK_3_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_callback<3>(DEVCB_##_devcb); + downcast(*device).set_out_dack_callback<3>(DEVCB_##_devcb); #define MCFG_I8237_OUT_HREQ_CB MCFG_AM9517A_OUT_HREQ_CB #define MCFG_I8237_OUT_EOP_CB MCFG_AM9517A_OUT_EOP_CB diff --git a/src/devices/machine/am9519.h b/src/devices/machine/am9519.h index 27ac1e9a46e..cae08467b40 100644 --- a/src/devices/machine/am9519.h +++ b/src/devices/machine/am9519.h @@ -33,7 +33,7 @@ ***************************************************************************/ #define MCFG_AM9519_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).static_set_out_int_callback(DEVCB_##_devcb); + downcast(*device).static_set_out_int_callback(DEVCB_##_devcb); class am9519_device : public device_t diff --git a/src/devices/machine/amigafdc.h b/src/devices/machine/amigafdc.h index e95e1ed0137..1cd55ca1d18 100644 --- a/src/devices/machine/amigafdc.h +++ b/src/devices/machine/amigafdc.h @@ -8,19 +8,19 @@ #include "imagedev/floppy.h" #define MCFG_AMIGA_FDC_INDEX_CALLBACK(_write) \ - devcb = &downcast(*device).set_index_wr_callback(DEVCB_##_write); + downcast(*device).set_index_wr_callback(DEVCB_##_write); #define MCFG_AMIGA_FDC_READ_DMA_CALLBACK(_read) \ - devcb = &downcast(*device).set_dma_rd_callback(DEVCB_##_read); + downcast(*device).set_dma_rd_callback(DEVCB_##_read); #define MCFG_AMIGA_FDC_WRITE_DMA_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma_wr_callback(DEVCB_##_write); + downcast(*device).set_dma_wr_callback(DEVCB_##_write); #define MCFG_AMIGA_FDC_DSKBLK_CALLBACK(_write) \ - devcb = &downcast(*device).set_dskblk_wr_callback(DEVCB_##_write); + downcast(*device).set_dskblk_wr_callback(DEVCB_##_write); #define MCFG_AMIGA_FDC_DSKSYN_CALLBACK(_write) \ - devcb = &downcast(*device).set_dsksyn_wr_callback(DEVCB_##_write); + downcast(*device).set_dsksyn_wr_callback(DEVCB_##_write); class amiga_fdc_device : public device_t { public: diff --git a/src/devices/machine/at45dbxx.h b/src/devices/machine/at45dbxx.h index f215a22c7fe..c0df28a49f4 100644 --- a/src/devices/machine/at45dbxx.h +++ b/src/devices/machine/at45dbxx.h @@ -32,7 +32,7 @@ MCFG_DEVICE_ADD(_tag, AT45DB161, 0) #define MCFG_AT45DBXXX_SO_CALLBACK(_cb) \ - devcb = &downcast(*device).set_so_cb(DEVCB_##_cb); + downcast(*device).set_so_cb(DEVCB_##_cb); // ======================> at45db041_device diff --git a/src/devices/machine/at_keybc.h b/src/devices/machine/at_keybc.h index b32a85286d1..a80887d2918 100644 --- a/src/devices/machine/at_keybc.h +++ b/src/devices/machine/at_keybc.h @@ -19,22 +19,22 @@ //************************************************************************** #define MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(_devcb) \ - devcb = &downcast(*device).set_system_reset_callback(DEVCB_##_devcb); + downcast(*device).set_system_reset_callback(DEVCB_##_devcb); #define MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(_devcb) \ - devcb = &downcast(*device).set_gate_a20_callback(DEVCB_##_devcb); + downcast(*device).set_gate_a20_callback(DEVCB_##_devcb); #define MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(_devcb) \ - devcb = &downcast(*device).set_input_buffer_full_callback(DEVCB_##_devcb); + downcast(*device).set_input_buffer_full_callback(DEVCB_##_devcb); #define MCFG_AT_KEYBOARD_CONTROLLER_OUTPUT_BUFFER_EMPTY_CB(_devcb) \ - devcb = &downcast(*device).set_output_buffer_empty_callback(DEVCB_##_devcb); + downcast(*device).set_output_buffer_empty_callback(DEVCB_##_devcb); #define MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(_devcb) \ - devcb = &downcast(*device).set_keyboard_clock_callback(DEVCB_##_devcb); + downcast(*device).set_keyboard_clock_callback(DEVCB_##_devcb); #define MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(_devcb) \ - devcb = &downcast(*device).set_keyboard_data_callback(DEVCB_##_devcb); + downcast(*device).set_keyboard_data_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/ataintf.h b/src/devices/machine/ataintf.h index 202803e70e8..cd11d90180c 100644 --- a/src/devices/machine/ataintf.h +++ b/src/devices/machine/ataintf.h @@ -47,13 +47,13 @@ DECLARE_DEVICE_TYPE(ATA_SLOT, ata_slot_device) ***************************************************************************/ #define MCFG_ATA_INTERFACE_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_ATA_INTERFACE_DMARQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dmarq_handler(DEVCB_##_devcb); + downcast(*device).set_dmarq_handler(DEVCB_##_devcb); #define MCFG_ATA_INTERFACE_DASP_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dasp_handler(DEVCB_##_devcb); + downcast(*device).set_dasp_handler(DEVCB_##_devcb); void ata_devices(device_slot_interface &device); diff --git a/src/devices/machine/atmel_arm_aic.h b/src/devices/machine/atmel_arm_aic.h index db30986bb2d..b91c1b2598f 100644 --- a/src/devices/machine/atmel_arm_aic.h +++ b/src/devices/machine/atmel_arm_aic.h @@ -12,7 +12,7 @@ DECLARE_DEVICE_TYPE(ARM_AIC, arm_aic_device) MCFG_DEVICE_ADD(_tag, ARM_AIC, 0) #define MCFG_IRQ_LINE_CB(_devcb) \ - devcb = &downcast(*device).set_line_callback(DEVCB_##_devcb); + downcast(*device).set_line_callback(DEVCB_##_devcb); class arm_aic_device : public device_t { diff --git a/src/devices/machine/ay31015.h b/src/devices/machine/ay31015.h index 85206d673c3..35169536e31 100644 --- a/src/devices/machine/ay31015.h +++ b/src/devices/machine/ay31015.h @@ -33,6 +33,14 @@ public: template devcb_base &set_write_dav_callback(Object &&cb) { return m_write_dav_cb.set_callback(std::forward(cb)); } template devcb_base &set_write_tbmt_callback(Object &&cb) { return m_write_tbmt_cb.set_callback(std::forward(cb)); } template devcb_base &set_write_eoc_callback(Object &&cb) { return m_write_eoc_cb.set_callback(std::forward(cb)); } + auto read_si_callback() { return m_read_si_cb.bind(); } + auto write_so_callback() { return m_write_so_cb.bind(); } + auto write_pe_callback() { return m_write_pe_cb.bind(); } + auto write_fe_callback() { return m_write_fe_cb.bind(); } + auto write_or_callback() { return m_write_or_cb.bind(); } + auto write_dav_callback() { return m_write_dav_cb.bind(); } + auto write_tbmt_callback() { return m_write_tbmt_cb.bind(); } + auto write_eoc_callback() { return m_write_eoc_cb.bind(); } /* Set an input pin */ DECLARE_WRITE_LINE_MEMBER(write_swe) { set_input_pin(SWE, state); } @@ -208,28 +216,28 @@ DECLARE_DEVICE_TYPE(AY51013, ay51013_device) // For AY-3-1014, AY-5-1013 and A downcast(*device).set_auto_rdav(_auto_rdav); #define MCFG_AY31015_READ_SI_CB(_devcb) \ - devcb = &downcast(*device).set_read_si_callback(DEVCB_##_devcb); + downcast(*device).set_read_si_callback(DEVCB_##_devcb); #define MCFG_AY31015_WRITE_SO_CB(_devcb) \ - devcb = &downcast(*device).set_write_so_callback(DEVCB_##_devcb); + downcast(*device).set_write_so_callback(DEVCB_##_devcb); #define MCFG_AY31015_WRITE_PE_CB(_devcb) \ - devcb = &downcast(*device).set_write_pe_callback(DEVCB_##_devcb); + downcast(*device).set_write_pe_callback(DEVCB_##_devcb); #define MCFG_AY31015_WRITE_FE_CB(_devcb) \ - devcb = &downcast(*device).set_write_fe_callback(DEVCB_##_devcb); + downcast(*device).set_write_fe_callback(DEVCB_##_devcb); #define MCFG_AY31015_WRITE_OR_CB(_devcb) \ - devcb = &downcast(*device).set_write_or_callback(DEVCB_##_devcb); + downcast(*device).set_write_or_callback(DEVCB_##_devcb); #define MCFG_AY31015_WRITE_DAV_CB(_devcb) \ - devcb = &downcast(*device).set_write_dav_callback(DEVCB_##_devcb); + downcast(*device).set_write_dav_callback(DEVCB_##_devcb); #define MCFG_AY31015_WRITE_TBMT_CB(_devcb) \ - devcb = &downcast(*device).set_write_tbmt_callback(DEVCB_##_devcb); + downcast(*device).set_write_tbmt_callback(DEVCB_##_devcb); #define MCFG_AY31015_WRITE_EOC_CB(_devcb) \ - devcb = &downcast(*device).set_write_eoc_callback(DEVCB_##_devcb); + downcast(*device).set_write_eoc_callback(DEVCB_##_devcb); #define MCFG_AY51013_TX_CLOCK(_txclk) \ @@ -242,27 +250,27 @@ DECLARE_DEVICE_TYPE(AY51013, ay51013_device) // For AY-3-1014, AY-5-1013 and A downcast(*device).set_auto_rdav(_auto_rdav); #define MCFG_AY51013_READ_SI_CB(_devcb) \ - devcb = &downcast(*device).set_read_si_callback(DEVCB_##_devcb); + downcast(*device).set_read_si_callback(DEVCB_##_devcb); #define MCFG_AY51013_WRITE_SO_CB(_devcb) \ - devcb = &downcast(*device).set_write_so_callback(DEVCB_##_devcb); + downcast(*device).set_write_so_callback(DEVCB_##_devcb); #define MCFG_AY51013_WRITE_PE_CB(_devcb) \ - devcb = &downcast(*device).set_write_pe_callback(DEVCB_##_devcb); + downcast(*device).set_write_pe_callback(DEVCB_##_devcb); #define MCFG_AY51013_WRITE_FE_CB(_devcb) \ - devcb = &downcast(*device).set_write_fe_callback(DEVCB_##_devcb); + downcast(*device).set_write_fe_callback(DEVCB_##_devcb); #define MCFG_AY51013_WRITE_OR_CB(_devcb) \ - devcb = &downcast(*device).set_write_or_callback(DEVCB_##_devcb); + downcast(*device).set_write_or_callback(DEVCB_##_devcb); #define MCFG_AY51013_WRITE_DAV_CB(_devcb) \ - devcb = &downcast(*device).set_write_dav_callback(DEVCB_##_devcb); + downcast(*device).set_write_dav_callback(DEVCB_##_devcb); #define MCFG_AY51013_WRITE_TBMT_CB(_devcb) \ - devcb = &downcast(*device).set_write_tbmt_callback(DEVCB_##_devcb); + downcast(*device).set_write_tbmt_callback(DEVCB_##_devcb); #define MCFG_AY51013_WRITE_EOC_CB(_devcb) \ - devcb = &downcast(*device).set_write_eoc_callback(DEVCB_##_devcb); + downcast(*device).set_write_eoc_callback(DEVCB_##_devcb); #endif // MAME_MACHINE_AY31015_H diff --git a/src/devices/machine/busmouse.h b/src/devices/machine/busmouse.h index 07860904e89..b0e4a23370c 100644 --- a/src/devices/machine/busmouse.h +++ b/src/devices/machine/busmouse.h @@ -17,7 +17,7 @@ //************************************************************************** #define MCFG_BUS_MOUSE_EXTINT_CALLBACK(_write) \ - devcb = &bus_mouse_device::set_extint_wr_callback(*device, DEVCB_##_write); + bus_mouse_device::set_extint_wr_callback(*device, DEVCB_##_write); //************************************************************************** diff --git a/src/devices/machine/cdp1852.h b/src/devices/machine/cdp1852.h index 70562f85e7e..ed22bfccaff 100644 --- a/src/devices/machine/cdp1852.h +++ b/src/devices/machine/cdp1852.h @@ -34,16 +34,16 @@ //************************************************************************** #define MCFG_CDP1852_MODE_CALLBACK(_read) \ - devcb = &downcast(*device).set_mode_rd_callback(DEVCB_##_read); + downcast(*device).set_mode_rd_callback(DEVCB_##_read); #define MCFG_CDP1852_SR_CALLBACK(_write) \ - devcb = &downcast(*device).set_sr_wr_callback(DEVCB_##_write); + downcast(*device).set_sr_wr_callback(DEVCB_##_write); #define MCFG_CDP1852_DI_CALLBACK(_read) \ - devcb = &downcast(*device).set_data_rd_callback(DEVCB_##_read); + downcast(*device).set_data_rd_callback(DEVCB_##_read); #define MCFG_CDP1852_DO_CALLBACK(_write) \ - devcb = &downcast(*device).set_data_wr_callback(DEVCB_##_write); + downcast(*device).set_data_wr_callback(DEVCB_##_write); diff --git a/src/devices/machine/cdp1871.h b/src/devices/machine/cdp1871.h index 74ce06d4b9a..31215164a6f 100644 --- a/src/devices/machine/cdp1871.h +++ b/src/devices/machine/cdp1871.h @@ -42,43 +42,43 @@ //************************************************************************** #define MCFG_CDP1871_D1_CALLBACK(_read) \ - devcb = &downcast(*device).set_d1_rd_callback(DEVCB_##_read); + downcast(*device).set_d1_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D2_CALLBACK(_read) \ - devcb = &downcast(*device).set_d2_rd_callback(DEVCB_##_read); + downcast(*device).set_d2_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D3_CALLBACK(_read) \ - devcb = &downcast(*device).set_d3_rd_callback(DEVCB_##_read); + downcast(*device).set_d3_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D4_CALLBACK(_read) \ - devcb = &downcast(*device).set_d4_rd_callback(DEVCB_##_read); + downcast(*device).set_d4_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D5_CALLBACK(_read) \ - devcb = &downcast(*device).set_d5_rd_callback(DEVCB_##_read); + downcast(*device).set_d5_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D6_CALLBACK(_read) \ - devcb = &downcast(*device).set_d6_rd_callback(DEVCB_##_read); + downcast(*device).set_d6_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D7_CALLBACK(_read) \ - devcb = &downcast(*device).set_d7_rd_callback(DEVCB_##_read); + downcast(*device).set_d7_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D8_CALLBACK(_read) \ - devcb = &downcast(*device).set_d8_rd_callback(DEVCB_##_read); + downcast(*device).set_d8_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D9_CALLBACK(_read) \ - devcb = &downcast(*device).set_d9_rd_callback(DEVCB_##_read); + downcast(*device).set_d9_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D10_CALLBACK(_read) \ - devcb = &downcast(*device).set_d10_rd_callback(DEVCB_##_read); + downcast(*device).set_d10_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_D11_CALLBACK(_read) \ - devcb = &downcast(*device).set_d11_rd_callback(DEVCB_##_read); + downcast(*device).set_d11_rd_callback(DEVCB_##_read); #define MCFG_CDP1871_DA_CALLBACK(_write) \ - devcb = &downcast(*device).set_da_wr_callback(DEVCB_##_write); + downcast(*device).set_da_wr_callback(DEVCB_##_write); #define MCFG_CDP1871_RPT_CALLBACK(_write) \ - devcb = &downcast(*device).set_rpt_wr_callback(DEVCB_##_write); + downcast(*device).set_rpt_wr_callback(DEVCB_##_write); diff --git a/src/devices/machine/cdp1879.h b/src/devices/machine/cdp1879.h index 6a3a1faaa36..4563fe7376a 100644 --- a/src/devices/machine/cdp1879.h +++ b/src/devices/machine/cdp1879.h @@ -19,7 +19,7 @@ //************************************************************************** #define MCFG_CDP1879_IRQ_CALLBACK(_cb) \ - devcb = &downcast(*device).set_irq_cb(DEVCB_##_cb); + downcast(*device).set_irq_cb(DEVCB_##_cb); //************************************************************************** diff --git a/src/devices/machine/clock.h b/src/devices/machine/clock.h index dc87e7a4f60..dbe6cd00bd9 100644 --- a/src/devices/machine/clock.h +++ b/src/devices/machine/clock.h @@ -10,14 +10,15 @@ MCFG_DEVICE_ADD(_tag, CLOCK, _clock) #define MCFG_CLOCK_SIGNAL_HANDLER(_devcb) \ - devcb = &downcast(*device).set_signal_handler(DEVCB_##_devcb); + downcast(*device).set_signal_handler(DEVCB_##_devcb); class clock_device : public device_t { public: - clock_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_signal_handler(Object &&cb) { return m_signal_handler.set_callback(std::forward(cb)); } + auto signal_handler() { return m_signal_handler.bind(); } + + clock_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: virtual void device_start() override; diff --git a/src/devices/machine/com8116.h b/src/devices/machine/com8116.h index 44b78920925..1981571fa5c 100644 --- a/src/devices/machine/com8116.h +++ b/src/devices/machine/com8116.h @@ -34,13 +34,13 @@ ///************************************************************************* #define MCFG_COM8116_FX4_HANDLER(_devcb) \ - devcb = &downcast(*device).set_fx4_handler(DEVCB_##_devcb); + downcast(*device).set_fx4_handler(DEVCB_##_devcb); #define MCFG_COM8116_FR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_fr_handler(DEVCB_##_devcb); + downcast(*device).set_fr_handler(DEVCB_##_devcb); #define MCFG_COM8116_FT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ft_handler(DEVCB_##_devcb); + downcast(*device).set_ft_handler(DEVCB_##_devcb); ///************************************************************************* @@ -58,6 +58,9 @@ public: template devcb_base &set_fx4_handler(Object &&cb) { return m_fx4_handler.set_callback(std::forward(cb)); } template devcb_base &set_fr_handler(Object &&cb) { return m_fr_handler.set_callback(std::forward(cb)); } template devcb_base &set_ft_handler(Object &&cb) { return m_ft_handler.set_callback(std::forward(cb)); } + auto fx4_handler() { return m_fx4_handler.bind(); } + auto fr_handler() { return m_fr_handler.bind(); } + auto ft_handler() { return m_ft_handler.bind(); } void write_str(uint8_t data); void write_stt(uint8_t data); diff --git a/src/devices/machine/cr511b.h b/src/devices/machine/cr511b.h index d305880a87c..e75eb84d4da 100644 --- a/src/devices/machine/cr511b.h +++ b/src/devices/machine/cr511b.h @@ -46,22 +46,22 @@ #define MCFG_CR511B_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, CR511B, 0) #define MCFG_CR511B_STCH_HANDLER(_devcb) \ - devcb = &downcast(*device).set_stch_handler(DEVCB_##_devcb); + downcast(*device).set_stch_handler(DEVCB_##_devcb); #define MCFG_CR511B_STEN_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sten_handler(DEVCB_##_devcb); + downcast(*device).set_sten_handler(DEVCB_##_devcb); #define MCFG_CR511B_DRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_drq_handler(DEVCB_##_devcb); + downcast(*device).set_drq_handler(DEVCB_##_devcb); #define MCFG_CR511B_DTEN_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dten_handler(DEVCB_##_devcb); + downcast(*device).set_dten_handler(DEVCB_##_devcb); #define MCFG_CR511B_SCOR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_scor_handler(DEVCB_##_devcb); + downcast(*device).set_scor_handler(DEVCB_##_devcb); #define MCFG_CR511B_XAEN_HANDLER(_devcb) \ - devcb = &downcast(*device).set_xaen_handler(DEVCB_##_devcb); + downcast(*device).set_xaen_handler(DEVCB_##_devcb); //************************************************************************** @@ -83,6 +83,12 @@ public: template devcb_base &set_dten_handler(Object &&cb) { return m_dten_handler.set_callback(std::forward(cb)); } template devcb_base &set_scor_handler(Object &&cb) { return m_scor_handler.set_callback(std::forward(cb)); } template devcb_base &set_xaen_handler(Object &&cb) { return m_xaen_handler.set_callback(std::forward(cb)); } + auto stch_handler() { return m_stch_handler.bind(); } + auto sten_handler() { return m_sten_handler.bind(); } + auto drq_handler() { return m_drq_handler.bind(); } + auto dten_handler() { return m_dten_handler.bind(); } + auto scor_handler() { return m_scor_handler.bind(); } + auto xaen_handler() { return m_xaen_handler.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER ( write ); diff --git a/src/devices/machine/cs4031.cpp b/src/devices/machine/cs4031.cpp index b6d66bfea25..371cf24270d 100644 --- a/src/devices/machine/cs4031.cpp +++ b/src/devices/machine/cs4031.cpp @@ -131,12 +131,12 @@ MACHINE_CONFIG_START(cs4031_device::device_add_mconfig) MCFG_DEVICE_ADD("intc1", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, cs4031_device, intc1_int_w)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, cs4031_device, intc1_slave_ack_r)) MCFG_DEVICE_ADD("intc2", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("intc1", pic8259_device, ir2_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("ctc", PIT8254, 0) MCFG_PIT8253_CLK0(XTAL(14'318'181) / 12.0) diff --git a/src/devices/machine/cs4031.h b/src/devices/machine/cs4031.h index 9b1f209b9b6..c03a1cc0e43 100644 --- a/src/devices/machine/cs4031.h +++ b/src/devices/machine/cs4031.h @@ -44,31 +44,31 @@ downcast(*device).set_keybctag(_keybctag); #define MCFG_CS4031_IOR(_ior) \ - devcb = &downcast(device)->set_ior_callback(DEVCB_##_ior); + downcast(device)->set_ior_callback(DEVCB_##_ior); #define MCFG_CS4031_IOW(_iow) \ - devcb = &downcast(device)->set_iow_callback(DEVCB_##_iow); + downcast(device)->set_iow_callback(DEVCB_##_iow); #define MCFG_CS4031_TC(_tc) \ - devcb = &downcast(device)->set_tc_callback(DEVCB_##_tc); + downcast(device)->set_tc_callback(DEVCB_##_tc); #define MCFG_CS4031_HOLD(_hold) \ - devcb = &downcast(device)->set_hold_callback(DEVCB_##_hold); + downcast(device)->set_hold_callback(DEVCB_##_hold); #define MCFG_CS4031_NMI(_nmi) \ - devcb = &downcast(device)->set_nmi_callback(DEVCB_##_nmi); + downcast(device)->set_nmi_callback(DEVCB_##_nmi); #define MCFG_CS4031_INTR(_intr) \ - devcb = &downcast(device)->set_intr_callback(DEVCB_##_intr); + downcast(device)->set_intr_callback(DEVCB_##_intr); #define MCFG_CS4031_CPURESET(_cpureset) \ - devcb = &downcast(device)->set_cpureset_callback(DEVCB_##_cpureset); + downcast(device)->set_cpureset_callback(DEVCB_##_cpureset); #define MCFG_CS4031_A20M(_a20m) \ - devcb = &downcast(device)->set_a20m_callback(DEVCB_##_a20m); + downcast(device)->set_a20m_callback(DEVCB_##_a20m); #define MCFG_CS4031_SPKR(_spkr) \ - devcb = &downcast(device)->set_spkr_callback(DEVCB_##_spkr); + downcast(device)->set_spkr_callback(DEVCB_##_spkr); //************************************************************************** diff --git a/src/devices/machine/cxd1095.h b/src/devices/machine/cxd1095.h index 83b04b6b98e..86ecb58de65 100644 --- a/src/devices/machine/cxd1095.h +++ b/src/devices/machine/cxd1095.h @@ -49,26 +49,26 @@ //************************************************************************** #define MCFG_CXD1095_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(0, DEVCB_##_devcb); + downcast(*device).set_input_cb(0, DEVCB_##_devcb); #define MCFG_CXD1095_IN_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(1, DEVCB_##_devcb); + downcast(*device).set_input_cb(1, DEVCB_##_devcb); #define MCFG_CXD1095_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(2, DEVCB_##_devcb); + downcast(*device).set_input_cb(2, DEVCB_##_devcb); #define MCFG_CXD1095_IN_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(3, DEVCB_##_devcb); + downcast(*device).set_input_cb(3, DEVCB_##_devcb); #define MCFG_CXD1095_IN_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(4, DEVCB_##_devcb); + downcast(*device).set_input_cb(4, DEVCB_##_devcb); #define MCFG_CXD1095_OUT_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(0, DEVCB_##_devcb); + downcast(*device).set_output_cb(0, DEVCB_##_devcb); #define MCFG_CXD1095_OUT_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(1, DEVCB_##_devcb); + downcast(*device).set_output_cb(1, DEVCB_##_devcb); #define MCFG_CXD1095_OUT_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(2, DEVCB_##_devcb); + downcast(*device).set_output_cb(2, DEVCB_##_devcb); #define MCFG_CXD1095_OUT_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(3, DEVCB_##_devcb); + downcast(*device).set_output_cb(3, DEVCB_##_devcb); #define MCFG_CXD1095_OUT_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(4, DEVCB_##_devcb); + downcast(*device).set_output_cb(4, DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/dmac.h b/src/devices/machine/dmac.h index 7fad643c69b..8c72c02d05d 100644 --- a/src/devices/machine/dmac.h +++ b/src/devices/machine/dmac.h @@ -23,25 +23,25 @@ #define MCFG_DMAC_ADD(_tag, _clock) \ MCFG_DEVICE_ADD(_tag, AMIGA_DMAC, _clock) #define MCFG_DMAC_CFGOUT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cfgout_handler(DEVCB_##_devcb); + downcast(*device).set_cfgout_handler(DEVCB_##_devcb); #define MCFG_DMAC_INT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int_handler(DEVCB_##_devcb); + downcast(*device).set_int_handler(DEVCB_##_devcb); #define MCFG_DMAC_XDACK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_xdack_handler(DEVCB_##_devcb); + downcast(*device).set_xdack_handler(DEVCB_##_devcb); #define MCFG_DMAC_SCSI_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_scsi_read_handler(DEVCB_##_devcb); + downcast(*device).set_scsi_read_handler(DEVCB_##_devcb); #define MCFG_DMAC_SCSI_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_scsi_write_handler(DEVCB_##_devcb); + downcast(*device).set_scsi_write_handler(DEVCB_##_devcb); #define MCFG_DMAC_IO_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_io_read_handler(DEVCB_##_devcb); + downcast(*device).set_io_read_handler(DEVCB_##_devcb); #define MCFG_DMAC_IO_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_io_write_handler(DEVCB_##_devcb); + downcast(*device).set_io_write_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/dp8390.h b/src/devices/machine/dp8390.h index da1bf993833..74b57f027d1 100644 --- a/src/devices/machine/dp8390.h +++ b/src/devices/machine/dp8390.h @@ -9,28 +9,28 @@ // device stuff #define MCFG_DP8390D_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); #define MCFG_DP8390D_BREQ_CB(_devcb) \ - devcb = &downcast(*device).set_breq_callback(DEVCB_##_devcb); + downcast(*device).set_breq_callback(DEVCB_##_devcb); #define MCFG_DP8390D_MEM_READ_CB(_devcb) \ - devcb = &downcast(*device).set_mem_read_callback(DEVCB_##_devcb); + downcast(*device).set_mem_read_callback(DEVCB_##_devcb); #define MCFG_DP8390D_MEM_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_mem_write_callback(DEVCB_##_devcb); + downcast(*device).set_mem_write_callback(DEVCB_##_devcb); #define MCFG_RTL8019A_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); #define MCFG_RTL8019A_BREQ_CB(_devcb) \ - devcb = &downcast(*device).set_breq_callback(DEVCB_##_devcb); + downcast(*device).set_breq_callback(DEVCB_##_devcb); #define MCFG_RTL8019A_MEM_READ_CB(_devcb) \ - devcb = &downcast(*device).set_mem_read_callback(DEVCB_##_devcb); + downcast(*device).set_mem_read_callback(DEVCB_##_devcb); #define MCFG_RTL8019A_MEM_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_mem_write_callback(DEVCB_##_devcb); + downcast(*device).set_mem_write_callback(DEVCB_##_devcb); class dp8390_device : public device_t, public device_network_interface diff --git a/src/devices/machine/ds1315.h b/src/devices/machine/ds1315.h index b1f8b11b399..21a7f37c14f 100644 --- a/src/devices/machine/ds1315.h +++ b/src/devices/machine/ds1315.h @@ -23,7 +23,7 @@ MCFG_DEVICE_ADD(_tag, DS1315, 0) #define MCFG_DS1315_BACKING_HANDLER(_devcb) \ - devcb = &downcast(*device).set_backing_handler(DEVCB_##_devcb); + downcast(*device).set_backing_handler(DEVCB_##_devcb); /*************************************************************************** MACROS diff --git a/src/devices/machine/ds1386.h b/src/devices/machine/ds1386.h index e01082cf578..5188cf949b9 100644 --- a/src/devices/machine/ds1386.h +++ b/src/devices/machine/ds1386.h @@ -60,13 +60,13 @@ // handlers #define MCFG_DS1386_INTA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_inta_cb(DEVCB_##_devcb); + downcast(*device).set_inta_cb(DEVCB_##_devcb); #define MCFG_DS1386_INTB_HANDLER(_devcb) \ - devcb = &downcast(*device).set_intb_cb(DEVCB_##_devcb); + downcast(*device).set_intb_cb(DEVCB_##_devcb); #define MCFG_DS1386_SQW_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sqw_cb(DEVCB_##_devcb); + downcast(*device).set_sqw_cb(DEVCB_##_devcb); // devices diff --git a/src/devices/machine/ds75161a.h b/src/devices/machine/ds75161a.h index 71c93dc2b6b..58d257a27ae 100644 --- a/src/devices/machine/ds75161a.h +++ b/src/devices/machine/ds75161a.h @@ -32,52 +32,52 @@ ///************************************************************************* #define MCFG_DS75161A_IN_REN_CB(_devcb) \ - devcb = &downcast(*device).set_in_ren_callback(DEVCB_##_devcb); + downcast(*device).set_in_ren_callback(DEVCB_##_devcb); #define MCFG_DS75161A_IN_IFC_CB(_devcb) \ - devcb = &downcast(*device).set_in_ifc_callback(DEVCB_##_devcb); + downcast(*device).set_in_ifc_callback(DEVCB_##_devcb); #define MCFG_DS75161A_IN_NDAC_CB(_devcb) \ - devcb = &downcast(*device).set_in_ndac_callback(DEVCB_##_devcb); + downcast(*device).set_in_ndac_callback(DEVCB_##_devcb); #define MCFG_DS75161A_IN_NRFD_CB(_devcb) \ - devcb = &downcast(*device).set_in_nrfd_callback(DEVCB_##_devcb); + downcast(*device).set_in_nrfd_callback(DEVCB_##_devcb); #define MCFG_DS75161A_IN_DAV_CB(_devcb) \ - devcb = &downcast(*device).set_in_dav_callback(DEVCB_##_devcb); + downcast(*device).set_in_dav_callback(DEVCB_##_devcb); #define MCFG_DS75161A_IN_EOI_CB(_devcb) \ - devcb = &downcast(*device).set_in_eoi_callback(DEVCB_##_devcb); + downcast(*device).set_in_eoi_callback(DEVCB_##_devcb); #define MCFG_DS75161A_IN_ATN_CB(_devcb) \ - devcb = &downcast(*device).set_in_atn_callback(DEVCB_##_devcb); + downcast(*device).set_in_atn_callback(DEVCB_##_devcb); #define MCFG_DS75161A_IN_SRQ_CB(_devcb) \ - devcb = &downcast(*device).set_in_srq_callback(DEVCB_##_devcb); + downcast(*device).set_in_srq_callback(DEVCB_##_devcb); #define MCFG_DS75161A_OUT_REN_CB(_devcb) \ - devcb = &downcast(*device).set_out_ren_callback(DEVCB_##_devcb); + downcast(*device).set_out_ren_callback(DEVCB_##_devcb); #define MCFG_DS75161A_OUT_IFC_CB(_devcb) \ - devcb = &downcast(*device).set_out_ifc_callback(DEVCB_##_devcb); + downcast(*device).set_out_ifc_callback(DEVCB_##_devcb); #define MCFG_DS75161A_OUT_NDAC_CB(_devcb) \ - devcb = &downcast(*device).set_out_ndac_callback(DEVCB_##_devcb); + downcast(*device).set_out_ndac_callback(DEVCB_##_devcb); #define MCFG_DS75161A_OUT_NRFD_CB(_devcb) \ - devcb = &downcast(*device).set_out_nrfd_callback(DEVCB_##_devcb); + downcast(*device).set_out_nrfd_callback(DEVCB_##_devcb); #define MCFG_DS75161A_OUT_DAV_CB(_devcb) \ - devcb = &downcast(*device).set_out_dav_callback(DEVCB_##_devcb); + downcast(*device).set_out_dav_callback(DEVCB_##_devcb); #define MCFG_DS75161A_OUT_EOI_CB(_devcb) \ - devcb = &downcast(*device).set_out_eoi_callback(DEVCB_##_devcb); + downcast(*device).set_out_eoi_callback(DEVCB_##_devcb); #define MCFG_DS75161A_OUT_ATN_CB(_devcb) \ - devcb = &downcast(*device).set_out_atn_callback(DEVCB_##_devcb); + downcast(*device).set_out_atn_callback(DEVCB_##_devcb); #define MCFG_DS75161A_OUT_SRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_srq_callback(DEVCB_##_devcb); + downcast(*device).set_out_srq_callback(DEVCB_##_devcb); ///************************************************************************* // TYPE DEFINITIONS diff --git a/src/devices/machine/e05a03.h b/src/devices/machine/e05a03.h index fccb187b085..6623c7e4c53 100644 --- a/src/devices/machine/e05a03.h +++ b/src/devices/machine/e05a03.h @@ -16,19 +16,19 @@ ***************************************************************************/ #define MCFG_E05A03_NLQ_LP_CALLBACK(_write) \ - devcb = &downcast(*device).set_nlq_lp_wr_callback(DEVCB_##_write); + downcast(*device).set_nlq_lp_wr_callback(DEVCB_##_write); #define MCFG_E05A03_PE_LP_CALLBACK(_write) \ - devcb = &downcast(*device).set_pe_lp_wr_callback(DEVCB_##_write); + downcast(*device).set_pe_lp_wr_callback(DEVCB_##_write); #define MCFG_E05A03_RESO_CALLBACK(_write) \ - devcb = &downcast(*device).set_reso_wr_callback(DEVCB_##_write); + downcast(*device).set_reso_wr_callback(DEVCB_##_write); #define MCFG_E05A03_PE_CALLBACK(_write) \ - devcb = &downcast(*device).set_pe_wr_callback(DEVCB_##_write); + downcast(*device).set_pe_wr_callback(DEVCB_##_write); #define MCFG_E05A03_DATA_CALLBACK(_read) \ - devcb = &downcast(*device).set_data_rd_callback(DEVCB_##_read); + downcast(*device).set_data_rd_callback(DEVCB_##_read); /*************************************************************************** diff --git a/src/devices/machine/e05a30.h b/src/devices/machine/e05a30.h index 0f79a2fe491..7875dbef4c2 100644 --- a/src/devices/machine/e05a30.h +++ b/src/devices/machine/e05a30.h @@ -13,31 +13,31 @@ ***************************************************************************/ #define MCFG_E05A30_PRINTHEAD_CALLBACK(_write) \ - devcb = &downcast(*device).set_printhead_wr_callback(DEVCB_##_write); + downcast(*device).set_printhead_wr_callback(DEVCB_##_write); #define MCFG_E05A30_PF_STEPPER_CALLBACK(_write) \ - devcb = &downcast(*device).set_pf_stepper_wr_callback(DEVCB_##_write); + downcast(*device).set_pf_stepper_wr_callback(DEVCB_##_write); #define MCFG_E05A30_CR_STEPPER_CALLBACK(_write) \ - devcb = &downcast(*device).set_cr_stepper_wr_callback(DEVCB_##_write); + downcast(*device).set_cr_stepper_wr_callback(DEVCB_##_write); #define MCFG_E05A30_READY_CALLBACK(_write) \ - devcb = &downcast(*device).set_ready_wr_callback(DEVCB_##_write); + downcast(*device).set_ready_wr_callback(DEVCB_##_write); #define MCFG_E05A30_CENTRONICS_ACK_CALLBACK(_write) \ - devcb = &downcast(*device).set_centronics_ack_wr_callback(DEVCB_##_write); + downcast(*device).set_centronics_ack_wr_callback(DEVCB_##_write); #define MCFG_E05A30_CENTRONICS_BUSY_CALLBACK(_write) \ - devcb = &downcast(*device).set_centronics_busy_wr_callback(DEVCB_##_write); + downcast(*device).set_centronics_busy_wr_callback(DEVCB_##_write); #define MCFG_E05A30_CENTRONICS_PERROR_CALLBACK(_write) \ - devcb = &downcast(*device).set_centronics_perror_wr_callback(DEVCB_##_write); + downcast(*device).set_centronics_perror_wr_callback(DEVCB_##_write); #define MCFG_E05A30_CENTRONICS_FAULT_CALLBACK(_write) \ - devcb = &downcast(*device).set_centronics_fault_wr_callback(DEVCB_##_write); + downcast(*device).set_centronics_fault_wr_callback(DEVCB_##_write); #define MCFG_E05A30_CENTRONICS_SELECT_CALLBACK(_write) \ - devcb = &downcast(*device).set_centronics_select_wr_callback(DEVCB_##_write); + downcast(*device).set_centronics_select_wr_callback(DEVCB_##_write); /*************************************************************************** TYPE DEFINITIONS diff --git a/src/devices/machine/eepromser.h b/src/devices/machine/eepromser.h index c68276da19a..c4a83365e26 100644 --- a/src/devices/machine/eepromser.h +++ b/src/devices/machine/eepromser.h @@ -21,7 +21,7 @@ //************************************************************************** #define MCFG_EEPROM_SERIAL_DO_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_do_callback(DEVCB_##_devcb); + downcast(*device).set_do_callback(DEVCB_##_devcb); //************************************************************************** @@ -43,6 +43,7 @@ public: void enable_streaming(bool enable) { m_streaming_enabled = enable; } void enable_output_on_falling_clock(bool enable) { m_output_on_falling_clock_enabled = enable; } template devcb_base &set_do_callback(Object &&cb) { return m_do_cb.set_callback(std::forward(cb)); } + auto do_callback() { return m_do_cb.bind(); } protected: // construction/destruction diff --git a/src/devices/machine/fdc37c93x.h b/src/devices/machine/fdc37c93x.h index 8638fcfa173..d334a0ab2eb 100644 --- a/src/devices/machine/fdc37c93x.h +++ b/src/devices/machine/fdc37c93x.h @@ -168,18 +168,18 @@ DECLARE_DEVICE_TYPE(FDC37C93X, fdc37c93x_device); fdc37c93x_device::static_set_sysopt_pin(*device, _pinvalue); #define MCFG_FDC37C93X_GP20_RESET_CB(_devcb) \ - devcb = &downcast(*device).set_gp20_reset_callback(DEVCB_##_devcb); + downcast(*device).set_gp20_reset_callback(DEVCB_##_devcb); #define MCFG_FDC37C93X_GP25_GATEA20_CB(_devcb) \ - devcb = &downcast(*device).set_gp25_gatea20_callback(DEVCB_##_devcb); + downcast(*device).set_gp25_gatea20_callback(DEVCB_##_devcb); #define MCFG_FDC37C93X_IRQ1_CB(_devcb) \ - devcb = &downcast(*device).set_irq1_callback(DEVCB_##_devcb); + downcast(*device).set_irq1_callback(DEVCB_##_devcb); #define MCFG_FDC37C93X_IRQ8_CB(_devcb) \ - devcb = &downcast(*device).set_irq8_callback(DEVCB_##_devcb); + downcast(*device).set_irq8_callback(DEVCB_##_devcb); #define MCFG_FDC37C93X_IRQ9_CB(_devcb) \ - devcb = &downcast(*device).set_irq9_callback(DEVCB_##_devcb); + downcast(*device).set_irq9_callback(DEVCB_##_devcb); #endif // MAME_MACHINE_FDC37C93X_H diff --git a/src/devices/machine/fga002.h b/src/devices/machine/fga002.h index 01372e41231..aab16fdaf9d 100644 --- a/src/devices/machine/fga002.h +++ b/src/devices/machine/fga002.h @@ -9,19 +9,19 @@ // LOCAL IRQ callbacks #define MCFG_FGA002_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); #define MCFG_FGA002_OUT_LIACK4_CB(_devcb) \ - devcb = &downcast(*device).set_liack4_callback(DEVCB_##_devcb); + downcast(*device).set_liack4_callback(DEVCB_##_devcb); #define MCFG_FGA002_OUT_LIACK5_CB(_devcb) \ - devcb = &downcast(*device).set_liack5_callback(DEVCB_##_devcb); + downcast(*device).set_liack5_callback(DEVCB_##_devcb); #define MCFG_FGA002_OUT_LIACK6_CB(_devcb) \ - devcb = &downcast(*device).set_liack6_callback(DEVCB_##_devcb); + downcast(*device).set_liack6_callback(DEVCB_##_devcb); #define MCFG_FGA002_OUT_LIACK7_CB(_devcb) \ - devcb = &downcast(*device).set_liack7_callback(DEVCB_##_devcb); + downcast(*device).set_liack7_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/gayle.h b/src/devices/machine/gayle.h index 81b0f6bafaa..64a75c6f518 100644 --- a/src/devices/machine/gayle.h +++ b/src/devices/machine/gayle.h @@ -24,19 +24,19 @@ downcast(*device).set_id(_id); #define MCFG_GAYLE_INT2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int2_handler(DEVCB_##_devcb); + downcast(*device).set_int2_handler(DEVCB_##_devcb); #define MCFG_GAYLE_CS0_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cs0_read_handler(DEVCB_##_devcb); + downcast(*device).set_cs0_read_handler(DEVCB_##_devcb); #define MCFG_GAYLE_CS0_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cs0_write_handler(DEVCB_##_devcb); + downcast(*device).set_cs0_write_handler(DEVCB_##_devcb); #define MCFG_GAYLE_CS1_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cs1_read_handler(DEVCB_##_devcb); + downcast(*device).set_cs1_read_handler(DEVCB_##_devcb); #define MCFG_GAYLE_CS1_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cs1_write_handler(DEVCB_##_devcb); + downcast(*device).set_cs1_write_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/gen_fifo.h b/src/devices/machine/gen_fifo.h index 430a760aaec..4db8a75d8c1 100644 --- a/src/devices/machine/gen_fifo.h +++ b/src/devices/machine/gen_fifo.h @@ -73,10 +73,10 @@ #define MCFG_GENERIC_FIFO_EMPTY_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_empty_cb(DEVCB_##_devcb); + downcast(*device).set_empty_cb(DEVCB_##_devcb); #define MCFG_GENERIC_FIFO_FULL_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_full_cb(DEVCB_##_devcb); + downcast(*device).set_full_cb(DEVCB_##_devcb); template class generic_fifo_device_base : public device_t { diff --git a/src/devices/machine/gen_latch.h b/src/devices/machine/gen_latch.h index 702c26ff333..456bbaba8f7 100644 --- a/src/devices/machine/gen_latch.h +++ b/src/devices/machine/gen_latch.h @@ -32,7 +32,7 @@ DECLARE_DEVICE_TYPE(GENERIC_LATCH_16, generic_latch_16_device) MCFG_DEVICE_ADD(_tag, GENERIC_LATCH_16, 0) #define MCFG_GENERIC_LATCH_DATA_PENDING_CB(_devcb) \ - devcb = &downcast(*device).set_data_pending_callback(DEVCB_##_devcb); + downcast(*device).set_data_pending_callback(DEVCB_##_devcb); #define MCFG_GENERIC_LATCH_SEPARATE_ACKNOWLEDGE(_ack) \ downcast(*device).set_separate_acknowledge(_ack); @@ -49,6 +49,7 @@ class generic_latch_base_device : public device_t public: // configuration template devcb_base &set_data_pending_callback(Object &&cb) { return m_data_pending_cb.set_callback(std::forward(cb)); } + auto data_pending_callback() { return m_data_pending_cb.bind(); } void set_separate_acknowledge(bool ack) { m_separate_acknowledge = ack; } DECLARE_READ_LINE_MEMBER(pending_r); diff --git a/src/devices/machine/hd63450.h b/src/devices/machine/hd63450.h index 8f0e6a654ad..67a5c6cfd88 100644 --- a/src/devices/machine/hd63450.h +++ b/src/devices/machine/hd63450.h @@ -11,34 +11,34 @@ #define MCFG_HD63450_DMA_END_CB(_devcb) \ - devcb = &downcast(*device).set_dma_end_callback(DEVCB_##_devcb); + downcast(*device).set_dma_end_callback(DEVCB_##_devcb); #define MCFG_HD63450_DMA_ERROR_CB(_devcb) \ - devcb = &downcast(*device).set_dma_error_callback(DEVCB_##_devcb); + downcast(*device).set_dma_error_callback(DEVCB_##_devcb); #define MCFG_HD63450_DMA_READ_0_CB(_devcb) \ - devcb = &downcast(*device).set_dma_read_callback<0>(DEVCB_##_devcb); + downcast(*device).set_dma_read_callback<0>(DEVCB_##_devcb); #define MCFG_HD63450_DMA_READ_1_CB(_devcb) \ - devcb = &downcast(*device).set_dma_read_callback<1>(DEVCB_##_devcb); + downcast(*device).set_dma_read_callback<1>(DEVCB_##_devcb); #define MCFG_HD63450_DMA_READ_2_CB(_devcb) \ - devcb = &downcast(*device).set_dma_read_callback<2>(DEVCB_##_devcb); + downcast(*device).set_dma_read_callback<2>(DEVCB_##_devcb); #define MCFG_HD63450_DMA_READ_3_CB(_devcb) \ - devcb = &downcast(*device).set_dma_read_callback<3>(DEVCB_##_devcb); + downcast(*device).set_dma_read_callback<3>(DEVCB_##_devcb); #define MCFG_HD63450_DMA_WRITE_0_CB(_devcb) \ - devcb = &downcast(*device).set_dma_write_callback<0>(DEVCB_##_devcb); + downcast(*device).set_dma_write_callback<0>(DEVCB_##_devcb); #define MCFG_HD63450_DMA_WRITE_1_CB(_devcb) \ - devcb = &downcast(*device).set_dma_write_callback<1>(DEVCB_##_devcb); + downcast(*device).set_dma_write_callback<1>(DEVCB_##_devcb); #define MCFG_HD63450_DMA_WRITE_2_CB(_devcb) \ - devcb = &downcast(*device).set_dma_write_callback<2>(DEVCB_##_devcb); + downcast(*device).set_dma_write_callback<2>(DEVCB_##_devcb); #define MCFG_HD63450_DMA_WRITE_3_CB(_devcb) \ - devcb = &downcast(*device).set_dma_write_callback<3>(DEVCB_##_devcb); + downcast(*device).set_dma_write_callback<3>(DEVCB_##_devcb); #define MCFG_HD63450_CPU(_tag) \ downcast(*device).set_cpu_tag(_tag); diff --git a/src/devices/machine/hd64610.h b/src/devices/machine/hd64610.h index 948f6b4e549..38ffd560f4d 100644 --- a/src/devices/machine/hd64610.h +++ b/src/devices/machine/hd64610.h @@ -35,10 +35,10 @@ //************************************************************************** #define MCFG_HD64610_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_HD64610_OUT_1HZ_CB(_devcb) \ - devcb = &downcast(*device).set_out_1hz_callback(DEVCB_##_devcb); + downcast(*device).set_out_1hz_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/hdc92x4.h b/src/devices/machine/hdc92x4.h index 9eb2e6f827b..08f3fea3b44 100644 --- a/src/devices/machine/hdc92x4.h +++ b/src/devices/machine/hdc92x4.h @@ -18,33 +18,33 @@ DECLARE_DEVICE_TYPE(HDC9234, hdc9234_device) /* Interrupt line. To be connected with the controller PCB. */ #define MCFG_HDC92X4_INTRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_intrq_wr_callback(DEVCB_##_write); + downcast(*device).set_intrq_wr_callback(DEVCB_##_write); /* DMA request line. To be connected with the controller PCB. */ #define MCFG_HDC92X4_DMARQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_dmarq_wr_callback(DEVCB_##_write); + downcast(*device).set_dmarq_wr_callback(DEVCB_##_write); /* DMA in progress line. To be connected with the controller PCB. */ #define MCFG_HDC92X4_DIP_CALLBACK(_write) \ - devcb = &downcast(*device).set_dip_wr_callback(DEVCB_##_write); + downcast(*device).set_dip_wr_callback(DEVCB_##_write); /* Auxiliary Bus. These 8 lines need to be connected to external latches and to a counter circuitry which works together with the external RAM. We use the S0/S1 lines as address lines. */ #define MCFG_HDC92X4_AUXBUS_OUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_auxbus_wr_callback(DEVCB_##_write); + downcast(*device).set_auxbus_wr_callback(DEVCB_##_write); /* Callback to read the contents of the external RAM via the data bus. Note that the address must be set and automatically increased by external circuitry. */ #define MCFG_HDC92X4_DMA_IN_CALLBACK(_read) \ - devcb = &downcast(*device).set_dma_rd_callback(DEVCB_##_read); + downcast(*device).set_dma_rd_callback(DEVCB_##_read); /* Callback to write the contents of the external RAM via the data bus. Note that the address must be set and automatically increased by external circuitry. */ #define MCFG_HDC92X4_DMA_OUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma_wr_callback(DEVCB_##_write); + downcast(*device).set_dma_wr_callback(DEVCB_##_write); //=================================================================== diff --git a/src/devices/machine/hp_taco.h b/src/devices/machine/hp_taco.h index 3b926a0946a..42682aa76a4 100644 --- a/src/devices/machine/hp_taco.h +++ b/src/devices/machine/hp_taco.h @@ -16,13 +16,13 @@ #include "formats/hti_tape.h" #define MCFG_TACO_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_TACO_FLG_HANDLER(_devcb) \ - devcb = &downcast(*device).set_flg_handler(DEVCB_##_devcb); + downcast(*device).set_flg_handler(DEVCB_##_devcb); #define MCFG_TACO_STS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sts_handler(DEVCB_##_devcb); + downcast(*device).set_sts_handler(DEVCB_##_devcb); class hp_taco_device : public device_t , public device_image_interface diff --git a/src/devices/machine/i7220.h b/src/devices/machine/i7220.h index 78aef97bdab..51eaf3ce917 100644 --- a/src/devices/machine/i7220.h +++ b/src/devices/machine/i7220.h @@ -43,10 +43,10 @@ ///************************************************************************* #define MCFG_I7220_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_intrq_wr_callback(DEVCB_##_write); + downcast(*device).set_intrq_wr_callback(DEVCB_##_write); #define MCFG_I7220_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); #define MCFG_I7220_DATA_SIZE(data_size) \ downcast(*device).set_data_size(data_size); diff --git a/src/devices/machine/i80130.h b/src/devices/machine/i80130.h index 385d361c423..c4ce3d855aa 100644 --- a/src/devices/machine/i80130.h +++ b/src/devices/machine/i80130.h @@ -21,22 +21,22 @@ ///************************************************************************* #define MCFG_I80130_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_I80130_ACK_CALLBACK(_write) \ - devcb = &downcast(*device).set_ack_wr_callback(DEVCB_##_write); + downcast(*device).set_ack_wr_callback(DEVCB_##_write); #define MCFG_I80130_LIR_CALLBACK(_write) \ - devcb = &downcast(*device).set_lir_wr_callback(DEVCB_##_write); + downcast(*device).set_lir_wr_callback(DEVCB_##_write); #define MCFG_I80130_SYSTICK_CALLBACK(_write) \ - devcb = &downcast(*device).set_systick_wr_callback(DEVCB_##_write); + downcast(*device).set_systick_wr_callback(DEVCB_##_write); #define MCFG_I80130_DELAY_CALLBACK(_write) \ - devcb = &downcast(*device).set_delay_wr_callback(DEVCB_##_write); + downcast(*device).set_delay_wr_callback(DEVCB_##_write); #define MCFG_I80130_BAUD_CALLBACK(_write) \ - devcb = &downcast(*device).set_baud_wr_callback(DEVCB_##_write); + downcast(*device).set_baud_wr_callback(DEVCB_##_write); diff --git a/src/devices/machine/i8087.h b/src/devices/machine/i8087.h index 62c847e2cbf..e0d5ab7e87e 100644 --- a/src/devices/machine/i8087.h +++ b/src/devices/machine/i8087.h @@ -12,10 +12,10 @@ downcast(*device).set_data_width(_data_width); #define MCFG_I8087_INT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_int(DEVCB_##_devcb); + downcast(*device).set_int(DEVCB_##_devcb); #define MCFG_I8087_BUSY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_busy(DEVCB_##_devcb); + downcast(*device).set_busy(DEVCB_##_devcb); DECLARE_DEVICE_TYPE(I8087, i8087_device) diff --git a/src/devices/machine/i8155.h b/src/devices/machine/i8155.h index 0c1f387ea2b..ed1b193849d 100644 --- a/src/devices/machine/i8155.h +++ b/src/devices/machine/i8155.h @@ -41,25 +41,25 @@ //************************************************************************** #define MCFG_I8155_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_I8155_IN_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_I8155_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_in_pc_callback(DEVCB_##_devcb); + downcast(*device).set_in_pc_callback(DEVCB_##_devcb); #define MCFG_I8155_OUT_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_I8155_OUT_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); #define MCFG_I8155_OUT_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_out_pc_callback(DEVCB_##_devcb); + downcast(*device).set_out_pc_callback(DEVCB_##_devcb); #define MCFG_I8155_OUT_TIMEROUT_CB(_devcb) \ - devcb = &downcast(*device).set_out_to_callback(DEVCB_##_devcb); + downcast(*device).set_out_to_callback(DEVCB_##_devcb); //************************************************************************** @@ -82,6 +82,13 @@ public: template devcb_base &set_out_pb_callback(Object &&cb) { return m_out_pb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_pc_callback(Object &&cb) { return m_out_pc_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_to_callback(Object &&cb) { return m_out_to_cb.set_callback(std::forward(cb)); } + auto in_pa_callback() { return m_in_pa_cb.bind(); } + auto in_pb_callback() { return m_in_pb_cb.bind(); } + auto in_pc_callback() { return m_in_pc_cb.bind(); } + auto out_pa_callback() { return m_out_pa_cb.bind(); } + auto out_pb_callback() { return m_out_pb_cb.bind(); } + auto out_pc_callback() { return m_out_pc_cb.bind(); } + auto out_to_callback() { return m_out_to_cb.bind(); } DECLARE_READ8_MEMBER( io_r ); DECLARE_WRITE8_MEMBER( io_w ); diff --git a/src/devices/machine/i8212.h b/src/devices/machine/i8212.h index b98ab2c0c55..0d4accbb5c0 100644 --- a/src/devices/machine/i8212.h +++ b/src/devices/machine/i8212.h @@ -34,16 +34,16 @@ ///************************************************************************* #define MCFG_I8212_INT_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_wr_callback(DEVCB_##_write); + downcast(*device).set_int_wr_callback(DEVCB_##_write); #define MCFG_I8212_DI_CALLBACK(_read) \ - devcb = &downcast(*device).set_di_rd_callback(DEVCB_##_read); + downcast(*device).set_di_rd_callback(DEVCB_##_read); #define MCFG_I8212_DO_CALLBACK(_write) \ - devcb = &downcast(*device).set_do_wr_callback(DEVCB_##_write); + downcast(*device).set_do_wr_callback(DEVCB_##_write); #define MCFG_I8212_MD_CALLBACK(_read) \ - devcb = &downcast(*device).set_md_rd_callback(DEVCB_##_read); + downcast(*device).set_md_rd_callback(DEVCB_##_read); diff --git a/src/devices/machine/i8214.h b/src/devices/machine/i8214.h index aafcde5f908..dc609c24f15 100644 --- a/src/devices/machine/i8214.h +++ b/src/devices/machine/i8214.h @@ -33,10 +33,10 @@ ///************************************************************************* #define MCFG_I8214_INT_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_wr_callback(DEVCB_##_write); + downcast(*device).set_int_wr_callback(DEVCB_##_write); #define MCFG_I8214_ENLG_CALLBACK(_write) \ - devcb = &downcast(*device).set_enlg_wr_callback(DEVCB_##_write); + downcast(*device).set_enlg_wr_callback(DEVCB_##_write); @@ -54,6 +54,8 @@ public: template devcb_base &set_int_wr_callback(Object &&cb) { return m_write_int.set_callback(std::forward(cb)); } template devcb_base &set_enlg_wr_callback(Object &&cb) { return m_write_enlg.set_callback(std::forward(cb)); } + auto int_wr_callback() { return m_write_int.bind(); } + auto enlg_wr_callback() { return m_write_enlg.bind(); } DECLARE_WRITE_LINE_MEMBER( sgs_w ); DECLARE_WRITE_LINE_MEMBER( etlg_w ); diff --git a/src/devices/machine/i82371sb.cpp b/src/devices/machine/i82371sb.cpp index ff757cdbf6b..291e9fb0c56 100644 --- a/src/devices/machine/i82371sb.cpp +++ b/src/devices/machine/i82371sb.cpp @@ -90,12 +90,12 @@ MACHINE_CONFIG_START(i82371sb_isa_device::device_add_mconfig) MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE(":maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, i82371sb_isa_device, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir2_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/devices/machine/i82371sb.h b/src/devices/machine/i82371sb.h index 8289dc47b40..6118ff61b6a 100644 --- a/src/devices/machine/i82371sb.h +++ b/src/devices/machine/i82371sb.h @@ -25,10 +25,10 @@ #define MCFG_I82371SB_SMI_CB(_devcb) \ - devcb = &downcast(*device).set_smi_callback(DEVCB_##_devcb); + downcast(*device).set_smi_callback(DEVCB_##_devcb); #define MCFG_I82371SB_BOOT_STATE_HOOK(_devcb) \ - devcb = &downcast(*device).set_boot_state_hook(DEVCB_##_devcb); + downcast(*device).set_boot_state_hook(DEVCB_##_devcb); class i82371sb_isa_device : public pci_device { public: @@ -182,10 +182,10 @@ private: DECLARE_DEVICE_TYPE(I82371SB_ISA, i82371sb_isa_device) #define MCFG_I82371SB_IDE_IRQ_PRI_CB(_devcb) \ - devcb = &downcast(*device).set_irq_pri_callback(DEVCB_##_devcb); + downcast(*device).set_irq_pri_callback(DEVCB_##_devcb); #define MCFG_I82371SB_IDE_IRQ_SEC_CB(_devcb) \ - devcb = &downcast(*device).set_irq_sec_callback(DEVCB_##_devcb); + downcast(*device).set_irq_sec_callback(DEVCB_##_devcb); #define MCFG_I82371SB_IDE_INTERRUPTS(_tag, _dev, _irq_pri, _irq_sec) \ MCFG_I82371SB_IDE_IRQ_PRI_CB(WRITELINE(_tag, _dev, _irq_pri)) \ diff --git a/src/devices/machine/i8243.h b/src/devices/machine/i8243.h index fef950ffacb..76c4b601bd8 100644 --- a/src/devices/machine/i8243.h +++ b/src/devices/machine/i8243.h @@ -24,9 +24,9 @@ MCFG_I8243_READHANDLER(_read) \ MCFG_I8243_WRITEHANDLER(_write) #define MCFG_I8243_READHANDLER(_devcb) \ - devcb = &downcast(*device).set_read_handler(DEVCB_##_devcb); + downcast(*device).set_read_handler(DEVCB_##_devcb); #define MCFG_I8243_WRITEHANDLER(_devcb) \ - devcb = &downcast(*device).set_write_handler(DEVCB_##_devcb); + downcast(*device).set_write_handler(DEVCB_##_devcb); /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ diff --git a/src/devices/machine/i8251.h b/src/devices/machine/i8251.h index a475e39ae36..4eab12602d9 100644 --- a/src/devices/machine/i8251.h +++ b/src/devices/machine/i8251.h @@ -20,25 +20,25 @@ //************************************************************************** #define MCFG_I8251_TXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txd_handler(DEVCB_##_devcb); + downcast(*device).set_txd_handler(DEVCB_##_devcb); #define MCFG_I8251_DTR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dtr_handler(DEVCB_##_devcb); + downcast(*device).set_dtr_handler(DEVCB_##_devcb); #define MCFG_I8251_RTS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rts_handler(DEVCB_##_devcb); + downcast(*device).set_rts_handler(DEVCB_##_devcb); #define MCFG_I8251_RXRDY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rxrdy_handler(DEVCB_##_devcb); + downcast(*device).set_rxrdy_handler(DEVCB_##_devcb); #define MCFG_I8251_TXRDY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txrdy_handler(DEVCB_##_devcb); + downcast(*device).set_txrdy_handler(DEVCB_##_devcb); #define MCFG_I8251_TXEMPTY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txempty_handler(DEVCB_##_devcb); + downcast(*device).set_txempty_handler(DEVCB_##_devcb); #define MCFG_I8251_SYNDET_HANDLER(_devcb) \ - devcb = &downcast(*device).set_syndet_handler(DEVCB_##_devcb); + downcast(*device).set_syndet_handler(DEVCB_##_devcb); class i8251_device : public device_t, public device_serial_interface @@ -55,6 +55,13 @@ public: template devcb_base &set_txrdy_handler(Object &&cb) { return m_txrdy_handler.set_callback(std::forward(cb)); } template devcb_base &set_txempty_handler(Object &&cb) { return m_txempty_handler.set_callback(std::forward(cb)); } template devcb_base &set_syndet_handler(Object &&cb) { return m_syndet_handler.set_callback(std::forward(cb)); } + auto txd_handler() { return m_txd_handler.bind(); } + auto dtr_handler() { return m_dtr_handler.bind(); } + auto rts_handler() { return m_rts_handler.bind(); } + auto rxrdy_handler() { return m_rxrdy_handler.bind(); } + auto txrdy_handler() { return m_txrdy_handler.bind(); } + auto txempty_handler() { return m_txempty_handler.bind(); } + auto syndet_handler() { return m_syndet_handler.bind(); } DECLARE_READ8_MEMBER(data_r); DECLARE_WRITE8_MEMBER(data_w); diff --git a/src/devices/machine/i8255.h b/src/devices/machine/i8255.h index 4c2c28c42db..3d7e1e0daa7 100644 --- a/src/devices/machine/i8255.h +++ b/src/devices/machine/i8255.h @@ -40,29 +40,29 @@ //************************************************************************** #define MCFG_I8255_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_I8255_IN_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_I8255_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_in_pc_callback(DEVCB_##_devcb); + downcast(*device).set_in_pc_callback(DEVCB_##_devcb); #define MCFG_I8255_OUT_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_I8255_OUT_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); #define MCFG_I8255_OUT_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_out_pc_callback(DEVCB_##_devcb); + downcast(*device).set_out_pc_callback(DEVCB_##_devcb); // output state when pins are in tri-state, default 0xff #define MCFG_I8255_TRISTATE_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_tri_pa_callback(DEVCB_##_devcb); + downcast(*device).set_tri_pa_callback(DEVCB_##_devcb); #define MCFG_I8255_TRISTATE_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_tri_pb_callback(DEVCB_##_devcb); + downcast(*device).set_tri_pb_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS @@ -84,6 +84,14 @@ public: template devcb_base &set_out_pc_callback(Object &&cb) { return m_out_pc_cb.set_callback(std::forward(cb)); } template devcb_base &set_tri_pa_callback(Object &&cb) { return m_tri_pa_cb.set_callback(std::forward(cb)); } template devcb_base &set_tri_pb_callback(Object &&cb) { return m_tri_pb_cb.set_callback(std::forward(cb)); } + auto in_pa_callback() { return m_in_pa_cb.bind(); } + auto in_pb_callback() { return m_in_pb_cb.bind(); } + auto in_pc_callback() { return m_in_pc_cb.bind(); } + auto out_pa_callback() { return m_out_pa_cb.bind(); } + auto out_pb_callback() { return m_out_pb_cb.bind(); } + auto out_pc_callback() { return m_out_pc_cb.bind(); } + auto tri_pa_callback() { return m_tri_pa_cb.bind(); } + auto tri_pb_callback() { return m_tri_pb_cb.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/machine/i8257.h b/src/devices/machine/i8257.h index 80e268f1b2d..b1311314aee 100644 --- a/src/devices/machine/i8257.h +++ b/src/devices/machine/i8257.h @@ -42,52 +42,52 @@ ***************************************************************************/ #define MCFG_I8257_OUT_HRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_hrq_callback(DEVCB_##_devcb); + downcast(*device).set_out_hrq_callback(DEVCB_##_devcb); #define MCFG_I8257_OUT_TC_CB(_devcb) \ - devcb = &downcast(*device).set_out_tc_callback(DEVCB_##_devcb); + downcast(*device).set_out_tc_callback(DEVCB_##_devcb); #define MCFG_I8257_IN_MEMR_CB(_devcb) \ - devcb = &downcast(*device).set_in_memr_callback(DEVCB_##_devcb); + downcast(*device).set_in_memr_callback(DEVCB_##_devcb); #define MCFG_I8257_OUT_MEMW_CB(_devcb) \ - devcb = &downcast(*device).set_out_memw_callback(DEVCB_##_devcb); + downcast(*device).set_out_memw_callback(DEVCB_##_devcb); #define MCFG_I8257_IN_IOR_0_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_callback<0>(DEVCB_##_devcb); + downcast(*device).set_in_ior_callback<0>(DEVCB_##_devcb); #define MCFG_I8257_IN_IOR_1_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_callback<1>(DEVCB_##_devcb); + downcast(*device).set_in_ior_callback<1>(DEVCB_##_devcb); #define MCFG_I8257_IN_IOR_2_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_callback<2>(DEVCB_##_devcb); + downcast(*device).set_in_ior_callback<2>(DEVCB_##_devcb); #define MCFG_I8257_IN_IOR_3_CB(_devcb) \ - devcb = &downcast(*device).set_in_ior_callback<3>(DEVCB_##_devcb); + downcast(*device).set_in_ior_callback<3>(DEVCB_##_devcb); #define MCFG_I8257_OUT_IOW_0_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_iow_callback<0>(DEVCB_##_devcb); #define MCFG_I8257_OUT_IOW_1_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_iow_callback<1>(DEVCB_##_devcb); #define MCFG_I8257_OUT_IOW_2_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_callback<2>(DEVCB_##_devcb); + downcast(*device).set_out_iow_callback<2>(DEVCB_##_devcb); #define MCFG_I8257_OUT_IOW_3_CB(_devcb) \ - devcb = &downcast(*device).set_out_iow_callback<3>(DEVCB_##_devcb); + downcast(*device).set_out_iow_callback<3>(DEVCB_##_devcb); #define MCFG_I8257_OUT_DACK_0_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_dack_callback<0>(DEVCB_##_devcb); #define MCFG_I8257_OUT_DACK_1_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_dack_callback<1>(DEVCB_##_devcb); #define MCFG_I8257_OUT_DACK_2_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_callback<2>(DEVCB_##_devcb); + downcast(*device).set_out_dack_callback<2>(DEVCB_##_devcb); #define MCFG_I8257_OUT_DACK_3_CB(_devcb) \ - devcb = &downcast(*device).set_out_dack_callback<3>(DEVCB_##_devcb); + downcast(*device).set_out_dack_callback<3>(DEVCB_##_devcb); // HACK: the radio86 and alikes require this, is it a bug in the soviet clone or is there something else happening? #define MCFG_I8257_REVERSE_RW_MODE(_flag) \ diff --git a/src/devices/machine/i82586.h b/src/devices/machine/i82586.h index dfd073190ae..93f45d82574 100644 --- a/src/devices/machine/i82586.h +++ b/src/devices/machine/i82586.h @@ -7,7 +7,7 @@ #pragma once #define MCFG_I82586_IRQ_CB(_out_irq) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_out_irq); + downcast(*device).set_out_irq_callback(DEVCB_##_out_irq); class i82586_base_device : public device_t, diff --git a/src/devices/machine/i8271.h b/src/devices/machine/i8271.h index 3db17379760..32d70b507a0 100644 --- a/src/devices/machine/i8271.h +++ b/src/devices/machine/i8271.h @@ -9,16 +9,16 @@ #include "fdc_pll.h" #define MCFG_I8271_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_intrq_wr_callback(DEVCB_##_write); + downcast(*device).set_intrq_wr_callback(DEVCB_##_write); #define MCFG_I8271_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); #define MCFG_I8271_HDL_CALLBACK(_write) \ - devcb = &downcast(*device).set_hdl_wr_callback(DEVCB_##_write); + downcast(*device).set_hdl_wr_callback(DEVCB_##_write); #define MCFG_I8271_OPT_CALLBACK(_write) \ - devcb = &downcast(*device).set_opt_wr_callback(DEVCB_##_write); + downcast(*device).set_opt_wr_callback(DEVCB_##_write); /*************************************************************************** MACROS diff --git a/src/devices/machine/i8279.h b/src/devices/machine/i8279.h index c50dfd1d54d..80c492b2b6e 100644 --- a/src/devices/machine/i8279.h +++ b/src/devices/machine/i8279.h @@ -43,25 +43,25 @@ ***************************************************************************/ #define MCFG_I8279_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_I8279_OUT_SL_CB(_devcb) \ - devcb = &downcast(*device).set_out_sl_callback(DEVCB_##_devcb); + downcast(*device).set_out_sl_callback(DEVCB_##_devcb); #define MCFG_I8279_OUT_DISP_CB(_devcb) \ - devcb = &downcast(*device).set_out_disp_callback(DEVCB_##_devcb); + downcast(*device).set_out_disp_callback(DEVCB_##_devcb); #define MCFG_I8279_OUT_BD_CB(_devcb) \ - devcb = &downcast(*device).set_out_bd_callback(DEVCB_##_devcb); + downcast(*device).set_out_bd_callback(DEVCB_##_devcb); #define MCFG_I8279_IN_RL_CB(_devcb) \ - devcb = &downcast(*device).set_in_rl_callback(DEVCB_##_devcb); + downcast(*device).set_in_rl_callback(DEVCB_##_devcb); #define MCFG_I8279_IN_SHIFT_CB(_devcb) \ - devcb = &downcast(*device).set_in_shift_callback(DEVCB_##_devcb); + downcast(*device).set_in_shift_callback(DEVCB_##_devcb); #define MCFG_I8279_IN_CTRL_CB(_devcb) \ - devcb = &downcast(*device).set_in_ctrl_callback(DEVCB_##_devcb); + downcast(*device).set_in_ctrl_callback(DEVCB_##_devcb); /*************************************************************************** TYPE DEFINITIONS diff --git a/src/devices/machine/i8355.h b/src/devices/machine/i8355.h index a9d5297bc26..be2e83d17eb 100644 --- a/src/devices/machine/i8355.h +++ b/src/devices/machine/i8355.h @@ -49,16 +49,16 @@ ///************************************************************************* #define MCFG_I8355_IN_PA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_I8355_OUT_PA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_I8355_IN_PB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_I8355_OUT_PB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); ///************************************************************************* diff --git a/src/devices/machine/ie15_kbd.h b/src/devices/machine/ie15_kbd.h index 4d5c7370160..d0d38286b8d 100644 --- a/src/devices/machine/ie15_kbd.h +++ b/src/devices/machine/ie15_kbd.h @@ -11,7 +11,7 @@ ***************************************************************************/ #define MCFG_IE15_KEYBOARD_CB(_devcb) \ - devcb = &downcast(*device).set_keyboard_callback(DEVCB_##_devcb); + downcast(*device).set_keyboard_callback(DEVCB_##_devcb); /*************************************************************************** FUNCTION PROTOTYPES diff --git a/src/devices/machine/im6402.h b/src/devices/machine/im6402.h index ae505ef54c1..6908db0d9c6 100644 --- a/src/devices/machine/im6402.h +++ b/src/devices/machine/im6402.h @@ -55,16 +55,16 @@ downcast(*device).set_trc(_trc); #define MCFG_IM6402_TRO_CALLBACK(_write) \ - devcb = &downcast(*device).set_tro_wr_callback(DEVCB_##_write); + downcast(*device).set_tro_wr_callback(DEVCB_##_write); #define MCFG_IM6402_DR_CALLBACK(_write) \ - devcb = &downcast(*device).set_dr_wr_callback(DEVCB_##_write); + downcast(*device).set_dr_wr_callback(DEVCB_##_write); #define MCFG_IM6402_TBRE_CALLBACK(_write) \ - devcb = &downcast(*device).set_tbre_wr_callback(DEVCB_##_write); + downcast(*device).set_tbre_wr_callback(DEVCB_##_write); #define MCFG_IM6402_TRE_CALLBACK(_write) \ - devcb = &downcast(*device).set_tre_wr_callback(DEVCB_##_write); + downcast(*device).set_tre_wr_callback(DEVCB_##_write); diff --git a/src/devices/machine/input_merger.h b/src/devices/machine/input_merger.h index 6cf9701b6df..53af1a38cfd 100644 --- a/src/devices/machine/input_merger.h +++ b/src/devices/machine/input_merger.h @@ -33,7 +33,7 @@ MCFG_DEVICE_ADD(_tag, INPUT_MERGER_ALL_LOW, 0) #define MCFG_INPUT_MERGER_OUTPUT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_output_handler(DEVCB_##_devcb); + downcast(*device).set_output_handler(DEVCB_##_devcb); //************************************************************************** @@ -45,6 +45,7 @@ class input_merger_device : public device_t public: // callback template devcb_base &set_output_handler(Object &&cb) { return m_output_handler.set_callback(std::forward(cb)); } + auto output_handler() { return m_output_handler.bind(); } // input lines template DECLARE_WRITE_LINE_MEMBER(in_w) { static_assert(Bit < 32, "invalid bit"); machine().scheduler().synchronize(timer_expired_delegate(FUNC(input_merger_device::update_state), this), (Bit << 1) | (state ? 1U : 0U)); } diff --git a/src/devices/machine/ins8154.h b/src/devices/machine/ins8154.h index 1c6596ccc13..9f401c87f2d 100644 --- a/src/devices/machine/ins8154.h +++ b/src/devices/machine/ins8154.h @@ -43,19 +43,19 @@ ***************************************************************************/ #define MCFG_INS8154_IN_A_CB(_devcb) \ - devcb = &downcast(*device).set_in_a_callback(DEVCB_##_devcb); + downcast(*device).set_in_a_callback(DEVCB_##_devcb); #define MCFG_INS8154_OUT_A_CB(_devcb) \ - devcb = &downcast(*device).set_out_a_callback(DEVCB_##_devcb); + downcast(*device).set_out_a_callback(DEVCB_##_devcb); #define MCFG_INS8154_IN_B_CB(_devcb) \ - devcb = &downcast(*device).set_in_b_callback(DEVCB_##_devcb); + downcast(*device).set_in_b_callback(DEVCB_##_devcb); #define MCFG_INS8154_OUT_B_CB(_devcb) \ - devcb = &downcast(*device).set_out_b_callback(DEVCB_##_devcb); + downcast(*device).set_out_b_callback(DEVCB_##_devcb); #define MCFG_INS8154_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); //currently unused + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); //currently unused /*************************************************************************** TYPE DEFINITIONS diff --git a/src/devices/machine/ins8250.h b/src/devices/machine/ins8250.h index 7bd6753b391..af68f36887b 100644 --- a/src/devices/machine/ins8250.h +++ b/src/devices/machine/ins8250.h @@ -17,8 +17,7 @@ CLASS DEFINITIONS ***************************************************************************/ -class ins8250_uart_device : public device_t, - public device_serial_interface +class ins8250_uart_device : public device_t, public device_serial_interface { public: template devcb_base &set_out_tx_callback(Object &&cb) { return m_out_tx_cb.set_callback(std::forward(cb)); } @@ -27,6 +26,12 @@ public: template devcb_base &set_out_int_callback(Object &&cb) { return m_out_int_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_out1_callback(Object &&cb) { return m_out_out1_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_out2_callback(Object &&cb) { return m_out_out2_cb.set_callback(std::forward(cb)); } + auto out_tx_callback() { return m_out_tx_cb.bind(); } + auto out_dtr_callback() { return m_out_dtr_cb.bind(); } + auto out_rts_callback() { return m_out_rts_cb.bind(); } + auto out_int_callback() { return m_out_int_cb.bind(); } + auto out_out1_callback() { return m_out_out1_cb.bind(); } + auto out_out2_callback() { return m_out_out2_cb.bind(); } DECLARE_WRITE8_MEMBER( ins8250_w ); DECLARE_READ8_MEMBER( ins8250_r ); @@ -159,21 +164,21 @@ DECLARE_DEVICE_TYPE(NS16550, ns16550_device) ***************************************************************************/ #define MCFG_INS8250_OUT_TX_CB(_devcb) \ - devcb = &downcast(*device).set_out_tx_callback(DEVCB_##_devcb); + downcast(*device).set_out_tx_callback(DEVCB_##_devcb); #define MCFG_INS8250_OUT_DTR_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtr_callback(DEVCB_##_devcb); + downcast(*device).set_out_dtr_callback(DEVCB_##_devcb); #define MCFG_INS8250_OUT_RTS_CB(_devcb) \ - devcb = &downcast(*device).set_out_rts_callback(DEVCB_##_devcb); + downcast(*device).set_out_rts_callback(DEVCB_##_devcb); #define MCFG_INS8250_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); #define MCFG_INS8250_OUT_OUT1_CB(_devcb) \ - devcb = &downcast(*device).set_out_out1_callback(DEVCB_##_devcb); + downcast(*device).set_out_out1_callback(DEVCB_##_devcb); #define MCFG_INS8250_OUT_OUT2_CB(_devcb) \ - devcb = &downcast(*device).set_out_out2_callback(DEVCB_##_devcb); + downcast(*device).set_out_out2_callback(DEVCB_##_devcb); #endif // MAME_MACHINE_INS8250_H diff --git a/src/devices/machine/k053252.h b/src/devices/machine/k053252.h index 7fe29893479..c8a76b8ff20 100644 --- a/src/devices/machine/k053252.h +++ b/src/devices/machine/k053252.h @@ -11,19 +11,19 @@ #include "screen.h" #define MCFG_K053252_INT1_EN_CB(_devcb) \ - devcb = &downcast(*device).set_int1_en_callback(DEVCB_##_devcb); + downcast(*device).set_int1_en_callback(DEVCB_##_devcb); #define MCFG_K053252_INT2_EN_CB(_devcb) \ - devcb = &downcast(*device).set_int2_en_callback(DEVCB_##_devcb); + downcast(*device).set_int2_en_callback(DEVCB_##_devcb); #define MCFG_K053252_INT1_ACK_CB(_devcb) \ - devcb = &downcast(*device).set_int1_ack_callback(DEVCB_##_devcb); + downcast(*device).set_int1_ack_callback(DEVCB_##_devcb); #define MCFG_K053252_INT2_ACK_CB(_devcb) \ - devcb = &downcast(*device).set_int2_ack_callback(DEVCB_##_devcb); + downcast(*device).set_int2_ack_callback(DEVCB_##_devcb); #define MCFG_K053252_INT_TIME_CB(_devcb) \ - devcb = &downcast(*device).set_int_time_callback(DEVCB_##_devcb); + downcast(*device).set_int_time_callback(DEVCB_##_devcb); #define MCFG_K053252_OFFSETS(_offsx, _offsy) \ downcast(*device).set_offsets(_offsx, _offsy); diff --git a/src/devices/machine/kb3600.h b/src/devices/machine/kb3600.h index 14c738d9f22..e77de332bc2 100644 --- a/src/devices/machine/kb3600.h +++ b/src/devices/machine/kb3600.h @@ -64,31 +64,31 @@ //************************************************************************** #define MCFG_AY3600_MATRIX_X0(_cb) \ - devcb = &downcast(*device).set_x0_cb(DEVCB_##_cb); + downcast(*device).set_x0_cb(DEVCB_##_cb); #define MCFG_AY3600_MATRIX_X1(_cb) \ - devcb = &downcast(*device).set_x1_cb(DEVCB_##_cb); + downcast(*device).set_x1_cb(DEVCB_##_cb); #define MCFG_AY3600_MATRIX_X2(_cb) \ - devcb = &downcast(*device).set_x2_cb(DEVCB_##_cb); + downcast(*device).set_x2_cb(DEVCB_##_cb); #define MCFG_AY3600_MATRIX_X3(_cb) \ - devcb = &downcast(*device).set_x3_cb(DEVCB_##_cb); + downcast(*device).set_x3_cb(DEVCB_##_cb); #define MCFG_AY3600_MATRIX_X4(_cb) \ - devcb = &downcast(*device).set_x4_cb(DEVCB_##_cb); + downcast(*device).set_x4_cb(DEVCB_##_cb); #define MCFG_AY3600_MATRIX_X5(_cb) \ - devcb = &downcast(*device).set_x5_cb(DEVCB_##_cb); + downcast(*device).set_x5_cb(DEVCB_##_cb); #define MCFG_AY3600_MATRIX_X6(_cb) \ - devcb = &downcast(*device).set_x6_cb(DEVCB_##_cb); + downcast(*device).set_x6_cb(DEVCB_##_cb); #define MCFG_AY3600_MATRIX_X7(_cb) \ - devcb = &downcast(*device).set_x7_cb(DEVCB_##_cb); + downcast(*device).set_x7_cb(DEVCB_##_cb); #define MCFG_AY3600_MATRIX_X8(_cb) \ - devcb = &downcast(*device).set_x8_cb(DEVCB_##_cb); + downcast(*device).set_x8_cb(DEVCB_##_cb); #define MCFG_AY3600_SHIFT_CB(_cb) \ - devcb = &downcast(*device).set_shift_cb(DEVCB_##_cb); + downcast(*device).set_shift_cb(DEVCB_##_cb); #define MCFG_AY3600_CONTROL_CB(_cb) \ - devcb = &downcast(*device).set_control_cb(DEVCB_##_cb); + downcast(*device).set_control_cb(DEVCB_##_cb); #define MCFG_AY3600_DATA_READY_CB(_cb) \ - devcb = &downcast(*device).set_data_ready_cb(DEVCB_##_cb); + downcast(*device).set_data_ready_cb(DEVCB_##_cb); #define MCFG_AY3600_AKO_CB(_cb) \ - devcb = &downcast(*device).set_ako_cb(DEVCB_##_cb); + downcast(*device).set_ako_cb(DEVCB_##_cb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/kr2376.h b/src/devices/machine/kr2376.h index 49cfbb4f9cd..5a9529fd7c7 100644 --- a/src/devices/machine/kr2376.h +++ b/src/devices/machine/kr2376.h @@ -40,27 +40,27 @@ //************************************************************************** #define MCFG_KR2376_MATRIX_X0(_cb) \ - devcb = &downcast(*device).set_x_cb<0>(DEVCB_##_cb); + downcast(*device).set_x_cb<0>(DEVCB_##_cb); #define MCFG_KR2376_MATRIX_X1(_cb) \ - devcb = &downcast(*device).set_x_cb<1>(DEVCB_##_cb); + downcast(*device).set_x_cb<1>(DEVCB_##_cb); #define MCFG_KR2376_MATRIX_X2(_cb) \ - devcb = &downcast(*device).set_x_cb<2>(DEVCB_##_cb); + downcast(*device).set_x_cb<2>(DEVCB_##_cb); #define MCFG_KR2376_MATRIX_X3(_cb) \ - devcb = &downcast(*device).set_x_cb<3>(DEVCB_##_cb); + downcast(*device).set_x_cb<3>(DEVCB_##_cb); #define MCFG_KR2376_MATRIX_X4(_cb) \ - devcb = &downcast(*device).set_x_cb<4>(DEVCB_##_cb); + downcast(*device).set_x_cb<4>(DEVCB_##_cb); #define MCFG_KR2376_MATRIX_X5(_cb) \ - devcb = &downcast(*device).set_x_cb<5>(DEVCB_##_cb); + downcast(*device).set_x_cb<5>(DEVCB_##_cb); #define MCFG_KR2376_MATRIX_X6(_cb) \ - devcb = &downcast(*device).set_x_cb<6>(DEVCB_##_cb); + downcast(*device).set_x_cb<6>(DEVCB_##_cb); #define MCFG_KR2376_MATRIX_X7(_cb) \ - devcb = &downcast(*device).set_x_cb<7>(DEVCB_##_cb); + downcast(*device).set_x_cb<7>(DEVCB_##_cb); #define MCFG_KR2376_SHIFT_CB(_cb) \ - devcb = &downcast(*device).set_shift_cb(DEVCB_##_cb); + downcast(*device).set_shift_cb(DEVCB_##_cb); #define MCFG_KR2376_CONTROL_CB(_cb) \ - devcb = &downcast(*device).set_control_cb(DEVCB_##_cb); + downcast(*device).set_control_cb(DEVCB_##_cb); #define MCFG_KR2376_STROBE_CB(_cb) \ - devcb = &downcast(*device).set_strobe_cb(DEVCB_##_cb); + downcast(*device).set_strobe_cb(DEVCB_##_cb); class kr2376_device : public device_t { diff --git a/src/devices/machine/latch8.h b/src/devices/machine/latch8.h index e7d3e0bb006..44644c5952c 100644 --- a/src/devices/machine/latch8.h +++ b/src/devices/machine/latch8.h @@ -131,53 +131,53 @@ DECLARE_DEVICE_TYPE(LATCH8, latch8_device) /* Write bit to discrete node */ #define MCFG_LATCH8_WRITE_0(_devcb) \ - devcb = &downcast(*device).set_write_cb<0>(DEVCB_##_devcb); + downcast(*device).set_write_cb<0>(DEVCB_##_devcb); #define MCFG_LATCH8_WRITE_1(_devcb) \ - devcb = &downcast(*device).set_write_cb<1>(DEVCB_##_devcb); + downcast(*device).set_write_cb<1>(DEVCB_##_devcb); #define MCFG_LATCH8_WRITE_2(_devcb) \ - devcb = &downcast(*device).set_write_cb<2>(DEVCB_##_devcb); + downcast(*device).set_write_cb<2>(DEVCB_##_devcb); #define MCFG_LATCH8_WRITE_3(_devcb) \ - devcb = &downcast(*device).set_write_cb<3>(DEVCB_##_devcb); + downcast(*device).set_write_cb<3>(DEVCB_##_devcb); #define MCFG_LATCH8_WRITE_4(_devcb) \ - devcb = &downcast(*device).set_write_cb<4>(DEVCB_##_devcb); + downcast(*device).set_write_cb<4>(DEVCB_##_devcb); #define MCFG_LATCH8_WRITE_5(_devcb) \ - devcb = &downcast(*device).set_write_cb<5>(DEVCB_##_devcb); + downcast(*device).set_write_cb<5>(DEVCB_##_devcb); #define MCFG_LATCH8_WRITE_6(_devcb) \ - devcb = &downcast(*device).set_write_cb<6>(DEVCB_##_devcb); + downcast(*device).set_write_cb<6>(DEVCB_##_devcb); #define MCFG_LATCH8_WRITE_7(_devcb) \ - devcb = &downcast(*device).set_write_cb<7>(DEVCB_##_devcb); + downcast(*device).set_write_cb<7>(DEVCB_##_devcb); /* Upon read, replace bits by reading from another device handler */ #define MCFG_LATCH8_READ_0(_devcb) \ - devcb = &downcast(*device).set_read_cb<0>(DEVCB_##_devcb); + downcast(*device).set_read_cb<0>(DEVCB_##_devcb); #define MCFG_LATCH8_READ_1(_devcb) \ - devcb = &downcast(*device).set_read_cb<1>(DEVCB_##_devcb); + downcast(*device).set_read_cb<1>(DEVCB_##_devcb); #define MCFG_LATCH8_READ_2(_devcb) \ - devcb = &downcast(*device).set_read_cb<2>(DEVCB_##_devcb); + downcast(*device).set_read_cb<2>(DEVCB_##_devcb); #define MCFG_LATCH8_READ_3(_devcb) \ - devcb = &downcast(*device).set_read_cb<3>(DEVCB_##_devcb); + downcast(*device).set_read_cb<3>(DEVCB_##_devcb); #define MCFG_LATCH8_READ_4(_devcb) \ - devcb = &downcast(*device).set_read_cb<4>(DEVCB_##_devcb); + downcast(*device).set_read_cb<4>(DEVCB_##_devcb); #define MCFG_LATCH8_READ_5(_devcb) \ - devcb = &downcast(*device).set_read_cb<5>(DEVCB_##_devcb); + downcast(*device).set_read_cb<5>(DEVCB_##_devcb); #define MCFG_LATCH8_READ_6(_devcb) \ - devcb = &downcast(*device).set_read_cb<6>(DEVCB_##_devcb); + downcast(*device).set_read_cb<6>(DEVCB_##_devcb); #define MCFG_LATCH8_READ_7(_devcb) \ - devcb = &downcast(*device).set_read_cb<7>(DEVCB_##_devcb); + downcast(*device).set_read_cb<7>(DEVCB_##_devcb); #endif // MAME_MACHINE_LATCH8_H diff --git a/src/devices/machine/ldv1000.h b/src/devices/machine/ldv1000.h index 11abc109f51..661d0a44f0b 100644 --- a/src/devices/machine/ldv1000.h +++ b/src/devices/machine/ldv1000.h @@ -27,7 +27,7 @@ MCFG_DEVICE_ADD(_tag, PIONEER_LDV1000, 0) #define MCFG_LASERDISC_LDV1000_COMMAND_STROBE_CB(_cb) \ - devcb = &downcast(device)->set_command_strobe_callback(DEVCB_##_cb); + downcast(device)->set_command_strobe_callback(DEVCB_##_cb); diff --git a/src/devices/machine/lh5810.h b/src/devices/machine/lh5810.h index 51b288be8e3..776e5497d56 100644 --- a/src/devices/machine/lh5810.h +++ b/src/devices/machine/lh5810.h @@ -17,22 +17,22 @@ //************************************************************************* #define MCFG_LH5810_PORTA_R_CB(_devcb) \ - devcb = &downcast(*device).set_porta_r_callback(DEVCB_##_devcb); + downcast(*device).set_porta_r_callback(DEVCB_##_devcb); #define MCFG_LH5810_PORTA_W_CB(_devcb) \ - devcb = &downcast(*device).set_porta_w_callback(DEVCB_##_devcb); + downcast(*device).set_porta_w_callback(DEVCB_##_devcb); #define MCFG_LH5810_PORTB_R_CB(_devcb) \ - devcb = &downcast(*device).set_portb_r_callback(DEVCB_##_devcb); + downcast(*device).set_portb_r_callback(DEVCB_##_devcb); #define MCFG_LH5810_PORTB_W_CB(_devcb) \ - devcb = &downcast(*device).set_portb_w_callback(DEVCB_##_devcb); + downcast(*device).set_portb_w_callback(DEVCB_##_devcb); #define MCFG_LH5810_PORTC_W_CB(_devcb) \ - devcb = &downcast(*device).set_portc_w_callback(DEVCB_##_devcb); + downcast(*device).set_portc_w_callback(DEVCB_##_devcb); #define MCFG_LH5810_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); //currently unused + downcast(*device).set_out_int_callback(DEVCB_##_devcb); //currently unused diff --git a/src/devices/machine/mb8421.h b/src/devices/machine/mb8421.h index 705e4c0c1e7..e0ac6edd610 100644 --- a/src/devices/machine/mb8421.h +++ b/src/devices/machine/mb8421.h @@ -20,10 +20,10 @@ // note: INT pins are only available on MB84x1 // INTL is for the CPU on the left side, INTR for the one on the right #define MCFG_MB8421_INTL_HANDLER(_devcb) \ - devcb = &downcast(*device).set_intl_handler(DEVCB_##_devcb); + downcast(*device).set_intl_handler(DEVCB_##_devcb); #define MCFG_MB8421_INTR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_intr_handler(DEVCB_##_devcb); + downcast(*device).set_intr_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/mb87078.h b/src/devices/machine/mb87078.h index bb7700bbfcf..61ef9aac8ea 100644 --- a/src/devices/machine/mb87078.h +++ b/src/devices/machine/mb87078.h @@ -18,7 +18,7 @@ ***************************************************************************/ #define MCFG_MB87078_GAIN_CHANGED_CB(_devcb) \ - devcb = &downcast(*device).set_gain_changed_callback(DEVCB_##_devcb); + downcast(*device).set_gain_changed_callback(DEVCB_##_devcb); /*************************************************************************** TYPE DEFINITIONS diff --git a/src/devices/machine/mb8795.h b/src/devices/machine/mb8795.h index 018ef6ef1e6..a3b6e6244cc 100644 --- a/src/devices/machine/mb8795.h +++ b/src/devices/machine/mb8795.h @@ -9,16 +9,16 @@ downcast(device)->set_drq_cb(_tx_drq, _rx_drq); #define MCFG_MB8795_TX_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_tx_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_tx_irq_wr_callback(DEVCB_##_write); #define MCFG_MB8795_RX_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_rx_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_rx_irq_wr_callback(DEVCB_##_write); #define MCFG_MB8795_TX_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_tx_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_tx_drq_wr_callback(DEVCB_##_write); #define MCFG_MB8795_RX_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_rx_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_rx_drq_wr_callback(DEVCB_##_write); class mb8795_device : public device_t, public device_network_interface diff --git a/src/devices/machine/mb89352.h b/src/devices/machine/mb89352.h index b30b1601fd0..dce6fe59ce9 100644 --- a/src/devices/machine/mb89352.h +++ b/src/devices/machine/mb89352.h @@ -12,10 +12,10 @@ #include "legscsi.h" #define MCFG_MB89352A_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); #define MCFG_MB89352A_DRQ_CB(_devcb) \ - devcb = &downcast(*device).set_drq_callback(DEVCB_##_devcb); + downcast(*device).set_drq_callback(DEVCB_##_devcb); class mb89352_device : public legacy_scsi_host_adapter { diff --git a/src/devices/machine/mb89363b.h b/src/devices/machine/mb89363b.h index 2aaad46c28e..755730d05aa 100644 --- a/src/devices/machine/mb89363b.h +++ b/src/devices/machine/mb89363b.h @@ -24,41 +24,41 @@ DECLARE_DEVICE_TYPE(MB89363B, mb89363b_device) #define MCFG_MB89363B_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_in_a_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_a_pa_callback(DEVCB_##_devcb); #define MCFG_MB89363B_IN_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_in_a_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_a_pb_callback(DEVCB_##_devcb); #define MCFG_MB89363B_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_in_a_pc_callback(DEVCB_##_devcb); + downcast(*device).set_in_a_pc_callback(DEVCB_##_devcb); #define MCFG_MB89363B_OUT_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_out_a_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_a_pa_callback(DEVCB_##_devcb); #define MCFG_MB89363B_OUT_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_out_a_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_a_pb_callback(DEVCB_##_devcb); #define MCFG_MB89363B_OUT_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_out_a_pc_callback(DEVCB_##_devcb); + downcast(*device).set_out_a_pc_callback(DEVCB_##_devcb); #define MCFG_MB89363B_IN_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_in_b_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_b_pa_callback(DEVCB_##_devcb); #define MCFG_MB89363B_IN_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_in_b_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_b_pb_callback(DEVCB_##_devcb); #define MCFG_MB89363B_IN_PORTF_CB(_devcb) \ - devcb = &downcast(*device).set_in_b_pc_callback(DEVCB_##_devcb); + downcast(*device).set_in_b_pc_callback(DEVCB_##_devcb); #define MCFG_MB89363B_OUT_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_out_b_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_b_pa_callback(DEVCB_##_devcb); #define MCFG_MB89363B_OUT_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_out_b_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_b_pb_callback(DEVCB_##_devcb); #define MCFG_MB89363B_OUT_PORTF_CB(_devcb) \ - devcb = &downcast(*device).set_out_b_pc_callback(DEVCB_##_devcb); + downcast(*device).set_out_b_pc_callback(DEVCB_##_devcb); diff --git a/src/devices/machine/mb89374.h b/src/devices/machine/mb89374.h index 460a4c2c6dc..1ee70cfff58 100644 --- a/src/devices/machine/mb89374.h +++ b/src/devices/machine/mb89374.h @@ -42,19 +42,19 @@ Data Link Controller //************************************************************************** #define MCFG_MB89374_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_MB89374_PO0_CB(_devcb) \ - devcb = &downcast(*device).set_out_po_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_po_callback<0>(DEVCB_##_devcb); #define MCFG_MB89374_PO1_CB(_devcb) \ - devcb = &downcast(*device).set_out_po_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_po_callback<1>(DEVCB_##_devcb); #define MCFG_MB89374_PO2_CB(_devcb) \ - devcb = &downcast(*device).set_out_po_callback<2>(DEVCB_##_devcb); + downcast(*device).set_out_po_callback<2>(DEVCB_##_devcb); #define MCFG_MB89374_PO3_CB(_devcb) \ - devcb = &downcast(*device).set_out_po_callback<3>(DEVCB_##_devcb); + downcast(*device).set_out_po_callback<3>(DEVCB_##_devcb); class mb89374_device : public device_t, diff --git a/src/devices/machine/mc14411.h b/src/devices/machine/mc14411.h index 002ca5de65f..ef5196ef363 100644 --- a/src/devices/machine/mc14411.h +++ b/src/devices/machine/mc14411.h @@ -31,22 +31,22 @@ // DEVICE CONFIGURATION MACROS //************************************************************************** -#define MCFG_MC14411_F1_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 0, DEVCB_##_devcb); -#define MCFG_MC14411_F2_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 1, DEVCB_##_devcb); -#define MCFG_MC14411_F3_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 2, DEVCB_##_devcb); -#define MCFG_MC14411_F4_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 3, DEVCB_##_devcb); -#define MCFG_MC14411_F5_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 4, DEVCB_##_devcb); -#define MCFG_MC14411_F6_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 5, DEVCB_##_devcb); -#define MCFG_MC14411_F7_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 6, DEVCB_##_devcb); -#define MCFG_MC14411_F8_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 7, DEVCB_##_devcb); -#define MCFG_MC14411_F9_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 8, DEVCB_##_devcb); -#define MCFG_MC14411_F10_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb( 9, DEVCB_##_devcb); -#define MCFG_MC14411_F11_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb(10, DEVCB_##_devcb); -#define MCFG_MC14411_F12_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb(11, DEVCB_##_devcb); -#define MCFG_MC14411_F13_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb(12, DEVCB_##_devcb); -#define MCFG_MC14411_F14_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb(13, DEVCB_##_devcb); -#define MCFG_MC14411_F15_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb(14, DEVCB_##_devcb); -#define MCFG_MC14411_F16_CB(_devcb) devcb = &downcast(*device).set_out_fx_cb(15, DEVCB_##_devcb); +#define MCFG_MC14411_F1_CB(_devcb) downcast(*device).set_out_fx_cb( 0, DEVCB_##_devcb); +#define MCFG_MC14411_F2_CB(_devcb) downcast(*device).set_out_fx_cb( 1, DEVCB_##_devcb); +#define MCFG_MC14411_F3_CB(_devcb) downcast(*device).set_out_fx_cb( 2, DEVCB_##_devcb); +#define MCFG_MC14411_F4_CB(_devcb) downcast(*device).set_out_fx_cb( 3, DEVCB_##_devcb); +#define MCFG_MC14411_F5_CB(_devcb) downcast(*device).set_out_fx_cb( 4, DEVCB_##_devcb); +#define MCFG_MC14411_F6_CB(_devcb) downcast(*device).set_out_fx_cb( 5, DEVCB_##_devcb); +#define MCFG_MC14411_F7_CB(_devcb) downcast(*device).set_out_fx_cb( 6, DEVCB_##_devcb); +#define MCFG_MC14411_F8_CB(_devcb) downcast(*device).set_out_fx_cb( 7, DEVCB_##_devcb); +#define MCFG_MC14411_F9_CB(_devcb) downcast(*device).set_out_fx_cb( 8, DEVCB_##_devcb); +#define MCFG_MC14411_F10_CB(_devcb) downcast(*device).set_out_fx_cb( 9, DEVCB_##_devcb); +#define MCFG_MC14411_F11_CB(_devcb) downcast(*device).set_out_fx_cb(10, DEVCB_##_devcb); +#define MCFG_MC14411_F12_CB(_devcb) downcast(*device).set_out_fx_cb(11, DEVCB_##_devcb); +#define MCFG_MC14411_F13_CB(_devcb) downcast(*device).set_out_fx_cb(12, DEVCB_##_devcb); +#define MCFG_MC14411_F14_CB(_devcb) downcast(*device).set_out_fx_cb(13, DEVCB_##_devcb); +#define MCFG_MC14411_F15_CB(_devcb) downcast(*device).set_out_fx_cb(14, DEVCB_##_devcb); +#define MCFG_MC14411_F16_CB(_devcb) downcast(*device).set_out_fx_cb(15, DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS @@ -87,6 +87,22 @@ public: mc14411_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); template devcb_base &set_out_fx_cb(int index, Object &&cb) { return m_out_fx_cbs[index].set_callback(std::forward(cb)); } + auto out_f1_cb() { return m_out_fx_cbs[0].bind(); } + auto out_f2_cb() { return m_out_fx_cbs[1].bind(); } + auto out_f3_cb() { return m_out_fx_cbs[2].bind(); } + auto out_f4_cb() { return m_out_fx_cbs[3].bind(); } + auto out_f5_cb() { return m_out_fx_cbs[4].bind(); } + auto out_f6_cb() { return m_out_fx_cbs[5].bind(); } + auto out_f7_cb() { return m_out_fx_cbs[6].bind(); } + auto out_f8_cb() { return m_out_fx_cbs[7].bind(); } + auto out_f9_cb() { return m_out_fx_cbs[8].bind(); } + auto out_f10_cb() { return m_out_fx_cbs[9].bind(); } + auto out_f11_cb() { return m_out_fx_cbs[10].bind(); } + auto out_f12_cb() { return m_out_fx_cbs[11].bind(); } + auto out_f13_cb() { return m_out_fx_cbs[12].bind(); } + auto out_f14_cb() { return m_out_fx_cbs[13].bind(); } + auto out_f15_cb() { return m_out_fx_cbs[14].bind(); } + auto out_f16_cb() { return m_out_fx_cbs[15].bind(); } DECLARE_WRITE_LINE_MEMBER(reset_w); DECLARE_WRITE8_MEMBER(rate_select_w); diff --git a/src/devices/machine/mc146818.h b/src/devices/machine/mc146818.h index 3bc79fb7d67..7b396e81320 100644 --- a/src/devices/machine/mc146818.h +++ b/src/devices/machine/mc146818.h @@ -22,7 +22,7 @@ //************************************************************************** #define MCFG_MC146818_IRQ_HANDLER(_irq) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_irq); + downcast(*device).set_irq_callback(DEVCB_##_irq); // The MC146818 doesn't have century support, but when syncing the date & time at startup we can optionally store the century. #define MCFG_MC146818_CENTURY_INDEX(_century_index) \ @@ -59,6 +59,8 @@ public: // callbacks template devcb_base &set_irq_callback(Object &&cb) { return m_write_irq.set_callback(std::forward(cb)); } + auto irq_callback() { return m_write_irq.bind(); } + void set_century_index(int century_index) { m_century_index = century_index; } void set_use_utc(bool use_utc) { m_use_utc = use_utc; } void set_binary(bool binary) { m_binary = binary; } diff --git a/src/devices/machine/mc2661.h b/src/devices/machine/mc2661.h index b4e575cd53b..44e319a292d 100644 --- a/src/devices/machine/mc2661.h +++ b/src/devices/machine/mc2661.h @@ -42,28 +42,28 @@ downcast(*device).set_txc(_clock); #define MCFG_MC2661_TXD_HANDLER(_write) \ - devcb = &downcast(*device).set_txd_callback(DEVCB_##_write); + downcast(*device).set_txd_callback(DEVCB_##_write); #define MCFG_MC2661_RXRDY_HANDLER(_write) \ - devcb = &downcast(*device).set_rxrdy_callback(DEVCB_##_write); + downcast(*device).set_rxrdy_callback(DEVCB_##_write); #define MCFG_MC2661_TXRDY_HANDLER(_write) \ - devcb = &downcast(*device).set_txrdy_callback(DEVCB_##_write); + downcast(*device).set_txrdy_callback(DEVCB_##_write); #define MCFG_MC2661_RTS_HANDLER(_write) \ - devcb = &downcast(*device).set_rts_callback(DEVCB_##_write); + downcast(*device).set_rts_callback(DEVCB_##_write); #define MCFG_MC2661_DTR_HANDLER(_write) \ - devcb = &downcast(*device).set_dtr_callback(DEVCB_##_write); + downcast(*device).set_dtr_callback(DEVCB_##_write); #define MCFG_MC2661_TXEMT_DSCHG_HANDLER(_write) \ - devcb = &downcast(*device).set_txemt_dschg_callback(DEVCB_##_write); + downcast(*device).set_txemt_dschg_callback(DEVCB_##_write); #define MCFG_MC2661_BKDET_HANDLER(_write) \ - devcb = &downcast(*device).set_bkdet_callback(DEVCB_##_write); + downcast(*device).set_bkdet_callback(DEVCB_##_write); #define MCFG_MC2661_XSYNC_HANDLER(_write) \ - devcb = &downcast(*device).set_xsync_callback(DEVCB_##_write); + downcast(*device).set_xsync_callback(DEVCB_##_write); diff --git a/src/devices/machine/mc68328.h b/src/devices/machine/mc68328.h index 61df82ebe16..f146c6856c5 100644 --- a/src/devices/machine/mc68328.h +++ b/src/devices/machine/mc68328.h @@ -389,76 +389,76 @@ DECLARE_DEVICE_TYPE(MC68328, mc68328_device) downcast(*device).set_cpu_tag(_tag); #define MCFG_MC68328_OUT_PORT_A_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_a_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_a_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PORT_B_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_b_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_b_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PORT_C_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_c_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_c_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PORT_D_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_d_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_d_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PORT_E_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_e_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_e_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PORT_F_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_f_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_f_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PORT_G_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_g_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_g_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PORT_J_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_j_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_j_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PORT_K_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_k_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_k_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PORT_M_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_m_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_m_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_A_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_a_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_a_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_B_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_b_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_b_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_C_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_c_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_c_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_D_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_d_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_d_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_E_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_e_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_e_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_F_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_f_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_f_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_G_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_g_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_g_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_J_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_j_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_j_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_K_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_k_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_k_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_PORT_M_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_m_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_m_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_PWM_CB(_devcb) \ - devcb = &downcast(*device).set_out_pwm_callback(DEVCB_##_devcb); + downcast(*device).set_out_pwm_callback(DEVCB_##_devcb); #define MCFG_MC68328_OUT_SPIM_CB(_devcb) \ - devcb = &downcast(*device).set_out_spim_callback(DEVCB_##_devcb); + downcast(*device).set_out_spim_callback(DEVCB_##_devcb); #define MCFG_MC68328_IN_SPIM_CB(_devcb) \ - devcb = &downcast(*device).set_in_spim_callback(DEVCB_##_devcb); + downcast(*device).set_in_spim_callback(DEVCB_##_devcb); #define MCFG_MC68328_SPIM_XCH_TRIGGER_CB(_devcb) \ - devcb = &downcast(*device).set_spim_xch_trigger_callback(DEVCB_##_devcb); + downcast(*device).set_spim_xch_trigger_callback(DEVCB_##_devcb); #endif // MAME_MACHINE_MC68328_H diff --git a/src/devices/machine/mc6843.h b/src/devices/machine/mc6843.h index ef5e457958a..54f6fff58a3 100644 --- a/src/devices/machine/mc6843.h +++ b/src/devices/machine/mc6843.h @@ -16,7 +16,7 @@ #include "imagedev/flopdrv.h" #define MCFG_MC6843_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); class mc6843_device : public device_t { diff --git a/src/devices/machine/mc6846.h b/src/devices/machine/mc6846.h index 676db3129f9..c5870dc6c39 100644 --- a/src/devices/machine/mc6846.h +++ b/src/devices/machine/mc6846.h @@ -15,22 +15,22 @@ #define MCFG_MC6846_OUT_PORT_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_callback(DEVCB_##_devcb); + downcast(*device).set_out_port_callback(DEVCB_##_devcb); #define MCFG_MC6846_OUT_CP1_CB(_devcb) \ - devcb = &downcast(*device).set_out_cp1_callback(DEVCB_##_devcb); + downcast(*device).set_out_cp1_callback(DEVCB_##_devcb); #define MCFG_MC6846_OUT_CP2_CB(_devcb) \ - devcb = &downcast(*device).set_out_cp2_callback(DEVCB_##_devcb); + downcast(*device).set_out_cp2_callback(DEVCB_##_devcb); #define MCFG_MC6846_IN_PORT_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_callback(DEVCB_##_devcb); + downcast(*device).set_in_port_callback(DEVCB_##_devcb); #define MCFG_MC6846_OUT_CTO_CB(_devcb) \ - devcb = &downcast(*device).set_out_cto_callback(DEVCB_##_devcb); + downcast(*device).set_out_cto_callback(DEVCB_##_devcb); #define MCFG_MC6846_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); class mc6846_device : public device_t diff --git a/src/devices/machine/mc6852.h b/src/devices/machine/mc6852.h index 2ca977cacdc..43076544e45 100644 --- a/src/devices/machine/mc6852.h +++ b/src/devices/machine/mc6852.h @@ -42,16 +42,16 @@ downcast(*device).set_tx_clock(_clock); #define MCFG_MC6852_TX_DATA_CALLBACK(_write) \ - devcb = &downcast(*device).set_tx_data_wr_callback(DEVCB_##_write); + downcast(*device).set_tx_data_wr_callback(DEVCB_##_write); #define MCFG_MC6852_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_MC6852_SM_DTR_CALLBACK(_write) \ - devcb = &downcast(*device).set_sm_dtr_wr_callback(DEVCB_##_write); + downcast(*device).set_sm_dtr_wr_callback(DEVCB_##_write); #define MCFG_MC6852_TUF_CALLBACK(_write) \ - devcb = &downcast(*device).set_tuf_wr_callback(DEVCB_##_write); + downcast(*device).set_tuf_wr_callback(DEVCB_##_write); diff --git a/src/devices/machine/mc6854.h b/src/devices/machine/mc6854.h index 36548024bfd..a43cb4fa57c 100644 --- a/src/devices/machine/mc6854.h +++ b/src/devices/machine/mc6854.h @@ -18,19 +18,19 @@ #define MCFG_MC6854_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_MC6854_OUT_TXD_CB(_devcb) \ - devcb = &downcast(*device).set_out_txd_callback(DEVCB_##_devcb); + downcast(*device).set_out_txd_callback(DEVCB_##_devcb); #define MCFG_MC6854_OUT_FRAME_CB(_class, _method) \ downcast(*device).set_out_frame_callback(mc6854_device::out_frame_delegate(&_class::_method, #_class "::" #_method, this)); #define MCFG_MC6854_OUT_RTS_CB(_devcb) \ - devcb = &downcast(*device).set_out_rts_callback(DEVCB_##_devcb); + downcast(*device).set_out_rts_callback(DEVCB_##_devcb); #define MCFG_MC6854_OUT_DTR_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtr_callback(DEVCB_##_devcb); + downcast(*device).set_out_dtr_callback(DEVCB_##_devcb); class mc6854_device : public device_t diff --git a/src/devices/machine/mc68681.h b/src/devices/machine/mc68681.h index 9b907ab703d..9a706ee6087 100644 --- a/src/devices/machine/mc68681.h +++ b/src/devices/machine/mc68681.h @@ -8,30 +8,30 @@ #include "diserial.h" #define MCFG_MC68681_IRQ_CALLBACK(_cb) \ - devcb = &downcast(*device).set_irq_cb(DEVCB_##_cb); + downcast(*device).set_irq_cb(DEVCB_##_cb); #define MCFG_MC68681_A_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_a_tx_cb(DEVCB_##_cb); + downcast(*device).set_a_tx_cb(DEVCB_##_cb); #define MCFG_MC68681_B_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_b_tx_cb(DEVCB_##_cb); + downcast(*device).set_b_tx_cb(DEVCB_##_cb); // deprecated: use ipX_w() instead #define MCFG_MC68681_INPORT_CALLBACK(_cb) \ - devcb = &downcast(*device).set_inport_cb(DEVCB_##_cb); + downcast(*device).set_inport_cb(DEVCB_##_cb); #define MCFG_MC68681_OUTPORT_CALLBACK(_cb) \ - devcb = &downcast(*device).set_outport_cb(DEVCB_##_cb); + downcast(*device).set_outport_cb(DEVCB_##_cb); #define MCFG_MC68681_SET_EXTERNAL_CLOCKS(_a, _b, _c, _d) \ downcast(*device).set_clocks(_a, _b, _c, _d); // SC28C94 specific callbacks #define MCFG_SC28C94_C_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_c_tx_cb(DEVCB_##_cb); + downcast(*device).set_c_tx_cb(DEVCB_##_cb); #define MCFG_SC28C94_D_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_d_tx_cb(DEVCB_##_cb); + downcast(*device).set_d_tx_cb(DEVCB_##_cb); #define MC68681_RX_FIFO_SIZE 3 @@ -131,6 +131,11 @@ public: template devcb_base &set_b_tx_cb(Object &&cb) { return write_b_tx.set_callback(std::forward(cb)); } template devcb_base &set_inport_cb(Object &&cb) { return read_inport.set_callback(std::forward(cb)); } template devcb_base &set_outport_cb(Object &&cb) { return write_outport.set_callback(std::forward(cb)); } + auto irq_cb() { return write_irq.bind(); } + auto a_tx_cb() { return write_a_tx.bind(); } + auto b_tx_cb() { return write_b_tx.bind(); } + auto inport_cb() { return read_inport.bind(); } + auto outport_cb() { return write_outport.bind(); } // new-style push handlers for input port bits DECLARE_WRITE_LINE_MEMBER( ip0_w ); diff --git a/src/devices/machine/mc68901.h b/src/devices/machine/mc68901.h index b4a3e2a17b1..efba92e734b 100644 --- a/src/devices/machine/mc68901.h +++ b/src/devices/machine/mc68901.h @@ -55,31 +55,31 @@ downcast(*device).set_tx_clock(_clk); #define MCFG_MC68901_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_MC68901_OUT_GPIO_CB(_devcb) \ - devcb = &downcast(*device).set_out_gpio_callback(DEVCB_##_devcb); + downcast(*device).set_out_gpio_callback(DEVCB_##_devcb); #define MCFG_MC68901_OUT_TAO_CB(_devcb) \ - devcb = &downcast(*device).set_out_tao_callback(DEVCB_##_devcb); + downcast(*device).set_out_tao_callback(DEVCB_##_devcb); #define MCFG_MC68901_OUT_TBO_CB(_devcb) \ - devcb = &downcast(*device).set_out_tbo_callback(DEVCB_##_devcb); + downcast(*device).set_out_tbo_callback(DEVCB_##_devcb); #define MCFG_MC68901_OUT_TCO_CB(_devcb) \ - devcb = &downcast(*device).set_out_tco_callback(DEVCB_##_devcb); + downcast(*device).set_out_tco_callback(DEVCB_##_devcb); #define MCFG_MC68901_OUT_TDO_CB(_devcb) \ - devcb = &downcast(*device).set_out_tdo_callback(DEVCB_##_devcb); + downcast(*device).set_out_tdo_callback(DEVCB_##_devcb); #define MCFG_MC68901_OUT_SO_CB(_devcb) \ - devcb = &downcast(*device).set_out_so_callback(DEVCB_##_devcb); + downcast(*device).set_out_so_callback(DEVCB_##_devcb); /*#define MCFG_MC68901_OUT_RR_CB(_devcb) \ - devcb = &downcast(*device).set_out_rr_callback(DEVCB_##_devcb); + downcast(*device).set_out_rr_callback(DEVCB_##_devcb); #define MCFG_MC68901_OUT_TR_CB(_devcb) \ - devcb = &downcast(*device).set_out_tr_callback(DEVCB_##_devcb);*/ + downcast(*device).set_out_tr_callback(DEVCB_##_devcb);*/ //************************************************************************** diff --git a/src/devices/machine/mccs1850.h b/src/devices/machine/mccs1850.h index 8241203c3aa..bd7771bc6a0 100644 --- a/src/devices/machine/mccs1850.h +++ b/src/devices/machine/mccs1850.h @@ -31,13 +31,13 @@ //************************************************************************** #define MCFG_MCCS1850_INT_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_wr_callback(DEVCB_##_write); + downcast(*device).set_int_wr_callback(DEVCB_##_write); #define MCFG_MCCS1850_PSE_CALLBACK(_write) \ - devcb = &downcast(*device).set_pse_wr_callback(DEVCB_##_write); + downcast(*device).set_pse_wr_callback(DEVCB_##_write); #define MCFG_MCCS1850_NUC_CALLBACK(_write) \ - devcb = &downcast(*device).set_nuc_wr_callback(DEVCB_##_write); + downcast(*device).set_nuc_wr_callback(DEVCB_##_write); diff --git a/src/devices/machine/microtch.h b/src/devices/machine/microtch.h index fcff6cfd552..9efa11d7eb0 100644 --- a/src/devices/machine/microtch.h +++ b/src/devices/machine/microtch.h @@ -74,7 +74,7 @@ DECLARE_DEVICE_TYPE(MICROTOUCH, microtouch_device) #define MCFG_MICROTOUCH_ADD(_tag, _clock, _devcb) \ MCFG_DEVICE_ADD(_tag, MICROTOUCH, _clock) \ - devcb = &downcast(*device).set_stx_callback(DEVCB_##_devcb); + downcast(*device).set_stx_callback(DEVCB_##_devcb); #define MCFG_MICROTOUCH_TOUCH_CB(_class, _touch_cb) \ downcast(*device).set_touch_callback(microtouch_device::touch_cb(&_class::_touch_cb, this)); diff --git a/src/devices/machine/mm5740.h b/src/devices/machine/mm5740.h index bbdc12f5c47..e28fbdc0956 100644 --- a/src/devices/machine/mm5740.h +++ b/src/devices/machine/mm5740.h @@ -83,18 +83,18 @@ Vgg 18 -12V // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_MM5740_MATRIX_X1(_cb) devcb = &downcast(*device).set_x_cb<0>(DEVCB_##_cb); -#define MCFG_MM5740_MATRIX_X2(_cb) devcb = &downcast(*device).set_x_cb<1>(DEVCB_##_cb); -#define MCFG_MM5740_MATRIX_X3(_cb) devcb = &downcast(*device).set_x_cb<2>(DEVCB_##_cb); -#define MCFG_MM5740_MATRIX_X4(_cb) devcb = &downcast(*device).set_x_cb<3>(DEVCB_##_cb); -#define MCFG_MM5740_MATRIX_X5(_cb) devcb = &downcast(*device).set_x_cb<4>(DEVCB_##_cb); -#define MCFG_MM5740_MATRIX_X6(_cb) devcb = &downcast(*device).set_x_cb<5>(DEVCB_##_cb); -#define MCFG_MM5740_MATRIX_X7(_cb) devcb = &downcast(*device).set_x_cb<6>(DEVCB_##_cb); -#define MCFG_MM5740_MATRIX_X8(_cb) devcb = &downcast(*device).set_x_cb<7>(DEVCB_##_cb); -#define MCFG_MM5740_MATRIX_X9(_cb) devcb = &downcast(*device).set_x_cb<8>(DEVCB_##_cb); -#define MCFG_MM5740_SHIFT_CB(_cb) devcb = &downcast(*device).set_shift_cb(DEVCB_##_cb); -#define MCFG_MM5740_CONTROL_CB(_cb) devcb = &downcast(*device).set_control_cb(DEVCB_##_cb); -#define MCFG_MM5740_DATA_READY_CB(_cb) devcb = &downcast(*device).set_data_ready_cb(DEVCB_##_cb); +#define MCFG_MM5740_MATRIX_X1(_cb) downcast(*device).set_x_cb<0>(DEVCB_##_cb); +#define MCFG_MM5740_MATRIX_X2(_cb) downcast(*device).set_x_cb<1>(DEVCB_##_cb); +#define MCFG_MM5740_MATRIX_X3(_cb) downcast(*device).set_x_cb<2>(DEVCB_##_cb); +#define MCFG_MM5740_MATRIX_X4(_cb) downcast(*device).set_x_cb<3>(DEVCB_##_cb); +#define MCFG_MM5740_MATRIX_X5(_cb) downcast(*device).set_x_cb<4>(DEVCB_##_cb); +#define MCFG_MM5740_MATRIX_X6(_cb) downcast(*device).set_x_cb<5>(DEVCB_##_cb); +#define MCFG_MM5740_MATRIX_X7(_cb) downcast(*device).set_x_cb<6>(DEVCB_##_cb); +#define MCFG_MM5740_MATRIX_X8(_cb) downcast(*device).set_x_cb<7>(DEVCB_##_cb); +#define MCFG_MM5740_MATRIX_X9(_cb) downcast(*device).set_x_cb<8>(DEVCB_##_cb); +#define MCFG_MM5740_SHIFT_CB(_cb) downcast(*device).set_shift_cb(DEVCB_##_cb); +#define MCFG_MM5740_CONTROL_CB(_cb) downcast(*device).set_control_cb(DEVCB_##_cb); +#define MCFG_MM5740_DATA_READY_CB(_cb) downcast(*device).set_data_ready_cb(DEVCB_##_cb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/mm58167.h b/src/devices/machine/mm58167.h index 63cad307e7b..4c5e0326a1d 100644 --- a/src/devices/machine/mm58167.h +++ b/src/devices/machine/mm58167.h @@ -19,7 +19,7 @@ //************************************************************************** #define MCFG_MM58167_IRQ_CALLBACK(_cb) \ - devcb = &downcast(*device).set_irq_cb(DEVCB_##_cb); + downcast(*device).set_irq_cb(DEVCB_##_cb); //************************************************************************** diff --git a/src/devices/machine/mm74c922.h b/src/devices/machine/mm74c922.h index a85c517adc1..bd448c2eb22 100644 --- a/src/devices/machine/mm74c922.h +++ b/src/devices/machine/mm74c922.h @@ -49,22 +49,22 @@ downcast(*device).set_cap_debounce(_value); #define MCFG_MM74C922_DA_CALLBACK(_write) \ - devcb = &downcast(*device).set_da_wr_callback(DEVCB_##_write); + downcast(*device).set_da_wr_callback(DEVCB_##_write); #define MCFG_MM74C922_X1_CALLBACK(_read) \ - devcb = &downcast(*device).set_x1_rd_callback(DEVCB_##_read); + downcast(*device).set_x1_rd_callback(DEVCB_##_read); #define MCFG_MM74C922_X2_CALLBACK(_read) \ - devcb = &downcast(*device).set_x2_rd_callback(DEVCB_##_read); + downcast(*device).set_x2_rd_callback(DEVCB_##_read); #define MCFG_MM74C922_X3_CALLBACK(_read) \ - devcb = &downcast(*device).set_x3_rd_callback(DEVCB_##_read); + downcast(*device).set_x3_rd_callback(DEVCB_##_read); #define MCFG_MM74C922_X4_CALLBACK(_read) \ - devcb = &downcast(*device).set_x4_rd_callback(DEVCB_##_read); + downcast(*device).set_x4_rd_callback(DEVCB_##_read); #define MCFG_MM74C922_X5_CALLBACK(_read) \ - devcb = &downcast(*device).set_x5_rd_callback(DEVCB_##_read); + downcast(*device).set_x5_rd_callback(DEVCB_##_read); diff --git a/src/devices/machine/mos6526.h b/src/devices/machine/mos6526.h index 2111106c76b..07001edf4d6 100644 --- a/src/devices/machine/mos6526.h +++ b/src/devices/machine/mos6526.h @@ -71,28 +71,28 @@ downcast(*device).set_tod_clock(_clock); #define MCFG_MOS6526_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_MOS6526_CNT_CALLBACK(_write) \ - devcb = &downcast(*device).set_cnt_wr_callback(DEVCB_##_write); + downcast(*device).set_cnt_wr_callback(DEVCB_##_write); #define MCFG_MOS6526_SP_CALLBACK(_write) \ - devcb = &downcast(*device).set_sp_wr_callback(DEVCB_##_write); + downcast(*device).set_sp_wr_callback(DEVCB_##_write); #define MCFG_MOS6526_PA_INPUT_CALLBACK(_read) \ - devcb = &downcast(*device).set_pa_rd_callback(DEVCB_##_read); + downcast(*device).set_pa_rd_callback(DEVCB_##_read); #define MCFG_MOS6526_PA_OUTPUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_pa_wr_callback(DEVCB_##_write); + downcast(*device).set_pa_wr_callback(DEVCB_##_write); #define MCFG_MOS6526_PB_INPUT_CALLBACK(_read) \ - devcb = &downcast(*device).set_pb_rd_callback(DEVCB_##_read); + downcast(*device).set_pb_rd_callback(DEVCB_##_read); #define MCFG_MOS6526_PB_OUTPUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_pb_wr_callback(DEVCB_##_write); + downcast(*device).set_pb_wr_callback(DEVCB_##_write); #define MCFG_MOS6526_PC_CALLBACK(_write) \ - devcb = &downcast(*device).set_pc_wr_callback(DEVCB_##_write); + downcast(*device).set_pc_wr_callback(DEVCB_##_write); @@ -119,6 +119,14 @@ public: template devcb_base &set_pb_rd_callback(Object &&cb) { return m_read_pb.set_callback(std::forward(cb)); } template devcb_base &set_pb_wr_callback(Object &&cb) { return m_write_pb.set_callback(std::forward(cb)); } template devcb_base &set_pc_wr_callback(Object &&cb) { return m_write_pc.set_callback(std::forward(cb)); } + auto irq_wr_callback() { return m_write_irq.bind(); } + auto cnt_wr_callback() { return m_write_cnt.bind(); } + auto sp_wr_callback() { return m_write_sp.bind(); } + auto pa_rd_callback() { return m_read_pa.bind(); } + auto pa_wr_callback() { return m_write_pa.bind(); } + auto pb_rd_callback() { return m_read_pb.bind(); } + auto pb_wr_callback() { return m_write_pb.bind(); } + auto pc_wr_callback() { return m_write_pc.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/machine/mos6529.h b/src/devices/machine/mos6529.h index ca0a4525d1b..abddc4175c7 100644 --- a/src/devices/machine/mos6529.h +++ b/src/devices/machine/mos6529.h @@ -32,28 +32,28 @@ //************************************************************************** #define MCFG_MOS6529_P0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_p0_handler(DEVCB_##_devcb); + downcast(*device).set_p0_handler(DEVCB_##_devcb); #define MCFG_MOS6529_P1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_p1_handler(DEVCB_##_devcb); + downcast(*device).set_p1_handler(DEVCB_##_devcb); #define MCFG_MOS6529_P2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_p2_handler(DEVCB_##_devcb); + downcast(*device).set_p2_handler(DEVCB_##_devcb); #define MCFG_MOS6529_P3_HANDLER(_devcb) \ - devcb = &downcast(*device).set_p3_handler(DEVCB_##_devcb); + downcast(*device).set_p3_handler(DEVCB_##_devcb); #define MCFG_MOS6529_P4_HANDLER(_devcb) \ - devcb = &downcast(*device).set_p4_handler(DEVCB_##_devcb); + downcast(*device).set_p4_handler(DEVCB_##_devcb); #define MCFG_MOS6529_P5_HANDLER(_devcb) \ - devcb = &downcast(*device).set_p5_handler(DEVCB_##_devcb); + downcast(*device).set_p5_handler(DEVCB_##_devcb); #define MCFG_MOS6529_P6_HANDLER(_devcb) \ - devcb = &downcast(*device).set_p6_handler(DEVCB_##_devcb); + downcast(*device).set_p6_handler(DEVCB_##_devcb); #define MCFG_MOS6529_P7_HANDLER(_devcb) \ - devcb = &downcast(*device).set_p7_handler(DEVCB_##_devcb); + downcast(*device).set_p7_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/mos6530.h b/src/devices/machine/mos6530.h index 2491e547a53..cc930fa8613 100644 --- a/src/devices/machine/mos6530.h +++ b/src/devices/machine/mos6530.h @@ -110,15 +110,15 @@ DECLARE_DEVICE_TYPE(MOS6530, mos6530_device) #define MCFG_MOS6530_IN_PA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_MOS6530_OUT_PA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_MOS6530_IN_PB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_MOS6530_OUT_PB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); #endif // MAME_MACHINE_MOS6530_H diff --git a/src/devices/machine/mos6530n.h b/src/devices/machine/mos6530n.h index 56080ff49dc..a5dfd3ee6fe 100644 --- a/src/devices/machine/mos6530n.h +++ b/src/devices/machine/mos6530n.h @@ -64,115 +64,115 @@ //************************************************************************** #define MCFG_MOS6530n_IRQ_CB(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_MOS6530n_IN_PA_CB(_read) \ - devcb = &downcast(*device).set_pa_rd_callback(DEVCB_##_read); + downcast(*device).set_pa_rd_callback(DEVCB_##_read); #define MCFG_MOS6530n_OUT_PA_CB(_write) \ - devcb = &downcast(*device).set_pa_wr_callback(DEVCB_##_write); + downcast(*device).set_pa_wr_callback(DEVCB_##_write); #define MCFG_MOS6530n_IN_PB_CB(_read) \ - devcb = &downcast(*device).set_pb_rd_callback(DEVCB_##_read); + downcast(*device).set_pb_rd_callback(DEVCB_##_read); #define MCFG_MOS6530n_OUT_PB_CB(_write) \ - devcb = &downcast(*device).set_pb_wr_callback(DEVCB_##_write); + downcast(*device).set_pb_wr_callback(DEVCB_##_write); #define MCFG_MOS6530n_IN_PA0_CB(_read) \ - devcb = &downcast(*device).set_pa_rd_callback<0>(DEVCB_##_read); + downcast(*device).set_pa_rd_callback<0>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PA1_CB(_read) \ - devcb = &downcast(*device).set_pa_rd_callback<1>(DEVCB_##_read); + downcast(*device).set_pa_rd_callback<1>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PA2_CB(_read) \ - devcb = &downcast(*device).set_pa_rd_callback<2>(DEVCB_##_read); + downcast(*device).set_pa_rd_callback<2>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PA3_CB(_read) \ - devcb = &downcast(*device).set_pa_rd_callback<3>(DEVCB_##_read); + downcast(*device).set_pa_rd_callback<3>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PA4_CB(_read) \ - devcb = &downcast(*device).set_pa_rd_callback<4>(DEVCB_##_read); + downcast(*device).set_pa_rd_callback<4>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PA5_CB(_read) \ - devcb = &downcast(*device).set_pa_rd_callback<5>(DEVCB_##_read); + downcast(*device).set_pa_rd_callback<5>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PA6_CB(_read) \ - devcb = &downcast(*device).set_pa_rd_callback<6>(DEVCB_##_read); + downcast(*device).set_pa_rd_callback<6>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PA7_CB(_read) \ - devcb = &downcast(*device).set_pa_rd_callback<7>(DEVCB_##_read); + downcast(*device).set_pa_rd_callback<7>(DEVCB_##_read); #define MCFG_MOS6530n_OUT_PA0_CB(_write) \ - devcb = &downcast(*device).set_pa_wr_callback<0>(DEVCB_##_write); + downcast(*device).set_pa_wr_callback<0>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA1_CB(_write) \ - devcb = &downcast(*device).set_pa_wr_callback<1>(DEVCB_##_write); + downcast(*device).set_pa_wr_callback<1>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA2_CB(_write) \ - devcb = &downcast(*device).set_pa_wr_callback<2>(DEVCB_##_write); + downcast(*device).set_pa_wr_callback<2>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA3_CB(_write) \ - devcb = &downcast(*device).set_pa_wr_callback<3>(DEVCB_##_write); + downcast(*device).set_pa_wr_callback<3>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA4_CB(_write) \ - devcb = &downcast(*device).set_pa_wr_callback<4>(DEVCB_##_write); + downcast(*device).set_pa_wr_callback<4>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA5_CB(_write) \ - devcb = &downcast(*device).set_pa_wr_callback<5>(DEVCB_##_write); + downcast(*device).set_pa_wr_callback<5>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA6_CB(_write) \ - devcb = &downcast(*device).set_pa_wr_callback<6>(DEVCB_##_write); + downcast(*device).set_pa_wr_callback<6>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA7_CB(_write) \ - devcb = &downcast(*device).set_pa_wr_callback<7>(DEVCB_##_write); + downcast(*device).set_pa_wr_callback<7>(DEVCB_##_write); #define MCFG_MOS6530n_IN_PB0_CB(_read) \ - devcb = &downcast(*device).set_pb_rd_callback<0>(DEVCB_##_read); + downcast(*device).set_pb_rd_callback<0>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PB1_CB(_read) \ - devcb = &downcast(*device).set_pb_rd_callback<1>(DEVCB_##_read); + downcast(*device).set_pb_rd_callback<1>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PB2_CB(_read) \ - devcb = &downcast(*device).set_pb_rd_callback<2>(DEVCB_##_read); + downcast(*device).set_pb_rd_callback<2>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PB3_CB(_read) \ - devcb = &downcast(*device).set_pb_rd_callback<3>(DEVCB_##_read); + downcast(*device).set_pb_rd_callback<3>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PB4_CB(_read) \ - devcb = &downcast(*device).set_pb_rd_callback<4>(DEVCB_##_read); + downcast(*device).set_pb_rd_callback<4>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PB5_CB(_read) \ - devcb = &downcast(*device).set_pb_rd_callback<5>(DEVCB_##_read); + downcast(*device).set_pb_rd_callback<5>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PB6_CB(_read) \ - devcb = &downcast(*device).set_pb_rd_callback<6>(DEVCB_##_read); + downcast(*device).set_pb_rd_callback<6>(DEVCB_##_read); #define MCFG_MOS6530n_IN_PB7_CB(_read) \ - devcb = &downcast(*device).set_pb_rd_callback<7>(DEVCB_##_read); + downcast(*device).set_pb_rd_callback<7>(DEVCB_##_read); #define MCFG_MOS6530n_OUT_PB0_CB(_write) \ - devcb = &downcast(*device).set_pb_wr_callback<0>(DEVCB_##_write); + downcast(*device).set_pb_wr_callback<0>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB1_CB(_write) \ - devcb = &downcast(*device).set_pb_wr_callback<1>(DEVCB_##_write); + downcast(*device).set_pb_wr_callback<1>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB2_CB(_write) \ - devcb = &downcast(*device).set_pb_wr_callback<2>(DEVCB_##_write); + downcast(*device).set_pb_wr_callback<2>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB3_CB(_write) \ - devcb = &downcast(*device).set_pb_wr_callback<3>(DEVCB_##_write); + downcast(*device).set_pb_wr_callback<3>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB4_CB(_write) \ - devcb = &downcast(*device).set_pb_wr_callback<4>(DEVCB_##_write); + downcast(*device).set_pb_wr_callback<4>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB5_CB(_write) \ - devcb = &downcast(*device).set_pb_wr_callback<5>(DEVCB_##_write); + downcast(*device).set_pb_wr_callback<5>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB6_CB(_write) \ - devcb = &downcast(*device).set_pb_wr_callback<6>(DEVCB_##_write); + downcast(*device).set_pb_wr_callback<6>(DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB7_CB(_write) \ - devcb = &downcast(*device).set_pb_wr_callback<7>(DEVCB_##_write); + downcast(*device).set_pb_wr_callback<7>(DEVCB_##_write); @@ -194,6 +194,15 @@ public: template devcb_base &set_pa_wr_callback(Object &&cb) { return m_out_pa_cb[N].set_callback(std::forward(cb)); } template devcb_base &set_pb_rd_callback(Object &&cb) { return m_in_pb_cb[N].set_callback(std::forward(cb)); } template devcb_base &set_pb_wr_callback(Object &&cb) { return m_out_pb_cb[N].set_callback(std::forward(cb)); } + auto irq_wr_callback() { return m_irq_cb.bind(); } + auto pa_rd_callback() { return m_in8_pa_cb.bind(); } + auto pa_wr_callback() { return m_out8_pa_cb.bind(); } + auto pb_rd_callback() { return m_in8_pb_cb.bind(); } + auto pb_wr_callback() { return m_out8_pb_cb.bind(); } + template auto pa_rd_callback() { return m_in_pa_cb[N].bind(); } + template auto pa_wr_callback() { return m_out_pa_cb[N].bind(); } + template auto pb_rd_callback() { return m_in_pb_cb[N].bind(); } + template auto pb_wr_callback() { return m_out_pb_cb[N].bind(); } DECLARE_WRITE_LINE_MEMBER( pa0_w ) { pa_w(0, state); } DECLARE_WRITE_LINE_MEMBER( pa1_w ) { pa_w(1, state); } diff --git a/src/devices/machine/mos6551.h b/src/devices/machine/mos6551.h index 07d1f7069ba..319f00e803d 100644 --- a/src/devices/machine/mos6551.h +++ b/src/devices/machine/mos6551.h @@ -34,19 +34,19 @@ downcast(*device).set_xtal(_xtal); #define MCFG_MOS6551_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_MOS6551_TXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txd_handler(DEVCB_##_devcb); + downcast(*device).set_txd_handler(DEVCB_##_devcb); #define MCFG_MOS6551_RXC_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rxc_handler(DEVCB_##_devcb); + downcast(*device).set_rxc_handler(DEVCB_##_devcb); #define MCFG_MOS6551_RTS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rts_handler(DEVCB_##_devcb); + downcast(*device).set_rts_handler(DEVCB_##_devcb); #define MCFG_MOS6551_DTR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dtr_handler(DEVCB_##_devcb); + downcast(*device).set_dtr_handler(DEVCB_##_devcb); class mos6551_device : public device_t { @@ -58,6 +58,11 @@ public: template devcb_base &set_rxc_handler(Object &&cb) { return m_rxc_handler.set_callback(std::forward(cb)); } template devcb_base &set_rts_handler(Object &&cb) { return m_rts_handler.set_callback(std::forward(cb)); } template devcb_base &set_dtr_handler(Object &&cb) { return m_dtr_handler.set_callback(std::forward(cb)); } + auto irq_handler() { return m_irq_handler.bind(); } + auto txd_handler() { return m_txd_handler.bind(); } + auto rxc_handler() { return m_rxc_handler.bind(); } + auto rts_handler() { return m_rts_handler.bind(); } + auto dtr_handler() { return m_dtr_handler.bind(); } DECLARE_READ8_MEMBER(read); DECLARE_WRITE8_MEMBER(write); diff --git a/src/devices/machine/mos8722.h b/src/devices/machine/mos8722.h index 330d22059b6..744adf415e7 100644 --- a/src/devices/machine/mos8722.h +++ b/src/devices/machine/mos8722.h @@ -46,19 +46,19 @@ //************************************************************************** #define MCFG_MOS8722_Z80EN_CALLBACK(_write) \ - devcb = &downcast(*device).set_z80en_wr_callback(DEVCB_##_write); + downcast(*device).set_z80en_wr_callback(DEVCB_##_write); #define MCFG_MOS8722_FSDIR_CALLBACK(_write) \ - devcb = &downcast(*device).set_fsdir_wr_callback(DEVCB_##_write); + downcast(*device).set_fsdir_wr_callback(DEVCB_##_write); #define MCFG_MOS8722_GAME_CALLBACK(_read) \ - devcb = &downcast(*device).set_game_rd_callback(DEVCB_##_read); + downcast(*device).set_game_rd_callback(DEVCB_##_read); #define MCFG_MOS8722_EXROM_CALLBACK(_read) \ - devcb = &downcast(*device).set_exrom_rd_callback(DEVCB_##_read); + downcast(*device).set_exrom_rd_callback(DEVCB_##_read); #define MCFG_MOS8722_SENSE40_CALLBACK(_read) \ - devcb = &downcast(*device).set_sense40_rd_callback(DEVCB_##_read); + downcast(*device).set_sense40_rd_callback(DEVCB_##_read); diff --git a/src/devices/machine/mpu401.h b/src/devices/machine/mpu401.h index 1dd5d55243c..7fc7a718bb4 100644 --- a/src/devices/machine/mpu401.h +++ b/src/devices/machine/mpu401.h @@ -12,7 +12,7 @@ MCFG_IRQ_FUNC(irqf) #define MCFG_IRQ_FUNC(irqf) \ - devcb = &downcast(device)->set_irqf(DEVCB_##irqf); + downcast(device)->set_irqf(DEVCB_##irqf); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/msm58321.h b/src/devices/machine/msm58321.h index 2d0d9a4d424..24eb2dd327d 100644 --- a/src/devices/machine/msm58321.h +++ b/src/devices/machine/msm58321.h @@ -45,19 +45,19 @@ //************************************************************************** #define MCFG_MSM58321_D0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d0_handler(DEVCB_##_devcb); + downcast(*device).set_d0_handler(DEVCB_##_devcb); #define MCFG_MSM58321_D1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d1_handler(DEVCB_##_devcb); + downcast(*device).set_d1_handler(DEVCB_##_devcb); #define MCFG_MSM58321_D2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d2_handler(DEVCB_##_devcb); + downcast(*device).set_d2_handler(DEVCB_##_devcb); #define MCFG_MSM58321_D3_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d3_handler(DEVCB_##_devcb); + downcast(*device).set_d3_handler(DEVCB_##_devcb); #define MCFG_MSM58321_BUSY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_busy_handler(DEVCB_##_devcb); + downcast(*device).set_busy_handler(DEVCB_##_devcb); #define MCFG_MSM58321_YEAR0(_year0) \ downcast(*device).set_year0(_year0); diff --git a/src/devices/machine/msm6242.h b/src/devices/machine/msm6242.h index 0c8d387df82..bd6bd89403e 100644 --- a/src/devices/machine/msm6242.h +++ b/src/devices/machine/msm6242.h @@ -41,7 +41,7 @@ #define MCFG_MSM6242_OUT_INT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_int_handler(DEVCB_##_devcb); + downcast(*device).set_out_int_handler(DEVCB_##_devcb); // ======================> msm6242_device @@ -53,6 +53,7 @@ public: msm6242_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); template devcb_base &set_out_int_handler(Object &&cb) { return m_out_int_handler.set_callback(std::forward(cb)); } + auto out_int_handler() { return m_out_int_handler.bind(); } // I/O operations DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/machine/msm6253.h b/src/devices/machine/msm6253.h index a4f9e33efaa..4f617b29a4e 100644 --- a/src/devices/machine/msm6253.h +++ b/src/devices/machine/msm6253.h @@ -37,22 +37,22 @@ downcast(*device).set_input_tag<3>(_input); #define MCFG_MSM6253_IN0_ANALOG_READ(_class, _method) \ - downcast(*device).set_input_cb<0>(msm6253_device::port_read_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_input_cb<0>(&_class::_method, #_class "::" #_method, this); #define MCFG_MSM6253_IN1_ANALOG_READ(_class, _method) \ - downcast(*device).set_input_cb<1>(msm6253_device::port_read_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_input_cb<1>(&_class::_method, #_class "::" #_method, this); #define MCFG_MSM6253_IN2_ANALOG_READ(_class, _method) \ - downcast(*device).set_input_cb<2>(msm6253_device::port_read_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_input_cb<2>(&_class::_method, #_class "::" #_method, this); #define MCFG_MSM6253_IN3_ANALOG_READ(_class, _method) \ - downcast(*device).set_input_cb<3>(msm6253_device::port_read_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_input_cb<3>(&_class::_method, #_class "::" #_method, this); #define MCFG_MSM6253_IN0_ANALOG_DEVREAD(_tag, _class, _method) \ - downcast(*device).set_input_cb<0>(msm6253_device::port_read_delegate(&_class::_method, #_class "::" #_method, _tag)); + downcast(*device).set_input_cb<0>(&_class::_method, #_class "::" #_method, _tag); #define MCFG_MSM6253_IN1_ANALOG_DEVREAD(_tag, _class, _method) \ - downcast(*device).set_input_cb<1>(msm6253_device::port_read_delegate(&_class::_method, #_class "::" #_method, _tag)); + downcast(*device).set_input_cb<1>(&_class::_method, #_class "::" #_method, _tag); #define MCFG_MSM6253_IN2_ANALOG_DEVREAD(_tag, _class, _method) \ - downcast(*device).set_input_cb<2>(msm6253_device::port_read_delegate(&_class::_method, #_class "::" #_method, _tag)); + downcast(*device).set_input_cb<2>(&_class::_method, #_class "::" #_method, _tag); #define MCFG_MSM6253_IN3_ANALOG_DEVREAD(_tag, _class, _method) \ - downcast(*device).set_input_cb<3>(msm6253_device::port_read_delegate(&_class::_method, #_class "::" #_method, _tag)); + downcast(*device).set_input_cb<3>(&_class::_method, #_class "::" #_method, _tag); //************************************************************************** @@ -71,7 +71,7 @@ public: // configuration template void set_input_tag(const char *tag) { m_analog_ports[P].set_tag(tag); } - template void set_input_cb(Object &&cb) { m_analog_input_cb[P] = std::forward(cb); } + template void set_input_cb(T &&... args) { m_analog_input_cb[P] = port_read_delegate(std::forward(args)...); } // write handlers WRITE8_MEMBER(address_w); diff --git a/src/devices/machine/ncr5380.h b/src/devices/machine/ncr5380.h index ca63db53817..d6f5eb76d06 100644 --- a/src/devices/machine/ncr5380.h +++ b/src/devices/machine/ncr5380.h @@ -37,7 +37,7 @@ enum // device stuff #define MCFG_NCR5380_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); class ncr5380_device : public legacy_scsi_host_adapter { diff --git a/src/devices/machine/ncr5380n.h b/src/devices/machine/ncr5380n.h index 8d627970df9..973616c65a3 100644 --- a/src/devices/machine/ncr5380n.h +++ b/src/devices/machine/ncr5380n.h @@ -16,10 +16,10 @@ #include "machine/nscsi_bus.h" #define MCFG_NCR5380N_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_NCR5380N_DRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_drq_handler(DEVCB_##_devcb); + downcast(*device).set_drq_handler(DEVCB_##_devcb); class ncr5380n_device : public nscsi_device { diff --git a/src/devices/machine/ncr5385.h b/src/devices/machine/ncr5385.h index a7b551b2440..8cbe4ea9e79 100644 --- a/src/devices/machine/ncr5385.h +++ b/src/devices/machine/ncr5385.h @@ -50,7 +50,7 @@ //************************************************************************** #define MCFG_NCR5385_INT_CB(_int) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_int); + downcast(*device).set_int_callback(DEVCB_##_int); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/ncr5390.h b/src/devices/machine/ncr5390.h index 4e24a20eec8..a257bdf31d6 100644 --- a/src/devices/machine/ncr5390.h +++ b/src/devices/machine/ncr5390.h @@ -8,10 +8,10 @@ #include "machine/nscsi_bus.h" #define MCFG_NCR5390_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_NCR5390_DRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_drq_handler(DEVCB_##_devcb); + downcast(*device).set_drq_handler(DEVCB_##_devcb); class ncr5390_device : public nscsi_device { diff --git a/src/devices/machine/ncr539x.h b/src/devices/machine/ncr539x.h index 074a73c307d..2f024d643ec 100644 --- a/src/devices/machine/ncr539x.h +++ b/src/devices/machine/ncr539x.h @@ -15,10 +15,10 @@ // device stuff #define MCFG_NCR539X_OUT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq_callback(DEVCB_##_devcb); #define MCFG_NCR539X_OUT_DRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq_callback(DEVCB_##_devcb); class ncr539x_device : public legacy_scsi_host_adapter { diff --git a/src/devices/machine/nsc810.h b/src/devices/machine/nsc810.h index ca175ebd6b8..bebeb8f82a6 100644 --- a/src/devices/machine/nsc810.h +++ b/src/devices/machine/nsc810.h @@ -108,28 +108,28 @@ private: downcast(device)->set_timer1_clock(_t1clk); #define MCFG_NSC810_PORTA_READ(_read) \ - devcb = &downcast(*device).set_portA_read_callback(DEVCB_##_read); + downcast(*device).set_portA_read_callback(DEVCB_##_read); #define MCFG_NSC810_PORTB_READ(_read) \ - devcb = &downcast(*device).set_portB_read_callback(DEVCB_##_read); + downcast(*device).set_portB_read_callback(DEVCB_##_read); #define MCFG_NSC810_PORTC_READ(_read) \ - devcb = &downcast(*device).set_portC_read_callback(DEVCB_##_read); + downcast(*device).set_portC_read_callback(DEVCB_##_read); #define MCFG_NSC810_PORTA_WRITE(_write) \ - devcb = &downcast(*device).set_portA_write_callback(DEVCB_##_write); + downcast(*device).set_portA_write_callback(DEVCB_##_write); #define MCFG_NSC810_PORTB_WRITE(_write) \ - devcb = &downcast(*device).set_portB_write_callback(DEVCB_##_write); + downcast(*device).set_portB_write_callback(DEVCB_##_write); #define MCFG_NSC810_PORTC_WRITE(_write) \ - devcb = &downcast(*device).set_portC_write_callback(DEVCB_##_write); + downcast(*device).set_portC_write_callback(DEVCB_##_write); #define MCFG_NSC810_TIMER0_OUT(_write) \ - devcb = &downcast(*device).set_timer0_callback(DEVCB_##_write); + downcast(*device).set_timer0_callback(DEVCB_##_write); #define MCFG_NSC810_TIMER1_OUT(_write) \ - devcb = &downcast(*device).set_timer1_callback(DEVCB_##_write); + downcast(*device).set_timer1_callback(DEVCB_##_write); // device type definition DECLARE_DEVICE_TYPE(NSC810, nsc810_device) diff --git a/src/devices/machine/nscsi_cb.h b/src/devices/machine/nscsi_cb.h index 27279e5eb04..b5156935a98 100644 --- a/src/devices/machine/nscsi_cb.h +++ b/src/devices/machine/nscsi_cb.h @@ -9,22 +9,22 @@ #define MCFG_NSCSICB_RST_HANDLER(_line) \ - devcb = &downcast(device)->set_rst_callback(DEVCB_##_line); + downcast(device)->set_rst_callback(DEVCB_##_line); #define MCFG_NSCSICB_ATN_HANDLER(_line) \ - devcb = &downcast(device)->set_atn_callback(DEVCB_##_line); + downcast(device)->set_atn_callback(DEVCB_##_line); #define MCFG_NSCSICB_ACK_HANDLER(_line) \ - devcb = &downcast(device)->set_ack_callback(DEVCB_##_line); + downcast(device)->set_ack_callback(DEVCB_##_line); #define MCFG_NSCSICB_REQ_HANDLER(_line) \ - devcb = &downcast(device)->set_req_callback(DEVCB_##_line); + downcast(device)->set_req_callback(DEVCB_##_line); #define MCFG_NSCSICB_MSG_HANDLER(_line) \ - devcb = &downcast(device)->set_msg_callback(DEVCB_##_line); + downcast(device)->set_msg_callback(DEVCB_##_line); #define MCFG_NSCSICB_IO_HANDLER(_line) \ - devcb = &downcast(device)->set_io_callback(DEVCB_##_line); + downcast(device)->set_io_callback(DEVCB_##_line); #define MCFG_NSCSICB_CD_HANDLER(_line) \ downcast(device)->set_cd_callback(DEVCB_##_line); diff --git a/src/devices/machine/output_latch.h b/src/devices/machine/output_latch.h index bdadd772ade..c915b4c7207 100644 --- a/src/devices/machine/output_latch.h +++ b/src/devices/machine/output_latch.h @@ -7,28 +7,28 @@ #define MCFG_OUTPUT_LATCH_BIT0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bit_handler<0>(DEVCB_##_devcb); + downcast(*device).set_bit_handler<0>(DEVCB_##_devcb); #define MCFG_OUTPUT_LATCH_BIT1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bit_handler<1>(DEVCB_##_devcb); + downcast(*device).set_bit_handler<1>(DEVCB_##_devcb); #define MCFG_OUTPUT_LATCH_BIT2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bit_handler<2>(DEVCB_##_devcb); + downcast(*device).set_bit_handler<2>(DEVCB_##_devcb); #define MCFG_OUTPUT_LATCH_BIT3_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bit_handler<3>(DEVCB_##_devcb); + downcast(*device).set_bit_handler<3>(DEVCB_##_devcb); #define MCFG_OUTPUT_LATCH_BIT4_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bit_handler<4>(DEVCB_##_devcb); + downcast(*device).set_bit_handler<4>(DEVCB_##_devcb); #define MCFG_OUTPUT_LATCH_BIT5_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bit_handler<5>(DEVCB_##_devcb); + downcast(*device).set_bit_handler<5>(DEVCB_##_devcb); #define MCFG_OUTPUT_LATCH_BIT6_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bit_handler<6>(DEVCB_##_devcb); + downcast(*device).set_bit_handler<6>(DEVCB_##_devcb); #define MCFG_OUTPUT_LATCH_BIT7_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bit_handler<7>(DEVCB_##_devcb); + downcast(*device).set_bit_handler<7>(DEVCB_##_devcb); class output_latch_device : public device_t { @@ -36,6 +36,7 @@ public: output_latch_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); template devcb_base &set_bit_handler(Object &&cb) { return m_bit_handlers[Bit].set_callback(std::forward(cb)); } + template auto bit_handler() { return m_bit_handlers[Bit].bind(); } void write(uint8_t data); DECLARE_WRITE8_MEMBER(bus_w) { write(data); } diff --git a/src/devices/machine/pc_fdc.h b/src/devices/machine/pc_fdc.h index 2cc6970a621..76fe6db1730 100644 --- a/src/devices/machine/pc_fdc.h +++ b/src/devices/machine/pc_fdc.h @@ -20,10 +20,10 @@ MCFG_DEVICE_ADD(_tag, PC_FDC_AT, 0) #define MCFG_PC_FDC_INTRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_intrq_wr_callback(DEVCB_##_write); + downcast(*device).set_intrq_wr_callback(DEVCB_##_write); #define MCFG_PC_FDC_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); class pc_fdc_family_device : public pc_fdc_interface { public: diff --git a/src/devices/machine/pc_lpt.h b/src/devices/machine/pc_lpt.h index e9d46e37247..d85768bb5d4 100644 --- a/src/devices/machine/pc_lpt.h +++ b/src/devices/machine/pc_lpt.h @@ -14,7 +14,7 @@ #include "bus/centronics/ctronics.h" #define MCFG_PC_LPT_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); /*************************************************************************** DEVICE CONFIGURATION MACROS diff --git a/src/devices/machine/pci-ide.h b/src/devices/machine/pci-ide.h index c6bafacc8df..4a7519a531e 100644 --- a/src/devices/machine/pci-ide.h +++ b/src/devices/machine/pci-ide.h @@ -20,7 +20,7 @@ TODO: #include "idectrl.h" #define MCFG_IDE_PCI_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); // This will set the top 12 bits for address decoding in legacy mode. Needed for seattle driver. #define MCFG_IDE_PCI_SET_LEGACY_TOP(_val) \ @@ -40,6 +40,7 @@ public: ide_pci_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); template devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward(cb)); } + auto irq_handler() { return m_irq_handler.bind(); } void set_legacy_top(int val) { m_legacy_top = val & 0xfff; }; void set_pif(int val) { m_pif = val & 0xff; }; diff --git a/src/devices/machine/pci9050.h b/src/devices/machine/pci9050.h index d3915ea10d8..fe42ea4fa80 100644 --- a/src/devices/machine/pci9050.h +++ b/src/devices/machine/pci9050.h @@ -19,10 +19,10 @@ downcast(device)->set_map(id, address_map_constructor(&map, #map, this), this); #define MCFG_PCI9050_USER_INPUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_user_input_callback(DEVCB_##_write); + downcast(*device).set_user_input_callback(DEVCB_##_write); #define MCFG_PCI9050_USER_OUTPUT_CALLBACK(_read) \ - devcb = &downcast(*device).set_user_output_callback(DEVCB_##_read); + downcast(*device).set_user_output_callback(DEVCB_##_read); class pci9050_device : public pci_device { diff --git a/src/devices/machine/pckeybrd.h b/src/devices/machine/pckeybrd.h index 15e5cc92b3a..622af173bf8 100644 --- a/src/devices/machine/pckeybrd.h +++ b/src/devices/machine/pckeybrd.h @@ -115,16 +115,16 @@ DECLARE_DEVICE_TYPE(AT_KEYB, at_keyboard_device) #define MCFG_PC_KEYB_ADD(_tag, _cb) \ MCFG_DEVICE_ADD(_tag, PC_KEYB, 0) \ - devcb = &downcast(*device).set_keypress_callback(DEVCB_##_cb); + downcast(*device).set_keypress_callback(DEVCB_##_cb); #define MCFG_AT_KEYB_ADD(_tag, _def_set, _cb) \ MCFG_DEVICE_ADD(_tag, AT_KEYB, 0) \ downcast(*device).set_type(pc_keyboard_device::KEYBOARD_TYPE::AT, _def_set); \ - devcb = &downcast(*device).set_keypress_callback(DEVCB_##_cb); + downcast(*device).set_keypress_callback(DEVCB_##_cb); #define MCFG_AT_MF2_KEYB_ADD(_tag, _def_set, _cb) \ MCFG_DEVICE_ADD(_tag, AT_KEYB, 0) \ downcast(*device).set_type(pc_keyboard_device::KEYBOARD_TYPE_MF2, _def_set); \ - devcb = &downcast(*device).set_keypress_callback(DEVCB_##_cb); + downcast(*device).set_keypress_callback(DEVCB_##_cb); #endif // MAME_MACHINE_PCKEYBRD_H diff --git a/src/devices/machine/pdc.h b/src/devices/machine/pdc.h index 734a1849af6..984f93b27b5 100644 --- a/src/devices/machine/pdc.h +++ b/src/devices/machine/pdc.h @@ -115,8 +115,8 @@ DECLARE_DEVICE_TYPE(PDC, pdc_device) /* MCFG defines */ #define MCFG_PDC_R_CB(_devcb) \ - devcb = &downcast(*device).m68k_r_callback(DEVCB_##_devcb); + downcast(*device).m68k_r_callback(DEVCB_##_devcb); #define MCFG_PDC_W_CB(_devcb) \ - devcb = &downcast(*device).m68k_w_callback(DEVCB_##_devcb); + downcast(*device).m68k_w_callback(DEVCB_##_devcb); #endif // MAME_MACHINE_PDC_H diff --git a/src/devices/machine/phi.h b/src/devices/machine/phi.h index 59b538e8fc8..ea3cad4c09a 100644 --- a/src/devices/machine/phi.h +++ b/src/devices/machine/phi.h @@ -72,23 +72,19 @@ public: PHI_488_SIGNAL_COUNT }; - template devcb_base& set_dio_read_cb(Object &&cb) - { return m_dio_read_func.set_callback(std::forward(cb)); } + template devcb_base& set_dio_read_cb(Object &&cb) { return m_dio_read_func.set_callback(std::forward(cb)); } + template devcb_base& set_dio_write_cb(Object &&cb) { return m_dio_write_func.set_callback(std::forward(cb)); } + template devcb_base& set_488_signal_write_cb(phi_488_signal_t signal , Object &&cb) { return m_signal_wr_fns[ signal ].set_callback(std::forward(cb)); } + template devcb_base& set_int_write_cb(Object &&cb) { return m_int_write_func.set_callback(std::forward(cb)); } + template devcb_base& set_dmarq_write_cb(Object &&cb) { return m_dmarq_write_func.set_callback(std::forward(cb)); } + template devcb_base &set_sys_cntrl_read_cb(Object &&cb) { return m_sys_cntrl_read_func.set_callback(std::forward(cb)); } - template devcb_base& set_dio_write_cb(Object &&cb) - { return m_dio_write_func.set_callback(std::forward(cb)); } - - template devcb_base& set_488_signal_write_cb(phi_488_signal_t signal , Object &&cb) - { return m_signal_wr_fns[ signal ].set_callback(std::forward(cb)); } - - template devcb_base& set_int_write_cb(Object &&cb) - { return m_int_write_func.set_callback(std::forward(cb)); } - - template devcb_base& set_dmarq_write_cb(Object &&cb) - { return m_dmarq_write_func.set_callback(std::forward(cb)); } - - template devcb_base &set_sys_cntrl_read_cb(Object &&cb) - { return m_sys_cntrl_read_func.set_callback(std::forward(cb)); } + auto dio_read_cb() { return m_dio_read_func.bind(); } + auto dio_write_cb() { return m_dio_write_func.bind(); } + template auto signal_write_cb() { return m_signal_wr_fns[ Signal ].bind(); } + auto int_write_cb() { return m_int_write_func.bind(); } + auto dmarq_write_cb() { return m_dmarq_write_func.bind(); } + auto sys_cntrl_read_cb() { return m_sys_cntrl_read_func.bind(); } DECLARE_WRITE_LINE_MEMBER(eoi_w); DECLARE_WRITE_LINE_MEMBER(dav_w); diff --git a/src/devices/machine/pic8259.h b/src/devices/machine/pic8259.h index 23e706b8055..8003c5449a7 100644 --- a/src/devices/machine/pic8259.h +++ b/src/devices/machine/pic8259.h @@ -34,15 +34,15 @@ // Interrupt request output to CPU or master 8259 (active high) #define MCFG_PIC8259_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); // Slave program select (VCC = master; GND = slave; pin becomes EN output in buffered mode) #define MCFG_PIC8259_IN_SP_CB(_devcb) \ - devcb = &downcast(*device).set_in_sp_callback(DEVCB_##_devcb); + downcast(*device).set_in_sp_callback(DEVCB_##_devcb); // Cascaded interrupt acknowledge request for slave 8259 to place vector on data bus #define MCFG_PIC8259_CASCADE_ACK_CB(_devcb) \ - devcb = &downcast(*device).set_read_slave_ack_callback(DEVCB_##_devcb); + downcast(*device).set_read_slave_ack_callback(DEVCB_##_devcb); class pic8259_device : public device_t @@ -53,6 +53,9 @@ public: template devcb_base &set_out_int_callback(Object &&cb) { return m_out_int_func.set_callback(std::forward(cb)); } template devcb_base &set_in_sp_callback(Object &&cb) { return m_in_sp_func.set_callback(std::forward(cb)); } template devcb_base &set_read_slave_ack_callback(Object &&cb) { return m_read_slave_ack_func.set_callback(std::forward(cb)); } + auto out_int_callback() { return m_out_int_func.bind(); } + auto in_sp_callback() { return m_in_sp_func.bind(); } + auto read_slave_ack_callback() { return m_read_slave_ack_func.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/machine/pit8253.h b/src/devices/machine/pit8253.h index 4dc50854882..8ccb3474404 100644 --- a/src/devices/machine/pit8253.h +++ b/src/devices/machine/pit8253.h @@ -44,13 +44,13 @@ downcast(*device).set_clk<2>(_clk); #define MCFG_PIT8253_OUT0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_handler<0>(DEVCB_##_devcb); + downcast(*device).set_out_handler<0>(DEVCB_##_devcb); #define MCFG_PIT8253_OUT1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_handler<1>(DEVCB_##_devcb); + downcast(*device).set_out_handler<1>(DEVCB_##_devcb); #define MCFG_PIT8253_OUT2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_handler<2>(DEVCB_##_devcb); + downcast(*device).set_out_handler<2>(DEVCB_##_devcb); enum class pit_type @@ -133,6 +133,7 @@ public: template void set_clk(double clk) { m_clk[N] = clk; } template void set_clk(const XTAL &xtal) { set_clk(xtal.dvalue()); } template devcb_base &set_out_handler(Object &&cb) { return m_out_handler[N].set_callback(std::forward(cb)); } + template auto out_handler() { return m_out_handler[N].bind(); } DECLARE_READ8_MEMBER(read); DECLARE_WRITE8_MEMBER(write); diff --git a/src/devices/machine/pxa255.h b/src/devices/machine/pxa255.h index 4f0ce7bdab6..1f125108d57 100644 --- a/src/devices/machine/pxa255.h +++ b/src/devices/machine/pxa255.h @@ -22,13 +22,13 @@ #include "pxa255defs.h" #define MCFG_PXA255_GPIO0_SET_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_gpio0_set_cb(DEVCB_##_devcb); + downcast(*device).set_gpio0_set_cb(DEVCB_##_devcb); #define MCFG_PXA255_GPIO0_CLEAR_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_gpio0_clear_cb(DEVCB_##_devcb); + downcast(*device).set_gpio0_clear_cb(DEVCB_##_devcb); #define MCFG_PXA255_GPIO0_IN_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_gpio0_in_cb(DEVCB_##_devcb); + downcast(*device).set_gpio0_in_cb(DEVCB_##_devcb); class pxa255_periphs_device : public device_t { diff --git a/src/devices/machine/ripple_counter.h b/src/devices/machine/ripple_counter.h index cdbcb214d7d..c322b4fa718 100644 --- a/src/devices/machine/ripple_counter.h +++ b/src/devices/machine/ripple_counter.h @@ -20,9 +20,9 @@ // output callbacks #define MCFG_RIPPLE_COUNTER_COUNT_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_count_out_cb(DEVCB_##_devcb); + downcast(*device).set_count_out_cb(DEVCB_##_devcb); #define MCFG_RIPPLE_COUNTER_ROM_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_rom_out_cb(DEVCB_##_devcb); + downcast(*device).set_rom_out_cb(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS @@ -40,6 +40,8 @@ public: void set_stages(u8 stages) { m_count_mask = (1U << stages) - 1; set_rom_addr_width(stages); } template devcb_base &set_count_out_cb(Object &&cb) { return m_count_out_cb.set_callback(std::forward(cb)); } template devcb_base &set_rom_out_cb(Object &&cb) { return m_rom_out_cb.set_callback(std::forward(cb)); } + auto count_out_cb() { return m_count_out_cb.bind(); } + auto rom_out_cb() { return m_rom_out_cb.bind(); } // control line handlers DECLARE_WRITE_LINE_MEMBER(clock_w); diff --git a/src/devices/machine/rp5c01.h b/src/devices/machine/rp5c01.h index 6c0cf00050b..fe2c92f19ac 100644 --- a/src/devices/machine/rp5c01.h +++ b/src/devices/machine/rp5c01.h @@ -32,7 +32,7 @@ //************************************************************************** #define MCFG_RP5C01_OUT_ALARM_CB(_devcb) \ - devcb = &downcast(*device).set_out_alarm_callback(DEVCB_##_devcb); + downcast(*device).set_out_alarm_callback(DEVCB_##_devcb); // include this macro if the chip is not battery backed #define MCFG_RP5C01_REMOVE_BATTERY() \ diff --git a/src/devices/machine/rp5c15.h b/src/devices/machine/rp5c15.h index 21633834f07..f3191c4df9a 100644 --- a/src/devices/machine/rp5c15.h +++ b/src/devices/machine/rp5c15.h @@ -32,10 +32,10 @@ //************************************************************************** #define MCFG_RP5C15_OUT_ALARM_CB(_devcb) \ - devcb = &downcast(*device).set_out_alarm_callback(DEVCB_##_devcb); + downcast(*device).set_out_alarm_callback(DEVCB_##_devcb); #define MCFG_RP5C15_OUT_CLKOUT_CB(_devcb) \ - devcb = &downcast(*device).set_out_clkout_callback(DEVCB_##_devcb); + downcast(*device).set_out_clkout_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/rstbuf.h b/src/devices/machine/rstbuf.h index fe808b473e6..af0d8ffbef2 100644 --- a/src/devices/machine/rstbuf.h +++ b/src/devices/machine/rstbuf.h @@ -16,7 +16,7 @@ //************************************************************************** #define MCFG_RST_BUFFER_INT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_devcb); + downcast(*device).set_int_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/rtc4543.h b/src/devices/machine/rtc4543.h index 3741f8a46d8..da51b7cf440 100644 --- a/src/devices/machine/rtc4543.h +++ b/src/devices/machine/rtc4543.h @@ -24,7 +24,7 @@ MCFG_DEVICE_ADD((tag), RTC4543, (clock)) #define MCFG_RTC4543_DATA_CALLBACK(cb) \ - devcb = &downcast(*device).set_data_cb(DEVCB_##cb); + downcast(*device).set_data_cb(DEVCB_##cb); #define MCFG_JRC6355E_ADD(tag, clock) \ MCFG_DEVICE_ADD((tag), JRC6355E, (clock)) diff --git a/src/devices/machine/rtc65271.h b/src/devices/machine/rtc65271.h index 93284622b1a..3042c738659 100644 --- a/src/devices/machine/rtc65271.h +++ b/src/devices/machine/rtc65271.h @@ -15,7 +15,7 @@ //************************************************************************** #define MCFG_RTC65271_INTERRUPT_CB(cb) \ - devcb = &downcast(*device).set_interrupt_callback(DEVCB_##cb); + downcast(*device).set_interrupt_callback(DEVCB_##cb); // ======================> rtc65271_device diff --git a/src/devices/machine/s2636.h b/src/devices/machine/s2636.h index 4653273c281..85c4a587c54 100644 --- a/src/devices/machine/s2636.h +++ b/src/devices/machine/s2636.h @@ -29,7 +29,7 @@ downcast(*device).set_divider((divider)); #define MCFG_S2623_SET_INTREQ_CALLBACK(cb) \ - devcb = &downcast(*device).set_intreq_cb(DEVCB_##cb); + downcast(*device).set_intreq_cb(DEVCB_##cb); /************************************* diff --git a/src/devices/machine/s3c2400.h b/src/devices/machine/s3c2400.h index e11da131972..b22f306af2f 100644 --- a/src/devices/machine/s3c2400.h +++ b/src/devices/machine/s3c2400.h @@ -28,31 +28,31 @@ downcast(*device).set_screen_tag(screen_tag); #define MCFG_S3C2400_CORE_PIN_R_CB(cb) \ - devcb = &downcast(*device).set_core_pin_r_callback(DEVCB_##cb); + downcast(*device).set_core_pin_r_callback(DEVCB_##cb); #define MCFG_S3C2400_CORE_PIN_W_CB(cb) \ - devcb = &downcast(*device).set_core_pin_w_callback(DEVCB_##cb); + downcast(*device).set_core_pin_w_callback(DEVCB_##cb); #define MCFG_S3C2400_GPIO_PORT_R_CB(cb) \ - devcb = &downcast(*device).set_gpio_port_r_callback(DEVCB_##cb); + downcast(*device).set_gpio_port_r_callback(DEVCB_##cb); #define MCFG_S3C2400_GPIO_PORT_W_CB(cb) \ - devcb = &downcast(*device).set_gpio_port_w_callback(DEVCB_##cb); + downcast(*device).set_gpio_port_w_callback(DEVCB_##cb); #define MCFG_S3C2400_I2C_SCL_W_CB(cb) \ - devcb = &downcast(*device).set_i2c_scl_w_callback(DEVCB_##cb); + downcast(*device).set_i2c_scl_w_callback(DEVCB_##cb); #define MCFG_S3C2400_I2C_SDA_R_CB(cb) \ - devcb = &downcast(*device).set_i2c_sda_r_callback(DEVCB_##cb); + downcast(*device).set_i2c_sda_r_callback(DEVCB_##cb); #define MCFG_S3C2400_I2C_SDA_W_CB(cb) \ - devcb = &downcast(*device).set_i2c_sda_w_callback(DEVCB_##cb); + downcast(*device).set_i2c_sda_w_callback(DEVCB_##cb); #define MCFG_S3C2400_ADC_DATA_R_CB(cb) \ - devcb = &downcast(*device).set_adc_data_r_callback(DEVCB_##cb); + downcast(*device).set_adc_data_r_callback(DEVCB_##cb); #define MCFG_S3C2400_I2S_DATA_W_CB(cb) \ - devcb = &downcast(*device).set_i2s_data_w_callback(DEVCB_##cb); + downcast(*device).set_i2s_data_w_callback(DEVCB_##cb); #define MCFG_S3C2400_LCD_FLAGS(flags) \ downcast(*device).set_lcd_flags((flags)); diff --git a/src/devices/machine/s3c2410.h b/src/devices/machine/s3c2410.h index 480c15b52e5..fe0507b5a68 100644 --- a/src/devices/machine/s3c2410.h +++ b/src/devices/machine/s3c2410.h @@ -28,43 +28,43 @@ downcast(*device).set_screen_tag(screen_tag); #define MCFG_S3C2410_CORE_PIN_R_CB(cb) \ - devcb = &downcast(*device).set_core_pin_r_callback(DEVCB_##cb); + downcast(*device).set_core_pin_r_callback(DEVCB_##cb); #define MCFG_S3C2410_CORE_PIN_W_CB(cb) \ - devcb = &downcast(*device).set_core_pin_w_callback(DEVCB_##cb); + downcast(*device).set_core_pin_w_callback(DEVCB_##cb); #define MCFG_S3C2410_GPIO_PORT_R_CB(cb) \ - devcb = &downcast(*device).set_gpio_port_r_callback(DEVCB_##cb); + downcast(*device).set_gpio_port_r_callback(DEVCB_##cb); #define MCFG_S3C2410_GPIO_PORT_W_CB(cb) \ - devcb = &downcast(*device).set_gpio_port_w_callback(DEVCB_##cb); + downcast(*device).set_gpio_port_w_callback(DEVCB_##cb); #define MCFG_S3C2410_I2C_SCL_W_CB(cb) \ - devcb = &downcast(*device).set_i2c_scl_w_callback(DEVCB_##cb); + downcast(*device).set_i2c_scl_w_callback(DEVCB_##cb); #define MCFG_S3C2410_I2C_SDA_R_CB(cb) \ - devcb = &downcast(*device).set_i2c_sda_r_callback(DEVCB_##cb); + downcast(*device).set_i2c_sda_r_callback(DEVCB_##cb); #define MCFG_S3C2410_I2C_SDA_W_CB(cb) \ - devcb = &downcast(*device).set_i2c_sda_w_callback(DEVCB_##cb); + downcast(*device).set_i2c_sda_w_callback(DEVCB_##cb); #define MCFG_S3C2410_ADC_DATA_R_CB(cb) \ - devcb = &downcast(*device).set_adc_data_r_callback(DEVCB_##cb); + downcast(*device).set_adc_data_r_callback(DEVCB_##cb); #define MCFG_S3C2410_I2S_DATA_W_CB(cb) \ - devcb = &downcast(*device).set_i2s_data_w_callback(DEVCB_##cb); + downcast(*device).set_i2s_data_w_callback(DEVCB_##cb); #define MCFG_S3C2410_NAND_COMMAND_W_CB(cb) \ - devcb = &downcast(*device).set_nand_command_w_callback(DEVCB_##cb); + downcast(*device).set_nand_command_w_callback(DEVCB_##cb); #define MCFG_S3C2410_NAND_ADDRESS_W_CB(cb) \ - devcb = &downcast(*device).set_nand_address_w_callback(DEVCB_##cb); + downcast(*device).set_nand_address_w_callback(DEVCB_##cb); #define MCFG_S3C2410_NAND_DATA_R_CB(cb) \ - devcb = &downcast(*device).set_nand_data_r_callback(DEVCB_##cb); + downcast(*device).set_nand_data_r_callback(DEVCB_##cb); #define MCFG_S3C2410_NAND_DATA_W_CB(cb) \ - devcb = &downcast(*device).set_nand_data_w_callback(DEVCB_##cb); + downcast(*device).set_nand_data_w_callback(DEVCB_##cb); #define MCFG_S3C2410_LCD_FLAGS(flags) \ downcast(*device).set_lcd_flags((flags)); diff --git a/src/devices/machine/s3c2440.h b/src/devices/machine/s3c2440.h index 38aa6423a09..066e6f70d77 100644 --- a/src/devices/machine/s3c2440.h +++ b/src/devices/machine/s3c2440.h @@ -27,43 +27,43 @@ downcast(*device).set_screen_tag(screen_tag); #define MCFG_S3C2440_CORE_PIN_R_CB(_devcb) \ - devcb = &downcast(*device).set_core_pin_r_callback(DEVCB_##_devcb); + downcast(*device).set_core_pin_r_callback(DEVCB_##_devcb); #define MCFG_S3C2440_CORE_PIN_W_CB(_devcb) \ - devcb = &downcast(*device).set_core_pin_w_callback(DEVCB_##_devcb); + downcast(*device).set_core_pin_w_callback(DEVCB_##_devcb); #define MCFG_S3C2440_GPIO_PORT_R_CB(_devcb) \ - devcb = &downcast(*device).set_gpio_port_r_callback(DEVCB_##_devcb); + downcast(*device).set_gpio_port_r_callback(DEVCB_##_devcb); #define MCFG_S3C2440_GPIO_PORT_W_CB(_devcb) \ - devcb = &downcast(*device).set_gpio_port_w_callback(DEVCB_##_devcb); + downcast(*device).set_gpio_port_w_callback(DEVCB_##_devcb); #define MCFG_S3C2440_I2C_SCL_W_CB(_devcb) \ - devcb = &downcast(*device).set_i2c_scl_w_callback(DEVCB_##_devcb); + downcast(*device).set_i2c_scl_w_callback(DEVCB_##_devcb); #define MCFG_S3C2440_I2C_SDA_R_CB(_devcb) \ - devcb = &downcast(*device).set_i2c_sda_r_callback(DEVCB_##_devcb); + downcast(*device).set_i2c_sda_r_callback(DEVCB_##_devcb); #define MCFG_S3C2440_I2C_SDA_W_CB(_devcb) \ - devcb = &downcast(*device).set_i2c_sda_w_callback(DEVCB_##_devcb); + downcast(*device).set_i2c_sda_w_callback(DEVCB_##_devcb); #define MCFG_S3C2440_ADC_DATA_R_CB(_devcb) \ - devcb = &downcast(*device).set_adc_data_r_callback(DEVCB_##_devcb); + downcast(*device).set_adc_data_r_callback(DEVCB_##_devcb); #define MCFG_S3C2440_I2S_DATA_W_CB(_devcb) \ - devcb = &downcast(*device).set_i2s_data_w_callback(DEVCB_##_devcb); + downcast(*device).set_i2s_data_w_callback(DEVCB_##_devcb); #define MCFG_S3C2440_NAND_COMMAND_W_CB(_devcb) \ - devcb = &downcast(*device).set_nand_command_w_callback(DEVCB_##_devcb); + downcast(*device).set_nand_command_w_callback(DEVCB_##_devcb); #define MCFG_S3C2440_NAND_ADDRESS_W_CB(_devcb) \ - devcb = &downcast(*device).set_nand_address_w_callback(DEVCB_##_devcb); + downcast(*device).set_nand_address_w_callback(DEVCB_##_devcb); #define MCFG_S3C2440_NAND_DATA_R_CB(_devcb) \ - devcb = &downcast(*device).set_nand_data_r_callback(DEVCB_##_devcb); + downcast(*device).set_nand_data_r_callback(DEVCB_##_devcb); #define MCFG_S3C2440_NAND_DATA_W_CB(_devcb) \ - devcb = &downcast(*device).set_nand_data_w_callback(DEVCB_##_devcb); + downcast(*device).set_nand_data_w_callback(DEVCB_##_devcb); #define MCFG_S3C2440_LCD_FLAGS(_flags) \ downcast(*device).set_lcd_flags(_flags); diff --git a/src/devices/machine/s3c44b0.h b/src/devices/machine/s3c44b0.h index 601f1ccd395..21d6d7e0082 100644 --- a/src/devices/machine/s3c44b0.h +++ b/src/devices/machine/s3c44b0.h @@ -605,25 +605,25 @@ DECLARE_DEVICE_TYPE(S3C44B0, s3c44b0_device) #define MCFG_S3C44B0_GPIO_PORT_R_CB(cb) \ - devcb = &downcast(*device).set_gpio_port_r_callback(DEVCB_##cb); + downcast(*device).set_gpio_port_r_callback(DEVCB_##cb); #define MCFG_S3C44B0_GPIO_PORT_W_CB(cb) \ - devcb = &downcast(*device).set_gpio_port_w_callback(DEVCB_##cb); + downcast(*device).set_gpio_port_w_callback(DEVCB_##cb); #define MCFG_S3C44B0_I2C_SCL_W_CB(cb) \ - devcb = &downcast(*device).set_i2c_scl_w_callback(DEVCB_##cb); + downcast(*device).set_i2c_scl_w_callback(DEVCB_##cb); #define MCFG_S3C44B0_I2C_SDA_R_CB(cb) \ - devcb = &downcast(*device).set_i2c_sda_r_callback(DEVCB_##cb); + downcast(*device).set_i2c_sda_r_callback(DEVCB_##cb); #define MCFG_S3C44B0_I2C_SDA_W_CB(cb) \ - devcb = &downcast(*device).set_i2c_sda_w_callback(DEVCB_##cb); + downcast(*device).set_i2c_sda_w_callback(DEVCB_##cb); #define MCFG_S3C44B0_ADC_DATA_R_CB(cb) \ - devcb = &downcast(*device).set_adc_data_r_callback(DEVCB_##cb); + downcast(*device).set_adc_data_r_callback(DEVCB_##cb); #define MCFG_S3C44B0_I2S_DATA_W_CB(cb) \ - devcb = &downcast(*device).set_i2s_data_w_callback(DEVCB_##cb); + downcast(*device).set_i2s_data_w_callback(DEVCB_##cb); #endif // MAME_MACHINE_S3C44B0_H diff --git a/src/devices/machine/saa1043.h b/src/devices/machine/saa1043.h index 4ee4e39d57b..92f2f5a0669 100644 --- a/src/devices/machine/saa1043.h +++ b/src/devices/machine/saa1043.h @@ -42,58 +42,58 @@ &downcast(*device).set_type(_type); #define MCFG_SAA1043_BC_CALLBACK(_write) \ - devcb = &downcast(*device).set_bc_callback(DEVCB_##_write); + downcast(*device).set_bc_callback(DEVCB_##_write); #define MCFG_SAA1043_FH2_CALLBACK(_write) \ - devcb = &downcast(*device).set_fh2_callback(DEVCB_##_write); + downcast(*device).set_fh2_callback(DEVCB_##_write); #define MCFG_SAA1043_FH3_CALLBACK(_write) \ - devcb = &downcast(*device).set_fh3_callback(DEVCB_##_write); + downcast(*device).set_fh3_callback(DEVCB_##_write); #define MCFG_SAA1043_FH80_CALLBACK(_write) \ - devcb = &downcast(*device).set_fh80_callback(DEVCB_##_write); + downcast(*device).set_fh80_callback(DEVCB_##_write); #define MCFG_SAA1043_PH_CALLBACK(_write) \ - devcb = &downcast(*device).set_ph_callback(DEVCB_##_write); + downcast(*device).set_ph_callback(DEVCB_##_write); #define MCFG_SAA1043_NS_CALLBACK(_write) \ - devcb = &downcast(*device).set_ns_callback(DEVCB_##_write); + downcast(*device).set_ns_callback(DEVCB_##_write); #define MCFG_SAA1043_RI_CALLBACK(_write) \ - devcb = &downcast(*device).set_ri_callback(DEVCB_##_write); + downcast(*device).set_ri_callback(DEVCB_##_write); #define MCFG_SAA1043_WMP_CALLBACK(_write) \ - devcb = &downcast(*device).set_wmp_callback(DEVCB_##_write); + downcast(*device).set_wmp_callback(DEVCB_##_write); #define MCFG_SAA1043_RR_CALLBACK(_write) \ - devcb = &downcast(*device).set_rr_callback(DEVCB_##_write); + downcast(*device).set_rr_callback(DEVCB_##_write); #define MCFG_SAA1043_V1_CALLBACK(_write) \ - devcb = &downcast(*device).set_v1_callback(DEVCB_##_write); + downcast(*device).set_v1_callback(DEVCB_##_write); #define MCFG_SAA1043_V2_CALLBACK(_write) \ - devcb = &downcast(*device).set_v2_callback(DEVCB_##_write); + downcast(*device).set_v2_callback(DEVCB_##_write); #define MCFG_SAA1043_CLP_CALLBACK(_write) \ - devcb = &downcast(*device).set_clp_callback(DEVCB_##_write); + downcast(*device).set_clp_callback(DEVCB_##_write); #define MCFG_SAA1043_DL_CALLBACK(_write) \ - devcb = &downcast(*device).set_dl_callback(DEVCB_##_write); + downcast(*device).set_dl_callback(DEVCB_##_write); #define MCFG_SAA1043_H1_CALLBACK(_write) \ - devcb = &downcast(*device).set_h1_callback(DEVCB_##_write); + downcast(*device).set_h1_callback(DEVCB_##_write); #define MCFG_SAA1043_H2_CALLBACK(_write) \ - devcb = &downcast(*device).set_h2_callback(DEVCB_##_write); + downcast(*device).set_h2_callback(DEVCB_##_write); #define MCFG_SAA1043_CB_CALLBACK(_write) \ - devcb = &downcast(*device).set_cb_callback(DEVCB_##_write); + downcast(*device).set_cb_callback(DEVCB_##_write); #define MCFG_SAA1043_CS_CALLBACK(_write) \ - devcb = &downcast(*device).set_cs_callback(DEVCB_##_write); + downcast(*device).set_cs_callback(DEVCB_##_write); #define MCFG_SAA1043_ID_CALLBACK(_write) \ - devcb = &downcast(*device).set_id_callback(DEVCB_##_write); + downcast(*device).set_id_callback(DEVCB_##_write); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/scnxx562.h b/src/devices/machine/scnxx562.h index fe4f5442a87..72c2df22a17 100644 --- a/src/devices/machine/scnxx562.h +++ b/src/devices/machine/scnxx562.h @@ -78,44 +78,44 @@ // Port A callbacks #define MCFG_DUSCC_OUT_TXDA_CB(_devcb) \ - devcb = &downcast(*device).set_out_txda_callback(DEVCB_##_devcb); + downcast(*device).set_out_txda_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_DTRA_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtra_callback(DEVCB_##_devcb); + downcast(*device).set_out_dtra_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_RTSA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rtsa_callback(DEVCB_##_devcb); + downcast(*device).set_out_rtsa_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_SYNCA_CB(_devcb) \ - devcb = &downcast(*device).set_out_synca_callback(DEVCB_##_devcb); + downcast(*device).set_out_synca_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_TRXCA_CB(_devcb) \ - devcb = &downcast(*device).set_out_trxca_callback(DEVCB_##_devcb); + downcast(*device).set_out_trxca_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_RTXCA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rtxca_callback(DEVCB_##_devcb); + downcast(*device).set_out_rtxca_callback(DEVCB_##_devcb); // Port B callbacks #define MCFG_DUSCC_OUT_TXDB_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdb_callback(DEVCB_##_devcb); + downcast(*device).set_out_txdb_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_DTRB_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtrb_callback(DEVCB_##_devcb); + downcast(*device).set_out_dtrb_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_RTSB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rtsb_callback(DEVCB_##_devcb); + downcast(*device).set_out_rtsb_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_SYNCB_CB(_devcb) \ - devcb = &downcast(*device).set_out_syncb_callback(DEVCB_##_devcb); + downcast(*device).set_out_syncb_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_TRXCB_CB(_devcb) \ - devcb = &downcast(*device).set_out_trxcb_callback(DEVCB_##_devcb); + downcast(*device).set_out_trxcb_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_RTXCB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rtxcb_callback(DEVCB_##_devcb); + downcast(*device).set_out_rtxcb_callback(DEVCB_##_devcb); #define MCFG_DUSCC_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/sis85c496.cpp b/src/devices/machine/sis85c496.cpp index ebdbbfa797b..d5b784b84cc 100644 --- a/src/devices/machine/sis85c496.cpp +++ b/src/devices/machine/sis85c496.cpp @@ -89,12 +89,12 @@ MACHINE_CONFIG_START(sis85c496_host_device::device_add_mconfig) MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, sis85c496_host_device, cpu_int_w)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, sis85c496_host_device, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir2_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL(12'000'000)) MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(WRITELINE(*this, sis85c496_host_device, cpu_reset_w)) diff --git a/src/devices/machine/smartmed.h b/src/devices/machine/smartmed.h index 5c9d3cfd946..279f3f3f7c8 100644 --- a/src/devices/machine/smartmed.h +++ b/src/devices/machine/smartmed.h @@ -18,7 +18,7 @@ downcast(*device).set_nand_type((nand_device::chip::type)); #define MCFG_NAND_RNB_CALLBACK(write) \ - devcb = &downcast(*device).set_rnb_wr_callback(DEVCB_##write); + downcast(*device).set_rnb_wr_callback(DEVCB_##write); /*************************************************************************** TYPE DEFINITIONS diff --git a/src/devices/machine/smc91c9x.h b/src/devices/machine/smc91c9x.h index 398ccd58ab5..b0695c4f6cb 100644 --- a/src/devices/machine/smc91c9x.h +++ b/src/devices/machine/smc91c9x.h @@ -123,12 +123,12 @@ DECLARE_DEVICE_TYPE(SMC91C96, smc91c96_device) MCFG_DEVICE_ADD((tag), SMC91C94, 0) #define MCFG_SMC91C94_IRQ_CALLBACK(write) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##write); + downcast(*device).set_irq_callback(DEVCB_##write); #define MCFG_SMC91C96_ADD(tag) \ MCFG_DEVICE_ADD((tag), SMC91C96, 0) #define MCFG_SMC91C96_IRQ_CALLBACK(write) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##write); + downcast(*device).set_irq_callback(DEVCB_##write); #endif // MAME_MACHINE_SMC91C9X_H diff --git a/src/devices/machine/smpc.h b/src/devices/machine/smpc.h index bb18b14da4f..2321448a67f 100644 --- a/src/devices/machine/smpc.h +++ b/src/devices/machine/smpc.h @@ -30,41 +30,41 @@ downcast(*device).set_control_port_tags(ctrl1_tag, ctrl2_tag); #define MCFG_SMPC_HLE_PDR1_IN_CB(_devcb) \ - devcb = &downcast(*device).set_pdr1_in_handler(DEVCB_##_devcb); + downcast(*device).set_pdr1_in_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_PDR2_IN_CB(_devcb) \ - devcb = &downcast(*device).set_pdr2_in_handler(DEVCB_##_devcb); + downcast(*device).set_pdr2_in_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_PDR1_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_pdr1_out_handler(DEVCB_##_devcb); + downcast(*device).set_pdr1_out_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_PDR2_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_pdr2_out_handler(DEVCB_##_devcb); + downcast(*device).set_pdr2_out_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_MASTER_RESET_CB(_devcb) \ - devcb = &downcast(*device).set_master_reset_handler(DEVCB_##_devcb); + downcast(*device).set_master_reset_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_MASTER_NMI_CB(_devcb) \ - devcb = &downcast(*device).set_master_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_master_nmi_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_SLAVE_RESET_CB(_devcb) \ - devcb = &downcast(*device).set_slave_reset_handler(DEVCB_##_devcb); + downcast(*device).set_slave_reset_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_SOUND_RESET_CB(_devcb) \ - devcb = &downcast(*device).set_sound_reset_handler(DEVCB_##_devcb); + downcast(*device).set_sound_reset_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_SYSTEM_RESET_CB(_devcb) \ - devcb = &downcast(*device).set_system_reset_handler(DEVCB_##_devcb); + downcast(*device).set_system_reset_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_SYSTEM_HALT_CB(_devcb) \ - devcb = &downcast(*device).set_system_halt_handler(DEVCB_##_devcb); + downcast(*device).set_system_halt_handler(DEVCB_##_devcb); #define MCFG_SMPC_HLE_DOT_SELECT_CB(_devcb) \ - devcb = &downcast(*device).set_dot_select_handler(DEVCB_##_devcb); + downcast(*device).set_dot_select_handler(DEVCB_##_devcb); // set_irq_handler doesn't work in Saturn driver??? #define MCFG_SMPC_HLE_IRQ_HANDLER_CB(_devcb) \ - devcb = &downcast(*device).set_interrupt_handler(DEVCB_##_devcb); + downcast(*device).set_interrupt_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/steppers.h b/src/devices/machine/steppers.h index eace7904bcd..9674948d409 100644 --- a/src/devices/machine/steppers.h +++ b/src/devices/machine/steppers.h @@ -34,7 +34,7 @@ #define PROJECT_48STEP_REEL 10 #define MCFG_STEPPER_OPTIC_CALLBACK(_write) \ - devcb = &downcast(*device).set_optic_handler(DEVCB_##_write); + downcast(*device).set_optic_handler(DEVCB_##_write); class stepper_device : public device_t { diff --git a/src/devices/machine/te7750.h b/src/devices/machine/te7750.h index 8f3cc234060..32406b3c52c 100644 --- a/src/devices/machine/te7750.h +++ b/src/devices/machine/te7750.h @@ -16,45 +16,45 @@ //************************************************************************** #define MCFG_TE7750_IN_PORT1_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(0, DEVCB_##_devcb); + downcast(*device).set_input_cb(0, DEVCB_##_devcb); #define MCFG_TE7750_IN_PORT2_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(1, DEVCB_##_devcb); + downcast(*device).set_input_cb(1, DEVCB_##_devcb); #define MCFG_TE7750_IN_PORT3_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(2, DEVCB_##_devcb); + downcast(*device).set_input_cb(2, DEVCB_##_devcb); #define MCFG_TE7750_IN_PORT4_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(3, DEVCB_##_devcb); + downcast(*device).set_input_cb(3, DEVCB_##_devcb); #define MCFG_TE7750_IN_PORT5_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(4, DEVCB_##_devcb); + downcast(*device).set_input_cb(4, DEVCB_##_devcb); #define MCFG_TE7750_IN_PORT6_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(5, DEVCB_##_devcb); + downcast(*device).set_input_cb(5, DEVCB_##_devcb); #define MCFG_TE7750_IN_PORT7_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(6, DEVCB_##_devcb); + downcast(*device).set_input_cb(6, DEVCB_##_devcb); #define MCFG_TE7750_IN_PORT8_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(7, DEVCB_##_devcb); + downcast(*device).set_input_cb(7, DEVCB_##_devcb); #define MCFG_TE7750_IN_PORT9_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(8, DEVCB_##_devcb); + downcast(*device).set_input_cb(8, DEVCB_##_devcb); #define MCFG_TE7750_OUT_PORT1_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(0, DEVCB_##_devcb); + downcast(*device).set_output_cb(0, DEVCB_##_devcb); #define MCFG_TE7750_OUT_PORT2_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(1, DEVCB_##_devcb); + downcast(*device).set_output_cb(1, DEVCB_##_devcb); #define MCFG_TE7750_OUT_PORT3_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(2, DEVCB_##_devcb); + downcast(*device).set_output_cb(2, DEVCB_##_devcb); #define MCFG_TE7750_OUT_PORT4_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(3, DEVCB_##_devcb); + downcast(*device).set_output_cb(3, DEVCB_##_devcb); #define MCFG_TE7750_OUT_PORT5_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(4, DEVCB_##_devcb); + downcast(*device).set_output_cb(4, DEVCB_##_devcb); #define MCFG_TE7750_OUT_PORT6_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(5, DEVCB_##_devcb); + downcast(*device).set_output_cb(5, DEVCB_##_devcb); #define MCFG_TE7750_OUT_PORT7_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(6, DEVCB_##_devcb); + downcast(*device).set_output_cb(6, DEVCB_##_devcb); #define MCFG_TE7750_OUT_PORT8_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(7, DEVCB_##_devcb); + downcast(*device).set_output_cb(7, DEVCB_##_devcb); #define MCFG_TE7750_OUT_PORT9_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(8, DEVCB_##_devcb); + downcast(*device).set_output_cb(8, DEVCB_##_devcb); #define MCFG_TE7750_IOS_CB(_devcb) \ - devcb = &downcast(*device).set_ios_cb(DEVCB_##_devcb); + downcast(*device).set_ios_cb(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS @@ -83,6 +83,25 @@ public: { return m_ios_cb.set_callback(std::forward(obj)); } + auto in_port1_cb() { return m_input_cb[0].bind(); } + auto in_port2_cb() { return m_input_cb[1].bind(); } + auto in_port3_cb() { return m_input_cb[2].bind(); } + auto in_port4_cb() { return m_input_cb[3].bind(); } + auto in_port5_cb() { return m_input_cb[4].bind(); } + auto in_port6_cb() { return m_input_cb[5].bind(); } + auto in_port7_cb() { return m_input_cb[6].bind(); } + auto in_port8_cb() { return m_input_cb[7].bind(); } + auto in_port9_cb() { return m_input_cb[8].bind(); } + auto out_port1_cb() { return m_output_cb[0].bind(); } + auto out_port2_cb() { return m_output_cb[1].bind(); } + auto out_port3_cb() { return m_output_cb[2].bind(); } + auto out_port4_cb() { return m_output_cb[3].bind(); } + auto out_port5_cb() { return m_output_cb[4].bind(); } + auto out_port6_cb() { return m_output_cb[5].bind(); } + auto out_port7_cb() { return m_output_cb[6].bind(); } + auto out_port8_cb() { return m_output_cb[7].bind(); } + auto out_port9_cb() { return m_output_cb[8].bind(); } + auto ios_cb() { return m_ios_cb.bind(); } // bus-compatible interface DECLARE_READ8_MEMBER(read); diff --git a/src/devices/machine/timekpr.h b/src/devices/machine/timekpr.h index ffeef9efa63..c0f7fcdc83a 100644 --- a/src/devices/machine/timekpr.h +++ b/src/devices/machine/timekpr.h @@ -27,10 +27,10 @@ //************************************************************************** #define MCFG_M48T37_RESET_HANDLER(_devcb) \ - devcb = &downcast(*device).set_reset_handler(DEVCB_##_devcb); + downcast(*device).set_reset_handler(DEVCB_##_devcb); #define MCFG_M48T37_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/tmp68301.h b/src/devices/machine/tmp68301.h index c2d2c9cdbbd..eae1cd69a48 100644 --- a/src/devices/machine/tmp68301.h +++ b/src/devices/machine/tmp68301.h @@ -18,10 +18,10 @@ downcast(*device).set_cpu_tag(_tag); #define MCFG_TMP68301_IN_PARALLEL_CB(cb) \ - devcb = &downcast(*device).set_in_parallel_callback((DEVCB_##cb)); + downcast(*device).set_in_parallel_callback((DEVCB_##cb)); #define MCFG_TMP68301_OUT_PARALLEL_CB(cb) \ - devcb = &downcast(*device).set_out_parallel_callback((DEVCB_##cb)); + downcast(*device).set_out_parallel_callback((DEVCB_##cb)); //************************************************************************** diff --git a/src/devices/machine/tms1024.h b/src/devices/machine/tms1024.h index eae25fca18d..6c11a50eafa 100644 --- a/src/devices/machine/tms1024.h +++ b/src/devices/machine/tms1024.h @@ -18,9 +18,9 @@ // 4-bit ports (3210 = DCBA) // valid ports: 4-7 for TMS1024, 1-7 for TMS1025 #define MCFG_TMS1025_READ_PORT_CB(X, cb) \ - devcb = &downcast(*device).set_read_port_callback<(tms1024_device::X)>((DEVCB_##cb)); + downcast(*device).set_read_port_callback<(tms1024_device::X)>((DEVCB_##cb)); #define MCFG_TMS1025_WRITE_PORT_CB(X, cb) \ - devcb = &downcast(*device).set_write_port_callback<(tms1024_device::X)>((DEVCB_##cb)); + downcast(*device).set_write_port_callback<(tms1024_device::X)>((DEVCB_##cb)); // pinout reference @@ -71,6 +71,14 @@ public: // configuration helpers template devcb_base &set_read_port_callback(Object &&cb) { return m_read_port[N].set_callback(std::forward(cb)); } template devcb_base &set_write_port_callback(Object &&cb) { return m_write_port[N].set_callback(std::forward(cb)); } + auto read_port4_callback() { return m_read_port[3].bind(); } + auto read_port5_callback() { return m_read_port[4].bind(); } + auto read_port6_callback() { return m_read_port[5].bind(); } + auto read_port7_callback() { return m_read_port[6].bind(); } + auto write_port4_callback() { return m_write_port[3].bind(); } + auto write_port5_callback() { return m_write_port[4].bind(); } + auto write_port6_callback() { return m_write_port[5].bind(); } + auto write_port7_callback() { return m_write_port[6].bind(); } DECLARE_WRITE8_MEMBER(write_h); DECLARE_READ8_MEMBER(read_h); @@ -99,6 +107,13 @@ class tms1025_device : public tms1024_device { public: tms1025_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); + + auto read_port1_callback() { return m_read_port[0].bind(); } + auto read_port2_callback() { return m_read_port[1].bind(); } + auto read_port3_callback() { return m_read_port[2].bind(); } + auto write_port1_callback() { return m_write_port[0].bind(); } + auto write_port2_callback() { return m_write_port[1].bind(); } + auto write_port3_callback() { return m_write_port[2].bind(); } }; diff --git a/src/devices/machine/tms5501.h b/src/devices/machine/tms5501.h index b7970ed1a48..8510ccaced3 100644 --- a/src/devices/machine/tms5501.h +++ b/src/devices/machine/tms5501.h @@ -43,16 +43,16 @@ //************************************************************************** #define MCFG_TMS5501_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_TMS5501_XMT_CALLBACK(_write) \ - devcb = &downcast(*device).set_xmt_wr_callback(DEVCB_##_write); + downcast(*device).set_xmt_wr_callback(DEVCB_##_write); #define MCFG_TMS5501_XI_CALLBACK(_read) \ - devcb = &downcast(*device).set_xi_rd_callback(DEVCB_##_read); + downcast(*device).set_xi_rd_callback(DEVCB_##_read); #define MCFG_TMS5501_XO_CALLBACK(_write) \ - devcb = &downcast(*device).set_xo_wr_callback(DEVCB_##_write); + downcast(*device).set_xo_wr_callback(DEVCB_##_write); diff --git a/src/devices/machine/tms9901.h b/src/devices/machine/tms9901.h index f8b2685c174..5219ea1800e 100644 --- a/src/devices/machine/tms9901.h +++ b/src/devices/machine/tms9901.h @@ -139,57 +139,57 @@ private: ***************************************************************************/ #define MCFG_TMS9901_READBLOCK_HANDLER( _read ) \ - devcb = &downcast(*device).set_readblock_callback(DEVCB_##_read); + downcast(*device).set_readblock_callback(DEVCB_##_read); #define MCFG_TMS9901_P0_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<0>(DEVCB_##_write); + downcast(*device).set_p_callback<0>(DEVCB_##_write); #define MCFG_TMS9901_P1_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<1>(DEVCB_##_write); + downcast(*device).set_p_callback<1>(DEVCB_##_write); #define MCFG_TMS9901_P2_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<2>(DEVCB_##_write); + downcast(*device).set_p_callback<2>(DEVCB_##_write); #define MCFG_TMS9901_P3_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<3>(DEVCB_##_write); + downcast(*device).set_p_callback<3>(DEVCB_##_write); #define MCFG_TMS9901_P4_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<4>(DEVCB_##_write); + downcast(*device).set_p_callback<4>(DEVCB_##_write); #define MCFG_TMS9901_P5_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<5>(DEVCB_##_write); + downcast(*device).set_p_callback<5>(DEVCB_##_write); #define MCFG_TMS9901_P6_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<6>(DEVCB_##_write); + downcast(*device).set_p_callback<6>(DEVCB_##_write); #define MCFG_TMS9901_P7_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<7>(DEVCB_##_write); + downcast(*device).set_p_callback<7>(DEVCB_##_write); #define MCFG_TMS9901_P8_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<8>(DEVCB_##_write); + downcast(*device).set_p_callback<8>(DEVCB_##_write); #define MCFG_TMS9901_P9_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<9>(DEVCB_##_write); + downcast(*device).set_p_callback<9>(DEVCB_##_write); #define MCFG_TMS9901_P10_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<10>(DEVCB_##_write); + downcast(*device).set_p_callback<10>(DEVCB_##_write); #define MCFG_TMS9901_P11_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<11>(DEVCB_##_write); + downcast(*device).set_p_callback<11>(DEVCB_##_write); #define MCFG_TMS9901_P12_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<12>(DEVCB_##_write); + downcast(*device).set_p_callback<12>(DEVCB_##_write); #define MCFG_TMS9901_P13_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<13>(DEVCB_##_write); + downcast(*device).set_p_callback<13>(DEVCB_##_write); #define MCFG_TMS9901_P14_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<14>(DEVCB_##_write); + downcast(*device).set_p_callback<14>(DEVCB_##_write); #define MCFG_TMS9901_P15_HANDLER( _write ) \ - devcb = &downcast(*device).set_p_callback<15>(DEVCB_##_write); + downcast(*device).set_p_callback<15>(DEVCB_##_write); #define MCFG_TMS9901_INTLEVEL_HANDLER( _intlevel ) \ - devcb = &downcast(*device).set_intlevel_callback(DEVCB_##_intlevel); + downcast(*device).set_intlevel_callback(DEVCB_##_intlevel); #endif // MAME_MACHINE_TMS9901_H diff --git a/src/devices/machine/tms9902.h b/src/devices/machine/tms9902.h index 1cc824e73ff..1d3a96829db 100644 --- a/src/devices/machine/tms9902.h +++ b/src/devices/machine/tms9902.h @@ -190,15 +190,15 @@ private: ***************************************************************************/ #define MCFG_TMS9902_INT_CB(cb) \ - devcb = &downcast(*device).set_int_callback((DEVCB_##cb)); + downcast(*device).set_int_callback((DEVCB_##cb)); #define MCFG_TMS9902_RCV_CB(cb) \ - devcb = &downcast(*device).set_rcv_callback((DEVCB_##cb)); + downcast(*device).set_rcv_callback((DEVCB_##cb)); #define MCFG_TMS9902_XMIT_CB(cb) \ - devcb = &downcast(*device).set_xmit_callback((DEVCB_##cb)); + downcast(*device).set_xmit_callback((DEVCB_##cb)); #define MCFG_TMS9902_CTRL_CB(cb) \ - devcb = &downcast(*device).set_ctrl_callback((DEVCB_##cb)); + downcast(*device).set_ctrl_callback((DEVCB_##cb)); #endif // MAME_MACHINE_TMS9902_H diff --git a/src/devices/machine/tube.h b/src/devices/machine/tube.h index 71e7693a8ba..17223d22f84 100644 --- a/src/devices/machine/tube.h +++ b/src/devices/machine/tube.h @@ -21,16 +21,16 @@ MCFG_DEVICE_ADD(_tag, TUBE, 0); #define MCFG_TUBE_HIRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_hirq_handler(DEVCB_##_devcb); + downcast(*device).set_hirq_handler(DEVCB_##_devcb); #define MCFG_TUBE_PNMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_pnmi_handler(DEVCB_##_devcb); + downcast(*device).set_pnmi_handler(DEVCB_##_devcb); #define MCFG_TUBE_PIRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_pirq_handler(DEVCB_##_devcb); + downcast(*device).set_pirq_handler(DEVCB_##_devcb); #define MCFG_TUBE_DRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_drq_handler(DEVCB_##_devcb); + downcast(*device).set_drq_handler(DEVCB_##_devcb); @@ -52,6 +52,10 @@ public: template devcb_base &set_pnmi_handler(Object &&cb) { return m_pnmi_handler.set_callback(std::forward(cb)); } template devcb_base &set_pirq_handler(Object &&cb) { return m_pirq_handler.set_callback(std::forward(cb)); } template devcb_base &set_drq_handler(Object &&cb) { return m_drq_handler.set_callback(std::forward(cb)); } + auto hirq_handler() { return m_hirq_handler.bind(); } + auto pnmi_handler() { return m_pnmi_handler.bind(); } + auto pirq_handler() { return m_pirq_handler.bind(); } + auto drq_handler() { return m_drq_handler.bind(); } DECLARE_READ8_MEMBER(host_r); DECLARE_WRITE8_MEMBER(host_w); diff --git a/src/devices/machine/upd71071.h b/src/devices/machine/upd71071.h index 7989d180169..9b05766dd74 100644 --- a/src/devices/machine/upd71071.h +++ b/src/devices/machine/upd71071.h @@ -82,45 +82,45 @@ DECLARE_DEVICE_TYPE(UPD71071, upd71071_device) downcast(*device).set_clock((clk)); #define MCFG_UPD71071_OUT_HREQ_CB(cb) \ - devcb = &downcast(*device).set_out_hreq_callback((DEVCB_##cb)); + downcast(*device).set_out_hreq_callback((DEVCB_##cb)); #define MCFG_UPD71071_OUT_EOP_CB(cb) \ - devcb = &downcast(*device).set_out_eop_callback((DEVCB_##cb)); + downcast(*device).set_out_eop_callback((DEVCB_##cb)); #define MCFG_UPD71071_DMA_READ_0_CB(cb) \ - devcb = &downcast(*device).set_dma_read_callback<0>((DEVCB_##cb)); + downcast(*device).set_dma_read_callback<0>((DEVCB_##cb)); #define MCFG_UPD71071_DMA_READ_1_CB(cb) \ - devcb = &downcast(*device).set_dma_read_callback<1>((DEVCB_##cb)); + downcast(*device).set_dma_read_callback<1>((DEVCB_##cb)); #define MCFG_UPD71071_DMA_READ_2_CB(cb) \ - devcb = &downcast(*device).set_dma_read_callback<2>((DEVCB_##cb)); + downcast(*device).set_dma_read_callback<2>((DEVCB_##cb)); #define MCFG_UPD71071_DMA_READ_3_CB(cb) \ - devcb = &downcast(*device).set_dma_read_callback<3>((DEVCB_##cb)); + downcast(*device).set_dma_read_callback<3>((DEVCB_##cb)); #define MCFG_UPD71071_DMA_WRITE_0_CB(cb) \ - devcb = &downcast(*device).set_dma_write_callback<0>((DEVCB_##cb)); + downcast(*device).set_dma_write_callback<0>((DEVCB_##cb)); #define MCFG_UPD71071_DMA_WRITE_1_CB(cb) \ - devcb = &downcast(*device).set_dma_write_callback<1>((DEVCB_##cb)); + downcast(*device).set_dma_write_callback<1>((DEVCB_##cb)); #define MCFG_UPD71071_DMA_WRITE_2_CB(cb) \ - devcb = &downcast(*device).set_dma_write_callback<2>((DEVCB_##cb)); + downcast(*device).set_dma_write_callback<2>((DEVCB_##cb)); #define MCFG_UPD71071_DMA_WRITE_3_CB(cb) \ - devcb = &downcast(*device).set_dma_write_callback<3>((DEVCB_##cb)); + downcast(*device).set_dma_write_callback<3>((DEVCB_##cb)); #define MCFG_UPD71071_OUT_DACK_0_CB(cb) \ - devcb = &downcast(*device).set_out_dack_callback<0>((DEVCB_##cb)); + downcast(*device).set_out_dack_callback<0>((DEVCB_##cb)); #define MCFG_UPD71071_OUT_DACK_1_CB(cb) \ - devcb = &downcast(*device).set_out_dack_callback<1>((DEVCB_##cb)); + downcast(*device).set_out_dack_callback<1>((DEVCB_##cb)); #define MCFG_UPD71071_OUT_DACK_2_CB(cb) \ - devcb = &downcast(*device).set_out_dack_callback<2>((DEVCB_##cb)); + downcast(*device).set_out_dack_callback<2>((DEVCB_##cb)); #define MCFG_UPD71071_OUT_DACK_3_CB(cb) \ - devcb = &downcast(*device).set_out_dack_callback<3>((DEVCB_##cb)); + downcast(*device).set_out_dack_callback<3>((DEVCB_##cb)); #endif // MAME_MACHINE_UPD71071_H diff --git a/src/devices/machine/upd765.h b/src/devices/machine/upd765.h index 2eefbc9ae55..d0c7c6ac3ae 100644 --- a/src/devices/machine/upd765.h +++ b/src/devices/machine/upd765.h @@ -63,16 +63,16 @@ MCFG_DEVICE_ADD(_tag, TC8566AF, 0) #define MCFG_MCS3201_INPUT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_input_handler(DEVCB_##_devcb); + downcast(*device).set_input_handler(DEVCB_##_devcb); #define MCFG_UPD765_INTRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_intrq_wr_callback(DEVCB_##_write); + downcast(*device).set_intrq_wr_callback(DEVCB_##_write); #define MCFG_UPD765_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); #define MCFG_UPD765_HDL_CALLBACK(_write) \ - devcb = &downcast(*device).set_hdl_wr_callback(DEVCB_##_write); + downcast(*device).set_hdl_wr_callback(DEVCB_##_write); /* Interface required for PC ISA wrapping */ class pc_fdc_interface : public device_t { @@ -104,6 +104,9 @@ public: template devcb_base &set_intrq_wr_callback(Object &&cb) { return intrq_cb.set_callback(std::forward(cb)); } template devcb_base &set_drq_wr_callback(Object &&cb) { return drq_cb.set_callback(std::forward(cb)); } template devcb_base &set_hdl_wr_callback(Object &&cb) { return hdl_cb.set_callback(std::forward(cb)); } + auto intrq_wr_callback() { return intrq_cb.bind(); } + auto drq_wr_callback() { return drq_cb.bind(); } + auto hdl_wr_callback() { return hdl_cb.bind(); } virtual void map(address_map &map) override = 0; @@ -435,6 +438,10 @@ protected: class upd765a_device : public upd765_family_device { public: + upd765a_device(const machine_config &mconfig, const char *tag, device_t *owner, bool ready, bool select) : upd765a_device(mconfig, tag, owner, 0U) { + set_ready_line_connected(ready); + set_select_lines_connected(select); + } upd765a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; diff --git a/src/devices/machine/vrc4373.h b/src/devices/machine/vrc4373.h index 0e4e205db11..d7c9d6b420c 100644 --- a/src/devices/machine/vrc4373.h +++ b/src/devices/machine/vrc4373.h @@ -17,7 +17,7 @@ downcast(*device).set_simm0_size(_size); #define MCFG_VRC4373_IRQ_CB(_devcb) \ - devcb = &ide_pci_device::set_irq_cb(*device, DEVCB_##_devcb); + ide_pci_device::set_irq_cb(*device, DEVCB_##_devcb); class vrc4373_device : public pci_host_device { diff --git a/src/devices/machine/wd11c00_17.h b/src/devices/machine/wd11c00_17.h index 8f644aba758..c0fb4391924 100644 --- a/src/devices/machine/wd11c00_17.h +++ b/src/devices/machine/wd11c00_17.h @@ -18,37 +18,37 @@ //************************************************************************** #define MCFG_WD11C00_17_OUT_IRQ5_CB(_devcb) \ - devcb = &downcast(*device).set_out_irq5_callback(DEVCB_##_devcb); + downcast(*device).set_out_irq5_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_OUT_DRQ3_CB(_devcb) \ - devcb = &downcast(*device).set_out_drq3_callback(DEVCB_##_devcb); + downcast(*device).set_out_drq3_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_OUT_MR_CB(_devcb) \ - devcb = &downcast(*device).set_out_mr_callback(DEVCB_##_devcb); + downcast(*device).set_out_mr_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_OUT_BUSY_CB(_devcb) \ - devcb = &downcast(*device).set_out_busy_callback(DEVCB_##_devcb); + downcast(*device).set_out_busy_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_OUT_REQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_req_callback(DEVCB_##_devcb); + downcast(*device).set_out_req_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_OUT_RA3_CB(_devcb) \ - devcb = &downcast(*device).set_out_ra3_callback(DEVCB_##_devcb); + downcast(*device).set_out_ra3_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_IN_RD322_CB(_devcb) \ - devcb = &downcast(*device).set_in_rd322_callback(DEVCB_##_devcb); + downcast(*device).set_in_rd322_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_IN_RAMCS_CB(_devcb) \ - devcb = &downcast(*device).set_in_ramcs_callback(DEVCB_##_devcb); + downcast(*device).set_in_ramcs_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_OUT_RAMWR_CB(_devcb) \ - devcb = &downcast(*device).set_out_ramwr_callback(DEVCB_##_devcb); + downcast(*device).set_out_ramwr_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_IN_CS1010_CB(_devcb) \ - devcb = &downcast(*device).set_in_cs1010_callback(DEVCB_##_devcb); + downcast(*device).set_in_cs1010_callback(DEVCB_##_devcb); #define MCFG_WD11C00_17_OUT_CS1010_CB(_devcb) \ - devcb = &downcast(*device).set_out_cs1010_callback(DEVCB_##_devcb); + downcast(*device).set_out_cs1010_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS @@ -73,6 +73,17 @@ public: template devcb_base &set_out_ramwr_callback(Object &&cb) { return m_out_ramwr_cb.set_callback(std::forward(cb)); } template devcb_base &set_in_cs1010_callback(Object &&cb) { return m_in_cs1010_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_cs1010_callback(Object &&cb) { return m_out_cs1010_cb.set_callback(std::forward(cb)); } + auto out_irq5_callback() { return m_out_irq5_cb.bind(); } + auto out_drq3_callback() { return m_out_drq3_cb.bind(); } + auto out_mr_callback() { return m_out_mr_cb.bind(); } + auto out_busy_callback() { return m_out_busy_cb.bind(); } + auto out_req_callback() { return m_out_req_cb.bind(); } + auto out_ra3_callback() { return m_out_ra3_cb.bind(); } + auto in_rd322_callback() { return m_in_rd322_cb.bind(); } + auto in_ramcs_callback() { return m_in_ramcs_cb.bind(); } + auto out_ramwr_callback() { return m_out_ramwr_cb.bind(); } + auto in_cs1010_callback() { return m_in_cs1010_cb.bind(); } + auto out_cs1010_callback() { return m_out_cs1010_cb.bind(); } DECLARE_READ8_MEMBER( io_r ); DECLARE_WRITE8_MEMBER( io_w ); diff --git a/src/devices/machine/wd2010.h b/src/devices/machine/wd2010.h index 47e928d20cf..5cba995b3da 100644 --- a/src/devices/machine/wd2010.h +++ b/src/devices/machine/wd2010.h @@ -19,49 +19,49 @@ //************************************************************************** #define MCFG_WD2010_OUT_INTRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_intrq_callback(DEVCB_##_devcb); + downcast(*device).set_out_intrq_callback(DEVCB_##_devcb); #define MCFG_WD2010_OUT_BDRQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_bdrq_callback(DEVCB_##_devcb); + downcast(*device).set_out_bdrq_callback(DEVCB_##_devcb); #define MCFG_WD2010_OUT_BCR_CB(_devcb) \ - devcb = &downcast(*device).set_out_bcr_callback(DEVCB_##_devcb); + downcast(*device).set_out_bcr_callback(DEVCB_##_devcb); #define MCFG_WD2010_IN_BRDY_CB(_devcb) \ - devcb = &downcast(*device).set_in_brdy_callback(DEVCB_##_devcb); + downcast(*device).set_in_brdy_callback(DEVCB_##_devcb); #define MCFG_WD2010_IN_BCS_CB(_devcb) \ - devcb = &downcast(*device).set_in_bcs_callback(DEVCB_##_devcb); + downcast(*device).set_in_bcs_callback(DEVCB_##_devcb); #define MCFG_WD2010_OUT_BCS_CB(_devcb) \ - devcb = &downcast(*device).set_out_bcs_callback(DEVCB_##_devcb); + downcast(*device).set_out_bcs_callback(DEVCB_##_devcb); #define MCFG_WD2010_OUT_DIRIN_CB(_devcb) \ - devcb = &downcast(*device).set_out_dirin_callback(DEVCB_##_devcb); + downcast(*device).set_out_dirin_callback(DEVCB_##_devcb); #define MCFG_WD2010_OUT_STEP_CB(_devcb) \ - devcb = &downcast(*device).set_out_step_callback(DEVCB_##_devcb); + downcast(*device).set_out_step_callback(DEVCB_##_devcb); #define MCFG_WD2010_OUT_RWC_CB(_devcb) \ - devcb = &downcast(*device).set_out_rwc_callback(DEVCB_##_devcb); + downcast(*device).set_out_rwc_callback(DEVCB_##_devcb); #define MCFG_WD2010_OUT_WG_CB(_devcb) \ - devcb = &downcast(*device).set_out_wg_callback(DEVCB_##_devcb); + downcast(*device).set_out_wg_callback(DEVCB_##_devcb); #define MCFG_WD2010_IN_DRDY_CB(_devcb) \ - devcb = &downcast(*device).set_in_drdy_callback(DEVCB_##_devcb); + downcast(*device).set_in_drdy_callback(DEVCB_##_devcb); #define MCFG_WD2010_IN_INDEX_CB(_devcb) \ - devcb = &downcast(*device).set_in_index_callback(DEVCB_##_devcb); + downcast(*device).set_in_index_callback(DEVCB_##_devcb); #define MCFG_WD2010_IN_WF_CB(_devcb) \ - devcb = &downcast(*device).set_in_wf_callback(DEVCB_##_devcb); + downcast(*device).set_in_wf_callback(DEVCB_##_devcb); #define MCFG_WD2010_IN_TK000_CB(_devcb) \ - devcb = &downcast(*device).set_in_tk000_callback(DEVCB_##_devcb); + downcast(*device).set_in_tk000_callback(DEVCB_##_devcb); #define MCFG_WD2010_IN_SC_CB(_devcb) \ - devcb = &downcast(*device).set_in_sc_callback(DEVCB_##_devcb); + downcast(*device).set_in_sc_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS @@ -90,6 +90,21 @@ public: template devcb_base &set_in_wf_callback(Object &&cb) { return m_in_wf_cb.set_callback(std::forward(cb)); } template devcb_base &set_in_tk000_callback(Object &&cb) { return m_in_tk000_cb.set_callback(std::forward(cb)); } template devcb_base &set_in_sc_callback(Object &&cb) { return m_in_sc_cb.set_callback(std::forward(cb)); } + auto out_intrq_callback() { return m_out_intrq_cb.bind(); } + auto out_bdrq_callback() { return m_out_bdrq_cb.bind(); } + auto out_bcr_callback() { return m_out_bcr_cb.bind(); } + auto in_brdy_callback() { return m_in_brdy_cb.bind(); } + auto in_bcs_callback() { return m_in_bcs_cb.bind(); } + auto out_bcs_callback() { return m_out_bcs_cb.bind(); } + auto out_dirin_callback() { return m_out_dirin_cb.bind(); } + auto out_step_callback() { return m_out_step_cb.bind(); } + auto out_rwc_callback() { return m_out_rwc_cb.bind(); } + auto out_wg_callback() { return m_out_wg_cb.bind(); } + auto in_drdy_callback() { return m_in_drdy_cb.bind(); } + auto in_index_callback() { return m_in_index_cb.bind(); } + auto in_wf_callback() { return m_in_wf_cb.bind(); } + auto in_tk000_callback() { return m_in_tk000_cb.bind(); } + auto in_sc_callback() { return m_in_sc_cb.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/machine/wd33c93.h b/src/devices/machine/wd33c93.h index a0dd224b1db..6f3e8ad2408 100644 --- a/src/devices/machine/wd33c93.h +++ b/src/devices/machine/wd33c93.h @@ -13,7 +13,7 @@ #include "legscsi.h" #define MCFG_WD33C93_IRQ_CB(cb) \ - devcb = &downcast(*device).set_irq_callback((DEVCB_##cb)); + downcast(*device).set_irq_callback((DEVCB_##cb)); class wd33c93_device : public legacy_scsi_host_adapter { diff --git a/src/devices/machine/wd7600.cpp b/src/devices/machine/wd7600.cpp index a334a14428b..55553c3f92a 100644 --- a/src/devices/machine/wd7600.cpp +++ b/src/devices/machine/wd7600.cpp @@ -56,12 +56,12 @@ MACHINE_CONFIG_START(wd7600_device::device_add_mconfig) MCFG_DEVICE_ADD("intc1", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, wd7600_device, pic1_int_w)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, wd7600_device, pic1_slave_ack_r)) MCFG_DEVICE_ADD("intc2", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("intc1", pic8259_device, ir2_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("ctc", PIT8254, 0) MCFG_PIT8253_CLK0(XTAL(14'318'181) / 12.0) diff --git a/src/devices/machine/wd7600.h b/src/devices/machine/wd7600.h index 4e8093c5110..de70cef8e56 100644 --- a/src/devices/machine/wd7600.h +++ b/src/devices/machine/wd7600.h @@ -27,31 +27,31 @@ downcast(*device).set_keybctag(_keybctag); #define MCFG_WD7600_IOR(_ior) \ - devcb = &downcast(device)->set_ior_callback(DEVCB_##_ior); + downcast(device)->set_ior_callback(DEVCB_##_ior); #define MCFG_WD7600_IOW(_iow) \ - devcb = &downcast(device)->set_iow_callback(DEVCB_##_iow); + downcast(device)->set_iow_callback(DEVCB_##_iow); #define MCFG_WD7600_TC(_tc) \ - devcb = &downcast(device)->set_tc_callback(DEVCB_##_tc); + downcast(device)->set_tc_callback(DEVCB_##_tc); #define MCFG_WD7600_HOLD(_hold) \ - devcb = &downcast(device)->set_hold_callback(DEVCB_##_hold); + downcast(device)->set_hold_callback(DEVCB_##_hold); #define MCFG_WD7600_NMI(_nmi) \ - devcb = &downcast(device)->set_nmi_callback(DEVCB_##_nmi); + downcast(device)->set_nmi_callback(DEVCB_##_nmi); #define MCFG_WD7600_INTR(_intr) \ - devcb = &downcast(device)->set_intr_callback(DEVCB_##_intr); + downcast(device)->set_intr_callback(DEVCB_##_intr); #define MCFG_WD7600_CPURESET(_cpureset) \ - devcb = &downcast(device)->set_cpureset_callback(DEVCB_##_cpureset); + downcast(device)->set_cpureset_callback(DEVCB_##_cpureset); #define MCFG_WD7600_A20M(_a20m) \ - devcb = &downcast(device)->set_a20m_callback(DEVCB_##_a20m); + downcast(device)->set_a20m_callback(DEVCB_##_a20m); #define MCFG_WD7600_SPKR(_spkr) \ - devcb = &downcast(device)->set_spkr_callback(DEVCB_##_spkr); + downcast(device)->set_spkr_callback(DEVCB_##_spkr); //************************************************************************** diff --git a/src/devices/machine/wd_fdc.h b/src/devices/machine/wd_fdc.h index 6f59190ea31..291cd384703 100644 --- a/src/devices/machine/wd_fdc.h +++ b/src/devices/machine/wd_fdc.h @@ -52,19 +52,19 @@ downcast(device)->set_disable_motor_control(true); #define MCFG_WD_FDC_INTRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_intrq_wr_callback(DEVCB_##_write); + downcast(*device).set_intrq_wr_callback(DEVCB_##_write); #define MCFG_WD_FDC_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); #define MCFG_WD_FDC_HLD_CALLBACK(_write) \ - devcb = &downcast(*device).set_hld_wr_callback(DEVCB_##_write); + downcast(*device).set_hld_wr_callback(DEVCB_##_write); #define MCFG_WD_FDC_ENP_CALLBACK(_write) \ - devcb = &downcast(*device).set_enp_wr_callback(DEVCB_##_write); + downcast(*device).set_enp_wr_callback(DEVCB_##_write); #define MCFG_WD_FDC_ENMF_CALLBACK(_read) \ - devcb = &downcast(*device).set_enmf_rd_callback(DEVCB_##_read); + downcast(*device).set_enmf_rd_callback(DEVCB_##_read); class wd_fdc_device_base : public device_t { public: @@ -73,6 +73,11 @@ public: template devcb_base &set_hld_wr_callback(Object &&cb) { return hld_cb.set_callback(std::forward(cb)); } template devcb_base &set_enp_wr_callback(Object &&cb) { return enp_cb.set_callback(std::forward(cb)); } template devcb_base &set_enmf_rd_callback(Object &&cb) { return enmf_cb.set_callback(std::forward(cb)); } + auto intrq_wr_callback() { return intrq_cb.bind(); } + auto drq_wr_callback() { return drq_cb.bind(); } + auto hld_wr_callback() { return hld_cb.bind(); } + auto enp_wr_callback() { return enp_cb.bind(); } + auto enmf_rd_callback() { return enmf_cb.bind(); } void soft_reset(); diff --git a/src/devices/machine/ym2148.h b/src/devices/machine/ym2148.h index d3dad3db350..3e554cec240 100644 --- a/src/devices/machine/ym2148.h +++ b/src/devices/machine/ym2148.h @@ -20,16 +20,16 @@ //************************************************************************** #define MCFG_YM2148_TXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txd_handler(DEVCB_##_devcb); + downcast(*device).set_txd_handler(DEVCB_##_devcb); #define MCFG_YM2148_PORT_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_port_write_handler(DEVCB_##_devcb); + downcast(*device).set_port_write_handler(DEVCB_##_devcb); #define MCFG_YM2148_PORT_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_port_read_handler(DEVCB_##_devcb); + downcast(*device).set_port_read_handler(DEVCB_##_devcb); #define MCFG_YM2148_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class ym2148_device : public device_t, public device_serial_interface diff --git a/src/devices/machine/ym3802.h b/src/devices/machine/ym3802.h index 4b05098fc7d..f1f827cb619 100644 --- a/src/devices/machine/ym3802.h +++ b/src/devices/machine/ym3802.h @@ -24,10 +24,10 @@ #include #define MCFG_YM3802_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_YM3802_TXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txd_handler(DEVCB_##_devcb); + downcast(*device).set_txd_handler(DEVCB_##_devcb); class ym3802_device : public device_t, public device_serial_interface { diff --git a/src/devices/machine/z80ctc.h b/src/devices/machine/z80ctc.h index 158028c9e9f..ce07fd9cf61 100644 --- a/src/devices/machine/z80ctc.h +++ b/src/devices/machine/z80ctc.h @@ -36,20 +36,20 @@ //************************************************************************** #define MCFG_Z80CTC_INTR_CB(_devcb) \ - devcb = &downcast(*device).set_intr_callback(DEVCB_##_devcb); + downcast(*device).set_intr_callback(DEVCB_##_devcb); #define MCFG_Z80CTC_ZC0_CB(_devcb) \ - devcb = &downcast(*device).set_zc_callback<0>(DEVCB_##_devcb); + downcast(*device).set_zc_callback<0>(DEVCB_##_devcb); #define MCFG_Z80CTC_ZC1_CB(_devcb) \ - devcb = &downcast(*device).set_zc_callback<1>(DEVCB_##_devcb); + downcast(*device).set_zc_callback<1>(DEVCB_##_devcb); #define MCFG_Z80CTC_ZC2_CB(_devcb) \ - devcb = &downcast(*device).set_zc_callback<2>(DEVCB_##_devcb); + downcast(*device).set_zc_callback<2>(DEVCB_##_devcb); // not supported on a standard ctc, only used for the tmpz84c015 #define MCFG_Z80CTC_ZC3_CB(_devcb) \ - devcb = &downcast(*device).set_zc_callback<3>(DEVCB_##_devcb); + downcast(*device).set_zc_callback<3>(DEVCB_##_devcb); //************************************************************************** @@ -105,6 +105,8 @@ public: template devcb_base &set_intr_callback(Object &&cb) { return m_intr_cb.set_callback(std::forward(cb)); } template devcb_base &set_zc_callback(Object &&cb) { return m_zc_cb[Channel].set_callback(std::forward(cb)); } + auto intr_callback() { return m_intr_cb.bind(); } + template auto zc_callback() { return m_zc_cb[Channel].bind(); } // read/write handlers DECLARE_READ8_MEMBER( read ); diff --git a/src/devices/machine/z80daisy_generic.h b/src/devices/machine/z80daisy_generic.h index e30cef85139..1270abf8659 100644 --- a/src/devices/machine/z80daisy_generic.h +++ b/src/devices/machine/z80daisy_generic.h @@ -23,7 +23,7 @@ downcast(*device).set_vector(_vector); \ #define MCFG_Z80DAISY_GENERIC_INT_CB(_devcb) \ - devcb = &downcast(*device).set_int_handler(DEVCB_##_devcb); + downcast(*device).set_int_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/z80dart.h b/src/devices/machine/z80dart.h index 425f353fa0a..b539d2e6a02 100644 --- a/src/devices/machine/z80dart.h +++ b/src/devices/machine/z80dart.h @@ -159,49 +159,49 @@ downcast(*device).configure_channels(_rxa, _txa, _rxb, _txb); #define MCFG_Z80DART_OUT_TXDA_CB(_devcb) \ - devcb = &downcast(*device).set_out_txda_callback(DEVCB_##_devcb); + downcast(*device).set_out_txda_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_DTRA_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtra_callback(DEVCB_##_devcb); + downcast(*device).set_out_dtra_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_RTSA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rtsa_callback(DEVCB_##_devcb); + downcast(*device).set_out_rtsa_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_WRDYA_CB(_devcb) \ - devcb = &downcast(*device).set_out_wrdya_callback(DEVCB_##_devcb); + downcast(*device).set_out_wrdya_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_SYNCA_CB(_devcb) \ - devcb = &downcast(*device).set_out_synca_callback(DEVCB_##_devcb); + downcast(*device).set_out_synca_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_TXDB_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdb_callback(DEVCB_##_devcb); + downcast(*device).set_out_txdb_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_DTRB_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtrb_callback(DEVCB_##_devcb); + downcast(*device).set_out_dtrb_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_RTSB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rtsb_callback(DEVCB_##_devcb); + downcast(*device).set_out_rtsb_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_WRDYB_CB(_devcb) \ - devcb = &downcast(*device).set_out_wrdyb_callback(DEVCB_##_devcb); + downcast(*device).set_out_wrdyb_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_SYNCB_CB(_devcb) \ - devcb = &downcast(*device).set_out_syncb_callback(DEVCB_##_devcb); + downcast(*device).set_out_syncb_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_RXDRQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rxdrqa_callback(DEVCB_##_devcb); + downcast(*device).set_out_rxdrqa_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_TXDRQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdrqa_callback(DEVCB_##_devcb); + downcast(*device).set_out_txdrqa_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_RXDRQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rxdrqb_callback(DEVCB_##_devcb); + downcast(*device).set_out_rxdrqb_callback(DEVCB_##_devcb); #define MCFG_Z80DART_OUT_TXDRQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdrqb_callback(DEVCB_##_devcb); + downcast(*device).set_out_txdrqb_callback(DEVCB_##_devcb); //************************************************************************** @@ -462,6 +462,21 @@ public: template devcb_base &set_out_txdrqa_callback(Object &&cb) { return m_out_txdrqa_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_rxdrqb_callback(Object &&cb) { return m_out_rxdrqb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_txdrqb_callback(Object &&cb) { return m_out_txdrqb_cb.set_callback(std::forward(cb)); } + auto out_txda_callback() { return m_out_txda_cb.bind(); } + auto out_dtra_callback() { return m_out_dtra_cb.bind(); } + auto out_rtsa_callback() { return m_out_rtsa_cb.bind(); } + auto out_wrdya_callback() { return m_out_wrdya_cb.bind(); } + auto out_synca_callback() { return m_out_synca_cb.bind(); } + auto out_txdb_callback() { return m_out_txdb_cb.bind(); } + auto out_dtrb_callback() { return m_out_dtrb_cb.bind(); } + auto out_rtsb_callback() { return m_out_rtsb_cb.bind(); } + auto out_wrdyb_callback() { return m_out_wrdyb_cb.bind(); } + auto out_syncb_callback() { return m_out_syncb_cb.bind(); } + auto out_int_callback() { return m_out_int_cb.bind(); } + auto out_rxdrqa_callback() { return m_out_rxdrqa_cb.bind(); } + auto out_txdrqa_callback() { return m_out_txdrqa_cb.bind(); } + auto out_rxdrqb_callback() { return m_out_rxdrqb_cb.bind(); } + auto out_txdrqb_callback() { return m_out_txdrqb_cb.bind(); } void configure_channels(int rxa, int txa, int rxb, int txb) { diff --git a/src/devices/machine/z80dma.h b/src/devices/machine/z80dma.h index 1a9d425c9e1..02b7866463c 100644 --- a/src/devices/machine/z80dma.h +++ b/src/devices/machine/z80dma.h @@ -42,25 +42,25 @@ //************************************************************************** #define MCFG_Z80DMA_OUT_BUSREQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_busreq_callback(DEVCB_##_devcb); + downcast(*device).set_out_busreq_callback(DEVCB_##_devcb); #define MCFG_Z80DMA_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); #define MCFG_Z80DMA_OUT_BAO_CB(_devcb) \ - devcb = &downcast(*device).set_out_bao_callback(DEVCB_##_devcb); + downcast(*device).set_out_bao_callback(DEVCB_##_devcb); #define MCFG_Z80DMA_IN_MREQ_CB(_devcb) \ - devcb = &downcast(*device).set_in_mreq_callback(DEVCB_##_devcb); + downcast(*device).set_in_mreq_callback(DEVCB_##_devcb); #define MCFG_Z80DMA_OUT_MREQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_mreq_callback(DEVCB_##_devcb); + downcast(*device).set_out_mreq_callback(DEVCB_##_devcb); #define MCFG_Z80DMA_IN_IORQ_CB(_devcb) \ - devcb = &downcast(*device).set_in_iorq_callback(DEVCB_##_devcb); + downcast(*device).set_in_iorq_callback(DEVCB_##_devcb); #define MCFG_Z80DMA_OUT_IORQ_CB(_devcb) \ - devcb = &downcast(*device).set_out_iorq_callback(DEVCB_##_devcb); + downcast(*device).set_out_iorq_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/z80pio.h b/src/devices/machine/z80pio.h index 0fbfb246951..f0bfad62351 100644 --- a/src/devices/machine/z80pio.h +++ b/src/devices/machine/z80pio.h @@ -42,25 +42,25 @@ //************************************************************************** #define MCFG_Z80PIO_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); #define MCFG_Z80PIO_IN_PA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_Z80PIO_OUT_PA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_Z80PIO_OUT_ARDY_CB(_devcb) \ - devcb = &downcast(*device).set_out_ardy_callback(DEVCB_##_devcb); + downcast(*device).set_out_ardy_callback(DEVCB_##_devcb); #define MCFG_Z80PIO_IN_PB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_Z80PIO_OUT_PB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); #define MCFG_Z80PIO_OUT_BRDY_CB(_devcb) \ - devcb = &downcast(*device).set_out_brdy_callback(DEVCB_##_devcb); + downcast(*device).set_out_brdy_callback(DEVCB_##_devcb); //************************************************************************** @@ -91,6 +91,14 @@ public: template devcb_base &set_in_pb_callback(Object &&cb) { return m_in_pb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_pb_callback(Object &&cb) { return m_out_pb_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_brdy_callback(Object &&cb) { return m_out_brdy_cb.set_callback(std::forward(cb)); } + auto out_int_callback() { return m_out_int_cb.bind(); } + auto in_pa_callback() { return m_in_pa_cb.bind(); } + auto out_pa_callback() { return m_out_pa_cb.bind(); } + auto out_ardy_callback() { return m_out_ardy_cb.bind(); } + auto in_pb_callback() { return m_in_pb_cb.bind(); } + auto out_pb_callback() { return m_out_pb_cb.bind(); } + auto out_brdy_callback() { return m_out_brdy_cb.bind(); } + // I/O line access int rdy(int which) { return m_port[which].rdy(); } diff --git a/src/devices/machine/z80scc.h b/src/devices/machine/z80scc.h index 4a73fcfa3d6..50ba0ee0c02 100644 --- a/src/devices/machine/z80scc.h +++ b/src/devices/machine/z80scc.h @@ -48,51 +48,51 @@ downcast(*device).configure_channels(_rxa, _txa, _rxb, _txb); #define MCFG_Z80SCC_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); // Port A callbacks #define MCFG_Z80SCC_OUT_TXDA_CB(_devcb) \ - devcb = &downcast(*device).set_out_txd_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_txd_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_DTRA_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtr_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_dtr_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_RTSA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rts_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_rts_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_WREQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_wreq_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_wreq_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_SYNCA_CB(_devcb) \ - devcb = &downcast(*device).set_out_sync_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_sync_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_RXDRQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rxdrq_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_rxdrq_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_TXDRQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdrq_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_txdrq_callback<0>(DEVCB_##_devcb); // Port B callbacks #define MCFG_Z80SCC_OUT_TXDB_CB(_devcb) \ - devcb = &downcast(*device).set_out_txd_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_txd_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_DTRB_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtr_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_dtr_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_RTSB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rts_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_rts_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_WREQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_wreq_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_wreq_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_SYNCB_CB(_devcb) \ - devcb = &downcast(*device).set_out_sync_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_sync_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_RXDRQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rxdrq_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_rxdrq_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SCC_OUT_TXDRQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdrq_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_txdrq_callback<1>(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/machine/z80sio.cpp b/src/devices/machine/z80sio.cpp index c52a29983b5..c190fb700a6 100644 --- a/src/devices/machine/z80sio.cpp +++ b/src/devices/machine/z80sio.cpp @@ -355,6 +355,7 @@ z80sio_device::z80sio_device(const machine_config &mconfig, device_type type, co device_z80daisy_interface(mconfig, *this), m_chanA(*this, CHANA_TAG), m_chanB(*this, CHANB_TAG), + m_hostcpu(*this, finder_base::DUMMY_TAG), m_out_txd_cb{ { *this }, { *this } }, m_out_dtr_cb{ { *this }, { *this } }, m_out_rts_cb{ { *this }, { *this } }, @@ -362,8 +363,7 @@ z80sio_device::z80sio_device(const machine_config &mconfig, device_type type, co m_out_sync_cb{ { *this }, { *this } }, m_out_int_cb(*this), m_out_rxdrq_cb{ { *this }, { *this } }, - m_out_txdrq_cb{ { *this }, { *this } }, - m_cputag(nullptr) + m_out_txdrq_cb{ { *this }, { *this } } { for (auto & elem : m_int_state) elem = 0; @@ -389,6 +389,15 @@ upd7201_new_device::upd7201_new_device(const machine_config &mconfig, const char { } +//------------------------------------------------- +// device_validity_check - device-specific validation +//------------------------------------------------- +void z80sio_device::device_validity_check(validity_checker &valid) const +{ + if ((m_hostcpu.finder_tag() != finder_base::DUMMY_TAG) && !m_hostcpu) + osd_printf_error("Host CPU configured but not found.\n"); +} + //------------------------------------------------- // device_resolve_objects - device-specific setup //------------------------------------------------- @@ -487,12 +496,11 @@ int z80sio_device::z80daisy_irq_ack() // Did we not find a vector? Get the notion of a default vector from the CPU implementation logerror(" - failed to find an interrupt to ack!\n"); - if (m_cputag) + if (m_hostcpu) { // default irq vector is -1 for 68000 but 0 for z80 for example... - // FIXME: use an optional_device or something - int const ret = owner()->subdevice(m_cputag)->default_irq_vector(INPUT_LINE_IRQ0); - LOGINT(" - failed to find an interrupt to ack [%s], returning default IRQ vector: %02x\n", m_cputag, ret); + int const ret = m_hostcpu->default_irq_vector(INPUT_LINE_IRQ0); + LOGINT(" - failed to find an interrupt to ack [%s], returning default IRQ vector: %02x\n", m_hostcpu->tag(), ret); return ret; } @@ -556,12 +564,11 @@ int i8274_new_device::z80daisy_irq_ack() logerror(" - failed to find an interrupt to ack!\n"); } - if (m_cputag) + if (m_hostcpu) { // default irq vector is -1 for 68000 but 0 for z80 for example... - // FIXME: use an optional_device or something - int const ret = owner()->subdevice(m_cputag)->default_irq_vector(INPUT_LINE_IRQ0); - LOGINT(" - failed to find an interrupt to ack [%s], returning default IRQ vector: %02x\n", m_cputag, ret); + int const ret = m_hostcpu->default_irq_vector(INPUT_LINE_IRQ0); + LOGINT(" - failed to find an interrupt to ack [%s], returning default IRQ vector: %02x\n", m_hostcpu->tag(), ret); return ret; } diff --git a/src/devices/machine/z80sio.h b/src/devices/machine/z80sio.h index f8a17dbfe8e..3c629208d64 100644 --- a/src/devices/machine/z80sio.h +++ b/src/devices/machine/z80sio.h @@ -68,54 +68,54 @@ /* Generic macros */ #define MCFG_Z80SIO_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); #define MCFG_Z80SIO_CPU(_cputag) \ downcast(*device).set_cputag(_cputag); // Port A callbacks #define MCFG_Z80SIO_OUT_TXDA_CB(_devcb) \ - devcb = &downcast(*device).set_out_txd_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_txd_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_DTRA_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtr_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_dtr_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_RTSA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rts_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_rts_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_WRDYA_CB(_devcb) \ - devcb = &downcast(*device).set_out_wrdy_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_wrdy_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_SYNCA_CB(_devcb) \ - devcb = &downcast(*device).set_out_sync_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_sync_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_RXDRQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_rxdrq_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_rxdrq_callback<0>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_TXDRQA_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdrq_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_txdrq_callback<0>(DEVCB_##_devcb); // Port B callbacks #define MCFG_Z80SIO_OUT_TXDB_CB(_devcb) \ - devcb = &downcast(*device).set_out_txd_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_txd_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_DTRB_CB(_devcb) \ - devcb = &downcast(*device).set_out_dtr_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_dtr_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_RTSB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rts_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_rts_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_WRDYB_CB(_devcb) \ - devcb = &downcast(*device).set_out_wrdy_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_wrdy_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_SYNCB_CB(_devcb) \ - devcb = &downcast(*device).set_out_sync_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_sync_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_RXDRQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_rxdrq_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_rxdrq_callback<1>(DEVCB_##_devcb); #define MCFG_Z80SIO_OUT_TXDRQB_CB(_devcb) \ - devcb = &downcast(*device).set_out_txdrq_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_txdrq_callback<1>(DEVCB_##_devcb); //************************************************************************** @@ -347,7 +347,23 @@ public: template devcb_base &set_out_rxdrq_callback(Object &&cb) { return m_out_rxdrq_cb[N].set_callback(std::forward(cb)); } template devcb_base &set_out_txdrq_callback(Object &&cb) { return m_out_txdrq_cb[N].set_callback(std::forward(cb)); } - void set_cputag(const char *tag) { m_cputag = tag; } + auto out_txda_callback() { return m_out_txd_cb[0].bind(); } + auto out_txdb_callback() { return m_out_txd_cb[1].bind(); } + auto out_dtra_callback() { return m_out_dtr_cb[0].bind(); } + auto out_dtrb_callback() { return m_out_dtr_cb[1].bind(); } + auto out_rtsa_callback() { return m_out_rts_cb[0].bind(); } + auto out_rtsb_callback() { return m_out_rts_cb[1].bind(); } + auto out_wrdya_callback() { return m_out_wrdy_cb[0].bind(); } + auto out_wrdyb_callback() { return m_out_wrdy_cb[1].bind(); } + auto out_synca_callback() { return m_out_sync_cb[0].bind(); } + auto out_syncb_callback() { return m_out_sync_cb[1].bind(); } + auto out_int_callback() { return m_out_int_cb.bind(); } + auto out_rxdrqa_callback() { return m_out_rxdrq_cb[0].bind(); } + auto out_rxdrqb_callback() { return m_out_rxdrq_cb[1].bind(); } + auto out_txdrqa_callback() { return m_out_txdrq_cb[0].bind(); } + auto out_txdrqb_callback() { return m_out_txdrq_cb[1].bind(); } + + template void set_cputag(T &&tag) { m_hostcpu.set_tag(std::forward(tag)); } DECLARE_READ8_MEMBER( cd_ba_r ); DECLARE_WRITE8_MEMBER( cd_ba_w ); @@ -385,6 +401,7 @@ protected: z80sio_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides + virtual void device_validity_check(validity_checker &valid) const override; virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; @@ -414,6 +431,7 @@ protected: required_device m_chanA; required_device m_chanB; + optional_device m_hostcpu; // internal state devcb_write_line m_out_txd_cb[2]; @@ -428,7 +446,6 @@ protected: int m_int_state[8]; // interrupt state int m_int_source[8]; // interrupt source - const char *m_cputag; }; class i8274_new_device : public z80sio_device diff --git a/src/devices/machine/z80sti.h b/src/devices/machine/z80sti.h index 794c5623a2e..e0926a98dc0 100644 --- a/src/devices/machine/z80sti.h +++ b/src/devices/machine/z80sti.h @@ -49,28 +49,28 @@ downcast(*device).set_tx_clock(_clock); #define MCFG_Z80STI_OUT_INT_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_callback(DEVCB_##_devcb); #define MCFG_Z80STI_IN_GPIO_CB(_devcb) \ - devcb = &downcast(*device).set_in_gpio_callback(DEVCB_##_devcb); + downcast(*device).set_in_gpio_callback(DEVCB_##_devcb); #define MCFG_Z80STI_OUT_GPIO_CB(_devcb) \ - devcb = &downcast(*device).set_out_gpio_callback(DEVCB_##_devcb); + downcast(*device).set_out_gpio_callback(DEVCB_##_devcb); #define MCFG_Z80STI_OUT_SO_CB(_devcb) \ - devcb = &downcast(*device).set_out_so_callback(DEVCB_##_devcb); + downcast(*device).set_out_so_callback(DEVCB_##_devcb); #define MCFG_Z80STI_OUT_TAO_CB(_devcb) \ - devcb = &downcast(*device).set_out_tao_callback(DEVCB_##_devcb); + downcast(*device).set_out_tao_callback(DEVCB_##_devcb); #define MCFG_Z80STI_OUT_TBO_CB(_devcb) \ - devcb = &downcast(*device).set_out_tbo_callback(DEVCB_##_devcb); + downcast(*device).set_out_tbo_callback(DEVCB_##_devcb); #define MCFG_Z80STI_OUT_TCO_CB(_devcb) \ - devcb = &downcast(*device).set_out_tco_callback(DEVCB_##_devcb); + downcast(*device).set_out_tco_callback(DEVCB_##_devcb); #define MCFG_Z80STI_OUT_TDO_CB(_devcb) \ - devcb = &downcast(*device).set_out_tdo_callback(DEVCB_##_devcb); + downcast(*device).set_out_tdo_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/machine/z8536.h b/src/devices/machine/z8536.h index be819b55ade..a0b0ab9b56c 100644 --- a/src/devices/machine/z8536.h +++ b/src/devices/machine/z8536.h @@ -65,25 +65,25 @@ //************************************************************************** #define MCFG_Z8536_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_Z8536_PA_IN_CALLBACK(_read) \ - devcb = &downcast(*device).set_pa_rd_callback(DEVCB_##_read); + downcast(*device).set_pa_rd_callback(DEVCB_##_read); #define MCFG_Z8536_PA_OUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_pa_wr_callback(DEVCB_##_write); + downcast(*device).set_pa_wr_callback(DEVCB_##_write); #define MCFG_Z8536_PB_IN_CALLBACK(_read) \ - devcb = &downcast(*device).set_pb_rd_callback(DEVCB_##_read); + downcast(*device).set_pb_rd_callback(DEVCB_##_read); #define MCFG_Z8536_PB_OUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_pb_wr_callback(DEVCB_##_write); + downcast(*device).set_pb_wr_callback(DEVCB_##_write); #define MCFG_Z8536_PC_IN_CALLBACK(_read) \ - devcb = &downcast(*device).set_pc_rd_callback(DEVCB_##_read); + downcast(*device).set_pc_rd_callback(DEVCB_##_read); #define MCFG_Z8536_PC_OUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_pc_wr_callback(DEVCB_##_write); + downcast(*device).set_pc_wr_callback(DEVCB_##_write); diff --git a/src/devices/sound/2203intf.h b/src/devices/sound/2203intf.h index 345129c98f7..5020702707b 100644 --- a/src/devices/sound/2203intf.h +++ b/src/devices/sound/2203intf.h @@ -12,7 +12,7 @@ struct ssg_callbacks; #define MCFG_YM2203_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler((DEVCB_##cb)); + downcast(*device).set_irq_handler((DEVCB_##cb)); class ym2203_device : public ay8910_device { @@ -21,6 +21,7 @@ public: // configuration helpers template devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward(cb)); } + auto irq_handler() { return m_irq_handler.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/sound/2608intf.h b/src/devices/sound/2608intf.h index 444d31a5efc..7272f5778e9 100644 --- a/src/devices/sound/2608intf.h +++ b/src/devices/sound/2608intf.h @@ -12,7 +12,7 @@ struct ssg_callbacks; #define MCFG_YM2608_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##cb); + downcast(*device).set_irq_handler(DEVCB_##cb); class ym2608_device : public ay8910_device { diff --git a/src/devices/sound/2610intf.h b/src/devices/sound/2610intf.h index cc18a94cf3d..bb25f97b51e 100644 --- a/src/devices/sound/2610intf.h +++ b/src/devices/sound/2610intf.h @@ -12,7 +12,7 @@ struct ssg_callbacks; #define MCFG_YM2610_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler((DEVCB_##cb)); + downcast(*device).set_irq_handler((DEVCB_##cb)); class ym2610_device : public ay8910_device { @@ -21,6 +21,7 @@ public: // configuration helpers template devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward(cb)); } + auto irq_handler() { return m_irq_handler.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/sound/2612intf.h b/src/devices/sound/2612intf.h index d342fa148ec..22938d7aec0 100644 --- a/src/devices/sound/2612intf.h +++ b/src/devices/sound/2612intf.h @@ -7,7 +7,7 @@ #define MCFG_YM2612_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler((DEVCB_##cb)); + downcast(*device).set_irq_handler((DEVCB_##cb)); class ym2612_device : public device_t, public device_sound_interface { diff --git a/src/devices/sound/262intf.h b/src/devices/sound/262intf.h index c9650b97deb..9f1575ccb01 100644 --- a/src/devices/sound/262intf.h +++ b/src/devices/sound/262intf.h @@ -7,7 +7,7 @@ #define MCFG_YMF262_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler((DEVCB_##cb)); + downcast(*device).set_irq_handler((DEVCB_##cb)); class ymf262_device : public device_t, public device_sound_interface { diff --git a/src/devices/sound/3526intf.h b/src/devices/sound/3526intf.h index 24b77d16fbf..bba99b7f2b9 100644 --- a/src/devices/sound/3526intf.h +++ b/src/devices/sound/3526intf.h @@ -7,7 +7,7 @@ #define MCFG_YM3526_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler((DEVCB_##cb)); + downcast(*device).set_irq_handler((DEVCB_##cb)); class ym3526_device : public device_t, public device_sound_interface { diff --git a/src/devices/sound/3812intf.h b/src/devices/sound/3812intf.h index 910b51521ba..47fd0247314 100644 --- a/src/devices/sound/3812intf.h +++ b/src/devices/sound/3812intf.h @@ -5,7 +5,7 @@ #define MCFG_YM3812_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler((DEVCB_##cb)); + downcast(*device).set_irq_handler((DEVCB_##cb)); class ym3812_device : public device_t, public device_sound_interface { @@ -14,6 +14,7 @@ public: // configuration helpers template devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward(cb)); } + auto irq_handler() { return m_irq_handler.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/sound/8950intf.h b/src/devices/sound/8950intf.h index a6a29e5b644..83aad8781c0 100644 --- a/src/devices/sound/8950intf.h +++ b/src/devices/sound/8950intf.h @@ -7,19 +7,19 @@ #define MCFG_Y8950_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler((DEVCB_##cb)); + downcast(*device).set_irq_handler((DEVCB_##cb)); #define MCFG_Y8950_KEYBOARD_READ_HANDLER(cb) \ - devcb = &downcast(*device).set_keyboard_read_handler((DEVCB_##cb)); + downcast(*device).set_keyboard_read_handler((DEVCB_##cb)); #define MCFG_Y8950_KEYBOARD_WRITE_HANDLER(cb) \ - devcb = &downcast(*device).set_keyboard_write_handler((DEVCB_##cb)); + downcast(*device).set_keyboard_write_handler((DEVCB_##cb)); #define MCFG_Y8950_IO_READ_HANDLER(cb) \ - devcb = &downcast(*device).set_io_read_handler((DEVCB_##cb)); + downcast(*device).set_io_read_handler((DEVCB_##cb)); #define MCFG_Y8950_IO_WRITE_HANDLER(cb) \ - devcb = &downcast(*device).set_io_write_handler((DEVCB_##cb)); + downcast(*device).set_io_write_handler((DEVCB_##cb)); class y8950_device : public device_t, public device_sound_interface { diff --git a/src/devices/sound/ad1848.h b/src/devices/sound/ad1848.h index efc5bf3228c..07aec2ee991 100644 --- a/src/devices/sound/ad1848.h +++ b/src/devices/sound/ad1848.h @@ -9,10 +9,10 @@ #define MCFG_AD1848_IRQ_CALLBACK(cb) \ - devcb = &downcast(*device).set_irq_callback((DEVCB_##cb)); + downcast(*device).set_irq_callback((DEVCB_##cb)); #define MCFG_AD1848_DRQ_CALLBACK(cb) \ - devcb = &downcast(*device).set_drq_callback((DEVCB_##cb)); + downcast(*device).set_drq_callback((DEVCB_##cb)); class ad1848_device : public device_t { diff --git a/src/devices/sound/aica.h b/src/devices/sound/aica.h index a84fb3e31ae..91e7be6f6d2 100644 --- a/src/devices/sound/aica.h +++ b/src/devices/sound/aica.h @@ -21,10 +21,10 @@ downcast(*device).set_roffset((offs)); #define MCFG_AICA_IRQ_CB(cb) \ - devcb = &downcast(*device).set_irq_callback((DEVCB_##cb)); + downcast(*device).set_irq_callback((DEVCB_##cb)); #define MCFG_AICA_MAIN_IRQ_CB(cb) \ - devcb = &downcast(*device).set_main_irq_callback((DEVCB_##cb)); + downcast(*device).set_main_irq_callback((DEVCB_##cb)); class aica_device : public device_t, public device_sound_interface { diff --git a/src/devices/sound/asc.h b/src/devices/sound/asc.h index f3435c799b3..a723707a9e9 100644 --- a/src/devices/sound/asc.h +++ b/src/devices/sound/asc.h @@ -34,7 +34,7 @@ downcast(*device).set_type(asc_device::asc_type::_type); #define MCFG_IRQ_FUNC(_irqf) \ - devcb = &downcast(device)->set_irqf(DEVCB_##_irqf); + downcast(device)->set_irqf(DEVCB_##_irqf); //************************************************************************** diff --git a/src/devices/sound/astrocde.h b/src/devices/sound/astrocde.h index 1ebeeae5e52..d5665b40f58 100644 --- a/src/devices/sound/astrocde.h +++ b/src/devices/sound/astrocde.h @@ -40,31 +40,31 @@ //************************************************************************** #define MCFG_ASTROCADE_IO_SI_READ_CB(_devcb) \ - devcb = &downcast(*device).set_si_callback(DEVCB_##_devcb); + downcast(*device).set_si_callback(DEVCB_##_devcb); #define MCFG_ASTROCADE_IO_SO0_STROBE_CB(_devcb) \ - devcb = &downcast(*device).set_so_callback<0>(DEVCB_##_devcb); + downcast(*device).set_so_callback<0>(DEVCB_##_devcb); #define MCFG_ASTROCADE_IO_SO1_STROBE_CB(_devcb) \ - devcb = &downcast(*device).set_so_callback<1>(DEVCB_##_devcb); + downcast(*device).set_so_callback<1>(DEVCB_##_devcb); #define MCFG_ASTROCADE_IO_SO2_STROBE_CB(_devcb) \ - devcb = &downcast(*device).set_so_callback<2>(DEVCB_##_devcb); + downcast(*device).set_so_callback<2>(DEVCB_##_devcb); #define MCFG_ASTROCADE_IO_SO3_STROBE_CB(_devcb) \ - devcb = &downcast(*device).set_so_callback<3>(DEVCB_##_devcb); + downcast(*device).set_so_callback<3>(DEVCB_##_devcb); #define MCFG_ASTROCADE_IO_SO4_STROBE_CB(_devcb) \ - devcb = &downcast(*device).set_so_callback<4>(DEVCB_##_devcb); + downcast(*device).set_so_callback<4>(DEVCB_##_devcb); #define MCFG_ASTROCADE_IO_SO5_STROBE_CB(_devcb) \ - devcb = &downcast(*device).set_so_callback<5>(DEVCB_##_devcb); + downcast(*device).set_so_callback<5>(DEVCB_##_devcb); #define MCFG_ASTROCADE_IO_SO6_STROBE_CB(_devcb) \ - devcb = &downcast(*device).set_so_callback<6>(DEVCB_##_devcb); + downcast(*device).set_so_callback<6>(DEVCB_##_devcb); #define MCFG_ASTROCADE_IO_SO7_STROBE_CB(_devcb) \ - devcb = &downcast(*device).set_so_callback<7>(DEVCB_##_devcb); + downcast(*device).set_so_callback<7>(DEVCB_##_devcb); #define MCFG_ASTROCADE_IO_POT0(_tag) \ downcast(*device).set_pot_tag<0>(_tag); diff --git a/src/devices/sound/ay8910.h b/src/devices/sound/ay8910.h index 44f69041fe8..890d46a3670 100644 --- a/src/devices/sound/ay8910.h +++ b/src/devices/sound/ay8910.h @@ -59,20 +59,19 @@ downcast(*device).set_resistors_load(_res0, _res1, _res2); #define MCFG_AY8910_PORT_A_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_a_read_callback(DEVCB_##_devcb); + downcast(*device).set_port_a_read_callback(DEVCB_##_devcb); #define MCFG_AY8910_PORT_B_READ_CB(_devcb) \ - devcb = &downcast(*device).set_port_b_read_callback(DEVCB_##_devcb); + downcast(*device).set_port_b_read_callback(DEVCB_##_devcb); #define MCFG_AY8910_PORT_A_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_a_write_callback(DEVCB_##_devcb); + downcast(*device).set_port_a_write_callback(DEVCB_##_devcb); #define MCFG_AY8910_PORT_B_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_port_b_write_callback(DEVCB_##_devcb); + downcast(*device).set_port_b_write_callback(DEVCB_##_devcb); -class ay8910_device : public device_t, - public device_sound_interface +class ay8910_device : public device_t, public device_sound_interface { public: enum psg_type_t @@ -92,6 +91,10 @@ public: template devcb_base &set_port_b_read_callback(Object &&cb) { return m_port_b_read_cb.set_callback(std::forward(cb)); } template devcb_base &set_port_a_write_callback(Object &&cb) { return m_port_a_write_cb.set_callback(std::forward(cb)); } template devcb_base &set_port_b_write_callback(Object &&cb) { return m_port_b_write_cb.set_callback(std::forward(cb)); } + auto port_a_read_callback() { return m_port_a_read_cb.bind(); } + auto port_b_read_callback() { return m_port_b_read_cb.bind(); } + auto port_a_write_callback() { return m_port_a_write_cb.bind(); } + auto port_b_write_callback() { return m_port_b_write_cb.bind(); } DECLARE_READ8_MEMBER( data_r ); DECLARE_WRITE8_MEMBER( address_w ); diff --git a/src/devices/sound/cdp1869.h b/src/devices/sound/cdp1869.h index 0fca66fe14c..ecd34ddbd87 100644 --- a/src/devices/sound/cdp1869.h +++ b/src/devices/sound/cdp1869.h @@ -108,10 +108,10 @@ #define CDP1869_PCB_READ_MEMBER(name) int name(uint16_t pma, uint8_t cma, uint8_t pmd) #define MCFG_CDP1869_PAL_NTSC_CALLBACK(_read) \ - devcb = &downcast(*device).set_pal_ntsc_rd_callback(DEVCB_##_read); + downcast(*device).set_pal_ntsc_rd_callback(DEVCB_##_read); #define MCFG_CDP1869_PRD_CALLBACK(_write) \ - devcb = &downcast(*device).set_prd_wr_callback(DEVCB_##_write); + downcast(*device).set_prd_wr_callback(DEVCB_##_write); #define MCFG_CDP1869_COLOR_CLOCK(_clk) \ downcast(*device).set_color_clock(_clk); diff --git a/src/devices/sound/dave.h b/src/devices/sound/dave.h index 61e26608f00..a9fe6dca6a6 100644 --- a/src/devices/sound/dave.h +++ b/src/devices/sound/dave.h @@ -33,13 +33,13 @@ #define MCFG_DAVE_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_DAVE_LH_CALLBACK(_write) \ - devcb = &downcast(*device).set_lh_wr_callback(DEVCB_##_write); + downcast(*device).set_lh_wr_callback(DEVCB_##_write); #define MCFG_DAVE_RH_CALLBACK(_write) \ - devcb = &downcast(*device).set_rh_wr_callback(DEVCB_##_write); + downcast(*device).set_rh_wr_callback(DEVCB_##_write); diff --git a/src/devices/sound/es1373.h b/src/devices/sound/es1373.h index a2705cba287..db3ea72b192 100644 --- a/src/devices/sound/es1373.h +++ b/src/devices/sound/es1373.h @@ -9,7 +9,7 @@ #include "machine/pci.h" #define MCFG_ES1373_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##cb); + downcast(*device).set_irq_handler(DEVCB_##cb); class es1373_device : public pci_device, public device_sound_interface { @@ -20,6 +20,7 @@ public: uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) override; template devcb_base &set_irq_handler(T &&cb) { return m_irq_handler.set_callback(std::forward(cb)); } + auto irq_handler() { return m_irq_handler.bind(); } DECLARE_READ32_MEMBER (reg_r); DECLARE_WRITE32_MEMBER(reg_w); diff --git a/src/devices/sound/es5503.h b/src/devices/sound/es5503.h index 825cdc65a0c..8bf49b6e3ba 100644 --- a/src/devices/sound/es5503.h +++ b/src/devices/sound/es5503.h @@ -14,10 +14,10 @@ downcast(*device).set_channels(_channels); #define MCFG_ES5503_IRQ_FUNC(_write) \ - devcb = &downcast(*device).set_irqf(DEVCB_##_write); + downcast(*device).set_irqf(DEVCB_##_write); #define MCFG_ES5503_ADC_FUNC(_read) \ - devcb = &downcast(*device).set_adcf(DEVCB_##_read); + downcast(*device).set_adcf(DEVCB_##_read); // ======================> es5503_device diff --git a/src/devices/sound/es5506.h b/src/devices/sound/es5506.h index 5b8da91ebac..d8d87408402 100644 --- a/src/devices/sound/es5506.h +++ b/src/devices/sound/es5506.h @@ -30,10 +30,10 @@ downcast(*device).set_channels(_chan); #define MCFG_ES5506_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); #define MCFG_ES5506_READ_PORT_CB(_devcb) \ - devcb = &downcast(*device).set_read_port_callback(DEVCB_##_devcb); + downcast(*device).set_read_port_callback(DEVCB_##_devcb); #define MCFG_ES5505_REGION0(_region) \ @@ -46,10 +46,10 @@ downcast(*device).set_channels(_chan); #define MCFG_ES5505_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); #define MCFG_ES5505_READ_PORT_CB(_devcb) \ - devcb = &downcast(*device).set_read_port_callback(DEVCB_##_devcb); + downcast(*device).set_read_port_callback(DEVCB_##_devcb); class es550x_device : public device_t, public device_sound_interface diff --git a/src/devices/sound/es8712.h b/src/devices/sound/es8712.h index 796167331ed..61f98068cde 100644 --- a/src/devices/sound/es8712.h +++ b/src/devices/sound/es8712.h @@ -19,9 +19,9 @@ #define MCFG_ES8712_REPLACE(_tag, _clock) \ MCFG_DEVICE_REPLACE(_tag, ES8712, _clock) #define MCFG_ES8712_RESET_HANDLER(_devcb) \ - devcb = &downcast(*device).set_reset_handler(DEVCB_##_devcb); + downcast(*device).set_reset_handler(DEVCB_##_devcb); #define MCFG_ES8712_MSM_WRITE_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_msm_write_callback(DEVCB_##_devcb); + downcast(*device).set_msm_write_callback(DEVCB_##_devcb); #define MCFG_ES8712_MSM_TAG(_msmtag) \ downcast(*device).set_msm_tag(_msmtag); diff --git a/src/devices/sound/ics2115.h b/src/devices/sound/ics2115.h index af3d76be7da..66feda4b48e 100644 --- a/src/devices/sound/ics2115.h +++ b/src/devices/sound/ics2115.h @@ -14,7 +14,7 @@ MCFG_DEVICE_ADD(_tag, ICS2115, _clock) #define MCFG_ICS2115_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/sound/k007232.h b/src/devices/sound/k007232.h index ee53a90fa94..845379b55e5 100644 --- a/src/devices/sound/k007232.h +++ b/src/devices/sound/k007232.h @@ -10,7 +10,7 @@ #pragma once #define MCFG_K007232_PORT_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_port_write_handler(DEVCB_##_devcb); + downcast(*device).set_port_write_handler(DEVCB_##_devcb); class k007232_device : public device_t, public device_sound_interface diff --git a/src/devices/sound/k054539.h b/src/devices/sound/k054539.h index 4b1d55cf534..a8a6507963a 100644 --- a/src/devices/sound/k054539.h +++ b/src/devices/sound/k054539.h @@ -20,7 +20,7 @@ downcast(*device).set_override("^" _region); #define MCFG_K054539_TIMER_HANDLER(_devcb) \ - devcb = &downcast(*device).set_timer_handler(DEVCB_##_devcb); + downcast(*device).set_timer_handler(DEVCB_##_devcb); class k054539_device : public device_t, diff --git a/src/devices/sound/k056800.h b/src/devices/sound/k056800.h index aa05889234c..38d4902cfeb 100644 --- a/src/devices/sound/k056800.h +++ b/src/devices/sound/k056800.h @@ -18,7 +18,7 @@ MCFG_DEVICE_ADD((tag), K056800, (clock)) #define MCFG_K056800_INT_HANDLER(cb) \ - devcb = &downcast(*device).set_int_handler((DEVCB_##cb)); + downcast(*device).set_int_handler((DEVCB_##cb)); diff --git a/src/devices/sound/lc7535.h b/src/devices/sound/lc7535.h index bc3da9dc9c8..7b58f48ba37 100644 --- a/src/devices/sound/lc7535.h +++ b/src/devices/sound/lc7535.h @@ -32,7 +32,7 @@ //************************************************************************** #define MCFG_LC7535_SELECT_CB(_read) \ - devcb = &downcast(*device).set_select_callback(DEVCB_##_read); + downcast(*device).set_select_callback(DEVCB_##_read); #define MCFG_LC7535_VOLUME_CB(_class, _method) \ downcast(*device).set_volume_callback(lc7535_device::volume_delegate(&_class::_method, #_class "::" #_method, this)); diff --git a/src/devices/sound/mea8000.h b/src/devices/sound/mea8000.h index ffd7a2e76e2..21764e75b88 100644 --- a/src/devices/sound/mea8000.h +++ b/src/devices/sound/mea8000.h @@ -14,7 +14,7 @@ #pragma once #define MCFG_MEA8000_REQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_reqwr_callback(*device, DEVCB_##_write); + downcast(*device).set_reqwr_callback(*device, DEVCB_##_write); /* define to use double instead of int (slow but useful for debugging) */ #undef MEA8000_FLOAT_MODE diff --git a/src/devices/sound/mm5837.h b/src/devices/sound/mm5837.h index 171cae609c4..388330190da 100644 --- a/src/devices/sound/mm5837.h +++ b/src/devices/sound/mm5837.h @@ -32,7 +32,7 @@ downcast(*device).set_vdd_voltage(_voltage); #define MCFG_MM5837_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_output_callback(DEVCB_##_devcb); + downcast(*device).set_output_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/sound/mos6560.h b/src/devices/sound/mos6560.h index 25d8e3a9161..d4ee91e8ba2 100644 --- a/src/devices/sound/mos6560.h +++ b/src/devices/sound/mos6560.h @@ -79,10 +79,10 @@ #define MCFG_MOS6560_POTX_CALLBACK(_read) \ - devcb = &downcast(*device).set_potx_rd_callback(DEVCB_##_read); + downcast(*device).set_potx_rd_callback(DEVCB_##_read); #define MCFG_MOS6560_POTY_CALLBACK(_read) \ - devcb = &downcast(*device).set_poty_rd_callback(DEVCB_##_read); + downcast(*device).set_poty_rd_callback(DEVCB_##_read); diff --git a/src/devices/sound/mos6581.h b/src/devices/sound/mos6581.h index 62c01036f44..6707be8ecac 100644 --- a/src/devices/sound/mos6581.h +++ b/src/devices/sound/mos6581.h @@ -36,10 +36,10 @@ //************************************************************************** #define MCFG_MOS6581_POTX_CALLBACK(_read) \ - devcb = &downcast(*device).set_potx_rd_callback(DEVCB_##_read); + downcast(*device).set_potx_rd_callback(DEVCB_##_read); #define MCFG_MOS6581_POTY_CALLBACK(_read) \ - devcb = &downcast(*device).set_poty_rd_callback(DEVCB_##_read); + downcast(*device).set_poty_rd_callback(DEVCB_##_read); diff --git a/src/devices/sound/msm5205.h b/src/devices/sound/msm5205.h index 7e6ef5f91f9..b4d69bc2029 100644 --- a/src/devices/sound/msm5205.h +++ b/src/devices/sound/msm5205.h @@ -11,30 +11,30 @@ downcast(*device).set_prescaler_selector((msm5205_device::select)); #define MCFG_MSM5205_VCK_CALLBACK(cb) \ - devcb = &downcast(*device).set_vck_callback((DEVCB_##cb)); + downcast(*device).set_vck_callback((DEVCB_##cb)); #define MCFG_MSM5205_VCLK_CB(cb) \ - devcb = &downcast(*device).set_vck_legacy_callback((DEVCB_##cb)); + downcast(*device).set_vck_legacy_callback((DEVCB_##cb)); #define MCFG_MSM6585_PRESCALER_SELECTOR(select) \ downcast(*device).set_prescaler_selector((msm6585_device::select)); #define MCFG_MSM6585_VCK_CALLBACK(cb) \ - devcb = &downcast(*device).set_vck_callback((DEVCB_##cb)); + downcast(*device).set_vck_callback((DEVCB_##cb)); class msm5205_device : public device_t, public device_sound_interface { public: - /* MSM5205 default master clock is 384KHz */ - static constexpr int S96_3B = 0; /* prescaler 1/96(4KHz) , data 3bit */ - static constexpr int S48_3B = 1; /* prescaler 1/48(8KHz) , data 3bit */ - static constexpr int S64_3B = 2; /* prescaler 1/64(6KHz) , data 3bit */ - static constexpr int SEX_3B = 3; /* VCK slave mode , data 3bit */ - static constexpr int S96_4B = 4; /* prescaler 1/96(4KHz) , data 4bit */ - static constexpr int S48_4B = 5; /* prescaler 1/48(8KHz) , data 4bit */ - static constexpr int S64_4B = 6; /* prescaler 1/64(6KHz) , data 4bit */ - static constexpr int SEX_4B = 7; /* VCK slave mode , data 4bit */ + // MSM5205 default master clock is 384KHz + static constexpr int S96_3B = 0; // prescaler 1/96(4KHz) , data 3bit + static constexpr int S48_3B = 1; // prescaler 1/48(8KHz) , data 3bit + static constexpr int S64_3B = 2; // prescaler 1/64(6KHz) , data 3bit + static constexpr int SEX_3B = 3; // VCK slave mode , data 3bit + static constexpr int S96_4B = 4; // prescaler 1/96(4KHz) , data 4bit + static constexpr int S48_4B = 5; // prescaler 1/48(8KHz) , data 4bit + static constexpr int S64_4B = 6; // prescaler 1/64(6KHz) , data 4bit + static constexpr int SEX_4B = 7; // VCK slave mode , data 4bit msm5205_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); @@ -46,6 +46,7 @@ public: } template devcb_base &set_vck_callback(Object &&cb) { return m_vck_cb.set_callback(std::forward(cb)); } template devcb_base &set_vck_legacy_callback(Object &&cb) { return m_vck_legacy_cb.set_callback(std::forward(cb)); } + auto vck_callback() { return m_vck_cb.bind(); } // reset signal should keep for 2cycle of VCLK DECLARE_WRITE_LINE_MEMBER(reset_w); diff --git a/src/devices/sound/msm5232.h b/src/devices/sound/msm5232.h index 0010999dedf..11e68c6ec02 100644 --- a/src/devices/sound/msm5232.h +++ b/src/devices/sound/msm5232.h @@ -10,7 +10,7 @@ downcast(*device).set_capacitors(_a, _b, _c, _d, _e, _f, _g, _h); #define MCFG_MSM5232_GATE_HANDLER_CB(_devcb) \ - devcb = &downcast(*device).set_gate_handler_callback(DEVCB_##_devcb); + downcast(*device).set_gate_handler_callback(DEVCB_##_devcb); class msm5232_device : public device_t, diff --git a/src/devices/sound/nes_apu.h b/src/devices/sound/nes_apu.h index 0a244540abe..c6931463ca2 100644 --- a/src/devices/sound/nes_apu.h +++ b/src/devices/sound/nes_apu.h @@ -40,10 +40,10 @@ */ #define MCFG_NES_APU_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_NES_APU_MEM_READ_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_mem_read_callback(DEVCB_##_devcb); + downcast(*device).set_mem_read_callback(DEVCB_##_devcb); class nesapu_device : public device_t, public device_sound_interface diff --git a/src/devices/sound/pokey.h b/src/devices/sound/pokey.h index 1dafefeb184..10faf22c8da 100644 --- a/src/devices/sound/pokey.h +++ b/src/devices/sound/pokey.h @@ -59,37 +59,37 @@ //************************************************************************** #define MCFG_POKEY_POT0_R_CB(_devcb) \ - devcb = &downcast(*device).set_pot_r_callback<0>(DEVCB_##_devcb); + downcast(*device).set_pot_r_callback<0>(DEVCB_##_devcb); #define MCFG_POKEY_POT1_R_CB(_devcb) \ - devcb = &downcast(*device).set_pot_r_callback<1>(DEVCB_##_devcb); + downcast(*device).set_pot_r_callback<1>(DEVCB_##_devcb); #define MCFG_POKEY_POT2_R_CB(_devcb) \ - devcb = &downcast(*device).set_pot_r_callback<2>(DEVCB_##_devcb); + downcast(*device).set_pot_r_callback<2>(DEVCB_##_devcb); #define MCFG_POKEY_POT3_R_CB(_devcb) \ - devcb = &downcast(*device).set_pot_r_callback<3>(DEVCB_##_devcb); + downcast(*device).set_pot_r_callback<3>(DEVCB_##_devcb); #define MCFG_POKEY_POT4_R_CB(_devcb) \ - devcb = &downcast(*device).set_pot_r_callback<4>(DEVCB_##_devcb); + downcast(*device).set_pot_r_callback<4>(DEVCB_##_devcb); #define MCFG_POKEY_POT5_R_CB(_devcb) \ - devcb = &downcast(*device).set_pot_r_callback<5>(DEVCB_##_devcb); + downcast(*device).set_pot_r_callback<5>(DEVCB_##_devcb); #define MCFG_POKEY_POT6_R_CB(_devcb) \ - devcb = &downcast(*device).set_pot_r_callback<6>(DEVCB_##_devcb); + downcast(*device).set_pot_r_callback<6>(DEVCB_##_devcb); #define MCFG_POKEY_POT7_R_CB(_devcb) \ - devcb = &downcast(*device).set_pot_r_callback<7>(DEVCB_##_devcb); + downcast(*device).set_pot_r_callback<7>(DEVCB_##_devcb); #define MCFG_POKEY_ALLPOT_R_CB(_devcb) \ - devcb = &downcast(*device).set_allpot_r_callback(DEVCB_##_devcb); + downcast(*device).set_allpot_r_callback(DEVCB_##_devcb); #define MCFG_POKEY_SERIN_R_CB(_devcb) \ - devcb = &downcast(*device).set_serin_r_callback(DEVCB_##_devcb); + downcast(*device).set_serin_r_callback(DEVCB_##_devcb); #define MCFG_POKEY_SEROUT_W_CB(_devcb) \ - devcb = &downcast(*device).set_serout_w_callback(DEVCB_##_devcb); + downcast(*device).set_serout_w_callback(DEVCB_##_devcb); /* k543210 = k5 ... k0 returns bit0: kr1, bit1: kr2 */ /* all are, in contrast to actual hardware, ACTIVE_HIGH */ diff --git a/src/devices/sound/qs1000.h b/src/devices/sound/qs1000.h index af648e11d88..b5f1c4b6b12 100644 --- a/src/devices/sound/qs1000.h +++ b/src/devices/sound/qs1000.h @@ -24,25 +24,25 @@ downcast(*device).set_external_rom(_bool); #define MCFG_QS1000_IN_P1_CB(_devcb) \ - devcb = &downcast(*device).set_in_p1_callback(DEVCB_##_devcb); + downcast(*device).set_in_p1_callback(DEVCB_##_devcb); #define MCFG_QS1000_IN_P2_CB(_devcb) \ - devcb = &downcast(*device).set_in_p2_callback(DEVCB_##_devcb); + downcast(*device).set_in_p2_callback(DEVCB_##_devcb); #define MCFG_QS1000_IN_P3_CB(_devcb) \ - devcb = &downcast(*device).set_in_p3_callback(DEVCB_##_devcb); + downcast(*device).set_in_p3_callback(DEVCB_##_devcb); #define MCFG_QS1000_OUT_P1_CB(_devcb) \ - devcb = &downcast(*device).set_out_p1_callback(DEVCB_##_devcb); + downcast(*device).set_out_p1_callback(DEVCB_##_devcb); #define MCFG_QS1000_OUT_P2_CB(_devcb) \ - devcb = &downcast(*device).set_out_p2_callback(DEVCB_##_devcb); + downcast(*device).set_out_p2_callback(DEVCB_##_devcb); #define MCFG_QS1000_OUT_P3_CB(_devcb) \ - devcb = &downcast(*device).set_out_p3_callback(DEVCB_##_devcb); + downcast(*device).set_out_p3_callback(DEVCB_##_devcb); /*#define MCFG_QS1000_SERIAL_W_CB(_devcb) \ - devcb = &downcast(*device).set_serial_w_callback(DEVCB_##_devcb);*/ + downcast(*device).set_serial_w_callback(DEVCB_##_devcb);*/ //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/sound/s14001a.h b/src/devices/sound/s14001a.h index 78547f0b618..a7294559fb4 100644 --- a/src/devices/sound/s14001a.h +++ b/src/devices/sound/s14001a.h @@ -9,10 +9,10 @@ #define MAME_SOUND_S14001A_H #define MCFG_S14001A_BSY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_bsy_handler(DEVCB_##_devcb); + downcast(*device).set_bsy_handler(DEVCB_##_devcb); #define MCFG_S14001A_EXT_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ext_read_handler(DEVCB_##_devcb); + downcast(*device).set_ext_read_handler(DEVCB_##_devcb); class s14001a_device : public device_t, public device_sound_interface diff --git a/src/devices/sound/scsp.h b/src/devices/sound/scsp.h index 54bf92ef59d..983e37c3a9f 100644 --- a/src/devices/sound/scsp.h +++ b/src/devices/sound/scsp.h @@ -19,13 +19,13 @@ downcast(*device).set_roffset(_offs); #define MCFG_SCSP_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); #define MCFG_SCSP_MAIN_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_main_irq_callback(DEVCB_##_devcb); + downcast(*device).set_main_irq_callback(DEVCB_##_devcb); #define MCFG_SCSP_EXTS_CB(_devcb) \ - devcb = &downcast(*device).set_exts_callback(DEVCB_##_devcb); + downcast(*device).set_exts_callback(DEVCB_##_devcb); class scsp_device : public device_t, diff --git a/src/devices/sound/sn76496.h b/src/devices/sound/sn76496.h index b173c059de8..0a129260e4d 100644 --- a/src/devices/sound/sn76496.h +++ b/src/devices/sound/sn76496.h @@ -19,7 +19,7 @@ DECLARE_DEVICE_TYPE(SEGAPSG, segapsg_device) #define MCFG_SN76496_READY_HANDLER(cb) \ - devcb = &downcast(*device).set_ready_handler((DEVCB_##cb)); + downcast(*device).set_ready_handler((DEVCB_##cb)); class sn76496_base_device : public device_t, public device_sound_interface { diff --git a/src/devices/sound/sp0250.h b/src/devices/sound/sp0250.h index 43bbe3b6421..95352c32ecc 100644 --- a/src/devices/sound/sp0250.h +++ b/src/devices/sound/sp0250.h @@ -50,6 +50,6 @@ private: DECLARE_DEVICE_TYPE(SP0250, sp0250_device) #define MCFG_SP0250_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_callback(DEVCB_##_write); + downcast(*device).set_drq_callback(DEVCB_##_write); #endif // MAME_SOUND_SP0250_H diff --git a/src/devices/sound/sp0256.h b/src/devices/sound/sp0256.h index aa91d415d54..d4cea893859 100644 --- a/src/devices/sound/sp0256.h +++ b/src/devices/sound/sp0256.h @@ -36,10 +36,10 @@ #pragma once #define MCFG_SP0256_DATA_REQUEST_CB(_devcb) \ - devcb = &downcast(*device).set_data_request_callback(DEVCB_##_devcb); + downcast(*device).set_data_request_callback(DEVCB_##_devcb); #define MCFG_SP0256_STANDBY_CB(_devcb) \ - devcb = &downcast(*device).set_standby_callback(DEVCB_##_devcb); + downcast(*device).set_standby_callback(DEVCB_##_devcb); class sp0256_device : public device_t, diff --git a/src/devices/sound/spu.h b/src/devices/sound/spu.h index 874867ff622..07bb06f6b85 100644 --- a/src/devices/sound/spu.h +++ b/src/devices/sound/spu.h @@ -10,7 +10,7 @@ //************************************************************************** #define MCFG_SPU_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_SPU_ADD(_tag, _clock) \ MCFG_DEVICE_MODIFY( "maincpu" ) \ diff --git a/src/devices/sound/st0016.h b/src/devices/sound/st0016.h index 264a0536322..54da6678020 100644 --- a/src/devices/sound/st0016.h +++ b/src/devices/sound/st0016.h @@ -11,7 +11,7 @@ //************************************************************************** #define MCFG_ST0016_SOUNDRAM_READ_CB(_devcb) \ - devcb = &downcast(*device).set_soundram_callback(DEVCB_##_devcb); + downcast(*device).set_soundram_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/sound/t6721a.h b/src/devices/sound/t6721a.h index 81157e4c47f..49e77498118 100644 --- a/src/devices/sound/t6721a.h +++ b/src/devices/sound/t6721a.h @@ -43,16 +43,16 @@ //************************************************************************** #define MCFG_T6721A_EOS_HANDLER(_eos) \ - devcb = &downcast(device)->set_eos_callback(DEVCB_##_eos); + downcast(device)->set_eos_callback(DEVCB_##_eos); #define MCFG_T6721A_PHI2_HANDLER(_phi2) \ - devcb = &downcast(device)->set_phi2_callback(DEVCB_##_phi2); + downcast(device)->set_phi2_callback(DEVCB_##_phi2); #define MCFG_T6721A_DTRD_HANDLER(_dtrd) \ - devcb = &downcast(device)->set_dtrd_callback(DEVCB_##_dtrd); + downcast(device)->set_dtrd_callback(DEVCB_##_dtrd); #define MCFG_T6721A_APD_HANDLER(_apd) \ - devcb = &downcast(device)->set_apd_callback(DEVCB_##_apd); + downcast(device)->set_apd_callback(DEVCB_##_apd); diff --git a/src/devices/sound/tms5110.h b/src/devices/sound/tms5110.h index 066590302da..b4a5a48d68d 100644 --- a/src/devices/sound/tms5110.h +++ b/src/devices/sound/tms5110.h @@ -14,19 +14,19 @@ /* usually 800000 for 10000 Hz sample rate. */ #define MCFG_TMS5110_M0_CB(_devcb) \ - devcb = &downcast(*device).set_m0_callback(DEVCB_##_devcb); + downcast(*device).set_m0_callback(DEVCB_##_devcb); #define MCFG_TMS5110_M1_CB(_devcb) \ - devcb = &downcast(*device).set_m1_callback(DEVCB_##_devcb); + downcast(*device).set_m1_callback(DEVCB_##_devcb); #define MCFG_TMS5110_ADDR_CB(_devcb) \ - devcb = &downcast(*device).set_addr_callback(DEVCB_##_devcb); + downcast(*device).set_addr_callback(DEVCB_##_devcb); #define MCFG_TMS5110_DATA_CB(_devcb) \ - devcb = &downcast(*device).set_data_callback(DEVCB_##_devcb); + downcast(*device).set_data_callback(DEVCB_##_devcb); #define MCFG_TMS5110_ROMCLK_CB(_devcb) \ - devcb = &downcast(*device).set_romclk_callback(DEVCB_##_devcb); + downcast(*device).set_romclk_callback(DEVCB_##_devcb); class tms5110_device : public device_t, public device_sound_interface @@ -365,9 +365,9 @@ DECLARE_DEVICE_TYPE(TMSPROM, tmsprom_device) downcast(*device).set_stop_bit(_bit); #define MCFG_TMSPROM_PDC_CB(_devcb) \ - devcb = &downcast(*device).set_pdc_callback(DEVCB_##_devcb); + downcast(*device).set_pdc_callback(DEVCB_##_devcb); #define MCFG_TMSPROM_CTL_CB(_devcb) \ - devcb = &downcast(*device).set_ctl_callback(DEVCB_##_devcb); + downcast(*device).set_ctl_callback(DEVCB_##_devcb); #endif // MAME_SOUND_TMS5110_H diff --git a/src/devices/sound/tms5220.h b/src/devices/sound/tms5220.h index f06777c3dae..cdbf48f2cad 100644 --- a/src/devices/sound/tms5220.h +++ b/src/devices/sound/tms5220.h @@ -16,11 +16,11 @@ /* IRQ callback function, active low, i.e. state=0 */ #define MCFG_TMS52XX_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); /* Ready callback function, active low, i.e. state=0 */ #define MCFG_TMS52XX_READYQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_readyq_handler(DEVCB_##_devcb); + downcast(*device).set_readyq_handler(DEVCB_##_devcb); /* old VSM handler, remove me! */ #define MCFG_TMS52XX_SPEECHROM(_tag) \ @@ -28,19 +28,19 @@ /* new VSM handler */ #define MCFG_TMS52XX_M0_CB(_devcb) \ - devcb = &downcast(*device).set_m0_callback(DEVCB_##_devcb); + downcast(*device).set_m0_callback(DEVCB_##_devcb); #define MCFG_TMS52XX_M1_CB(_devcb) \ - devcb = &downcast(*device).set_m1_callback(DEVCB_##_devcb); + downcast(*device).set_m1_callback(DEVCB_##_devcb); #define MCFG_TMS52XX_ADDR_CB(_devcb) \ - devcb = &downcast(*device).set_addr_callback(DEVCB_##_devcb); + downcast(*device).set_addr_callback(DEVCB_##_devcb); #define MCFG_TMS52XX_DATA_CB(_devcb) \ - devcb = &downcast(*device).set_data_callback(DEVCB_##_devcb); + downcast(*device).set_data_callback(DEVCB_##_devcb); #define MCFG_TMS52XX_ROMCLK_CB(_devcb) \ - devcb = &downcast(device).set_romclk_callback(DEVCB_##_devcb); + downcast(device).set_romclk_callback(DEVCB_##_devcb); class tms5220_device : public device_t, public device_sound_interface { diff --git a/src/devices/sound/upd1771.h b/src/devices/sound/upd1771.h index 704ea7aecb0..aa570528ed5 100644 --- a/src/devices/sound/upd1771.h +++ b/src/devices/sound/upd1771.h @@ -11,7 +11,7 @@ #define MCFG_UPD1771_ACK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ack_handler(DEVCB_##_devcb); + downcast(*device).set_ack_handler(DEVCB_##_devcb); /*************************************************************************** diff --git a/src/devices/sound/upd7759.h b/src/devices/sound/upd7759.h index 6c41e4b0f43..ab128998f8e 100644 --- a/src/devices/sound/upd7759.h +++ b/src/devices/sound/upd7759.h @@ -142,6 +142,6 @@ DECLARE_DEVICE_TYPE(UPD7759, upd7759_device) DECLARE_DEVICE_TYPE(UPD7756, upd7756_device) #define MCFG_UPD7759_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_callback(DEVCB_##_write); + downcast(*device).set_drq_callback(DEVCB_##_write); #endif // MAME_SOUND_UPD7759_H diff --git a/src/devices/sound/upd934g.h b/src/devices/sound/upd934g.h index 02224f2739d..1d94c317957 100644 --- a/src/devices/sound/upd934g.h +++ b/src/devices/sound/upd934g.h @@ -19,7 +19,7 @@ //************************************************************************** #define MCFG_UPD934G_DATA_CB(_devcb) \ - devcb = &downcast(*device).set_data_callback(DEVCB_##_devcb); + downcast(*device).set_data_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/sound/votrax.h b/src/devices/sound/votrax.h index 2779b42d5fe..bc6b32f5fb5 100644 --- a/src/devices/sound/votrax.h +++ b/src/devices/sound/votrax.h @@ -14,7 +14,7 @@ #define MCFG_VOTRAX_SC01_REQUEST_CB(_devcb) \ - devcb = &downcast(device)->set_ar_callback(DEVCB_##_devcb); + downcast(device)->set_ar_callback(DEVCB_##_devcb); class votrax_sc01_device : public device_t, public device_sound_interface diff --git a/src/devices/sound/ym2151.h b/src/devices/sound/ym2151.h index 0aba974025f..a25a424017b 100644 --- a/src/devices/sound/ym2151.h +++ b/src/devices/sound/ym2151.h @@ -41,9 +41,9 @@ //************************************************************************** #define MCFG_YM2151_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_YM2151_PORT_WRITE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_port_write_handler(DEVCB_##_devcb); + downcast(*device).set_port_write_handler(DEVCB_##_devcb); //************************************************************************** @@ -63,6 +63,8 @@ public: // configuration helpers template devcb_base &set_irq_handler(Object &&cb) { return m_irqhandler.set_callback(std::forward(cb)); } template devcb_base &set_port_write_handler(Object &&cb) { return m_portwritehandler.set_callback(std::forward(cb)); } + auto irq_handler() { return m_irqhandler.bind(); } + auto port_write_handler() { return m_portwritehandler.bind(); } // read/write DECLARE_READ8_MEMBER(read); diff --git a/src/devices/sound/ymf271.h b/src/devices/sound/ymf271.h index c032c764d53..075650b8586 100644 --- a/src/devices/sound/ymf271.h +++ b/src/devices/sound/ymf271.h @@ -7,7 +7,7 @@ #define MCFG_YMF271_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class ymf271_device : public device_t, public device_sound_interface, public device_rom_interface { diff --git a/src/devices/sound/ymf278b.h b/src/devices/sound/ymf278b.h index d19815fddbd..39456acfbe1 100644 --- a/src/devices/sound/ymf278b.h +++ b/src/devices/sound/ymf278b.h @@ -9,7 +9,7 @@ #define YMF278B_STD_CLOCK (33868800) /* standard clock for OPL4 */ #define MCFG_YMF278B_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class ymf278b_device : public device_t, public device_sound_interface, public device_rom_interface { diff --git a/src/devices/sound/ymz280b.h b/src/devices/sound/ymz280b.h index 40b65e94c3c..df52c60206b 100644 --- a/src/devices/sound/ymz280b.h +++ b/src/devices/sound/ymz280b.h @@ -16,7 +16,7 @@ #define YMZ280B_MAKE_WAVS 0 #define MCFG_YMZ280B_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class ymz280b_device : public device_t, public device_sound_interface, public device_rom_interface { @@ -25,6 +25,7 @@ public: // configuration helpers template devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward(cb)); } + auto irq_handler() { return m_irq_handler.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/sound/zsg2.h b/src/devices/sound/zsg2.h index 572e551fa4b..0cd4479dca1 100644 --- a/src/devices/sound/zsg2.h +++ b/src/devices/sound/zsg2.h @@ -20,7 +20,7 @@ MCFG_DEVICE_REPLACE(_tag, ZSG2, _clock) #define MCFG_ZSG2_EXT_READ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ext_read_handler(DEVCB_##_devcb); + downcast(*device).set_ext_read_handler(DEVCB_##_devcb); // ======================> zsg2_device diff --git a/src/devices/video/315_5124.h b/src/devices/video/315_5124.h index c358476df17..aa048723444 100644 --- a/src/devices/video/315_5124.h +++ b/src/devices/video/315_5124.h @@ -220,13 +220,13 @@ private: downcast(*device).set_signal_type(_bool); #define MCFG_SEGA315_5124_INT_CB(_devcb) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_devcb); + downcast(*device).set_int_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5124_CSYNC_CB(_devcb) \ - devcb = &downcast(*device).set_csync_callback(DEVCB_##_devcb); + downcast(*device).set_csync_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5124_PAUSE_CB(_devcb) \ - devcb = &downcast(*device).set_pause_callback(DEVCB_##_devcb); + downcast(*device).set_pause_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5246_SET_SCREEN MCFG_VIDEO_SET_SCREEN @@ -235,13 +235,13 @@ private: downcast(*device).set_signal_type(_bool); #define MCFG_SEGA315_5246_INT_CB(_devcb) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_devcb); + downcast(*device).set_int_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5246_CSYNC_CB(_devcb) \ - devcb = &downcast(*device).set_csync_callback(DEVCB_##_devcb); + downcast(*device).set_csync_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5246_PAUSE_CB(_devcb) \ - devcb = &downcast(*device).set_pause_callback(DEVCB_##_devcb); + downcast(*device).set_pause_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5378_SET_SCREEN MCFG_VIDEO_SET_SCREEN @@ -250,13 +250,13 @@ private: downcast(*device).set_signal_type(_bool); #define MCFG_SEGA315_5378_INT_CB(_devcb) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_devcb); + downcast(*device).set_int_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5378_CSYNC_CB(_devcb) \ - devcb = &downcast(*device).set_csync_callback(DEVCB_##_devcb); + downcast(*device).set_csync_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5378_PAUSE_CB(_devcb) \ - devcb = &downcast(*device).set_pause_callback(DEVCB_##_devcb); + downcast(*device).set_pause_callback(DEVCB_##_devcb); #endif // MAME_VIDEO_315_5124_H diff --git a/src/devices/video/315_5313.h b/src/devices/video/315_5313.h index 3661dfb1bce..750c2d8d960 100644 --- a/src/devices/video/315_5313.h +++ b/src/devices/video/315_5313.h @@ -16,19 +16,19 @@ downcast(*device).set_signal_type(_bool); #define MCFG_SEGA315_5313_INT_CB(_devcb) \ - devcb = &downcast(*device).set_int_callback(DEVCB_##_devcb); + downcast(*device).set_int_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5313_PAUSE_CB(_devcb) \ - devcb = &downcast(*device).set_pause_callback(DEVCB_##_devcb); + downcast(*device).set_pause_callback(DEVCB_##_devcb); #define MCFG_SEGA315_5313_SND_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_sndirqline_callback(DEVCB_##_write); + downcast(*device).set_sndirqline_callback(DEVCB_##_write); #define MCFG_SEGA315_5313_LV6_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_lv6irqline_callback(DEVCB_##_write); + downcast(*device).set_lv6irqline_callback(DEVCB_##_write); #define MCFG_SEGA315_5313_LV4_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_lv4irqline_callback(DEVCB_##_write); + downcast(*device).set_lv4irqline_callback(DEVCB_##_write); #define MCFG_SEGA315_5313_ALT_TIMING(_data) \ downcast(*device).set_alt_timing(_data); diff --git a/src/devices/video/cdp1861.h b/src/devices/video/cdp1861.h index 765be92de8b..fc75e765279 100644 --- a/src/devices/video/cdp1861.h +++ b/src/devices/video/cdp1861.h @@ -34,13 +34,13 @@ //************************************************************************** #define MCFG_CDP1861_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_CDP1861_DMA_OUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_dma_out_wr_callback(DEVCB_##_write); + downcast(*device).set_dma_out_wr_callback(DEVCB_##_write); #define MCFG_CDP1861_EFX_CALLBACK(_write) \ - devcb = &downcast(*device).set_efx_wr_callback(DEVCB_##_write); + downcast(*device).set_efx_wr_callback(DEVCB_##_write); #define MCFG_CDP1861_SCREEN_ADD(_cdptag, _tag, _clock) \ diff --git a/src/devices/video/cdp1862.h b/src/devices/video/cdp1862.h index 66dce2a4f12..71c977ff72f 100644 --- a/src/devices/video/cdp1862.h +++ b/src/devices/video/cdp1862.h @@ -42,13 +42,13 @@ //************************************************************************** #define MCFG_CDP1861_RD_CALLBACK(_read) \ - devcb = &downcast(*device).set_rd_rd_callback(DEVCB_##_read); + downcast(*device).set_rd_rd_callback(DEVCB_##_read); #define MCFG_CDP1861_BD_CALLBACK(_read) \ - devcb = &downcast(*device).set_bd_rd_callback(DEVCB_##_read); + downcast(*device).set_bd_rd_callback(DEVCB_##_read); #define MCFG_CDP1861_GD_CALLBACK(_read) \ - devcb = &downcast(*device).set_gd_rd_callback(DEVCB_##_read); + downcast(*device).set_gd_rd_callback(DEVCB_##_read); #define MCFG_CDP1862_LUMINANCE(_r, _b, _g, _bkg) \ downcast(*device).set_luminance(_r, _b, _g, _bkg); diff --git a/src/devices/video/cesblit.h b/src/devices/video/cesblit.h index e5bc962c314..f22f16df260 100644 --- a/src/devices/video/cesblit.h +++ b/src/devices/video/cesblit.h @@ -25,7 +25,7 @@ downcast(*device).set_compute_addr(_compute_addr); #define MCFG_CESBLIT_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); /*************************************************************************** TYPE DEFINITIONS diff --git a/src/devices/video/crt9007.h b/src/devices/video/crt9007.h index d7487c81ab0..060fbfcec24 100644 --- a/src/devices/video/crt9007.h +++ b/src/devices/video/crt9007.h @@ -45,37 +45,37 @@ downcast(*device).config_set_character_width(_value); #define MCFG_CRT9007_INT_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_wr_callback(DEVCB_##_write); + downcast(*device).set_int_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_DMAR_CALLBACK(_write) \ - devcb = &downcast(*device).set_dmar_wr_callback(DEVCB_##_write); + downcast(*device).set_dmar_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_VS_CALLBACK(_write) \ - devcb = &downcast(*device).set_vs_wr_callback(DEVCB_##_write); + downcast(*device).set_vs_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_HS_CALLBACK(_write) \ - devcb = &downcast(*device).set_hs_wr_callback(DEVCB_##_write); + downcast(*device).set_hs_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_VLT_CALLBACK(_write) \ - devcb = &downcast(*device).set_vlt_wr_callback(DEVCB_##_write); + downcast(*device).set_vlt_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_CURS_CALLBACK(_write) \ - devcb = &downcast(*device).set_curs_wr_callback(DEVCB_##_write); + downcast(*device).set_curs_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_DRB_CALLBACK(_write) \ - devcb = &downcast(*device).set_drb_wr_callback(DEVCB_##_write); + downcast(*device).set_drb_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_WBEN_CALLBACK(_write) \ - devcb = &downcast(*device).set_wben_wr_callback(DEVCB_##_write); + downcast(*device).set_wben_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_CBLANK_CALLBACK(_write) \ - devcb = &downcast(*device).set_cblank_wr_callback(DEVCB_##_write); + downcast(*device).set_cblank_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_SLG_CALLBACK(_write) \ - devcb = &downcast(*device).set_slg_wr_callback(DEVCB_##_write); + downcast(*device).set_slg_wr_callback(DEVCB_##_write); #define MCFG_CRT9007_SLD_CALLBACK(_write) \ - devcb = &downcast(*device).set_sld_wr_callback(DEVCB_##_write); + downcast(*device).set_sld_wr_callback(DEVCB_##_write); diff --git a/src/devices/video/crt9212.h b/src/devices/video/crt9212.h index 639ea1dd213..b3547f698c1 100644 --- a/src/devices/video/crt9212.h +++ b/src/devices/video/crt9212.h @@ -39,13 +39,13 @@ downcast(*device).set_wen2(1); #define MCFG_CRT9212_DOUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_dout_wr_callback(DEVCB_##_write); + downcast(*device).set_dout_wr_callback(DEVCB_##_write); #define MCFG_CRT9212_ROF_CALLBACK(_write) \ - devcb = &downcast(*device).set_rof_wr_callback(DEVCB_##_write); + downcast(*device).set_rof_wr_callback(DEVCB_##_write); #define MCFG_CRT9212_WOF_CALLBACK(_write) \ - devcb = &downcast(*device).set_wof_wr_callback(DEVCB_##_write); + downcast(*device).set_wof_wr_callback(DEVCB_##_write); diff --git a/src/devices/video/crtc_ega.h b/src/devices/video/crtc_ega.h index c3eb7dcc319..e995cdf8a30 100644 --- a/src/devices/video/crtc_ega.h +++ b/src/devices/video/crtc_ega.h @@ -33,16 +33,16 @@ downcast(*device).config_set_hpixels_per_column(_pix); #define MCFG_CRTC_EGA_RES_OUT_DE_CB(_devcb) \ - devcb = &downcast(*device).set_res_out_de_callback(DEVCB_##_devcb); + downcast(*device).set_res_out_de_callback(DEVCB_##_devcb); #define MCFG_CRTC_EGA_RES_OUT_HSYNC_CB(_devcb) \ - devcb = &downcast(*device).set_res_out_hsync_callback(DEVCB_##_devcb); + downcast(*device).set_res_out_hsync_callback(DEVCB_##_devcb); #define MCFG_CRTC_EGA_RES_OUT_VSYNC_CB(_devcb) \ - devcb = &downcast(*device).set_res_out_vsync_callback(DEVCB_##_devcb); + downcast(*device).set_res_out_vsync_callback(DEVCB_##_devcb); #define MCFG_CRTC_EGA_RES_OUT_VBLANK_CB(_devcb) \ - devcb = &downcast(*device).set_res_out_vblank_callback(DEVCB_##_devcb); + downcast(*device).set_res_out_vblank_callback(DEVCB_##_devcb); class crtc_ega_device : public device_t, diff --git a/src/devices/video/dl1416.h b/src/devices/video/dl1416.h index 1d49e00c410..1927905ac4d 100644 --- a/src/devices/video/dl1416.h +++ b/src/devices/video/dl1416.h @@ -31,10 +31,10 @@ DECLARE_DEVICE_TYPE(DL1416T, dl1416_device) ***************************************************************************/ #define MCFG_DL1414_UPDATE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_update_handler(DEVCB_##_devcb); + downcast(*device).set_update_handler(DEVCB_##_devcb); #define MCFG_DL1416_UPDATE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_update_handler(DEVCB_##_devcb); + downcast(*device).set_update_handler(DEVCB_##_devcb); /*************************************************************************** diff --git a/src/devices/video/dm9368.h b/src/devices/video/dm9368.h index 05e7fbb170f..9dc77424a2e 100644 --- a/src/devices/video/dm9368.h +++ b/src/devices/video/dm9368.h @@ -29,10 +29,10 @@ //************************************************************************** #define MCFG_DM9368_UPDATE_CALLBACK(cb) \ - devcb = &downcast(*device).set_update_callback(DEVCB_##cb); + downcast(*device).set_update_callback(DEVCB_##cb); #define MCFG_DM9368_RBO_CALLBACK(cb) \ - devcb = &downcast(*device).set_rbo_callback(DEVCB_##cb); + downcast(*device).set_rbo_callback(DEVCB_##cb); diff --git a/src/devices/video/ef9364.h b/src/devices/video/ef9364.h index ef7fc2cb99a..1082173733c 100644 --- a/src/devices/video/ef9364.h +++ b/src/devices/video/ef9364.h @@ -22,7 +22,7 @@ downcast(*device).set_nb_of_pages(_pages_number); #define MCFG_EF9364_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/video/ef9365.h b/src/devices/video/ef9365.h index 8c14fbd6370..762989e6a03 100644 --- a/src/devices/video/ef9365.h +++ b/src/devices/video/ef9365.h @@ -25,7 +25,7 @@ downcast(*device).set_display_mode((ef9365_device::display_mode)); #define MCFG_EF936X_IRQ_HANDLER(cb) \ - devcb = &downcast(*device).set_irq_handler((DEVCB_##cb)); + downcast(*device).set_irq_handler((DEVCB_##cb)); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/devices/video/gba_lcd.h b/src/devices/video/gba_lcd.h index 9272b8faba6..0fe017a6b93 100644 --- a/src/devices/video/gba_lcd.h +++ b/src/devices/video/gba_lcd.h @@ -34,19 +34,19 @@ DECLARE_DEVICE_TYPE(GBA_LCD, gba_lcd_device) MCFG_DEVICE_ADD(_tag, GBA_LCD, 0) #define MCFG_GBA_LCD_INT_HBLANK(_devcb) \ - devcb = &downcast(*device).set_int_hblank_callback(DEVCB_##_devcb); + downcast(*device).set_int_hblank_callback(DEVCB_##_devcb); #define MCFG_GBA_LCD_INT_VBLANK(_devcb) \ - devcb = &downcast(*device).set_int_vblank_callback(DEVCB_##_devcb); + downcast(*device).set_int_vblank_callback(DEVCB_##_devcb); #define MCFG_GBA_LCD_INT_VCOUNT(_devcb) \ - devcb = &downcast(*device).set_int_vcount_callback(DEVCB_##_devcb); + downcast(*device).set_int_vcount_callback(DEVCB_##_devcb); #define MCFG_GBA_LCD_DMA_HBLANK(_devcb) \ - devcb = &downcast(*device).set_dma_hblank_callback(DEVCB_##_devcb); + downcast(*device).set_dma_hblank_callback(DEVCB_##_devcb); #define MCFG_GBA_LCD_DMA_VBLANK(_devcb) \ - devcb = &downcast(*device).set_dma_vblank_callback(DEVCB_##_devcb); + downcast(*device).set_dma_vblank_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/video/hd44352.h b/src/devices/video/hd44352.h index ce12d9bc1cb..1dc67eca7f5 100644 --- a/src/devices/video/hd44352.h +++ b/src/devices/video/hd44352.h @@ -13,7 +13,7 @@ #define MCFG_HD44352_ON_CB(_devcb) \ - devcb = &downcast(*device).set_on_callback(DEVCB_##_devcb); + downcast(*device).set_on_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/devices/video/hd61830.h b/src/devices/video/hd61830.h index 0c14b9f8482..ab4278f9d89 100644 --- a/src/devices/video/hd61830.h +++ b/src/devices/video/hd61830.h @@ -19,7 +19,7 @@ //************************************************************************** #define MCFG_HD61830_RD_CALLBACK(_read) \ - devcb = &downcast(*device).set_rd_rd_callback(DEVCB_##_read); + downcast(*device).set_rd_rd_callback(DEVCB_##_read); diff --git a/src/devices/video/hlcd0515.h b/src/devices/video/hlcd0515.h index 0f4e1444a93..898cf93ab1e 100644 --- a/src/devices/video/hlcd0515.h +++ b/src/devices/video/hlcd0515.h @@ -43,11 +43,11 @@ // COL/ROW pins (offset for ROW) #define MCFG_HLCD0515_WRITE_COLS_CB(_devcb) \ - devcb = &downcast(*device).set_write_cols_callback(DEVCB_##_devcb); + downcast(*device).set_write_cols_callback(DEVCB_##_devcb); // DATA OUT pin, don't use on HLCD0569 #define MCFG_HLCD0515_WRITE_DATA_CB(_devcb) \ - devcb = &downcast(*device).set_write_data_callback(DEVCB_##_devcb); + downcast(*device).set_write_data_callback(DEVCB_##_devcb); class hlcd0515_device : public device_t diff --git a/src/devices/video/hlcd0538.h b/src/devices/video/hlcd0538.h index e84a5387e22..8751020860f 100644 --- a/src/devices/video/hlcd0538.h +++ b/src/devices/video/hlcd0538.h @@ -42,11 +42,11 @@ // C/R pins (0538: d0-d7 for rows) #define MCFG_HLCD0538_WRITE_COLS_CB(_devcb) \ - devcb = &downcast(*device).set_write_cols_callback(DEVCB_##_devcb); + downcast(*device).set_write_cols_callback(DEVCB_##_devcb); // INTERRUPT pin #define MCFG_HLCD0538_INTERRUPT_CB(_devcb) \ - devcb = &downcast(*device).set_write_interrupt_callback(DEVCB_##_devcb); + downcast(*device).set_write_interrupt_callback(DEVCB_##_devcb); class hlcd0538_device : public device_t diff --git a/src/devices/video/huc6202.h b/src/devices/video/huc6202.h index cc086350647..a3e1a47b519 100644 --- a/src/devices/video/huc6202.h +++ b/src/devices/video/huc6202.h @@ -13,40 +13,40 @@ #define MCFG_HUC6202_NEXT_PIXEL_0_CB(_devcb) \ - devcb = &downcast(*device).set_next_pixel_0_callback(DEVCB_##_devcb); + downcast(*device).set_next_pixel_0_callback(DEVCB_##_devcb); #define MCFG_HUC6202_TIME_TIL_NEXT_EVENT_0_CB(_devcb) \ - devcb = &downcast(*device).set_time_til_next_event_0_callback(DEVCB_##_devcb); + downcast(*device).set_time_til_next_event_0_callback(DEVCB_##_devcb); #define MCFG_HUC6202_VSYNC_CHANGED_0_CB(_devcb) \ - devcb = &downcast(*device).set_vsync_changed_0_callback(DEVCB_##_devcb); + downcast(*device).set_vsync_changed_0_callback(DEVCB_##_devcb); #define MCFG_HUC6202_HSYNC_CHANGED_0_CB(_devcb) \ - devcb = &downcast(*device).set_hsync_changed_0_callback(DEVCB_##_devcb); + downcast(*device).set_hsync_changed_0_callback(DEVCB_##_devcb); #define MCFG_HUC6202_READ_0_CB(_devcb) \ - devcb = &downcast(*device).set_read_0_callback(DEVCB_##_devcb); + downcast(*device).set_read_0_callback(DEVCB_##_devcb); #define MCFG_HUC6202_WRITE_0_CB(_devcb) \ - devcb = &downcast(*device).set_write_0_callback(DEVCB_##_devcb); + downcast(*device).set_write_0_callback(DEVCB_##_devcb); #define MCFG_HUC6202_NEXT_PIXEL_1_CB(_devcb) \ - devcb = &downcast(*device).set_next_pixel_1_callback(DEVCB_##_devcb); + downcast(*device).set_next_pixel_1_callback(DEVCB_##_devcb); #define MCFG_HUC6202_TIME_TIL_NEXT_EVENT_1_CB(_devcb) \ - devcb = &downcast(*device).set_time_til_next_event_1_callback(DEVCB_##_devcb); + downcast(*device).set_time_til_next_event_1_callback(DEVCB_##_devcb); #define MCFG_HUC6202_VSYNC_CHANGED_1_CB(_devcb) \ - devcb = &downcast(*device).set_vsync_changed_1_callback(DEVCB_##_devcb); + downcast(*device).set_vsync_changed_1_callback(DEVCB_##_devcb); #define MCFG_HUC6202_HSYNC_CHANGED_1_CB(_devcb) \ - devcb = &downcast(*device).set_hsync_changed_1_callback(DEVCB_##_devcb); + downcast(*device).set_hsync_changed_1_callback(DEVCB_##_devcb); #define MCFG_HUC6202_READ_1_CB(_devcb) \ - devcb = &downcast(*device).set_read_1_callback(DEVCB_##_devcb); + downcast(*device).set_read_1_callback(DEVCB_##_devcb); #define MCFG_HUC6202_WRITE_1_CB(_devcb) \ - devcb = &downcast(*device).set_write_1_callback(DEVCB_##_devcb); + downcast(*device).set_write_1_callback(DEVCB_##_devcb); class huc6202_device : public device_t diff --git a/src/devices/video/huc6260.h b/src/devices/video/huc6260.h index c3c6159fec7..1e97e258146 100644 --- a/src/devices/video/huc6260.h +++ b/src/devices/video/huc6260.h @@ -13,16 +13,16 @@ #define MCFG_HUC6260_NEXT_PIXEL_DATA_CB(_devcb) \ - devcb = &downcast(*device).set_next_pixel_data_callback(DEVCB_##_devcb); + downcast(*device).set_next_pixel_data_callback(DEVCB_##_devcb); #define MCFG_HUC6260_TIME_TIL_NEXT_EVENT_CB(_devcb) \ - devcb = &downcast(*device).set_time_til_next_event_callback(DEVCB_##_devcb); + downcast(*device).set_time_til_next_event_callback(DEVCB_##_devcb); #define MCFG_HUC6260_VSYNC_CHANGED_CB(_devcb) \ - devcb = &downcast(*device).set_vsync_changed_callback(DEVCB_##_devcb); + downcast(*device).set_vsync_changed_callback(DEVCB_##_devcb); #define MCFG_HUC6260_HSYNC_CHANGED_CB(_devcb) \ - devcb = &downcast(*device).set_hsync_changed_callback(DEVCB_##_devcb); + downcast(*device).set_hsync_changed_callback(DEVCB_##_devcb); class huc6260_device : public device_t, diff --git a/src/devices/video/huc6270.h b/src/devices/video/huc6270.h index 5d933129bba..77c15515175 100644 --- a/src/devices/video/huc6270.h +++ b/src/devices/video/huc6270.h @@ -16,7 +16,7 @@ downcast(*device).set_vram_size(_size); #define MCFG_HUC6270_IRQ_CHANGED_CB(_devcb) \ - devcb = &downcast(*device).set_irq_changed_callback(DEVCB_##_devcb); + downcast(*device).set_irq_changed_callback(DEVCB_##_devcb); class huc6270_device : public device_t { diff --git a/src/devices/video/huc6272.h b/src/devices/video/huc6272.h index 0ceaeb18b9e..474c424373b 100644 --- a/src/devices/video/huc6272.h +++ b/src/devices/video/huc6272.h @@ -21,7 +21,7 @@ //************************************************************************** #define MCFG_HUC6272_IRQ_CHANGED_CB(cb) \ - devcb = &downcast(*device).set_irq_changed_callback((DEVCB_##cb)); + downcast(*device).set_irq_changed_callback((DEVCB_##cb)); #define MCFG_HUC6272_RAINBOW(tag) \ downcast(*device).set_rainbow_tag((tag)); diff --git a/src/devices/video/i8244.h b/src/devices/video/i8244.h index f1583129cc2..0e8fd60159e 100644 --- a/src/devices/video/i8244.h +++ b/src/devices/video/i8244.h @@ -26,9 +26,9 @@ MCFG_I8244_IRQ_CB(_irq_cb) \ MCFG_I8244_POSTPROCESS_CB(_postprocess_cb) #define MCFG_I8244_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_cb(DEVCB_##_devcb); + downcast(*device).set_irq_cb(DEVCB_##_devcb); #define MCFG_I8244_POSTPROCESS_CB(_devcb) \ - devcb = &downcast(*device).set_postprocess_cb(DEVCB_##_devcb); + downcast(*device).set_postprocess_cb(DEVCB_##_devcb); #define MCFG_I8245_ADD(_tag, _clock, _screen_tag, _irq_cb, _postprocess_cb) \ MCFG_DEVICE_ADD(_tag, I8245, _clock) \ MCFG_VIDEO_SET_SCREEN(_screen_tag) \ diff --git a/src/devices/video/i82730.h b/src/devices/video/i82730.h index 033bd6dc79f..d52e6b1ddbf 100644 --- a/src/devices/video/i82730.h +++ b/src/devices/video/i82730.h @@ -24,7 +24,7 @@ downcast(*device).set_cpu_tag(_cpu_tag); #define MCFG_I82730_SINT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sint_handler(DEVCB_##_devcb); + downcast(*device).set_sint_handler(DEVCB_##_devcb); #define MCFG_I82730_UPDATE_ROW_CB(_class, _method) \ downcast(*device).set_update_row_callback(i82730_device::update_row_delegate(&_class::_method, #_class "::" #_method, this)); diff --git a/src/devices/video/i8275.h b/src/devices/video/i8275.h index de273f425f4..eb67df2a9c3 100644 --- a/src/devices/video/i8275.h +++ b/src/devices/video/i8275.h @@ -48,19 +48,19 @@ downcast(*device).set_character_width(_value); #define MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(_class, _method) \ - downcast(*device).set_display_callback(i8275_device::draw_character_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_display_callback(&_class::_method, #_class "::" #_method, this); #define MCFG_I8275_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); #define MCFG_I8275_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_I8275_HRTC_CALLBACK(_write) \ - devcb = &downcast(*device).set_hrtc_wr_callback(DEVCB_##_write); + downcast(*device).set_hrtc_wr_callback(DEVCB_##_write); #define MCFG_I8275_VRTC_CALLBACK(_write) \ - devcb = &downcast(*device).set_vrtc_wr_callback(DEVCB_##_write); + downcast(*device).set_vrtc_wr_callback(DEVCB_##_write); @@ -81,12 +81,16 @@ public: i8275_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); void set_character_width(int value) { m_hpixels_per_column = value; } - template void set_display_callback(Object &&cb) { m_display_cb = std::forward(cb); } + template void set_display_callback(T &&... args) { m_display_cb = draw_character_delegate(std::forward(args)...); } template devcb_base &set_drq_wr_callback(Object &&cb) { return m_write_drq.set_callback(std::forward(cb)); } template devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward(cb)); } template devcb_base &set_hrtc_wr_callback(Object &&cb) { return m_write_hrtc.set_callback(std::forward(cb)); } template devcb_base &set_vrtc_wr_callback(Object &&cb) { return m_write_vrtc.set_callback(std::forward(cb)); } + auto drq_wr_callback() { return m_write_drq.bind(); } + auto irq_wr_callback() { return m_write_irq.bind(); } + auto hrtc_wr_callback() { return m_write_hrtc.bind(); } + auto vrtc_wr_callback() { return m_write_vrtc.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/video/imagetek_i4100.h b/src/devices/video/imagetek_i4100.h index 0394fe1fb32..a7feb88d756 100644 --- a/src/devices/video/imagetek_i4100.h +++ b/src/devices/video/imagetek_i4100.h @@ -23,7 +23,7 @@ downcast(*device).set_gfxdecode_tag(gfxtag); #define MCFG_I4100_BLITTER_END_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_blitter_irq_callback(DEVCB_##_devcb); + downcast(*device).set_blitter_irq_callback(DEVCB_##_devcb); #define MCFG_I4100_TILEMAP_XOFFSETS(_a, _b, _c) \ downcast(*device).set_tmap_xoffsets(_a, _b, _c); diff --git a/src/devices/video/mb88303.h b/src/devices/video/mb88303.h index 058f58f212b..9c088d8d56b 100644 --- a/src/devices/video/mb88303.h +++ b/src/devices/video/mb88303.h @@ -32,13 +32,13 @@ //************************************************************************** #define MCFG_MB88303_VOW_CALLBACK(_write) \ - devcb = &downcast(*device).set_vow_callback(DEVCB_##_write); + downcast(*device).set_vow_callback(DEVCB_##_write); #define MCFG_MB88303_VOBN_CALLBACK(_write) \ - devcb = &downcast(*device).set_vob_n_callback(DEVCB_##_write); + downcast(*device).set_vob_n_callback(DEVCB_##_write); #define MCFG_MB88303_DO_CALLBACK(_write) \ - devcb = &downcast(*device).set_do_callback(DEVCB_##_write); + downcast(*device).set_do_callback(DEVCB_##_write); //************************************************************************** diff --git a/src/devices/video/mc6845.h b/src/devices/video/mc6845.h index d590141c102..20bfc24d53e 100644 --- a/src/devices/video/mc6845.h +++ b/src/devices/video/mc6845.h @@ -37,31 +37,31 @@ downcast(*device).set_char_width(_pixels); #define MCFG_MC6845_RECONFIGURE_CB(_class, _method) \ - downcast(*device).set_reconfigure_callback(mc6845_device::reconfigure_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_reconfigure_callback(&_class::_method, #_class "::" #_method, this); #define MCFG_MC6845_BEGIN_UPDATE_CB(_class, _method) \ - downcast(*device).set_begin_update_callback(mc6845_device::begin_update_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_begin_update_callback(&_class::_method, #_class "::" #_method, this); #define MCFG_MC6845_UPDATE_ROW_CB(_class, _method) \ - downcast(*device).set_update_row_callback(mc6845_device::update_row_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_update_row_callback(&_class::_method, #_class "::" #_method, this); #define MCFG_MC6845_END_UPDATE_CB(_class, _method) \ - downcast(*device).set_end_update_callback(mc6845_device::end_update_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_end_update_callback(&_class::_method, #_class "::" #_method, this); #define MCFG_MC6845_ADDR_CHANGED_CB(_class, _method) \ - downcast(*device).set_on_update_addr_change_callback(mc6845_device::on_update_addr_changed_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_on_update_addr_change_callback(&_class::_method, #_class "::" #_method, this); #define MCFG_MC6845_OUT_DE_CB(_write) \ - devcb = &downcast(*device).set_out_de_callback(DEVCB_##_write); + downcast(*device).set_out_de_callback(DEVCB_##_write); #define MCFG_MC6845_OUT_CUR_CB(_write) \ - devcb = &downcast(*device).set_out_cur_callback(DEVCB_##_write); + downcast(*device).set_out_cur_callback(DEVCB_##_write); #define MCFG_MC6845_OUT_HSYNC_CB(_write) \ - devcb = &downcast(*device).set_out_hsync_callback(DEVCB_##_write); + downcast(*device).set_out_hsync_callback(DEVCB_##_write); #define MCFG_MC6845_OUT_VSYNC_CB(_write) \ - devcb = &downcast(*device).set_out_vsync_callback(DEVCB_##_write); + downcast(*device).set_out_vsync_callback(DEVCB_##_write); /* callback definitions */ @@ -101,16 +101,20 @@ public: } void set_char_width(int pixels) { m_hpixels_per_column = pixels; } - template void set_reconfigure_callback(Object &&cb) { m_reconfigure_cb = std::forward(cb); } - template void set_begin_update_callback(Object &&cb) { m_begin_update_cb = std::forward(cb); } - template void set_update_row_callback(Object &&cb) { m_update_row_cb = std::forward(cb); } - template void set_end_update_callback(Object &&cb) { m_end_update_cb = std::forward(cb); } - template void set_on_update_addr_change_callback(Object &&cb) { m_on_update_addr_changed_cb = std::forward(cb); } + template void set_reconfigure_callback(T &&... args) { m_reconfigure_cb = reconfigure_delegate(std::forward(args)...); } + template void set_begin_update_callback(T &&... args) { m_begin_update_cb = begin_update_delegate(std::forward(args)...); } + template void set_update_row_callback(T &&... args) { m_update_row_cb = update_row_delegate(std::forward(args)...); } + template void set_end_update_callback(T &&... args) { m_end_update_cb = end_update_delegate(std::forward(args)...); } + template void set_on_update_addr_change_callback(T &&... args) { m_on_update_addr_changed_cb = on_update_addr_changed_delegate(std::forward(args)...); } template devcb_base &set_out_de_callback(Object &&cb) { return m_out_de_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_cur_callback(Object &&cb) { return m_out_cur_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_hsync_callback(Object &&cb) { return m_out_hsync_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_vsync_callback(Object &&cb) { return m_out_vsync_cb.set_callback(std::forward(cb)); } + auto out_de_callback() { return m_out_de_cb.bind(); } + auto out_cur_callback() { return m_out_cur_cb.bind(); } + auto out_hsync_callback() { return m_out_hsync_cb.bind(); } + auto out_vsync_callback() { return m_out_vsync_cb.bind(); } /* select one of the registers for reading or writing */ DECLARE_WRITE8_MEMBER( address_w ) { write_address(data); } diff --git a/src/devices/video/mc6847.h b/src/devices/video/mc6847.h index 4cbe7be2e9e..763ef0c65f5 100644 --- a/src/devices/video/mc6847.h +++ b/src/devices/video/mc6847.h @@ -36,16 +36,16 @@ MCFG_SCREEN_VBLANK_TIME(0) #define MCFG_MC6847_HSYNC_CALLBACK(_write) \ - devcb = &downcast(*device).set_hsync_wr_callback(DEVCB_##_write); + downcast(*device).set_hsync_wr_callback(DEVCB_##_write); #define MCFG_MC6847_FSYNC_CALLBACK(_write) \ - devcb = &downcast(*device).set_fsync_wr_callback(DEVCB_##_write); + downcast(*device).set_fsync_wr_callback(DEVCB_##_write); #define MCFG_MC6847_CHARROM_CALLBACK(_class, _method) \ downcast(*device).set_get_char_rom(mc6847_friend_device::get_char_rom_delegate(&_class::_method, #_class "::" #_method, this)); #define MCFG_MC6847_INPUT_CALLBACK(_read) \ - devcb = &downcast(*device).set_input_callback(DEVCB_##_read); + downcast(*device).set_input_callback(DEVCB_##_read); #define MCFG_MC6847_FIXED_MODE(_mode) \ downcast(*device).set_get_fixed_mode(_mode); @@ -88,6 +88,8 @@ public: template devcb_base &set_hsync_wr_callback(Object &&cb) { return m_write_hsync.set_callback(std::forward(cb)); } template devcb_base &set_fsync_wr_callback(Object &&cb) { return m_write_fsync.set_callback(std::forward(cb)); } + auto hsync_wr_callback() { return m_write_hsync.bind(); } + auto fsync_wr_callback() { return m_write_fsync.bind(); } template void set_get_char_rom(Object &&cb) { m_charrom_cb = std::forward(cb); } @@ -512,6 +514,7 @@ class mc6847_base_device : public mc6847_friend_device { public: template devcb_base &set_input_callback(Object &&cb) { return m_input_cb.set_callback(std::forward(cb)); } + auto input_callback() { return m_input_cb.bind(); } void set_get_fixed_mode(uint8_t mode) { m_fixed_mode = mode; } void set_black_and_white(bool bw) { m_black_and_white = bw; } diff --git a/src/devices/video/mos6566.h b/src/devices/video/mos6566.h index 56e106022db..1cbeed1f759 100644 --- a/src/devices/video/mos6566.h +++ b/src/devices/video/mos6566.h @@ -93,16 +93,16 @@ downcast(*device).set_cpu_tag(_tag); #define MCFG_MOS6566_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_MOS6566_BA_CALLBACK(_write) \ - devcb = &downcast(*device).set_ba_wr_callback(DEVCB_##_write); + downcast(*device).set_ba_wr_callback(DEVCB_##_write); #define MCFG_MOS6566_AEC_CALLBACK(_write) \ - devcb = &downcast(*device).set_aec_wr_callback(DEVCB_##_write); + downcast(*device).set_aec_wr_callback(DEVCB_##_write); #define MCFG_MOS8564_K_CALLBACK(_write) \ - devcb = &downcast(*device).set_k_wr_callback(DEVCB_##_write); + downcast(*device).set_k_wr_callback(DEVCB_##_write); diff --git a/src/devices/video/ppu2c0x.h b/src/devices/video/ppu2c0x.h index 4160394bd32..2d12e243db6 100644 --- a/src/devices/video/ppu2c0x.h +++ b/src/devices/video/ppu2c0x.h @@ -107,6 +107,7 @@ public: void set_cpu_tag(const char *tag) { m_cpu.set_tag(tag); } template devcb_base &set_int_callback(Object &&cb) { return m_int_callback.set_callback(std::forward(cb)); } + auto int_callback() { return m_int_callback.bind(); } /* routines */ virtual void init_palette(); diff --git a/src/devices/video/ppu2c0x_vt.h b/src/devices/video/ppu2c0x_vt.h index 15fe349ddcd..840b3b3449a 100644 --- a/src/devices/video/ppu2c0x_vt.h +++ b/src/devices/video/ppu2c0x_vt.h @@ -20,10 +20,10 @@ MCFG_PPU2C0X_ADD(_tag, PPU_VT03) #define MCFG_PPU_VT03_READ_BG_CB(_devcb) \ - devcb = &downcast(*device).set_read_bg_callback(DEVCB_##_devcb); + downcast(*device).set_read_bg_callback(DEVCB_##_devcb); #define MCFG_PPU_VT03_READ_SP_CB(_devcb) \ - devcb = &downcast(*device).set_read_sp_callback(DEVCB_##_devcb); + downcast(*device).set_read_sp_callback(DEVCB_##_devcb); #define MCFG_PPU_VT03_MODIFY MCFG_DEVICE_MODIFY diff --git a/src/devices/video/psx.h b/src/devices/video/psx.h index 489f3508cfe..9693f390223 100644 --- a/src/devices/video/psx.h +++ b/src/devices/video/psx.h @@ -18,7 +18,7 @@ #define MCFG_PSX_GPU_VBLANK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_vblank_handler(DEVCB_##_devcb); + downcast(*device).set_vblank_handler(DEVCB_##_devcb); #define MCFG_PSXGPU_ADD( cputag, tag, type, _vramSize, clock ) \ MCFG_DEVICE_MODIFY( cputag ) \ diff --git a/src/devices/video/saa5050.h b/src/devices/video/saa5050.h index a99183e5f04..532e715eeff 100644 --- a/src/devices/video/saa5050.h +++ b/src/devices/video/saa5050.h @@ -36,7 +36,7 @@ //************************************************************************** #define MCFG_SAA5050_D_CALLBACK(_read) \ - devcb = &downcast(*device).set_d_rd_callback(DEVCB_##_read); + downcast(*device).set_d_rd_callback(DEVCB_##_read); #define MCFG_SAA5050_SCREEN_SIZE(_cols, _rows, _size) \ diff --git a/src/devices/video/scn2674.h b/src/devices/video/scn2674.h index 047381e5083..0b76532e4bc 100644 --- a/src/devices/video/scn2674.h +++ b/src/devices/video/scn2674.h @@ -7,7 +7,7 @@ #define MCFG_SCN2672_INTR_CALLBACK(_intr) \ - devcb = &downcast(*device).set_intr_callback(DEVCB_##_intr); + downcast(*device).set_intr_callback(DEVCB_##_intr); #define MCFG_SCN2672_CHARACTER_WIDTH(_value) \ downcast(*device).set_character_width(_value); @@ -19,7 +19,7 @@ #define MCFG_SCN2674_INTR_CALLBACK(_intr) \ - devcb = &downcast(*device).set_intr_callback(DEVCB_##_intr); + downcast(*device).set_intr_callback(DEVCB_##_intr); #define MCFG_SCN2674_CHARACTER_WIDTH(_value) \ downcast(*device).set_character_width(_value); diff --git a/src/devices/video/snes_ppu.h b/src/devices/video/snes_ppu.h index 0fddff1a44f..baab1e264b1 100644 --- a/src/devices/video/snes_ppu.h +++ b/src/devices/video/snes_ppu.h @@ -44,7 +44,7 @@ public: snes_ppu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // inline configuration helpers - template devcb_base &set_open_bus_callback(Object &&cb) { return m_openbus_cb.set_callback(std::forward(cb)); } + auto open_bus_callback() { return m_openbus_cb.bind(); } void refresh_scanline(bitmap_rgb32 &bitmap, uint16_t curline); @@ -314,11 +314,4 @@ private: DECLARE_DEVICE_TYPE(SNES_PPU, snes_ppu_device) -/*************************************************************************** - INTERFACE CONFIGURATION MACROS - ***************************************************************************/ - -#define MCFG_SNES_PPU_OPENBUS_CB(_read) \ - devcb = &downcast(*device).set_open_bus_callback(DEVCB_##_read); - #endif // MAME_VIDEO_SNES_PPU_H diff --git a/src/devices/video/tms34061.h b/src/devices/video/tms34061.h index c00c8547965..f4f674b1083 100644 --- a/src/devices/video/tms34061.h +++ b/src/devices/video/tms34061.h @@ -22,7 +22,7 @@ downcast(*device).set_vram_size(_size); #define MCFG_TMS34061_INTERRUPT_CB(_devcb) \ - devcb = &downcast(*device).set_interrupt_callback(DEVCB_##_devcb); + downcast(*device).set_interrupt_callback(DEVCB_##_devcb); diff --git a/src/devices/video/tms9927.h b/src/devices/video/tms9927.h index 9ee746bc522..e373ae89ffe 100644 --- a/src/devices/video/tms9927.h +++ b/src/devices/video/tms9927.h @@ -11,10 +11,10 @@ #define MCFG_TMS9927_VSYN_CALLBACK(_write) \ - devcb = &downcast(*device).set_vsyn_wr_callback(DEVCB_##_write); + downcast(*device).set_vsyn_wr_callback(DEVCB_##_write); #define MCFG_TMS9927_HSYN_CALLBACK(_write) \ - devcb = &downcast(*device).set_hsyn_wr_callback(DEVCB_##_write); + downcast(*device).set_hsyn_wr_callback(DEVCB_##_write); #define MCFG_TMS9927_CHAR_WIDTH(_pixels) \ downcast(*device).set_char_width(_pixels); @@ -32,6 +32,8 @@ public: template devcb_base &set_vsyn_wr_callback(Object &&cb) { return m_write_vsyn.set_callback(std::forward(cb)); } template devcb_base &set_hsyn_wr_callback(Object &&cb) { return m_write_hsyn.set_callback(std::forward(cb)); } + auto vsyn_wr_callback() { return m_write_vsyn.bind(); } + auto hsyn_wr_callback() { return m_write_hsyn.bind(); } void set_char_width(int pixels) { m_hpixels_per_column = pixels; } void set_region_tag(const char *tag) { m_selfload.set_tag(tag); } diff --git a/src/devices/video/tms9928a.h b/src/devices/video/tms9928a.h index d5dcfca7347..455fce7fc90 100644 --- a/src/devices/video/tms9928a.h +++ b/src/devices/video/tms9928a.h @@ -37,12 +37,12 @@ downcast(*device).set_vram_size(_size); #define MCFG_TMS9928A_OUT_INT_LINE_CB(_devcb) \ - devcb = &downcast(*device).set_out_int_line_callback(DEVCB_##_devcb); + downcast(*device).set_out_int_line_callback(DEVCB_##_devcb); #define MCFG_TMS9928A_SET_SCREEN MCFG_VIDEO_SET_SCREEN #define MCFG_TMS9928A_OUT_GROMCLK_CB(_devcb) \ - devcb = &downcast(*device).set_out_gromclk_callback(DEVCB_##_devcb); + downcast(*device).set_out_gromclk_callback(DEVCB_##_devcb); #define MCFG_TMS9928A_SCREEN_ADD_NTSC(_screen_tag) \ @@ -92,6 +92,8 @@ public: void set_vram_size(int vram_size) { m_vram_size = vram_size; } template devcb_base &set_out_int_line_callback(Object &&cb) { return m_out_int_line_cb.set_callback(std::forward(cb)); } template devcb_base &set_out_gromclk_callback(Object &&cb) { return m_out_gromclk_cb.set_callback(std::forward(cb)); } + auto out_int_line_callback() { return m_out_int_line_cb.bind(); } + auto out_gromclk_callback() { return m_out_gromclk_cb.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/video/upd3301.h b/src/devices/video/upd3301.h index 40deb120e05..554df8189b5 100644 --- a/src/devices/video/upd3301.h +++ b/src/devices/video/upd3301.h @@ -47,19 +47,19 @@ downcast(*device).set_character_width(_value); #define MCFG_UPD3301_DRAW_CHARACTER_CALLBACK_OWNER(_class, _method) \ - downcast(*device).set_display_callback(upd3301_device::draw_character_delegate(&_class::_method, #_class "::" #_method, this)); + downcast(*device).set_display_callback(&_class::_method, #_class "::" #_method, this); #define MCFG_UPD3301_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); #define MCFG_UPD3301_INT_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_wr_callback(DEVCB_##_write); + downcast(*device).set_int_wr_callback(DEVCB_##_write); #define MCFG_UPD3301_HRTC_CALLBACK(_write) \ - devcb = &downcast(*device).set_hrtc_wr_callback(DEVCB_##_write); + downcast(*device).set_hrtc_wr_callback(DEVCB_##_write); #define MCFG_UPD3301_VRTC_CALLBACK(_write) \ - devcb = &downcast(*device).set_vrtc_wr_callback(DEVCB_##_write); + downcast(*device).set_vrtc_wr_callback(DEVCB_##_write); @@ -80,12 +80,16 @@ public: upd3301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); void set_character_width(int value) { m_width = value; } - template void set_display_callback(Object &&cb) { m_display_cb = std::forward(cb); } + template void set_display_callback(T &&... args) { m_display_cb = draw_character_delegate(std::forward(args)...); } template devcb_base &set_drq_wr_callback(Object &&cb) { return m_write_drq.set_callback(std::forward(cb)); } template devcb_base &set_int_wr_callback(Object &&cb) { return m_write_int.set_callback(std::forward(cb)); } template devcb_base &set_hrtc_wr_callback(Object &&cb) { return m_write_hrtc.set_callback(std::forward(cb)); } template devcb_base &set_vrtc_wr_callback(Object &&cb) { return m_write_vrtc.set_callback(std::forward(cb)); } + auto drq_wr_callback() { return m_write_drq.bind(); } + auto int_wr_callback() { return m_write_int.bind(); } + auto hrtc_wr_callback() { return m_write_hrtc.bind(); } + auto vrtc_wr_callback() { return m_write_vrtc.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/video/upd7220.h b/src/devices/video/upd7220.h index 692aeb09024..4ea2706a22b 100644 --- a/src/devices/video/upd7220.h +++ b/src/devices/video/upd7220.h @@ -51,16 +51,16 @@ downcast(*device).set_draw_text_callback(upd7220_device::draw_text_delegate(&_class::_method, #_class "::" #_method, this)); #define MCFG_UPD7220_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); #define MCFG_UPD7220_HSYNC_CALLBACK(_write) \ - devcb = &downcast(*device).set_hsync_wr_callback(DEVCB_##_write); + downcast(*device).set_hsync_wr_callback(DEVCB_##_write); #define MCFG_UPD7220_VSYNC_CALLBACK(_write) \ - devcb = &downcast(*device).set_vsync_wr_callback(DEVCB_##_write); + downcast(*device).set_vsync_wr_callback(DEVCB_##_write); #define MCFG_UPD7220_BLANK_CALLBACK(_write) \ - devcb = &downcast(*device).set_blank_wr_callback(DEVCB_##_write); + downcast(*device).set_blank_wr_callback(DEVCB_##_write); diff --git a/src/devices/video/v9938.h b/src/devices/video/v9938.h index cbc5e0364a2..2b70f6948ac 100644 --- a/src/devices/video/v9938.h +++ b/src/devices/video/v9938.h @@ -50,7 +50,7 @@ MCFG_SCREEN_UPDATE_DEVICE(_v9938_tag, v9938_device, screen_update) #define MCFG_V99X8_INTERRUPT_CALLBACK(_irq) \ - devcb = &downcast(device)->set_interrupt_callback(DEVCB_##_irq); + downcast(device)->set_interrupt_callback(DEVCB_##_irq); //************************************************************************** diff --git a/src/devices/video/vic4567.h b/src/devices/video/vic4567.h index 1e357028eac..e680a3ff0cf 100644 --- a/src/devices/video/vic4567.h +++ b/src/devices/video/vic4567.h @@ -244,27 +244,27 @@ DECLARE_DEVICE_TYPE(VIC3, vic3_device) downcast(*device).set_vic3_type((vic3_device::vic3_type::type)); #define MCFG_VIC3_DMA_READ_CB(cb) \ - devcb = &downcast(*device).set_dma_read_callback((DEVCB_##cb)); + downcast(*device).set_dma_read_callback((DEVCB_##cb)); #define MCFG_VIC3_DMA_READ_COLOR_CB(cb) \ - devcb = &downcast(*device).set_dma_read_color_callback((DEVCB_##cb)); + downcast(*device).set_dma_read_color_callback((DEVCB_##cb)); #define MCFG_VIC3_INTERRUPT_CB(cb) \ - devcb = &downcast(*device).set_interrupt_callback((DEVCB_##cb)); + downcast(*device).set_interrupt_callback((DEVCB_##cb)); #define MCFG_VIC3_PORT_CHANGED_CB(cb) \ - devcb = &downcast(*device).set_port_changed_callback((DEVCB_##cb)); + downcast(*device).set_port_changed_callback((DEVCB_##cb)); #define MCFG_VIC3_LIGHTPEN_BUTTON_CB(cb) \ - devcb = &downcast(*device).set_lightpen_button_callback((DEVCB_##cb)); + downcast(*device).set_lightpen_button_callback((DEVCB_##cb)); #define MCFG_VIC3_LIGHTPEN_X_CB(cb) \ - devcb = &downcast(*device).set_lightpen_x_callback((DEVCB_##cb)); + downcast(*device).set_lightpen_x_callback((DEVCB_##cb)); #define MCFG_VIC3_LIGHTPEN_Y_CB(cb) \ - devcb = &downcast(*device).set_lightpen_y_callback((DEVCB_##cb)); + downcast(*device).set_lightpen_y_callback((DEVCB_##cb)); #define MCFG_VIC3_C64_MEM_R_CB(cb) \ - devcb = &downcast(*device).set_c64_mem_r_callback((DEVCB_##cb)); + downcast(*device).set_c64_mem_r_callback((DEVCB_##cb)); #endif // MAME_VIDEO_VIC4567_H diff --git a/src/devices/video/voodoo.h b/src/devices/video/voodoo.h index 87cb23b5ede..fff744bd671 100644 --- a/src/devices/video/voodoo.h +++ b/src/devices/video/voodoo.h @@ -1447,13 +1447,13 @@ enum downcast(*device).set_cpu_tag(_tag); #define MCFG_VOODOO_VBLANK_CB(_devcb) \ - devcb = &downcast(*device).set_vblank_callback(DEVCB_##_devcb); + downcast(*device).set_vblank_callback(DEVCB_##_devcb); #define MCFG_VOODOO_STALL_CB(_devcb) \ - devcb = &downcast(*device).set_stall_callback(DEVCB_##_devcb); + downcast(*device).set_stall_callback(DEVCB_##_devcb); #define MCFG_VOODOO_PCIINT_CB(_devcb) \ - devcb = &downcast(*device).set_pciint_callback(DEVCB_##_devcb); + downcast(*device).set_pciint_callback(DEVCB_##_devcb); /*************************************************************************** FUNCTION PROTOTYPES diff --git a/src/devices/video/zeus2.h b/src/devices/video/zeus2.h index bfd2cb4cdc2..a699f02f18c 100644 --- a/src/devices/video/zeus2.h +++ b/src/devices/video/zeus2.h @@ -102,10 +102,10 @@ typedef zeus2_renderer::extent_t z2_poly_extent; * Zeus2 Video Device *************************************/ #define MCFG_ZEUS2_VBLANK_CB(_devcb) \ - devcb = &downcast(*device).set_vblank_callback(DEVCB_##_devcb); + downcast(*device).set_vblank_callback(DEVCB_##_devcb); #define MCFG_ZEUS2_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); #define MCFG_ZEUS2_FLOAT_MODE(_mode) \ downcast(device)->set_float_mode(_mode); diff --git a/src/emu/devcb.cpp b/src/emu/devcb.cpp index d22a9667e81..75e43ad606e 100644 --- a/src/emu/devcb.cpp +++ b/src/emu/devcb.cpp @@ -1,875 +1,228 @@ // license:BSD-3-Clause -// copyright-holders:Aaron Giles +// copyright-holders:Vas Crabb /*************************************************************************** - devcb.c + devcb.cpp Device callback interface helpers. ***************************************************************************/ #include "emu.h" +#include "devcb.h" + +template class devcb_read; +template class devcb_read; +template class devcb_read; +template class devcb_read; +template class devcb_read; + +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; + +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; + +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; + +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; + +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; + +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl; + +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl; + +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl; + +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl; + +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl; + +template class devcb_write; +template class devcb_write; +template class devcb_write; +template class devcb_write; +template class devcb_write; + +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; + +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; + +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; + +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; + +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; + +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl; +template class devcb_write8::creator_impl; +template class devcb_write8::creator_impl; +template class devcb_write8::creator_impl; +template class devcb_write8::creator_impl; +template class devcb_write8::creator_impl; + +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl; +template class devcb_write16::creator_impl; +template class devcb_write16::creator_impl; +template class devcb_write16::creator_impl; +template class devcb_write16::creator_impl; +template class devcb_write16::creator_impl; + +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl; +template class devcb_write32::creator_impl; +template class devcb_write32::creator_impl; +template class devcb_write32::creator_impl; +template class devcb_write32::creator_impl; +template class devcb_write32::creator_impl; + +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl; +template class devcb_write64::creator_impl; +template class devcb_write64::creator_impl; +template class devcb_write64::creator_impl; +template class devcb_write64::creator_impl; +template class devcb_write64::creator_impl; + +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl; +template class devcb_write_line::creator_impl; +template class devcb_write_line::creator_impl; +template class devcb_write_line::creator_impl; +template class devcb_write_line::creator_impl; +template class devcb_write_line::creator_impl; - -//************************************************************************** -// DEVCB BASE CLASS -//************************************************************************** - -//------------------------------------------------- -// devcb_base - constructor -//------------------------------------------------- - -devcb_base::devcb_base(device_t &device, u64 defmask) - : m_owner(device) - , m_base(device) - , m_type(CALLBACK_NONE) - , m_target_tag(nullptr) - , m_target_int(0) - , m_space_tag(nullptr) - , m_space_num(0) - , m_space(nullptr) - , m_rshift(0) - , m_mask(defmask) - , m_defmask(defmask) - , m_xor(0) +devcb_base::devcb_base(device_t &owner) + : m_owner(owner) + , m_dflt_space_finder(owner, finder_base::DUMMY_TAG) + , m_dflt_space_index(-1) + , m_dflt_space(nullptr) { - m_target.ptr = nullptr; + owner.register_callback(*this); } -//------------------------------------------------- -// devcb_base - destructor -//------------------------------------------------- - devcb_base::~devcb_base() { } -//------------------------------------------------- -// reset - reset/initialize state -//------------------------------------------------- - -void devcb_base::reset(callback_type type) +void devcb_base::validity_check(validity_checker &valid) const { - reset(m_owner.mconfig().current_device(), type); -} - -void devcb_base::reset(device_t &base, callback_type type) -{ - m_base = base; - m_type = type; - m_target_tag = nullptr; - m_target_int = 0; - m_space_tag = nullptr; - m_space_num = 0; - m_space = nullptr; - m_target.ptr = nullptr; - m_rshift = 0; - m_mask = m_defmask; - m_xor = 0; - devcb_reset(); + // if a default address space is configured, ensure it exists + if (m_dflt_space_finder) + { + if (!m_dflt_space_finder->has_space(m_dflt_space_index)) + osd_printf_error("Callback references non-existent memory space %d of device %s (%s)\n", m_dflt_space_index, m_dflt_space_finder->device().tag(), m_dflt_space_finder->device().name()); + } + else if (m_dflt_space_finder.finder_tag() != finder_base::DUMMY_TAG) + { + osd_printf_error("Callback references non-existent memory space device tag %s\n", m_dflt_space_finder.finder_tag()); + } } -//------------------------------------------------- -// resolve_ioport - resolve an I/O port or fatal -// error if we can't find it -//------------------------------------------------- - -void devcb_base::resolve_ioport() +void devcb_base::resolve() { - // attempt to resolve, fatal error if fail - m_target.ioport = m_target_tag ? m_base.get().ioport(m_target_tag) : nullptr; - if (!m_target.ioport) - throw emu_fatalerror("Unable to resolve I/O port callback reference to '%s' in device '%s'\n", m_target_tag, m_base.get().tag()); - - // adjust the mask to match the port bits - u64 port_mask = 0; - for (const ioport_field &field : m_target.ioport->fields()) - port_mask |= field.mask(); - m_mask = shift_mask(port_mask); -} - - -//------------------------------------------------- -// resolve_membank - resolve a memory bank or -// fatal error if we can't find it -//------------------------------------------------- - -void devcb_base::resolve_membank() -{ - // attempt to resolve, fatal error if fail - m_target.membank = m_target_tag ? m_base.get().membank(m_target_tag) : nullptr; - if (!m_target.membank) - throw emu_fatalerror("Unable to resolve memory bank callback reference to '%s' in device '%s'\n", m_target_tag, m_base.get().tag()); -} - - -//------------------------------------------------- -// resolve_output - resolve an output item -//------------------------------------------------- - -void devcb_base::resolve_output() -{ - assert(m_target_tag); - m_target.item = &m_base.get().machine().output().find_or_create_item(m_target_tag, 0); -} - - -//------------------------------------------------- -// resolve_inputline - resolve a device and input -// number or fatal error if we can't find it -//------------------------------------------------- - -void devcb_base::resolve_inputline() -{ - // attempt to resolve, fatal error if fail - m_target.device = m_target_tag ? m_base.get().subdevice(m_target_tag) : nullptr; - if (!m_target.device) - throw emu_fatalerror("Unable to resolve device reference to '%s' in device '%s'\n", m_target_tag, m_base.get().tag()); - - // make sure we have an execute interface - device_execute_interface *exec; - if (!m_target.device->interface(exec)) - throw emu_fatalerror("No execute interface found for device reference to '%s' in device '%s'\n", m_target_tag, m_base.get().tag()); -} - - -//------------------------------------------------- -// resolve_space - resolve an address space or -// fatal error if we can't find it -//------------------------------------------------- - -void devcb_base::resolve_space() -{ - // attempt to resolve, fatal error if fail - device_t *const spacedev(m_space_tag ? m_base.get().subdevice(m_space_tag) : nullptr); - if (!spacedev) - throw emu_fatalerror("Unable to resolve device reference to '%s' in device '%s'\n", m_space_tag, m_base.get().tag()); - if (!spacedev->memory().has_space(m_space_num)) - throw emu_fatalerror("Unable to resolve device address space %d on '%s' in device '%s'\n", m_space_num, m_space_tag, m_base.get().tag()); - m_space = &spacedev->memory().space(m_space_num); -} - - - -//************************************************************************** -// DEVCB READ CLASS -//************************************************************************** - -//------------------------------------------------- -// devcb_read_base - constructor -//------------------------------------------------- - -devcb_read_base::devcb_read_base(device_t &device, u64 defmask, bool chained) - : devcb_base(device, defmask), - m_adapter(&devcb_read_base::read_unresolved_adapter) -{ - if (!chained) - device.m_input_callbacks.push_back(this); -} - - -//------------------------------------------------- -// devcb_reset - reset/initialize local state -//------------------------------------------------- - -void devcb_read_base::devcb_reset() -{ - m_readline = read_line_delegate(); - m_read8 = read8_delegate(); - m_read16 = read16_delegate(); - m_read32 = read32_delegate(); - m_read64 = read64_delegate(); - m_adapter = &devcb_read_base::read_unresolved_adapter; - m_chain = nullptr; -} - - -//------------------------------------------------- -// chain_alloc - add another callback to the -// input chain -//------------------------------------------------- - -devcb_read_base &devcb_read_base::chain_alloc() -{ - // set up the chained callback pointer - m_chain.reset(new devcb_read_base(m_owner, m_defmask, true)); - return *m_chain; -} - - -//------------------------------------------------- -// resolve - resolve the specified callback to -// its final form -//------------------------------------------------- - -void devcb_read_base::resolve() -{ - // first resolve any address spaces - if (m_space_tag) - resolve_space(); + if (m_dflt_space_finder && m_dflt_space_finder->has_space(m_dflt_space_index)) + m_dflt_space = &m_dflt_space_finder->space(m_dflt_space_index); else - m_space = &m_owner.machine().dummy_space(); - - // then handle the various types - const char *name = "unknown"; - try - { - switch (m_type) - { - case CALLBACK_NONE: - break; - - case CALLBACK_LINE: - name = m_readline.name(); - m_readline.bind_relative_to(m_base); - m_target_int = 0; - m_adapter = m_readline.isnull() ? &devcb_read_base::read_constant_adapter : &devcb_read_base::read_line_adapter; - m_mask = shift_mask(1); - break; - - case CALLBACK_8: - name = m_read8.name(); - m_read8.bind_relative_to(m_base); - m_target_int = 0; - m_adapter = m_read8.isnull() ? &devcb_read_base::read_constant_adapter : &devcb_read_base::read8_adapter; - m_mask = shift_mask(0xff); - break; - - case CALLBACK_16: - name = m_read16.name(); - m_read16.bind_relative_to(m_base); - m_target_int = 0; - m_adapter = m_read16.isnull() ? &devcb_read_base::read_constant_adapter : &devcb_read_base::read16_adapter; - m_mask = shift_mask(0xffff); - break; - - case CALLBACK_32: - name = m_read32.name(); - m_read32.bind_relative_to(m_base); - m_target_int = 0; - m_adapter = m_read32.isnull() ? &devcb_read_base::read_constant_adapter : &devcb_read_base::read32_adapter; - m_mask = shift_mask(0xffffffff); - break; - - case CALLBACK_64: - name = m_read64.name(); - m_read64.bind_relative_to(m_base); - m_target_int = 0; - m_adapter = m_read64.isnull() ? &devcb_read_base::read_constant_adapter : &devcb_read_base::read64_adapter; - break; - - case CALLBACK_IOPORT: - name = m_target_tag; - resolve_ioport(); - m_target_int = 0; - m_adapter = &devcb_read_base::read_ioport_adapter; - break; - - case CALLBACK_MEMBANK: - throw emu_fatalerror("Device read callbacks can't be connected to bank switches\n"); - - case CALLBACK_OUTPUT: - throw emu_fatalerror("Device read callbacks can't be connected to output items\n"); - - case CALLBACK_LOG: - m_adapter = &devcb_read_base::read_logged_adapter; - m_mask = 0; - break; - - case CALLBACK_CONSTANT: - if (m_xor != 0) - throw emu_fatalerror("devcb_read: Attempt to invert constant value (%lX ^ %lX)\n", (unsigned long)shift_mask(m_target_int), (unsigned long)m_xor); - m_adapter = &devcb_read_base::read_constant_adapter; - m_mask = shift_mask(m_target_int); - break; - - case CALLBACK_INPUTLINE: - case CALLBACK_ASSERTLINE: - case CALLBACK_CLEARLINE: - case CALLBACK_HOLDLINE: - throw emu_fatalerror("Device read callbacks can't be connected to input lines\n"); - } - } - catch (binding_type_exception &binderr) - { - throw emu_fatalerror("devcb_read: Error performing a late bind of type %s to %s (name=%s)\n", binderr.m_actual_type.name(), binderr.m_target_type.name(), name); - } - - // resolve callback chain recursively - if (m_chain != nullptr) - m_chain->resolve(); - - // protect against bus contention (the masks must not overlap) - for (const devcb_read_base *chained_cb = m_chain.get(); chained_cb != nullptr; chained_cb = chained_cb->m_chain.get()) - if ((m_mask & chained_cb->m_mask) != 0) - throw emu_fatalerror("Device %s read callback (name=%s) overlaps with chained callback (%lX & %lX)", m_owner.tag(), name, (unsigned long)m_mask, (unsigned long)chained_cb->m_mask); + m_dflt_space = &m_owner.machine().dummy_space(); } -//------------------------------------------------- -// resolve_safe - resolve the callback; if not -// specified, resolve to a constant callback with -// the given value -//------------------------------------------------- - -void devcb_read_base::resolve_safe(u64 none_constant_value) +devcb_read_base::~devcb_read_base() { - // convert to a constant if none specified - if (m_type == CALLBACK_NONE) - { - m_target_int = none_constant_value; - m_type = CALLBACK_CONSTANT; - } - resolve(); } -//------------------------------------------------- -// read_unresolved_adapter - error-generating -// unresolved adapter -//------------------------------------------------- - -u64 devcb_read_base::read_unresolved_adapter(address_space &space, offs_t offset, u64 mask) +devcb_write_base::~devcb_write_base() { - throw emu_fatalerror("Attempted to read through an unresolved devcb item"); -} - - -//------------------------------------------------- -// read_line_adapter - read from a line delegate -//------------------------------------------------- - -u64 devcb_read_base::read_line_adapter(address_space &space, offs_t offset, u64 mask) -{ - return shift_mask_xor(m_readline() & 1); -} - - -//------------------------------------------------- -// read8_adapter - read from an 8-bit delegate -//------------------------------------------------- - -u64 devcb_read_base::read8_adapter(address_space &space, offs_t offset, u64 mask) -{ - return shift_mask_xor(m_read8(space, offset, unshift_mask(mask))); -} - - -//------------------------------------------------- -// read16_adapter - read from a 16-bit delegate -//------------------------------------------------- - -u64 devcb_read_base::read16_adapter(address_space &space, offs_t offset, u64 mask) -{ - return shift_mask_xor(m_read16(space, offset, unshift_mask(mask))); -} - - -//------------------------------------------------- -// read32_adapter - read from a 32-bit delegate -//------------------------------------------------- - -u64 devcb_read_base::read32_adapter(address_space &space, offs_t offset, u64 mask) -{ - return shift_mask_xor(m_read32(space, offset, unshift_mask(mask))); -} - - -//------------------------------------------------- -// read64_adapter - read from a 64-bit delegate -//------------------------------------------------- - -u64 devcb_read_base::read64_adapter(address_space &space, offs_t offset, u64 mask) -{ - return shift_mask_xor(m_read64(space, offset, unshift_mask(mask))); -} - - -//------------------------------------------------- -// read_ioport - read from an I/O port -//------------------------------------------------- - -u64 devcb_read_base::read_ioport_adapter(address_space &space, offs_t offset, u64 mask) -{ - return shift_mask_xor(m_target.ioport->read()); -} - - -//------------------------------------------------- -// read_logged_adapter - log a read and return -// zero -//------------------------------------------------- - -u64 devcb_read_base::read_logged_adapter(address_space &space, offs_t offset, u64 mask) -{ - m_owner.logerror("%s: %s\n", m_base.get().machine().describe_context(), m_target_tag); - return 0; -} - - -//------------------------------------------------- -// read_constant - read from a constant -//------------------------------------------------- - -u64 devcb_read_base::read_constant_adapter(address_space &space, offs_t offset, u64 mask) -{ - return shift_mask(m_target_int); -} - - -//------------------------------------------------- -// validity_check - check the validity of the -// callback object -//------------------------------------------------- - -void devcb_read_base::validity_check(validity_checker &valid) const -{ - switch (m_type) - { - case CALLBACK_NONE: - case CALLBACK_CONSTANT: - case CALLBACK_LOG: - case CALLBACK_IOPORT: - break; - - case CALLBACK_LINE: - if (!m_base.get().subdevice(m_readline.device_name())) - osd_printf_error("Device %s not found for READLINE callback (%s)\n", m_readline.device_name(), m_readline.name()); - break; - - case CALLBACK_8: - if (!m_base.get().subdevice(m_read8.device_name())) - osd_printf_error("Device %s not found for READ8 callback (%s)\n", m_read8.device_name(), m_read8.name()); - break; - - case CALLBACK_16: - if (!m_base.get().subdevice(m_read16.device_name())) - osd_printf_error("Device %s not found for READ16 callback (%s)\n", m_read16.device_name(), m_read16.name()); - break; - - case CALLBACK_32: - if (!m_base.get().subdevice(m_read32.device_name())) - osd_printf_error("Device %s not found for READ32 callback (%s)\n", m_read32.device_name(), m_read32.name()); - break; - - case CALLBACK_64: - if (!m_base.get().subdevice(m_read64.device_name())) - osd_printf_error("Device %s not found for READ64 callback (%s)\n", m_read64.device_name(), m_read64.name()); - break; - - case CALLBACK_MEMBANK: - osd_printf_error("Device read callbacks can't be connected to bank switches\n"); - break; - - case CALLBACK_OUTPUT: - osd_printf_error("Device read callbacks can't be connected to output items\n"); - break; - - case CALLBACK_INPUTLINE: - case CALLBACK_ASSERTLINE: - case CALLBACK_CLEARLINE: - case CALLBACK_HOLDLINE: - throw emu_fatalerror("Device read callbacks can't be connected to input lines\n"); - } - - if (m_chain) - m_chain->validity_check(valid); -} - - - -//************************************************************************** -// DEVCB WRITE CLASS -//************************************************************************** - -//------------------------------------------------- -// devcb_write_base - constructor -//------------------------------------------------- - -devcb_write_base::devcb_write_base(device_t &device, u64 defmask, bool chained) - : devcb_base(device, defmask), - m_adapter(&devcb_write_base::write_unresolved_adapter) -{ - if (!chained) - device.m_output_callbacks.push_back(this); -} - - -//------------------------------------------------- -// devcb_reset - reset/initialize local state -//------------------------------------------------- - -void devcb_write_base::devcb_reset() -{ - m_writeline = write_line_delegate(); - m_write8 = write8_delegate(); - m_write16 = write16_delegate(); - m_write32 = write32_delegate(); - m_write64 = write64_delegate(); - m_adapter = &devcb_write_base::write_unresolved_adapter; - m_chain = nullptr; -} - - -//------------------------------------------------- -// chain_alloc - add another callback to the -// output chain -//------------------------------------------------- - -devcb_write_base &devcb_write_base::chain_alloc() -{ - // set up the chained callback pointer - m_chain.reset(new devcb_write_base(m_owner, m_defmask, true)); - return *m_chain; -} - - -//------------------------------------------------- -// resolve - resolve the specified callback to -// its final form -//------------------------------------------------- - -void devcb_write_base::resolve() -{ - // first resolve any address spaces - if (m_space_tag) - resolve_space(); - else - m_space = &m_owner.machine().dummy_space(); - - // then handle the various types - const char *name = "unknown"; - try - { - switch (m_type) - { - case CALLBACK_NONE: - break; - - case CALLBACK_LINE: - name = m_writeline.name(); - m_writeline.bind_relative_to(m_base); - m_adapter = m_writeline.isnull() ? &devcb_write_base::write_noop_adapter : &devcb_write_base::write_line_adapter; - break; - - case CALLBACK_8: - name = m_write8.name(); - m_write8.bind_relative_to(m_base); - m_adapter = m_write8.isnull() ? &devcb_write_base::write_noop_adapter : &devcb_write_base::write8_adapter; - break; - - case CALLBACK_16: - name = m_write16.name(); - m_write16.bind_relative_to(m_base); - m_adapter = m_write16.isnull() ? &devcb_write_base::write_noop_adapter : &devcb_write_base::write16_adapter; - break; - - case CALLBACK_32: - name = m_write32.name(); - m_write32.bind_relative_to(m_base); - m_adapter = m_write32.isnull() ? &devcb_write_base::write_noop_adapter : &devcb_write_base::write32_adapter; - break; - - case CALLBACK_64: - name = m_write64.name(); - m_write64.bind_relative_to(m_base); - m_adapter = m_write64.isnull() ? &devcb_write_base::write_noop_adapter : &devcb_write_base::write64_adapter; - break; - - case CALLBACK_IOPORT: - resolve_ioport(); - m_adapter = !m_target.ioport ? &devcb_write_base::write_noop_adapter : &devcb_write_base::write_ioport_adapter; - break; - - case CALLBACK_MEMBANK: - resolve_membank(); - m_adapter = !m_target.membank ? &devcb_write_base::write_noop_adapter : &devcb_write_base::write_membank_adapter; - break; - - case CALLBACK_OUTPUT: - resolve_output(); - m_adapter = !m_target.item ? &devcb_write_base::write_noop_adapter : &devcb_write_base::write_output_adapter; - break; - - case CALLBACK_LOG: - m_adapter = &devcb_write_base::write_logged_adapter; - break; - - case CALLBACK_CONSTANT: - m_adapter = &devcb_write_base::write_noop_adapter; - break; - - case CALLBACK_INPUTLINE: - resolve_inputline(); - m_adapter = &devcb_write_base::write_inputline_adapter; - break; - - case CALLBACK_ASSERTLINE: - resolve_inputline(); - m_adapter = &devcb_write_base::write_assertline_adapter; - break; - - case CALLBACK_CLEARLINE: - resolve_inputline(); - m_adapter = &devcb_write_base::write_clearline_adapter; - break; - - case CALLBACK_HOLDLINE: - resolve_inputline(); - m_adapter = &devcb_write_base::write_holdline_adapter; - break; - } - } - catch (binding_type_exception &binderr) - { - throw emu_fatalerror("devcb_write: Error performing a late bind of type %s to %s (name=%s)\n", binderr.m_actual_type.name(), binderr.m_target_type.name(), name); - } - - // resolve callback chain recursively - if (m_chain) - m_chain->resolve(); -} - - -//------------------------------------------------- -// resolve_safe - resolve the callback; if not -// specified, resolve to a no-op -//------------------------------------------------- - -void devcb_write_base::resolve_safe() -{ - // convert to a constant if none specified - if (m_type == CALLBACK_NONE) - m_type = CALLBACK_CONSTANT; - resolve(); -} - - -//------------------------------------------------- -// validity_check - check the validity of the -// callback object -//------------------------------------------------- - -void devcb_write_base::validity_check(validity_checker &valid) const -{ - switch (m_type) - { - case CALLBACK_NONE: - break; - - case CALLBACK_CONSTANT: - case CALLBACK_LOG: - case CALLBACK_IOPORT: - case CALLBACK_MEMBANK: - case CALLBACK_OUTPUT: - break; - - case CALLBACK_LINE: - if (!m_base.get().subdevice(m_writeline.device_name())) - osd_printf_error("Device %s not found for WRITELINE callback (%s)\n", m_writeline.device_name(), m_writeline.name()); - break; - - case CALLBACK_8: - if (!m_base.get().subdevice(m_write8.device_name())) - osd_printf_error("Device %s not found for WRITE8 callback (%s)\n", m_write8.device_name(), m_write8.name()); - break; - - case CALLBACK_16: - if (!m_base.get().subdevice(m_write16.device_name())) - osd_printf_error("Device %s not found for WRITE16 callback (%s)\n", m_write16.device_name(), m_write16.name()); - break; - - case CALLBACK_32: - if (!m_base.get().subdevice(m_write32.device_name())) - osd_printf_error("Device %s not found for WRITE32 callback (%s)\n", m_write32.device_name(), m_write32.name()); - break; - - case CALLBACK_64: - if (!m_base.get().subdevice(m_write64.device_name())) - osd_printf_error("Device %s not found for WRITE64 callback (%s)\n", m_write64.device_name(), m_write64.name()); - break; - - case CALLBACK_INPUTLINE: - case CALLBACK_ASSERTLINE: - case CALLBACK_CLEARLINE: - case CALLBACK_HOLDLINE: - { - device_t *const device = m_base.get().subdevice(m_target_tag); - device_execute_interface *execute; - if (!device) - osd_printf_error("Device %s not found for INPUTLINE callback (%d)\n", m_target_tag, int(m_target_int)); - else if (!device->interface(execute)) - osd_printf_error("Device %s has no interface for INPUTLINE callback (%d)\n", m_target_tag, int(m_target_int)); - } - break; - } - - if (m_chain) - m_chain->validity_check(valid); -} - - -//------------------------------------------------- -// write_unresolved_adapter - error-generating -// unresolved adapter -//------------------------------------------------- - -void devcb_write_base::write_unresolved_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - throw emu_fatalerror("Attempted to write through an unresolved devcb item"); -} - - -//------------------------------------------------- -// write_line_adapter - write from a line delegate -//------------------------------------------------- - -void devcb_write_base::write_line_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - m_writeline(unshift_mask_xor(data) & 1); -} - - -//------------------------------------------------- -// write8_adapter - write from an 8-bit delegate -//------------------------------------------------- - -void devcb_write_base::write8_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - m_write8(space, offset, unshift_mask_xor(data), unshift_mask(mask)); -} - - -//------------------------------------------------- -// write16_adapter - write from a 16-bit delegate -//------------------------------------------------- - -void devcb_write_base::write16_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - m_write16(space, offset, unshift_mask_xor(data), unshift_mask(mask)); -} - - -//------------------------------------------------- -// write32_adapter - write from a 32-bit delegate -//------------------------------------------------- - -void devcb_write_base::write32_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - m_write32(space, offset, unshift_mask_xor(data), unshift_mask(mask)); -} - - -//------------------------------------------------- -// write64_adapter - write from a 64-bit delegate -//------------------------------------------------- - -void devcb_write_base::write64_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - m_write64(space, offset, unshift_mask_xor(data), unshift_mask(mask)); -} - - -//------------------------------------------------- -// write_ioport_adapter - write to an I/O port -//------------------------------------------------- - -void devcb_write_base::write_ioport_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - if (m_target.ioport) - m_target.ioport->write(unshift_mask_xor(data)); -} - - -//------------------------------------------------- -// write_membank_adapter - switch a memory bank -//------------------------------------------------- - -void devcb_write_base::write_membank_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - if (m_target.membank) - m_target.membank->set_entry(unshift_mask_xor(data)); -} - - -//------------------------------------------------- -// write_output_adapter - set an output item -//------------------------------------------------- - -void devcb_write_base::write_output_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - if (m_target.item) - m_target.item->set(unshift_mask_xor(data)); -} - - -//------------------------------------------------- -// write_logged_adapter - log write if masked -// value is nonzero -//------------------------------------------------- - -void devcb_write_base::write_logged_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - if (unshift_mask_xor(data) != 0) - m_owner.logerror("%s: %s\n", m_owner.machine().describe_context(), m_target_tag); -} - - -//------------------------------------------------- -// write_constant - write from a constant -//------------------------------------------------- - -void devcb_write_base::write_noop_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - // constant for writes is a no-op -} - - -//------------------------------------------------- -// write_inputline_adapter - write to a device's -// input line -//------------------------------------------------- - -void devcb_write_base::write_inputline_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - m_target.device->execute().set_input_line(m_target_int, unshift_mask_xor(data) & 1); -} - - -//------------------------------------------------- -// write_assertline_adapter - write to a device's -// input line -//------------------------------------------------- - -void devcb_write_base::write_assertline_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - if (unshift_mask_xor(data) & 1) - m_target.device->execute().set_input_line(m_target_int, ASSERT_LINE); -} - - -//------------------------------------------------- -// write_clearline_adapter - write to a device's -// input line -//------------------------------------------------- - -void devcb_write_base::write_clearline_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - if (unshift_mask_xor(data) & 1) - m_target.device->execute().set_input_line(m_target_int, CLEAR_LINE); -} - -//------------------------------------------------- -// write_clearline_adapter - write to a device's -// input line -//------------------------------------------------- - -void devcb_write_base::write_holdline_adapter(address_space &space, offs_t offset, u64 data, u64 mask) -{ - if (unshift_mask_xor(data) & 1) - m_target.device->execute().set_input_line(m_target_int, HOLD_LINE); } diff --git a/src/emu/devcb.h b/src/emu/devcb.h index 833d6938a1c..5f65235cb70 100644 --- a/src/emu/devcb.h +++ b/src/emu/devcb.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Aaron Giles +// copyright-holders:Vas Crabb /*************************************************************************** devcb.h @@ -7,636 +7,2630 @@ Device callback interface helpers. ***************************************************************************/ - -#pragma once - -#ifndef __EMU_H__ -#error Dont include this file directly; include emu.h instead. -#endif - #ifndef MAME_EMU_DEVCB_H #define MAME_EMU_DEVCB_H +#pragma once + +#include #include +#include +#include +#include #include #include +#include + +//************************************************************************** +// LEGACY SYNAX SUPPORT - WILL BE REMOVED +//************************************************************************** + +#include + +#define DEVCB_READ8(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) +#define DEVCB_READ16(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) +#define DEVCB_READ32(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) +#define DEVCB_READ64(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) +#define DEVCB_READLINE(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) + +#define DEVCB_WRITE8(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) +#define DEVCB_WRITE16(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) +#define DEVCB_WRITE32(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) +#define DEVCB_WRITE64(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) +#define DEVCB_WRITELINE(tag, _class, _func) (std::forward_as_tuple((tag), &_class::_func, #_class "::" #_func)) + +template struct devcb_constant_t { T m_value; }; +template auto DEVCB_CONSTANT(T &&value) { return devcb_constant_t >{ std::forward(value) }; } + +struct DEVCB_IOPORT +{ + constexpr DEVCB_IOPORT(char const *tag) : m_tag(tag) { } + char const *m_tag; +}; + +struct DEVCB_INPUTLINE +{ + constexpr DEVCB_INPUTLINE(char const *tag, int linenum) : m_tag(tag), m_linenum(linenum) { } + char const *m_tag; + int m_linenum; +}; + +struct DEVCB_ASSERTLINE +{ + constexpr DEVCB_ASSERTLINE(char const *tag, int linenum) : m_tag(tag), m_linenum(linenum) { } + char const *m_tag; + int m_linenum; +}; + +struct DEVCB_CLEARLINE +{ + constexpr DEVCB_CLEARLINE(char const *tag, int linenum) : m_tag(tag), m_linenum(linenum) { } + char const *m_tag; + int m_linenum; +}; + +struct DEVCB_HOLDLINE +{ + constexpr DEVCB_HOLDLINE(char const *tag, int linenum) : m_tag(tag), m_linenum(linenum) { } + char const *m_tag; + int m_linenum; +}; + +struct DEVCB_MEMBANK +{ + constexpr DEVCB_MEMBANK(char const *tag) : m_tag(tag) { } + char const *m_tag; +}; + +struct DEVCB_OUTPUT +{ + constexpr DEVCB_OUTPUT(char const *tag) : m_tag(tag) { } + char const *m_tag; +}; + +enum devcb_noop_t { DEVCB_NOOP }; + + + +//************************************************************************** +// DELEGATE TYPES +//************************************************************************** + +typedef device_delegate read_line_delegate; +typedef device_delegate write_line_delegate; + namespace emu { namespace detail { -template struct devcb_delegate_initialiser -{ - devcb_delegate_initialiser(char const *tag, Delegate &&delegate) : m_base(nullptr), m_delegate(std::move(delegate)) - { - } - template - devcb_delegate_initialiser(T &device, std::enable_if_t::value, Delegate &&> delegate) : m_base(&device), m_delegate(std::move(delegate)) - { - } - template - devcb_delegate_initialiser(T &interface, std::enable_if_t::value, Delegate &&> delegate) : m_base(&interface.device()), m_delegate(std::move(delegate)) - { - } - template - devcb_delegate_initialiser(device_finder const &finder, Delegate &&delegate) : m_base(&finder.finder_target().first), m_delegate(std::move(delegate)) - { - } +template struct read_line_device_class { }; +template struct write_line_device_class { }; - device_t *m_base; - Delegate &&m_delegate; -}; +template +struct read_line_device_class::value> > { using type = T; }; +template +struct read_line_device_class::value> > { using type = T; }; +template +struct read_line_device_class::value> > { using type = T; }; +template +struct read_line_device_class::value> > { using type = T; }; + +template +struct write_line_device_class::value> > { using type = T; }; +template +struct write_line_device_class::value> > { using type = T; }; +template +struct write_line_device_class::value> > { using type = T; }; +template +struct write_line_device_class::value> > { using type = T; }; + +template using read_line_device_class_t = typename read_line_device_class::type; +template using write_line_device_class_t = typename write_line_device_class::type; -inline char const *devcb_delegate_get_tag(char const *tag) { return tag; } template -inline std::enable_if_t::value, char const *> devcb_delegate_get_tag(T &device) { return DEVICE_SELF; } +inline read_line_delegate make_delegate(T &&func, char const *name, char const *tag, read_line_device_class_t > *obj) +{ return read_line_delegate(func, name, tag, obj); } + template -inline std::enable_if_t::value, char const *> devcb_delegate_get_tag(T &interface) { return DEVICE_SELF; } -template -inline char const *devcb_delegate_get_tag(device_finder const &finder) { return finder.finder_tag(); } - -template struct devcb_tag_desc_creator -{ - static DescType create(char const *tag) - { - return DescType{ nullptr, tag }; - } - static DescType create(device_t &device) - { - return DescType{ &device, DEVICE_SELF }; - } - static DescType create(device_interface &interface) - { - return DescType{ &interface.device(), DEVICE_SELF }; - } - template - static DescType create(device_finder const &finder) - { - std::pair const target(finder.finder_target()); - return DescType{ &target.first, target.second }; - } -}; - -template struct devcb_line_desc_creator -{ - static DescType create(char const *tag, int inputnum) - { - return DescType{ nullptr, tag, inputnum }; - } - static DescType create(device_t &device, int inputnum) - { - return DescType{ &device, DEVICE_SELF, inputnum }; - } - static DescType create(device_interface &interface, int inputnum) - { - return DescType{ &interface.device(), DEVICE_SELF, inputnum }; - } - template - static DescType create(device_finder const &finder, int inputnum) - { - std::pair const target(finder.finder_target()); - return DescType{ &target.first, target.second, inputnum }; - } -}; +inline write_line_delegate make_delegate(T &&func, char const *name, char const *tag, write_line_device_class_t > *obj) +{ return write_line_delegate(func, name, tag, obj); } } } // namespace emu::detail -//************************************************************************** -// MACROS -//************************************************************************** - -// wrappers for read callbacks into any tagged device -#define DEVCB_READLINE(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), read_line_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) -#define DEVCB_READ8(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), read8_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) -#define DEVCB_READ16(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), read16_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) -#define DEVCB_READ32(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), read32_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) -#define DEVCB_READ64(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), read64_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) - -// wrappers for write callbacks into any tagged device -#define DEVCB_WRITELINE(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), write_line_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) -#define DEVCB_WRITE8(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), write8_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) -#define DEVCB_WRITE16(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), write16_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) -#define DEVCB_WRITE32(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), write32_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) -#define DEVCB_WRITE64(tag, _class, _func) (emu::detail::devcb_delegate_initialiser((tag), write64_delegate(&_class::_func, #_class "::" #_func, emu::detail::devcb_delegate_get_tag(tag), (_class *)nullptr))) - -// machine config helpers to add shift, mask, or address space configuration -#define MCFG_DEVCB_RSHIFT(_shift) devcb->set_rshift(_shift); -#define MCFG_DEVCB_MASK(_mask) devcb->set_mask(_mask); -#define MCFG_DEVCB_BIT(_bit) devcb->set_rshift(-(_bit)).set_mask(1ULL << (_bit)); -#define MCFG_DEVCB_XOR(_xor) devcb->set_xor(_xor); -#define MCFG_DEVCB_INVERT devcb->set_xor(~u64(0)); -#define MCFG_DEVCB_ADDRESS_SPACE(_device, _spacenum) devcb->set_space(_device, _spacenum); - -// machine config helpers for chaining callbacks -#define MCFG_DEVCB_CHAIN_INPUT(_desc) devcb = &downcast(*devcb).chain_alloc().set_callback(DEVCB_##_desc); -#define MCFG_DEVCB_CHAIN_OUTPUT(_desc) devcb = &downcast(*devcb).chain_alloc().set_callback(DEVCB_##_desc); - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** -// base delegate type for a read_line/write_line -typedef device_delegate read_line_delegate; -typedef device_delegate write_line_delegate; - - -// ======================> devcb_base - +/// \brief Base callback helper +/// +/// Provides utilities for supporting multiple read/write/transform +/// signatures, and the base exclusive-or/mask transform methods. class devcb_base { -protected: - // enumerate the types of callbacks - enum callback_type - { - CALLBACK_NONE, - CALLBACK_LINE, - CALLBACK_8, - CALLBACK_16, - CALLBACK_32, - CALLBACK_64, - CALLBACK_IOPORT, - CALLBACK_MEMBANK, - CALLBACK_OUTPUT, - CALLBACK_LOG, - CALLBACK_CONSTANT, - CALLBACK_INPUTLINE, - CALLBACK_ASSERTLINE, - CALLBACK_CLEARLINE, - CALLBACK_HOLDLINE - }; - - // construction/destruction - devcb_base(device_t &device, u64 defmask); - virtual ~devcb_base(); - - template struct tag_desc - { - device_t *m_base; - char const *m_tag; - }; - - template struct line_desc - { - device_t *m_base; - char const *m_tag; - int m_inputnum; - }; - public: - // getters - bool isnull() const { return (m_type == CALLBACK_NONE); } - - // additional configuration - devcb_base &set_space(const char *device, int space = 0) { m_space_tag = device; m_space_num = space; return *this; } - devcb_base &set_rshift(int rshift) { m_rshift = rshift; return *this; } - devcb_base &set_mask(u64 mask) { m_mask = mask; return *this; } - devcb_base &set_xor(u64 xorval) { m_xor = xorval; return *this; } - - // construction helper classes - struct null_desc + template void set_space(T &&tag, int index) { - }; - - using ioport_desc = tag_desc; - using membank_desc = tag_desc; - using output_desc = tag_desc; - - struct constant_desc - { - u64 m_value; - }; - - struct logger_desc - { - const char *m_string; - }; - - using inputline_desc = line_desc; - using assertline_desc = line_desc; - using clearline_desc = line_desc; - using holdline_desc = line_desc; - - // shared callback setters - devcb_base &set_callback(null_desc null) { reset(CALLBACK_NONE); return *this; } - template devcb_base &set_callback(tag_desc desc) - { - if (desc.m_base) reset(*desc.m_base, Type); - else reset(Type); - m_target_tag = desc.m_tag; - return *this; + m_dflt_space_finder.set_tag(std::forward(tag)); + m_dflt_space_index = index; } - devcb_base &set_callback(constant_desc constant) { reset(CALLBACK_CONSTANT); m_target_int = constant.m_value; return *this; } - devcb_base &set_callback(logger_desc logger) { reset(CALLBACK_LOG); m_target_tag = logger.m_string; return *this; } - void reset() { reset(m_owner, CALLBACK_NONE); } + + virtual void validity_check(validity_checker &valid) const; protected: - // internal helpers - inline u64 shift_mask(u64 value) const { return ((m_rshift < 0) ? (value << -m_rshift) : (value >> m_rshift)) & m_mask; } - inline u64 shift_mask_xor(u64 value) const { return (((m_rshift < 0) ? (value << -m_rshift) : (value >> m_rshift)) ^ m_xor) & m_mask; } - inline u64 unshift_mask(u64 value) const { return (m_rshift < 0) ? ((value & m_mask) >> -m_rshift) : ((value & m_mask) << m_rshift); } - inline u64 unshift_mask_xor(u64 value) const { return (m_rshift < 0) ? (((value ^ m_xor) & m_mask) >> -m_rshift) : (((value ^ m_xor) & m_mask) << m_rshift); } - void reset(callback_type type); - void reset(device_t &base, callback_type type); - virtual void devcb_reset() = 0; - void resolve_ioport(); - void resolve_membank(); - void resolve_output(); - void resolve_inputline(); - void resolve_space(); + // This is in C++17 but not C++14 + template struct void_wrapper { using type = void; }; + template using void_t = typename void_wrapper::type; - // the callback target is going to be one of these - union callback_target + // Intermediate is larger of input and output, mask is forced to unsigned + template struct intermediate; + template struct intermediate= sizeof(U)> > { using type = T; }; + template struct intermediate > { using type = U; }; + template using intermediate_t = typename intermediate::type; + template using mask_t = std::make_unsigned_t >; + + // Detecting candidates for transform functions + template struct is_transform_form1 { static constexpr bool value = false; }; + template struct is_transform_form2 { static constexpr bool value = false; }; + template struct is_transform_form3 { static constexpr bool value = false; }; + template struct is_transform_form4 { static constexpr bool value = false; }; + template struct is_transform_form5 { static constexpr bool value = false; }; + template struct is_transform_form6 { static constexpr bool value = false; }; + template struct is_transform_form1 &)>, Result>::value> > { static constexpr bool value = true; }; + template struct is_transform_form2, Result>::value> > { static constexpr bool value = true; }; + template struct is_transform_form3 &)>, Result>::value> > { static constexpr bool value = true; }; + template struct is_transform_form4, Result>::value> > { static constexpr bool value = true; }; + template struct is_transform_form5, Result>::value> > { static constexpr bool value = true; }; + template struct is_transform_form6, Result>::value> > { static constexpr bool value = true; }; + template struct is_transform { static constexpr bool value = is_transform_form1::value || is_transform_form2::value || is_transform_form3::value || is_transform_form4::value || is_transform_form5::value || is_transform_form6::value; }; + + // Determining the result type of a transform function + template struct transform_result; + template struct transform_result::value> > { using type = std::result_of_t &)>; }; + template struct transform_result::value> > { using type = std::result_of_t; }; + template struct transform_result::value> > { using type = std::result_of_t &)>; }; + template struct transform_result::value> > { using type = std::result_of_t; }; + template struct transform_result::value> > { using type = std::result_of_t; }; + template struct transform_result::value> > { using type = std::result_of_t; }; + template using transform_result_t = typename transform_result::type; + + // Mapping method types to delegate types + template struct delegate_type; + template struct delegate_type > > > { using type = read8_delegate; using device_class = emu::detail::read8_device_class_t >; }; + template struct delegate_type > > > { using type = read16_delegate; using device_class = emu::detail::read16_device_class_t >; }; + template struct delegate_type > > > { using type = read32_delegate; using device_class = emu::detail::read32_device_class_t >; }; + template struct delegate_type > > > { using type = read64_delegate; using device_class = emu::detail::read64_device_class_t >; }; + template struct delegate_type > > > { using type = read_line_delegate; using device_class = emu::detail::read_line_device_class_t >; }; + template struct delegate_type > > > { using type = write8_delegate; using device_class = emu::detail::write8_device_class_t >; }; + template struct delegate_type > > > { using type = write16_delegate; using device_class = emu::detail::write16_device_class_t >; }; + template struct delegate_type > > > { using type = write32_delegate; using device_class = emu::detail::write32_device_class_t >; }; + template struct delegate_type > > > { using type = write64_delegate; using device_class = emu::detail::write64_device_class_t >; }; + template struct delegate_type > > > { using type = write_line_delegate; using device_class = emu::detail::write_line_device_class_t >; }; + template using delegate_type_t = typename delegate_type::type; + template using delegate_device_class_t = typename delegate_type::device_class; + + // Invoking transform callbacks + template static std::enable_if_t::value, mask_t, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t &mem_mask) { return std::make_unsigned_t >(cb(space, offset, data, mem_mask)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t &mem_mask) { return std::make_unsigned_t >(cb(space, data, offset)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t &mem_mask) { return std::make_unsigned_t >(cb(offset, data, mem_mask)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t &mem_mask) { return std::make_unsigned_t >(cb(offset, data)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t &mem_mask) { return std::make_unsigned_t >(cb(space, data)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t &mem_mask) { return std::make_unsigned_t >(cb(data)); } + + // Working with devices and interfaces + template static std::enable_if_t::value, const char *> get_tag(T &obj) { return obj.tag(); } + template static std::enable_if_t::value, const char *> get_tag(T &obj) { return obj.device().tag(); } + template static std::enable_if_t, std::add_pointer_t >::value, T &> cast_reference(U &obj) { return downcast(obj); } + template static std::enable_if_t, std::add_pointer_t >::value, T &> cast_reference(U &obj) { return dynamic_cast(obj); } + + /// \brief Base transform helper + /// + /// Provides member functions for setting exclusive-or, mask and + /// shifts. Exclusive-or and mask values are stored; it's assumed + /// that the implementation supports lamba transforms to allow + /// shifts. + template + class transform_base { - void * ptr; - device_t * device; - ioport_port * ioport; - memory_bank * membank; - output_manager::output_item *item; + public: + Impl &exor(std::make_unsigned_t val) { m_exor ^= val; return static_cast(*this); } + Impl &mask(std::make_unsigned_t val) { m_mask = m_inherited_mask ? val : (m_mask & val); m_inherited_mask = false; return static_cast(*this); } + Impl &invert() { return exor(~std::make_unsigned_t(0)); } + + auto rshift(unsigned val) + { + auto trans(static_cast(*this).transform([val] (offs_t offset, T data, std::make_unsigned_t &mem_mask) { mem_mask >>= val; return data >> val; })); + return std::move(trans.mask(m_mask >> val)); + } + auto lshift(unsigned val) + { + auto trans(static_cast(*this).transform([val] (offs_t offset, T data, std::make_unsigned_t &mem_mask) { mem_mask <<= val; return data << val; })); + return std::move(trans.mask(m_mask << val)); + } + auto bit(unsigned val) { return std::move(rshift(val).mask(T(1U))); } + + constexpr std::make_unsigned_t exor() const { return m_exor & m_mask; } + constexpr std::make_unsigned_t mask() const { return m_mask; } + + protected: + constexpr bool need_exor() const { return std::make_unsigned_t(0) != (m_exor & m_mask); } + constexpr bool need_mask() const { return std::make_unsigned_t(~std::make_unsigned_t(0)) != m_mask; } + + constexpr bool inherited_mask() const { return m_inherited_mask; } + + constexpr transform_base(std::make_unsigned_t mask) : m_mask(mask) { } + constexpr transform_base(transform_base const &) = default; + transform_base(transform_base &&) = default; + transform_base &operator=(transform_base const &) = default; + transform_base &operator=(transform_base &&) = default; + + private: + std::make_unsigned_t m_exor = std::make_unsigned_t(0); + std::make_unsigned_t m_mask; + bool m_inherited_mask = true; }; - // configuration - device_t & m_owner; // reference to our owning device - std::reference_wrapper m_base; // device to resolve relative to - callback_type m_type; // type of callback registered - const char * m_target_tag; // tag of target object - u64 m_target_int; // integer value of target object - const char * m_space_tag; // tag of address space device - int m_space_num; // address space number of space device + devcb_base(device_t &owner); + ~devcb_base(); - // derived state - address_space * m_space; // target address space - callback_target m_target; // resolved pointer to target object - int m_rshift; // right shift to apply to data read - u64 m_mask; // mask to apply to data read - const u64 m_defmask; // default mask - u64 m_xor; // XOR to apply to data read + device_t &owner() const { return m_owner; } + + void resolve(); + + address_space &default_space() { assert(m_dflt_space); return *m_dflt_space; } + +private: + device_t &m_owner; + optional_device m_dflt_space_finder; + int m_dflt_space_index; + address_space *m_dflt_space; }; -// ======================> devcb_read_base - +/// \brief Read callback utilities +/// +/// Helpers that don't need to be templated on callback type. class devcb_read_base : public devcb_base { protected: - // construction/destruction - devcb_read_base(device_t &device, u64 defmask, bool chained = false); + // Detecting candidates for read functions + template struct is_read_form1 { static constexpr bool value = false; }; + template struct is_read_form2 { static constexpr bool value = false; }; + template struct is_read_form3 { static constexpr bool value = false; }; + template struct is_read_form4 { static constexpr bool value = false; }; + template struct is_read_form5 { static constexpr bool value = false; }; + template struct is_read_form6 { static constexpr bool value = false; }; + template struct is_read_form1, Result>::value> > { static constexpr bool value = true; }; + template struct is_read_form2, Result>::value> > { static constexpr bool value = true; }; + template struct is_read_form3, Result>::value> > { static constexpr bool value = true; }; + template struct is_read_form4, Result>::value> > { static constexpr bool value = true; }; + template struct is_read_form5, Result>::value> > { static constexpr bool value = true; }; + template struct is_read_form6, Result>::value> > { static constexpr bool value = true; }; + template struct is_read { static constexpr bool value = is_read_form1::value || is_read_form2::value || is_read_form3::value || is_read_form4::value || is_read_form5::value || is_read_form6::value; }; - template struct set_helper - { - static constexpr bool valid = false; - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_LINE; - static void apply(devcb_read_base &devcb, read_line_delegate &&delegate) { devcb.m_readline = std::move(delegate); } - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_8; - static void apply(devcb_read_base &devcb, read8_delegate &&delegate) { devcb.m_read8 = std::move(delegate); } - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_16; - static void apply(devcb_read_base &devcb, read16_delegate &&delegate) { devcb.m_read16 = std::move(delegate); } - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_32; - static void apply(devcb_read_base &devcb, read32_delegate &&delegate) { devcb.m_read32 = std::move(delegate); } - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_64; - static void apply(devcb_read_base &devcb, read64_delegate &&delegate) { devcb.m_read64 = std::move(delegate); } - }; + // Determining the result type of a read function + template struct read_result; + template struct read_result::value> > { using type = std::result_of_t)>; }; + template struct read_result::value> > { using type = std::result_of_t; }; + template struct read_result::value> > { using type = std::result_of_t)>; }; + template struct read_result::value> > { using type = std::result_of_t; }; + template struct read_result::value> > { using type = std::result_of_t; }; + template struct read_result::value> > { using type = std::result_of_t; }; + template using read_result_t = typename read_result::type; -public: - // callback configuration - using devcb_base::set_callback; - template - std::enable_if_t::valid, devcb_read_base &> set_callback(emu::detail::devcb_delegate_initialiser &&desc) - { - if (desc.m_base) reset(*desc.m_base, set_helper::type); - else reset(set_helper::type); - set_helper::apply(*this, std::move(desc.m_delegate)); - return *this; - } - template auto &chain(Params &&... args) { return chain_alloc().set_callback(std::forward(args)...); } - devcb_read_base &chain_alloc(); + // Detecting candidates for read delegates + template struct is_read_method { static constexpr bool value = false; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; - // resolution - void resolve(); - void resolve_safe(u64 none_constant_value); + // Invoking read callbacks + template static std::enable_if_t::value, mask_t, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t mem_mask) { return std::make_unsigned_t >(cb(space, offset, mem_mask)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t mem_mask) { return std::make_unsigned_t >(cb(space, offset)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t mem_mask) { return std::make_unsigned_t >(cb(offset, mem_mask)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t mem_mask) { return std::make_unsigned_t >(cb(offset)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t mem_mask) { return std::make_unsigned_t >(cb(space)); } + template static std::enable_if_t::value, mask_t, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t mem_mask) { return std::make_unsigned_t >(cb()); } - // validity checking - void validity_check(validity_checker &valid) const; + // Delegate characteristics + template struct delegate_traits; + template struct delegate_traits { static constexpr u8 default_mask = ~u8(0); }; + template struct delegate_traits { static constexpr u16 default_mask = ~u16(0); }; + template struct delegate_traits { static constexpr u32 default_mask = ~u32(0); }; + template struct delegate_traits { static constexpr u64 default_mask = ~u64(0); }; + template struct delegate_traits { static constexpr unsigned default_mask = 1U; }; -protected: - // internal helpers - virtual void devcb_reset() override; - inline u64 read(address_space &space, offs_t offset, u64 mask); - -private: - // adapters - u64 read_unresolved_adapter(address_space &space, offs_t offset, u64 mask); - u64 read_line_adapter(address_space &space, offs_t offset, u64 mask); - u64 read8_adapter(address_space &space, offs_t offset, u64 mask); - u64 read16_adapter(address_space &space, offs_t offset, u64 mask); - u64 read32_adapter(address_space &space, offs_t offset, u64 mask); - u64 read64_adapter(address_space &space, offs_t offset, u64 mask); - u64 read_ioport_adapter(address_space &space, offs_t offset, u64 mask); - u64 read_logged_adapter(address_space &space, offs_t offset, u64 mask); - u64 read_constant_adapter(address_space &space, offs_t offset, u64 mask); - - // configuration - read_line_delegate m_readline; // copy of registered line reader - read8_delegate m_read8; // copy of registered 8-bit reader - read16_delegate m_read16; // copy of registered 16-bit reader - read32_delegate m_read32; // copy of registered 32-bit reader - read64_delegate m_read64; // copy of registered 64-bit reader - - // derived state - typedef u64 (devcb_read_base::*adapter_func)(address_space &, offs_t, u64); - adapter_func m_adapter; // actual callback to invoke - std::unique_ptr m_chain; // next callback for chained input + using devcb_base::devcb_base; + ~devcb_read_base(); }; -// ======================> devcb_write_base - +/// \brief Write callback utilities +/// +/// Helpers that don't need to be templated on callback type. class devcb_write_base : public devcb_base { protected: - // construction/destruction - devcb_write_base(device_t &device, u64 defmask, bool chained = false); + // Detecting candidates for write functions + template struct is_write_form1 { static constexpr bool value = false; }; + template struct is_write_form2 { static constexpr bool value = false; }; + template struct is_write_form3 { static constexpr bool value = false; }; + template struct is_write_form4 { static constexpr bool value = false; }; + template struct is_write_form5 { static constexpr bool value = false; }; + template struct is_write_form6 { static constexpr bool value = false; }; + template struct is_write_form1)> > > { static constexpr bool value = true; }; + template struct is_write_form2 > > { static constexpr bool value = true; }; + template struct is_write_form3)> > > { static constexpr bool value = true; }; + template struct is_write_form4 > > { static constexpr bool value = true; }; + template struct is_write_form5 > > { static constexpr bool value = true; }; + template struct is_write_form6 > > { static constexpr bool value = true; }; + template struct is_write { static constexpr bool value = is_write_form1::value || is_write_form2::value || is_write_form3::value || is_write_form4::value || is_write_form5::value || is_write_form6::value; }; - template struct set_helper - { - static constexpr bool valid = false; - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_LINE; - static void apply(devcb_write_base &devcb, write_line_delegate &&delegate) { devcb.m_writeline = std::move(delegate); } - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_8; - static void apply(devcb_write_base &devcb, write8_delegate &&delegate) { devcb.m_write8 = std::move(delegate); } - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_16; - static void apply(devcb_write_base &devcb, write16_delegate &&delegate) { devcb.m_write16 = std::move(delegate); } - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_32; - static void apply(devcb_write_base &devcb, write32_delegate &&delegate) { devcb.m_write32 = std::move(delegate); } - }; - template struct set_helper - { - static constexpr bool valid = true; - static constexpr callback_type type = CALLBACK_64; - static void apply(devcb_write_base &devcb, write64_delegate &&delegate) { devcb.m_write64 = std::move(delegate); } - }; + // Detecting candidates for write delegates + template struct is_write_method { static constexpr bool value = false; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; -public: - // callback configuration - using devcb_base::set_callback; - template - std::enable_if_t::valid, devcb_write_base &> set_callback(emu::detail::devcb_delegate_initialiser &&desc) - { - if (desc.m_base) reset(*desc.m_base, set_helper::type); - else reset(set_helper::type); - set_helper::apply(*this, std::move(desc.m_delegate)); - return *this; - } - template devcb_write_base &set_callback(line_desc desc) - { - if (desc.m_base) reset(*desc.m_base, Type); - else reset(Type); - m_target_tag = desc.m_tag; - m_target_int = desc.m_inputnum; - return *this; - } - template auto &chain(Params &&... args) { return chain_alloc().set_callback(std::forward(args)...); } - devcb_write_base &chain_alloc(); + // Invoking write callbacks + template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(space, offset, data, mem_mask); } + template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(space, data, offset); } + template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(offset, data, mem_mask); } + template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(offset, data); } + template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(space, data); } + template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(data); } - // resolution - void resolve(); - void resolve_safe(); + // Delegate characteristics + template struct delegate_traits; + template struct delegate_traits { using input_t = u8; static constexpr u8 default_mask = ~u8(0); }; + template struct delegate_traits { using input_t = u16; static constexpr u16 default_mask = ~u16(0); }; + template struct delegate_traits { using input_t = u32; static constexpr u32 default_mask = ~u32(0); }; + template struct delegate_traits { using input_t = u64; static constexpr u64 default_mask = ~u64(0); }; + template struct delegate_traits { using input_t = int; static constexpr unsigned default_mask = 1U; }; - // validity checking - void validity_check(validity_checker &valid) const; + using devcb_base::devcb_base; + ~devcb_write_base(); +}; -protected: - // internal helpers - virtual void devcb_reset() override; - inline void write(address_space &space, offs_t offset, u64 data, u64 mask); +/// \brief Read callback helper +/// +/// Allows binding a variety of signatures, composing a result from +/// multiple callbacks, and chained arbitrary transforms. Transforms +/// may modify the offset and mask. +template DefaultMask = std::make_unsigned_t(~std::make_unsigned_t(0))> +class devcb_read : public devcb_read_base +{ private: - // adapters - void write_unresolved_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_line_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write8_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write16_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write32_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write64_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_ioport_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_membank_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_output_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_logged_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_noop_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_inputline_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_assertline_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_clearline_adapter(address_space &space, offs_t offset, u64 data, u64 mask); - void write_holdline_adapter(address_space &space, offs_t offset, u64 data, u64 mask); + using func_t = std::function)>; - // configuration - write_line_delegate m_writeline; // copy of registered line writer - write8_delegate m_write8; // copy of registered 8-bit writer - write16_delegate m_write16; // copy of registered 16-bit writer - write32_delegate m_write32; // copy of registered 32-bit writer - write64_delegate m_write64; // copy of registered 64-bit writer + class creator + { + public: + using ptr = std::unique_ptr; - // derived state - typedef void (devcb_write_base::*adapter_func)(address_space &, offs_t, u64, u64); - adapter_func m_adapter; // actual callback to invoke - std::unique_ptr m_chain; // next callback for chained output -}; + virtual ~creator() { } + virtual void validity_check(validity_checker &valid) const = 0; + virtual func_t create() = 0; + std::make_unsigned_t mask() const { return m_mask; } -// ======================> devcb_read_line + protected: + creator(std::make_unsigned_t mask) : m_mask(mask) { } + + std::make_unsigned_t m_mask; + }; + + template + class creator_impl : public creator + { + public: + creator_impl(T &&builder) : creator(builder.mask()), m_builder(std::move(builder)) { } + + virtual void validity_check(validity_checker &valid) const override { m_builder.validity_check(valid); } + + virtual func_t create() override + { + func_t result; + m_builder.build([&result] (auto &&f) { result = [cb = std::move(f)] (address_space &space, offs_t offset, typename T::input_mask_t mem_mask) { return cb(space, offset, mem_mask); }; }); + return std::move(result); + } + + private: + T m_builder; + }; + + class log_creator : public creator + { + public: + log_creator(device_t &devbase, std::string &&message) : creator(0U), m_devbase(devbase), m_message(std::move(message)) { } + + virtual void validity_check(validity_checker &valid) const override { } + + virtual func_t create() override + { + return + [&devbase = m_devbase, message = std::move(m_message)] (address_space &space, offs_t offset, std::make_unsigned_t mem_mask) + { + devbase.logerror("%s: %s\n", devbase.machine().describe_context(), message); + return Result(0); + }; + } + + private: + device_t &m_devbase; + std::string m_message; + }; + + class builder_base + { + protected: + builder_base(devcb_read &target, bool append) : m_target(target), m_append(append) { } + builder_base(builder_base const &) = delete; + builder_base(builder_base &&) = default; + ~builder_base() { assert(m_consumed); } + builder_base &operator=(builder_base const &) = delete; + builder_base &operator=(builder_base &&) = default; + + void consume() { m_consumed = true; } + void built() { assert(!m_built); m_built = true; } + + template + void register_creator() + { + if (!m_consumed) + { + if (!m_append) + m_target.m_creators.clear(); + consume(); + m_target.m_creators.emplace_back(std::make_unique >(std::move(static_cast(*this)))); + } + } + + devcb_read &m_target; + bool const m_append; + bool m_consumed = false; + bool m_built = false; + }; + + template + class transform_builder : public builder_base, public transform_base, Result>, transform_builder > + { + public: + template friend class transform_builder; + + using input_t = typename Source::output_t; + using output_t = mask_t, Result>; + using input_mask_t = mask_t; + + template + transform_builder(devcb_read &target, bool append, Source &&src, T &&cb, output_t mask) + : builder_base(target, append) + , transform_base(mask) + , m_src(std::move(src)) + , m_cb(std::forward(cb)) + { m_src.consume(); } + transform_builder(transform_builder &&that) + : builder_base(std::move(that)) + , transform_base(std::move(that)) + , m_src(std::move(that.m_src)) + , m_cb(std::move(that.m_cb)) + { + m_src.consume(); + that.consume(); + that.built(); + } + ~transform_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, transform_builder > > transform(T &&cb) + { + output_t const m(this->mask()); + if (this->inherited_mask()) + this->mask(std::make_unsigned_t >(~std::make_unsigned_t >(0))); + return transform_builder >(this->m_target, this->m_append, std::move(*this), std::forward(cb), m); + } + + void validity_check(validity_checker &valid) const { m_src.validity_check(valid); } + + template + void build(T &&chain) + { + assert(this->m_consumed); + auto wrap([this, c = std::forward(chain)] (auto &&f) mutable { this->build(std::move(c), std::move(f)); }); + m_src.build(std::move(wrap)); + } + + private: + transform_builder(transform_builder const &) = delete; + transform_builder &operator=(transform_builder const &) = delete; + transform_builder &operator=(transform_builder &&that) = delete; + + template + void build(T &&chain, U &&f) + { + assert(this->m_consumed); + this->built(); + chain( + [src = std::forward(f), cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t &offset, input_mask_t &mem_mask) + { + typename Source::input_mask_t source_mask(mem_mask); + auto const data(src(space, offset, source_mask)); + mem_mask = source_mask & mask; + return (devcb_read::invoke_transform(cb, space, offset, data, mem_mask) ^ exor) & mask; + }); + } + + Source m_src; + Func m_cb; + }; + + template + class functoid_builder : public builder_base, public transform_base, Result>, functoid_builder > + { + public: + template friend class transform_builder; + + using output_t = mask_t, Result>; + using input_mask_t = std::make_unsigned_t; + + template + functoid_builder(devcb_read &target, bool append, T &&cb) + : builder_base(target, append) + , transform_base(DefaultMask) + , m_cb(std::forward(cb)) + { } + functoid_builder(functoid_builder &&that) + : builder_base(std::move(that)) + , transform_base(std::move(that)) + , m_cb(std::move(that.m_cb)) + { + that.consume(); + that.built(); + } + ~functoid_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, transform_builder > > transform(T &&cb) + { + output_t const m(this->mask()); + if (this->inherited_mask()) + this->mask(std::make_unsigned_t >(~std::make_unsigned_t >(0))); + return transform_builder >(this->m_target, this->m_append, std::move(*this), std::forward(cb), m); + } + + void validity_check(validity_checker &valid) const { } + + template + void build(T &&chain) + { + assert(this->m_consumed); + this->built(); + chain( + [cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_mask_t mem_mask) + { return (devcb_read::invoke_read(cb, space, offset, mem_mask & mask) ^ exor) & mask; }); + } + + private: + functoid_builder(functoid_builder const &) = delete; + functoid_builder &operator=(functoid_builder const &) = delete; + functoid_builder &operator=(functoid_builder &&that) = delete; + + Func m_cb; + }; + + template + class delegate_builder : public builder_base, public transform_base, Result>, delegate_builder > + { + public: + template friend class transform_builder; + + using output_t = mask_t, Result>; + using input_mask_t = std::make_unsigned_t; + + template + delegate_builder(devcb_read &target, bool append, device_t &devbase, char const *tag, T &&func, char const *name) + : builder_base(target, append) + , transform_base(DefaultMask & delegate_traits::default_mask) + , m_devbase(devbase) + , m_delegate(std::forward(func), name, tag, std::add_pointer_t >(nullptr)) + { } + template + delegate_builder(devcb_read &target, bool append, device_t &devbase, devcb_read::delegate_device_class_t &obj, T &&func, char const *name) + : builder_base(target, append) + , transform_base(DefaultMask & delegate_traits::default_mask) + , m_devbase(devbase) + , m_delegate(std::forward(func), name, devcb_read::get_tag(obj), &obj) + { } + delegate_builder(delegate_builder &&that) + : builder_base(std::move(that)) + , transform_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_delegate(std::move(that.m_delegate)) + { + that.consume(); + that.built(); + } + ~delegate_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, transform_builder > > transform(T &&cb) + { + output_t const m(this->mask()); + if (this->inherited_mask()) + this->mask(delegate_traits::default_mask); + return transform_builder >(this->m_target, this->m_append, std::move(*this), std::forward(cb), m); + } + + void validity_check(validity_checker &valid) const + { + if (!m_devbase.subdevice(m_delegate.device_name())) + osd_printf_error("Read callback bound to non-existent object tag %s (%s)\n", m_delegate.device_name(), m_delegate.name()); + } + + template + void build(T &&chain) + { + assert(this->m_consumed); + this->built(); + m_delegate.bind_relative_to(m_devbase); + chain( + [cb = std::move(this->m_delegate), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_mask_t mem_mask) + { return (devcb_read::invoke_read(cb, space, offset, mem_mask & mask) ^ exor) & mask; }); + } + + private: + delegate_builder(delegate_builder const &) = delete; + delegate_builder &operator=(delegate_builder const &) = delete; + delegate_builder &operator=(delegate_builder &&that) = delete; + + device_t &m_devbase; + Delegate m_delegate; + }; + + class ioport_builder : public builder_base, public transform_base, ioport_builder> + { + public: + template friend class transform_builder; + + using output_t = mask_t; + using input_mask_t = std::make_unsigned_t; + + ioport_builder(devcb_read &target, bool append, device_t &devbase, std::string &&tag) + : builder_base(target, append) + , transform_base(DefaultMask) + , m_devbase(devbase) + , m_tag(std::move(tag)) + { } + ioport_builder(ioport_builder &&that) + : builder_base(std::move(that)) + , transform_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + ~ioport_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, transform_builder > > transform(T &&cb) + { + output_t const m(this->mask()); + if (this->inherited_mask()) + this->mask(std::make_unsigned_t(~std::make_unsigned_t(0))); + return transform_builder >(this->m_target, this->m_append, std::move(*this), std::forward(cb), m); + } + + void validity_check(validity_checker &valid) const { } + + template + void build(T &&chain) + { + assert(this->m_consumed); + this->built(); + ioport_port *const ioport(m_devbase.ioport(m_tag.c_str())); + if (!ioport) + throw emu_fatalerror("Read callback bound to non-existent I/O port %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name()); + chain( + [&port = *ioport, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_mask_t mem_mask) + { return (port.read() ^ exor) & mask; }); + } + + private: + ioport_builder(ioport_builder const &) = delete; + ioport_builder &operator=(ioport_builder const &) = delete; + ioport_builder &operator=(ioport_builder &&that) = delete; + + device_t &m_devbase; + std::string m_tag; + }; + + class binder + { + public: + binder(devcb_read &target) : m_target(target) { } + binder(binder const &) = delete; + binder(binder &&that) : m_target(that.m_target), m_append(that.m_append), m_used(that.m_used) { that.m_used = true; } + binder &operator=(binder const &) = delete; + binder &operator=(binder &&) = delete; + + template + std::enable_if_t::value, functoid_builder > > set(T &&cb) + { + set_used(); + return functoid_builder >(m_target, m_append, std::forward(cb)); + } + + template + std::enable_if_t::value, delegate_builder > > set(T &&func, char const *name) + { + set_used(); + return delegate_builder >(m_target, m_append, m_target.owner().mconfig().current_device(), DEVICE_SELF, std::forward(func), name); + } + + template + std::enable_if_t::value, delegate_builder > > set(char const *tag, T &&func, char const *name) + { + set_used(); + return delegate_builder >(m_target, m_append, m_target.owner().mconfig().current_device(), tag, std::forward(func), name); + } + + template + std::enable_if_t::value, delegate_builder > > set(U &obj, T &&func, char const *name) + { + set_used(); + return delegate_builder >(m_target, m_append, m_target.owner().mconfig().current_device(), devcb_read::cast_reference >(obj), std::forward(func), name); + } + + template + std::enable_if_t::value, delegate_builder > > set(device_finder &finder, T &&func, char const *name) + { + set_used(); + std::pair const target(finder.finder_target()); + return delegate_builder >(m_target, m_append, target.first, target.second, std::forward(func), name); + } + + template + std::enable_if_t::value, delegate_builder > > set(device_finder const &finder, T &&func, char const *name) + { + set_used(); + std::pair const target(finder.finder_target()); + return delegate_builder >(m_target, m_append, target.first, target.second, std::forward(func), name); + } + + template + auto append(Params &&... args) + { + m_append = true; + return set(std::forward(args)...); + } + + template + ioport_builder set_ioport(Params &&... args) + { + set_used(); + return ioport_builder(m_target, m_append, m_target.owner().mconfig().current_device(), std::string(std::forward(args)...)); + } + + template + ioport_builder set_ioport(ioport_finder &finder) + { + set_used(); + std::pair const target(finder.finder_target()); + return ioport_builder(m_target, m_append, target.first, std::string(target.second)); + } + + template + ioport_builder set_ioport(ioport_finder const &finder) + { + set_used(); + std::pair const target(finder.finder_target()); + return ioport_builder(m_target, m_append, target.first, std::string(target.second)); + } + + template + ioport_builder append_ioport(Params &&... args) + { + m_append = true; + return set_ioport(std::forward(args)...); + } + + template + void set_log(device_t &devbase, Params &&... args) + { + set_used(); + if (!m_append) + m_target.m_creators.clear(); + m_target.m_creators.emplace_back(std::make_unique(devbase, std::string(std::forward(args)...))); + } + + template + std::enable_if_t >::value> set_log(T &devbase, Params &&... args) + { + set_log(static_cast(devbase), std::forward(args)...); + } + + template + std::enable_if_t >::value> set_log(T &devbase, Params &&... args) + { + set_log(devbase.device(), std::forward(args)...); + } + + template + void set_log(Params &&... args) + { + set_log(m_target.owner().mconfig().current_device(), std::forward(args)...); + } + + template + void append_log(Params &&... args) + { + m_append = true; + set_log(std::forward(args)...); + } + + auto set_constant(Result val) { return set([val] () { return val; }); } + auto append_constant(Result val) { return append([val] () { return val; }); } + + private: + void set_used() { assert(!m_used); m_used = true; } + + devcb_read &m_target; + bool m_append = false; + bool m_used = false; + }; + + std::vector m_functions; + std::vector m_creators; -class devcb_read_line : public devcb_read_base -{ public: - devcb_read_line(device_t &device) : devcb_read_base(device, 1) { } - int operator()() { return read(*m_space, 0, 0xffU) & 1; } - int operator()(address_space &space) { return read((m_space_tag != nullptr) ? *m_space : space, 0, 0xffU) & 1; } + devcb_read(device_t &owner); + + binder bind(); + void reset(); + + // legacy syntax support - will be removed + template + devcb_base &set_callback(std::tuple const &desc) + { + bind().set(std::forward(std::get<0>(desc)), std::forward(std::get<1>(desc)), std::forward(std::get<2>(desc))); + return *this; + } + devcb_base &set_callback(DEVCB_IOPORT &&desc) { bind().set_ioport(desc.m_tag); return *this; } + template + devcb_base &set_callback(devcb_constant_t &&desc) + { + bind().set_constant(std::move(desc.m_value)); + return *this; + } + + virtual void validity_check(validity_checker &valid) const override; + + void resolve(); + void resolve_safe(Result dflt); + + Result operator()(address_space &space, offs_t offset = 0, std::make_unsigned_t mem_mask = DefaultMask); + Result operator()(offs_t offset, std::make_unsigned_t mem_mask = DefaultMask); + Result operator()(); + + bool isnull() const { return m_functions.empty() && m_creators.empty(); } + explicit operator bool() const { return !m_functions.empty(); } }; - -// ======================> devcb_read8 - -class devcb_read8 : public devcb_read_base +template DefaultMask> +devcb_read::devcb_read(device_t &owner) + : devcb_read_base(owner) { -public: - devcb_read8(device_t &device) : devcb_read_base(device, 0xff) { } - u8 operator()(offs_t offset = 0, u8 mask = 0xff) { return read(*m_space, offset, mask) & mask; } - u8 operator()(address_space &space, offs_t offset = 0, u8 mask = 0xff) { return read((m_space_tag != nullptr) ? *m_space : space, offset, mask) & mask; } -}; +} - -// ======================> devcb_read16 - -class devcb_read16 : public devcb_read_base +template DefaultMask> +typename devcb_read::binder devcb_read::bind() { -public: - devcb_read16(device_t &device) : devcb_read_base(device, 0xffff) { } - u16 operator()(offs_t offset = 0, u16 mask = 0xffff) { return read(*m_space, offset, mask) & mask; } - u16 operator()(address_space &space, offs_t offset = 0, u16 mask = 0xffff) { return read((m_space_tag != nullptr) ? *m_space : space, offset, mask) & mask; } -}; + return binder(*this); +} - -// ======================> devcb_read32 - -class devcb_read32 : public devcb_read_base +template DefaultMask> +void devcb_read::reset() { -public: - devcb_read32(device_t &device) : devcb_read_base(device, 0xffffffff) { } - u32 operator()(offs_t offset = 0, u32 mask = 0xffffffff) { return read(*m_space, offset, mask) & mask; } - u32 operator()(address_space &space, offs_t offset = 0, u32 mask = 0xffffffff) { return read((m_space_tag != nullptr) ? *m_space : space, offset, mask) & mask; } -}; + assert(m_functions.empty()); + m_creators.clear(); +} - -// ======================> devcb_read64 - -class devcb_read64 : public devcb_read_base +template DefaultMask> +void devcb_read::validity_check(validity_checker &valid) const { -public: - devcb_read64(device_t &device) : devcb_read_base(device, 0xffffffffffffffffU) { } - u64 operator()(offs_t offset = 0, u64 mask = 0xffffffffffffffffU) { return read(*m_space, offset, mask) & mask; } - u64 operator()(address_space &space, offs_t offset = 0, u64 mask = 0xffffffffffffffffU) { return read((m_space_tag != nullptr) ? *m_space : space, offset, mask) & mask; } -}; + assert(m_functions.empty()); + devcb_read_base::validity_check(valid); + for (typename std::vector::const_iterator i = m_creators.begin(); m_creators.end() != i; ++i) + { + (*i)->validity_check(valid); + std::make_unsigned_t const m((*i)->mask()); + for (typename std::vector::const_iterator j = std::next(i); m_creators.end() != j; ++j) + { + std::make_unsigned_t const n((*j)->mask()); + if (m & n) + osd_printf_error("Read callback masks %lX and %lX overlap\n", static_cast(m), static_cast(n)); // FIXME: doesn't work with u64 + } + } +} - -// ======================> devcb_write_line - -class devcb_write_line : public devcb_write_base +template DefaultMask> +void devcb_read::resolve() { -public: - devcb_write_line(device_t &device) : devcb_write_base(device, 1) { } - void operator()(int state) { write(*m_space, 0, state & 1, 0xffU); } - void operator()(address_space &space, int state) { write((m_space_tag != nullptr) ? *m_space : space, 0, state & 1, 0xffU); } -}; + assert(m_functions.empty()); + devcb_read_base::resolve(); + m_functions.reserve(m_creators.size()); + for (typename creator::ptr const &c : m_creators) + m_functions.emplace_back(c->create()); + m_creators.clear(); +} - -// ======================> devcb_write8 - -class devcb_write8 : public devcb_write_base +template DefaultMask> +void devcb_read::resolve_safe(Result dflt) { -public: - devcb_write8(device_t &device) : devcb_write_base(device, 0xff) { } - void operator()(u8 data, u8 mask = 0xff) { write(*m_space, 0, data, mask); } - void operator()(offs_t offset, u8 data, u8 mask = 0xff) { write(*m_space, offset, data, mask); } - void operator()(address_space &space, offs_t offset, u8 data, u8 mask = 0xff) { write((m_space_tag != nullptr) ? *m_space : space, offset, data, mask); } -}; + resolve(); + if (m_functions.empty()) + m_functions.emplace_back([dflt] (address_space &space, offs_t offset, std::make_unsigned_t mem_mask) { return dflt; }); +} - -// ======================> devcb_write16 - -class devcb_write16 : public devcb_write_base +template DefaultMask> +Result devcb_read::operator()(address_space &space, offs_t offset, std::make_unsigned_t mem_mask) { -public: - devcb_write16(device_t &device) : devcb_write_base(device, 0xffff) { } - void operator()(u16 data, u16 mask = 0xffff) { write(*m_space, 0, data, mask); } - void operator()(offs_t offset, u16 data, u16 mask = 0xffff) { write(*m_space, offset, data, mask); } - void operator()(address_space &space, offs_t offset, u16 data, u16 mask = 0xffff) { write((m_space_tag != nullptr) ? *m_space : space, offset, data, mask); } -}; - - -// ======================> devcb_write32 - -class devcb_write32 : public devcb_write_base -{ -public: - devcb_write32(device_t &device) : devcb_write_base(device, 0xffffffff) { } - void operator()(u32 data, u32 mask = 0xffffffff) { write(*m_space, 0, data, mask); } - void operator()(offs_t offset, u32 data, u32 mask = 0xffffffff) { write(*m_space, offset, data, mask); } - void operator()(address_space &space, offs_t offset, u32 data, u32 mask = 0xffffffff) { write((m_space_tag != nullptr) ? *m_space : space, offset, data, mask); } -}; - - -// ======================> devcb_write64 - -class devcb_write64 : public devcb_write_base -{ -public: - devcb_write64(device_t &device) : devcb_write_base(device, 0xffffffffffffffffU) { } - void operator()(u64 data, u64 mask = 0xffffffffffffffffU) { write(*m_space, 0, data, mask); } - void operator()(offs_t offset, u64 data, u64 mask = 0xffffffffffffffffU) { write(*m_space, offset, data, mask); } - void operator()(address_space &space, offs_t offset, u64 data, u64 mask = 0xffffffffffffffffU) { write((m_space_tag != nullptr) ? *m_space : space, offset, data, mask); } -}; - - - -//************************************************************************** -// INLINE FUNCTIONS -//************************************************************************** - -//------------------------------------------------- -// read - generic read callback dispatch -//------------------------------------------------- - -inline u64 devcb_read_base::read(address_space &space, offs_t offset, u64 mask) -{ - u64 result = (this->*m_adapter)(space, offset, mask); - if (m_chain != nullptr) - result |= m_chain->read(space, offset, mask); + assert(m_creators.empty() && !m_functions.empty()); + typename std::vector::const_iterator it(m_functions.begin()); + std::make_unsigned_t result((*it)(space, offset, mem_mask)); + while (m_functions.end() != ++it) + result |= (*it)(space, offset, mem_mask); return result; } - -//------------------------------------------------- -// write - generic write callback dispatch -//------------------------------------------------- - -inline void devcb_write_base::write(address_space &space, offs_t offset, u64 data, u64 mask) +template DefaultMask> +Result devcb_read::operator()(offs_t offset, std::make_unsigned_t mem_mask) { - (this->*m_adapter)(space, offset, data, mask); - if (m_chain != nullptr) - m_chain->write(space, offset, data, mask); + return this->operator()(this->default_space(), offset, mem_mask); +} + +template DefaultMask> +Result devcb_read::operator()() +{ + return this->operator()(this->default_space(), 0U, DefaultMask); } -//------------------------------------------------- -// wrappers for ioports, constants, and loggers -//------------------------------------------------- +/// \brief Write callback helper +/// +/// Allows binding a variety of signatures, sending the value to +/// multiple callbacks, and chained arbitrary transforms. Transforms +/// may modify the offset and mask. +template DefaultMask = std::make_unsigned_t(~std::make_unsigned_t(0))> +class devcb_write : public devcb_write_base +{ +private: + using func_t = std::function)>; -#define DEVCB_NOOP devcb_base::null_desc{ } -template inline devcb_base::ioport_desc DEVCB_IOPORT(Params &&... args) { return emu::detail::devcb_tag_desc_creator::create(std::forward(args)...); } -template inline devcb_base::membank_desc DEVCB_MEMBANK(Params &&... args) { return emu::detail::devcb_tag_desc_creator::create(std::forward(args)...); } -template inline devcb_base::output_desc DEVCB_OUTPUT(Params &&... args) { return emu::detail::devcb_tag_desc_creator::create(std::forward(args)...); } -inline devcb_base::constant_desc DEVCB_CONSTANT(u64 value) { return devcb_base::constant_desc{ value }; } -inline devcb_base::logger_desc DEVCB_LOGGER(char const *string) { return devcb_base::logger_desc{ string }; } -template inline devcb_base::inputline_desc DEVCB_INPUTLINE(Params &&... args) { return emu::detail::devcb_line_desc_creator::create(std::forward(args)...); } -template inline devcb_base::assertline_desc DEVCB_ASSERTLINE(Params &&... args) { return emu::detail::devcb_line_desc_creator::create(std::forward(args)...); } -template inline devcb_base::clearline_desc DEVCB_CLEARLINE(Params &&... args) { return emu::detail::devcb_line_desc_creator::create(std::forward(args)...); } -template inline devcb_base::holdline_desc DEVCB_HOLDLINE(Params &&... args) { return emu::detail::devcb_line_desc_creator::create(std::forward(args)...); } -#define DEVCB_VCC DEVCB_CONSTANT(1) -#define DEVCB_GND DEVCB_CONSTANT(0) + class creator + { + public: + using ptr = std::unique_ptr; + + virtual ~creator() { } + virtual void validity_check(validity_checker &valid) const = 0; + virtual func_t create() = 0; + }; + + template + class creator_impl : public creator + { + public: + creator_impl(T &&builder) : m_builder(std::move(builder)) { } + + virtual void validity_check(validity_checker &valid) const override { m_builder.validity_check(valid); } + + virtual func_t create() override + { + return [cb = m_builder.build()] (address_space &space, offs_t offset, Input data, std::make_unsigned_t mem_mask) { cb(space, offset, data, mem_mask); }; + } + + private: + T m_builder; + }; + + class nop_creator : public creator + { + public: + virtual void validity_check(validity_checker &valid) const override { } + virtual func_t create() override { return [] (address_space &space, offs_t offset, Input data, std::make_unsigned_t mem_mask) { }; } + }; + + class builder_base + { + protected: + builder_base(devcb_write &target, bool append) : m_target(target), m_append(append) { } + builder_base(builder_base const &) = delete; + builder_base(builder_base &&) = default; + ~builder_base() { assert(m_consumed); } + builder_base &operator=(builder_base const &) = delete; + builder_base &operator=(builder_base &&) = default; + + void consume() { m_consumed = true; } + void built() { assert(!m_built); m_built = true; } + + template + void register_creator() + { + if (!m_consumed) + { + if (!m_append) + m_target.m_creators.clear(); + consume(); + m_target.m_creators.emplace_back(std::make_unique >(std::move(static_cast(*this)))); + } + } + + devcb_write &m_target; + bool const m_append; + bool m_consumed = false; + bool m_built = false; + }; + + template + class transform_builder : public builder_base, public transform_base, typename Source::output_t>, transform_builder > + { + public: + template friend class transform_builder; + + using input_t = typename Source::output_t; + using output_t = mask_t, typename Source::output_t>; + + template + transform_builder(devcb_write &target, bool append, Source &&src, T &&cb, output_t mask) + : builder_base(target, append) + , transform_base(mask) + , m_src(std::move(src)) + , m_cb(std::forward(cb)) + { m_src.consume(); } + transform_builder(transform_builder &&that) + : builder_base(std::move(that)) + , transform_base(std::move(that)) + , m_src(std::move(that.m_src)) + , m_cb(std::move(that.m_cb)) + { + m_src.consume(); + that.consume(); + that.built(); + } + ~transform_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, transform_builder > > transform(T &&cb) + { + return transform_builder >(this->m_target, this->m_append, std::move(*this), std::forward(cb), this->mask()); + } + + auto build() + { + assert(this->m_consumed); + this->built(); + return m_src.build( + [cb = std::move(m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t &offset, input_t data, std::make_unsigned_t &mem_mask) + { + auto const trans(devcb_write::invoke_transform(cb, space, offset, data, mem_mask)); + mem_mask &= mask; + return (trans ^ exor) & mask; + }); + } + + void validity_check(validity_checker &valid) const { m_src.validity_check(valid); } + + private: + transform_builder(transform_builder const &) = delete; + transform_builder &operator=(transform_builder const &) = delete; + transform_builder &operator=(transform_builder &&that) = delete; + + template + auto build(T &&chain) + { + assert(this->m_consumed); + this->built(); + return m_src.build( + [f = std::move(chain), cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t &offset, input_t data, std::make_unsigned_t &mem_mask) + { + auto const trans(devcb_write::invoke_transform(cb, space, offset, data, mem_mask)); + output_t out_mask(mem_mask & mask); + return f(space, offset, (trans ^ exor) & mask, out_mask); + }); + } + + Source m_src; + Func m_cb; + }; + + template + class first_transform_builder : public builder_base, public transform_base, typename Sink::input_t>, first_transform_builder > + { + public: + template friend class transform_builder; + + using input_t = typename Sink::input_t; + using output_t = mask_t, typename Sink::input_t>; + + template + first_transform_builder(devcb_write &target, bool append, Sink &&sink, T &&cb, std::make_unsigned_t in_exor, std::make_unsigned_t in_mask) + : builder_base(target, append) + , transform_base(DefaultMask) + , m_sink(std::move(sink)) + , m_cb(std::forward(cb)) + , m_in_exor(in_exor & in_mask) + , m_in_mask(in_mask) + { m_sink.consume(); } + first_transform_builder(first_transform_builder &&that) + : builder_base(std::move(that)) + , transform_base(std::move(that)) + , m_sink(std::move(that.m_sink)) + , m_cb(std::move(that.m_cb)) + , m_in_exor(that.m_in_exor) + , m_in_mask(that.m_in_mask) + { + m_sink.consume(); + that.consume(); + that.built(); + } + ~first_transform_builder() { this->template register_creator(); } + + void validity_check(validity_checker &valid) const { m_sink.validity_check(valid); } + + template + std::enable_if_t::value, transform_builder > > transform(T &&cb) + { + return transform_builder >(this->m_target, this->m_append, std::move(*this), std::forward(cb), this->mask()); + } + + auto build() + { + assert(this->m_consumed); + this->built(); + return + [sink = m_sink.build(), cb = std::move(this->m_cb), in_exor = m_in_exor, in_mask = m_in_mask, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { + data = (data ^ in_exor) & in_mask; + mem_mask &= in_mask; + auto const trans(devcb_write::invoke_transform(cb, space, offset, data, mem_mask)); + mem_mask &= mask; + sink(space, offset, (trans ^ exor) & mask, mem_mask); + }; + } + + private: + first_transform_builder(first_transform_builder const &) = delete; + first_transform_builder operator=(first_transform_builder const &) = delete; + first_transform_builder operator=(first_transform_builder &&that) = delete; + + template + auto build(T &&chain) + { + assert(this->m_consumed); + this->built(); + return + [f = std::move(chain), sink = m_sink.build(), cb = std::move(this->m_cb), in_exor = m_in_exor, in_mask = m_in_mask, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { + data = (data ^ in_exor) & in_mask; + mem_mask &= in_mask; + auto const trans_1(devcb_write::invoke_transform(cb, space, offset, data, mem_mask)); + output_t out_mask(mem_mask & mask); + auto const trans_n(f(space, offset, (trans_1 ^ exor) & mask, out_mask)); + sink(space, offset, trans_n, out_mask); + }; + } + + Sink m_sink; + Func m_cb; + std::make_unsigned_t const m_in_exor, m_in_mask; + }; + + template + class functoid_builder : public builder_base, public transform_base, functoid_builder > + { + private: + class wrapped_builder : public builder_base + { + public: + template friend class first_transform_builder; + + using input_t = Input; + + wrapped_builder(functoid_builder &&that) : builder_base(std::move(that)), m_cb(std::move(that.m_cb)) { that.consume(); that.built(); } + wrapped_builder(wrapped_builder &&that) : builder_base(std::move(that)), m_cb(std::move(that.m_cb)) { that.consume(); that.built(); } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + return + [cb = std::move(this->m_cb)] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { devcb_write::invoke_write(cb, space, offset, data, mem_mask); }; + } + + private: + wrapped_builder(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder &&that) = delete; + + Func m_cb; + }; + + functoid_builder(functoid_builder const &) = delete; + functoid_builder &operator=(functoid_builder const &) = delete; + functoid_builder &operator=(functoid_builder &&that) = delete; + + Func m_cb; + + public: + using input_t = Input; + + template + functoid_builder(devcb_write &target, bool append, T &&cb) + : builder_base(target, append) + , transform_base, functoid_builder>(DefaultMask) + , m_cb(std::forward(cb)) + { } + functoid_builder(functoid_builder &&that) + : builder_base(std::move(that)) + , transform_base, functoid_builder>(std::move(that)) + , m_cb(std::move(that.m_cb)) + { + that.consume(); + that.built(); + } + ~functoid_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, first_transform_builder > > transform(T &&cb) + { + return first_transform_builder >(this->m_target, this->m_append, wrapped_builder(std::move(*this)), std::forward(cb), this->exor(), this->mask()); + } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + return + [cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { devcb_write::invoke_write(cb, space, offset, (data ^ exor) & mask, mem_mask & mask); }; + } + }; + + template + class delegate_builder : public builder_base, public transform_base::input_t>, delegate_builder > + { + private: + class wrapped_builder : public builder_base + { + public: + template friend class first_transform_builder; + + using input_t = intermediate_t::input_t>; + + wrapped_builder(delegate_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_delegate(std::move(that.m_delegate)) + { + that.consume(); + that.built(); + } + wrapped_builder(wrapped_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_delegate(std::move(that.m_delegate)) + { + that.consume(); + that.built(); + } + + void validity_check(validity_checker &valid) const + { + if (!m_devbase.subdevice(m_delegate.device_name())) + osd_printf_error("Write callback bound to non-existent object tag %s (%s)\n", m_delegate.device_name(), m_delegate.name()); + } + + auto build() + { + assert(this->m_consumed); + this->built(); + m_delegate.bind_relative_to(m_devbase); + return + [cb = std::move(this->m_delegate)] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { devcb_write::invoke_write(cb, space, offset, data, mem_mask); }; + } + + private: + wrapped_builder(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder &&that) = delete; + + device_t &m_devbase; + Delegate m_delegate; + }; + + delegate_builder(delegate_builder const &) = delete; + delegate_builder &operator=(delegate_builder const &) = delete; + delegate_builder &operator=(delegate_builder &&that) = delete; + + device_t &m_devbase; + Delegate m_delegate; + + public: + using input_t = intermediate_t::input_t>; + + template + delegate_builder(devcb_write &target, bool append, device_t &devbase, char const *tag, T &&func, char const *name) + : builder_base(target, append) + , transform_base::input_t>, delegate_builder>(DefaultMask & delegate_traits::default_mask) + , m_devbase(devbase) + , m_delegate(std::forward(func), name, tag, std::add_pointer_t >(nullptr)) + { } + template + delegate_builder(devcb_write &target, bool append, device_t &devbase, devcb_write::delegate_device_class_t &obj, T &&func, char const *name) + : builder_base(target, append) + , transform_base::input_t>, delegate_builder>(DefaultMask & delegate_traits::default_mask) + , m_devbase(devbase) + , m_delegate(std::forward(func), name, devcb_write::get_tag(obj), &obj) + { } + delegate_builder(delegate_builder &&that) + : builder_base(std::move(that)) + , transform_base::input_t>, delegate_builder>(std::move(that)) + , m_devbase(that.m_devbase) + , m_delegate(std::move(that.m_delegate)) + { + that.consume(); + that.built(); + } + ~delegate_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, first_transform_builder > > transform(T &&cb) + { + return first_transform_builder >(this->m_target, this->m_append, wrapped_builder(std::move(*this)), std::forward(cb), this->exor(), this->mask()); + } + + void validity_check(validity_checker &valid) const + { + if (!m_devbase.subdevice(m_delegate.device_name())) + osd_printf_error("Write callback bound to non-existent object tag %s (%s)\n", m_delegate.device_name(), m_delegate.name()); + } + + auto build() + { + assert(this->m_consumed); + this->built(); + m_delegate.bind_relative_to(m_devbase); + return + [cb = std::move(this->m_delegate), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { devcb_write::invoke_write(cb, space, offset, (data ^ exor) & mask, mem_mask & mask); }; + } + }; + + class inputline_builder : public builder_base, public transform_base, inputline_builder> + { + private: + class wrapped_builder : public builder_base + { + public: + template friend class first_transform_builder; + + using input_t = intermediate_t; + + wrapped_builder(inputline_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(that.m_tag) + , m_exec(that.m_exec) + , m_linenum(that.m_linenum) + { + that.consume(); + that.built(); + } + wrapped_builder(wrapped_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(that.m_tag) + , m_exec(that.m_exec) + , m_linenum(that.m_linenum) + { + that.consume(); + that.built(); + } + + void validity_check(validity_checker &valid) const + { + if (!m_exec) + { + device_t *const device(m_devbase.subdevice(m_tag)); + if (!device) + osd_printf_error("Write callback bound to non-existent object tag %s\n", m_tag); + else if (!dynamic_cast(device)) + osd_printf_error("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name()); + } + } + + auto build() + { + assert(this->m_consumed); + this->built(); + if (!m_exec) + { + device_t *const device(m_devbase.subdevice(m_tag)); + if (!device) + throw emu_fatalerror("Write callback bound to non-existent object tag %s\n", m_tag); + m_exec = dynamic_cast(device); + if (!m_exec) + throw emu_fatalerror("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name()); + } + return + [&exec = *m_exec, linenum = m_linenum] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { exec.set_input_line(linenum, data); }; + } + + private: + wrapped_builder(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder &&that) = delete; + + device_t &m_devbase; + char const *const m_tag; + device_execute_interface *m_exec; + int const m_linenum; + }; + + inputline_builder(inputline_builder const &) = delete; + inputline_builder &operator=(inputline_builder const &) = delete; + inputline_builder &operator=(inputline_builder &&that) = delete; + + device_t &m_devbase; + char const *const m_tag; + device_execute_interface *m_exec; + int const m_linenum; + + public: + using input_t = intermediate_t; + + inputline_builder(devcb_write &target, bool append, device_t &devbase, char const *tag, int linenum) + : builder_base(target, append) + , transform_base, inputline_builder>(1U) + , m_devbase(devbase) + , m_tag(tag) + , m_exec(nullptr) + , m_linenum(linenum) + { } + inputline_builder(devcb_write &target, bool append, device_execute_interface &exec, int linenum) + : builder_base(target, append) + , transform_base, inputline_builder>(1U) + , m_devbase(exec.device()) + , m_tag(exec.device().tag()) + , m_exec(&exec) + , m_linenum(linenum) + { } + inputline_builder(inputline_builder &&that) + : builder_base(std::move(that)) + , transform_base, inputline_builder>(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(that.m_tag) + , m_exec(that.m_exec) + , m_linenum(that.m_linenum) + { + that.consume(); + that.built(); + } + ~inputline_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, first_transform_builder > > transform(T &&cb) + { + first_transform_builder > result(this->m_target, this->m_append, wrapped_builder(std::move(*this)), std::forward(cb), this->exor(), this->inherited_mask() ? DefaultMask : this->mask()); + result.mask(1); + return std::move(result); + } + + void validity_check(validity_checker &valid) const + { + if (!m_exec) + { + device_t *const device(m_devbase.subdevice(m_tag)); + if (!device) + osd_printf_error("Write callback bound to non-existent object tag %s\n", m_tag); + else if (!dynamic_cast(device)) + osd_printf_error("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name()); + } + } + + auto build() + { + assert(this->m_consumed); + this->built(); + if (!m_exec) + { + device_t *const device(m_devbase.subdevice(m_tag)); + if (!device) + throw emu_fatalerror("Write callback bound to non-existent object tag %s\n", m_tag); + m_exec = dynamic_cast(device); + if (!m_exec) + throw emu_fatalerror("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name()); + } + return + [&exec = *m_exec, linenum = m_linenum, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { exec.set_input_line(linenum, (data ^ exor) & mask); }; + } + }; + + class latched_inputline_builder : public builder_base, public transform_base, latched_inputline_builder> + { + private: + class wrapped_builder : public builder_base + { + public: + template friend class first_transform_builder; + + using input_t = Input; + + wrapped_builder(latched_inputline_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(that.m_tag) + , m_exec(that.m_exec) + , m_linenum(that.m_linenum) + , m_value(that.m_value) + { + that.consume(); + that.built(); + } + wrapped_builder(wrapped_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(that.m_tag) + , m_exec(that.m_exec) + , m_linenum(that.m_linenum) + , m_value(that.m_value) + { + that.consume(); + that.built(); + } + + void validity_check(validity_checker &valid) const + { + if (!m_exec) + { + device_t *const device(m_devbase.subdevice(m_tag)); + if (!device) + osd_printf_error("Write callback bound to non-existent object tag %s\n", m_tag); + else if (!dynamic_cast(device)) + osd_printf_error("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name()); + } + } + + auto build() + { + assert(this->m_consumed); + this->built(); + if (!m_exec) + { + device_t *const device(m_devbase.subdevice(m_tag)); + if (!device) + throw emu_fatalerror("Write callback bound to non-existent object tag %s\n", m_tag); + m_exec = dynamic_cast(device); + if (!m_exec) + throw emu_fatalerror("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name()); + } + return + [&exec = *m_exec, linenum = m_linenum, value = m_value] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { if (data) exec.set_input_line(linenum, value); }; + } + + private: + wrapped_builder(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder &&that) = delete; + + device_t &m_devbase; + char const *const m_tag; + device_execute_interface *m_exec; + int const m_linenum; + int const m_value; + }; + + latched_inputline_builder(latched_inputline_builder const &) = delete; + latched_inputline_builder &operator=(latched_inputline_builder const &) = delete; + latched_inputline_builder &operator=(latched_inputline_builder &&that) = delete; + + device_t &m_devbase; + char const *const m_tag; + device_execute_interface *m_exec; + int const m_linenum; + int const m_value; + + public: + using input_t = Input; + + latched_inputline_builder(devcb_write &target, bool append, device_t &devbase, char const *tag, int linenum, int value) + : builder_base(target, append) + , transform_base, latched_inputline_builder>(DefaultMask) + , m_devbase(devbase) + , m_tag(tag) + , m_exec(nullptr) + , m_linenum(linenum) + , m_value(value) + { } + latched_inputline_builder(devcb_write &target, bool append, device_execute_interface &exec, int linenum, int value) + : builder_base(target, append) + , transform_base, latched_inputline_builder>(DefaultMask) + , m_devbase(exec.device()) + , m_tag(exec.device().tag()) + , m_exec(&exec) + , m_linenum(linenum) + , m_value(value) + { } + latched_inputline_builder(latched_inputline_builder &&that) + : builder_base(std::move(that)) + , transform_base, latched_inputline_builder>(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(that.m_tag) + , m_exec(that.m_exec) + , m_linenum(that.m_linenum) + , m_value(that.m_value) + { + that.consume(); + that.built(); + } + ~latched_inputline_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, first_transform_builder > > transform(T &&cb) + { + return first_transform_builder >(this->m_target, this->m_append, wrapped_builder(std::move(*this)), std::forward(cb), this->exor(), this->inherited_mask() ? DefaultMask : this->mask()); + } + + void validity_check(validity_checker &valid) const + { + if (!m_exec) + { + device_t *const device(m_devbase.subdevice(m_tag)); + if (!device) + osd_printf_error("Write callback bound to non-existent object tag %s\n", m_tag); + else if (!dynamic_cast(device)) + osd_printf_error("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name()); + } + } + + auto build() + { + assert(this->m_consumed); + this->built(); + if (!m_exec) + { + device_t *const device(m_devbase.subdevice(m_tag)); + if (!device) + throw emu_fatalerror("Write callback bound to non-existent object tag %s\n", m_tag); + m_exec = dynamic_cast(device); + if (!m_exec) + throw emu_fatalerror("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name()); + } + return + [&exec = *m_exec, linenum = m_linenum, value = m_value, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { if ((data ^ exor) & mask) exec.set_input_line(linenum, value); }; + } + }; + + class ioport_builder : public builder_base, public transform_base, ioport_builder> + { + private: + class wrapped_builder : public builder_base + { + public: + template friend class first_transform_builder; + + using input_t = intermediate_t; + + wrapped_builder(ioport_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + wrapped_builder(wrapped_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + ioport_port *const ioport(m_devbase.ioport(m_tag.c_str())); + if (!ioport) + throw emu_fatalerror("Write callback bound to non-existent I/O port %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name()); + return + [&port = *ioport] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { port.write(data); }; + } + + private: + wrapped_builder(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder &&that) = delete; + + device_t &m_devbase; + std::string m_tag; + }; + + ioport_builder(ioport_builder const &) = delete; + ioport_builder &operator=(ioport_builder const &) = delete; + ioport_builder &operator=(ioport_builder &&that) = delete; + + device_t &m_devbase; + std::string m_tag; + + public: + using input_t = intermediate_t; + + ioport_builder(devcb_write &target, bool append, device_t &devbase, std::string &&tag) + : builder_base(target, append) + , transform_base, ioport_builder>(DefaultMask) + , m_devbase(devbase) + , m_tag(std::move(tag)) + { } + ioport_builder(ioport_builder &&that) + : builder_base(std::move(that)) + , transform_base, ioport_builder>(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + ~ioport_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, first_transform_builder > > transform(T &&cb) + { + return first_transform_builder >(this->m_target, this->m_append, wrapped_builder(std::move(*this)), std::forward(cb), this->exor(), this->mask()); + } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + ioport_port *const ioport(m_devbase.ioport(m_tag.c_str())); + if (!ioport) + throw emu_fatalerror("Write callback bound to non-existent I/O port %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name()); + return + [&port = *ioport, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { port.write((data ^ exor) & mask); }; + } + }; + + class membank_builder : public builder_base, public transform_base, membank_builder> + { + private: + class wrapped_builder : public builder_base + { + public: + template friend class first_transform_builder; + + using input_t = intermediate_t; + + wrapped_builder(membank_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + wrapped_builder(wrapped_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + memory_bank *const bank(m_devbase.membank(m_tag.c_str())); + if (!bank) + throw emu_fatalerror("Write callback bound to non-existent memory bank %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name()); + return + [&membank = *bank] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { membank.set_entry(data); }; + } + + private: + wrapped_builder(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder &&that) = delete; + + device_t &m_devbase; + std::string m_tag; + }; + + membank_builder(membank_builder const &) = delete; + membank_builder &operator=(membank_builder const &) = delete; + membank_builder &operator=(membank_builder &&that) = delete; + + device_t &m_devbase; + std::string m_tag; + + public: + using input_t = intermediate_t; + + membank_builder(devcb_write &target, bool append, device_t &devbase, std::string &&tag) + : builder_base(target, append) + , transform_base, membank_builder>(DefaultMask) + , m_devbase(devbase) + , m_tag(std::move(tag)) + { } + membank_builder(membank_builder &&that) + : builder_base(std::move(that)) + , transform_base, membank_builder>(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + ~membank_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, first_transform_builder > > transform(T &&cb) + { + return first_transform_builder >(this->m_target, this->m_append, wrapped_builder(std::move(*this)), std::forward(cb), this->exor(), this->mask()); + } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + memory_bank *const bank(m_devbase.membank(m_tag.c_str())); + if (!bank) + throw emu_fatalerror("Write callback bound to non-existent memory bank %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name()); + return + [&membank = *bank, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { membank.set_entry((data ^ exor) & mask); }; + } + }; + + class output_builder : public builder_base, public transform_base, output_builder> + { + private: + class wrapped_builder : public builder_base + { + public: + template friend class first_transform_builder; + + using input_t = intermediate_t; + + wrapped_builder(output_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + wrapped_builder(wrapped_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + return + [&item = m_devbase.machine().output().find_or_create_item(m_tag.c_str(), 0)] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { item.set(data); }; + } + + private: + wrapped_builder(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder &&that) = delete; + + device_t &m_devbase; + std::string m_tag; + }; + + output_builder(output_builder const &) = delete; + output_builder &operator=(output_builder const &) = delete; + output_builder &operator=(output_builder &&that) = delete; + + device_t &m_devbase; + std::string m_tag; + + public: + using input_t = intermediate_t; + + output_builder(devcb_write &target, bool append, device_t &devbase, std::string &&tag) + : builder_base(target, append) + , transform_base, output_builder>(DefaultMask) + , m_devbase(devbase) + , m_tag(std::move(tag)) + { } + output_builder(output_builder &&that) + : builder_base(std::move(that)) + , transform_base, output_builder>(std::move(that)) + , m_devbase(that.m_devbase) + , m_tag(std::move(that.m_tag)) + { + that.consume(); + that.built(); + } + ~output_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, first_transform_builder > > transform(T &&cb) + { + return first_transform_builder >(this->m_target, this->m_append, wrapped_builder(std::move(*this)), std::forward(cb), this->exor(), this->mask()); + } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + return + [&item = m_devbase.machine().output().find_or_create_item(m_tag.c_str(), 0), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { item.set((data ^ exor) & mask); }; + } + }; + + class log_builder : public builder_base, public transform_base, log_builder> + { + private: + class wrapped_builder : public builder_base + { + public: + template friend class first_transform_builder; + + using input_t = Input; + + wrapped_builder(log_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_message(std::move(that.m_message)) + { + that.consume(); + that.built(); + } + wrapped_builder(wrapped_builder &&that) + : builder_base(std::move(that)) + , m_devbase(that.m_devbase) + , m_message(std::move(that.m_message)) + { + that.consume(); + that.built(); + } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + return + [&devbase = m_devbase, message = std::move(m_message)] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { if (data) devbase.logerror("%s: %s\n", devbase.machine().describe_context(), message); }; + } + + private: + wrapped_builder(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder const &) = delete; + wrapped_builder operator=(wrapped_builder &&that) = delete; + + device_t &m_devbase; + std::string m_message; + }; + + log_builder(log_builder const &) = delete; + log_builder &operator=(log_builder const &) = delete; + log_builder &operator=(log_builder &&that) = delete; + + device_t &m_devbase; + std::string m_message; + + public: + using input_t = Input; + + log_builder(devcb_write &target, bool append, device_t &devbase, std::string &&message) + : builder_base(target, append) + , transform_base, log_builder>(DefaultMask) + , m_devbase(devbase) + , m_message(std::move(message)) + { } + log_builder(log_builder &&that) + : builder_base(std::move(that)) + , transform_base, log_builder>(std::move(that)) + , m_devbase(that.m_devbase) + , m_message(std::move(that.m_message)) + { + that.consume(); + that.built(); + } + ~log_builder() { this->template register_creator(); } + + template + std::enable_if_t::value, first_transform_builder > > transform(T &&cb) + { + return first_transform_builder >(this->m_target, this->m_append, wrapped_builder(std::move(*this)), std::forward(cb), this->exor(), this->inherited_mask() ? DefaultMask : this->mask()); + } + + void validity_check(validity_checker &valid) const { } + + auto build() + { + assert(this->m_consumed); + this->built(); + return + [&devbase = m_devbase, message = std::move(m_message), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t mem_mask) + { if ((data ^ exor) & mask) devbase.logerror("%s: %s\n", devbase.machine().describe_context(), message); }; + } + }; + class binder + { + public: + binder(devcb_write &target) : m_target(target) { } + binder(binder const &) = delete; + binder(binder &&that) : m_target(that.m_target), m_append(that.m_append), m_used(that.m_used) { that.m_used = true; } + binder &operator=(binder const &) = delete; + binder &operator=(binder &&) = delete; + + template + std::enable_if_t::value, functoid_builder > > set(T &&cb) + { + set_used(); + return functoid_builder >(m_target, m_append, std::forward(cb)); + } + + template + std::enable_if_t::value, delegate_builder > > set(T &&func, char const *name) + { + set_used(); + return delegate_builder >(m_target, m_append, m_target.owner().mconfig().current_device(), DEVICE_SELF, std::forward(func), name); + } + + template + std::enable_if_t::value, delegate_builder > > set(char const *tag, T &&func, char const *name) + { + set_used(); + return delegate_builder >(m_target, m_append, m_target.owner().mconfig().current_device(), tag, std::forward(func), name); + } + + template + std::enable_if_t::value, delegate_builder > > set(U &obj, T &&func, char const *name) + { + set_used(); + return delegate_builder >(m_target, m_append, m_target.owner().mconfig().current_device(), devcb_write::cast_reference >(obj), std::forward(func), name); + } + + template + std::enable_if_t::value, delegate_builder > > set(device_finder &finder, T &&func, char const *name) + { + set_used(); + std::pair const target(finder.finder_target()); + return delegate_builder >(m_target, m_append, target.first, target.second, std::forward(func), name); + } + + template + std::enable_if_t::value, delegate_builder > > set(device_finder const &finder, T &&func, char const *name) + { + set_used(); + std::pair const target(finder.finder_target()); + return delegate_builder >(m_target, m_append, target.first, target.second, std::forward(func), name); + } + + template + auto append(Params &&... args) + { + m_append = true; + return set(std::forward(args)...); + } + + inputline_builder set_inputline(char const *tag, int linenum) + { + set_used(); + return inputline_builder(m_target, m_append, m_target.owner().mconfig().current_device(), tag, linenum); + } + + latched_inputline_builder set_inputline(char const *tag, int linenum, int value) + { + set_used(); + return latched_inputline_builder(m_target, m_append, m_target.owner().mconfig().current_device(), tag, linenum, value); + } + + inputline_builder set_inputline(device_execute_interface &obj, int linenum) + { + set_used(); + return inputline_builder(m_target, m_append, obj, linenum); + } + + latched_inputline_builder set_inputline(device_execute_interface &obj, int linenum, int value) + { + set_used(); + return latched_inputline_builder(m_target, m_append, obj, linenum, value); + } + + template + inputline_builder set_inputline(device_finder const &finder, int linenum) + { + set_used(); + std::pair const target(finder.finder_target()); + return inputline_builder(m_target, m_append, target.first, target.second, linenum); + } + + template + latched_inputline_builder set_inputline(device_finder const &finder, int linenum, int value) + { + set_used(); + std::pair const target(finder.finder_target()); + return latched_inputline_builder(m_target, m_append, target.first, target.second, linenum, value); + } + + template + auto append_inputline(Params &&... args) + { + m_append = true; + return set_inputline(std::forward(args)...); + } + + template + ioport_builder set_ioport(Params &&... args) + { + set_used(); + return ioport_builder(m_target, m_append, m_target.owner().mconfig().current_device(), std::string(std::forward(args)...)); + } + + template + ioport_builder set_ioport(ioport_finder &finder) + { + set_used(); + std::pair const target(finder.finder_target()); + return ioport_builder(m_target, m_append, target.first, std::string(target.second)); + } + + template + ioport_builder set_ioport(ioport_finder const &finder) + { + set_used(); + std::pair const target(finder.finder_target()); + return ioport_builder(m_target, m_append, target.first, std::string(target.second)); + } + + template + ioport_builder append_ioport(Params &&... args) + { + m_append = true; + return set_ioport(std::forward(args)...); + } + + template + membank_builder set_membank(Params &&... args) + { + set_used(); + return membank_builder(m_target, m_append, m_target.owner().mconfig().current_device(), std::string(std::forward(args)...)); + } + + template + membank_builder set_membank(memory_bank_finder &finder) + { + set_used(); + std::pair const target(finder.finder_target()); + return membank_builder(m_target, m_append, target.first, std::string(target.second)); + } + + template + membank_builder set_membank(memory_bank_finder const &finder) + { + set_used(); + std::pair const target(finder.finder_target()); + return membank_builder(m_target, m_append, target.first, std::string(target.second)); + } + + template + membank_builder append_membank(Params &&... args) + { + m_append = true; + return set_membank(std::forward(args)...); + } + + template + output_builder set_output(Params &&... args) + { + set_used(); + return output_builder(m_target, m_append, m_target.owner().mconfig().current_device(), std::string(std::forward(args)...)); + } + + template + output_builder append_output(Params &&... args) + { + m_append = true; + return set_output(std::forward(args)...); + } + + template + log_builder set_log(device_t &devbase, Params &&... args) + { + set_used(); + return log_builder(m_target, m_append, devbase, std::string(std::forward(args)...)); + } + + template + std::enable_if_t >::value, log_builder> set_log(T &devbase, Params &&... args) + { + return set_log(static_cast(devbase), std::forward(args)...); + } + + template + std::enable_if_t >::value, log_builder> set_log(T &devbase, Params &&... args) + { + return set_log(devbase.device(), std::forward(args)...); + } + + template + log_builder set_log(Params &&... args) + { + return set_log(m_target.owner().mconfig().current_device(), std::forward(args)...); + } + + template + log_builder append_log(Params &&... args) + { + m_append = true; + return set_log(std::forward(args)...); + } + + void set_nop() + { + set_used(); + m_target.m_creators.clear(); + m_target.m_creators.emplace_back(std::make_unique()); + } + + private: + void set_used() { assert(!m_used); m_used = true; } + + devcb_write &m_target; + bool m_append = false; + bool m_used = false; + }; + + std::vector m_functions; + std::vector m_creators; + +public: + devcb_write(device_t &owner); + + binder bind(); + void reset(); + + // legacy syntax support - will be removed + template + devcb_base &set_callback(std::tuple const &desc) + { + bind().set(std::forward(std::get<0>(desc)), std::forward(std::get<1>(desc)), std::forward(std::get<2>(desc))); + return *this; + } + devcb_base &set_callback(DEVCB_INPUTLINE &&desc) { bind().set_inputline(desc.m_tag, desc.m_linenum); return *this; } + devcb_base &set_callback(DEVCB_ASSERTLINE &&desc) { bind().set_inputline(desc.m_tag, desc.m_linenum, ASSERT_LINE); return *this; } + devcb_base &set_callback(DEVCB_CLEARLINE &&desc) { bind().set_inputline(desc.m_tag, desc.m_linenum, CLEAR_LINE); return *this; } + devcb_base &set_callback(DEVCB_HOLDLINE &&desc) { bind().set_inputline(desc.m_tag, desc.m_linenum, HOLD_LINE); return *this; } + devcb_base &set_callback(DEVCB_MEMBANK &&desc) { bind().set_membank(desc.m_tag); return *this; } + devcb_base &set_callback(DEVCB_OUTPUT &&desc) { bind().set_output(desc.m_tag); return *this; } + devcb_base &set_callback(devcb_noop_t desc) { bind().set_nop(); return *this; } + + virtual void validity_check(validity_checker &valid) const override; + + void resolve(); + void resolve_safe(); + + void operator()(address_space &space, offs_t offset, Input data, std::make_unsigned_t mem_mask = DefaultMask); + void operator()(address_space &space, Input data); + void operator()(offs_t offset, Input data, std::make_unsigned_t mem_mask = DefaultMask); + void operator()(Input data); + + bool isnull() const { return m_functions.empty() && m_creators.empty(); } + explicit operator bool() const { return !m_functions.empty(); } +}; + +template DefaultMask> +devcb_write::devcb_write(device_t &owner) + : devcb_write_base(owner) +{ +} + +template DefaultMask> +typename devcb_write::binder devcb_write::bind() +{ + return binder(*this); +} + +template DefaultMask> +void devcb_write::reset() +{ + assert(m_functions.empty()); + m_creators.clear(); +} + +template DefaultMask> +void devcb_write::validity_check(validity_checker &valid) const +{ + assert(m_functions.empty()); + devcb_write_base::validity_check(valid); + for (typename creator::ptr const &c : m_creators) + c->validity_check(valid); +} + +template DefaultMask> +void devcb_write::resolve() +{ + assert(m_functions.empty()); + devcb_write_base::resolve(); + m_functions.reserve(m_creators.size()); + for (typename creator::ptr const &c : m_creators) + m_functions.emplace_back(c->create()); + m_creators.clear(); +} + +template DefaultMask> +void devcb_write::resolve_safe() +{ + resolve(); + if (m_functions.empty()) + m_functions.emplace_back([] (address_space &space, offs_t offset, Input data, std::make_unsigned_t mem_mask) { }); +} + +template DefaultMask> +void devcb_write::operator()(address_space &space, offs_t offset, Input data, std::make_unsigned_t mem_mask) +{ + assert(m_creators.empty() && !m_functions.empty()); + typename std::vector::const_iterator it(m_functions.begin()); + (*it)(space, offset, data, mem_mask); + while (m_functions.end() != ++it) + (*it)(space, offset, data, mem_mask); +} + +template DefaultMask> +void devcb_write::operator()(address_space &space, Input data) +{ + this->operator()(space, 0U, data, DefaultMask); +} + +template DefaultMask> +void devcb_write::operator()(offs_t offset, Input data, std::make_unsigned_t mem_mask) +{ + this->operator()(this->default_space(), offset, data, mem_mask); +} + +template DefaultMask> +void devcb_write::operator()(Input data) +{ + this->operator()(this->default_space(), 0U, data, DefaultMask); +} + + +using devcb_read8 = devcb_read; +using devcb_read16 = devcb_read; +using devcb_read32 = devcb_read; +using devcb_read64 = devcb_read; +using devcb_read_line = devcb_read; + +using devcb_write8 = devcb_write; +using devcb_write16 = devcb_write; +using devcb_write32 = devcb_write; +using devcb_write64 = devcb_write; +using devcb_write_line = devcb_write; + + +//************************************************************************** +// TEMPLATE INSTANTIATIONS +//************************************************************************** + +extern template class devcb_read; +extern template class devcb_read; +extern template class devcb_read; +extern template class devcb_read; +extern template class devcb_read; + +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; + +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; + +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; + +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; + +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; + +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl; + +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl; + +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl; + +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl; + +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl; + +extern template class devcb_write; +extern template class devcb_write; +extern template class devcb_write; +extern template class devcb_write; +extern template class devcb_write; + +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; + +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; + +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; + +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; + +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; + +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl; +extern template class devcb_write8::creator_impl; +extern template class devcb_write8::creator_impl; +extern template class devcb_write8::creator_impl; +extern template class devcb_write8::creator_impl; +extern template class devcb_write8::creator_impl; + +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl; +extern template class devcb_write16::creator_impl; +extern template class devcb_write16::creator_impl; +extern template class devcb_write16::creator_impl; +extern template class devcb_write16::creator_impl; +extern template class devcb_write16::creator_impl; + +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl; +extern template class devcb_write32::creator_impl; +extern template class devcb_write32::creator_impl; +extern template class devcb_write32::creator_impl; +extern template class devcb_write32::creator_impl; +extern template class devcb_write32::creator_impl; + +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl; +extern template class devcb_write64::creator_impl; +extern template class devcb_write64::creator_impl; +extern template class devcb_write64::creator_impl; +extern template class devcb_write64::creator_impl; +extern template class devcb_write64::creator_impl; + +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl; +extern template class devcb_write_line::creator_impl; +extern template class devcb_write_line::creator_impl; +extern template class devcb_write_line::creator_impl; +extern template class devcb_write_line::creator_impl; +extern template class devcb_write_line::creator_impl; #endif // MAME_EMU_DEVCB_H diff --git a/src/emu/device.cpp b/src/emu/device.cpp index 6bd458b0e0b..058ac84d7c4 100644 --- a/src/emu/device.cpp +++ b/src/emu/device.cpp @@ -315,6 +315,10 @@ void device_t::config_complete() void device_t::validity_check(validity_checker &valid) const { + // validate callbacks + for (devcb_base const *callback : m_callbacks) + callback->validity_check(valid); + // validate via the interfaces for (device_interface &intf : interfaces()) intf.interface_validity_check(valid); @@ -950,6 +954,13 @@ finder_base *device_t::register_auto_finder(finder_base &autodev) return old; } + +void device_t::register_callback(devcb_base &callback) +{ + m_callbacks.emplace_back(&callback); +} + + //************************************************************************** // LIVE DEVICE INTERFACES //************************************************************************** diff --git a/src/emu/device.h b/src/emu/device.h index 8b3b2c94574..e9d91bf4cf4 100644 --- a/src/emu/device.h +++ b/src/emu/device.h @@ -374,8 +374,7 @@ class device_t : public delegate_late_bind friend class simple_list; friend class running_machine; friend class finder_base; - friend class devcb_read_base; - friend class devcb_write_base; + friend class devcb_base; class subdevice_list { @@ -523,8 +522,6 @@ public: // owned object helpers subdevice_list &subdevices() { return m_subdevices; } const subdevice_list &subdevices() const { return m_subdevices; } - const std::list input_callbacks() const { return m_input_callbacks; } - const std::list output_callbacks() const { return m_output_callbacks; } // device-relative tag lookups std::string subtag(const char *tag) const; @@ -597,6 +594,7 @@ protected: void post_load(); void notify_clock_changed(); finder_base *register_auto_finder(finder_base &autodev); + void register_callback(devcb_base &callback); //------------------- begin derived class overrides @@ -658,8 +656,7 @@ private: bool m_started; // true if the start function has succeeded finder_base * m_auto_finder_list; // list of objects to auto-find mutable std::vector m_rom_entries; - std::list m_input_callbacks; - std::list m_output_callbacks; + std::list m_callbacks; // string formatting buffer for logerror mutable util::ovectorstream m_string_buffer; diff --git a/src/emu/emu.h b/src/emu/emu.h index 2bce001824c..9ed7d10240d 100644 --- a/src/emu/emu.h +++ b/src/emu/emu.h @@ -49,7 +49,6 @@ // memory and address spaces #include "emumem.h" -class address_map; // Forward declaration #include "memarray.h" // machine-wide utilities diff --git a/src/emu/emufwd.h b/src/emu/emufwd.h index 8f6ff6d3207..cb0af700c64 100644 --- a/src/emu/emufwd.h +++ b/src/emu/emufwd.h @@ -14,6 +14,8 @@ #pragma once +#include + //---------------------------------- // 3rdparty @@ -98,8 +100,8 @@ class symbol_table; class debugger_manager; // declared in devcb.h -class devcb_read_base; -class devcb_write_base; +class devcb_base; +template DefaultMask> class devcb_write; // declared in devfind.h class finder_base; diff --git a/src/emu/mconfig.h b/src/emu/mconfig.h index 949155fca41..6bcaec2b02e 100644 --- a/src/emu/mconfig.h +++ b/src/emu/mconfig.h @@ -223,9 +223,7 @@ inline std::enable_if_t DefaultMask> friend class devcb_write; + class output_notify { public: diff --git a/src/emu/screen.h b/src/emu/screen.h index f1126b4cb69..0f20848d45f 100644 --- a/src/emu/screen.h +++ b/src/emu/screen.h @@ -252,6 +252,7 @@ public: } template devcb_base &set_screen_vblank(Object &&object) { return m_screen_vblank.set_callback(std::forward(object)); } + auto screen_vblank() { return m_screen_vblank.bind(); } template void set_palette(T &&tag) { m_palette.set_tag(std::forward(tag)); } void set_video_attributes(u32 flags) { m_video_attributes = flags; } void set_color(rgb_t color) { m_color = color; } @@ -272,9 +273,8 @@ public: // beam positioning and state int vpos() const; int hpos() const; - bool vblank() const { return (machine().time() < m_vblank_end_time); } - DECLARE_READ_LINE_MEMBER(vblank) { return (machine().time() < m_vblank_end_time) ? ASSERT_LINE : CLEAR_LINE; } - DECLARE_READ_LINE_MEMBER(hblank) { int curpos = hpos(); return (curpos < m_visarea.min_x || curpos > m_visarea.max_x) ? ASSERT_LINE : CLEAR_LINE; } + DECLARE_READ_LINE_MEMBER(vblank) const { return (machine().time() < m_vblank_end_time) ? 1 : 0; } + DECLARE_READ_LINE_MEMBER(hblank) const { int const curpos = hpos(); return (curpos < m_visarea.min_x || curpos > m_visarea.max_x) ? 1 : 0; } // timing attotime time_until_pos(int vpos, int hpos = 0) const; @@ -542,7 +542,7 @@ typedef device_type_iterator screen_device_iterator; #define MCFG_SCREEN_UPDATE_DEVICE(_device, _class, _method) \ downcast(*device).set_screen_update(_device, &_class::_method, #_class "::" #_method); #define MCFG_SCREEN_VBLANK_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_screen_vblank(DEVCB_##_devcb); + downcast(*device).set_screen_vblank(DEVCB_##_devcb); #define MCFG_SCREEN_PALETTE(_palette_tag) \ downcast(*device).set_palette(_palette_tag); #define MCFG_SCREEN_NO_PALETTE \ diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp index f8745e66bef..03530727721 100644 --- a/src/emu/validity.cpp +++ b/src/emu/validity.cpp @@ -1946,12 +1946,6 @@ void validity_checker::validate_devices() // validate auto-finders device.findit(true); - // validate callbacks - for (auto &cb : device.input_callbacks()) - cb->validity_check(*this); - for (auto &cb : device.output_callbacks()) - cb->validity_check(*this); - // validate the device tag validate_tag(device.basetag()); diff --git a/src/mame/audio/atarijsa.h b/src/mame/audio/atarijsa.h index f8cef0ca4a4..30e543311f3 100644 --- a/src/mame/audio/atarijsa.h +++ b/src/mame/audio/atarijsa.h @@ -38,23 +38,22 @@ DECLARE_DEVICE_TYPE(ATARI_JSA_IIIS, atari_jsa_iiis_device) #define MCFG_ATARI_JSA_I_ADD(_tag, _intcb) \ MCFG_DEVICE_ADD(_tag, ATARI_JSA_I, 0) \ - devcb = &downcast(*device).set_main_int_cb(DEVCB_##_intcb); + downcast(*device).set_main_int_cb(DEVCB_##_intcb); #define MCFG_ATARI_JSA_II_ADD(_tag, _intcb) \ MCFG_DEVICE_ADD(_tag, ATARI_JSA_II, 0) \ - devcb = &downcast(*device).set_main_int_cb(DEVCB_##_intcb); + downcast(*device).set_main_int_cb(DEVCB_##_intcb); #define MCFG_ATARI_JSA_III_ADD(_tag, _intcb) \ MCFG_DEVICE_ADD(_tag, ATARI_JSA_III, 0) \ - devcb = &downcast(*device).set_main_int_cb(DEVCB_##_intcb); + downcast(*device).set_main_int_cb(DEVCB_##_intcb); #define MCFG_ATARI_JSA_IIIS_ADD(_tag, _intcb) \ MCFG_DEVICE_ADD(_tag, ATARI_JSA_IIIS, 0) \ - devcb = &downcast(*device).set_main_int_cb(DEVCB_##_intcb); + downcast(*device).set_main_int_cb(DEVCB_##_intcb); #define MCFG_ATARI_JSA_TEST_PORT(_port, _bitnum) \ - devcb = &downcast(*device).set_test_read_cb(DEVCB_IOPORT(_port)); \ - MCFG_DEVCB_RSHIFT(_bitnum); + downcast(*device).test_read_cb().set_ioport(_port).bit(_bitnum); //************************************************************************** @@ -84,8 +83,9 @@ protected: public: // configuration - template devcb_base &set_test_read_cb(Object &&cb) { return m_test_read_cb.set_callback(std::forward(cb)); } template devcb_base &set_main_int_cb(Object &&cb) { return m_main_int_cb.set_callback(std::forward(cb)); } + auto test_read_cb() { return m_test_read_cb.bind(); } + auto main_int_cb() { return m_main_int_cb.bind(); } // getters m6502_device &soundcpu() const { return *m_jsacpu; } diff --git a/src/mame/audio/cage.h b/src/mame/audio/cage.h index d54a52888e0..d1202918ac2 100644 --- a/src/mame/audio/cage.h +++ b/src/mame/audio/cage.h @@ -17,7 +17,7 @@ #include "sound/dmadac.h" #define MCFG_ATARI_CAGE_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irqhandler_callback(DEVCB_##_write); + downcast(*device).set_irqhandler_callback(DEVCB_##_write); #define MCFG_ATARI_CAGE_SPEEDUP(_speedup) \ downcast(*device).set_speedup(_speedup); diff --git a/src/mame/audio/cmi01a.h b/src/mame/audio/cmi01a.h index 5f9bbd9f15f..8c8272507ea 100644 --- a/src/mame/audio/cmi01a.h +++ b/src/mame/audio/cmi01a.h @@ -16,7 +16,7 @@ #define ENV_DIR_UP 1 #define MCFG_CMI01A_IRQ_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); class cmi01a_device : public device_t, public device_sound_interface { public: diff --git a/src/mame/audio/dsbz80.cpp b/src/mame/audio/dsbz80.cpp index ea7a83ae824..c521ac825b6 100644 --- a/src/mame/audio/dsbz80.cpp +++ b/src/mame/audio/dsbz80.cpp @@ -45,19 +45,20 @@ DEFINE_DEVICE_TYPE(DSBZ80, dsbz80_device, "dsbz80_device", "Sega Z80-based Digit // device_add_mconfig - add device configuration //------------------------------------------------- -MACHINE_CONFIG_START(dsbz80_device::device_add_mconfig) - MCFG_DEVICE_ADD(Z80_TAG, Z80, 4000000) /* unknown clock, but probably pretty slow considering the z80 does like nothing */ - MCFG_DEVICE_PROGRAM_MAP(dsbz80_map) - MCFG_DEVICE_IO_MAP(dsbz80io_map) +void dsbz80_device::device_add_mconfig(machine_config &config) +{ + Z80(config, m_ourcpu, 4000000); // unknown clock, but probably pretty slow considering the z80 does like nothing + m_ourcpu->set_addrmap(AS_PROGRAM, &dsbz80_device::dsbz80_map); + m_ourcpu->set_addrmap(AS_IO, &dsbz80_device::dsbz80io_map); - MCFG_DEVICE_ADD("uart", I8251, 4000000) - MCFG_I8251_RXRDY_HANDLER(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0)) - MCFG_I8251_TXD_HANDLER(WRITELINE(*this, dsbz80_device, output_txd)) + I8251(config, m_uart, 4000000); + m_uart->rxrdy_handler().set_inputline(m_ourcpu, INPUT_LINE_IRQ0); + m_uart->txd_handler().set(FUNC(dsbz80_device::output_txd)); - MCFG_CLOCK_ADD("uart_clock", 500000) // 16 times 31.25MHz (standard Sega/MIDI sound data rate) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_txc)) -MACHINE_CONFIG_END + clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate) + uart_clock.signal_handler().set("uart", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart", FUNC(i8251_device::write_txc)); +} //************************************************************************** // LIVE DEVICE diff --git a/src/mame/audio/dsbz80.h b/src/mame/audio/dsbz80.h index 43f2b0c9fcd..1db717c5484 100644 --- a/src/mame/audio/dsbz80.h +++ b/src/mame/audio/dsbz80.h @@ -15,7 +15,7 @@ MCFG_DEVICE_ADD(_tag, DSBZ80, 0) #define MCFG_DSBZ80_RXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rxd_handler(DEVCB_##_devcb); + downcast(*device).set_rxd_handler(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/audio/efo_zsu.cpp b/src/mame/audio/efo_zsu.cpp index 0bcb2ea8097..a847c98a177 100644 --- a/src/mame/audio/efo_zsu.cpp +++ b/src/mame/audio/efo_zsu.cpp @@ -209,10 +209,10 @@ MACHINE_CONFIG_START(efo_zsu_device::device_add_mconfig) MCFG_Z80CTC_ZC2_CB(WRITELINE(*this, efo_zsu_device, ctc1_z2_w)) #if 0 // does nothing useful now - MCFG_DEVICE_ADD("ck1mhz", CLOCK, 4000000/4) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc1", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc1", z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc1", z80ctc_device, trg2)) + clock_device &ck1mhz(CLOCK(config, "ck1mhz", 4000000/4); + ck1mhz.signal_handler().set(m_ctc1, FUNC(z80ctc_device::trg0)); + ck1mhz.signal_handler().append(m_ctc1, FUNC(z80ctc_device::trg1)); + ck1mhz.signal_handler().append(m_ctc1, FUNC(z80ctc_device::trg2)); #endif MCFG_GENERIC_LATCH_8_ADD("soundlatch") @@ -223,13 +223,13 @@ MACHINE_CONFIG_START(efo_zsu_device::device_add_mconfig) SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("aysnd0", AY8910, 4000000/2) - MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("rombank")) MCFG_DEVCB_MASK(0x03) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + ay8910_device &aysnd0(AY8910(config, "aysnd0", 4000000/2)); + aysnd0.port_a_write_callback().set_membank("rombank").mask(0x03); + aysnd0.add_route(ALL_OUTPUTS, "mono", 0.5); - MCFG_DEVICE_ADD("aysnd1", AY8910, 4000000/2) - MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, efo_zsu_device, ay1_porta_w)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + ay8910_device &aysnd1(AY8910(config, "aysnd1", 4000000/2)); + aysnd1.port_a_write_callback().set(FUNC(efo_zsu_device::ay1_porta_w)); + aysnd1.add_route(ALL_OUTPUTS, "mono", 0.5); MCFG_DEVICE_ADD("fifo", CD40105, 0) MCFG_40105_DATA_OUT_READY_CB(WRITELINE(*this, efo_zsu_device, fifo_dor_w)) diff --git a/src/mame/audio/exidy.h b/src/mame/audio/exidy.h index 703c4cd1fe1..b40d4fd489e 100644 --- a/src/mame/audio/exidy.h +++ b/src/mame/audio/exidy.h @@ -127,13 +127,13 @@ protected: }; #define MCFG_EXIDY_VENTURE_WRITEPA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_pa_callback(DEVCB_##_devcb); + downcast(*device).set_pa_callback(DEVCB_##_devcb); #define MCFG_EXIDY_VENTURE_WRITEPB_HANDLER(_devcb) \ - devcb = &downcast(*device).set_pb_callback(DEVCB_##_devcb); + downcast(*device).set_pb_callback(DEVCB_##_devcb); #define MCFG_EXIDY_VENTURE_CA2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_ca2_callback(DEVCB_##_devcb); + downcast(*device).set_ca2_callback(DEVCB_##_devcb); #define MCFG_EXIDY_VENTURE_CB2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_cb2_callback(DEVCB_##_devcb); + downcast(*device).set_cb2_callback(DEVCB_##_devcb); class venture_sound_device : public exidy_sh8253_sound_device { diff --git a/src/mame/audio/harddriv.cpp b/src/mame/audio/harddriv.cpp index 70916a3b95f..5bb4c7a4967 100644 --- a/src/mame/audio/harddriv.cpp +++ b/src/mame/audio/harddriv.cpp @@ -435,16 +435,16 @@ void harddriv_sound_board_device::driversnd_dsp_io_map(address_map &map) MACHINE_CONFIG_START(harddriv_sound_board_device::device_add_mconfig) /* basic machine hardware */ - MCFG_DEVICE_ADD("soundcpu", M68000, XTAL(16'000'000)/2) - MCFG_DEVICE_PROGRAM_MAP(driversnd_68k_map) + M68000(config, m_soundcpu, 16_MHz_XTAL/2); + m_soundcpu->set_addrmap(AS_PROGRAM, &harddriv_sound_board_device::driversnd_68k_map); - MCFG_DEVICE_ADD("latch", LS259, 0) // 80R - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, harddriv_sound_board_device, speech_write_w)) // SPWR - 5220 write strobe - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, harddriv_sound_board_device, speech_reset_w)) // SPRES - 5220 hard reset - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, harddriv_sound_board_device, speech_rate_w)) // SPRATE - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, harddriv_sound_board_device, cram_enable_w)) // CRAMEN - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sounddsp", INPUT_LINE_HALT)) MCFG_DEVCB_INVERT // RES320 - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, harddriv_sound_board_device, led_w)) + LS259(config, m_latch, 0); // 80R + m_latch->q_out_cb<0>().set(FUNC(harddriv_sound_board_device::speech_write_w)); // SPWR - 5220 write strobe + m_latch->q_out_cb<1>().set(FUNC(harddriv_sound_board_device::speech_reset_w)); // SPRES - 5220 hard reset + m_latch->q_out_cb<2>().set(FUNC(harddriv_sound_board_device::speech_rate_w)); // SPRATE + m_latch->q_out_cb<3>().set(FUNC(harddriv_sound_board_device::cram_enable_w)); // CRAMEN + m_latch->q_out_cb<4>().set_inputline(m_sounddsp, INPUT_LINE_HALT).invert(); // RES320 + m_latch->q_out_cb<7>().set(FUNC(harddriv_sound_board_device::led_w)); MCFG_DEVICE_ADD("sounddsp", TMS32010, XTAL(20'000'000)) MCFG_DEVICE_PROGRAM_MAP(driversnd_dsp_program_map) diff --git a/src/mame/audio/irem.cpp b/src/mame/audio/irem.cpp index 88d312bbabc..7898c493a2b 100644 --- a/src/mame/audio/irem.cpp +++ b/src/mame/audio/irem.cpp @@ -20,14 +20,14 @@ DEFINE_DEVICE_TYPE(IREM_M52_LARGE_AUDIO, m52_large_audio_device, "m52_large_au irem_audio_device::irem_audio_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock) + , m_cpu(*this, "iremsound") + , m_adpcm1(*this, "msm1") + , m_adpcm2(*this, "msm2") , m_port1(0) , m_port2(0) , m_soundlatch(0) - , m_cpu(*this, "iremsound") , m_ay_45L(*this, "ay_45l") , m_ay_45M(*this, "ay_45m") - , m_adpcm1(*this, "msm1") - , m_adpcm2(*this, "msm2") , m_audio_BD(*this, "snd_nl:ibd") , m_audio_SD(*this, "snd_nl:isd") , m_audio_OH(*this, "snd_nl:ioh") @@ -431,15 +431,15 @@ MACHINE_CONFIG_START(m62_audio_device::device_add_mconfig) MCFG_SOUND_ROUTE(1, "snd_nl", 1.0, 4) MCFG_SOUND_ROUTE(2, "snd_nl", 1.0, 5) - MCFG_DEVICE_ADD("msm1", MSM5205, XTAL(384'000)) /* verified on pcb */ - MCFG_MSM5205_VCK_CALLBACK(INPUTLINE("iremsound", INPUT_LINE_NMI)) // driven through NPN inverter - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("msm2", msm5205_device, vclk_w)) // the first MSM5205 clocks the second - MCFG_MSM5205_PRESCALER_SELECTOR(S96_4B) /* default to 4KHz, but can be changed at run time */ - MCFG_SOUND_ROUTE(0, "snd_nl", 1.0, 6) + MSM5205(config, m_adpcm1, 384_kHz_XTAL); // verified on PCB + m_adpcm1->vck_callback().set_inputline(m_cpu, INPUT_LINE_NMI); // driven through NPN inverter + m_adpcm1->vck_callback().append(m_adpcm2, FUNC(msm5205_device::vclk_w)); // the first MSM5205 clocks the second + m_adpcm1->set_prescaler_selector(msm5205_device::S96_4B); // default to 4KHz, but can be changed at run time + m_adpcm1->add_route(0, "snd_nl", 1.0, 6); - MCFG_DEVICE_ADD("msm2", MSM5205, XTAL(384'000)) /* verified on pcb */ - MCFG_MSM5205_PRESCALER_SELECTOR(SEX_4B) /* default to 4KHz, but can be changed at run time, slave */ - MCFG_SOUND_ROUTE(0, "snd_nl", 1.0, 7) + MSM5205(config, m_adpcm2, 384_kHz_XTAL); // verified on PCB + m_adpcm2->set_prescaler_selector(msm5205_device::SEX_4B); // default to 4KHz, but can be changed at run time, slave + m_adpcm2->add_route(0, "snd_nl", 1.0, 7); /* NETLIST configuration using internal AY8910 resistor values */ @@ -530,15 +530,15 @@ MACHINE_CONFIG_START(m52_large_audio_device::device_add_mconfig) /* 10 yard fig MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, irem_audio_device, ay8910_45L_porta_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) - MCFG_DEVICE_ADD("msm1", MSM5205, XTAL(384'000)) /* verified on pcb */ - MCFG_MSM5205_VCK_CALLBACK(INPUTLINE("iremsound", INPUT_LINE_NMI)) // driven through NPN inverter - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("msm2", msm5205_device, vclk_w)) // the first MSM5205 clocks the second - MCFG_MSM5205_PRESCALER_SELECTOR(S96_4B) /* default to 4KHz, but can be changed at run time */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + MSM5205(config, m_adpcm1, 384_kHz_XTAL); // verified on PCB + m_adpcm1->vck_callback().set_inputline(m_cpu, INPUT_LINE_NMI); // driven through NPN inverter + m_adpcm1->vck_callback().append(m_adpcm2, FUNC(msm5205_device::vclk_w)); // the first MSM5205 clocks the second + m_adpcm1->set_prescaler_selector(msm5205_device::S96_4B); // default to 4KHz, but can be changed at run time + m_adpcm1->add_route(ALL_OUTPUTS, "mono", 0.80); - MCFG_DEVICE_ADD("msm2", MSM5205, XTAL(384'000)) /* verified on pcb */ - MCFG_MSM5205_PRESCALER_SELECTOR(SEX_4B) /* default to 4KHz, but can be changed at run time, slave */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + MSM5205(config, m_adpcm2, 384_kHz_XTAL); // verified on PCB + m_adpcm2->set_prescaler_selector(msm5205_device::SEX_4B); // default to 4KHz, but can be changed at run time, slave + m_adpcm2->add_route(ALL_OUTPUTS, "mono", 0.80); MACHINE_CONFIG_END diff --git a/src/mame/audio/irem.h b/src/mame/audio/irem.h index cbe85dd2853..7bbb614e634 100644 --- a/src/mame/audio/irem.h +++ b/src/mame/audio/irem.h @@ -39,6 +39,10 @@ protected: virtual void device_start() override; virtual void device_reset() override; + required_device m_cpu; + required_device m_adpcm1; + optional_device m_adpcm2; + private: // internal state uint8_t m_port1; @@ -46,11 +50,8 @@ private: uint8_t m_soundlatch; - required_device m_cpu; required_device m_ay_45L; required_device m_ay_45M; - required_device m_adpcm1; - optional_device m_adpcm2; optional_device m_audio_BD; optional_device m_audio_SD; optional_device m_audio_OH; diff --git a/src/mame/audio/namco52.h b/src/mame/audio/namco52.h index 97221fb91cb..0412ed14dcb 100644 --- a/src/mame/audio/namco52.h +++ b/src/mame/audio/namco52.h @@ -19,10 +19,10 @@ downcast(*device).set_extclock(_clock); #define MCFG_NAMCO_52XX_ROMREAD_CB(_devcb) \ - devcb = &downcast(*device).set_romread_callback(DEVCB_##_devcb); + downcast(*device).set_romread_callback(DEVCB_##_devcb); #define MCFG_NAMCO_52XX_SI_CB(_devcb) \ - devcb = &downcast(*device).set_si_callback(DEVCB_##_devcb); + downcast(*device).set_si_callback(DEVCB_##_devcb); class namco_52xx_device : public device_t diff --git a/src/mame/audio/rad_eu3a05.h b/src/mame/audio/rad_eu3a05.h index 8dcd61927a4..16325185758 100644 --- a/src/mame/audio/rad_eu3a05.h +++ b/src/mame/audio/rad_eu3a05.h @@ -5,7 +5,7 @@ #define MAME_AUDIO_RAD_EU3A05_H #define MCFG_RADICA6502_SOUND_SPACE_READ_CB(_devcb) \ - devcb = &downcast(*device).set_space_read_callback(DEVCB_##_devcb); + downcast(*device).set_space_read_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/audio/segag80r.cpp b/src/mame/audio/segag80r.cpp index 12cc48e6b40..4e83f39f723 100644 --- a/src/mame/audio/segag80r.cpp +++ b/src/mame/audio/segag80r.cpp @@ -696,7 +696,7 @@ void monsterb_sound_device::device_start() MACHINE_CONFIG_START(monsterb_sound_device::device_add_mconfig) /* basic machine hardware */ MCFG_DEVICE_ADD(m_audiocpu, N7751, 6000000) - MCFG_MCS48_PORT_T1_IN_CB(GND) // labelled as "TEST", connected to ground + MCFG_MCS48_PORT_T1_IN_CB(CONSTANT(0)) // labelled as "TEST", connected to ground MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, monsterb_sound_device, n7751_command_r)) MCFG_MCS48_PORT_BUS_IN_CB(READ8(*this, monsterb_sound_device, n7751_rom_r)) MCFG_MCS48_PORT_P1_OUT_CB(WRITE8("dac", dac_byte_interface, data_w)) diff --git a/src/mame/audio/segam1audio.cpp b/src/mame/audio/segam1audio.cpp index 85475dc28bb..4638106761a 100644 --- a/src/mame/audio/segam1audio.cpp +++ b/src/mame/audio/segam1audio.cpp @@ -80,13 +80,13 @@ MACHINE_CONFIG_START(segam1audio_device::device_add_mconfig) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) - MCFG_DEVICE_ADD(UART_TAG, I8251, 8000000) // T82C51, clock unknown - MCFG_I8251_RXRDY_HANDLER(INPUTLINE(M68000_TAG, M68K_IRQ_2)) - MCFG_I8251_TXD_HANDLER(WRITELINE(*this, segam1audio_device, output_txd)) + I8251(config, m_uart, 8000000); // T82C51, clock unknown + m_uart->rxrdy_handler().set_inputline(m_audiocpu, M68K_IRQ_2); + m_uart->txd_handler().set(FUNC(segam1audio_device::output_txd)); - MCFG_CLOCK_ADD("uart_clock", 500000) // 16 times 31.25MHz (standard Sega/MIDI sound data rate) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(UART_TAG, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(UART_TAG, i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate) + uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc)); MACHINE_CONFIG_END //************************************************************************** diff --git a/src/mame/audio/segam1audio.h b/src/mame/audio/segam1audio.h index c31349b5ea2..9dc09cbf84c 100644 --- a/src/mame/audio/segam1audio.h +++ b/src/mame/audio/segam1audio.h @@ -15,12 +15,6 @@ #define M1AUDIO_MPCM1_REGION "m1audio:pcm1" #define M1AUDIO_MPCM2_REGION "m1audio:pcm2" -#define MCFG_SEGAM1AUDIO_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, SEGAM1AUDIO, 0) - -#define MCFG_SEGAM1AUDIO_RXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_rxd_handler(DEVCB_##_devcb); - //************************************************************************** // TYPE DEFINITIONS @@ -33,7 +27,7 @@ public: segam1audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration - template devcb_base &set_rxd_handler(Object &&cb) { return m_rxd_handler.set_callback(std::forward(cb)); } + auto rxd_handler() { return m_rxd_handler.bind(); } DECLARE_WRITE16_MEMBER(m1_snd_mpcm_bnk1_w); DECLARE_WRITE16_MEMBER(m1_snd_mpcm_bnk2_w); diff --git a/src/mame/audio/segasnd.h b/src/mame/audio/segasnd.h index 70551a8e39b..8e0f902a13e 100644 --- a/src/mame/audio/segasnd.h +++ b/src/mame/audio/segasnd.h @@ -36,7 +36,7 @@ protected: #define SEGASND_SEGASPEECH_REGION "segaspeech:speech" #define MCFG_SEGASPEECH_INT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_int_cb(DEVCB_##_devcb); + downcast(*device).set_int_cb(DEVCB_##_devcb); class speech_sound_device : public device_t, public device_sound_interface { diff --git a/src/mame/audio/seibu.h b/src/mame/audio/seibu.h index 546ab085b85..e4c8473ffa3 100644 --- a/src/mame/audio/seibu.h +++ b/src/mame/audio/seibu.h @@ -189,10 +189,10 @@ DECLARE_DEVICE_TYPE(SEIBU_ADPCM, seibu_adpcm_device) downcast(*device).set_rombank_tag(_banktag); #define MCFG_SEIBU_SOUND_YM_READ_CB(_devcb) \ - devcb = &downcast(*device).set_ym_read_callback(DEVCB_##_devcb); + downcast(*device).set_ym_read_callback(DEVCB_##_devcb); #define MCFG_SEIBU_SOUND_YM_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_ym_write_callback(DEVCB_##_devcb); + downcast(*device).set_ym_write_callback(DEVCB_##_devcb); /**************************************************************************/ diff --git a/src/mame/audio/svis_snd.h b/src/mame/audio/svis_snd.h index 44a40e5de86..802d3019371 100644 --- a/src/mame/audio/svis_snd.h +++ b/src/mame/audio/svis_snd.h @@ -17,7 +17,7 @@ //************************************************************************** #define MCFG_SVISION_SOUND_IRQ_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_irq_cb(DEVCB_##_devcb); + downcast(*device).set_irq_cb(DEVCB_##_devcb); // ======================> svision_sound_device diff --git a/src/mame/audio/tvc.h b/src/mame/audio/tvc.h index b91a103d784..4555598bca7 100644 --- a/src/mame/audio/tvc.h +++ b/src/mame/audio/tvc.h @@ -12,7 +12,7 @@ #pragma once #define MCFG_TVC_SOUND_SNDINT_CALLBACK(_write) \ - devcb = &downcast(*device).set_sndint_wr_callback(DEVCB_##_write); + downcast(*device).set_sndint_wr_callback(DEVCB_##_write); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/audio/williams.cpp b/src/mame/audio/williams.cpp index dce51aee1d6..c8968b1085a 100644 --- a/src/mame/audio/williams.cpp +++ b/src/mame/audio/williams.cpp @@ -177,25 +177,25 @@ void williams_cvsd_sound_device::williams_cvsd_map(address_map &map) //------------------------------------------------- MACHINE_CONFIG_START(williams_cvsd_sound_device::device_add_mconfig) - MCFG_DEVICE_ADD("cpu", MC6809E, CVSD_MASTER_CLOCK / 4) + MCFG_DEVICE_ADD(m_cpu, MC6809E, CVSD_MASTER_CLOCK / 4) MCFG_DEVICE_PROGRAM_MAP(williams_cvsd_map) - MCFG_DEVICE_ADD("pia", PIA6821, 0) - MCFG_PIA_WRITEPA_HANDLER(WRITE8("dac", dac_byte_interface, data_w)) - MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, williams_cvsd_sound_device, talkback_w)) - MCFG_PIA_IRQA_HANDLER(INPUTLINE("cpu", M6809_FIRQ_LINE)) - MCFG_PIA_IRQB_HANDLER(INPUTLINE("cpu", INPUT_LINE_NMI)) + PIA6821(config, m_pia, 0); + m_pia->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w)); + m_pia->writepb_handler().set(FUNC(williams_cvsd_sound_device::talkback_w)); + m_pia->irqa_handler().set_inputline(m_cpu, M6809_FIRQ_LINE); + m_pia->irqb_handler().set_inputline(m_cpu, INPUT_LINE_NMI); - MCFG_DEVICE_ADD("ym2151", YM2151, CVSD_FM_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE("pia", pia6821_device, ca1_w)) MCFG_DEVCB_INVERT // IRQ is not true state - MCFG_SOUND_ROUTE(ALL_OUTPUTS, *this, 0.10) + ym2151_device &ym(YM2151(config, "ym2151", CVSD_FM_CLOCK)); + ym.irq_handler().set(m_pia, FUNC(pia6821_device::ca1_w)).invert(); // IRQ is not true state + ym.add_route(ALL_OUTPUTS, *this, 0.10); - MCFG_DEVICE_ADD("dac", MC1408, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, *this, 0.25) + MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, *this, 0.25); MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) - MCFG_DEVICE_ADD("cvsd", HC55516, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, *this, 0.60) + HC55516(config, m_hc55516, 0); + m_hc55516->add_route(ALL_OUTPUTS, *this, 0.60); MACHINE_CONFIG_END diff --git a/src/mame/audio/zaccaria.h b/src/mame/audio/zaccaria.h index 63605b079e6..468e9bd1ec7 100644 --- a/src/mame/audio/zaccaria.h +++ b/src/mame/audio/zaccaria.h @@ -25,7 +25,7 @@ DECLARE_DEVICE_TYPE(ZACCARIA_1B11142, zac1b11142_audio_device) //************************************************************************** #define MCFG_ZACCARIA_1B11142_SET_ACS_CALLBACK(_devcb) \ - devcb = &downcast(device).set_acs_cb(DEVCB_##_devcb); + downcast(device).set_acs_cb(DEVCB_##_devcb); diff --git a/src/mame/drivers/24cdjuke.cpp b/src/mame/drivers/24cdjuke.cpp index b75e5c7ec75..e559e700e18 100644 --- a/src/mame/drivers/24cdjuke.cpp +++ b/src/mame/drivers/24cdjuke.cpp @@ -302,9 +302,9 @@ MACHINE_CONFIG_START(midcoin24cdjuke_state::midcoin24cdjuke) MCFG_I8255_IN_PORTC_CB(READ8(*this, midcoin24cdjuke_state, kb_row_r)) MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, midcoin24cdjuke_state, kb_col_w)) - MCFG_DEVICE_ADD("ic31", I8255A, 0) - MCFG_I8255_OUT_PORTB_CB(LOGGER("PPI8255 - unmapped write port B")) - MCFG_I8255_IN_PORTC_CB(IOPORT("MD4")) + i8255_device &ic32(I8255A(config, "ic31", 0)); + ic32.out_pb_callback().set_log("PPI8255 - unmapped write port B"); + ic32.in_pc_callback().set_ioport("MD4"); MACHINE_CONFIG_END diff --git a/src/mame/drivers/2mindril.cpp b/src/mame/drivers/2mindril.cpp index e66bd8c98b7..639b2c77c80 100644 --- a/src/mame/drivers/2mindril.cpp +++ b/src/mame/drivers/2mindril.cpp @@ -366,12 +366,12 @@ MACHINE_CONFIG_START(_2mindril_state::drill) //MCFG_DEVICE_PERIODIC_INT_DRIVER(_2mindril_state, drill_device_irq, 60) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_2mindril) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSW")) - MCFG_TC0510NIO_READ_1_CB(READ8(*this, _2mindril_state, arm_pwr_r)) - MCFG_TC0510NIO_READ_2_CB(READ8(*this, _2mindril_state, sensors_r)) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, _2mindril_state, coins_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("COINS")) + tc0510nio_device &tc0510nio(TC0510NIO(config, "tc0510nio", 0)); + tc0510nio.read_0_callback().set_ioport("DSW"); + tc0510nio.read_1_callback().set(FUNC(_2mindril_state::arm_pwr_r)); + tc0510nio.read_2_callback().set(FUNC(_2mindril_state::sensors_r)); + tc0510nio.write_4_callback().set(FUNC(_2mindril_state::coins_w)); + tc0510nio.read_7_callback().set_ioport("COINS"); MCFG_MACHINE_START_OVERRIDE(_2mindril_state,drill) MCFG_MACHINE_RESET_OVERRIDE(_2mindril_state,drill) diff --git a/src/mame/drivers/68ksbc.cpp b/src/mame/drivers/68ksbc.cpp index f0a4b623010..40d635d8d35 100644 --- a/src/mame/drivers/68ksbc.cpp +++ b/src/mame/drivers/68ksbc.cpp @@ -45,6 +45,7 @@ public: private: void c68ksbc_mem(address_map &map); + required_device m_maincpu; }; @@ -62,23 +63,23 @@ static INPUT_PORTS_START( c68ksbc ) INPUT_PORTS_END -MACHINE_CONFIG_START(c68ksbc_state::c68ksbc) - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 8000000) // text says 8MHz, schematic says 10MHz - MCFG_DEVICE_PROGRAM_MAP(c68ksbc_mem) +void c68ksbc_state::c68ksbc(machine_config &config) +{ + M68000(config, m_maincpu, 8000000); // text says 8MHz, schematic says 10MHz + m_maincpu->set_addrmap(AS_PROGRAM, &c68ksbc_state::c68ksbc_mem); - MCFG_DEVICE_ADD("acia", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_ACIA6850_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts)) + acia6850_device &acia(ACIA6850(config, "acia", 0)); + acia.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); + acia.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("acia", acia6850_device, write_rxd)) - MCFG_RS232_CTS_HANDLER(WRITELINE("acia", acia6850_device, write_cts)) + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); + rs232.rxd_handler().set("acia", FUNC(acia6850_device::write_rxd)); + rs232.cts_handler().set("acia", FUNC(acia6850_device::write_cts)); - MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) -MACHINE_CONFIG_END + clock_device &acia_clock(CLOCK(config, "acia_clock", 153600)); + acia_clock.signal_handler().set("acia", FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append("acia", FUNC(acia6850_device::write_rxc)); +} /* ROM definition */ ROM_START( 68ksbc ) diff --git a/src/mame/drivers/a7150.cpp b/src/mame/drivers/a7150.cpp index a93a74d0886..3823d23d656 100644 --- a/src/mame/drivers/a7150.cpp +++ b/src/mame/drivers/a7150.cpp @@ -526,17 +526,17 @@ MACHINE_CONFIG_START(a7150_state::a7150) MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000) - MCFG_DEVICE_ADD("ctc_clock", CLOCK, 1230750) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(Z80CTC_TAG, z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80CTC_TAG, z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80CTC_TAG, z80ctc_device, trg2)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80CTC_TAG, z80ctc_device, trg3)) + clock_device &ctc_clock(CLOCK(config, "ctc_clock", 1230750)); + ctc_clock.signal_handler().set(m_ctc, FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg1)); + ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg2)); + ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg3)); - MCFG_DEVICE_ADD(Z80CTC_TAG, Z80CTC, XTAL(16'000'000)/3) - MCFG_Z80CTC_INTR_CB(INPUTLINE("gfxcpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC0_CB(WRITELINE(Z80SIO_TAG, z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80SIO_TAG, z80sio_device, txca_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE(Z80SIO_TAG, z80sio_device, rxtxcb_w)) + Z80CTC(config, m_ctc, 16_MHz_XTAL/3); + m_ctc->intr_callback().set_inputline(m_gfxcpu, INPUT_LINE_IRQ0); + m_ctc->zc_callback<0>().set(Z80SIO_TAG, FUNC(z80sio_device::rxca_w)); + m_ctc->zc_callback<0>().append(Z80SIO_TAG, FUNC(z80sio_device::txca_w)); + m_ctc->zc_callback<1>().set(Z80SIO_TAG, FUNC(z80sio_device::rxtxcb_w)); MCFG_DEVICE_ADD(Z80SIO_TAG, Z80SIO, XTAL(16'000'000)/4) MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("gfxcpu", INPUT_LINE_IRQ0)) diff --git a/src/mame/drivers/abc80x.cpp b/src/mame/drivers/abc80x.cpp index e07fa3a445f..c679698c026 100644 --- a/src/mame/drivers/abc80x.cpp +++ b/src/mame/drivers/abc80x.cpp @@ -1059,12 +1059,12 @@ MACHINE_CONFIG_START(abc800_state::common) MCFG_DEVICE_OPCODES_MAP(abc800_m1) // peripheral hardware - MCFG_DEVICE_ADD(Z80CTC_TAG, Z80CTC, ABC800_X01/2/2) - MCFG_Z80CTC_INTR_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC0_CB(WRITELINE(*this, abc800_state, ctc_z0_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE(*this, abc800_state, ctc_z1_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE(Z80DART_TAG, z80dart_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80DART_TAG, z80dart_device, txca_w)) + Z80CTC(config, m_ctc, ABC800_X01/2/2); + m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_ctc->zc_callback<0>().set(FUNC(abc800_state::ctc_z0_w)); + m_ctc->zc_callback<1>().set(FUNC(abc800_state::ctc_z1_w)); + m_ctc->zc_callback<2>().set(m_dart, FUNC(z80dart_device::rxca_w)); + m_ctc->zc_callback<2>().append(m_dart, FUNC(z80dart_device::txca_w)); MCFG_TIMER_DRIVER_ADD_PERIODIC(TIMER_CTC_TAG, abc800_state, ctc_tick, attotime::from_hz(ABC800_X01/2/2/2)) MCFG_DEVICE_ADD(Z80SIO_TAG, Z80SIO, ABC800_X01/2/2) diff --git a/src/mame/drivers/aerofgt.cpp b/src/mame/drivers/aerofgt.cpp index bc65f9f4d4d..198ba678bbc 100644 --- a/src/mame/drivers/aerofgt.cpp +++ b/src/mame/drivers/aerofgt.cpp @@ -1988,15 +1988,15 @@ MACHINE_CONFIG_START(aerofgt_state::aerofgt) MCFG_MACHINE_START_OVERRIDE(aerofgt_state,aerofgt) MCFG_MACHINE_RESET_OVERRIDE(aerofgt_state,aerofgt) - MCFG_DEVICE_ADD("io", VS9209, 0) - MCFG_VS9209_IN_PORTA_CB(IOPORT("P1")) - MCFG_VS9209_IN_PORTB_CB(IOPORT("P2")) - MCFG_VS9209_IN_PORTC_CB(IOPORT("SYSTEM")) - MCFG_VS9209_IN_PORTD_CB(IOPORT("DSW1")) - MCFG_VS9209_IN_PORTE_CB(IOPORT("DSW2")) - MCFG_VS9209_IN_PORTG_CB(READLINE("soundlatch", generic_latch_8_device, pending_r)) MCFG_DEVCB_BIT(0) - MCFG_VS9209_OUT_PORTG_CB(WRITELINE("watchdog", mb3773_device, write_line_ck)) MCFG_DEVCB_BIT(7) - MCFG_VS9209_IN_PORTH_CB(IOPORT("JP1")) + vs9209_device &io(VS9209(config, "io", 0)); + io.porta_input_cb().set_ioport("P1"); + io.portb_input_cb().set_ioport("P2"); + io.portc_input_cb().set_ioport("SYSTEM"); + io.portd_input_cb().set_ioport("DSW1"); + io.porte_input_cb().set_ioport("DSW2"); + io.portg_input_cb().set(m_soundlatch, FUNC(generic_latch_8_device::pending_r)).lshift(0); + io.portg_output_cb().set("watchdog", FUNC(mb3773_device::write_line_ck)).bit(7); + io.porth_input_cb().set_ioport("JP1"); MCFG_DEVICE_ADD("watchdog", MB3773, 0) diff --git a/src/mame/drivers/alesis.cpp b/src/mame/drivers/alesis.cpp index 8fe0d4fd534..699e4bb5fb7 100644 --- a/src/mame/drivers/alesis.cpp +++ b/src/mame/drivers/alesis.cpp @@ -416,12 +416,12 @@ HD44780_PIXEL_UPDATE(alesis_state::sr16_pixel_update) MACHINE_CONFIG_START(alesis_state::hr16) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",I8031, 12_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(hr16_mem) - MCFG_DEVICE_IO_MAP(hr16_io) - MCFG_MCS51_PORT_P1_IN_CB(IOPORT("SELECT")) - MCFG_MCS51_PORT_P3_IN_CB(READ8(*this, alesis_state, p3_r)) - MCFG_MCS51_PORT_P3_OUT_CB(WRITE8(*this, alesis_state, p3_w)) + I8031(config, m_maincpu, 12_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &alesis_state::hr16_mem); + m_maincpu->set_addrmap(AS_IO, &alesis_state::hr16_io); + m_maincpu->port_in_cb<1>().set_ioport("SELECT"); + m_maincpu->port_in_cb<3>().set(FUNC(alesis_state::p3_r)); + m_maincpu->port_out_cb<3>().set(FUNC(alesis_state::p3_w)); /* video hardware */ MCFG_SCREEN_ADD("screen", LCD) @@ -451,11 +451,11 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(alesis_state::sr16) hr16(config); + /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(sr16_mem) - MCFG_DEVICE_IO_MAP(sr16_io) - MCFG_MCS51_PORT_P1_IN_CB(NOOP) + m_maincpu->set_addrmap(AS_PROGRAM, &alesis_state::sr16_mem); + m_maincpu->set_addrmap(AS_IO, &alesis_state::sr16_io); + m_maincpu->port_in_cb<1>().set_constant(0); /* video hardware */ MCFG_SCREEN_MODIFY("screen") @@ -470,12 +470,12 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(alesis_state::mmt8) hr16(config); + /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(mmt8_io) - MCFG_MCS51_PORT_P1_IN_CB(READ8(*this, alesis_state, kb_r)) - MCFG_MCS51_PORT_P3_IN_CB(READ8(*this, alesis_state, mmt8_p3_r)) - MCFG_MCS51_PORT_P3_OUT_CB(WRITE8(*this, alesis_state, mmt8_p3_w)) + m_maincpu->set_addrmap(AS_IO, &alesis_state::mmt8_io); + m_maincpu->port_in_cb<1>().set(FUNC(alesis_state::kb_r)); + m_maincpu->port_in_cb<3>().set(FUNC(alesis_state::mmt8_p3_r)); + m_maincpu->port_out_cb<3>().set(FUNC(alesis_state::mmt8_p3_w)); MCFG_DEVICE_REMOVE("dm3ag") MACHINE_CONFIG_END diff --git a/src/mame/drivers/alpha68k.cpp b/src/mame/drivers/alpha68k.cpp index 8a0cb630e86..4fa7f393a99 100644 --- a/src/mame/drivers/alpha68k.cpp +++ b/src/mame/drivers/alpha68k.cpp @@ -2105,10 +2105,10 @@ MACHINE_CONFIG_START(alpha68k_state::alpha68k_II) MCFG_DEVICE_IO_MAP(sound_portmap) MCFG_DEVICE_PERIODIC_INT_DRIVER(alpha68k_state, alpha68k_sound_nmi, 7614) - MCFG_DEVICE_ADD("outlatch", LS259, 0) // 14A - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, alpha68k_state, video_control2_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, alpha68k_state, video_control3_w)) - MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(*this, alpha68k_state, video_bank_w)) MCFG_DEVCB_MASK(0x70) MCFG_DEVCB_RSHIFT(-4) + LS259(config, m_outlatch); // 14A + m_outlatch->q_out_cb<2>().set(FUNC(alpha68k_state::video_control2_w)); + m_outlatch->q_out_cb<3>().set(FUNC(alpha68k_state::video_control3_w)); + m_outlatch->parallel_out_cb().set(FUNC(alpha68k_state::video_bank_w)).rshift(4).mask(0x07); MCFG_MACHINE_START_OVERRIDE(alpha68k_state,alpha68k_II) MCFG_MACHINE_RESET_OVERRIDE(alpha68k_state,alpha68k_II) diff --git a/src/mame/drivers/alphatpx.cpp b/src/mame/drivers/alphatpx.cpp index e707af694a1..91848adb5d1 100644 --- a/src/mame/drivers/alphatpx.cpp +++ b/src/mame/drivers/alphatpx.cpp @@ -1232,11 +1232,11 @@ MACHINE_CONFIG_START(alphatp_12_state::alphatp2) MCFG_PALETTE_ADD_MONOCHROME("palette") - MCFG_DEVICE_ADD("crtc", CRT5027, 12.8544_MHz_XTAL / 8) - MCFG_TMS9927_CHAR_WIDTH(8) - MCFG_TMS9927_HSYN_CALLBACK(INPUTLINE("maincpu", I8085_RST55_LINE)) - MCFG_TMS9927_VSYN_CALLBACK(INPUTLINE("maincpu", I8085_RST65_LINE)) MCFG_DEVCB_XOR(1) - MCFG_VIDEO_SET_SCREEN("screen") + CRT5027(config, m_crtc, 12.8544_MHz_XTAL / 8); + m_crtc->set_char_width(8); + m_crtc->hsyn_wr_callback().set_inputline("maincpu", I8085_RST55_LINE); + m_crtc->vsyn_wr_callback().set_inputline("maincpu", I8085_RST65_LINE).exor(1); + m_crtc->set_screen("screen"); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_alphatp3) @@ -1314,10 +1314,10 @@ MACHINE_CONFIG_START(alphatp_34_state::alphatp3) MCFG_PALETTE_ADD_MONOCHROME("palette") - MCFG_DEVICE_ADD("crtc", CRT5037, 12.8544_MHz_XTAL / 8) - MCFG_TMS9927_CHAR_WIDTH(8) - MCFG_TMS9927_VSYN_CALLBACK(INPUTLINE("maincpu", I8085_RST65_LINE)) MCFG_DEVCB_XOR(1) - MCFG_VIDEO_SET_SCREEN("screen") + CRT5037(config, m_crtc, 12.8544_MHz_XTAL / 8); + m_crtc->set_char_width(8); + m_crtc->vsyn_wr_callback().set_inputline("maincpu", I8085_RST65_LINE).exor(1); + m_crtc->set_screen("screen"); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_alphatp3) @@ -1347,7 +1347,7 @@ MACHINE_CONFIG_START(alphatp_34_state::alphatp30) MCFG_DEVICE_ADD("pic8259", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("i8088", 0)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("pit", PIT8253, 0) MCFG_PIT8253_CLK0(100000) // 15Mhz osc with unknown divisor diff --git a/src/mame/drivers/alphatro.cpp b/src/mame/drivers/alphatro.cpp index fcebc5d0290..85f30d5ad6a 100644 --- a/src/mame/drivers/alphatro.cpp +++ b/src/mame/drivers/alphatro.cpp @@ -746,9 +746,9 @@ MACHINE_CONFIG_START(alphatro_state::alphatro) MCFG_DEVICE_ADD("usart", I8251, 0) MCFG_I8251_TXD_HANDLER(WRITELINE(*this, alphatro_state, txdata_callback)) - MCFG_DEVICE_ADD("usart_clock", CLOCK, 19218) // 19218 to load a real tape, 19222 to load a tape made by this driver - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("usart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("usart", i8251_device, write_rxc)) + clock_device &usart_clock(CLOCK(config, "usart_clock", 19218)); // 19218 to load a real tape, 19222 to load a tape made by this driver + usart_clock.signal_handler().set(m_usart, FUNC(i8251_device::write_txc)); + usart_clock.signal_handler().append(m_usart, FUNC(i8251_device::write_rxc)); MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED) diff --git a/src/mame/drivers/altair.cpp b/src/mame/drivers/altair.cpp index 8840e4dda67..8929942a73c 100644 --- a/src/mame/drivers/altair.cpp +++ b/src/mame/drivers/altair.cpp @@ -113,9 +113,9 @@ MACHINE_CONFIG_START(altair_state::altair) MCFG_RS232_DCD_HANDLER(WRITELINE("acia", acia6850_device, write_dcd)) MCFG_RS232_CTS_HANDLER(WRITELINE("acia", acia6850_device, write_cts)) - MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) // TODO: this is set using jumpers S3/S2/S1/S0 - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); // TODO: this is set using jumpers S3/S2/S1/S0 + uart_clock.signal_handler().set("acia", FUNC(acia6850_device::write_txc)); + uart_clock.signal_handler().append("acia", FUNC(acia6850_device::write_rxc)); /* quickload */ MCFG_QUICKLOAD_ADD("quickload", altair_state, altair, "bin", 0) diff --git a/src/mame/drivers/altos2.cpp b/src/mame/drivers/altos2.cpp index db1272a1d8c..7261f9778a5 100644 --- a/src/mame/drivers/altos2.cpp +++ b/src/mame/drivers/altos2.cpp @@ -102,31 +102,32 @@ static const z80_daisy_config daisy_chain[] = MACHINE_CONFIG_START(altos2_state::altos2) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80, XTAL(4'000'000)) // unknown clock + MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(4'000'000)) // unknown clock MCFG_DEVICE_PROGRAM_MAP(mem_map) MCFG_DEVICE_IO_MAP(io_map) MCFG_Z80_DAISY_CHAIN(daisy_chain) - MCFG_DEVICE_ADD("ctc_clock", CLOCK, 4915200) // ctc & dart connections are guesswork - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg2)) + clock_device &ctc_clock(CLOCK(config, "ctc_clock", 4915200)); // ctc & dart connections are guesswork + ctc_clock.signal_handler().set("ctc", FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append("ctc", FUNC(z80ctc_device::trg1)); + ctc_clock.signal_handler().append("ctc", FUNC(z80ctc_device::trg2)); - MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL(4'000'000)) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC0_CB(WRITELINE("dart1", z80dart_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart1", z80dart_device, rxca_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("dart1", z80dart_device, rxtxcb_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE("dart2", z80dart_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart2", z80dart_device, txca_w)) + z80ctc_device &ctc(Z80CTC(config, "ctc", 4_MHz_XTAL)); + ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + ctc.zc_callback<0>().set("dart1", FUNC(z80dart_device::txca_w)); + ctc.zc_callback<0>().append("dart1", FUNC(z80dart_device::rxca_w)); + ctc.zc_callback<1>().set("dart1", FUNC(z80dart_device::rxtxcb_w)); + ctc.zc_callback<2>().set("dart2", FUNC(z80dart_device::rxca_w)); + ctc.zc_callback<2>().append("dart2", FUNC(z80dart_device::txca_w)); - MCFG_DEVICE_ADD("dart1", Z80DART, XTAL(4'000'000)) - MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_DEVICE_ADD("dart2", Z80DART, XTAL(4'000'000)) // channel B not used for communications - MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80DART_OUT_DTRB_CB(WRITELINE("novram", x2210_device, store)) MCFG_DEVCB_INVERT // FIXME: no inverter should be needed + z80dart_device &dart1(Z80DART(config, "dart1", 4_MHz_XTAL)); + dart1.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - MCFG_DEVICE_ADD("novram", X2210, 0) + z80dart_device &dart2(Z80DART(config, "dart2", 4_MHz_XTAL)); // channel B not used for communications + dart2.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + dart2.out_dtrb_callback().set(m_novram, FUNC(x2210_device::store)).invert(); // FIXME: no inverter should be needed + + X2210(config, m_novram, 0); MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL(40'000'000) / 2, 960, 0, 800, 347, 0, 325) diff --git a/src/mame/drivers/altos486.cpp b/src/mame/drivers/altos486.cpp index 098386f982b..afa25857d3e 100644 --- a/src/mame/drivers/altos486.cpp +++ b/src/mame/drivers/altos486.cpp @@ -132,7 +132,7 @@ void altos486_state::altos486_z80_io(address_map &map) } MACHINE_CONFIG_START(altos486_state::altos486) - MCFG_DEVICE_ADD("maincpu", I80186, XTAL(8'000'000)) + MCFG_DEVICE_ADD(m_maincpu, I80186, XTAL(8'000'000)) MCFG_DEVICE_PROGRAM_MAP(altos486_mem) MCFG_DEVICE_IO_MAP(altos486_io) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb) // yes, really @@ -141,10 +141,10 @@ MACHINE_CONFIG_START(altos486_state::altos486) MCFG_DEVICE_PROGRAM_MAP(altos486_z80_mem) MCFG_DEVICE_IO_MAP(altos486_z80_io) - MCFG_DEVICE_ADD("pic8259", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE("maincpu", i80186_cpu_device, int0_w)) - MCFG_PIC8259_IN_SP_CB(VCC) - MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, altos486_state, read_rmx_ack)) + pic8259_device &pic8259(PIC8259(config, "pic8259", 0)); + pic8259.out_int_callback().set(m_maincpu, FUNC(i80186_cpu_device::int0_w)); + pic8259.in_sp_callback().set_constant(1); + pic8259.read_slave_ack_callback().set(FUNC(altos486_state::read_rmx_ack)); MCFG_DEVICE_ADD("ppi8255", I8255, 0) diff --git a/src/mame/drivers/altos5.cpp b/src/mame/drivers/altos5.cpp index 958a81ed330..746039d0a6e 100644 --- a/src/mame/drivers/altos5.cpp +++ b/src/mame/drivers/altos5.cpp @@ -415,10 +415,10 @@ MACHINE_CONFIG_START(altos5_state::altos5) MCFG_DEVICE_IO_MAP(io_map) MCFG_Z80_DAISY_CHAIN(daisy_chain_intf) - MCFG_DEVICE_ADD("ctc_clock", CLOCK, 8_MHz_XTAL / 4) // 2MHz - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc" ,z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc" ,z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc" ,z80ctc_device, trg2)) + clock_device &ctc_clock(CLOCK(config, "ctc_clock", 8_MHz_XTAL / 4)); // 2MHz + ctc_clock.signal_handler().set("ctc", FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append("ctc", FUNC(z80ctc_device::trg1)); + ctc_clock.signal_handler().append("ctc", FUNC(z80ctc_device::trg2)); /* devices */ MCFG_DEVICE_ADD("dma", Z80DMA, 8_MHz_XTAL / 2) @@ -454,14 +454,14 @@ MACHINE_CONFIG_START(altos5_state::altos5) MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("rs232", rs232_port_device, write_rts)) MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_DEVICE_ADD("ctc", Z80CTC, 8_MHz_XTAL / 2) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio", z80sio_device, rxtxcb_w)) // SIO Ch B - MCFG_Z80CTC_ZC1_CB(WRITELINE("dart", z80dart_device, txca_w)) // Z80DART Ch A, SIO Ch A - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart" ,z80dart_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio" ,z80sio_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio" ,z80sio_device, rxca_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE("dart", z80dart_device, rxtxcb_w)) // Z80DART Ch B + z80ctc_device &ctc(Z80CTC(config, "ctc", 8_MHz_XTAL / 2)); + ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + ctc.zc_callback<0>().set("sio", FUNC(z80sio_device::rxtxcb_w)); // SIO Ch B + ctc.zc_callback<1>().set("dart", FUNC(z80dart_device::txca_w)); // Z80DART Ch A, SIO Ch A + ctc.zc_callback<1>().append("dart", FUNC(z80dart_device::rxca_w)); + ctc.zc_callback<1>().append("sio", FUNC(z80sio_device::txca_w)); + ctc.zc_callback<1>().append("sio", FUNC(z80sio_device::rxca_w)); + ctc.zc_callback<2>().set("dart", FUNC(z80dart_device::rxtxcb_w)); // Z80DART Ch B MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(WRITELINE("sio", z80sio_device, rxb_w)) diff --git a/src/mame/drivers/altos8600.cpp b/src/mame/drivers/altos8600.cpp index 78565331a70..cdad666251b 100644 --- a/src/mame/drivers/altos8600.cpp +++ b/src/mame/drivers/altos8600.cpp @@ -725,7 +725,7 @@ static void altos8600_floppies(device_slot_interface &device) } MACHINE_CONFIG_START(altos8600_state::altos8600) - MCFG_DEVICE_ADD("maincpu", I8086, 5_MHz_XTAL) + MCFG_DEVICE_ADD(m_maincpu, I8086, 5_MHz_XTAL) MCFG_DEVICE_PROGRAM_MAP(cpu_mem) MCFG_DEVICE_IO_MAP(cpu_io) MCFG_DEVICE_OPCODES_MAP(code_mem) @@ -735,25 +735,25 @@ MACHINE_CONFIG_START(altos8600_state::altos8600) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(altos8600_state, inta) MCFG_I8086_IF_HANDLER(WRITELINE(*this, altos8600_state, cpuif_w)) - MCFG_DEVICE_ADD("dmac", I8089, 5_MHz_XTAL) + MCFG_DEVICE_ADD(m_dmac, I8089, 5_MHz_XTAL) MCFG_DEVICE_PROGRAM_MAP(dmac_mem) MCFG_DEVICE_IO_MAP(dmac_io) MCFG_I8089_DATA_WIDTH(16) MCFG_I8089_SINTR1(WRITELINE(*this, altos8600_state, sintr1_w)) - MCFG_I8089_SINTR2(WRITELINE("pic8259_2", pic8259_device, ir4_w)) + MCFG_I8089_SINTR2(WRITELINE(m_pic2, pic8259_device, ir4_w)) - MCFG_DEVICE_ADD("pic8259_1", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) - MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, altos8600_state, get_slave_ack)) + PIC8259(config, m_pic1, 0); + m_pic1->out_int_callback().set_inputline(m_maincpu, 0); + m_pic1->in_sp_callback().set_constant(1); + m_pic1->read_slave_ack_callback().set(FUNC(altos8600_state::get_slave_ack)); - MCFG_DEVICE_ADD("pic8259_2", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_1", pic8259_device, ir2_w)) - MCFG_PIC8259_IN_SP_CB(GND) + PIC8259(config, m_pic2, 0); + m_pic2->out_int_callback().set(m_pic1, FUNC(pic8259_device::ir2_w)); + m_pic2->in_sp_callback().set_constant(0); - MCFG_DEVICE_ADD("pic8259_3", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_1", pic8259_device, ir3_w)) - MCFG_PIC8259_IN_SP_CB(GND) + PIC8259(config, m_pic3, 0); + m_pic3->out_int_callback().set(m_pic1, FUNC(pic8259_device::ir3_w)); + m_pic3->in_sp_callback().set_constant(0); MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("1M") @@ -780,14 +780,14 @@ MACHINE_CONFIG_START(altos8600_state::altos8600) MCFG_DEVICE_ADD("ppi", I8255A, 0) - MCFG_DEVICE_ADD("pit", PIT8253, 0) - MCFG_PIT8253_CLK0(1228800) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("uart8274", i8274_new_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart8274", i8274_new_device, txca_w)) - MCFG_PIT8253_CLK1(1228800) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("uart8274", i8274_new_device, rxtxcb_w)) - MCFG_PIT8253_CLK2(1228800) - MCFG_PIT8253_OUT2_HANDLER(WRITELINE("pic8259_1", pic8259_device, ir1_w)) + pit8253_device &pit(PIT8253(config, "pit", 0)); + pit.set_clk<0>(1228800); + pit.out_handler<0>().set(m_uart8274, FUNC(i8274_new_device::rxca_w)); + pit.out_handler<0>().append(m_uart8274, FUNC(i8274_new_device::txca_w)); + pit.set_clk<1>(1228800); + pit.out_handler<1>().set(m_uart8274, FUNC(i8274_new_device::rxtxcb_w)); + pit.set_clk<2>(1228800); + pit.out_handler<1>().set(m_pic1, FUNC(pic8259_device::ir1_w)); MCFG_DEVICE_ADD("fd1797", FD1797, 2000000) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE("pic8259_2", pic8259_device, ir1_w)) @@ -797,9 +797,10 @@ MACHINE_CONFIG_START(altos8600_state::altos8600) MCFG_FLOPPY_DRIVE_ADD("fd1797:2", altos8600_floppies, "8dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fd1797:3", altos8600_floppies, "8dd", floppy_image_device::default_floppy_formats) - MCFG_DEVICE_ADD("ics", ACS8600_ICS, "dmac") - MCFG_ACS8600_ICS_IRQ1(WRITELINE("pic8259_1", pic8259_device, ir5_w)) - MCFG_ACS8600_ICS_IRQ2(WRITELINE("pic8259_1", pic8259_device, ir6_w)) + ACS8600_ICS(config, m_ics, 0); + m_ics->set_host_space(m_dmac, AS_PROGRAM); // TODO: fixme + m_ics->irq1_callback().set(m_pic1, FUNC(pic8259_device::ir5_w)); + m_ics->irq2_callback().set(m_pic1, FUNC(pic8259_device::ir6_w)); MCFG_HARDDISK_ADD("hdd") MACHINE_CONFIG_END diff --git a/src/mame/drivers/amiga.cpp b/src/mame/drivers/amiga.cpp index c4f178a0f52..debff0fdf97 100644 --- a/src/mame/drivers/amiga.cpp +++ b/src/mame/drivers/amiga.cpp @@ -1381,19 +1381,19 @@ MACHINE_CONFIG_START(amiga_state::amiga_base) MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga) // cia - MCFG_DEVICE_ADD("cia_0", MOS8520, amiga_state::CLK_E_PAL) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(*this, amiga_state, cia_0_irq)) - MCFG_MOS6526_PA_INPUT_CALLBACK(IOPORT("cia_0_port_a")) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, amiga_state, cia_0_port_a_write)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8("cent_data_out", output_latch_device, bus_w)) - MCFG_MOS6526_PC_CALLBACK(WRITELINE("centronics", centronics_device, write_strobe)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE("kbd", amiga_keyboard_bus_device, kdat_in_w)) MCFG_DEVCB_INVERT + MOS8520(config, m_cia_0, amiga_state::CLK_E_PAL); + m_cia_0->irq_wr_callback().set(FUNC(amiga_state::cia_0_irq)); + m_cia_0->pa_rd_callback().set_ioport("cia_0_port_a"); + m_cia_0->pa_wr_callback().set(FUNC(amiga_state::cia_0_port_a_write)); + m_cia_0->pb_wr_callback().set("cent_data_out", FUNC(output_latch_device::bus_w)); + m_cia_0->pc_wr_callback().set(m_centronics, FUNC(centronics_device::write_strobe)); + m_cia_0->sp_wr_callback().set("kbd", FUNC(amiga_keyboard_bus_device::kdat_in_w)).invert(); - MCFG_DEVICE_ADD("cia_1", MOS8520, amiga_state::CLK_E_PAL) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(*this, amiga_state, cia_1_irq)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, amiga_state, cia_1_port_a_read)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, amiga_state, cia_1_port_a_write)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8("fdc", amiga_fdc_device, ciaaprb_w)) + MOS8520(config, m_cia_1, amiga_state::CLK_E_PAL); + m_cia_1->irq_wr_callback().set(FUNC(amiga_state::cia_1_irq)); + m_cia_1->pa_rd_callback().set(FUNC(amiga_state::cia_1_port_a_read)); + m_cia_1->pa_wr_callback().set(FUNC(amiga_state::cia_1_port_a_write)); + m_cia_1->pb_wr_callback().set(m_fdc, FUNC(amiga_fdc_device::ciaaprb_w)); // audio SPEAKER(config, "lspeaker").front_left(); @@ -1618,13 +1618,13 @@ MACHINE_CONFIG_START(cdtv_state::cdtv) MCFG_TPI6525_OUT_PB_CB(WRITE8(*this, cdtv_state, tpi_port_b_write)) // cd-rom - MCFG_CR511B_ADD("cdrom") - MCFG_CR511B_SCOR_HANDLER(WRITELINE("u32", tpi6525_device, i1_w)) MCFG_DEVCB_INVERT - MCFG_CR511B_STCH_HANDLER(WRITELINE("u32", tpi6525_device, i2_w)) MCFG_DEVCB_INVERT - MCFG_CR511B_STEN_HANDLER(WRITELINE("u32", tpi6525_device, i3_w)) - MCFG_CR511B_XAEN_HANDLER(WRITELINE("u32", tpi6525_device, pb2_w)) - MCFG_CR511B_DRQ_HANDLER(WRITELINE("u36", amiga_dmac_device, xdreq_w)) - MCFG_CR511B_DTEN_HANDLER(WRITELINE("u36", amiga_dmac_device, xdreq_w)) + CR511B(config, m_cdrom, 0); + m_cdrom->scor_handler().set("u32", FUNC(tpi6525_device::i1_w)).invert(); + m_cdrom->stch_handler().set("u32", FUNC(tpi6525_device::i2_w)).invert(); + m_cdrom->sten_handler().set("u32", FUNC(tpi6525_device::i3_w)); + m_cdrom->xaen_handler().set("u32", FUNC(tpi6525_device::pb2_w)); + m_cdrom->drq_handler().set("u36", FUNC(amiga_dmac_device::xdreq_w)); + m_cdrom->dten_handler().set("u36", FUNC(amiga_dmac_device::xdreq_w)); // software MCFG_SOFTWARE_LIST_ADD("cd_list", "cdtv") diff --git a/src/mame/drivers/ampro.cpp b/src/mame/drivers/ampro.cpp index 005ef171d3f..f26e4583856 100644 --- a/src/mame/drivers/ampro.cpp +++ b/src/mame/drivers/ampro.cpp @@ -39,8 +39,8 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_dart(*this, "dart") - , m_ctc (*this, "ctc") - , m_fdc (*this, "fdc") + , m_ctc(*this, "ctc") + , m_fdc(*this, "fdc") , m_floppy0(*this, "fdc:0") { } @@ -160,16 +160,16 @@ MACHINE_CONFIG_START(ampro_state::ampro) MCFG_Z80_DAISY_CHAIN(daisy_chain_intf) MCFG_MACHINE_RESET_OVERRIDE(ampro_state, ampro) - MCFG_DEVICE_ADD("ctc_clock", CLOCK, 16_MHz_XTAL / 8) // 2MHz - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg1)) + clock_device &ctc_clock(CLOCK(config, "ctc_clock", 16_MHz_XTAL / 8)); // 2MHz + ctc_clock.signal_handler().set(m_ctc, FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg1)); /* Devices */ - MCFG_DEVICE_ADD("ctc", Z80CTC, 16_MHz_XTAL / 4) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC0_CB(WRITELINE("dart", z80dart_device, txca_w)) // Z80DART Ch A, SIO Ch A - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart", z80dart_device, rxca_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("dart", z80dart_device, rxtxcb_w)) // SIO Ch B + Z80CTC(config, m_ctc, 16_MHz_XTAL / 4); + m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_ctc->zc_callback<0>().set("dart", FUNC(z80dart_device::txca_w)); // Z80DART Ch A, SIO Ch A + m_ctc->zc_callback<0>().append("dart", FUNC(z80dart_device::rxca_w)); + m_ctc->zc_callback<1>().set("dart", FUNC(z80dart_device::rxtxcb_w)); // SIO Ch B MCFG_DEVICE_ADD("dart", Z80DART, 16_MHz_XTAL / 4) MCFG_Z80DART_OUT_TXDA_CB(WRITELINE("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/amust.cpp b/src/mame/drivers/amust.cpp index bdc8dd3dfba..bd8377301a3 100644 --- a/src/mame/drivers/amust.cpp +++ b/src/mame/drivers/amust.cpp @@ -415,9 +415,9 @@ MACHINE_CONFIG_START(amust_state::amust) MCFG_FLOPPY_DRIVE_ADD("fdc:1", amust_floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart1", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart1", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("uart1", I8251, 0) MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/apc.cpp b/src/mame/drivers/apc.cpp index 6457de80048..967b000dcdb 100644 --- a/src/mame/drivers/apc.cpp +++ b/src/mame/drivers/apc.cpp @@ -949,14 +949,14 @@ MACHINE_CONFIG_START(apc_state::apc) MCFG_PIT8253_CLK1(MAIN_CLOCK) /* Memory Refresh */ MCFG_PIT8253_CLK2(MAIN_CLOCK) /* RS-232c */ - MCFG_DEVICE_ADD(m_i8259_m, PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(INPUTLINE(m_maincpu, 0)) - MCFG_PIC8259_IN_SP_CB(VCC) - MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, apc_state, get_slave_ack)) + PIC8259(config, m_i8259_m, 0); + m_i8259_m->out_int_callback().set_inputline(m_maincpu, 0); + m_i8259_m->in_sp_callback().set_constant(1); + m_i8259_m->read_slave_ack_callback().set(FUNC(apc_state::get_slave_ack)); - MCFG_DEVICE_ADD(m_i8259_s, PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE(m_i8259_m, pic8259_device, ir7_w)) // TODO: check ir7_w - MCFG_PIC8259_IN_SP_CB(GND) + PIC8259(config, m_i8259_s, 0); + m_i8259_s->out_int_callback().set(m_i8259_m, FUNC(pic8259_device::ir7_w)); // TODO: check ir7_w + m_i8259_s->in_sp_callback().set_constant(0); MCFG_DEVICE_ADD(m_dmac, AM9517A, MAIN_CLOCK) MCFG_I8237_OUT_HREQ_CB(WRITELINE(*this, apc_state, apc_dma_hrq_changed)) diff --git a/src/mame/drivers/apricot.cpp b/src/mame/drivers/apricot.cpp index 736f9726a59..d6e03a92627 100644 --- a/src/mame/drivers/apricot.cpp +++ b/src/mame/drivers/apricot.cpp @@ -408,15 +408,15 @@ MACHINE_CONFIG_START(apricot_state::apricot) MCFG_DEVICE_ADD("ic31", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("ic91", 0)) - MCFG_DEVICE_ADD("ic16", PIT8253, 0) - MCFG_PIT8253_CLK0(4_MHz_XTAL / 16) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("ic31", pic8259_device, ir6_w)) - MCFG_PIT8253_CLK1(4_MHz_XTAL / 2) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("ic14", ttl153_device, i0a_w)) - MCFG_PIT8253_CLK2(4_MHz_XTAL / 2) - MCFG_PIT8253_OUT2_HANDLER(WRITELINE("ic14", ttl153_device, i0b_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ic14", ttl153_device, i2a_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ic14", ttl153_device, i2b_w)) + PIT8253(config, m_pit, 0); + m_pit->set_clk<0>(4_MHz_XTAL / 16); + m_pit->out_handler<0>().set("ic31", FUNC(pic8259_device::ir6_w)); + m_pit->set_clk<1>(4_MHz_XTAL / 2); + m_pit->out_handler<1>().set("ic14", FUNC(ttl153_device::i0a_w)); + m_pit->set_clk<2>(4_MHz_XTAL / 2); + m_pit->out_handler<2>().set("ic14", FUNC(ttl153_device::i0b_w)); + m_pit->out_handler<2>().append("ic14", FUNC(ttl153_device::i2a_w)); + m_pit->out_handler<2>().append("ic14", FUNC(ttl153_device::i2b_w)); MCFG_DEVICE_ADD("ic14", TTL153) MCFG_TTL153_ZA_CB(WRITELINE("ic15", z80sio_device, rxca_w)) @@ -437,12 +437,12 @@ MACHINE_CONFIG_START(apricot_state::apricot) MCFG_Z80SIO_OUT_INT_CB(WRITELINE("ic31", pic8259_device, ir5_w)) // rs232 port - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr) + RS232_PORT(config, m_rs232, default_rs232_devices, nullptr); // note: missing a receive clock callback to support external clock mode (i1 to 153) - MCFG_RS232_RXD_HANDLER(WRITELINE("ic15", z80sio_device, rxa_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("ic15", z80sio_device, dcda_w)) - MCFG_RS232_DSR_HANDLER(WRITELINE("ic15", z80sio_device, synca_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("ic15", z80sio_device, ctsa_w)) MCFG_DEVCB_XOR(1) + m_rs232->rxd_handler().set(m_sio, FUNC(z80sio_device::rxa_w)); + m_rs232->dcd_handler().set(m_sio, FUNC(z80sio_device::dcda_w)); + m_rs232->dsr_handler().set(m_sio, FUNC(z80sio_device::synca_w)); + m_rs232->cts_handler().set(m_sio, FUNC(z80sio_device::ctsa_w)).invert(); // keyboard MCFG_APRICOT_KEYBOARD_INTERFACE_ADD("kbd", "hle") diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp index d652d35c06d..781a6f42aed 100644 --- a/src/mame/drivers/asteroid.cpp +++ b/src/mame/drivers/asteroid.cpp @@ -740,17 +740,17 @@ MACHINE_CONFIG_START(asteroid_state::asteroid_base) MCFG_WATCHDOG_ADD("watchdog") - MCFG_DEVICE_ADD("dsw_sel", TTL153) + TTL153(config, m_dsw_sel); - MCFG_DEVICE_ADD("outlatch", OUTPUT_LATCH, 0) // LS174 at N11 - MCFG_OUTPUT_LATCH_BIT0_HANDLER(OUTPUT("led1")) MCFG_DEVCB_INVERT // 2 PLYR START LAMP - MCFG_OUTPUT_LATCH_BIT1_HANDLER(OUTPUT("led0")) MCFG_DEVCB_INVERT // 1 PLYR START LAMP - MCFG_OUTPUT_LATCH_BIT2_HANDLER(MEMBANK("ram1")) // RAMSEL - MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("ram2")) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, asteroid_state, cocktail_inv_w)) - MCFG_OUTPUT_LATCH_BIT3_HANDLER(WRITELINE(*this, asteroid_state, coin_counter_left_w)) // COIN CNTRL - MCFG_OUTPUT_LATCH_BIT4_HANDLER(WRITELINE(*this, asteroid_state, coin_counter_center_w)) // COIN CNTRC - MCFG_OUTPUT_LATCH_BIT5_HANDLER(WRITELINE(*this, asteroid_state, coin_counter_right_w)) // COIN CNTRR + output_latch_device &outlatch(OUTPUT_LATCH(config, "outlatch")); // LS174 at N11 + outlatch.bit_handler<0>().set_output("led1").invert(); // 2 PLYR START LAMP + outlatch.bit_handler<1>().set_output("led0").invert(); // 1 PLYR START LAMP + outlatch.bit_handler<2>().set_membank("ram1"); // RAMSEL + outlatch.bit_handler<2>().append_membank("ram2"); + outlatch.bit_handler<2>().append(FUNC(asteroid_state::cocktail_inv_w)); + outlatch.bit_handler<3>().set(FUNC(asteroid_state::coin_counter_left_w)); // COIN CNTRL + outlatch.bit_handler<4>().set(FUNC(asteroid_state::coin_counter_center_w)); // COIN CNTRC + outlatch.bit_handler<5>().set(FUNC(asteroid_state::coin_counter_right_w)); // COIN CNTRR /* video hardware */ MCFG_VECTOR_ADD("vector") @@ -798,15 +798,15 @@ MACHINE_CONFIG_START(asteroid_state::astdelux) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_DEVICE_REMOVE("outlatch") - MCFG_DEVICE_MODIFY("audiolatch") - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT // START1 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // START2 - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("ram1")) // RAMSEL - MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("ram2")) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, asteroid_state, cocktail_inv_w)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, asteroid_state, coin_counter_left_w)) // LEFT COIN - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, asteroid_state, coin_counter_center_w)) // CENTER COIN - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, asteroid_state, coin_counter_right_w)) // RIGHT COIN + ls259_device &audiolatch(*subdevice("audiolatch")); + audiolatch.q_out_cb<0>().set_output("led0").invert(); // START1 + audiolatch.q_out_cb<1>().set_output("led1").invert(); // START2 + audiolatch.q_out_cb<4>().set_membank("ram1"); // RAMSEL + audiolatch.q_out_cb<4>().append_membank("ram2"); + audiolatch.q_out_cb<4>().append(FUNC(asteroid_state::cocktail_inv_w)); + audiolatch.q_out_cb<5>().set(FUNC(asteroid_state::coin_counter_left_w)); // LEFT COIN + audiolatch.q_out_cb<6>().set(FUNC(asteroid_state::coin_counter_center_w)); // CENTER COIN + audiolatch.q_out_cb<7>().set(FUNC(asteroid_state::coin_counter_right_w)); // RIGHT COIN MACHINE_CONFIG_END diff --git a/src/mame/drivers/astrocde.cpp b/src/mame/drivers/astrocde.cpp index 9924585c5f4..fd54719916e 100644 --- a/src/mame/drivers/astrocde.cpp +++ b/src/mame/drivers/astrocde.cpp @@ -1266,23 +1266,23 @@ MACHINE_CONFIG_START(seawolf2_state::seawolf2) MCFG_DEVICE_PROGRAM_MAP(seawolf2_map) MCFG_DEVICE_IO_MAP(port_map_discrete) - MCFG_DEVICE_ADD("lamplatch1", OUTPUT_LATCH, 0) // 74174 on game board at N2 - MCFG_OUTPUT_LATCH_BIT0_HANDLER(OUTPUT("lamp6")) // right player torpedo 4 available - MCFG_OUTPUT_LATCH_BIT1_HANDLER(OUTPUT("lamp5")) // right player torpedo 3 available - MCFG_OUTPUT_LATCH_BIT2_HANDLER(OUTPUT("lamp4")) // right player torpedo 2 available - MCFG_OUTPUT_LATCH_BIT3_HANDLER(OUTPUT("lamp3")) // right player torpedo 1 available - MCFG_OUTPUT_LATCH_BIT4_HANDLER(OUTPUT("lamp2")) // right player ready - MCFG_DEVCB_CHAIN_OUTPUT(OUTPUT("lamp1")) MCFG_DEVCB_INVERT // right player reload (active low) - MCFG_OUTPUT_LATCH_BIT5_HANDLER(OUTPUT("lamp0")) // right player explosion (hit) + output_latch_device &lamplatch1(OUTPUT_LATCH(config, "lamplatch1")); // 74174 on game board at N2 + lamplatch1.bit_handler<0>().set_output("lamp6"); // right player torpedo 4 available + lamplatch1.bit_handler<1>().set_output("lamp5"); // right player torpedo 3 available + lamplatch1.bit_handler<2>().set_output("lamp4"); // right player torpedo 2 available + lamplatch1.bit_handler<3>().set_output("lamp3"); // right player torpedo 1 available + lamplatch1.bit_handler<4>().set_output("lamp2"); // right player ready + lamplatch1.bit_handler<4>().append_output("lamp1").invert(); // right player reload (active low) + lamplatch1.bit_handler<5>().set_output("lamp0"); // right player explosion (hit) - MCFG_DEVICE_ADD("lamplatch2", OUTPUT_LATCH, 0) // 74174 on game board at P2 - MCFG_OUTPUT_LATCH_BIT0_HANDLER(OUTPUT("lamp13")) // left player torpedo 4 available - MCFG_OUTPUT_LATCH_BIT1_HANDLER(OUTPUT("lamp12")) // left player torpedo 3 available - MCFG_OUTPUT_LATCH_BIT2_HANDLER(OUTPUT("lamp11")) // left player torpedo 2 available - MCFG_OUTPUT_LATCH_BIT3_HANDLER(OUTPUT("lamp10")) // left player torpedo 1 available - MCFG_OUTPUT_LATCH_BIT4_HANDLER(OUTPUT("lamp9")) // left player ready - MCFG_DEVCB_CHAIN_OUTPUT(OUTPUT("lamp8")) MCFG_DEVCB_INVERT // left player reload (active low) - MCFG_OUTPUT_LATCH_BIT5_HANDLER(OUTPUT("lamp7")) // left player explosion (hit) + output_latch_device &lamplatch2(OUTPUT_LATCH(config, "lamplatch2")); // 74174 on game board at P2 + lamplatch2.bit_handler<0>().set_output("lamp13"); // left player torpedo 4 available + lamplatch2.bit_handler<1>().set_output("lamp12"); // left player torpedo 3 available + lamplatch2.bit_handler<2>().set_output("lamp11"); // left player torpedo 2 available + lamplatch2.bit_handler<3>().set_output("lamp10"); // left player torpedo 1 available + lamplatch2.bit_handler<4>().set_output("lamp9"); // left player ready + lamplatch2.bit_handler<4>().append_output("lamp8").invert(); // left player reload (active low) + lamplatch2.bit_handler<5>().set_output("lamp7"); // left player explosion (hit) /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/asuka.cpp b/src/mame/drivers/asuka.cpp index 1da7f2756e5..5cc1f8158c2 100644 --- a/src/mame/drivers/asuka.cpp +++ b/src/mame/drivers/asuka.cpp @@ -913,13 +913,13 @@ MACHINE_CONFIG_START(asuka_state::asuka) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, asuka_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(asuka_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -951,11 +951,11 @@ MACHINE_CONFIG_START(asuka_state::asuka) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(16'000'000)/4) /* verified on pcb */ - MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_YM2151_PORT_WRITE_HANDLER(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) - MCFG_SOUND_ROUTE(0, "mono", 0.50) - MCFG_SOUND_ROUTE(1, "mono", 0.50) + ym2151_device &ymsnd(YM2151(config, "ymsnd", 16_MHz_XTAL/4)); // verified on PCB + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.port_write_handler().set_membank(m_audiobank).mask(0x03); + ymsnd.add_route(0, "mono", 0.50); + ymsnd.add_route(1, "mono", 0.50); MCFG_DEVICE_ADD("msm", MSM5205, XTAL(384'000)) /* verified on pcb */ MCFG_MSM5205_VCLK_CB(WRITELINE(*this, asuka_state, asuka_msm5205_vck)) /* VCK function */ @@ -987,13 +987,13 @@ MACHINE_CONFIG_START(asuka_state::cadash) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, asuka_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(asuka_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1026,11 +1026,11 @@ MACHINE_CONFIG_START(asuka_state::cadash) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(8'000'000)/2) /* verified on pcb */ - MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_YM2151_PORT_WRITE_HANDLER(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) - MCFG_SOUND_ROUTE(0, "mono", 0.50) - MCFG_SOUND_ROUTE(1, "mono", 0.50) + ym2151_device &ymsnd(YM2151(config, "ymsnd", 8_MHz_XTAL/2)); // verified on PCB + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.port_write_handler().set_membank(m_audiobank).mask(0x03); + ymsnd.add_route(0, "mono", 0.50); + ymsnd.add_route(1, "mono", 0.50); MCFG_DEVICE_ADD("ciu", PC060HA, 0) MCFG_PC060HA_MASTER_CPU("maincpu") @@ -1050,13 +1050,13 @@ MACHINE_CONFIG_START(asuka_state::mofflott) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, asuka_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(asuka_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1088,11 +1088,11 @@ MACHINE_CONFIG_START(asuka_state::mofflott) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, 4000000) - MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_YM2151_PORT_WRITE_HANDLER(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) - MCFG_SOUND_ROUTE(0, "mono", 0.50) - MCFG_SOUND_ROUTE(1, "mono", 0.50) + ym2151_device &ymsnd(YM2151(config, "ymsnd", 4000000)); + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.port_write_handler().set_membank(m_audiobank).mask(0x03); + ymsnd.add_route(0, "mono", 0.50); + ymsnd.add_route(1, "mono", 0.50); MCFG_DEVICE_ADD("msm", MSM5205, 384000) MCFG_MSM5205_VCLK_CB(WRITELINE(*this, asuka_state, asuka_msm5205_vck)) /* VCK function */ @@ -1120,13 +1120,13 @@ MACHINE_CONFIG_START(asuka_state::eto) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, asuka_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(asuka_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1158,11 +1158,11 @@ MACHINE_CONFIG_START(asuka_state::eto) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, 4000000) - MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_YM2151_PORT_WRITE_HANDLER(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) - MCFG_SOUND_ROUTE(0, "mono", 0.50) - MCFG_SOUND_ROUTE(1, "mono", 0.50) + ym2151_device &ymsnd(YM2151(config, "ymsnd", 4000000)); + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.port_write_handler().set_membank(m_audiobank).mask(0x03); + ymsnd.add_route(0, "mono", 0.50); + ymsnd.add_route(1, "mono", 0.50); MCFG_DEVICE_ADD("ciu", PC060HA, 0) MCFG_PC060HA_MASTER_CPU("maincpu") diff --git a/src/mame/drivers/atarist.cpp b/src/mame/drivers/atarist.cpp index b0131e09b30..075a04326b0 100644 --- a/src/mame/drivers/atarist.cpp +++ b/src/mame/drivers/atarist.cpp @@ -2055,9 +2055,9 @@ MACHINE_CONFIG_START(st_state::st) // devices - MCFG_DEVICE_ADD(WD1772_TAG, WD1772, Y2/4) - MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(MC68901_TAG, mc68901_device, i5_w)) MCFG_DEVCB_INVERT - MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, st_state, fdc_drq_w)) + WD1772(config, m_fdc, Y2/4); + m_fdc->intrq_wr_callback().set(m_mfp, FUNC(mc68901_device::i5_w)).invert(); + m_fdc->drq_wr_callback().set(FUNC(st_state::fdc_drq_w)); MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":0", atari_floppies, "35dd", st_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":1", atari_floppies, nullptr, st_state::floppy_formats) @@ -2146,9 +2146,9 @@ MACHINE_CONFIG_START(megast_state::megast) // devices MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL(32'768)) - MCFG_DEVICE_ADD(WD1772_TAG, WD1772, Y2/4) - MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(MC68901_TAG, mc68901_device, i5_w)) MCFG_DEVCB_INVERT - MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, st_state, fdc_drq_w)) + WD1772(config, m_fdc, Y2/4); + m_fdc->intrq_wr_callback().set(m_mfp, FUNC(mc68901_device::i5_w)).invert(); + m_fdc->drq_wr_callback().set(FUNC(st_state::fdc_drq_w)); MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":0", atari_floppies, "35dd", st_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":1", atari_floppies, nullptr, st_state::floppy_formats) @@ -2245,9 +2245,9 @@ MACHINE_CONFIG_START(ste_state::ste) // devices - MCFG_DEVICE_ADD(WD1772_TAG, WD1772, Y2/4) - MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(MC68901_TAG, mc68901_device, i5_w)) MCFG_DEVCB_INVERT - MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, st_state, fdc_drq_w)) + WD1772(config, m_fdc, Y2/4); + m_fdc->intrq_wr_callback().set(m_mfp, FUNC(mc68901_device::i5_w)).invert(); + m_fdc->drq_wr_callback().set(FUNC(st_state::fdc_drq_w)); MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":0", atari_floppies, "35dd", st_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":1", atari_floppies, nullptr, st_state::floppy_formats) @@ -2359,9 +2359,9 @@ static MACHINE_CONFIG_START(stbook_state::stbook) MCFG_MC68901_OUT_TDO_CB(WRITELINE(*this, st_state, mfp_tdo_w)) MCFG_MC68901_OUT_SO_CB(WRITELINE(RS232_TAG, rs232_port_device, write_txd)) - MCFG_DEVICE_ADD(WD1772_TAG, WD1772, U517/2) - MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(MC68901_TAG, mc68901_device, i5_w)) MCFG_DEVCB_INVERT - MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, st_state, fdc_drq_w)) + WD1772(config, m_fdc, U517/2); + m_fdc->intrq_wr_callback().set(m_mfp, FUNC(mc68901_device::i5_w)).invert(); + m_fdc->drq_wr_callback().set(FUNC(st_state::fdc_drq_w)); MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":0", atari_floppies, "35dd", 0, st_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":1", atari_floppies, 0, 0, st_state::floppy_formats) diff --git a/src/mame/drivers/atarisy1.cpp b/src/mame/drivers/atarisy1.cpp index 6bd68569a54..40a6027420c 100644 --- a/src/mame/drivers/atarisy1.cpp +++ b/src/mame/drivers/atarisy1.cpp @@ -736,12 +736,12 @@ MACHINE_CONFIG_START(atarisy1_state::atarisy1) MCFG_EEPROM_2804_ADD("eeprom") MCFG_EEPROM_28XX_LOCK_AFTER_WRITE(true) - MCFG_DEVICE_ADD("outlatch", LS259, 0) // 15H (TTL) or 14F (LSI) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE("ymsnd", ym2151_device, reset_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT // J106 pin 4 - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // J106 pin 3 - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, atarisy1_state, coin_counter_right_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, atarisy1_state, coin_counter_left_w)) + LS259(config, m_outlatch); // 15H (TTL) or 14F (LSI) + m_outlatch->q_out_cb<0>().set("ymsnd", FUNC(ym2151_device::reset_w)); + m_outlatch->q_out_cb<4>().set_output("led0").invert(); // J106 pin 4 + m_outlatch->q_out_cb<5>().set_output("led1").invert(); // J106 pin 3 + m_outlatch->q_out_cb<6>().set(FUNC(atarisy1_state::coin_counter_right_w)); + m_outlatch->q_out_cb<7>().set(FUNC(atarisy1_state::coin_counter_left_w)); MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/attache.cpp b/src/mame/drivers/attache.cpp index 97d38b2366e..9182cdfdce1 100644 --- a/src/mame/drivers/attache.cpp +++ b/src/mame/drivers/attache.cpp @@ -1162,15 +1162,15 @@ MACHINE_CONFIG_START(attache_state::attache) MCFG_RS232_RXD_HANDLER(WRITELINE("sio", z80sio_device, rxb_w)) MCFG_RS232_CTS_HANDLER(WRITELINE("sio", z80sio_device, ctsb_w)) - MCFG_DEVICE_ADD("ctc", Z80CTC, 8_MHz_XTAL / 2) - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, txca_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("sio", z80sio_device, rxtxcb_w)) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) + Z80CTC(config, m_ctc, 8_MHz_XTAL / 2); + m_ctc->zc_callback<0>().set(m_sio, FUNC(z80sio_device::rxca_w)); + m_ctc->zc_callback<0>().append(m_sio, FUNC(z80sio_device::txca_w)); + m_ctc->zc_callback<1>().set(m_sio, FUNC(z80sio_device::rxtxcb_w)); + m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - MCFG_DEVICE_ADD("brc", CLOCK, 8_MHz_XTAL / 26) // 307.692 KHz - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg1)) + clock_device &brc(CLOCK(config, "brc", 8_MHz_XTAL / 26)); // 307.692 KHz + brc.signal_handler().set(m_ctc, FUNC(z80ctc_device::trg0)); + brc.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg1)); MCFG_DEVICE_ADD("dma", AM9517A, 8_MHz_XTAL / 4) MCFG_AM9517A_OUT_HREQ_CB(WRITELINE(*this, attache_state, hreq_w)) @@ -1181,11 +1181,11 @@ MACHINE_CONFIG_START(attache_state::attache) MCFG_AM9517A_OUT_IOW_0_CB(WRITE8(*this, attache_state, fdc_dma_w)) // MCFG_AM9517A_OUT_DACK_0_CB(WRITELINE(*this, attache_state, fdc_dack_w)) - MCFG_UPD765A_ADD("fdc", true, true) - MCFG_UPD765_INTRQ_CALLBACK(WRITELINE("ctc", z80ctc_device, trg3)) - MCFG_UPD765_DRQ_CALLBACK(WRITELINE("dma", am9517a_device, dreq0_w)) MCFG_DEVCB_INVERT - MCFG_FLOPPY_DRIVE_ADD("fdc:0", attache_floppies, "525dd", floppy_image_device::default_floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("fdc:1", attache_floppies, "525dd", floppy_image_device::default_floppy_formats) + UPD765A(config, m_fdc, true, true); + m_fdc->intrq_wr_callback().set(m_ctc, FUNC(z80ctc_device::trg3)); + m_fdc->drq_wr_callback().set(m_dma, FUNC(am9517a_device::dreq0_w)).invert(); + FLOPPY_CONNECTOR(config, "fdc:0", attache_floppies, "525dd", floppy_image_device::default_floppy_formats); + FLOPPY_CONNECTOR(config, "fdc:1", attache_floppies, "525dd", floppy_image_device::default_floppy_formats); MCFG_DEVICE_ADD("crtc", TMS9927, 12324000 / 8) MCFG_TMS9927_CHAR_WIDTH(8) @@ -1246,22 +1246,22 @@ MACHINE_CONFIG_START(attache816_state::attache816) MCFG_RS232_RXD_HANDLER(WRITELINE("sio", z80sio_device, rxb_w)) MCFG_RS232_CTS_HANDLER(WRITELINE("sio", z80sio_device, ctsb_w)) - MCFG_DEVICE_ADD("ctc", Z80CTC, 8_MHz_XTAL / 2) - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, txca_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("sio", z80sio_device, rxtxcb_w)) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) + Z80CTC(config, m_ctc, 8_MHz_XTAL / 2); + m_ctc->zc_callback<0>().set(m_sio, FUNC(z80sio_device::rxca_w)); + m_ctc->zc_callback<0>().append(m_sio, FUNC(z80sio_device::txca_w)); + m_ctc->zc_callback<1>().set(m_sio, FUNC(z80sio_device::rxtxcb_w)); + m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - MCFG_DEVICE_ADD("brc", CLOCK, 8_MHz_XTAL / 26) // 307.692 KHz - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg1)) + clock_device &brc(CLOCK(config, "brc", 8_MHz_XTAL / 26)); // 307.692 KHz + brc.signal_handler().set(m_ctc, FUNC(z80ctc_device::trg0)); + brc.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg1)); - MCFG_DEVICE_ADD("ppi", I8255A, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, attache816_state, x86_comms_w)) - MCFG_I8255_IN_PORTA_CB(READ8(*this, attache816_state, x86_comms_r)) - MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, attache816_state, x86_irq_enable)) - MCFG_I8255_OUT_PORTC_CB(WRITELINE(*this, attache816_state, x86_dsr)) MCFG_DEVCB_BIT(0) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, attache816_state, ppi_irq)) MCFG_DEVCB_BIT(7) MCFG_DEVCB_INVERT + I8255A(config, m_ppi, 0); + m_ppi->out_pa_callback().set(FUNC(attache816_state::x86_comms_w)); + m_ppi->in_pa_callback().set(FUNC(attache816_state::x86_comms_r)); + m_ppi->out_pb_callback().set(FUNC(attache816_state::x86_irq_enable)); + m_ppi->out_pc_callback().set(FUNC(attache816_state::x86_dsr)).bit(0); + m_ppi->out_pc_callback().append(FUNC(attache816_state::ppi_irq)).bit(7).invert(); MCFG_DEVICE_ADD("dma", AM9517A, 8_MHz_XTAL / 4) MCFG_AM9517A_OUT_HREQ_CB(WRITELINE(*this, attache_state, hreq_w)) @@ -1272,11 +1272,11 @@ MACHINE_CONFIG_START(attache816_state::attache816) MCFG_AM9517A_OUT_IOW_0_CB(WRITE8(*this, attache_state, fdc_dma_w)) // MCFG_AM9517A_OUT_DACK_0_CB(WRITELINE(*this, attache_state, fdc_dack_w)) - MCFG_UPD765A_ADD("fdc", true, true) - MCFG_UPD765_INTRQ_CALLBACK(WRITELINE("ctc", z80ctc_device, trg3)) - MCFG_UPD765_DRQ_CALLBACK(WRITELINE("dma", am9517a_device, dreq0_w)) MCFG_DEVCB_INVERT - MCFG_FLOPPY_DRIVE_ADD("fdc:0", attache_floppies, "525dd", floppy_image_device::default_floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("fdc:1", attache_floppies, "525dd", floppy_image_device::default_floppy_formats) + UPD765A(config, m_fdc, true, true); + m_fdc->intrq_wr_callback().set(m_ctc, FUNC(z80ctc_device::trg3)); + m_fdc->drq_wr_callback().set(m_dma, FUNC(am9517a_device::dreq0_w)).invert(); + FLOPPY_CONNECTOR(config, "fdc:0", attache_floppies, "525dd", floppy_image_device::default_floppy_formats); + FLOPPY_CONNECTOR(config, "fdc:1", attache_floppies, "525dd", floppy_image_device::default_floppy_formats); MCFG_DEVICE_ADD("crtc", TMS9927, 12324000) MCFG_TMS9927_CHAR_WIDTH(8) diff --git a/src/mame/drivers/aussiebyte.cpp b/src/mame/drivers/aussiebyte.cpp index b6ba84a6b58..82932a19a88 100644 --- a/src/mame/drivers/aussiebyte.cpp +++ b/src/mame/drivers/aussiebyte.cpp @@ -526,20 +526,20 @@ MACHINE_CONFIG_START(aussiebyte_state::aussiebyte) MCFG_DEVICE_ADD("cent_data_in", INPUT_BUFFER, 0) MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") - MCFG_DEVICE_ADD("ctc_clock", CLOCK, 4.9152_MHz_XTAL / 4) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg2)) + clock_device &ctc_clock(CLOCK(config, "ctc_clock", 4.9152_MHz_XTAL / 4)); + ctc_clock.signal_handler().set(m_ctc, FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg1)); + ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg2)); - MCFG_DEVICE_ADD("ctc", Z80CTC, 16_MHz_XTAL / 4) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio1", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio1", z80sio_device, txca_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("sio1", z80sio_device, rxtxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio2", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio2", z80sio_device, txca_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE(*this, aussiebyte_state, ctc_z2_w)) // SIO2 Ch B, CTC Ch 3 - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio2", z80sio_device, rxtxcb_w)) + Z80CTC(config, m_ctc, 16_MHz_XTAL / 4); + m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_ctc->zc_callback<0>().set("sio1", FUNC(z80sio_device::rxca_w)); + m_ctc->zc_callback<0>().append("sio1", FUNC(z80sio_device::txca_w)); + m_ctc->zc_callback<1>().set("sio1", FUNC(z80sio_device::rxtxcb_w)); + m_ctc->zc_callback<1>().append("sio2", FUNC(z80sio_device::rxca_w)); + m_ctc->zc_callback<1>().append("sio2", FUNC(z80sio_device::txca_w)); + m_ctc->zc_callback<2>().set(FUNC(aussiebyte_state::ctc_z2_w)); // SIO2 Ch B, CTC Ch 3 + m_ctc->zc_callback<2>().append("sio2", FUNC(z80sio_device::rxtxcb_w)); MCFG_DEVICE_ADD("dma", Z80DMA, 16_MHz_XTAL / 4) MCFG_Z80DMA_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) @@ -550,11 +550,11 @@ MACHINE_CONFIG_START(aussiebyte_state::aussiebyte) MCFG_Z80DMA_IN_IORQ_CB(READ8(*this, aussiebyte_state, io_read_byte)) MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(*this, aussiebyte_state, io_write_byte)) - MCFG_DEVICE_ADD("pio1", Z80PIO, 16_MHz_XTAL / 4) - MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80PIO_OUT_PA_CB(WRITE8("cent_data_out", output_latch_device, bus_w)) - MCFG_Z80PIO_IN_PB_CB(READ8("cent_data_in", input_buffer_device, bus_r)) - MCFG_Z80PIO_OUT_ARDY_CB(WRITELINE(m_centronics, centronics_device, write_strobe)) MCFG_DEVCB_INVERT + Z80PIO(config, m_pio1, 16_MHz_XTAL / 4); + m_pio1->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_pio1->out_pa_callback().set("cent_data_out", FUNC(output_latch_device::bus_w)); + m_pio1->in_pb_callback().set("cent_data_in", FUNC(input_buffer_device::bus_r)); + m_pio1->out_ardy_callback().set(m_centronics, FUNC(centronics_device::write_strobe)).invert(); MCFG_DEVICE_ADD("pio2", Z80PIO, 16_MHz_XTAL / 4) MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) diff --git a/src/mame/drivers/avt.cpp b/src/mame/drivers/avt.cpp index 02a69d01aa0..20536778729 100644 --- a/src/mame/drivers/avt.cpp +++ b/src/mame/drivers/avt.cpp @@ -981,11 +981,12 @@ MACHINE_CONFIG_START(avt_state::avt) MCFG_PALETTE_ADD("palette", 8*16) MCFG_PALETTE_INIT_OWNER(avt_state, avt) - MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK) /* guess */ - MCFG_MC6845_SHOW_BORDER_AREA(false) - MCFG_MC6845_CHAR_WIDTH(8) - MCFG_MC6845_OUT_VSYNC_CB(WRITELINE("ctc0", z80ctc_device, trg3)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, avt_state, avtbingo_w)) + mc6845_device &crtc(MC6845(config, "crtc", CRTC_CLOCK)); // guess + crtc.set_screen("screen"); + crtc.set_show_border_area(false); + crtc.set_char_width(8); + crtc.out_vsync_callback().set("ctc0", FUNC(z80ctc_device::trg3)); + crtc.out_vsync_callback().append(FUNC(avt_state::avtbingo_w)); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -1018,15 +1019,16 @@ WRITE_LINE_MEMBER( avt_state::avtnfl_w ) m_pio1->port_b_write((m_pio1->port_b_read() & 0xbf) | (state ? 0x40 : 0)); } -MACHINE_CONFIG_START(avt_state::avtnfl) +void avt_state::avtnfl(machine_config &config) +{ avt(config); - MCFG_DEVICE_REMOVE("crtc") - MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK) /* guess */ - MCFG_MC6845_SHOW_BORDER_AREA(false) - MCFG_MC6845_CHAR_WIDTH(8) - MCFG_MC6845_OUT_VSYNC_CB(WRITELINE("ctc0", z80ctc_device, trg3)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, avt_state, avtnfl_w)) -MACHINE_CONFIG_END + mc6845_device &crtc(MC6845(config.replace(), "crtc", CRTC_CLOCK)); // guess + crtc.set_screen("screen"); + crtc.set_show_border_area(false); + crtc.set_char_width(8); + crtc.out_vsync_callback().set("ctc0", FUNC(z80ctc_device::trg3)); + crtc.out_vsync_callback().append(FUNC(avt_state::avtnfl_w)); +} /********************************************* * Rom Load * diff --git a/src/mame/drivers/balsente.cpp b/src/mame/drivers/balsente.cpp index d10470bd42a..3c3af0fe6cf 100644 --- a/src/mame/drivers/balsente.cpp +++ b/src/mame/drivers/balsente.cpp @@ -1315,20 +1315,20 @@ MACHINE_CONFIG_START(balsente_state::balsente) MCFG_DEVICE_PROGRAM_MAP(cpu2_map) MCFG_DEVICE_IO_MAP(cpu2_io_map) - MCFG_DEVICE_ADD("acia", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE("audiouart", acia6850_device, write_rxd)) - MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("maincpu", M6809_FIRQ_LINE)) + ACIA6850(config, m_acia, 0); + m_acia->txd_handler().set(m_audiouart, FUNC(acia6850_device::write_rxd)); + m_acia->irq_handler().set_inputline(m_maincpu, M6809_FIRQ_LINE); - MCFG_DEVICE_ADD("audiouart", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE("acia", acia6850_device, write_rxd)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, balsente_state, uint_w)) + ACIA6850(config, m_audiouart, 0); + m_audiouart->txd_handler().set(m_acia, FUNC(acia6850_device::write_rxd)); + m_audiouart->irq_handler().set([this] (int state) { m_uint = bool(state); }); - MCFG_DEVICE_ADD("uartclock", CLOCK, 8_MHz_XTAL / 16) // 500 kHz - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, balsente_state, uint_propagate_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("audiouart", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("audiouart", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_txc)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) MCFG_DEVCB_INVERT + clock_device &uartclock(CLOCK(config, "uartclock", 8_MHz_XTAL / 16)); // 500 kHz + uartclock.signal_handler().set(FUNC(balsente_state::uint_propagate_w)); + uartclock.signal_handler().append(m_audiouart, FUNC(acia6850_device::write_txc)); + uartclock.signal_handler().append(m_audiouart, FUNC(acia6850_device::write_rxc)); + uartclock.signal_handler().append(m_acia, FUNC(acia6850_device::write_txc)).invert(); + uartclock.signal_handler().append(m_acia, FUNC(acia6850_device::write_rxc)).invert(); MCFG_X2212_ADD_AUTOSAVE("nov0") // system NOVRAM MCFG_X2212_ADD_AUTOSAVE("nov1") // cart NOVRAM diff --git a/src/mame/drivers/bbc.cpp b/src/mame/drivers/bbc.cpp index a4e0c6d9b03..32875e01502 100644 --- a/src/mame/drivers/bbc.cpp +++ b/src/mame/drivers/bbc.cpp @@ -953,8 +953,8 @@ MACHINE_CONFIG_START(bbc_state::bbcb) MCFG_UPD7002_EOC_CB(bbc_state, BBC_uPD7002_EOC) /* printer */ - MCFG_DEVICE_ADD("centronics", CENTRONICS, centronics_devices, "printer") - MCFG_CENTRONICS_ACK_HANDLER(WRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */ + centronics_device ¢ronics(CENTRONICS(config, "centronics", centronics_devices, "printer")); + centronics.ack_handler().set("via6522_1", FUNC(via6522_device::write_ca1)).invert(); // ack seems to be inverted? MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") /* fdc */ @@ -1352,8 +1352,8 @@ MACHINE_CONFIG_START(bbc_state::bbcm) MCFG_DEVICE_ADD("rtc", MC146818, 32.768_kHz_XTAL) /* printer */ - MCFG_DEVICE_ADD("centronics", CENTRONICS, centronics_devices, "printer") - MCFG_CENTRONICS_ACK_HANDLER(WRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */ + centronics_device ¢ronics(CENTRONICS(config, "centronics", centronics_devices, "printer")); + centronics.ack_handler().set("via6522_1", FUNC(via6522_device::write_ca1)).invert(); // ack seems to be inverted? MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") /* cassette */ diff --git a/src/mame/drivers/bbusters.cpp b/src/mame/drivers/bbusters.cpp index 4cab0f3c6ee..22972485c9d 100644 --- a/src/mame/drivers/bbusters.cpp +++ b/src/mame/drivers/bbusters.cpp @@ -667,14 +667,14 @@ MACHINE_CONFIG_START(bbusters_state::bbusters) MCFG_NVRAM_ADD_0FILL("eeprom") /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bbusters_state, screen_update_bbuster) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("spriteram2", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(bbusters_state::screen_update_bbuster)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + screen.screen_vblank().append(m_spriteram2, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + screen.set_palette("palette"); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_bbusters) MCFG_PALETTE_ADD("palette", 2048) diff --git a/src/mame/drivers/bebox.cpp b/src/mame/drivers/bebox.cpp index 08008374502..751a7b38b2c 100644 --- a/src/mame/drivers/bebox.cpp +++ b/src/mame/drivers/bebox.cpp @@ -176,14 +176,14 @@ MACHINE_CONFIG_START(bebox_state::bebox) MCFG_DEVICE_ADD( "dma8237_2", AM9517A, XTAL(14'318'181)/3 ) - MCFG_DEVICE_ADD("pic8259_1", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, bebox_state, bebox_pic8259_master_set_int_line)) - MCFG_PIC8259_IN_SP_CB(VCC) - MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, bebox_state, get_slave_ack)) + PIC8259(config, m_pic8259_1, 0); + m_pic8259_1->out_int_callback().set(FUNC(bebox_state::bebox_pic8259_master_set_int_line)); + m_pic8259_1->in_sp_callback().set_constant(1); + m_pic8259_1->read_slave_ack_callback().set(FUNC(bebox_state::get_slave_ack)); - MCFG_DEVICE_ADD("pic8259_2", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, bebox_state, bebox_pic8259_slave_set_int_line)) - MCFG_PIC8259_IN_SP_CB(GND) + PIC8259(config, m_pic8259_2, 0); + m_pic8259_2->out_int_callback().set(FUNC(bebox_state::bebox_pic8259_slave_set_int_line)); + m_pic8259_2->in_sp_callback().set_constant(0); MCFG_DEVICE_ADD( "ns16550_0", NS16550, 0 ) /* TODO: Verify model */ MCFG_DEVICE_ADD( "ns16550_1", NS16550, 0 ) /* TODO: Verify model */ diff --git a/src/mame/drivers/bigbord2.cpp b/src/mame/drivers/bigbord2.cpp index 9c1d69f9f32..191d87f26fa 100644 --- a/src/mame/drivers/bigbord2.cpp +++ b/src/mame/drivers/bigbord2.cpp @@ -604,17 +604,17 @@ MACHINE_CONFIG_START(bigbord2_state::bigbord2) MCFG_DEVICE_ADD("proglatch", LS259, 0) // U41 MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE("outlatch1", ls259_device, clear_w)) // FCRST - also resets the 8877 - MCFG_DEVICE_ADD("syslatch1", LS259, 0) // U14 - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(MEMBANK("bankr")) // D_S - MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("bankv")) - MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("banka")) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, bigbord2_state, side_select_w)) // SIDSEL - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, bigbord2_state, smc1_w)) // SMC1 - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, bigbord2_state, smc2_w)) // SMC2 - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE("fdc", mb8877_device, dden_w)) // DDEN - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, bigbord2_state, head_load_w)) // HLD - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, bigbord2_state, disk_motor_w)) // MOTOR - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE("beeper", beep_device, set_state)) // BELL + LS259(config, m_syslatch1, 0); // U14 + m_syslatch1->q_out_cb<0>().set_membank(m_bankr); // D_S + m_syslatch1->q_out_cb<0>().append_membank(m_bankv); + m_syslatch1->q_out_cb<0>().append_membank(m_banka); + m_syslatch1->q_out_cb<1>().set(FUNC(bigbord2_state::side_select_w)); // SIDSEL + m_syslatch1->q_out_cb<2>().set(FUNC(bigbord2_state::smc1_w)); // SMC1 + m_syslatch1->q_out_cb<3>().set(FUNC(bigbord2_state::smc2_w)); // SMC2 + m_syslatch1->q_out_cb<4>().set(m_fdc, FUNC(mb8877_device::dden_w)); // DDEN + m_syslatch1->q_out_cb<5>().set(FUNC(bigbord2_state::head_load_w)); // HLD + m_syslatch1->q_out_cb<6>().set(FUNC(bigbord2_state::disk_motor_w)); // MOTOR + m_syslatch1->q_out_cb<7>().set("beeper", FUNC(beep_device::set_state)); // BELL MCFG_DEVICE_ADD("outlatch1", LS259, 0) // U96 diff --git a/src/mame/drivers/bladestl.cpp b/src/mame/drivers/bladestl.cpp index 945e59a2659..468c52779bc 100644 --- a/src/mame/drivers/bladestl.cpp +++ b/src/mame/drivers/bladestl.cpp @@ -349,9 +349,9 @@ MACHINE_CONFIG_START(bladestl_state::bladestl) called at initialization time */ SPEAKER(config, "mono").front_center(); - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, M6809_IRQ_LINE)) - MCFG_GENERIC_LATCH_SEPARATE_ACKNOWLEDGE(true) + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, M6809_IRQ_LINE); + m_soundlatch->set_separate_acknowledge(true); MCFG_DEVICE_ADD(m_upd7759, UPD7759) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) diff --git a/src/mame/drivers/bml3.cpp b/src/mame/drivers/bml3.cpp index 9602b333156..e3a01365976 100644 --- a/src/mame/drivers/bml3.cpp +++ b/src/mame/drivers/bml3.cpp @@ -1007,9 +1007,9 @@ MACHINE_CONFIG_START(bml3_state::bml3_common) MCFG_ACIA6850_RTS_HANDLER(WRITELINE(*this, bml3_state, bml3_acia_rts_w)) MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, bml3_state, bml3_acia_irq_w)) - MCFG_DEVICE_ADD("acia_clock", CLOCK, 9600) // 600 baud x 16(divider) = 9600 - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) + clock_device &acia_clock(CLOCK(config, "acia_clock", 9'600)); // 600 baud x 16(divider) = 9600 + acia_clock.signal_handler().set(m_acia, FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia, FUNC(acia6850_device::write_rxc)); MCFG_CASSETTE_ADD( "cassette" ) diff --git a/src/mame/drivers/bombjack.cpp b/src/mame/drivers/bombjack.cpp index 510627272c9..2fc76a3f90f 100644 --- a/src/mame/drivers/bombjack.cpp +++ b/src/mame/drivers/bombjack.cpp @@ -362,15 +362,15 @@ MACHINE_CONFIG_START(bombjack_state::bombjack) MCFG_GENERIC_LATCH_8_ADD("soundlatch") /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(bombjack_state, screen_update_bombjack) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, bombjack_state, vblank_irq)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("audiocpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(bombjack_state::screen_update_bombjack)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(bombjack_state::vblank_irq)); + screen.screen_vblank().append_inputline("audiocpu", INPUT_LINE_NMI); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_bombjack) MCFG_PALETTE_ADD("palette", 128) diff --git a/src/mame/drivers/bw2.cpp b/src/mame/drivers/bw2.cpp index f0021d272fe..5b3640c2a81 100644 --- a/src/mame/drivers/bw2.cpp +++ b/src/mame/drivers/bw2.cpp @@ -561,14 +561,14 @@ MACHINE_CONFIG_START(bw2_state::bw2) MCFG_PALETTE_INIT_OWNER(bw2_state, bw2) // devices - MCFG_DEVICE_ADD(m_pit, PIT8253, 0) - MCFG_PIT8253_CLK0(16_MHz_XTAL / 4) // 8251 USART TXC, RXC - MCFG_PIT8253_OUT0_HANDLER(WRITELINE(m_uart, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(m_uart, i8251_device, write_rxc)) - MCFG_PIT8253_CLK1(11000) // LCD controller - MCFG_PIT8253_OUT1_HANDLER(WRITELINE(m_pit, pit8253_device, write_clk2)) - MCFG_PIT8253_CLK2(0) // Floppy /MTRON - MCFG_PIT8253_OUT2_HANDLER(WRITELINE(*this, bw2_state, mtron_w)) + PIT8253(config, m_pit, 0); + m_pit->set_clk<0>(16_MHz_XTAL / 4); // 8251 USART TXC, RXC + m_pit->out_handler<0>().set(m_uart, FUNC(i8251_device::write_txc)); + m_pit->out_handler<0>().append(m_uart, FUNC(i8251_device::write_rxc)); + m_pit->set_clk<1>(11000); // LCD controller + m_pit->out_handler<1>().set(m_pit, FUNC(pit8253_device::write_clk2)); + m_pit->set_clk<2>(0); // Floppy /MTRON + m_pit->out_handler<2>().set(FUNC(bw2_state::mtron_w)); MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0) MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, bw2_state, ppi_pa_w)) diff --git a/src/mame/drivers/capbowl.cpp b/src/mame/drivers/capbowl.cpp index ff5ae422f27..bd8feea3aa8 100644 --- a/src/mame/drivers/capbowl.cpp +++ b/src/mame/drivers/capbowl.cpp @@ -349,18 +349,18 @@ MACHINE_CONFIG_START(capbowl_state::capbowl) /* sound hardware */ SPEAKER(config, "speaker").front_center(); - MCFG_GENERIC_LATCH_8_ADD("soundlatch") + GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("ymsnd", YM2203, MASTER_CLOCK / 2) - MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", M6809_FIRQ_LINE)) - MCFG_AY8910_PORT_A_READ_CB(READLINE("ticket", ticket_dispenser_device, line_r)) MCFG_DEVCB_BIT(7) - MCFG_AY8910_PORT_B_WRITE_CB(WRITELINE("ticket", ticket_dispenser_device, motor_w)) MCFG_DEVCB_BIT(7) /* Also a status LED. See memory map above */ - MCFG_SOUND_ROUTE(0, "speaker", 0.07) - MCFG_SOUND_ROUTE(1, "speaker", 0.07) - MCFG_SOUND_ROUTE(2, "speaker", 0.07) - MCFG_SOUND_ROUTE(3, "speaker", 0.75) + ym2203_device &ymsnd(YM2203(config, "ymsnd", MASTER_CLOCK / 2)); + ymsnd.irq_handler().set_inputline(m_audiocpu, M6809_FIRQ_LINE); + ymsnd.port_a_read_callback().set("ticket", FUNC(ticket_dispenser_device::line_r)).lshift(7); + ymsnd.port_b_write_callback().set("ticket", FUNC(ticket_dispenser_device::motor_w)).bit(7); // Also a status LED. See memory map above + ymsnd.add_route(0, "speaker", 0.07); + ymsnd.add_route(1, "speaker", 0.07); + ymsnd.add_route(2, "speaker", 0.07); + ymsnd.add_route(3, "speaker", 0.75); - MCFG_DEVICE_ADD("dac", DAC0832, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) + DAC0832(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) MACHINE_CONFIG_END diff --git a/src/mame/drivers/cat.cpp b/src/mame/drivers/cat.cpp index b61f7bda4de..52b58dc4ad3 100644 --- a/src/mame/drivers/cat.cpp +++ b/src/mame/drivers/cat.cpp @@ -1080,14 +1080,13 @@ MACHINE_CONFIG_START(cat_state::cat) MCFG_MC68681_B_TX_CALLBACK(WRITELINE(*this, cat_state, cat_duart_txb)) MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(*this, cat_state, cat_duart_output)) - MCFG_DEVICE_ADD(m_ctx, CENTRONICS, centronics_devices, "printer") - MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(*this, cat_state, prn_ack_ff)) - MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE("duartn68681", mc68681_device, ip4_w)) MCFG_DEVCB_XOR(1) + CENTRONICS(config, m_ctx, centronics_devices, "printer"); + m_ctx->ack_handler().set(FUNC(cat_state::prn_ack_ff)); + m_ctx->busy_handler().set("duartn68681", FUNC(mc68681_device::ip4_w)).invert(); MCFG_CENTRONICS_OUTPUT_LATCH_ADD("ctx_data_out", "ctx") SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 1.00); MCFG_NVRAM_ADD_0FILL("nvram") MACHINE_CONFIG_END diff --git a/src/mame/drivers/ccastles.cpp b/src/mame/drivers/ccastles.cpp index 8f8824da2ad..feeac10c134 100644 --- a/src/mame/drivers/ccastles.cpp +++ b/src/mame/drivers/ccastles.cpp @@ -247,12 +247,6 @@ WRITE8_MEMBER(ccastles_state::irq_ack_w) } -template WRITE_LINE_MEMBER(ccastles_state::ccounter_w) -{ - machine().bookkeeping().coin_counter_w(C, state); -} - - READ8_MEMBER(ccastles_state::leta_r) { static const char *const letanames[] = { "LETA0", "LETA1", "LETA2", "LETA3" }; @@ -440,19 +434,19 @@ GFXDECODE_END MACHINE_CONFIG_START(ccastles_state::ccastles) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, MASTER_CLOCK/8) - MCFG_DEVICE_PROGRAM_MAP(main_map) + M6502(config, m_maincpu, MASTER_CLOCK/8); + m_maincpu->set_addrmap(AS_PROGRAM, &ccastles_state::main_map); - MCFG_DEVICE_ADD("outlatch0", LS259, 0) // 8N - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, ccastles_state, nvram_store_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, ccastles_state, nvram_store_w)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, ccastles_state, ccounter_w<0>)) - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, ccastles_state, ccounter_w<1>)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(MEMBANK("bank1")) + LS259(config, m_outlatch[0]); // 8N + m_outlatch[0]->q_out_cb<0>().set_output("led0").invert(); + m_outlatch[0]->q_out_cb<1>().set_output("led1").invert(); + m_outlatch[0]->q_out_cb<2>().set(FUNC(ccastles_state::nvram_store_w)); + m_outlatch[0]->q_out_cb<3>().set(FUNC(ccastles_state::nvram_store_w)); + m_outlatch[0]->q_out_cb<5>().set([this] (int state) { machine().bookkeeping().coin_counter_w(0, state); }); + m_outlatch[0]->q_out_cb<6>().set([this] (int state) { machine().bookkeeping().coin_counter_w(1, state); }); + m_outlatch[0]->q_out_cb<7>().set_membank("bank1"); - MCFG_DEVICE_ADD("outlatch1", LS259, 0) // 6P + LS259(config, m_outlatch[1]); // 6P MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp index ebd5258c9c1..2ecfd8f9d03 100644 --- a/src/mame/drivers/cclimber.cpp +++ b/src/mame/drivers/cclimber.cpp @@ -1138,56 +1138,55 @@ MACHINE_CONFIG_START(cclimber_state::root) MACHINE_CONFIG_END -MACHINE_CONFIG_START(cclimber_state::cclimber) +void cclimber_state::cclimber(machine_config &config) +{ root(config); - MCFG_DEVICE_MODIFY("mainlatch") // 7J on CCG-1 - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE("cclimber_audio", cclimber_audio_device, sample_trigger)) + + // 7J on CCG-1 + m_mainlatch->q_out_cb<4>().set("cclimber_audio", FUNC(cclimber_audio_device::sample_trigger)); /* sound hardware */ SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD("cclimber_audio", CCLIMBER_AUDIO, 0) -MACHINE_CONFIG_END + CCLIMBER_AUDIO(config, "cclimber_audio", 0); +} -MACHINE_CONFIG_START(cclimber_state::cclimberx) +void cclimber_state::cclimberx(machine_config &config) +{ cclimber(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_OPCODES, &cclimber_state::decrypted_opcodes_map); +} -MACHINE_CONFIG_START(cclimber_state::ckongb) +void cclimber_state::ckongb(machine_config &config) +{ cclimber(config); - MCFG_DEVICE_MODIFY("mainlatch") - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, cclimber_state, nmi_mask_w)) //used by Crazy Kong Bootleg with alt levels and speed up -MACHINE_CONFIG_END + m_mainlatch->q_out_cb<3>().set(FUNC(cclimber_state::nmi_mask_w)); //used by Crazy Kong Bootleg with alt levels and speed up +} MACHINE_CONFIG_START(cclimber_state::cannonb) cclimber(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(cannonb_map) + m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::cannonb_map); - MCFG_DEVICE_MODIFY("mainlatch") - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, cclimber_state, flip_screen_x_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, cclimber_state, flip_screen_y_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // not used + m_mainlatch->q_out_cb<1>().set(FUNC(cclimber_state::flip_screen_x_w)); + m_mainlatch->q_out_cb<1>().append(FUNC(cclimber_state::flip_screen_y_w)); + m_mainlatch->q_out_cb<2>().set_nop(); // not used /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", gfx_cannonb) MACHINE_CONFIG_END -MACHINE_CONFIG_START(cclimber_state::bagmanf) +void cclimber_state::bagmanf(machine_config &config) +{ cclimber(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(bagmanf_map) + m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::bagmanf_map); - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cclimber_state, bagmanf_vblank_irq)) -MACHINE_CONFIG_END + subdevice("screen")->screen_vblank().set(FUNC(cclimber_state::bagmanf_vblank_irq)); +} MACHINE_CONFIG_START(cclimber_state::yamato) @@ -1233,9 +1232,8 @@ MACHINE_CONFIG_START(cclimber_state::toprollr) MCFG_SEGACRPT_SET_NUMBANKS(3) MCFG_SEGACRPT_SET_BANKSIZE(0x6000) - MCFG_DEVICE_MODIFY("mainlatch") - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, cclimber_state, toprollr_rombank_w)) - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, cclimber_state, toprollr_rombank_w)) + m_mainlatch->q_out_cb<5>().set(FUNC(cclimber_state::toprollr_rombank_w)); + m_mainlatch->q_out_cb<6>().set(FUNC(cclimber_state::toprollr_rombank_w)); /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", gfx_toprollr) @@ -1295,12 +1293,12 @@ MACHINE_CONFIG_START(cclimber_state::swimmer) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) MACHINE_CONFIG_END -MACHINE_CONFIG_START(cclimber_state::guzzler) +void cclimber_state::guzzler(machine_config &config) +{ swimmer(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(guzzler_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &cclimber_state::guzzler_map); +} /*************************************************************************** diff --git a/src/mame/drivers/ccs2810.cpp b/src/mame/drivers/ccs2810.cpp index cb26477eea4..d7abac8548d 100644 --- a/src/mame/drivers/ccs2810.cpp +++ b/src/mame/drivers/ccs2810.cpp @@ -73,8 +73,8 @@ ToDo: class ccs_state : public driver_device { public: - ccs_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + ccs_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_ram(*this, RAM_TAG), m_rom(*this, "maincpu"), @@ -89,25 +89,31 @@ public: { } + void init_ccs2810(); + void init_ccs2422(); + + void ccs2810(machine_config &config); + void ccs2422(machine_config &config); + +protected: DECLARE_READ8_MEMBER(memory_read); DECLARE_WRITE8_MEMBER(memory_write); DECLARE_READ8_MEMBER(io_read); DECLARE_WRITE8_MEMBER(io_write); - void init_ccs2810(); - void init_ccs2422(); + virtual void machine_start() override; virtual void machine_reset() override; + DECLARE_READ8_MEMBER(port04_r); DECLARE_READ8_MEMBER(port34_r); DECLARE_WRITE8_MEMBER(port04_w); DECLARE_WRITE8_MEMBER(port34_w); DECLARE_WRITE8_MEMBER(port40_w); - void ccs2810(machine_config &config); - void ccs2422(machine_config &config); void ccs2422_io(address_map &map); void ccs2810_io(address_map &map); void ccs2810_mem(address_map &map); + private: required_device m_maincpu; required_device m_ram; @@ -913,18 +919,18 @@ MACHINE_CONFIG_START(ccs_state::ccs2810) MCFG_RAM_DEFAULT_SIZE("64K") /* Devices */ - MCFG_DEVICE_ADD("ins8250", INS8250, 1.8432_MHz_XTAL) - MCFG_INS8250_OUT_TX_CB(WRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_INS8250_OUT_DTR_CB(WRITELINE("rs232", rs232_port_device, write_dtr)) - MCFG_INS8250_OUT_RTS_CB(WRITELINE("rs232", rs232_port_device, write_rts)) - MCFG_INS8250_OUT_OUT1_CB(WRITELINE("rs232", rs232_port_device, write_spds)) // RLSD + INS8250(config, m_ins8250, 1.8432_MHz_XTAL); + m_ins8250->out_tx_callback().set("rs232", FUNC(rs232_port_device::write_txd)); + m_ins8250->out_dtr_callback().set("rs232", FUNC(rs232_port_device::write_dtr)); + m_ins8250->out_rts_callback().set("rs232", FUNC(rs232_port_device::write_rts)); + m_ins8250->out_out1_callback().set("rs232", FUNC(rs232_port_device::write_spds)); // RLSD - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("ins8250", ins8250_device, rx_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ins8250", ins8250_device, ri_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("ins8250", ins8250_device, dcd_w)) - MCFG_RS232_DSR_HANDLER(WRITELINE("ins8250", ins8250_device, dsr_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("ins8250", ins8250_device, cts_w)) + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); + rs232.rxd_handler().set(m_ins8250, FUNC(ins8250_device::rx_w)); + rs232.rxd_handler().append(m_ins8250, FUNC(ins8250_device::ri_w)); + rs232.dcd_handler().set(m_ins8250, FUNC(ins8250_device::dcd_w)); + rs232.dsr_handler().set(m_ins8250, FUNC(ins8250_device::dsr_w)); + rs232.cts_handler().set(m_ins8250, FUNC(ins8250_device::cts_w)); MACHINE_CONFIG_END MACHINE_CONFIG_START(ccs_state::ccs2422) @@ -937,18 +943,18 @@ MACHINE_CONFIG_START(ccs_state::ccs2422) MCFG_RAM_DEFAULT_SIZE("64K") /* Devices */ - MCFG_DEVICE_ADD("ins8250", INS8250, 1.8432_MHz_XTAL) - MCFG_INS8250_OUT_TX_CB(WRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_INS8250_OUT_DTR_CB(WRITELINE("rs232", rs232_port_device, write_dtr)) - MCFG_INS8250_OUT_RTS_CB(WRITELINE("rs232", rs232_port_device, write_rts)) - MCFG_INS8250_OUT_OUT1_CB(WRITELINE("rs232", rs232_port_device, write_etc)) // RLSD + INS8250(config, m_ins8250, 1.8432_MHz_XTAL); + m_ins8250->out_tx_callback().set("rs232", FUNC(rs232_port_device::write_txd)); + m_ins8250->out_dtr_callback().set("rs232", FUNC(rs232_port_device::write_dtr)); + m_ins8250->out_rts_callback().set("rs232", FUNC(rs232_port_device::write_rts)); + m_ins8250->out_out1_callback().set("rs232", FUNC(rs232_port_device::write_etc)); // RLSD - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("ins8250", ins8250_device, rx_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ins8250", ins8250_device, ri_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("ins8250", ins8250_device, dcd_w)) - MCFG_RS232_DSR_HANDLER(WRITELINE("ins8250", ins8250_device, dsr_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("ins8250", ins8250_device, cts_w)) + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); + rs232.rxd_handler().set(m_ins8250, FUNC(ins8250_device::rx_w)); + rs232.rxd_handler().append(m_ins8250, FUNC(ins8250_device::ri_w)); + rs232.dcd_handler().set(m_ins8250, FUNC(ins8250_device::dcd_w)); + rs232.dsr_handler().set(m_ins8250, FUNC(ins8250_device::dsr_w)); + rs232.cts_handler().set(m_ins8250, FUNC(ins8250_device::cts_w)); MCFG_DEVICE_ADD("fdc", MB8877, 16_MHz_XTAL / 8) // UB1793 or MB8877 MCFG_FLOPPY_DRIVE_ADD("fdc:0", ccs_floppies, "8sssd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/ccs300.cpp b/src/mame/drivers/ccs300.cpp index a852ac599f8..170f211315c 100644 --- a/src/mame/drivers/ccs300.cpp +++ b/src/mame/drivers/ccs300.cpp @@ -125,9 +125,9 @@ MACHINE_CONFIG_START(ccs300_state::ccs300) MCFG_MACHINE_RESET_OVERRIDE(ccs300_state, ccs300) /* video hardware */ - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("sio", z80sio_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, rxca_w)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153'600)); + uart_clock.signal_handler().set("sio", FUNC(z80sio_device::txca_w)); + uart_clock.signal_handler().append("sio", FUNC(z80sio_device::rxca_w)); /* Devices */ MCFG_DEVICE_ADD("sio", Z80SIO, XTAL(4'000'000)) diff --git a/src/mame/drivers/cdc721.cpp b/src/mame/drivers/cdc721.cpp index e3bd4e15691..8095ba851c1 100644 --- a/src/mame/drivers/cdc721.cpp +++ b/src/mame/drivers/cdc721.cpp @@ -357,15 +357,15 @@ MACHINE_CONFIG_START(cdc721_state::cdc721) MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, cdc721_state, interrupt_mask_w)) MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, cdc721_state, misc_w)) - MCFG_DEVICE_ADD("ledlatch", OUTPUT_LATCH, 0) - MCFG_OUTPUT_LATCH_BIT0_HANDLER(OUTPUT("error")) MCFG_DEVCB_INVERT - MCFG_OUTPUT_LATCH_BIT1_HANDLER(OUTPUT("alert")) MCFG_DEVCB_INVERT - MCFG_OUTPUT_LATCH_BIT2_HANDLER(OUTPUT("lock")) MCFG_DEVCB_INVERT - MCFG_OUTPUT_LATCH_BIT3_HANDLER(OUTPUT("message")) MCFG_DEVCB_INVERT - MCFG_OUTPUT_LATCH_BIT4_HANDLER(OUTPUT("prog1")) MCFG_DEVCB_INVERT - MCFG_OUTPUT_LATCH_BIT5_HANDLER(OUTPUT("prog2")) MCFG_DEVCB_INVERT - MCFG_OUTPUT_LATCH_BIT6_HANDLER(OUTPUT("prog3")) MCFG_DEVCB_INVERT - MCFG_OUTPUT_LATCH_BIT7_HANDLER(OUTPUT("dsr")) MCFG_DEVCB_INVERT + output_latch_device &ledlatch(OUTPUT_LATCH(config, "ledlatch")); + ledlatch.bit_handler<0>().set_output("error").invert(); + ledlatch.bit_handler<1>().set_output("alert").invert(); + ledlatch.bit_handler<2>().set_output("lock").invert(); + ledlatch.bit_handler<3>().set_output("message").invert(); + ledlatch.bit_handler<4>().set_output("prog1").invert(); + ledlatch.bit_handler<5>().set_output("prog2").invert(); + ledlatch.bit_handler<6>().set_output("prog3").invert(); + ledlatch.bit_handler<7>().set_output("dsr").invert(); MCFG_DEVICE_ADD("comuart", INS8250, 1.8432_MHz_XTAL) MCFG_INS8250_OUT_INT_CB(WRITELINE(*this, cdc721_state, int_w<0>)) diff --git a/src/mame/drivers/centiped.cpp b/src/mame/drivers/centiped.cpp index 404e900c10c..7a2249e9f73 100644 --- a/src/mame/drivers/centiped.cpp +++ b/src/mame/drivers/centiped.cpp @@ -1749,12 +1749,12 @@ MACHINE_CONFIG_START(centiped_state::centiped_base) MCFG_DEVICE_ADD("earom", ER2055) - MCFG_DEVICE_ADD("outlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, centiped_state, coin_counter_left_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, centiped_state, coin_counter_center_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, centiped_state, coin_counter_right_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT // LED 1 - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // LED 2 + ls259_device &outlatch(LS259(config, "outlatch")); + outlatch.q_out_cb<0>().set(FUNC(centiped_state::coin_counter_left_w)); + outlatch.q_out_cb<1>().set(FUNC(centiped_state::coin_counter_center_w)); + outlatch.q_out_cb<2>().set(FUNC(centiped_state::coin_counter_right_w)); + outlatch.q_out_cb<3>().set_output("led0").invert(); // LED 1 + outlatch.q_out_cb<4>().set_output("led1").invert(); // LED 2 MCFG_WATCHDOG_ADD("watchdog") @@ -1915,9 +1915,9 @@ MACHINE_CONFIG_START(centiped_state::warlords) MCFG_DEVICE_REMOVE("earom") // these extra LEDs also appear on Centipede schematics - MCFG_DEVICE_MODIFY("outlatch") // P9 - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(OUTPUT("led2")) MCFG_DEVCB_INVERT // LED 3 - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(OUTPUT("led3")) MCFG_DEVCB_INVERT // LED 4 + ls259_device &outlatch(*subdevice("outlatch")); // P9 + outlatch.q_out_cb<5>().set_output("led2").invert(); // LED 3 + outlatch.q_out_cb<6>().set_output("led3").invert(); // LED 4 /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", gfx_warlords) @@ -1966,11 +1966,11 @@ MACHINE_CONFIG_START(centiped_state::bullsdrt) MCFG_DEVICE_ADD("earom", ER2055) - MCFG_DEVICE_ADD("outlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, centiped_state, bullsdrt_coin_count_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, centiped_state, flip_screen_w)) + ls259_device &outlatch(LS259(config, "outlatch")); + outlatch.q_out_cb<1>().set(FUNC(centiped_state::bullsdrt_coin_count_w)); + outlatch.q_out_cb<3>().set_output("led0").invert(); + outlatch.q_out_cb<4>().set_output("led1").invert(); + outlatch.q_out_cb<7>().set(FUNC(centiped_state::flip_screen_w)); MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/cgc7900.cpp b/src/mame/drivers/cgc7900.cpp index 3f9c2bae652..6547c5312f5 100644 --- a/src/mame/drivers/cgc7900.cpp +++ b/src/mame/drivers/cgc7900.cpp @@ -494,11 +494,11 @@ MACHINE_CONFIG_START(cgc7900_state::cgc7900) MCFG_DEVICE_ADD(MM58167_TAG, MM58167, XTAL(32'768)) MCFG_MM58167_IRQ_CALLBACK(WRITELINE(*this, cgc7900_state, irq<0x0>)) - MCFG_DEVICE_ADD(K1135A_TAG, COM8116, XTAL(5'068'800)) - MCFG_COM8116_FR_HANDLER(WRITELINE(INS8251_0_TAG, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(INS8251_0_TAG, i8251_device, write_rxc)) - MCFG_COM8116_FT_HANDLER(WRITELINE(INS8251_1_TAG, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(INS8251_1_TAG, i8251_device, write_rxc)) + com8116_device &k1135a(COM8116(config, K1135A_TAG, XTAL(5'068'800))); + k1135a.fr_handler().set(m_i8251_0, FUNC(i8251_device::write_txc)); + k1135a.fr_handler().append(m_i8251_0, FUNC(i8251_device::write_rxc)); + k1135a.ft_handler().set(m_i8251_1, FUNC(i8251_device::write_txc)); + k1135a.ft_handler().append(m_i8251_1, FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD(INS8251_0_TAG, I8251, 0) MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/cidelsa.cpp b/src/mame/drivers/cidelsa.cpp index 09337876144..5a9cb6a0ff0 100644 --- a/src/mame/drivers/cidelsa.cpp +++ b/src/mame/drivers/cidelsa.cpp @@ -405,7 +405,7 @@ MACHINE_CONFIG_START(cidelsa_state::destryer) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, DESTRYER_CHR1) MCFG_DEVICE_PROGRAM_MAP(destryer_map) MCFG_DEVICE_IO_MAP(destryer_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, cidelsa_state, clear_r)) MCFG_COSMAC_Q_CALLBACK(WRITELINE(*this, cidelsa_state, q_w)) @@ -420,7 +420,7 @@ MACHINE_CONFIG_START(cidelsa_state::destryera) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, DESTRYER_CHR1) MCFG_DEVICE_PROGRAM_MAP(destryera_map) MCFG_DEVICE_IO_MAP(destryer_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, cidelsa_state, clear_r)) MCFG_COSMAC_Q_CALLBACK(WRITELINE(*this, cidelsa_state, q_w)) @@ -435,7 +435,7 @@ MACHINE_CONFIG_START(cidelsa_state::altair) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, ALTAIR_CHR1) MCFG_DEVICE_PROGRAM_MAP(altair_map) MCFG_DEVICE_IO_MAP(altair_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, cidelsa_state, clear_r)) MCFG_COSMAC_Q_CALLBACK(WRITELINE(*this, cidelsa_state, q_w)) @@ -443,16 +443,16 @@ MACHINE_CONFIG_START(cidelsa_state::altair) /* input/output hardware */ MCFG_DEVICE_ADD("ic23", CDP1852, 0) // clock is really tied to CDP1869 CMSEL (pin 37) - MCFG_CDP1852_MODE_CALLBACK(GND) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(0)) MCFG_CDP1852_DI_CALLBACK(IOPORT("IN0")) MCFG_DEVICE_ADD("ic24", CDP1852, 0) - MCFG_CDP1852_MODE_CALLBACK(GND) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(0)) MCFG_CDP1852_DI_CALLBACK(IOPORT("IN1")) MCFG_DEVICE_ADD("ic25", CDP1852, 0) - MCFG_CDP1852_MODE_CALLBACK(GND) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(0)) MCFG_CDP1852_DI_CALLBACK(IOPORT("IN2")) MCFG_DEVICE_ADD("ic26", CDP1852, ALTAIR_CHR1 / 8) // clock is CDP1802 TPB - MCFG_CDP1852_MODE_CALLBACK(VCC) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(1)) MCFG_CDP1852_DO_CALLBACK(WRITE8(*this, cidelsa_state, altair_out1_w)) /* sound and video hardware */ @@ -464,7 +464,7 @@ MACHINE_CONFIG_START(draco_state::draco) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, DRACO_CHR1) MCFG_DEVICE_PROGRAM_MAP(draco_map) MCFG_DEVICE_IO_MAP(draco_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, cidelsa_state, clear_r)) MCFG_COSMAC_Q_CALLBACK(WRITELINE(*this, cidelsa_state, q_w)) @@ -481,16 +481,16 @@ MACHINE_CONFIG_START(draco_state::draco) /* input/output hardware */ MCFG_DEVICE_ADD("ic29", CDP1852, 0) // clock is really tied to CDP1869 CMSEL (pin 37) - MCFG_CDP1852_MODE_CALLBACK(GND) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(0)) MCFG_CDP1852_DI_CALLBACK(IOPORT("IN0")) MCFG_DEVICE_ADD("ic30", CDP1852, 0) - MCFG_CDP1852_MODE_CALLBACK(GND) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(0)) MCFG_CDP1852_DI_CALLBACK(IOPORT("IN1")) MCFG_DEVICE_ADD("ic31", CDP1852, 0) - MCFG_CDP1852_MODE_CALLBACK(GND) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(0)) MCFG_CDP1852_DI_CALLBACK(IOPORT("IN2")) MCFG_DEVICE_ADD("ic32", CDP1852, ALTAIR_CHR1 / 8) // clock is CDP1802 TPB - MCFG_CDP1852_MODE_CALLBACK(VCC) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(1)) MCFG_CDP1852_DO_CALLBACK(WRITE8(*this, draco_state, out1_w)) /* sound and video hardware */ diff --git a/src/mame/drivers/cit101.cpp b/src/mame/drivers/cit101.cpp index 26612a5d5d0..b7ed97eb12c 100644 --- a/src/mame/drivers/cit101.cpp +++ b/src/mame/drivers/cit101.cpp @@ -335,7 +335,7 @@ 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(GND) // used to time NVR reads + MCFG_I8085A_SID(CONSTANT(0)) // used to time NVR reads MCFG_I8085A_SOD(WRITELINE(*this, cit101_state, blink_w)) MCFG_SCREEN_ADD("screen", RASTER) @@ -385,24 +385,24 @@ MACHINE_CONFIG_START(cit101_state::cit101) // 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. - MCFG_DEVICE_ADD("pit1", 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("comuart", i8251_device, write_txc)) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("comuart", i8251_device, write_rxc)) - MCFG_PIT8253_OUT2_HANDLER(WRITELINE("kbduart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("kbduart", i8251_device, write_rxc)) + pit8253_device &pit1(PIT8253(config, "pit1", 0)); + pit1.set_clk<0>(6.144_MHz_XTAL / 4); + pit1.set_clk<1>(6.144_MHz_XTAL / 4); + pit1.set_clk<2>(6.144_MHz_XTAL / 4); + pit1.out_handler<0>().set("comuart", FUNC(i8251_device::write_txc)); + pit1.out_handler<1>().set("comuart", FUNC(i8251_device::write_rxc)); + pit1.out_handler<2>().set("kbduart", FUNC(i8251_device::write_txc)); + pit1.out_handler<2>().append("kbduart", FUNC(i8251_device::write_rxc)); - MCFG_DEVICE_ADD("ppi", I8255A, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, cit101_state, nvr_address_w)) - MCFG_I8255_IN_PORTB_CB(READ8(*this, cit101_state, nvr_data_r)) - MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, cit101_state, nvr_data_w)) - MCFG_I8255_IN_PORTC_CB(READLINE("comm", rs232_port_device, cts_r)) MCFG_DEVCB_BIT(0) - MCFG_DEVCB_CHAIN_INPUT(READLINE("comm", rs232_port_device, dcd_r)) MCFG_DEVCB_BIT(1) // tied to DSR for loopback test - MCFG_DEVCB_CHAIN_INPUT(READLINE("comm", rs232_port_device, ri_r)) MCFG_DEVCB_BIT(2) // tied to CTS for loopback test - MCFG_DEVCB_CHAIN_INPUT(READLINE("comm", rs232_port_device, si_r)) MCFG_DEVCB_BIT(3) // tied to CTS for loopback test - MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, cit101_state, nvr_control_w)) + i8255_device &ppi(I8255A(config, "ppi", 0)); + ppi.out_pa_callback().set(FUNC(cit101_state::nvr_address_w)); + ppi.in_pb_callback().set(FUNC(cit101_state::nvr_data_r)); + ppi.out_pb_callback().set(FUNC(cit101_state::nvr_data_w)); + ppi.in_pc_callback().set("comm", FUNC(rs232_port_device::cts_r)).lshift(0); + ppi.in_pc_callback().append("comm", FUNC(rs232_port_device::dcd_r)).lshift(1); // tied to DSR for loopback test + ppi.in_pc_callback().append("comm", FUNC(rs232_port_device::ri_r)).lshift(2); // tied to CTS for loopback test + 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 diff --git a/src/mame/drivers/clcd.cpp b/src/mame/drivers/clcd.cpp index 2f2db635bc4..6accadc5021 100644 --- a/src/mame/drivers/clcd.cpp +++ b/src/mame/drivers/clcd.cpp @@ -745,18 +745,18 @@ MACHINE_CONFIG_START(clcd_state::clcd) MCFG_DEVICE_ADD("maincpu", M65C02, 2000000) MCFG_DEVICE_PROGRAM_MAP(clcd_mem) - MCFG_DEVICE_ADD("via0", VIA6522, 2000000) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, clcd_state, via0_pa_w)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, clcd_state, via0_pb_w)) - MCFG_VIA6522_CB1_HANDLER(WRITELINE(*this, clcd_state, via0_cb1_w)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, clcd_state, write_irq_via0)) + via6522_device &via0(VIA6522(config, "via0", 2000000)); + via0.writepa_handler().set(FUNC(clcd_state::via0_pa_w)); + via0.writepb_handler().set(FUNC(clcd_state::via0_pb_w)); + via0.cb1_handler().set(FUNC(clcd_state::via0_cb1_w)); + via0.irq_handler().set(FUNC(clcd_state::write_irq_via0)); - MCFG_DEVICE_ADD("via1", VIA6522, 2000000) - MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, clcd_state, via1_pa_w)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, clcd_state, via1_pb_w)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, clcd_state, write_irq_via1)) - MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_centronics, centronics_device, write_strobe)) MCFG_DEVCB_XOR(1) - MCFG_VIA6522_CB2_HANDLER(WRITELINE("speaker", speaker_sound_device, level_w)) + via6522_device &via1(VIA6522(config, "via1", 2000000)); + via1.writepa_handler().set(FUNC(clcd_state::via1_pa_w)); + via1.writepb_handler().set(FUNC(clcd_state::via1_pb_w)); + via1.irq_handler().set(FUNC(clcd_state::write_irq_via1)); + via1.ca2_handler().set(m_centronics, FUNC(centronics_device::write_strobe)).invert(); + via1.cb2_handler().set("speaker", FUNC(speaker_sound_device::level_w)); MCFG_DEVICE_ADD("acia", MOS6551, 2000000) MCFG_MOS6551_XTAL(XTAL(1'843'200)) @@ -771,8 +771,8 @@ MACHINE_CONFIG_START(clcd_state::clcd) MCFG_RS232_DSR_HANDLER(WRITELINE("acia", mos6551_device, write_dsr)) MCFG_RS232_CTS_HANDLER(WRITELINE("via1", via6522_device, write_pb4)) - MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, nullptr) - MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE("via1", via6522_device, write_pb6)) MCFG_DEVCB_XOR(1) + CENTRONICS(config, m_centronics, centronics_devices, nullptr); + m_centronics->busy_handler().set("via1", FUNC(via6522_device::write_pb6)).invert(); MCFG_DEVICE_ADD("bank1", ADDRESS_MAP_BANK, 0) MCFG_DEVICE_PROGRAM_MAP(clcd_banked_mem) diff --git a/src/mame/drivers/cloak.cpp b/src/mame/drivers/cloak.cpp index 97cdc984c3a..66cb8278daf 100644 --- a/src/mame/drivers/cloak.cpp +++ b/src/mame/drivers/cloak.cpp @@ -328,13 +328,13 @@ MACHINE_CONFIG_START(cloak_state::cloak) MCFG_NVRAM_ADD_0FILL("nvram") - MCFG_DEVICE_ADD("outlatch", LS259, 0) // 10B - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, cloak_state, coin_counter_r_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, cloak_state, coin_counter_l_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, cloak_state, cocktail_w)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ??? - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // START LED 2 - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT // START LED 1 + ls259_device &outlatch(LS259(config, "outlatch")); // 10B + outlatch.q_out_cb<0>().set(FUNC(cloak_state::coin_counter_r_w)); + outlatch.q_out_cb<1>().set(FUNC(cloak_state::coin_counter_l_w)); + outlatch.q_out_cb<3>().set(FUNC(cloak_state::cocktail_w)); + outlatch.q_out_cb<5>().set_nop(); // ??? + outlatch.q_out_cb<6>().set_output("led1").invert(); // START LED 2 + outlatch.q_out_cb<7>().set_output("led0").invert(); // START LED 1 MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/cloud9.cpp b/src/mame/drivers/cloud9.cpp index a69700dafe4..d89f0811fef 100644 --- a/src/mame/drivers/cloud9.cpp +++ b/src/mame/drivers/cloud9.cpp @@ -216,18 +216,6 @@ WRITE8_MEMBER(cloud9_state::irq_ack_w) } -WRITE_LINE_MEMBER(cloud9_state::coin1_counter_w) -{ - machine().bookkeeping().coin_counter_w(0, state); -} - - -WRITE_LINE_MEMBER(cloud9_state::coin2_counter_w) -{ - machine().bookkeeping().coin_counter_w(1, state); -} - - READ8_MEMBER(cloud9_state::leta_r) { return ioport(offset ? "TRACKX" : "TRACKY")->read(); @@ -407,14 +395,14 @@ GFXDECODE_END MACHINE_CONFIG_START(cloud9_state::cloud9) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, MASTER_CLOCK/8) - MCFG_DEVICE_PROGRAM_MAP(cloud9_map) + M6502(config, m_maincpu, MASTER_CLOCK/8); + m_maincpu->set_addrmap(AS_PROGRAM, &cloud9_state::cloud9_map); - MCFG_DEVICE_ADD("outlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, cloud9_state, coin1_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, cloud9_state, coin2_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT + ls259_device &outlatch(LS259(config, "outlatch")); + outlatch.q_out_cb<0>().set([this] (int state) { machine().bookkeeping().coin_counter_w(0, state); }); + outlatch.q_out_cb<1>().set([this] (int state) { machine().bookkeeping().coin_counter_w(1, state); }); + outlatch.q_out_cb<2>().set_output("led0").invert(); + outlatch.q_out_cb<3>().set_output("led1").invert(); MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) diff --git a/src/mame/drivers/clshroad.cpp b/src/mame/drivers/clshroad.cpp index f53d7385874..e30127ebc0b 100644 --- a/src/mame/drivers/clshroad.cpp +++ b/src/mame/drivers/clshroad.cpp @@ -283,11 +283,11 @@ MACHINE_CONFIG_START(clshroad_state::firebatl) MCFG_DEVICE_PROGRAM_MAP(clshroad_sound_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */ - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, clshroad_state, main_irq_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, clshroad_state, sound_irq_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, clshroad_state, flipscreen_w)) + ls259_device &mainlatch(LS259(config, "mainlatch")); + mainlatch.q_out_cb<0>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert(); + mainlatch.q_out_cb<1>().set(FUNC(clshroad_state::main_irq_mask_w)); + mainlatch.q_out_cb<3>().set(FUNC(clshroad_state::sound_irq_mask_w)); + mainlatch.q_out_cb<4>().set(FUNC(clshroad_state::flipscreen_w)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -324,11 +324,11 @@ MACHINE_CONFIG_START(clshroad_state::clshroad) //MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, irq0_line_hold) /* IRQ, no NMI */ MCFG_DEVICE_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 60) /* periodic interrupt, don't know about the frequency */ - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // never writes here? - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, clshroad_state, main_irq_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, clshroad_state, sound_irq_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, clshroad_state, flipscreen_w)) + ls259_device &mainlatch(LS259(config, "mainlatch")); + mainlatch.q_out_cb<0>().set_nop(); // never writes here? + mainlatch.q_out_cb<1>().set(FUNC(clshroad_state::main_irq_mask_w)); + mainlatch.q_out_cb<3>().set(FUNC(clshroad_state::sound_irq_mask_w)); + mainlatch.q_out_cb<4>().set(FUNC(clshroad_state::flipscreen_w)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/cntsteer.cpp b/src/mame/drivers/cntsteer.cpp index 9677b7328a6..f34bf620848 100644 --- a/src/mame/drivers/cntsteer.cpp +++ b/src/mame/drivers/cntsteer.cpp @@ -938,15 +938,15 @@ MACHINE_CONFIG_START(cntsteer_state::cntsteer) MCFG_MACHINE_RESET_OVERRIDE(cntsteer_state,cntsteer) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(cntsteer_state, screen_update_cntsteer) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) // ? - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, cntsteer_state, subcpu_vblank_irq)) // ? + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(256, 256); + screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(cntsteer_state::screen_update_cntsteer)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); // ? + screen.screen_vblank().append(FUNC(cntsteer_state::subcpu_vblank_irq)); // ? MCFG_QUANTUM_PERFECT_CPU("maincpu") MCFG_QUANTUM_PERFECT_CPU("subcpu") diff --git a/src/mame/drivers/coco12.cpp b/src/mame/drivers/coco12.cpp index 22e3d9e27a2..b9e22c24f8c 100644 --- a/src/mame/drivers/coco12.cpp +++ b/src/mame/drivers/coco12.cpp @@ -474,10 +474,10 @@ MACHINE_CONFIG_START(coco12_state::coco) MCFG_RS232_DCD_HANDLER(WRITELINE(PIA1_TAG, pia6821_device, ca1_w)) MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("printer", printer) - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, coco_cart, "pak") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) + cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), coco_cart, "pak")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); // video hardware MCFG_SCREEN_MC6847_NTSC_ADD(SCREEN_TAG, VDG_TAG) @@ -516,11 +516,10 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(coco12_state::cocoe) coco(config); - MCFG_COCO_CARTRIDGE_REMOVE(CARTRIDGE_TAG) - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, coco_cart, "fdc") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) + cococart_slot_device &cartslot(COCOCART_SLOT(config.replace(), CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), coco_cart, "fdc")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); MCFG_COCO_VHD_ADD(VHD0_TAG) MCFG_COCO_VHD_ADD(VHD1_TAG) MACHINE_CONFIG_END @@ -535,11 +534,10 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(coco12_state::coco2) coco(config); - MCFG_COCO_CARTRIDGE_REMOVE(CARTRIDGE_TAG) - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, coco_cart, "fdcv11") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) + cococart_slot_device &cartslot(COCOCART_SLOT(config.replace(), CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), coco_cart, "fdcv11")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); MCFG_COCO_VHD_ADD(VHD0_TAG) MCFG_COCO_VHD_ADD(VHD1_TAG) MACHINE_CONFIG_END @@ -569,33 +567,33 @@ MACHINE_CONFIG_START(coco12_state::coco2bh) MCFG_RAM_DEFAULT_SIZE("64K") MACHINE_CONFIG_END -MACHINE_CONFIG_START(coco12_state::cp400) +void coco12_state::cp400(machine_config &config) +{ coco(config); - MCFG_COCO_CARTRIDGE_REMOVE(CARTRIDGE_TAG) - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, coco_cart, "cp450_fdc") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) -MACHINE_CONFIG_END + cococart_slot_device &cartslot(COCOCART_SLOT(config.replace(), CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), coco_cart, "cp450_fdc")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); +} -MACHINE_CONFIG_START(coco12_state::t4426) +void coco12_state::t4426(machine_config &config) +{ coco2(config); - MCFG_COCO_CARTRIDGE_REMOVE(CARTRIDGE_TAG) - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, t4426_cart, "t4426") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) - MCFG_SLOT_FIXED(true) // This cart is fixed so no way to change it -MACHINE_CONFIG_END + cococart_slot_device &cartslot(COCOCART_SLOT(config.replace(), CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), t4426_cart, "t4426")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); + cartslot.set_fixed(true); // This cart is fixed so no way to change it +} -MACHINE_CONFIG_START(coco12_state::cd6809) +void coco12_state::cd6809(machine_config &config) +{ coco(config); - MCFG_COCO_CARTRIDGE_REMOVE(CARTRIDGE_TAG) - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, coco_cart, "cd6809_fdc") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) -MACHINE_CONFIG_END + cococart_slot_device &cartslot(COCOCART_SLOT(config.replace(), CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), coco_cart, "cd6809_fdc")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); +} //************************************************************************** // ROMS diff --git a/src/mame/drivers/coco3.cpp b/src/mame/drivers/coco3.cpp index 2419e5b9358..1ae287a428f 100644 --- a/src/mame/drivers/coco3.cpp +++ b/src/mame/drivers/coco3.cpp @@ -281,10 +281,10 @@ MACHINE_CONFIG_START(coco3_state::coco3) MCFG_RS232_DCD_HANDLER(WRITELINE(PIA1_TAG, pia6821_device, ca1_w)) MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("printer", printer) - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, coco_cart, "fdcv11") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) + cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), coco_cart, "fdcv11")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); MCFG_COCO_VHD_ADD(VHD0_TAG) MCFG_COCO_VHD_ADD(VHD1_TAG) @@ -354,14 +354,14 @@ MACHINE_CONFIG_START(coco3_state::coco3h) MCFG_DEVICE_PROGRAM_MAP(coco3_mem) MACHINE_CONFIG_END -MACHINE_CONFIG_START(coco3_state::coco3dw1) +void coco3_state::coco3dw1(machine_config &config) +{ coco3(config); - MCFG_COCO_CARTRIDGE_REMOVE(CARTRIDGE_TAG) - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, coco_cart, "cc3hdb1") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) -MACHINE_CONFIG_END + cococart_slot_device &cartslot(COCOCART_SLOT(config.replace(), CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), coco_cart, "cc3hdb1")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); +} //************************************************************************** // ROMS diff --git a/src/mame/drivers/codata.cpp b/src/mame/drivers/codata.cpp index d47767f90e1..7fa5f64e27c 100644 --- a/src/mame/drivers/codata.cpp +++ b/src/mame/drivers/codata.cpp @@ -74,14 +74,14 @@ MACHINE_CONFIG_START(codata_state::codata) MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("rs423b", rs232_port_device, write_txd)) MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", M68K_IRQ_5)) - MCFG_DEVICE_ADD("timer", AM9513A, XTAL(16'000'000) / 4) - MCFG_AM9513_OUT1_CALLBACK(NOOP) // Timer 1 = "Abort/Reset" (watchdog) - MCFG_AM9513_OUT2_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_6)) // Timer 2 - MCFG_AM9513_OUT3_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_7)) // Refresh - MCFG_AM9513_OUT4_CALLBACK(WRITELINE("uart", upd7201_new_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", upd7201_new_device, txca_w)) - MCFG_AM9513_OUT5_CALLBACK(WRITELINE("uart", upd7201_new_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", upd7201_new_device, txcb_w)) + am9513_device &timer(AM9513A(config, "timer", 16_MHz_XTAL / 4)); + timer.out1_cb().set_nop(); // Timer 1 = "Abort/Reset" (watchdog) + timer.out2_cb().set_inputline(m_maincpu, M68K_IRQ_6); // Timer 2 + timer.out3_cb().set_inputline(m_maincpu, M68K_IRQ_7); // Refresh + timer.out4_cb().set("uart", FUNC(upd7201_new_device::rxca_w)); + timer.out4_cb().append("uart", FUNC(upd7201_new_device::txca_w)); + timer.out5_cb().set("uart", FUNC(upd7201_new_device::rxcb_w)); + timer.out5_cb().append("uart", FUNC(upd7201_new_device::txcb_w)); MCFG_DEVICE_ADD("rs423a", RS232_PORT, default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(WRITELINE("uart", upd7201_new_device, rxa_w)) diff --git a/src/mame/drivers/commando.cpp b/src/mame/drivers/commando.cpp index e628310992d..be69b8b2dc1 100644 --- a/src/mame/drivers/commando.cpp +++ b/src/mame/drivers/commando.cpp @@ -263,17 +263,16 @@ MACHINE_CONFIG_START(commando_state::commando) MCFG_DEVICE_PROGRAM_MAP(sound_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(commando_state, irq0_line_hold, 4*60) - /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(commando_state, screen_update_commando) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram8_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, commando_state, vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(commando_state::screen_update_commando)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + screen.screen_vblank().append(FUNC(commando_state::vblank_irq)); + screen.set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_commando) MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", "proms", 256) diff --git a/src/mame/drivers/compucolor.cpp b/src/mame/drivers/compucolor.cpp index 4a3d829ae4a..264048fab80 100644 --- a/src/mame/drivers/compucolor.cpp +++ b/src/mame/drivers/compucolor.cpp @@ -414,9 +414,9 @@ MACHINE_CONFIG_START(compucolor2_state::compucolor2) MCFG_TMS9927_VSYN_CALLBACK(WRITELINE("blink", ripple_counter_device, clock_w)) MCFG_VIDEO_SET_SCREEN("screen") - MCFG_DEVICE_ADD("blink", RIPPLE_COUNTER, 0) // 74LS393 at UG10 - MCFG_RIPPLE_COUNTER_STAGES(8) - MCFG_RIPPLE_COUNTER_COUNT_OUT_CB(WRITELINE(TMS5501_TAG, tms5501_device, sens_w)) MCFG_DEVCB_BIT(4) + ripple_counter_device &blink(RIPPLE_COUNTER(config, "blink", 0)); // 74LS393 at UG10 + blink.set_stages(8); + blink.count_out_cb().set(m_mioc, FUNC(tms5501_device::sens_w)).bit(4); // devices MCFG_DEVICE_ADD(TMS5501_TAG, TMS5501, XTAL(17'971'200)/9) diff --git a/src/mame/drivers/comx35.cpp b/src/mame/drivers/comx35.cpp index dd1fa84c61f..47f4da2ced4 100644 --- a/src/mame/drivers/comx35.cpp +++ b/src/mame/drivers/comx35.cpp @@ -600,7 +600,7 @@ MACHINE_CONFIG_START(comx35_state::pal) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, cdp1869_device::CPU_CLK_PAL) MCFG_DEVICE_PROGRAM_MAP(comx35_mem) MCFG_DEVICE_IO_MAP(comx35_io) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, comx35_state, clear_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, comx35_state, ef2_r)) MCFG_COSMAC_EF4_CALLBACK(READLINE(*this, comx35_state, ef4_r)) @@ -650,7 +650,7 @@ MACHINE_CONFIG_START(comx35_state::ntsc) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, cdp1869_device::CPU_CLK_NTSC) MCFG_DEVICE_PROGRAM_MAP(comx35_mem) MCFG_DEVICE_IO_MAP(comx35_io) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, comx35_state, clear_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, comx35_state, ef2_r)) MCFG_COSMAC_EF4_CALLBACK(READLINE(*this, comx35_state, ef4_r)) diff --git a/src/mame/drivers/cortex.cpp b/src/mame/drivers/cortex.cpp index f685fbbc61c..bdecceeafdb 100644 --- a/src/mame/drivers/cortex.cpp +++ b/src/mame/drivers/cortex.cpp @@ -196,10 +196,11 @@ MACHINE_CONFIG_START(cortex_state::cortex) MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE("beeper", beep_device, set_state)) /* video hardware */ - MCFG_DEVICE_ADD( "crtc", TMS9929A, XTAL(10'738'635) / 2 ) - MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INT_9995_INT1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, cortex_state, vdp_int_w)) - MCFG_TMS9928A_VRAM_SIZE(0x4000) + tms9929a_device &crtc(TMS9929A(config, "crtc", XTAL(10'738'635) / 2)); + crtc.out_int_line_callback().set_inputline(m_maincpu, INT_9995_INT1); + crtc.out_int_line_callback().append(FUNC(cortex_state::vdp_int_w)); + crtc.set_vram_size(0x4000); + device = &crtc; // FIXME: this line is needed because the following macro is nasty MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" ) MCFG_SCREEN_UPDATE_DEVICE( "crtc", tms9928a_device, screen_update ) diff --git a/src/mame/drivers/cosmicos.cpp b/src/mame/drivers/cosmicos.cpp index 160883b0e1e..4121cb9c32b 100644 --- a/src/mame/drivers/cosmicos.cpp +++ b/src/mame/drivers/cosmicos.cpp @@ -536,7 +536,7 @@ MACHINE_CONFIG_START(cosmicos_state::cosmicos) MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), GND, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), WRITELINE(*this, cosmicos_state, dmaout_w), WRITELINE(*this, cosmicos_state, efx_w), NOOP, VCC, VCC, VCC) + MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), WRITELINE(*this, cosmicos_state, dmaout_w), WRITELINE(*this, cosmicos_state, efx_w), NOOP, CONSTANT(1), CONSTANT(1), CONSTANT(1)) MCFG_CDP1864_CHROMINANCE(RES_K(2), 0, 0, 0) // R2 MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/cp1.cpp b/src/mame/drivers/cp1.cpp index 233cea9e3ab..5fe52c736e8 100644 --- a/src/mame/drivers/cp1.cpp +++ b/src/mame/drivers/cp1.cpp @@ -22,8 +22,8 @@ class cp1_state : public driver_device { public: - cp1_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) , + cp1_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_i8155(*this, "i8155"), m_i8155_cp3(*this, "i8155_cp3"), @@ -266,16 +266,16 @@ QUICKLOAD_LOAD_MEMBER( cp1_state, quickload ) MACHINE_CONFIG_START(cp1_state::cp1) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8049, XTAL(6'000'000)) - MCFG_DEVICE_IO_MAP(cp1_io) - MCFG_MCS48_PORT_P1_IN_CB(READ8(*this, cp1_state, port1_r)) - MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(*this, cp1_state, port1_w)) - MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, cp1_state, port2_r)) - MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(*this, cp1_state, port2_w)) - MCFG_MCS48_PORT_BUS_IN_CB(LOGGER("getbus")) - MCFG_MCS48_PORT_BUS_OUT_CB(LOGGER("putbus")) - MCFG_MCS48_PORT_T0_IN_CB(LOGGER("t0_r")) - MCFG_MCS48_PORT_T1_IN_CB(LOGGER("t1_r")) + i8049_device &maincpu(I8049(config, m_maincpu, 6_MHz_XTAL)); + maincpu.set_addrmap(AS_IO, &cp1_state::cp1_io); + maincpu.p1_in_cb().set(FUNC(cp1_state::port1_r)); + maincpu.p1_out_cb().set(FUNC(cp1_state::port1_w)); + maincpu.p2_in_cb().set(FUNC(cp1_state::port2_r)); + maincpu.p2_out_cb().set(FUNC(cp1_state::port2_w)); + maincpu.bus_in_cb().set_log("getbus"); + maincpu.bus_out_cb().set_log("putbus"); + maincpu.t0_in_cb().set_log("t0_r"); + maincpu.t1_in_cb().set_log("t1_r"); MCFG_DEVICE_ADD("i8155", I8155, 0) MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, cp1_state, i8155_porta_w)) diff --git a/src/mame/drivers/cpzodiac.cpp b/src/mame/drivers/cpzodiac.cpp index b8d71521228..170aa5e188e 100644 --- a/src/mame/drivers/cpzodiac.cpp +++ b/src/mame/drivers/cpzodiac.cpp @@ -168,20 +168,20 @@ MACHINE_CONFIG_START(cpzodiac_state::cpzodiac) MCFG_DEVICE_IO_MAP(main_io_map) MCFG_Z80_DAISY_CHAIN(daisy_chain) - MCFG_DEVICE_ADD("io", TE7750, 0) - MCFG_TE7750_IOS_CB(CONSTANT(4)) - MCFG_TE7750_IN_PORT1_CB(IOPORT("IN1")) - MCFG_TE7750_IN_PORT2_CB(IOPORT("IN2")) - MCFG_TE7750_IN_PORT3_CB(IOPORT("IN3")) - MCFG_TE7750_IN_PORT4_CB(IOPORT("IN4")) - MCFG_TE7750_OUT_PORT8_CB(MEMBANK("databank")) MCFG_DEVCB_RSHIFT(-4) + te7750_device &io(TE7750(config, "io", 0)); + io.ios_cb().set_constant(4); + io.in_port1_cb().set_ioport("IN1"); + io.in_port2_cb().set_ioport("IN2"); + io.in_port3_cb().set_ioport("IN3"); + io.in_port4_cb().set_ioport("IN4"); + io.out_port8_cb().set_membank(m_bank).rshift(4); // Code initializes Port 3 and 4 latches to 0 by mistake? - MCFG_DEVICE_ADD("ctc", Z80CTC, 12_MHz_XTAL/2) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", 0)) + z80ctc_device &ctc(Z80CTC(config, "ctc", 12_MHz_XTAL/2)); + ctc.intr_callback().set_inputline(m_maincpu, 0); - MCFG_DEVICE_ADD("audiocpu", Z80, 12_MHz_XTAL/2) - MCFG_DEVICE_PROGRAM_MAP(sound_map) + Z80(config, m_audiocpu, 12_MHz_XTAL/2); + m_audiocpu->set_addrmap(AS_PROGRAM, &cpzodiac_state::sound_map); /* video hardware */ // TODO diff --git a/src/mame/drivers/crshrace.cpp b/src/mame/drivers/crshrace.cpp index 7a0aee56d55..6c4524725c7 100644 --- a/src/mame/drivers/crshrace.cpp +++ b/src/mame/drivers/crshrace.cpp @@ -415,14 +415,14 @@ MACHINE_CONFIG_START(crshrace_state::crshrace) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(crshrace_state, screen_update_crshrace) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("spriteram2", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 40*8-1, 0*8, 28*8-1); + screen.set_screen_update(FUNC(crshrace_state::screen_update_crshrace)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + screen.screen_vblank().append(m_spriteram2, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + screen.set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_crshrace) MCFG_PALETTE_ADD("palette", 2048) diff --git a/src/mame/drivers/darkseal.cpp b/src/mame/drivers/darkseal.cpp index 5a13e860963..636785a7103 100644 --- a/src/mame/drivers/darkseal.cpp +++ b/src/mame/drivers/darkseal.cpp @@ -263,8 +263,8 @@ MACHINE_CONFIG_START(darkseal_state::darkseal) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, 0)) + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000)/8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.45) diff --git a/src/mame/drivers/dblewing.cpp b/src/mame/drivers/dblewing.cpp index f1503af323c..bf81eb8dc90 100644 --- a/src/mame/drivers/dblewing.cpp +++ b/src/mame/drivers/dblewing.cpp @@ -404,14 +404,14 @@ MACHINE_CONFIG_START(dblewing_state::dblewing) MCFG_DECO_SPRITE_PRIORITY_CB(dblewing_state, pri_callback) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO104_ADD("ioprot") - MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) - MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) - MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) - MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE - MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR - MCFG_DECO146_SOUNDLATCH_IRQ_CB(WRITELINE(*this, dblewing_state, soundlatch_irq_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("soundirq", input_merger_device, in_w<0>)) + DECO104PROT(config, m_deco104, 0); + m_deco104->port_a_cb().set_ioport("INPUTS"); + m_deco104->port_b_cb().set_ioport("SYSTEM"); + m_deco104->port_c_cb().set_ioport("DSW"); + m_deco104->set_interface_scramble_interleave(); + m_deco104->set_use_magic_read_address_xor(true); + m_deco104->soundlatch_irq_cb().set(FUNC(dblewing_state::soundlatch_irq_w)); + m_deco104->soundlatch_irq_cb().append("soundirq", FUNC(input_merger_device::in_w<0>)); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp index f2594ab4691..eb9a78db775 100644 --- a/src/mame/drivers/ddenlovr.cpp +++ b/src/mame/drivers/ddenlovr.cpp @@ -9859,15 +9859,15 @@ MACHINE_CONFIG_START(ddenlovr_state::quizchq) MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(336, 256+22) - MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 5, 256-16+5-1) - MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, strobe_a)) MCFG_DEVCB_INVERT + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(336, 256+22); + m_screen->set_visarea(0, 336-1, 5, 256-16+5-1); + m_screen->set_screen_update(FUNC(ddenlovr_state::screen_update_ddenlovr)); + m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); + m_screen->set_palette("palette"); + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::strobe_a)).invert(); MCFG_PALETTE_ADD("palette", 0x100) @@ -9885,8 +9885,7 @@ MACHINE_CONFIG_START(ddenlovr_state::quizchq) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* devices */ - MCFG_DEVICE_ADD("rtc", MSM6242, XTAL(32'768)) - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE("maincpu", tmpz84c015_device, trg2)) MCFG_DEVCB_INVERT + MSM6242(config, "rtc", 32.768_kHz_XTAL).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg2)).invert(); MACHINE_CONFIG_END MACHINE_CONFIG_START(ddenlovr_state::rongrong) @@ -10175,12 +10174,10 @@ MACHINE_CONFIG_START(ddenlovr_state::funkyfig) MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,funkyfig) - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, ddenlovr_state, funkyfig_sound_irq)) + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)); + m_screen->screen_vblank().append(FUNC(ddenlovr_state::funkyfig_sound_irq)); - MCFG_DEVICE_MODIFY("rtc") - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE("maincpu", tmpz84c015_device, trg1)) MCFG_DEVCB_INVERT + subdevice("rtc")->out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg1)).invert(); MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, funkyfig_blitter_irq) @@ -10237,8 +10234,7 @@ MACHINE_CONFIG_START(ddenlovr_state::mjschuka) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) /* devices */ - MCFG_DEVICE_ADD("rtc", RTC62421, XTAL(32'768)) // internal oscillator - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE("maincpu", tmpz84c015_device, pa7_w)) MCFG_DEVCB_INVERT + RTC62421(config, "rtc", 32.768_kHz_XTAL).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::pa7_w)).invert(); // internal oscillator MACHINE_CONFIG_END @@ -10264,8 +10260,7 @@ MACHINE_CONFIG_START(ddenlovr_state::mjmyster) MCFG_TMPZ84C015_OUT_PA_CB(WRITE8(*this, ddenlovr_state, mjmyster_rambank_w)) MCFG_TMPZ84C015_OUT_PB_CB(WRITE8(*this, ddenlovr_state, mmpanic_rombank_w)) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) MCFG_DEVCB_INVERT + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)).invert(); MCFG_DEVICE_MODIFY("rtc") MCFG_MSM6242_OUT_INT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI)) @@ -10305,8 +10300,7 @@ MACHINE_CONFIG_START(ddenlovr_state::hginga) MCFG_DEVICE_MODIFY("screen") MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) - MCFG_DEVICE_MODIFY("rtc") - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE("maincpu", tmpz84c015_device, pa7_w)) MCFG_DEVCB_INVERT + subdevice("rtc")->out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::pa7_w)).invert(); MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjmyster_blitter_irq) @@ -10332,8 +10326,7 @@ MACHINE_CONFIG_START(ddenlovr_state::hgokou) MCFG_DEVICE_MODIFY("screen") MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) - MCFG_DEVICE_MODIFY("rtc") - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE("maincpu", tmpz84c015_device, pa7_w)) MCFG_DEVCB_INVERT + subdevice("rtc")->out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::pa7_w)).invert(); MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjmyster_blitter_irq) @@ -10375,8 +10368,7 @@ MACHINE_CONFIG_START(ddenlovr_state::mjmyuniv) MCFG_TMPZ84C015_OUT_PA_CB(WRITE8(*this, ddenlovr_state, mjmyster_rambank_w)) MCFG_TMPZ84C015_OUT_PB_CB(WRITE8(*this, ddenlovr_state, mmpanic_rombank_w)) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) MCFG_DEVCB_INVERT + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)).invert(); MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,mjmyster) @@ -10401,8 +10393,7 @@ MACHINE_CONFIG_START(ddenlovr_state::mjmyornt) MCFG_TMPZ84C015_OUT_PA_CB(WRITE8(*this, ddenlovr_state, mjmyster_rambank_w)) MCFG_TMPZ84C015_OUT_PB_CB(WRITE8(*this, ddenlovr_state, mmpanic_rombank_w)) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) MCFG_DEVCB_INVERT + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)).invert(); MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 4, 256-16+4-1) @@ -10457,12 +10448,10 @@ MACHINE_CONFIG_START(ddenlovr_state::mjflove) MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,mjflove) - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ddenlovr_state, mjflove_irq)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("maincpu", tmpz84c015_device, trg0)) // frame counter? + m_screen->screen_vblank().set(FUNC(ddenlovr_state::mjflove_irq)); + m_screen->screen_vblank().append(m_maincpu, FUNC(tmpz84c015_device::trg0)); // frame counter? - MCFG_DEVICE_REPLACE("rtc", RTC72421, XTAL(32'768)) - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE(*this, ddenlovr_state, mjflove_rtc_irq)) + RTC72421(config.replace(), "rtc", 32.768_kHz_XTAL).out_int_handler().set(FUNC(ddenlovr_state::mjflove_rtc_irq)); MCFG_DDENLOVR_BLITTER_IRQ(ddenlovr_state, mjflove_blitter_irq) diff --git a/src/mame/drivers/dec8.cpp b/src/mame/drivers/dec8.cpp index eb914d7598f..ab40ed28395 100644 --- a/src/mame/drivers/dec8.cpp +++ b/src/mame/drivers/dec8.cpp @@ -349,12 +349,6 @@ WRITE8_MEMBER(dec8_state::ghostb_bank_w) flip_screen_set(BIT(data, 3)); } -WRITE_LINE_MEMBER(dec8_state::ghostb_nmi_w) -{ - if (state && m_nmi_enable) - m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); -} - WRITE8_MEMBER(dec8_state::csilver_control_w) { /* @@ -2090,19 +2084,18 @@ MACHINE_CONFIG_START(dec8_state::gondo) MCFG_DECO_KARNOVSPRITES_GFX_REGION(1) MCFG_DECO_KARNOVSPRITES_GFXDECODE("gfxdecode") - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(58) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_RAW_PARAMS_DATA_EAST - MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_gondo) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dec8_state, screen_vblank_dec8)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("nmigate", input_merger_device, in_w<1>)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); +// screen.set_refresh_hz(58); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */); +// screen.set_size(32*8, 32*8); +// screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + device = &screen; MCFG_SCREEN_RAW_PARAMS_DATA_EAST + screen.set_screen_update(FUNC(dec8_state::screen_update_gondo)); + screen.screen_vblank().set(FUNC(dec8_state::screen_vblank_dec8)); + screen.screen_vblank().append(m_nmigate, FUNC(input_merger_device::in_w<1>)); + screen.set_palette("palette"); - MCFG_INPUT_MERGER_ALL_HIGH("nmigate") - MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI)) + INPUT_MERGER_ALL_HIGH(config, m_nmigate).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_gondo) MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting @@ -2151,19 +2144,18 @@ MACHINE_CONFIG_START(dec8_state::garyoret) MCFG_DECO_KARNOVSPRITES_GFX_REGION(1) MCFG_DECO_KARNOVSPRITES_GFXDECODE("gfxdecode") - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(58) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_RAW_PARAMS_DATA_EAST - MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_garyoret) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dec8_state, screen_vblank_dec8)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("nmigate", input_merger_device, in_w<1>)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); +// screen.set_refresh_hz(58); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */); +// screen.set_size(32*8, 32*8); +// screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + device = &screen; MCFG_SCREEN_RAW_PARAMS_DATA_EAST + screen.set_screen_update(FUNC(dec8_state::screen_update_garyoret)); + screen.screen_vblank().set(FUNC(dec8_state::screen_vblank_dec8)); + screen.screen_vblank().append(m_nmigate, FUNC(input_merger_device::in_w<1>)); + screen.set_palette("palette"); - MCFG_INPUT_MERGER_ALL_HIGH("nmigate") - MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI)) + INPUT_MERGER_ALL_HIGH(config, m_nmigate).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_gondo) MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting @@ -2216,16 +2208,16 @@ MACHINE_CONFIG_START(dec8_state::ghostb) MCFG_DECO_KARNOVSPRITES_GFX_REGION(1) MCFG_DECO_KARNOVSPRITES_GFXDECODE("gfxdecode") - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(58) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) - MCFG_SCREEN_RAW_PARAMS_DATA_EAST - MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_ghostb) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dec8_state, screen_vblank_dec8)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, dec8_state, ghostb_nmi_w)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); +// screen.set_refresh_hz(58); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */); +// screen.set_size(32*8, 32*8); +// screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + device = &screen; MCFG_SCREEN_RAW_PARAMS_DATA_EAST + screen.set_screen_update(FUNC(dec8_state::screen_update_ghostb)); + screen.screen_vblank().set(FUNC(dec8_state::screen_vblank_dec8)); + screen.screen_vblank().append([this] (int state) { if (state && m_nmi_enable) m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); }); + screen.set_palette("palette"); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_ghostb) MCFG_DECO_RMC3_ADD_PROMS("palette","proms",1024) // xxxxBBBBGGGGRRRR with custom weighting diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp index e3568125696..e182c7bcd40 100644 --- a/src/mame/drivers/deco32.cpp +++ b/src/mame/drivers/deco32.cpp @@ -2004,12 +2004,12 @@ MACHINE_CONFIG_START(fghthist_state::fghthist) MCFG_DECO_SPRITE_GFX_REGION(3) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO146_ADD("ioprot") - MCFG_DECO146_IN_PORTA_CB(IOPORT("IN0")) - MCFG_DECO146_IN_PORTB_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(0) - MCFG_DECO146_IN_PORTC_CB(IOPORT("IN1")) - MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE - MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR + DECO146PROT(config, m_ioprot, 0); + m_ioprot->port_a_cb().set_ioport("IN0"); + m_ioprot->port_b_cb().set("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)).lshift(0); + m_ioprot->port_c_cb().set_ioport("IN1"); + m_ioprot->set_interface_scramble_interleave(); + m_ioprot->set_use_magic_read_address_xor(true); MCFG_VIDEO_START_OVERRIDE(fghthist_state, fghthist) @@ -2170,11 +2170,11 @@ MACHINE_CONFIG_START(dragngun_state::dragngun) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "gun_speaker", 1.0) MCFG_DEVICE_ADD("vol_main", LC7535) - MCFG_LC7535_SELECT_CB(VCC) + MCFG_LC7535_SELECT_CB(CONSTANT(1)) MCFG_LC7535_VOLUME_CB(dragngun_state, volume_main_changed) MCFG_DEVICE_ADD("vol_gun", LC7535) - MCFG_LC7535_SELECT_CB(GND) + MCFG_LC7535_SELECT_CB(CONSTANT(0)) MCFG_LC7535_VOLUME_CB(dragngun_state, volume_gun_changed) MACHINE_CONFIG_END @@ -2298,7 +2298,7 @@ MACHINE_CONFIG_START(dragngun_state::lockload) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.35) MCFG_DEVICE_ADD("vol_main", LC7535) - MCFG_LC7535_SELECT_CB(VCC) + MCFG_LC7535_SELECT_CB(CONSTANT(1)) MCFG_LC7535_VOLUME_CB(dragngun_state, volume_main_changed) MACHINE_CONFIG_END @@ -2359,12 +2359,12 @@ MACHINE_CONFIG_START(nslasher_state::tattass) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "deco_ace", gfx_tattass) - MCFG_DECO104_ADD("ioprot") - MCFG_DECO146_IN_PORTA_CB(IOPORT("IN0")) - MCFG_DECO146_IN_PORTB_CB(READ16(*this, nslasher_state, port_b_tattass)) - MCFG_DECO146_IN_PORTC_CB(IOPORT("IN1")) - MCFG_DECO146_SOUNDLATCH_IRQ_CB(WRITELINE(*this, nslasher_state, tattass_sound_irq_w)) - MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE + DECO104PROT(config, m_ioprot, 0); + m_ioprot->port_a_cb().set_ioport("IN0"); + m_ioprot->port_b_cb().set(FUNC(nslasher_state::port_b_tattass)); + m_ioprot->port_c_cb().set_ioport("IN1"); + m_ioprot->soundlatch_irq_cb().set(FUNC(nslasher_state::tattass_sound_irq_w)); + m_ioprot->set_interface_scramble_interleave(); MCFG_VIDEO_START_OVERRIDE(nslasher_state,nslasher) @@ -2440,12 +2440,12 @@ MACHINE_CONFIG_START(nslasher_state::nslasher) MCFG_VIDEO_START_OVERRIDE(nslasher_state, nslasher) - MCFG_DECO104_ADD("ioprot") - MCFG_DECO146_IN_PORTA_CB(IOPORT("IN0")) - MCFG_DECO146_IN_PORTB_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(0) - MCFG_DECO146_IN_PORTC_CB(IOPORT("IN1")) - MCFG_DECO146_SOUNDLATCH_IRQ_CB(WRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<0>)) - MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE + DECO104PROT(config, m_ioprot, 0); + m_ioprot->port_a_cb().set_ioport("IN0"); + m_ioprot->port_b_cb().set("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)).lshift(0); + m_ioprot->port_c_cb().set_ioport("IN1"); + m_ioprot->soundlatch_irq_cb().set("sound_irq_merger", FUNC(input_merger_any_high_device::in_w<0>)); + m_ioprot->set_interface_scramble_interleave(); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -2469,19 +2469,16 @@ MACHINE_CONFIG_END // the US release uses a H6280 instead of a Z80, much like Lock 'n' Loaded MACHINE_CONFIG_START(nslasher_state::nslasheru) nslasher(config); + MCFG_DEVICE_REPLACE("audiocpu", H6280, 32220000/8) MCFG_DEVICE_PROGRAM_MAP(h6280_sound_map) + MCFG_DEVICE_REMOVE("sound_irq_merger") + MCFG_DEVICE_MODIFY("ymsnd") MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) - MCFG_DEVICE_REMOVE("ioprot") - MCFG_DECO104_ADD("ioprot") - MCFG_DECO146_IN_PORTA_CB(IOPORT("IN0")) - MCFG_DECO146_IN_PORTB_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(0) - MCFG_DECO146_IN_PORTC_CB(IOPORT("IN1")) - MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0)) - MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE + m_ioprot->soundlatch_irq_cb().set_inputline("audiocpu", 0); MACHINE_CONFIG_END diff --git a/src/mame/drivers/decwritr.cpp b/src/mame/drivers/decwritr.cpp index 8290ac08105..34753234ef9 100644 --- a/src/mame/drivers/decwritr.cpp +++ b/src/mame/drivers/decwritr.cpp @@ -429,15 +429,15 @@ MACHINE_CONFIG_START(decwriter_state::la120) //MCFG_DC305_OUT_TXC_CB(WRITELINE("usart", i8251_device, write_txc)) //MCFG_DC305_OUT_INT_CB(WRITELINE("mainint", input_merger_device, in_w<0>)) - MCFG_DEVICE_ADD("ledlatch", LS259, 0) // E2 on keyboard - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // ON LINE - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(OUTPUT("led2")) MCFG_DEVCB_INVERT // LOCAL - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(OUTPUT("led3")) MCFG_DEVCB_INVERT // ALT CHAR SET - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(OUTPUT("led4")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(OUTPUT("led5")) MCFG_DEVCB_INVERT // CTS - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(OUTPUT("led6")) MCFG_DEVCB_INVERT // DSR - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(OUTPUT("led7")) MCFG_DEVCB_INVERT // SETUP - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(OUTPUT("led8")) MCFG_DEVCB_INVERT // PAPER OUT + LS259(config, m_ledlatch); // E2 on keyboard + m_ledlatch->q_out_cb<0>().set_output("led1").invert(); // ON LINE + m_ledlatch->q_out_cb<1>().set_output("led2").invert(); // LOCAL + m_ledlatch->q_out_cb<2>().set_output("led3").invert(); // ALT CHAR SET + m_ledlatch->q_out_cb<3>().set_output("led4").invert(); + m_ledlatch->q_out_cb<4>().set_output("led5").invert(); // CTS + m_ledlatch->q_out_cb<5>().set_output("led6").invert(); // DSR + m_ledlatch->q_out_cb<6>().set_output("led7").invert(); // SETUP + m_ledlatch->q_out_cb<7>().set_output("led8").invert(); // PAPER OUT //MCFG_DEFAULT_LAYOUT( layout_la120 ) diff --git a/src/mame/drivers/destroyr.cpp b/src/mame/drivers/destroyr.cpp index 07fdbad8d54..da185a09194 100644 --- a/src/mame/drivers/destroyr.cpp +++ b/src/mame/drivers/destroyr.cpp @@ -472,9 +472,9 @@ MACHINE_CONFIG_START(destroyr_state::destroyr) MCFG_DEVICE_PROGRAM_MAP(destroyr_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(destroyr_state, irq0_line_assert, 4*60) - MCFG_DEVICE_ADD("outlatch", F9334, 0) // F8 - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT // LED 1 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // LED 2 (no second LED present on cab) + f9334_device &outlatch(F9334(config, "outlatch")); // F8 + outlatch.q_out_cb<0>().set_output("led0").invert(); // LED 1 + outlatch.q_out_cb<1>().set_output("led1").invert(); // LED 2 (no second LED present on cab) // Q2 => songate // Q3 => launch // Q4 => explosion diff --git a/src/mame/drivers/dietgo.cpp b/src/mame/drivers/dietgo.cpp index 667bc2a9a90..9ce2b3f3273 100644 --- a/src/mame/drivers/dietgo.cpp +++ b/src/mame/drivers/dietgo.cpp @@ -252,13 +252,13 @@ MACHINE_CONFIG_START(dietgo_state::dietgo) MCFG_DECO_SPRITE_GFX_REGION(2) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO104_ADD("ioprot104") - MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) - MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) - MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) - MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0)) - MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE - MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR + DECO104PROT(config, m_deco104, 0); + m_deco104->port_a_cb().set_ioport("INPUTS"); + m_deco104->port_b_cb().set_ioport("SYSTEM"); + m_deco104->port_c_cb().set_ioport("DSW"); + m_deco104->soundlatch_irq_cb().set_inputline(m_audiocpu, 0); + m_deco104->set_interface_scramble_interleave(); + m_deco104->set_use_magic_read_address_xor(true); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/divebomb.cpp b/src/mame/drivers/divebomb.cpp index 340571645eb..284199f4f5c 100644 --- a/src/mame/drivers/divebomb.cpp +++ b/src/mame/drivers/divebomb.cpp @@ -437,16 +437,16 @@ MACHINE_CONFIG_START(divebomb_state::divebomb) MCFG_VIDEO_START_OVERRIDE(divebomb_state, divebomb) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 256-1-32) - MCFG_SCREEN_UPDATE_DRIVER(divebomb_state, screen_update_divebomb) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("fgcpu", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("spritecpu", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("rozcpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); + screen.set_visarea(0, 256-1, 0, 256-1-32); + screen.set_screen_update(FUNC(divebomb_state::screen_update_divebomb)); + screen.set_palette("palette"); + screen.screen_vblank().set_inputline(m_fgcpu, INPUT_LINE_NMI); + screen.screen_vblank().append_inputline(m_spritecpu, INPUT_LINE_NMI); + screen.screen_vblank().append_inputline(m_rozcpu, INPUT_LINE_NMI); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_divebomb) MCFG_PALETTE_ADD("palette", 0x400+0x400+0x400+0x100) diff --git a/src/mame/drivers/dkong.cpp b/src/mame/drivers/dkong.cpp index c0252f2cbdf..c8e760fb189 100644 --- a/src/mame/drivers/dkong.cpp +++ b/src/mame/drivers/dkong.cpp @@ -1695,7 +1695,7 @@ WRITE_LINE_MEMBER(dkong_state::busreq_w ) MACHINE_CONFIG_START(dkong_state::dkong_base) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CLOCK_1H) + MCFG_DEVICE_ADD(m_maincpu, Z80, CLOCK_1H) MCFG_DEVICE_PROGRAM_MAP(dkong_map) MCFG_MACHINE_START_OVERRIDE(dkong_state,dkong2b) @@ -1710,7 +1710,7 @@ MACHINE_CONFIG_START(dkong_state::dkong_base) MCFG_I8257_REVERSE_RW_MODE(1) // why? /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_ADD(m_screen, RASTER) MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_UPDATE_DRIVER(dkong_state, screen_update_dkong) MCFG_SCREEN_PALETTE("palette") @@ -1791,7 +1791,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(dkong_state::dkong3) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(8'000'000) / 2) /* verified in schematics */ + MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(8'000'000) / 2) /* verified in schematics */ MCFG_DEVICE_PROGRAM_MAP(dkong3_map) MCFG_DEVICE_IO_MAP(dkong3_io_map) @@ -1803,13 +1803,13 @@ MACHINE_CONFIG_START(dkong_state::dkong3) MCFG_Z80DMA_OUT_MREQ_CB(WRITE8(*this, dkong_state, memory_write_byte)) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(dkong_state, screen_update_dkong) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dkong_state, vblank_irq)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("n2a03a", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("n2a03b", INPUT_LINE_NMI)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); + m_screen->set_screen_update(FUNC(dkong_state::screen_update_dkong)); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(FUNC(dkong_state::vblank_irq)); + m_screen->screen_vblank().append_inputline(m_dev_n2a03a, INPUT_LINE_NMI); + m_screen->screen_vblank().append_inputline(m_dev_n2a03b, INPUT_LINE_NMI); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_dkong) MCFG_PALETTE_ADD("palette", DK3_PALETTE_LENGTH) @@ -1839,8 +1839,7 @@ MACHINE_CONFIG_START(dkong_state::pestplce) /* video hardware */ MCFG_PALETTE_MODIFY("palette") MCFG_PALETTE_INIT_OWNER(dkong_state,dkong2b) /* wrong! */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(dkong_state, screen_update_pestplce) + m_screen->set_screen_update(FUNC(dkong_state::screen_update_pestplce)); MACHINE_CONFIG_END MACHINE_CONFIG_START(dkong_state::dkong3b) @@ -1861,15 +1860,14 @@ MACHINE_CONFIG_START(dkong_state::s2650) dkong2b(config); /* basic machine hardware */ - MCFG_DEVICE_REPLACE("maincpu", S2650, CLOCK_1H / 2) /* ??? */ + MCFG_DEVICE_REPLACE(m_maincpu, S2650, CLOCK_1H / 2) /* ??? */ MCFG_DEVICE_PROGRAM_MAP(s2650_map) MCFG_DEVICE_IO_MAP(s2650_io_map) MCFG_DEVICE_DATA_MAP(s2650_data_map) MCFG_S2650_SENSE_INPUT(READLINE("screen", screen_device, vblank)) MCFG_S2650_FLAG_OUTPUT(WRITELINE(*this, dkong_state, s2650_fo_w)) - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, dkong_state, s2650_interrupt)) + m_screen->screen_vblank().set(FUNC(dkong_state::s2650_interrupt)); MCFG_DEVICE_MODIFY("dma8257") MCFG_I8257_IN_MEMR_CB(READ8(*this, dkong_state, hb_dma_read_byte)) @@ -1878,11 +1876,11 @@ MACHINE_CONFIG_START(dkong_state::s2650) MCFG_MACHINE_START_OVERRIDE(dkong_state,s2650) MACHINE_CONFIG_END -MACHINE_CONFIG_START(dkong_state::herbiedk) +void dkong_state::herbiedk(machine_config &config) +{ s2650(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_S2650_SENSE_INPUT(READLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT // ??? -MACHINE_CONFIG_END + downcast(*m_maincpu).sense_handler().set(m_screen, FUNC(screen_device::vblank)).invert(); // ??? +} MACHINE_CONFIG_START(dkong_state::spclforc) herbiedk(config); @@ -1891,8 +1889,7 @@ MACHINE_CONFIG_START(dkong_state::spclforc) MCFG_DEVICE_REMOVE("soundcpu") /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(dkong_state, screen_update_spclforc) + m_screen->set_screen_update(FUNC(dkong_state::screen_update_spclforc)); MACHINE_CONFIG_END /************************************* diff --git a/src/mame/drivers/dmax8000.cpp b/src/mame/drivers/dmax8000.cpp index ae667a9ae28..8e2bb019f5d 100644 --- a/src/mame/drivers/dmax8000.cpp +++ b/src/mame/drivers/dmax8000.cpp @@ -159,18 +159,18 @@ MACHINE_CONFIG_START(dmax8000_state::dmax8000) MCFG_DEVICE_IO_MAP(dmax8000_io) MCFG_MACHINE_RESET_OVERRIDE(dmax8000_state, dmax8000) - MCFG_DEVICE_ADD("ctc_clock", CLOCK, 4'000'000 / 2) // 2MHz - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg2)) + clock_device &ctc_clock(CLOCK(config, "ctc_clock", 4_MHz_XTAL / 2)); // 2MHz + ctc_clock.signal_handler().set("ctc", FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append("ctc", FUNC(z80ctc_device::trg1)); + ctc_clock.signal_handler().append("ctc", FUNC(z80ctc_device::trg2)); - MCFG_DEVICE_ADD("ctc", Z80CTC, 4'000'000) - MCFG_Z80CTC_ZC0_CB(WRITELINE("dart1", z80dart_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart1", z80dart_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart2", z80dart_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart2", z80dart_device, txca_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("dart2", z80dart_device, rxtxcb_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE("dart1", z80dart_device, rxtxcb_w)) + z80ctc_device &ctc(Z80CTC(config, "ctc", 4_MHz_XTAL)); + ctc.zc_callback<0>().set("dart1", FUNC(z80dart_device::rxca_w)); + ctc.zc_callback<0>().append("dart1", FUNC(z80dart_device::txca_w)); + ctc.zc_callback<0>().append("dart2", FUNC(z80dart_device::rxca_w)); + ctc.zc_callback<0>().append("dart2", FUNC(z80dart_device::txca_w)); + ctc.zc_callback<1>().set("dart2", FUNC(z80dart_device::rxtxcb_w)); + ctc.zc_callback<2>().set("dart1", FUNC(z80dart_device::rxtxcb_w)); MCFG_DEVICE_ADD("dart1", Z80DART, 4'000'000) // A = terminal; B = aux MCFG_Z80DART_OUT_TXDA_CB(WRITELINE("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/dms86.cpp b/src/mame/drivers/dms86.cpp index 40cff98c1d7..20127eb5637 100644 --- a/src/mame/drivers/dms86.cpp +++ b/src/mame/drivers/dms86.cpp @@ -135,38 +135,39 @@ void dms86_state::kbd_put(u8 data) MACHINE_CONFIG_START(dms86_state::dms86) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8086, XTAL(14'745'600) / 3) // according to the manual... hmm - MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_IO_MAP(io_map) + I8086(config, m_maincpu, XTAL(14'745'600) / 3); // according to the manual... hmm + m_maincpu->set_addrmap(AS_PROGRAM, &dms86_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &dms86_state::io_map); // According to the manual the clock is 14,765,600 / 4 but that couldn't possibly work. // By maths, clock should be 9600*32*4*16 = 19,660,800 but not working either // So, commented out because it makes the whole thing crawl, only get 18% on my machine - //MCFG_DEVICE_ADD("ctc_clock", CLOCK, 19660800) //XTAL(14'745'600) / 4) - //MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc" ,z80ctc_device, trg0)) - //MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc" ,z80ctc_device, trg1)) - //MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc" ,z80ctc_device, trg2)) + //clock_device &ctc_clock(CLOCK(config, "ctc_clock", 19660800)); //XTAL(14'745'600) / 4 + //ctc_clock.signal_handler().set(m_ctc, FUNC(z80ctc_device::trg0)); + //ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg1)); + //ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg2)); - MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL(14'745'600) / 3) - //MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // frame rate interrupt to maincpu - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio1", z80sio_device, rxtxcb_w)) // SIO1 Ch B - MCFG_Z80CTC_ZC1_CB(WRITELINE("sio1", z80sio_device, txca_w)) // SIO1 Ch A - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio1" ,z80sio_device, rxca_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE("sio2", z80sio_device, rxtxcb_w)) // SIO2 - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio2" ,z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio2" ,z80sio_device, rxca_w)) + Z80CTC(config, m_ctc, XTAL(14'745'600) / 3); + //m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); // frame rate interrupt to maincpu + m_ctc->zc_callback<0>().set(m_sio[0], FUNC(z80sio_device::rxtxcb_w)); // SIO1 Ch B + m_ctc->zc_callback<1>().set(m_sio[0], FUNC(z80sio_device::txca_w)); // SIO1 Ch A + m_ctc->zc_callback<1>().append(m_sio[0], FUNC(z80sio_device::rxca_w)); + m_ctc->zc_callback<2>().set(m_sio[1], FUNC(z80sio_device::rxtxcb_w)); // SIO2 + m_ctc->zc_callback<2>().append(m_sio[1], FUNC(z80sio_device::rxca_w)); + m_ctc->zc_callback<2>().append(m_sio[1], FUNC(z80sio_device::rxca_w)); - MCFG_DEVICE_ADD("sio1", Z80SIO, XTAL(14'745'600) / 3) - MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE("rs232", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("rs232", rs232_port_device, write_rts)) + Z80SIO(config, m_sio[0], XTAL(14'745'600) / 3); + m_sio[0]->out_txdb_callback().set("rs232", FUNC(rs232_port_device::write_txd)); + m_sio[0]->out_dtrb_callback().set("rs232", FUNC(rs232_port_device::write_dtr)); + m_sio[0]->out_rtsb_callback().set("rs232", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("sio1", z80sio_device, rxb_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("sio1", z80sio_device, dcdb_w)) // HiNet / Monitor switch - MCFG_RS232_CTS_HANDLER(WRITELINE("sio1", z80sio_device, ctsb_w)) MCFG_DEVCB_INVERT + Z80SIO(config, m_sio[1], XTAL(14'745'600) / 3); + + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); + rs232.rxd_handler().set(m_sio[0], FUNC(z80sio_device::rxb_w)); + rs232.dcd_handler().set(m_sio[0], FUNC(z80sio_device::dcdb_w)); // HiNet / Monitor switch + rs232.cts_handler().set(m_sio[0], FUNC(z80sio_device::ctsb_w)).invert(); - MCFG_DEVICE_ADD("sio2", Z80SIO, XTAL(14'745'600) / 3) MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0) MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(dms86_state, kbd_put)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/dmv.cpp b/src/mame/drivers/dmv.cpp index 01466c1edf4..28317f8ab69 100644 --- a/src/mame/drivers/dmv.cpp +++ b/src/mame/drivers/dmv.cpp @@ -806,20 +806,20 @@ MACHINE_CONFIG_START(dmv_state::dmv) MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(dmv_state, hgdc_display_pixels) MCFG_UPD7220_DRAW_TEXT_CALLBACK_OWNER(dmv_state, hgdc_draw_text) - MCFG_DEVICE_ADD( "dma8237", AM9517A, XTAL(4'000'000) ) - MCFG_I8237_OUT_HREQ_CB(WRITELINE(*this, dmv_state, dma_hrq_changed)) - MCFG_I8237_OUT_EOP_CB(WRITELINE(*this, dmv_state, dmac_eop)) - MCFG_I8237_IN_MEMR_CB(READ8(*this, dmv_state, program_r)) - MCFG_I8237_OUT_MEMW_CB(WRITE8(*this, dmv_state, program_w)) - MCFG_I8237_IN_IOR_0_CB(LOGGER("Read DMA CH1")) - MCFG_I8237_OUT_IOW_0_CB(LOGGER("Write DMA CH1")) - MCFG_I8237_IN_IOR_1_CB(LOGGER("Read DMA CH2")) - MCFG_I8237_OUT_IOW_1_CB(LOGGER("Write DMA CH2")) - MCFG_I8237_IN_IOR_2_CB(READ8("upd7220", upd7220_device, dack_r)) - MCFG_I8237_OUT_IOW_2_CB(WRITE8("upd7220", upd7220_device, dack_w)) - MCFG_I8237_IN_IOR_3_CB(READ8("i8272", i8272a_device, mdma_r)) - MCFG_I8237_OUT_IOW_3_CB(WRITE8("i8272", i8272a_device, mdma_w)) - MCFG_I8237_OUT_DACK_3_CB(WRITELINE(*this, dmv_state, dmac_dack3)) + AM9517A(config, m_dmac, 4_MHz_XTAL); + m_dmac->out_hreq_callback().set(FUNC(dmv_state::dma_hrq_changed)); + m_dmac->out_eop_callback().set(FUNC(dmv_state::dmac_eop)); + m_dmac->in_memr_callback().set(FUNC(dmv_state::program_r)); + m_dmac->out_memw_callback().set(FUNC(dmv_state::program_w)); + m_dmac->in_ior_callback<0>().set_log("Read DMA CH1"); + m_dmac->out_iow_callback<0>().set_log("Write DMA CH1"); + m_dmac->in_ior_callback<1>().set_log("Read DMA CH2"); + m_dmac->out_iow_callback<1>().set_log("Write DMA CH2"); + m_dmac->in_ior_callback<2>().set(m_hgdc, FUNC(upd7220_device::dack_r)); + m_dmac->out_iow_callback<2>().set(m_hgdc, FUNC(upd7220_device::dack_w)); + m_dmac->in_ior_callback<3>().set(m_fdc, FUNC(i8272a_device::mdma_r)); + m_dmac->out_iow_callback<3>().set(m_fdc, FUNC(i8272a_device::mdma_w)); + m_dmac->out_dack_callback<3>().set(FUNC(dmv_state::dmac_dack3)); MCFG_I8272A_ADD( "i8272", true ) MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(*this, dmv_state, fdc_irq)) diff --git a/src/mame/drivers/docastle.cpp b/src/mame/drivers/docastle.cpp index 37cc08a423b..25075d579bd 100644 --- a/src/mame/drivers/docastle.cpp +++ b/src/mame/drivers/docastle.cpp @@ -609,19 +609,19 @@ MACHINE_CONFIG_START(docastle_state::docastle) MCFG_DEVICE_ADD("cpu3", Z80, XTAL(4'000'000)) MCFG_DEVICE_PROGRAM_MAP(docastle_map3) - MCFG_DEVICE_ADD("inp1", TMS1025, 0) - MCFG_TMS1025_READ_PORT_CB(PORT1, IOPORT("DSW2")) - MCFG_TMS1025_READ_PORT_CB(PORT2, IOPORT("DSW1")) - MCFG_TMS1025_READ_PORT_CB(PORT3, IOPORT("JOYS")) - MCFG_TMS1025_READ_PORT_CB(PORT5, IOPORT("BUTTONS")) - MCFG_TMS1025_READ_PORT_CB(PORT7, IOPORT("SYSTEM")) + TMS1025(config, m_inp[0]); + m_inp[0]->read_port1_callback().set_ioport("DSW2"); + m_inp[0]->read_port2_callback().set_ioport("DSW1"); + m_inp[0]->read_port3_callback().set_ioport("JOYS"); + m_inp[0]->read_port5_callback().set_ioport("BUTTONS"); + m_inp[0]->read_port7_callback().set_ioport("SYSTEM"); - MCFG_DEVICE_ADD("inp2", TMS1025, 0) - MCFG_TMS1025_READ_PORT_CB(PORT1, IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) - MCFG_TMS1025_READ_PORT_CB(PORT2, IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4) - MCFG_TMS1025_READ_PORT_CB(PORT3, IOPORT("JOYS")) MCFG_DEVCB_RSHIFT(4) - MCFG_TMS1025_READ_PORT_CB(PORT5, IOPORT("BUTTONS")) MCFG_DEVCB_RSHIFT(4) - MCFG_TMS1025_READ_PORT_CB(PORT7, IOPORT("SYSTEM")) MCFG_DEVCB_RSHIFT(4) + TMS1025(config, m_inp[1]); + m_inp[1]->read_port1_callback().set_ioport("DSW2").rshift(4); + m_inp[1]->read_port2_callback().set_ioport("DSW1").rshift(4); + m_inp[1]->read_port3_callback().set_ioport("JOYS").rshift(4); + m_inp[1]->read_port5_callback().set_ioport("BUTTONS").rshift(4); + m_inp[1]->read_port7_callback().set_ioport("SYSTEM").rshift(4); MCFG_WATCHDOG_ADD("watchdog") @@ -686,11 +686,9 @@ MACHINE_CONFIG_START(docastle_state::idsoccer) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(idsoccer_map) - MCFG_DEVICE_MODIFY("inp1") - MCFG_TMS1025_READ_PORT_CB(PORT4, IOPORT("JOYS_RIGHT")) + m_inp[0]->read_port4_callback().set_ioport("JOYS_RIGHT"); - MCFG_DEVICE_MODIFY("inp2") - MCFG_TMS1025_READ_PORT_CB(PORT4, IOPORT("JOYS_RIGHT")) MCFG_DEVCB_RSHIFT(4) + m_inp[1]->read_port4_callback().set_ioport("JOYS_RIGHT").rshift(4); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(docastle_state,dorunrun) diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp index aa3e95dc5be..3f49a441e61 100644 --- a/src/mame/drivers/dragon.cpp +++ b/src/mame/drivers/dragon.cpp @@ -252,10 +252,10 @@ MACHINE_CONFIG_START(dragon_state::dragon32) MCFG_RAM_EXTRA_OPTIONS("64K") // cartridge - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, dragon_cart, "dragon_fdc") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) + cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), dragon_cart, "dragon_fdc")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); MACHINE_CONFIG_END MACHINE_CONFIG_START(dragon64_state::dragon64) @@ -265,10 +265,10 @@ MACHINE_CONFIG_START(dragon64_state::dragon64) MCFG_RAM_DEFAULT_SIZE("64K") // cartridge - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, dragon_cart, "dragon_fdc") - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) + cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), dragon_cart, "dragon_fdc")); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); // acia MCFG_DEVICE_ADD("acia", MOS6551, 0) @@ -320,10 +320,10 @@ MACHINE_CONFIG_START(dragon_alpha_state::dgnalpha) MCFG_RAM_DEFAULT_SIZE("64K") // cartridge - MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, dragon_cart, nullptr) - MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(*this, coco_state, cart_w)) - MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI)) - MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT)) + cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), dragon_cart, nullptr)); + cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded + cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + cartslot.halt_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); // acia MCFG_DEVICE_ADD("acia", MOS6551, 0) diff --git a/src/mame/drivers/dragrace.cpp b/src/mame/drivers/dragrace.cpp index 2c4c246707e..add002df6fc 100644 --- a/src/mame/drivers/dragrace.cpp +++ b/src/mame/drivers/dragrace.cpp @@ -303,28 +303,28 @@ MACHINE_CONFIG_START(dragrace_state::dragrace) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) - MCFG_DEVICE_ADD("latch_f5", F9334, 0) // F5 - MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(*this, dragrace_state, speed1_w)) MCFG_DEVCB_MASK(0x1f) // set 3SPEED1-7SPEED1 - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // Explosion1 enable - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // Screech1 enable + f9334_device &latch_f5(F9334(config, "latch_f5")); // F5 + latch_f5.parallel_out_cb().set(FUNC(dragrace_state::speed1_w)).mask(0x1f); // set 3SPEED1-7SPEED1 + latch_f5.q_out_cb<5>().set(m_discrete, FUNC(discrete_device::write_line)); // Explosion1 enable + latch_f5.q_out_cb<6>().set(m_discrete, FUNC(discrete_device::write_line)); // Screech1 enable - MCFG_DEVICE_ADD("latch_a5", F9334, 0) // A5 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // KLEXPL1 enable - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // Motor1 enable - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // Attract enable - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // LoTone enable - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(OUTPUT("led0")) // Player 1 Start Lamp + f9334_device &latch_a5(F9334(config, "latch_a5")); // A5 + latch_a5.q_out_cb<1>().set(m_discrete, FUNC(discrete_device::write_line)); // KLEXPL1 enable + latch_a5.q_out_cb<3>().set(m_discrete, FUNC(discrete_device::write_line)); // Motor1 enable + latch_a5.q_out_cb<4>().set(m_discrete, FUNC(discrete_device::write_line)); // Attract enable + latch_a5.q_out_cb<5>().set(m_discrete, FUNC(discrete_device::write_line)); // LoTone enable + latch_a5.q_out_cb<7>().set_output("led0"); // Player 1 Start Lamp - MCFG_DEVICE_ADD("latch_h5", F9334, 0) // H5 - MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(*this, dragrace_state, speed2_w)) MCFG_DEVCB_MASK(0x1f) // set 3SPEED2-7SPEED2 - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // Explosion2 enable - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // Screech2 enable + f9334_device &latch_h5(F9334(config, "latch_h5")); // H5 + latch_h5.parallel_out_cb().set(FUNC(dragrace_state::speed2_w)).mask(0x1f); // set 3SPEED2-7SPEED2 + latch_h5.q_out_cb<5>().set(m_discrete, FUNC(discrete_device::write_line)); // Explosion2 enable + latch_h5.q_out_cb<6>().set(m_discrete, FUNC(discrete_device::write_line)); // Screech2 enable - MCFG_DEVICE_ADD("latch_e5", F9334, 0) // E5 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // KLEXPL2 enable - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // Motor2 enable - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // HiTone enable - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(OUTPUT("led1")) // Player 2 Start Lamp + f9334_device &latch_e5(F9334(config, "latch_e5")); // E5 + latch_e5.q_out_cb<1>().set(m_discrete, FUNC(discrete_device::write_line)); // KLEXPL2 enable + latch_e5.q_out_cb<3>().set(m_discrete, FUNC(discrete_device::write_line)); // Motor2 enable + latch_e5.q_out_cb<5>().set(m_discrete, FUNC(discrete_device::write_line)); // HiTone enable + latch_e5.q_out_cb<7>().set_output("led1"); // Player 2 Start Lamp MACHINE_CONFIG_END diff --git a/src/mame/drivers/dreambal.cpp b/src/mame/drivers/dreambal.cpp index 1d5898dd323..58ad56e82c8 100644 --- a/src/mame/drivers/dreambal.cpp +++ b/src/mame/drivers/dreambal.cpp @@ -35,8 +35,8 @@ lamps? class dreambal_state : public driver_device { public: - dreambal_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + dreambal_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_deco104(*this, "ioprot104"), m_deco_tilegen1(*this, "tilegen1"), @@ -333,10 +333,10 @@ MACHINE_CONFIG_START(dreambal_state::dreambal) MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) // 93lc46b - MCFG_DECO104_ADD("ioprot104") - MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) - MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) - MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) + DECO104PROT(config, m_deco104, 0); + m_deco104->port_a_cb().set_ioport("INPUTS"); + m_deco104->port_b_cb().set_ioport("SYSTEM"); + m_deco104->port_c_cb().set_ioport("DSW"); MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0) MCFG_DECO16IC_SPLIT(0) diff --git a/src/mame/drivers/dsb46.cpp b/src/mame/drivers/dsb46.cpp index 9c1bdfb8b05..b837f49e93e 100644 --- a/src/mame/drivers/dsb46.cpp +++ b/src/mame/drivers/dsb46.cpp @@ -118,9 +118,9 @@ MACHINE_CONFIG_START(dsb46_state::dsb46) MCFG_MACHINE_RESET_OVERRIDE(dsb46_state, dsb46) /* video hardware */ - MCFG_DEVICE_ADD("ctc_clock", CLOCK, XTAL(1'843'200)) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc1", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc1", z80ctc_device, trg2)) + clock_device &ctc_clock(CLOCK(config, "ctc_clock", 1.8432_MHz_XTAL)); + ctc_clock.signal_handler().set("ctc1", FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append("ctc1", FUNC(z80ctc_device::trg2)); /* Devices */ MCFG_DEVICE_ADD("sio", Z80SIO, XTAL(24'000'000) / 6) @@ -133,12 +133,12 @@ MACHINE_CONFIG_START(dsb46_state::dsb46) MCFG_RS232_RXD_HANDLER(WRITELINE("sio", z80sio_device, rxa_w)) MCFG_RS232_CTS_HANDLER(WRITELINE("sio", z80sio_device, ctsa_w)) - MCFG_DEVICE_ADD("ctc1", Z80CTC, XTAL(24'000'000) / 6) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, txca_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE("sio", z80sio_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, txcb_w)) + z80ctc_device &ctc1(Z80CTC(config, "ctc1", 24_MHz_XTAL / 6)); + ctc1.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + ctc1.zc_callback<0>().set("sio", FUNC(z80sio_device::rxca_w)); + ctc1.zc_callback<0>().append("sio", FUNC(z80sio_device::txca_w)); + ctc1.zc_callback<2>().set("sio", FUNC(z80sio_device::rxcb_w)); + ctc1.zc_callback<2>().append("sio", FUNC(z80sio_device::txcb_w)); MACHINE_CONFIG_END ROM_START( dsb46 ) diff --git a/src/mame/drivers/duet16.cpp b/src/mame/drivers/duet16.cpp index ea63a71948c..24936f8b167 100644 --- a/src/mame/drivers/duet16.cpp +++ b/src/mame/drivers/duet16.cpp @@ -371,22 +371,22 @@ MACHINE_CONFIG_START(duet16_state::duet16) MCFG_AM9517A_OUT_IOW_0_CB(WRITE8("fdc", upd765a_device, mdma_w)) MCFG_AM9517A_OUT_EOP_CB(WRITELINE("fdc", upd765a_device, tc_line_w)) - MCFG_DEVICE_ADD("bgpit", PIT8253, 0) - MCFG_PIT8253_CLK0(8_MHz_XTAL / 13) - MCFG_PIT8253_CLK1(8_MHz_XTAL / 13) - MCFG_PIT8253_CLK2(8_MHz_XTAL / 13) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("sio", upd7201_new_device, txca_w)) // TODO: selected through LS153 - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", upd7201_new_device, rxca_w)) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("sio", upd7201_new_device, txcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", upd7201_new_device, rxcb_w)) - MCFG_PIT8253_OUT2_HANDLER(WRITELINE("kbusart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("kbusart", i8251_device, write_rxc)) + pit8253_device &bgpit(PIT8253(config, "bgpit", 0)); + bgpit.set_clk<0>(8_MHz_XTAL / 13); + bgpit.set_clk<1>(8_MHz_XTAL / 13); + bgpit.set_clk<2>(8_MHz_XTAL / 13); + bgpit.out_handler<0>().set("sio", FUNC(upd7201_new_device::txca_w)); // TODO: selected through LS153 + bgpit.out_handler<0>().append("sio", FUNC(upd7201_new_device::rxca_w)); + bgpit.out_handler<1>().set("sio", FUNC(upd7201_new_device::txcb_w)); + bgpit.out_handler<1>().append("sio", FUNC(upd7201_new_device::rxcb_w)); + bgpit.out_handler<2>().set("kbusart", FUNC(i8251_device::write_txc)); + bgpit.out_handler<2>().append("kbusart", FUNC(i8251_device::write_rxc)); - MCFG_DEVICE_ADD("itm", PTM6840, 0) - MCFG_PTM6840_EXTERNAL_CLOCKS(0.0, 0.0, (8_MHz_XTAL / 8).dvalue()) // C3 = 1MHz - MCFG_PTM6840_O3_CB(WRITELINE("itm", ptm6840_device, set_c1)) // C1 = C2 = O3 - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("itm", ptm6840_device, set_c2)) - MCFG_PTM6840_IRQ_CB(WRITELINE("tmint", input_merger_device, in_w<0>)) + ptm6840_device &itm(PTM6840(config, "itm", 0)); + itm.set_external_clocks(0.0, 0.0, (8_MHz_XTAL / 8).dvalue()); // C3 = 1MHz + itm.o3_callback().set("itm", FUNC(ptm6840_device::set_c1)); // C1 = C2 = O3 + itm.o3_callback().append("itm", FUNC(ptm6840_device::set_c2)); + itm.irq_callback().set(m_tmint, FUNC(input_merger_device::in_w<0>)); MCFG_DEVICE_ADD("sio", UPD7201_NEW, 8_MHz_XTAL / 2) MCFG_Z80SIO_OUT_INT_CB(WRITELINE("pic", pic8259_device, ir1_w)) // INT5 diff --git a/src/mame/drivers/dynamoah.cpp b/src/mame/drivers/dynamoah.cpp index 95fcd2a3cba..a3046fba105 100644 --- a/src/mame/drivers/dynamoah.cpp +++ b/src/mame/drivers/dynamoah.cpp @@ -73,21 +73,22 @@ void dynamoah_state::i8031_ext_mem(address_map &map) map(0x0000, 0xffff).rw(FUNC(dynamoah_state::ext_r), FUNC(dynamoah_state::ext_w)); } -MACHINE_CONFIG_START(dynamoah_state::dynamoah) - MCFG_DEVICE_ADD("maincpu", I80C31, 6'144'000) // SC80C31BCCN40 +void dynamoah_state::dynamoah(machine_config &config) +{ + i80c31_device &maincpu(I80C31(config, "maincpu", 6'144'000)); // SC80C31BCCN40 // clock needs verification, being the XTAL value from a different board - MCFG_DEVICE_PROGRAM_MAP(i8031_mem) - MCFG_DEVICE_IO_MAP(i8031_ext_mem) - MCFG_MCS51_PORT_P1_IN_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(7) - MCFG_DEVCB_CHAIN_INPUT(CONSTANT(0x7f)) - MCFG_MCS51_PORT_P1_OUT_CB(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(7) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITE8(*this, dynamoah_state, p1_w)) MCFG_DEVCB_MASK(0x1f) - MCFG_MCS51_PORT_P3_OUT_CB(WRITE8(*this, dynamoah_state, p3_w)) + maincpu.set_addrmap(AS_PROGRAM, &dynamoah_state::i8031_mem); + maincpu.set_addrmap(AS_IO, &dynamoah_state::i8031_ext_mem); + maincpu.port_in_cb<1>().set("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)).lshift(7); + maincpu.port_in_cb<1>().append_constant(0x7f).mask(0x7f); + maincpu.port_out_cb<1>().set("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(7); + maincpu.port_out_cb<1>().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(6); + maincpu.port_out_cb<1>().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5); + maincpu.port_out_cb<1>().append(FUNC(dynamoah_state::p1_w)).mask(0x1f); + maincpu.port_out_cb<3>().set(FUNC(dynamoah_state::p3_w)); - MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) -MACHINE_CONFIG_END + EEPROM_SERIAL_93C46_16BIT(config, "eeprom"); +} static INPUT_PORTS_START(dynamoah) INPUT_PORTS_END diff --git a/src/mame/drivers/dynax.cpp b/src/mame/drivers/dynax.cpp index 9fadb6e3b8d..4b202833365 100644 --- a/src/mame/drivers/dynax.cpp +++ b/src/mame/drivers/dynax.cpp @@ -4262,15 +4262,15 @@ MACHINE_CONFIG_START(dynax_state::hanamai) MCFG_DEVICE_ADD("mainirq", RST_POS_BUFFER, 0) MCFG_RST_BUFFER_INT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT // MSM5205 reset - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, dynax_state, adpcm_reset_kludge_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, dynax_state, flipscreen_w)) // Flip Screen - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, dynax_state, coincounter_0_w)) // Coin Counters - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, dynax_state, coincounter_1_w)) // - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, dynax_state, blitter_ack_w)) // Blitter IRQ Ack - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, dynax_state, blit_palbank_w)) // Layers Palettes (High Bit) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, dynax_state, layer_half_w)) // half of the interleaved layer to write to + LS259(config, m_mainlatch); + m_mainlatch->q_out_cb<0>().set(m_msm, FUNC(msm5205_device::reset_w)).invert(); // MSM5205 reset + m_mainlatch->q_out_cb<0>().append(FUNC(dynax_state::adpcm_reset_kludge_w)); + m_mainlatch->q_out_cb<1>().set(FUNC(dynax_state::flipscreen_w)); // Flip Screen + m_mainlatch->q_out_cb<2>().set(FUNC(dynax_state::coincounter_0_w)); // Coin Counters + m_mainlatch->q_out_cb<3>().set(FUNC(dynax_state::coincounter_1_w)); // + m_mainlatch->q_out_cb<4>().set(FUNC(dynax_state::blitter_ack_w)); // Blitter IRQ Ack + m_mainlatch->q_out_cb<6>().set(FUNC(dynax_state::blit_palbank_w)); // Layers Palettes (High Bit) + m_mainlatch->q_out_cb<7>().set(FUNC(dynax_state::layer_half_w)); // half of the interleaved layer to write to /* video hardware */ MCFG_SCREEN_ADD(m_screen, RASTER) @@ -4815,12 +4815,10 @@ MACHINE_CONFIG_START(dynax_state::mjelctrn) MCFG_DEVICE_REMOVE("mainirq") - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) MCFG_DEVCB_INVERT + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)).invert(); - MCFG_DEVICE_MODIFY("blitter") - MCFG_DYNAX_BLITTER_REV2_READY_CB(WRITELINE("maincpu", tmpz84c015_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("maincpu", tmpz84c015_device, trg2)) + m_blitter->ready_cb().set(m_maincpu, FUNC(tmpz84c015_device::trg1)); + m_blitter->ready_cb().append(m_maincpu, FUNC(tmpz84c015_device::trg2)); MCFG_VIDEO_START_OVERRIDE(dynax_state,mjelctrn) MACHINE_CONFIG_END @@ -4901,13 +4899,13 @@ MACHINE_CONFIG_START(dynax_state::tenkai) MCFG_NVRAM_ADD_0FILL("nvram") - MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 10C on Ougon no Hai - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, dynax_state, flipscreen_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, dynax_state, layer_half_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, dynax_state, layer_half2_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, dynax_state, tenkai_6c_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, dynax_state, tenkai_70_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, dynax_state, tenkai_blitter_ack_w)) + LS259(config, m_mainlatch); // 10C on Ougon no Hai + m_mainlatch->q_out_cb<0>().set(FUNC(dynax_state::flipscreen_w)).invert(); + m_mainlatch->q_out_cb<1>().set(FUNC(dynax_state::layer_half_w)); + m_mainlatch->q_out_cb<2>().set(FUNC(dynax_state::layer_half2_w)); + m_mainlatch->q_out_cb<3>().set(FUNC(dynax_state::tenkai_6c_w)); + m_mainlatch->q_out_cb<4>().set(FUNC(dynax_state::tenkai_70_w)); + m_mainlatch->q_out_cb<7>().set(FUNC(dynax_state::tenkai_blitter_ack_w)); /* video hardware */ MCFG_SCREEN_ADD(m_screen, RASTER) diff --git a/src/mame/drivers/dynduke.cpp b/src/mame/drivers/dynduke.cpp index 343f1165d81..f6bb951a762 100644 --- a/src/mame/drivers/dynduke.cpp +++ b/src/mame/drivers/dynduke.cpp @@ -333,17 +333,17 @@ MACHINE_CONFIG_START(dynduke_state::dynduke) MCFG_QUANTUM_TIME(attotime::from_hz(3600)) // video hardware - MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(dynduke_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, dynduke_state, vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(dynduke_state::screen_update)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + screen.screen_vblank().append(FUNC(dynduke_state::vblank_irq)); + screen.set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_dynduke) diff --git a/src/mame/drivers/einstein.cpp b/src/mame/drivers/einstein.cpp index 8c002b3b8d9..e7d3b4072a2 100644 --- a/src/mame/drivers/einstein.cpp +++ b/src/mame/drivers/einstein.cpp @@ -602,10 +602,10 @@ MACHINE_CONFIG_START(einstein_state::einstein) MCFG_Z80CTC_ZC1_CB(WRITELINE(IC_I060, i8251_device, write_rxc)) MCFG_Z80CTC_ZC2_CB(WRITELINE(IC_I058, z80ctc_device, trg3)) - MCFG_CLOCK_ADD("ctc_trigger", XTAL_X002 / 4) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(IC_I058, z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(IC_I058, z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(IC_I058, z80ctc_device, trg2)) + clock_device &ctc_trigger(CLOCK(config, "ctc_trigger", XTAL_X002 / 4)); + ctc_trigger.signal_handler().set(IC_I058, FUNC(z80ctc_device::trg0)); + ctc_trigger.signal_handler().append(IC_I058, FUNC(z80ctc_device::trg1)); + ctc_trigger.signal_handler().append(IC_I058, FUNC(z80ctc_device::trg2)); /* Einstein daisy chain support for non-Z80 devices */ MCFG_Z80DAISY_GENERIC_ADD("keyboard_daisy", 0xf7) diff --git a/src/mame/drivers/eti660.cpp b/src/mame/drivers/eti660.cpp index e298606cb5a..dd82f324952 100644 --- a/src/mame/drivers/eti660.cpp +++ b/src/mame/drivers/eti660.cpp @@ -311,7 +311,7 @@ MACHINE_CONFIG_START(eti660_state::eti660) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(8'867'238)/5) MCFG_DEVICE_PROGRAM_MAP(mem_map) MCFG_DEVICE_IO_MAP(io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, eti660_state, clear_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, eti660_state, ef2_r)) MCFG_COSMAC_EF4_CALLBACK(READLINE(*this, eti660_state, ef4_r)) @@ -324,16 +324,16 @@ MACHINE_CONFIG_START(eti660_state::eti660) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(8'867'238)/5, GND, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, eti660_state, rdata_r), READLINE(*this, eti660_state, bdata_r), READLINE(*this, eti660_state, gdata_r)) + MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(8'867'238)/5, CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, eti660_state, rdata_r), READLINE(*this, eti660_state, bdata_r), READLINE(*this, eti660_state, gdata_r)) MCFG_CDP1864_CHROMINANCE(RES_K(2.2), RES_K(1), RES_K(4.7), RES_K(4.7)) // R7, R5, R6, R4 MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) /* devices */ - MCFG_DEVICE_ADD(MC6821_TAG, PIA6821, 0) - MCFG_PIA_READPA_HANDLER(READ8(*this, eti660_state, pia_pa_r)) - MCFG_PIA_WRITEPA_HANDLER(WRITE8(*this, eti660_state, pia_pa_w)) - MCFG_PIA_IRQA_HANDLER(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT)) MCFG_DEVCB_INVERT - MCFG_PIA_IRQB_HANDLER(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT)) MCFG_DEVCB_INVERT + PIA6821(config, m_pia, 0); + m_pia->readpa_handler().set(FUNC(eti660_state::pia_pa_r)); + m_pia->writepa_handler().set(FUNC(eti660_state::pia_pa_w)); + m_pia->irqa_handler().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT).invert(); // FIXME: use an input merger for these lines + m_pia->irqb_handler().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT).invert(); MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED) diff --git a/src/mame/drivers/exterm.cpp b/src/mame/drivers/exterm.cpp index 587a1504c37..8adb0b29721 100644 --- a/src/mame/drivers/exterm.cpp +++ b/src/mame/drivers/exterm.cpp @@ -391,17 +391,11 @@ MACHINE_CONFIG_START(exterm_state::exterm) MCFG_TMS340X0_TO_SHIFTREG_CB(exterm_state, to_shiftreg_slave) MCFG_TMS340X0_FROM_SHIFTREG_CB(exterm_state, from_shiftreg_slave) - MCFG_DEVICE_ADD(m_audiocpu, M6502, 2000000) - MCFG_DEVICE_PROGRAM_MAP(sound_master_map) + M6502(config, m_audiocpu, 2000000).set_addrmap(AS_PROGRAM, &exterm_state::sound_master_map); + M6502(config, m_audioslave, 2000000).set_addrmap(AS_PROGRAM, &exterm_state::sound_slave_map); - MCFG_DEVICE_ADD(m_audioslave, M6502, 2000000) - MCFG_DEVICE_PROGRAM_MAP(sound_slave_map) - - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch[0]) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, M6502_IRQ_LINE)) - - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch[1]) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audioslave, M6502_IRQ_LINE)) + GENERIC_LATCH_8(config, m_soundlatch[0]).data_pending_callback().set_inputline(m_audiocpu, M6502_IRQ_LINE); + GENERIC_LATCH_8(config, m_soundlatch[1]).data_pending_callback().set_inputline(m_audioslave, M6502_IRQ_LINE); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) diff --git a/src/mame/drivers/f1gp.cpp b/src/mame/drivers/f1gp.cpp index 9634e1f98f7..5ca58d73376 100644 --- a/src/mame/drivers/f1gp.cpp +++ b/src/mame/drivers/f1gp.cpp @@ -437,9 +437,9 @@ MACHINE_CONFIG_START(f1gp_state::f1gp) MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("sub", M68K_IRQ_3)) MCFG_ACIA6850_TXD_HANDLER(WRITELINE("acia", acia6850_device, write_rxd)) // loopback for now - MCFG_DEVICE_ADD("acia_clock", CLOCK, 1000000) // guessed - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) + clock_device &acia_clock(CLOCK(config, "acia_clock", 1000000)); // guessed + acia_clock.signal_handler().set(m_acia, FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia, FUNC(acia6850_device::write_rxc)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -511,9 +511,9 @@ MACHINE_CONFIG_START(f1gp_state::f1gpb) MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("sub", M68K_IRQ_3)) MCFG_ACIA6850_TXD_HANDLER(WRITELINE("acia", acia6850_device, write_rxd)) // loopback for now - MCFG_DEVICE_ADD("acia_clock", CLOCK, 1000000) // guessed - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) + clock_device &acia_clock(CLOCK(config, "acia_clock", 1000000)); // guessed + acia_clock.signal_handler().set(m_acia, FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia, FUNC(acia6850_device::write_rxc)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/fanucspmg.cpp b/src/mame/drivers/fanucspmg.cpp index 2d8e59ba8d7..77a503c283b 100644 --- a/src/mame/drivers/fanucspmg.cpp +++ b/src/mame/drivers/fanucspmg.cpp @@ -1008,12 +1008,12 @@ MACHINE_CONFIG_START(fanucspmg_state::fanucspmg) MCFG_DEVICE_ADD(PIC0_TAG, PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, fanucspmg_state, get_slave_ack)) MCFG_DEVICE_ADD(PIC1_TAG, PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE(PIC0_TAG, pic8259_device, ir7_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_UPD765A_ADD(FDC_TAG, true, true) MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(PIC0_TAG, pic8259_device, ir3_w)) diff --git a/src/mame/drivers/fc100.cpp b/src/mame/drivers/fc100.cpp index 9fe28d2645d..44690eb1a6c 100644 --- a/src/mame/drivers/fc100.cpp +++ b/src/mame/drivers/fc100.cpp @@ -547,11 +547,11 @@ MACHINE_CONFIG_START(fc100_state::fc100) MCFG_CASSETTE_FORMATS(fc100_cassette_formats) MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED) - MCFG_DEVICE_ADD("uart", I8251, 0) - MCFG_I8251_TXD_HANDLER(WRITELINE(*this, fc100_state, txdata_callback)) - MCFG_DEVICE_ADD("uart_clock", CLOCK, XTAL(4'915'200)/16/16) // gives 19200 - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + I8251(config, m_uart, 0); + m_uart->txd_handler().set(FUNC(fc100_state::txdata_callback)); + clock_device &uart_clock(CLOCK(config, "uart_clock", XTAL(4'915'200)/16/16)); // gives 19200 + uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc)); MCFG_TIMER_DRIVER_ADD_PERIODIC("timer_c", fc100_state, timer_c, attotime::from_hz(4800)) // cass write MCFG_TIMER_DRIVER_ADD_PERIODIC("timer_p", fc100_state, timer_p, attotime::from_hz(40000)) // cass read diff --git a/src/mame/drivers/firefox.cpp b/src/mame/drivers/firefox.cpp index ed6e52dedcd..e67036614bb 100644 --- a/src/mame/drivers/firefox.cpp +++ b/src/mame/drivers/firefox.cpp @@ -664,25 +664,25 @@ MACHINE_CONFIG_START(firefox_state::firefox) MCFG_ADC0808_IN0_CB(IOPORT("PITCH")) MCFG_ADC0808_IN1_CB(IOPORT("YAW")) - MCFG_DEVICE_ADD("latch0", LS259, 0) // 7F - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE("nvram_1c", x2212_device, recall)) // NVRECALL - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("nvram_1d", x2212_device, recall)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, firefox_state, sound_reset_w)) // RSTSOUND - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE("nvram_1c", x2212_device, store)) // NVRSTORE - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("nvram_1d", x2212_device, store)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, firefox_state, firefox_disc_lock_w)) // LOCK - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, firefox_state, audio_enable_right_w)) // SWDSKR - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, firefox_state, audio_enable_left_w)) // SWDSKL - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, firefox_state, firefox_disc_reset_w)) // RSTDSK - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, firefox_state, firefox_disc_write_w)) // WRDSK + ls259_device &latch0(LS259(config, "latch0")); // 7F + latch0.q_out_cb<0>().set(m_nvram_1c, FUNC(x2212_device::recall)); // NVRECALL + latch0.q_out_cb<0>().append(m_nvram_1d, FUNC(x2212_device::recall)); + latch0.q_out_cb<1>().set(FUNC(firefox_state::sound_reset_w)); // RSTSOUND + latch0.q_out_cb<2>().set(m_nvram_1c, FUNC(x2212_device::store)); // NVRSTORE + latch0.q_out_cb<2>().append(m_nvram_1d, FUNC(x2212_device::store)); + latch0.q_out_cb<3>().set(FUNC(firefox_state::firefox_disc_lock_w)); // LOCK + latch0.q_out_cb<4>().set(FUNC(firefox_state::audio_enable_right_w)); // SWDSKR + latch0.q_out_cb<5>().set(FUNC(firefox_state::audio_enable_left_w)); // SWDSKL + latch0.q_out_cb<6>().set(FUNC(firefox_state::firefox_disc_reset_w)); // RSTDSK + latch0.q_out_cb<7>().set(FUNC(firefox_state::firefox_disc_write_w)); // WRDSK - MCFG_DEVICE_ADD("latch1", LS259, 0) // 1F - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, firefox_state, coin_counter_right_w)) // COIN COUNTERR - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, firefox_state, coin_counter_left_w)) // COIN COUNTERL - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(OUTPUT("led2")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(OUTPUT("led3")) MCFG_DEVCB_INVERT + ls259_device &latch1(LS259(config, "latch1")); // 1F + latch1.q_out_cb<0>().set(FUNC(firefox_state::coin_counter_right_w)); // COIN COUNTERR + latch1.q_out_cb<1>().set(FUNC(firefox_state::coin_counter_left_w)); // COIN COUNTERL + latch1.q_out_cb<4>().set_output("led0").invert(); + latch1.q_out_cb<5>().set_output("led1").invert(); + latch1.q_out_cb<6>().set_output("led2").invert(); + latch1.q_out_cb<7>().set_output("led3").invert(); MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_TIME_INIT(attotime::from_hz(MASTER_XTAL/8/16/16/16/16)) diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp index 20de8512052..be2cc9706c4 100644 --- a/src/mame/drivers/fmtowns.cpp +++ b/src/mame/drivers/fmtowns.cpp @@ -2812,12 +2812,12 @@ MACHINE_CONFIG_START(towns_state::towns_base) MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, towns_state, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir7_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("fdc", MB8877, 8'000'000 / 4) // clock unknown MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, towns_state,mb8877a_irq_w)) diff --git a/src/mame/drivers/ft68m.cpp b/src/mame/drivers/ft68m.cpp index 35e414d4829..dfeb86ae78e 100644 --- a/src/mame/drivers/ft68m.cpp +++ b/src/mame/drivers/ft68m.cpp @@ -96,13 +96,13 @@ MACHINE_CONFIG_START(ft68m_state::ft68m) MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("rs232b", rs232_port_device, write_txd)) MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", M68K_IRQ_5)) - MCFG_DEVICE_ADD("stc", AM9513A, XTAL(19'660'800) / 8) - MCFG_AM9513_OUT2_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_6)) - MCFG_AM9513_OUT3_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_7)) - MCFG_AM9513_OUT4_CALLBACK(WRITELINE("mpsc", upd7201_new_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mpsc", upd7201_new_device, txca_w)) - MCFG_AM9513_OUT5_CALLBACK(WRITELINE("mpsc", upd7201_new_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mpsc", upd7201_new_device, txcb_w)) + am9513_device &stc(AM9513A(config, "stc", XTAL(19'660'800) / 8)); + stc.out2_cb().set_inputline(m_maincpu, M68K_IRQ_6); + stc.out3_cb().set_inputline(m_maincpu, M68K_IRQ_7); + stc.out4_cb().set("mpsc", FUNC(upd7201_new_device::rxca_w)); + stc.out4_cb().append("mpsc", FUNC(upd7201_new_device::txca_w)); + stc.out5_cb().set("mpsc", FUNC(upd7201_new_device::rxcb_w)); + stc.out5_cb().append("mpsc", FUNC(upd7201_new_device::txcb_w)); MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(WRITELINE("mpsc", upd7201_new_device, rxa_w)) diff --git a/src/mame/drivers/gaelco.cpp b/src/mame/drivers/gaelco.cpp index 705e8170f73..e84e7e250a5 100644 --- a/src/mame/drivers/gaelco.cpp +++ b/src/mame/drivers/gaelco.cpp @@ -637,11 +637,11 @@ MACHINE_CONFIG_START(gaelco_state::bigkarnk) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("outlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, gaelco_state, coin1_lockout_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, gaelco_state, coin2_lockout_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, gaelco_state, coin1_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, gaelco_state, coin2_counter_w)) + LS259(config, m_outlatch); + m_outlatch->q_out_cb<0>().set(FUNC(gaelco_state::coin1_lockout_w)).invert(); + m_outlatch->q_out_cb<1>().set(FUNC(gaelco_state::coin2_lockout_w)).invert(); + m_outlatch->q_out_cb<2>().set(FUNC(gaelco_state::coin1_counter_w)); + m_outlatch->q_out_cb<3>().set(FUNC(gaelco_state::coin2_counter_w)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -710,12 +710,12 @@ MACHINE_CONFIG_START(gaelco_state::squash) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("outlatch", LS259, 0) // B8 - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, gaelco_state, coin1_lockout_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, gaelco_state, coin2_lockout_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, gaelco_state, coin1_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, gaelco_state, coin2_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // used + LS259(config, m_outlatch); // B8 + m_outlatch->q_out_cb<0>().set(FUNC(gaelco_state::coin1_lockout_w)).invert(); + m_outlatch->q_out_cb<1>().set(FUNC(gaelco_state::coin2_lockout_w)).invert(); + m_outlatch->q_out_cb<2>().set(FUNC(gaelco_state::coin1_counter_w)); + m_outlatch->q_out_cb<3>().set(FUNC(gaelco_state::coin2_counter_w)); + m_outlatch->q_out_cb<4>().set_nop(); // used /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -749,12 +749,12 @@ MACHINE_CONFIG_START(gaelco_state::thoop) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("outlatch", LS259, 0) // B8 - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, gaelco_state, coin1_lockout_w)) // not inverted - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, gaelco_state, coin2_lockout_w)) // not inverted - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, gaelco_state, coin1_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, gaelco_state, coin2_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // used + LS259(config, m_outlatch); // B8 + m_outlatch->q_out_cb<0>().set(FUNC(gaelco_state::coin1_lockout_w)); // not inverted + m_outlatch->q_out_cb<1>().set(FUNC(gaelco_state::coin2_lockout_w)); // not inverted + m_outlatch->q_out_cb<2>().set(FUNC(gaelco_state::coin1_counter_w)); + m_outlatch->q_out_cb<3>().set(FUNC(gaelco_state::coin2_counter_w)); + m_outlatch->q_out_cb<4>().set_nop(); // used /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/gaelco3d.cpp b/src/mame/drivers/gaelco3d.cpp index acb102b858b..22d147800ef 100644 --- a/src/mame/drivers/gaelco3d.cpp +++ b/src/mame/drivers/gaelco3d.cpp @@ -967,8 +967,7 @@ MACHINE_CONFIG_START(gaelco3d_state::gaelco3d) MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, gaelco3d_state, analog_port_latch_w)) MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(m_serial, gaelco_serial_device, unknown_w)) - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_adsp, ADSP2115_IRQ2)) + GENERIC_LATCH_8(config, m_soundlatch).data_pending_callback().set_inputline(m_adsp, ADSP2115_IRQ2); /* video hardware */ MCFG_SCREEN_ADD(m_screen, RASTER) diff --git a/src/mame/drivers/gaiden.cpp b/src/mame/drivers/gaiden.cpp index 065dfc3cd93..abf369bb1ba 100644 --- a/src/mame/drivers/gaiden.cpp +++ b/src/mame/drivers/gaiden.cpp @@ -1053,15 +1053,15 @@ MACHINE_CONFIG_START(gaiden_state::mastninj) MCFG_DEVICE_ADD("adpcm_select2", LS157, 0) MCFG_74157_OUT_CB(WRITE8("msm2", msm5205_device, data_w)) - MCFG_DEVICE_ADD("msm1", MSM5205, 384000) - MCFG_MSM5205_VCK_CALLBACK(WRITELINE("msm2", msm5205_device, vclk_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, gaiden_state, vck_flipflop_w)) - MCFG_MSM5205_PRESCALER_SELECTOR(S96_4B) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) + MSM5205(config, m_msm[0], 384000); + m_msm[0]->vck_callback().set(m_msm[1], FUNC(msm5205_device::vclk_w)); + m_msm[0]->vck_callback().append(FUNC(gaiden_state::vck_flipflop_w)); + m_msm[0]->set_prescaler_selector(msm5205_device::S96_4B); + m_msm[0]->add_route(ALL_OUTPUTS, "mono", 0.20); - MCFG_DEVICE_ADD("msm2", MSM5205, 384000) - MCFG_MSM5205_PRESCALER_SELECTOR(SEX_4B) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) + MSM5205(config, m_msm[1], 384000); + m_msm[1]->set_prescaler_selector(msm5205_device::SEX_4B); + m_msm[1]->add_route(ALL_OUTPUTS, "mono", 0.20); MACHINE_CONFIG_END /*************************************************************************** diff --git a/src/mame/drivers/galaga.cpp b/src/mame/drivers/galaga.cpp index 5820019be79..20814ae6c7c 100644 --- a/src/mame/drivers/galaga.cpp +++ b/src/mame/drivers/galaga.cpp @@ -1597,12 +1597,12 @@ MACHINE_CONFIG_START(bosco_state::bosco) MCFG_DEVICE_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_DEVICE_PROGRAM_MAP(bosco_map) - MCFG_DEVICE_ADD("misclatch", LS259, 0) // 3C on CPU board - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, galaga_state, irq1_clear_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, galaga_state, irq2_clear_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, galaga_state, nmion_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &misclatch(LS259(config, "misclatch")); // 3C on CPU board + misclatch.q_out_cb<0>().set(FUNC(galaga_state::irq1_clear_w)); + misclatch.q_out_cb<1>().set(FUNC(galaga_state::irq2_clear_w)); + misclatch.q_out_cb<2>().set(FUNC(galaga_state::nmion_w)); + misclatch.q_out_cb<3>().set_inputline("sub", INPUT_LINE_RESET).invert(); + misclatch.q_out_cb<3>().append_inputline("sub2", INPUT_LINE_RESET).invert(); MCFG_NAMCO_50XX_ADD("50xx_1", MASTER_CLOCK/6/2) /* 1.536 MHz */ MCFG_NAMCO_50XX_ADD("50xx_2", MASTER_CLOCK/6/2) /* 1.536 MHz */ @@ -1643,11 +1643,11 @@ MACHINE_CONFIG_START(bosco_state::bosco) MCFG_NAMCO_06XX_WRITE_0_CB(WRITE8("50xx_2", namco_50xx_device, write)) MCFG_NAMCO_06XX_WRITE_1_CB(WRITE8("52xx", namco_52xx_device, write)) - MCFG_DEVICE_ADD("videolatch", LS259, 0) // 1B on video board - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, galaga_state, flip_screen_w)) MCFG_DEVCB_INVERT + LS259(config, m_videolatch); // 1B on video board + m_videolatch->q_out_cb<0>().set(FUNC(galaga_state::flip_screen_w)).invert(); // Q4-Q5 to 05XX for starfield blink - //MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITE("50xx_2", namco_50xx_device, reset_w)) - //MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITE("52xx", namco_52xx_device, reset_w)) + //m_videolatch->q_out_cb<7>().set("50xx_2", FUNC(namco_50xx_device::reset_w)); + //m_videolatch->q_out_cb<7>().append("52xx", FUNC(namco_52xx_device, reset_w)); MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) @@ -1655,12 +1655,12 @@ MACHINE_CONFIG_START(bosco_state::bosco) /* synchronization of the CPUs */ /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 384, 0, 288, 264, 16, 224+16) - MCFG_SCREEN_UPDATE_DRIVER(bosco_state, screen_update_bosco) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, bosco_state, screen_vblank_bosco)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, galaga_state, vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(MASTER_CLOCK/3, 384, 0, 288, 264, 16, 224+16); + m_screen->set_screen_update(FUNC(bosco_state::screen_update_bosco)); + m_screen->screen_vblank().set(FUNC(bosco_state::screen_vblank_bosco)); + m_screen->screen_vblank().append(FUNC(galaga_state::vblank_irq)); + m_screen->set_palette("palette"); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_bosco) MCFG_PALETTE_ADD("palette", 64*4+64*4+4+64) @@ -1692,12 +1692,12 @@ MACHINE_CONFIG_START(galaga_state::galaga) MCFG_DEVICE_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_DEVICE_PROGRAM_MAP(galaga_map) - MCFG_DEVICE_ADD("misclatch", LS259, 0) // 3C on CPU board - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, galaga_state, irq1_clear_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, galaga_state, irq2_clear_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, galaga_state, nmion_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &misclatch(LS259(config, "misclatch")); // 3C on CPU board + misclatch.q_out_cb<0>().set(FUNC(galaga_state::irq1_clear_w)); + misclatch.q_out_cb<1>().set(FUNC(galaga_state::irq2_clear_w)); + misclatch.q_out_cb<2>().set(FUNC(galaga_state::nmion_w)); + misclatch.q_out_cb<3>().set_inputline("sub", INPUT_LINE_RESET).invert(); + misclatch.q_out_cb<3>().append_inputline("sub2", INPUT_LINE_RESET).invert(); MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ MCFG_NAMCO_51XX_SCREEN("screen") @@ -1718,9 +1718,9 @@ MACHINE_CONFIG_START(galaga_state::galaga) MCFG_NAMCO_06XX_WRITE_0_CB(WRITE8("51xx", namco_51xx_device, write)) MCFG_NAMCO_06XX_WRITE_3_CB(WRITE8("54xx", namco_54xx_device, write)) - MCFG_DEVICE_ADD("videolatch", LS259, 0) // 5K on video board + LS259(config, m_videolatch); // 5K on video board // Q0-Q5 to 05XX for starfield control - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, galaga_state, flip_screen_w)) + m_videolatch->q_out_cb<7>().set(FUNC(galaga_state::flip_screen_w)); MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) @@ -1728,12 +1728,12 @@ MACHINE_CONFIG_START(galaga_state::galaga) /* synchronization of the CPUs */ /* video hardware */ - MCFG_SCREEN_ADD(m_screen, RASTER) - MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 384, 0, 288, 264, 0, 224) - MCFG_SCREEN_UPDATE_DRIVER(galaga_state, screen_update_galaga) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, galaga_state, screen_vblank_galaga)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, galaga_state, vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(MASTER_CLOCK/3, 384, 0, 288, 264, 0, 224); + m_screen->set_screen_update(FUNC(galaga_state::screen_update_galaga)); + m_screen->screen_vblank().set(FUNC(galaga_state::screen_vblank_galaga)); + m_screen->screen_vblank().append(FUNC(galaga_state::vblank_irq)); + m_screen->set_palette("palette"); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_galaga) MCFG_PALETTE_ADD("palette", 64*4+64*4+64) @@ -1795,12 +1795,12 @@ MACHINE_CONFIG_START(xevious_state::xevious) MCFG_DEVICE_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_DEVICE_PROGRAM_MAP(xevious_map) - MCFG_DEVICE_ADD("misclatch", LS259, 0) // 5K - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, galaga_state, irq1_clear_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, galaga_state, irq2_clear_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, galaga_state, nmion_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &misclatch(LS259(config, "misclatch")); // 5K + misclatch.q_out_cb<0>().set(FUNC(galaga_state::irq1_clear_w)); + misclatch.q_out_cb<1>().set(FUNC(galaga_state::irq2_clear_w)); + misclatch.q_out_cb<2>().set(FUNC(galaga_state::nmion_w)); + misclatch.q_out_cb<3>().set_inputline("sub", INPUT_LINE_RESET).invert(); + misclatch.q_out_cb<3>().append_inputline("sub2", INPUT_LINE_RESET).invert(); MCFG_NAMCO_50XX_ADD("50xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ @@ -1873,9 +1873,7 @@ MACHINE_CONFIG_START(battles_state::battles) MCFG_DEVICE_ADD("sub3", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_DEVICE_PROGRAM_MAP(battles_mem4) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, galaga_state, vblank_irq)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, battles_state, interrupt_4)) + m_screen->screen_vblank().append(FUNC(battles_state::interrupt_4)); MCFG_TIMER_DRIVER_ADD("nmi", battles_state, nmi_generate) @@ -1900,12 +1898,12 @@ MACHINE_CONFIG_START(digdug_state::digdug) MCFG_DEVICE_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_DEVICE_PROGRAM_MAP(digdug_map) - MCFG_DEVICE_ADD("misclatch", LS259, 0) // 8R - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, galaga_state, irq1_clear_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, galaga_state, irq2_clear_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, galaga_state, nmion_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &misclatch(LS259(config, "misclatch")); // 8R + misclatch.q_out_cb<0>().set(FUNC(galaga_state::irq1_clear_w)); + misclatch.q_out_cb<1>().set(FUNC(galaga_state::irq2_clear_w)); + misclatch.q_out_cb<2>().set(FUNC(galaga_state::nmion_w)); + misclatch.q_out_cb<3>().set_inputline("sub", INPUT_LINE_RESET).invert(); + misclatch.q_out_cb<3>().append_inputline("sub2", INPUT_LINE_RESET).invert(); // Q5-Q7 also used (see below) MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ @@ -1917,15 +1915,15 @@ MACHINE_CONFIG_START(digdug_state::digdug) MCFG_NAMCO_51XX_OUTPUT_0_CB(WRITE8(*this, galaga_state,out_0)) MCFG_NAMCO_51XX_OUTPUT_1_CB(WRITE8(*this, galaga_state,out_1)) - MCFG_NAMCO_53XX_ADD("53xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ - MCFG_NAMCO_53XX_K_CB(READLINE("misclatch", ls259_device, q7_r)) MCFG_DEVCB_BIT(3) // MOD 2 = K3 - MCFG_DEVCB_CHAIN_INPUT(READLINE("misclatch", ls259_device, q6_r)) MCFG_DEVCB_BIT(2) // MOD 1 = K2 - MCFG_DEVCB_CHAIN_INPUT(READLINE("misclatch", ls259_device, q5_r)) MCFG_DEVCB_BIT(1) // MOD 0 = K1 + namco_53xx_device &n53xx(NAMCO_53XX(config, "53xx", MASTER_CLOCK/6/2)); /* 1.536 MHz */ + n53xx.k_port_callback().set("misclatch", FUNC(ls259_device::q7_r)).lshift(3); // MOD 2 = K3 + n53xx.k_port_callback().append("misclatch", FUNC(ls259_device::q6_r)).lshift(2); // MOD 1 = K2 + n53xx.k_port_callback().append("misclatch", FUNC(ls259_device::q5_r)).lshift(1); // MOD 0 = K1 // K0 is left unconnected - MCFG_NAMCO_53XX_INPUT_0_CB(IOPORT("DSWA")) MCFG_DEVCB_MASK(0x0f) - MCFG_NAMCO_53XX_INPUT_1_CB(IOPORT("DSWA")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO_53XX_INPUT_2_CB(IOPORT("DSWB")) MCFG_DEVCB_MASK(0x0f) - MCFG_NAMCO_53XX_INPUT_3_CB(IOPORT("DSWB")) MCFG_DEVCB_RSHIFT(4) + n53xx.input_callback<0>().set_ioport("DSWA").mask(0x0f); + n53xx.input_callback<1>().set_ioport("DSWA").rshift(4); + n53xx.input_callback<2>().set_ioport("DSWB").mask(0x0f); + n53xx.input_callback<3>().set_ioport("DSWB").rshift(4); MCFG_NAMCO_06XX_ADD("06xx", MASTER_CLOCK/6/64) MCFG_NAMCO_06XX_MAINCPU("maincpu") @@ -1934,11 +1932,11 @@ MACHINE_CONFIG_START(digdug_state::digdug) MCFG_NAMCO_06XX_READ_1_CB(READ8("53xx", namco_53xx_device, read)) MCFG_NAMCO_06XX_READ_REQUEST_1_CB(WRITELINE("53xx", namco_53xx_device, read_request)) - MCFG_DEVICE_ADD("videolatch", LS259, 0) // 5R - MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(*this, digdug_state, bg_select_w)) MCFG_DEVCB_MASK(0x33) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, digdug_state, tx_color_mode_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, digdug_state, bg_disable_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, digdug_state, flip_screen_w)) + LS259(config, m_videolatch); // 5R + m_videolatch->parallel_out_cb().set(FUNC(digdug_state::bg_select_w)).mask(0x33); + m_videolatch->q_out_cb<2>().set(FUNC(digdug_state::tx_color_mode_w)); + m_videolatch->q_out_cb<3>().set(FUNC(digdug_state::bg_disable_w)); + m_videolatch->q_out_cb<7>().set(FUNC(digdug_state::flip_screen_w)); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ diff --git a/src/mame/drivers/galastrm.cpp b/src/mame/drivers/galastrm.cpp index 1f66067c340..ee01322e53f 100644 --- a/src/mame/drivers/galastrm.cpp +++ b/src/mame/drivers/galastrm.cpp @@ -213,14 +213,14 @@ MACHINE_CONFIG_START(galastrm_state::galastrm) MCFG_ADC0808_IN0_CB(IOPORT("STICKX")) MCFG_ADC0808_IN1_CB(IOPORT("STICKY")) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("IN1")) - MCFG_TC0510NIO_WRITE_3_CB(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, galastrm_state, coin_word_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2")) + tc0510nio_device &tc0510nio(TC0510NIO(config, "tc0510nio", 0)); + tc0510nio.read_2_callback().set_ioport("IN0"); + tc0510nio.read_3_callback().set_ioport("IN1"); + tc0510nio.write_3_callback().set("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5); + tc0510nio.write_3_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(6); + tc0510nio.write_3_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4); + tc0510nio.write_4_callback().set(FUNC(galastrm_state::coin_word_w)); + tc0510nio.read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp index ad0d27851fd..79fed8a495a 100644 --- a/src/mame/drivers/galaxold.cpp +++ b/src/mame/drivers/galaxold.cpp @@ -745,7 +745,7 @@ void galaxold_state::drivfrcg_io(address_map &map) } -void galaxold_state::racknrol(address_map &map) +void galaxold_state::racknrol_map(address_map &map) { map(0x0000, 0x0fff).rom(); map(0x1400, 0x143f).mirror(0x6000).ram().w(FUNC(galaxold_state::galaxold_attributesram_w)).share("attributesram"); @@ -2575,11 +2575,12 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(galaxold_state::racknrol) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", S2650, PIXEL_CLOCK/2) - MCFG_DEVICE_PROGRAM_MAP(racknrol) - MCFG_DEVICE_IO_MAP(racknrol_io) + s2650_device &maincpu(S2650(config, m_maincpu, PIXEL_CLOCK/2)); + maincpu.set_addrmap(AS_PROGRAM, &galaxold_state::racknrol_map); + maincpu.set_addrmap(AS_IO, &galaxold_state::racknrol_io); + maincpu.sense_handler().set(m_screen, FUNC(screen_device::vblank)).invert(); // ??? + device = &maincpu; // FIXME: kill the following line - convert to a screen vblank callback MCFG_DEVICE_VBLANK_INT_DRIVER("screen", galaxold_state, hunchbks_vh_interrupt) - MCFG_S2650_SENSE_INPUT(READLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT // ??? /* video hardware */ MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_galaxian) @@ -2603,11 +2604,12 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(galaxold_state::hexpoola) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", S2650, PIXEL_CLOCK/2) - MCFG_DEVICE_PROGRAM_MAP(racknrol) - MCFG_DEVICE_IO_MAP(hexpoola_io) - MCFG_DEVICE_DATA_MAP(hexpoola_data) - MCFG_S2650_SENSE_INPUT(READLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT // ??? + s2650_device &maincpu(S2650(config, m_maincpu, PIXEL_CLOCK/2)); + maincpu.set_addrmap(AS_PROGRAM, &galaxold_state::racknrol_map); + maincpu.set_addrmap(AS_IO, &galaxold_state::hexpoola_io); + maincpu.set_addrmap(AS_DATA, &galaxold_state::hexpoola_data); + maincpu.sense_handler().set(m_screen, FUNC(screen_device::vblank)).invert(); // ??? + device = &maincpu; // FIXME: kill the following line - convert to a screen vblank callback MCFG_DEVICE_VBLANK_INT_DRIVER("screen", galaxold_state, hunchbks_vh_interrupt) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_galaxian) diff --git a/src/mame/drivers/gaplus.cpp b/src/mame/drivers/gaplus.cpp index b003000e91d..af559f86c70 100644 --- a/src/mame/drivers/gaplus.cpp +++ b/src/mame/drivers/gaplus.cpp @@ -538,15 +538,15 @@ MACHINE_CONFIG_START(gaplus_base_state::gaplus_base) //MCFG_NAMCO_62XX_OUTPUT_1_CB(WRITE8(*this, gaplus_base_state,out_1)) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60.606060) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(36 * 8, 28 * 8) - MCFG_SCREEN_VISIBLE_AREA(0 * 8, 36 * 8 - 1, 0 * 8, 28 * 8 - 1) - MCFG_SCREEN_UPDATE_DRIVER(gaplus_base_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, gaplus_base_state, screen_vblank)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, gaplus_base_state, vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60.606060); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(36 * 8, 28 * 8); + m_screen->set_visarea(0 * 8, 36 * 8 - 1, 0 * 8, 28 * 8 - 1); + m_screen->set_screen_update(FUNC(gaplus_base_state::screen_update)); + m_screen->screen_vblank().set(FUNC(gaplus_base_state::screen_vblank)); + m_screen->screen_vblank().append(FUNC(gaplus_base_state::vblank_irq)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_gaplus) MCFG_PALETTE_ADD("palette", 64 * 4 + 64 * 8) @@ -604,9 +604,8 @@ MACHINE_CONFIG_START(gapluso_state::gapluso) gaplus_base(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, gaplus_base_state, screen_vblank)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, gapluso_state, vblank_irq)) + m_screen->screen_vblank().set(FUNC(gaplus_base_state::screen_vblank)); + m_screen->screen_vblank().append(FUNC(gapluso_state::vblank_irq)); MCFG_DEVICE_ADD("namcoio_1", NAMCO_56XX, 0) MCFG_NAMCO56XX_IN_0_CB(IOPORT("COINS")) diff --git a/src/mame/drivers/gimix.cpp b/src/mame/drivers/gimix.cpp index 9cb7cf0f043..3f5a33108b6 100644 --- a/src/mame/drivers/gimix.cpp +++ b/src/mame/drivers/gimix.cpp @@ -611,11 +611,11 @@ MACHINE_CONFIG_START(gimix_state::gimix) MCFG_RS232_RXD_HANDLER(WRITELINE("acia4",acia6850_device,write_rxd)) MCFG_RS232_CTS_HANDLER(WRITELINE("acia4",acia6850_device,write_cts)) - MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia1", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia1", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia2", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia2", acia6850_device, write_rxc)) + clock_device &acia_clock(CLOCK(config, "acia_clock", 153600)); + acia_clock.signal_handler().set(m_acia1, FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia1, FUNC(acia6850_device::write_rxc)); + acia_clock.signal_handler().append(m_acia2, FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia2, FUNC(acia6850_device::write_rxc)); /* banking */ MCFG_ADDRESS_BANK("bank1") diff --git a/src/mame/drivers/gladiatr.cpp b/src/mame/drivers/gladiatr.cpp index 19c968f1889..54a46c9b2c2 100644 --- a/src/mame/drivers/gladiatr.cpp +++ b/src/mame/drivers/gladiatr.cpp @@ -1028,18 +1028,18 @@ MACHINE_CONFIG_START(gladiatr_state::gladiatr) MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) // shadowed by aforementioned hack MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, gladiatr_state, flipscreen_w)) - MCFG_DEVICE_ADD("cctl", I8741, 12_MHz_XTAL/2) /* verified on pcb */ - MCFG_MCS48_PORT_T0_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(3) - MCFG_MCS48_PORT_T1_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(2) - MCFG_MCS48_PORT_P1_IN_CB(READ8(*this, gladiatr_state, cctl_p1_r)) - MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, gladiatr_state, cctl_p2_r)) + I8741(config, m_cctl, 12_MHz_XTAL/2); /* verified on pcb */ + m_cctl->t0_in_cb().set_ioport("COINS").bit(3); + m_cctl->t1_in_cb().set_ioport("COINS").bit(2); + m_cctl->p1_in_cb().set(FUNC(gladiatr_state::cctl_p1_r)); + m_cctl->p2_in_cb().set(FUNC(gladiatr_state::cctl_p2_r)); - MCFG_DEVICE_ADD("ccpu", I8741, 12_MHz_XTAL/2) /* verified on pcb */ - MCFG_MCS48_PORT_P1_IN_CB(IOPORT("IN0")) - MCFG_MCS48_PORT_P2_IN_CB(IOPORT("IN1")) - MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(*this, gladiatr_state, ccpu_p2_w)) - MCFG_MCS48_PORT_T0_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(1) - MCFG_MCS48_PORT_T1_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(0) + I8741(config, m_ccpu, 12_MHz_XTAL/2); /* verified on pcb */ + m_ccpu->p1_in_cb().set_ioport("IN0"); + m_ccpu->p2_in_cb().set_ioport("IN1"); + m_ccpu->p2_out_cb().set(FUNC(gladiatr_state::ccpu_p2_w)); + m_ccpu->t0_in_cb().set_ioport("COINS").bit(1); + m_ccpu->t1_in_cb().set_ioport("COINS").bit(0); MCFG_DEVICE_ADD("ucpu", I8741, 12_MHz_XTAL/2) /* verified on pcb */ MCFG_MCS48_PORT_P1_IN_CB(READ8(*this, gladiatr_state, ucpu_p1_r)) diff --git a/src/mame/drivers/gng.cpp b/src/mame/drivers/gng.cpp index 2ed772784d0..690d88dca4f 100644 --- a/src/mame/drivers/gng.cpp +++ b/src/mame/drivers/gng.cpp @@ -41,16 +41,6 @@ WRITE8_MEMBER(gng_state::gng_bankswitch_w) membank("bank1")->set_entry((data & 0x03)); } -WRITE_LINE_MEMBER(gng_state::coin_counter_1_w) -{ - machine().bookkeeping().coin_counter_w(0, state); -} - -WRITE_LINE_MEMBER(gng_state::coin_counter_2_w) -{ - machine().bookkeeping().coin_counter_w(1, state); -} - WRITE_LINE_MEMBER(gng_state::ym_reset_w) { if (!state) @@ -399,12 +389,12 @@ MACHINE_CONFIG_START(gng_state::gng) MCFG_DEVICE_PROGRAM_MAP(sound_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(gng_state, irq0_line_hold, 4*60) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 9B on A board - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, gng_state, flipscreen_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, gng_state, ym_reset_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, gng_state, coin_counter_1_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, gng_state, coin_counter_2_w)) + ls259_device &mainlatch(LS259(config, "mainlatch")); // 9B on A board + mainlatch.q_out_cb<0>().set(FUNC(gng_state::flipscreen_w)); + mainlatch.q_out_cb<1>().set_inputline("audiocpu", INPUT_LINE_RESET).invert(); + mainlatch.q_out_cb<1>().append(FUNC(gng_state::ym_reset_w)); + mainlatch.q_out_cb<2>().set([this] (int state) { machine().bookkeeping().coin_counter_w(0, state); }); + mainlatch.q_out_cb<3>().set([this] (int state) { machine().bookkeeping().coin_counter_w(1, state); }); /* video hardware */ MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM8) diff --git a/src/mame/drivers/gotcha.cpp b/src/mame/drivers/gotcha.cpp index fe2d838609b..6a946514a9a 100644 --- a/src/mame/drivers/gotcha.cpp +++ b/src/mame/drivers/gotcha.cpp @@ -270,21 +270,20 @@ MACHINE_CONFIG_START(gotcha_state::gotcha) MCFG_DEVICE_PROGRAM_MAP(sound_map) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(55) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(40*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(gotcha_state, screen_update_gotcha) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", M68K_IRQ_6)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("audiocpu", INPUT_LINE_NMI)) // ? + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(55); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(40*8, 32*8); + screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(gotcha_state::screen_update_gotcha)); + screen.set_palette("palette"); + screen.screen_vblank().set_inputline(m_maincpu, M68K_IRQ_6, HOLD_LINE); + screen.screen_vblank().append_inputline(m_audiocpu, INPUT_LINE_NMI); // ? MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_gotcha) MCFG_PALETTE_ADD("palette", 768) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) - MCFG_DEVICE_ADD("spritegen", DECO_SPRITE, 0) MCFG_DECO_SPRITE_GFX_REGION(1) MCFG_DECO_SPRITE_ISBOOTLEG(true) diff --git a/src/mame/drivers/groundfx.cpp b/src/mame/drivers/groundfx.cpp index a9d95e2a663..a27d9d81e4d 100644 --- a/src/mame/drivers/groundfx.cpp +++ b/src/mame/drivers/groundfx.cpp @@ -251,15 +251,15 @@ MACHINE_CONFIG_START(groundfx_state::groundfx) MCFG_ADC0808_IN2_CB(IOPORT("WHEEL")) MCFG_ADC0808_IN3_CB(IOPORT("ACCEL")) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_2_CB(IOPORT("BUTTONS")) - MCFG_TC0510NIO_READ_3_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(7) - MCFG_DEVCB_CHAIN_INPUT(READLINE(*this, groundfx_state, frame_counter_r)) MCFG_DEVCB_BIT(0) - MCFG_TC0510NIO_WRITE_3_CB(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, groundfx_state, coin_word_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("SYSTEM")) + tc0510nio_device &tc0510nio(TC0510NIO(config, "tc0510nio", 0)); + tc0510nio.read_2_callback().set_ioport("BUTTONS"); + tc0510nio.read_3_callback().set("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)).lshift(7); + tc0510nio.read_3_callback().append(FUNC(groundfx_state::frame_counter_r)).lshift(0); + tc0510nio.write_3_callback().set("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5); + tc0510nio.write_3_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(6); + tc0510nio.write_3_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4); + tc0510nio.write_4_callback().set(FUNC(groundfx_state::coin_word_w)); + tc0510nio.read_7_callback().set_ioport("SYSTEM"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/gstriker.cpp b/src/mame/drivers/gstriker.cpp index 86af212e71f..38874c6ea3d 100644 --- a/src/mame/drivers/gstriker.cpp +++ b/src/mame/drivers/gstriker.cpp @@ -502,14 +502,14 @@ MACHINE_CONFIG_START(gstriker_state::gstriker) MCFG_DEVICE_PROGRAM_MAP(sound_map) MCFG_DEVICE_IO_MAP(sound_io_map) - MCFG_DEVICE_ADD("io", VS9209, 0) - MCFG_VS9209_IN_PORTA_CB(IOPORT("P1")) - MCFG_VS9209_IN_PORTB_CB(IOPORT("P2")) - MCFG_VS9209_IN_PORTC_CB(IOPORT("SYSTEM")) - MCFG_VS9209_IN_PORTD_CB(IOPORT("DSW1")) - MCFG_VS9209_IN_PORTE_CB(IOPORT("DSW2")) - MCFG_VS9209_IN_PORTH_CB(READLINE("soundlatch", generic_latch_8_device, pending_r)) MCFG_DEVCB_BIT(0) - MCFG_VS9209_OUT_PORTH_CB(WRITELINE("watchdog", mb3773_device, write_line_ck)) MCFG_DEVCB_BIT(3) + vs9209_device &io(VS9209(config, "io", 0)); + io.porta_input_cb().set_ioport("P1"); + io.portb_input_cb().set_ioport("P2"); + io.portc_input_cb().set_ioport("SYSTEM"); + io.portd_input_cb().set_ioport("DSW1"); + io.porte_input_cb().set_ioport("DSW2"); + io.porth_input_cb().set(m_soundlatch, FUNC(generic_latch_8_device::pending_r)).lshift(0); + io.porth_output_cb().set("watchdog", FUNC(mb3773_device::write_line_ck)).bit(3); MCFG_DEVICE_ADD("watchdog", MB3773, 0) @@ -569,9 +569,7 @@ MACHINE_CONFIG_START(gstriker_state::twc94) MCFG_DEVICE_PROGRAM_MAP(twcup94_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", gstriker_state, irq1_line_hold) - MCFG_DEVICE_MODIFY("io") - MCFG_VS9209_OUT_PORTH_CB(WRITE8(*this, gstriker_state, twcup94_prot_reg_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("watchdog", mb3773_device, write_line_ck)) MCFG_DEVCB_BIT(3) + subdevice("io")->porth_output_cb().append(FUNC(gstriker_state::twcup94_prot_reg_w)); MCFG_DEVICE_REMOVE("acia") MACHINE_CONFIG_END diff --git a/src/mame/drivers/gsword.cpp b/src/mame/drivers/gsword.cpp index 934529b46cd..02c4d71f35a 100644 --- a/src/mame/drivers/gsword.cpp +++ b/src/mame/drivers/gsword.cpp @@ -859,14 +859,14 @@ MACHINE_CONFIG_START(josvolly_state::josvolly) MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, josvolly_state, mcu1_p2_r)) MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(*this, josvolly_state, mcu1_p2_w)) - MCFG_DEVICE_ADD("mcu2", I8741, 12000000/2) /* ? */ - MCFG_MCS48_PORT_P1_IN_CB(READ8(*this, josvolly_state, mcu2_p1_r)) - MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(*this, josvolly_state, mcu2_p1_w)) - MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, josvolly_state, mcu2_p2_r)) - MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(*this, josvolly_state, mcu2_p2_w)) + i8741_device &mcu2(I8741(config, "mcu2", 12000000/2)); /* ? */ + mcu2.p1_in_cb().set(FUNC(josvolly_state::mcu2_p1_r)); + mcu2.p1_out_cb().set(FUNC(josvolly_state::mcu2_p1_w)); + mcu2.p2_in_cb().set(FUNC(josvolly_state::mcu2_p2_r)); + mcu2.p2_out_cb().set(FUNC(josvolly_state::mcu2_p2_w)); // TEST0 and TEST1 are driven by P20 and P21 on the other MCU - MCFG_MCS48_PORT_T0_IN_CB(READ8("mcu1", i8741_device, p2_r)) MCFG_DEVCB_RSHIFT(0) - MCFG_MCS48_PORT_T1_IN_CB(READ8("mcu1", i8741_device, p2_r)) MCFG_DEVCB_RSHIFT(1) + mcu2.t0_in_cb().set("mcu1", FUNC(i8741_device::p2_r)).bit(0); + mcu2.t1_in_cb().set("mcu1", FUNC(i8741_device::p2_r)).bit(1); MCFG_DEVICE_ADD("aa_007", I8255, 0) MCFG_I8255_IN_PORTA_CB(IOPORT("IN1")) // 1PL diff --git a/src/mame/drivers/guab.cpp b/src/mame/drivers/guab.cpp index e3fc569a2cd..fbb2a924614 100644 --- a/src/mame/drivers/guab.cpp +++ b/src/mame/drivers/guab.cpp @@ -539,9 +539,9 @@ MACHINE_CONFIG_START(guab_state::guab) MCFG_RS232_CTS_HANDLER(WRITELINE("acia6850_1", acia6850_device, write_cts)) MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("keyboard", acia_1_rs232_defaults) - MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) // source? the ptm doesn't seem to output any common baud values - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia6850_1", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_1", acia6850_device, write_rxc)) + 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)); + acia_clock.signal_handler().append("acia6850_1", FUNC(acia6850_device::write_rxc)); MCFG_DEVICE_ADD("acia6850_2", ACIA6850, 0) diff --git a/src/mame/drivers/gunbustr.cpp b/src/mame/drivers/gunbustr.cpp index 212752a03a6..9db657775f0 100644 --- a/src/mame/drivers/gunbustr.cpp +++ b/src/mame/drivers/gunbustr.cpp @@ -237,15 +237,15 @@ MACHINE_CONFIG_START(gunbustr_state::gunbustr) MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("EXTRA")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("INPUTS")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("SPECIAL")) - MCFG_TC0510NIO_WRITE_3_CB(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, gunbustr_state, coin_word_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("SYSTEM")) + tc0510nio_device &tc0510nio(TC0510NIO(config, "tc0510nio", 0)); + tc0510nio.read_0_callback().set_ioport("EXTRA"); + tc0510nio.read_2_callback().set_ioport("INPUTS"); + tc0510nio.read_3_callback().set_ioport("SPECIAL"); + tc0510nio.write_3_callback().set("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5); + tc0510nio.write_3_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(6); + tc0510nio.write_3_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4); + tc0510nio.write_4_callback().set(FUNC(gunbustr_state::coin_word_w)); + tc0510nio.read_7_callback().set_ioport("SYSTEM"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/h8.cpp b/src/mame/drivers/h8.cpp index f6300ed07c2..ea1d710a28a 100644 --- a/src/mame/drivers/h8.cpp +++ b/src/mame/drivers/h8.cpp @@ -329,12 +329,12 @@ MACHINE_CONFIG_START(h8_state::h8) WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25); /* Devices */ - MCFG_DEVICE_ADD("uart", I8251, 0) - MCFG_I8251_TXD_HANDLER(WRITELINE(*this, h8_state, txdata_callback)) + I8251(config, m_uart, 0); + m_uart->txd_handler().set(FUNC(h8_state::txdata_callback)); - MCFG_DEVICE_ADD("cassette_clock", CLOCK, 4800) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + clock_device &cassette_clock(CLOCK(config, "cassette_clock", 4800)); + cassette_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc)); + cassette_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc)); MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED) diff --git a/src/mame/drivers/harriet.cpp b/src/mame/drivers/harriet.cpp index feae77ae14c..c5da86323e3 100644 --- a/src/mame/drivers/harriet.cpp +++ b/src/mame/drivers/harriet.cpp @@ -104,9 +104,9 @@ MACHINE_CONFIG_START(harriet_state::harriet) MCFG_DEVICE_ADD("timekpr", M48T02, 0) MCFG_NVRAM_ADD_0FILL("zpram") // MK48Z02 - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("mfp", mc68901_device, write_rx)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mfp", mc68901_device, tbi_w)) + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); + rs232.rxd_handler().set("mfp", FUNC(mc68901_device::write_rx)); + rs232.rxd_handler().append("mfp", FUNC(mc68901_device::tbi_w)); //MCFG_DEVICE_ADD("wdca", WD33C93, 40_MHz_XTAL / 4) //MCFG_DEVICE_ADD("wdcb", WD33C93, 40_MHz_XTAL / 4) diff --git a/src/mame/drivers/hazelgr.cpp b/src/mame/drivers/hazelgr.cpp index 7ffe08d743b..9fa626940b0 100644 --- a/src/mame/drivers/hazelgr.cpp +++ b/src/mame/drivers/hazelgr.cpp @@ -79,14 +79,14 @@ MACHINE_CONFIG_START(haze_state::haze) MCFG_DEVICE_IO_MAP(io_map) MCFG_Z80_DAISY_CHAIN(daisy_chain) - MCFG_DEVICE_ADD("ctc_clock", CLOCK, 1'000'000) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc1", z80ctc_device, trg3)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc2", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc2", z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc2", z80ctc_device, trg2)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc2", z80ctc_device, trg3)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc3", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc3", z80ctc_device, trg1)) + clock_device &ctc_clock(CLOCK(config, "ctc_clock", 1'000'000)); + ctc_clock.signal_handler().set("ctc1", FUNC(z80ctc_device::trg3)); + ctc_clock.signal_handler().append("ctc2", FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append("ctc2", FUNC(z80ctc_device::trg1)); + ctc_clock.signal_handler().append("ctc2", FUNC(z80ctc_device::trg2)); + ctc_clock.signal_handler().append("ctc2", FUNC(z80ctc_device::trg3)); + ctc_clock.signal_handler().append("ctc3", FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append("ctc3", FUNC(z80ctc_device::trg1)); MCFG_DEVICE_ADD("ctc1", Z80CTC, 1'000'000 ) MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) diff --git a/src/mame/drivers/hazeltin.cpp b/src/mame/drivers/hazeltin.cpp index 2c2d726baab..3a9c9ba1495 100644 --- a/src/mame/drivers/hazeltin.cpp +++ b/src/mame/drivers/hazeltin.cpp @@ -716,9 +716,9 @@ MACHINE_CONFIG_START(hazl1500_state::hazl1500) MCFG_PALETTE_ADD_MONOCHROME("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_hazl1500) - MCFG_DEVICE_ADD(BAUDGEN_TAG, COM8116, XTAL(5'068'800)) - MCFG_COM8116_FR_HANDLER(WRITELINE("uart", ay51013_device, write_tcp)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", ay51013_device, write_rcp)) + com8116_device &baudgen(COM8116(config, BAUDGEN_TAG, XTAL(5'068'800))); + baudgen.fr_handler().set(m_uart, FUNC(ay51013_device::write_tcp)); + baudgen.fr_handler().append(m_uart, FUNC(ay51013_device::write_rcp)); MCFG_DEVICE_ADD(UART_TAG, AY51013, 0) MCFG_AY51013_WRITE_DAV_CB(WRITELINE("mainint", input_merger_device, in_w<0>)) diff --git a/src/mame/drivers/hnayayoi.cpp b/src/mame/drivers/hnayayoi.cpp index 5dbccbd5a13..629de9fc02d 100644 --- a/src/mame/drivers/hnayayoi.cpp +++ b/src/mame/drivers/hnayayoi.cpp @@ -555,11 +555,11 @@ MACHINE_CONFIG_START(hnayayoi_state::hnayayoi) MCFG_NVRAM_ADD_0FILL("nvram") - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, hnayayoi_state, coin_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("msm", msm5205_device, vclk_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, hnayayoi_state, nmi_enable_w)) MCFG_DEVCB_INVERT + ls259_device &mainlatch(LS259(config, "mainlatch")); + mainlatch.q_out_cb<0>().set(FUNC(hnayayoi_state::coin_counter_w)); + mainlatch.q_out_cb<2>().set(m_msm, FUNC(msm5205_device::reset_w)).invert(); + mainlatch.q_out_cb<3>().set(m_msm, FUNC(msm5205_device::vclk_w)); + mainlatch.q_out_cb<4>().set(FUNC(hnayayoi_state::nmi_enable_w)).invert(); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -608,11 +608,11 @@ MACHINE_CONFIG_START(hnayayoi_state::untoucha) MCFG_DEVICE_PROGRAM_MAP(untoucha_map) MCFG_DEVICE_IO_MAP(untoucha_io_map) - MCFG_DEVICE_MODIFY("mainlatch") - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE("msm", msm5205_device, vclk_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, hnayayoi_state, nmi_enable_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // ? + ls259_device &mainlatch(*subdevice("mainlatch")); + mainlatch.q_out_cb<1>().set(m_msm, FUNC(msm5205_device::vclk_w)); + mainlatch.q_out_cb<2>().set(FUNC(hnayayoi_state::nmi_enable_w)); + mainlatch.q_out_cb<3>().set(m_msm, FUNC(msm5205_device::reset_w)).invert(); + mainlatch.q_out_cb<4>().set_nop(); // ? MCFG_DEVICE_MODIFY("crtc") MCFG_MC6845_UPDATE_ROW_CB(hnayayoi_state, untoucha_update_row) diff --git a/src/mame/drivers/holeland.cpp b/src/mame/drivers/holeland.cpp index 87bb3d32e64..66d190f5f5a 100644 --- a/src/mame/drivers/holeland.cpp +++ b/src/mame/drivers/holeland.cpp @@ -282,11 +282,11 @@ MACHINE_CONFIG_START(holeland_state::holeland) MCFG_DEVICE_IO_MAP(io_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", holeland_state, irq0_line_hold) - MCFG_DEVICE_ADD("latch", LS259, 0) // 3J - MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(*this, holeland_state, pal_offs_w)) MCFG_DEVCB_MASK(0x03) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, holeland_state, coin_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, holeland_state, flipscreen_x_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, holeland_state, flipscreen_y_w)) + LS259(config, m_latch); // 3J + m_latch->parallel_out_cb().set(FUNC(holeland_state::pal_offs_w)).mask(0x03); + m_latch->q_out_cb<5>().set(FUNC(holeland_state::coin_counter_w)); + m_latch->q_out_cb<6>().set(FUNC(holeland_state::flipscreen_x_w)); + m_latch->q_out_cb<7>().set(FUNC(holeland_state::flipscreen_y_w)); MCFG_WATCHDOG_ADD("watchdog") @@ -365,9 +365,9 @@ MACHINE_CONFIG_START(holeland_state::crzrally) MCFG_NVRAM_ADD_1FILL("nvram") - MCFG_DEVICE_ADD("latch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(*this, holeland_state, pal_offs_w)) MCFG_DEVCB_MASK(0x03) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, holeland_state, coin_counter_w)) + LS259(config, m_latch); + m_latch->parallel_out_cb().set(FUNC(holeland_state::pal_offs_w)).mask(0x03); + m_latch->q_out_cb<5>().set(FUNC(holeland_state::coin_counter_w)); MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/hp16500.cpp b/src/mame/drivers/hp16500.cpp index b025eb3c835..a8a05fb2873 100644 --- a/src/mame/drivers/hp16500.cpp +++ b/src/mame/drivers/hp16500.cpp @@ -476,21 +476,20 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(hp16500_state::hp16500) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68EC030, 25000000) - MCFG_DEVICE_PROGRAM_MAP(hp16500_map) + M68EC030(config, m_maincpu, 25'000'000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp16500_state::hp16500_map); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(hp16500_state, screen_update_hp16500) - MCFG_SCREEN_SIZE(576,384) - MCFG_SCREEN_VISIBLE_AREA(0, 576-1, 0, 384-1) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, hp16500_state, vsync_changed)) - // FIXME: Where is the AP line connected to? The MLC documentation recommends - // connecting it to VBLANK - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mlc", hp_hil_mlc_device, ap_w)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_screen_update(FUNC(hp16500_state::screen_update_hp16500)); + screen.set_size(576,384); + screen.set_visarea(0, 576-1, 0, 384-1); + screen.set_refresh_hz(60); + screen.screen_vblank().set(FUNC(hp16500_state::vsync_changed)); + // FIXME: Where is the AP line connected to? The MLC documentation recommends connecting it to VBLANK + screen.screen_vblank().append(m_mlc, FUNC(hp_hil_mlc_device::ap_w)); - MCFG_DEVICE_ADD("mlc", HP_HIL_MLC, XTAL(15'920'000)/2) - MCFG_HP_HIL_INT_CALLBACK(WRITELINE(*this, hp16500_state, irq_2)) + HP_HIL_MLC(config, m_mlc, XTAL(15'920'000)/2); + m_mlc->int_callback().set(FUNC(hp16500_state::irq_2)); // TODO: for now hook up the ipc hil keyboard - this might be replaced // later with a 16500b specific keyboard implementation diff --git a/src/mame/drivers/i7000.cpp b/src/mame/drivers/i7000.cpp index 49983802f63..99eecfad917 100644 --- a/src/mame/drivers/i7000.cpp +++ b/src/mame/drivers/i7000.cpp @@ -383,8 +383,8 @@ MACHINE_CONFIG_START(i7000_state::i7000) MCFG_DEVICE_ADD("i8279", I8279, 4000000) /* guessed value. TODO: verify on PCB */ MCFG_I8279_OUT_SL_CB(WRITE8(*this, i7000_state, i7000_scanlines_w)) // scan SL lines MCFG_I8279_IN_RL_CB(READ8(*this, i7000_state, i7000_kbd_r)) // kbd RL lines - MCFG_I8279_IN_SHIFT_CB(VCC) // TODO: Shift key - MCFG_I8279_IN_CTRL_CB(VCC) // TODO: Ctrl key + MCFG_I8279_IN_SHIFT_CB(CONSTANT(1)) // TODO: Shift key + MCFG_I8279_IN_CTRL_CB(CONSTANT(1)) // TODO: Ctrl key /* Cartridge slot */ MCFG_GENERIC_CARTSLOT_ADD("cardslot", generic_romram_plain_slot, "i7000_card") diff --git a/src/mame/drivers/ibm6580.cpp b/src/mame/drivers/ibm6580.cpp index 1a171c959ca..02f34f0a597 100644 --- a/src/mame/drivers/ibm6580.cpp +++ b/src/mame/drivers/ibm6580.cpp @@ -914,11 +914,11 @@ MACHINE_CONFIG_START(ibm6580_state::ibm6580) MCFG_DEVICE_ADD("pit8253", PIT8253, 0) - MCFG_DEVICE_ADD("kbd", DW_KEYBOARD, 0) - MCFG_DW_KEYBOARD_OUT_DATA_HANDLER(WRITELINE(*this, ibm6580_state, kb_data_w)) - MCFG_DW_KEYBOARD_OUT_CLOCK_HANDLER(WRITELINE(*this, ibm6580_state, kb_clock_w)) - MCFG_DW_KEYBOARD_OUT_STROBE_HANDLER(WRITELINE(*this, ibm6580_state, kb_strobe_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ppi8255", i8255_device, pc4_w)) + DW_KEYBOARD(config, m_kbd, 0); + m_kbd->out_data_handler().set(FUNC(ibm6580_state::kb_data_w)); + m_kbd->out_clock_handler().set(FUNC(ibm6580_state::kb_clock_w)); + m_kbd->out_strobe_handler().set(FUNC(ibm6580_state::kb_strobe_w)); + m_kbd->out_strobe_handler().append(m_ppi8255, FUNC(i8255_device::pc4_w)); MCFG_DEVICE_ADD("dma8257", I8257, XTAL(14'745'600)/3) MCFG_I8257_OUT_HRQ_CB(WRITELINE(*this, ibm6580_state, hrq_w)) diff --git a/src/mame/drivers/igs017.cpp b/src/mame/drivers/igs017.cpp index ad25462b36b..c7a45dc6489 100644 --- a/src/mame/drivers/igs017.cpp +++ b/src/mame/drivers/igs017.cpp @@ -163,22 +163,22 @@ void igs_bitswap_device::set_val_xor(uint16_t val_xor) } #define MCFG_IGS_BITSWAP_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_IGS_BITSWAP_IN_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_IGS_BITSWAP_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_in_pc_callback(DEVCB_##_devcb); + downcast(*device).set_in_pc_callback(DEVCB_##_devcb); #define MCFG_IGS_BITSWAP_OUT_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_IGS_BITSWAP_OUT_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); #define MCFG_IGS_BITSWAP_OUT_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_out_pc_callback(DEVCB_##_devcb); + downcast(*device).set_out_pc_callback(DEVCB_##_devcb); // note: b3 seems fixed to ~15, it may go away in the future #define MCFG_IGS_BITSWAP_M3_0_BITS(_b0, _b1, _b2, _b3) \ diff --git a/src/mame/drivers/imds2.cpp b/src/mame/drivers/imds2.cpp index 40076ec6ffe..4d4663b398f 100644 --- a/src/mame/drivers/imds2.cpp +++ b/src/mame/drivers/imds2.cpp @@ -767,11 +767,11 @@ MACHINE_CONFIG_START(imds2_state::imds2) MCFG_DEVICE_ADD("ipcsyspic", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, imds2_state, imds2_ipc_intr)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_DEVICE_ADD("ipclocpic", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("ipcsyspic", pic8259_device, ir7_w)) - MCFG_PIC8259_IN_SP_CB(VCC) // ??? + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) // ??? MCFG_DEVICE_ADD("ipctimer" , PIT8253 , 0) MCFG_PIT8253_CLK0(IPC_XTAL_Y1 / 16) diff --git a/src/mame/drivers/imolagp.cpp b/src/mame/drivers/imolagp.cpp index c7c9a629b80..00782c004ad 100644 --- a/src/mame/drivers/imolagp.cpp +++ b/src/mame/drivers/imolagp.cpp @@ -94,8 +94,8 @@ www.andys-arcade.com class imolagp_state : public driver_device { public: - imolagp_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + imolagp_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_slavecpu(*this, "slave"), m_steer_pot_timer(*this, "pot"), @@ -524,12 +524,12 @@ MACHINE_CONFIG_START(imolagp_state::imolagp) MCFG_QUANTUM_PERFECT_CPU("maincpu") - MCFG_DEVICE_ADD("ppi8255", I8255A, 0) + i8255_device &ppi(I8255A(config, "ppi8255", 0)); // mode $91 - ports A & C-lower as input, ports B & C-upper as output - MCFG_I8255_IN_PORTA_CB(IOPORT("IN0")) - MCFG_I8255_IN_PORTB_CB(LOGGER("PPI8255 - unmapped read port B")) - MCFG_I8255_OUT_PORTB_CB(LOGGER("PPI8255 - unmapped write port B")) - MCFG_I8255_IN_PORTC_CB(IOPORT("IN1")) + ppi.in_pa_callback().set_ioport("IN0"); + ppi.in_pb_callback().set_log("PPI8255 - unmapped read port B"); + ppi.out_pb_callback().set_log("PPI8255 - unmapped write port B"); + ppi.in_pc_callback().set_ioport("IN1"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/imsai.cpp b/src/mame/drivers/imsai.cpp index 8ab9ee5266f..c9b545b112f 100644 --- a/src/mame/drivers/imsai.cpp +++ b/src/mame/drivers/imsai.cpp @@ -120,12 +120,12 @@ MACHINE_CONFIG_START(imsai_state::imsai) /* Devices */ MCFG_DEVICE_ADD("uart", I8251, 0) - MCFG_DEVICE_ADD("pit", PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL(6'000'000) / 3) /* Timer 0: baud rate gen for 8251 */ - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) - MCFG_PIT8253_CLK1(XTAL(6'000'000) / 3) /* Timer 1: user */ - MCFG_PIT8253_CLK2(XTAL(6'000'000) / 3) /* Timer 2: user */ + PIT8253(config, m_pit, 0); + m_pit->set_clk<0>(6_MHz_XTAL / 3); // Timer 0: baud rate gen for 8251 + m_pit->out_handler<0>().set("uart", FUNC(i8251_device::write_txc)); + m_pit->out_handler<0>().append("uart", FUNC(i8251_device::write_rxc)); + m_pit->set_clk<1>(6_MHz_XTAL / 3); // Timer 1: user + m_pit->set_clk<2>(6_MHz_XTAL / 3); // Timer 2: user MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/drivers/inder.cpp b/src/mame/drivers/inder.cpp index d5d154e8364..20650f2ab10 100644 --- a/src/mame/drivers/inder.cpp +++ b/src/mame/drivers/inder.cpp @@ -1434,12 +1434,11 @@ MACHINE_CONFIG_START(inder_state::inder) /* Sound */ genpin_audio(config); SPEAKER(config, "msmvol").front_center(); - MCFG_DEVICE_ADD("msm", MSM5205, XTAL(384'000)) - MCFG_MSM5205_VCK_CALLBACK(WRITELINE("9a", ttl7474_device, clock_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("9b", ttl7474_device, clock_w)) // order of writes is sensitive - - MCFG_MSM5205_PRESCALER_SELECTOR(S48_4B) /* 4KHz 4-bit */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "msmvol", 1.0) + MSM5205(config, m_msm, 384_kHz_XTAL); + m_msm->vck_callback().set(m_9a, FUNC(ttl7474_device::clock_w)); + m_msm->vck_callback().append(m_9b, FUNC(ttl7474_device::clock_w)); // order of writes is sensitive + m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 4KHz 4-bit + m_msm->add_route(ALL_OUTPUTS, "msmvol", 1.0); /* Devices */ MCFG_DEVICE_ADD("ppi60", I8255A, 0 ) diff --git a/src/mame/drivers/interpro.cpp b/src/mame/drivers/interpro.cpp index fdc8d961d88..2e4f69e5d23 100644 --- a/src/mame/drivers/interpro.cpp +++ b/src/mame/drivers/interpro.cpp @@ -790,12 +790,12 @@ void interpro_state::interpro_cdrom(device_t *device) } MACHINE_CONFIG_START(interpro_state::ioga) - MCFG_DEVICE_MODIFY(INTERPRO_IOGA_TAG) - MCFG_INTERPRO_IOGA_NMI_CB(INPUTLINE(m_maincpu, INPUT_LINE_NMI)) - MCFG_INTERPRO_IOGA_IRQ_CB(INPUTLINE(m_maincpu, INPUT_LINE_IRQ0)) - MCFG_INTERPRO_IOGA_IVEC_CB(WRITE8(m_maincpu, clipper_device, set_ivec)) + m_ioga->out_nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + m_ioga->out_irq_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_ioga->out_irq_vector_callback().set(m_maincpu, FUNC(clipper_device::set_ivec)); // ioga dma and serial dma channels + MCFG_DEVICE_MODIFY(INTERPRO_IOGA_TAG); //MCFG_INTERPRO_IOGA_DMA_CB(0, unknown) // plotter MCFG_INTERPRO_IOGA_DMA_CB(1, READ8(INTERPRO_SCSI_DEVICE_TAG, ncr53c90a_device, mdma_r), WRITE8(INTERPRO_SCSI_DEVICE_TAG, ncr53c90a_device, mdma_w)) MCFG_INTERPRO_IOGA_DMA_CB(2, READ8(m_fdc, upd765_family_device, mdma_r), WRITE8(m_fdc, upd765_family_device, mdma_w)) diff --git a/src/mame/drivers/ipc.cpp b/src/mame/drivers/ipc.cpp index 846aab5ac7e..339ce3e5a92 100644 --- a/src/mame/drivers/ipc.cpp +++ b/src/mame/drivers/ipc.cpp @@ -94,41 +94,42 @@ void ipc_state::machine_reset() } -MACHINE_CONFIG_START(ipc_state::ipc) +void ipc_state::ipc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",I8085A, XTAL(19'660'800) / 4) - MCFG_DEVICE_PROGRAM_MAP(ipc_mem) - MCFG_DEVICE_IO_MAP(ipc_io) + I8085A(config, m_maincpu, XTAL(19'660'800) / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &ipc_state::ipc_mem); + m_maincpu->set_addrmap(AS_IO, &ipc_state::ipc_io); - MCFG_DEVICE_ADD("pit", PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL(19'660'800) / 16) - MCFG_PIT8253_CLK1(XTAL(19'660'800) / 16) - MCFG_PIT8253_CLK2(XTAL(19'660'800) / 16) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("uart1", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart1", i8251_device, write_rxc)) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("uart2", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart2", i8251_device, write_rxc)) + pit8253_device &pit(PIT8253(config, "pit", 0)); + pit.set_clk<0>(XTAL(19'660'800) / 16); + pit.set_clk<1>(XTAL(19'660'800) / 16); + pit.set_clk<2>(XTAL(19'660'800) / 16); + pit.out_handler<0>().set("uart1", FUNC(i8251_device::write_txc)); + pit.out_handler<0>().append("uart1", FUNC(i8251_device::write_rxc)); + pit.out_handler<1>().set("uart2", FUNC(i8251_device::write_txc)); + pit.out_handler<1>().append("uart2", FUNC(i8251_device::write_rxc)); - MCFG_DEVICE_ADD("uart1", I8251, 0) // 8 data bits, no parity, 1 stop bit, 9600 baud - MCFG_I8251_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd)) - MCFG_I8251_DTR_HANDLER(WRITELINE("rs232a", rs232_port_device, write_dtr)) - MCFG_I8251_RTS_HANDLER(WRITELINE("rs232a", rs232_port_device, write_rts)) + i8251_device &uart1(I8251(config, "uart1", 0)); // 8 data bits, no parity, 1 stop bit, 9600 baud + uart1.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd)); + uart1.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr)); + uart1.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("uart1", i8251_device, write_rxd)) - MCFG_RS232_DSR_HANDLER(WRITELINE("uart1", i8251_device, write_dsr)) - MCFG_RS232_CTS_HANDLER(WRITELINE("uart1", i8251_device, write_cts)) + rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal")); + rs232a.rxd_handler().set("uart1", FUNC(i8251_device::write_rxd)); + rs232a.dsr_handler().set("uart1", FUNC(i8251_device::write_dsr)); + rs232a.cts_handler().set("uart1", FUNC(i8251_device::write_cts)); - MCFG_DEVICE_ADD("uart2", I8251, 0) // 8 data bits, no parity, 2 stop bits, 2400 baud - MCFG_I8251_TXD_HANDLER(WRITELINE("rs232b", rs232_port_device, write_txd)) - MCFG_I8251_DTR_HANDLER(WRITELINE("rs232b", rs232_port_device, write_dtr)) - MCFG_I8251_RTS_HANDLER(WRITELINE("rs232b", rs232_port_device, write_rts)) + i8251_device &uart2(I8251(config, "uart2", 0)); // 8 data bits, no parity, 2 stop bits, 2400 baud + uart2.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd)); + uart2.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr)); + uart2.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("uart2", i8251_device, write_rxd)) - MCFG_RS232_DSR_HANDLER(WRITELINE("uart2", i8251_device, write_dsr)) - MCFG_RS232_CTS_HANDLER(WRITELINE("uart2", i8251_device, write_cts)) -MACHINE_CONFIG_END + rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr)); + rs232b.rxd_handler().set("uart2", FUNC(i8251_device::write_rxd)); + rs232b.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr)); + rs232b.cts_handler().set("uart2", FUNC(i8251_device::write_cts)); +} /* ROM definition */ ROM_START( ipb ) diff --git a/src/mame/drivers/irisha.cpp b/src/mame/drivers/irisha.cpp index 71f54b853bd..725b16c2d5c 100644 --- a/src/mame/drivers/irisha.cpp +++ b/src/mame/drivers/irisha.cpp @@ -391,14 +391,14 @@ MACHINE_CONFIG_START(irisha_state::irisha) /* Devices */ MCFG_DEVICE_ADD("uart", I8251, 0) - MCFG_DEVICE_ADD("pit8253", PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL(16'000'000) / 9) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("pic8259", pic8259_device, ir0_w)) - MCFG_PIT8253_CLK1(XTAL(16'000'000) / 9 / 8 / 8) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) - MCFG_PIT8253_CLK2(XTAL(16'000'000) / 9) - MCFG_PIT8253_OUT2_HANDLER(WRITELINE(*this, irisha_state, speaker_w)) + PIT8253(config, m_pit, 0); + m_pit->set_clk<0>(16_MHz_XTAL / 9); + m_pit->out_handler<0>().set("pic8259", FUNC(pic8259_device::ir0_w)); + m_pit->set_clk<1>(16_MHz_XTAL / 9 / 8 / 8); + m_pit->out_handler<1>().set("uart", FUNC(i8251_device::write_txc)); + m_pit->out_handler<1>().append("uart", FUNC(i8251_device::write_rxc)); + m_pit->set_clk<2>(16_MHz_XTAL / 9); + m_pit->out_handler<2>().set(FUNC(irisha_state::speaker_w)); MCFG_DEVICE_ADD("ppi8255", I8255, 0) MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, irisha_state, irisha_8255_porta_w)) diff --git a/src/mame/drivers/isbc.cpp b/src/mame/drivers/isbc.cpp index 46d8354e137..b187183d0a2 100644 --- a/src/mame/drivers/isbc.cpp +++ b/src/mame/drivers/isbc.cpp @@ -48,7 +48,6 @@ public: , m_statuslatch(*this, "statuslatch") , m_bios(*this, "user1") , m_biosram(*this, "biosram") - , m_leds(*this, "led%u", 0U) { } void isbc2861(machine_config &config); @@ -73,12 +72,8 @@ private: DECLARE_WRITE8_MEMBER(edge_intr_clear_w); DECLARE_WRITE8_MEMBER(status_register_w); DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); - DECLARE_WRITE_LINE_MEMBER(override_w); DECLARE_WRITE_LINE_MEMBER(bus_intr_out1_w); DECLARE_WRITE_LINE_MEMBER(bus_intr_out2_w); - DECLARE_WRITE_LINE_MEMBER(led_ds1_w); - DECLARE_WRITE_LINE_MEMBER(led_ds3_w); - DECLARE_WRITE_LINE_MEMBER(megabyte_select_w); void isbc2861_mem(address_map &map); void isbc286_io(address_map &map); void isbc286_mem(address_map &map); @@ -89,7 +84,6 @@ private: void rpc86_io(address_map &map); void rpc86_mem(address_map &map); - virtual void machine_start() override { m_leds.resolve(); } virtual void machine_reset() override; required_device m_maincpu; @@ -103,7 +97,6 @@ private: optional_device m_statuslatch; optional_memory_region m_bios; optional_shared_ptr m_biosram; - output_finder<2> m_leds; bool m_upperen; offs_t m_megabyte_page; @@ -323,12 +316,6 @@ WRITE_LINE_MEMBER(isbc_state::nmi_mask_w) m_nmi_enable = state; } -WRITE_LINE_MEMBER(isbc_state::override_w) -{ - // 1 = access onboard dual-port RAM - m_override = state; -} - WRITE_LINE_MEMBER(isbc_state::bus_intr_out1_w) { // Multibus interrupt request (active high) @@ -339,21 +326,6 @@ WRITE_LINE_MEMBER(isbc_state::bus_intr_out2_w) // Multibus interrupt request (active high) } -WRITE_LINE_MEMBER(isbc_state::led_ds1_w) -{ - m_leds[0] = state ? 0 : 1; -} - -WRITE_LINE_MEMBER(isbc_state::led_ds3_w) -{ - m_leds[1] = state ? 0 : 1; -} - -WRITE_LINE_MEMBER(isbc_state::megabyte_select_w) -{ - m_megabyte_enable = !state; -} - MACHINE_CONFIG_START(isbc_state::isbc86) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", I8086, XTAL(5'000'000)) @@ -445,16 +417,16 @@ MACHINE_CONFIG_START(isbc_state::isbc8630) MCFG_DEVICE_ADD("isbc_215g", ISBC_215G, 0x100, "maincpu") MCFG_ISBC_215_IRQ(WRITELINE("pic_0", pic8259_device, ir5_w)) - MCFG_DEVICE_ADD("statuslatch", LS259, 0) // U14 -// MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE("pit", pit8253_device, write_gate0)) -// MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE("pit", pit8253_device, write_gate1)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, isbc_state, nmi_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, isbc_state, override_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, isbc_state, bus_intr_out1_w)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, isbc_state, bus_intr_out2_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, isbc_state, led_ds1_w)) - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, isbc_state, led_ds3_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, isbc_state, megabyte_select_w)) + LS259(config, m_statuslatch); // U14 +// m_statuslatch->q_out_cb<0>().set("pit", FUNC(pit8253_device::write_gate0)); +// m_statuslatch->q_out_cb<1>().set("pit", FUNC(pit8253_device::write_gate1)); + m_statuslatch->q_out_cb<2>().set(FUNC(isbc_state::nmi_mask_w)); + m_statuslatch->q_out_cb<3>().set([this] (int state) { m_override = state; }); // 1 = access onboard dual-port RAM + m_statuslatch->q_out_cb<4>().set(FUNC(isbc_state::bus_intr_out1_w)); + m_statuslatch->q_out_cb<5>().set(FUNC(isbc_state::bus_intr_out2_w)); + m_statuslatch->q_out_cb<5>().append_output("led0").invert(); // ds1 + m_statuslatch->q_out_cb<6>().set_output("led1").invert(); // ds3 + m_statuslatch->q_out_cb<7>().set([this] (int state) { m_megabyte_enable = !state; }); MACHINE_CONFIG_END MACHINE_CONFIG_START(isbc_state::isbc286) @@ -466,12 +438,12 @@ MACHINE_CONFIG_START(isbc_state::isbc286) MCFG_DEVICE_ADD("pic_0", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, isbc_state, get_slave_ack)) MCFG_DEVICE_ADD("pic_1", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic_0", pic8259_device, ir7_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("pit", PIT8254, 0) MCFG_PIT8253_CLK0(XTAL(22'118'400)/18) diff --git a/src/mame/drivers/isbc8030.cpp b/src/mame/drivers/isbc8030.cpp index 0cb5c28371f..4f7cc6d2ed6 100644 --- a/src/mame/drivers/isbc8030.cpp +++ b/src/mame/drivers/isbc8030.cpp @@ -37,12 +37,6 @@ X Examine and modify CPU registers #include "machine/i8251.h" #include "bus/rs232/rs232.h" -#define I8259A_TAG "pic8259" -#define I8253_TAG "pit8253" -#define I8255A_TAG "ppi8255" -#define I8251A_TAG "usart" -#define I8251A_BAUD_TAG "usart_baud" -#define RS232_TAG "rs232" class isbc8030_state : public driver_device { @@ -50,11 +44,11 @@ public: isbc8030_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_usart(*this, I8251A_TAG) - , m_ppi(*this, I8255A_TAG) - , m_pic(*this, I8259A_TAG) - , m_pit(*this, I8253_TAG) - , m_rs232(*this, RS232_TAG) + , m_usart(*this, "usart") + , m_ppi(*this, "ppi8255") + , m_pic(*this, "pic8259") + , m_pit(*this, "pit8253") + , m_rs232(*this, "rs232") { } void isbc8030(machine_config &config); @@ -92,35 +86,35 @@ void isbc8030_state::isbc8030_io(address_map &map) static INPUT_PORTS_START( isbc8030 ) INPUT_PORTS_END -MACHINE_CONFIG_START(isbc8030_state::isbc8030) - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8085A, XTAL(22'118'400) / 4) - MCFG_DEVICE_PROGRAM_MAP(isbc8030_mem) - MCFG_DEVICE_IO_MAP(isbc8030_io) +void isbc8030_state::isbc8030(machine_config &config) +{ + I8085A(config, m_maincpu, XTAL(22'118'400) / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &isbc8030_state::isbc8030_mem); + m_maincpu->set_addrmap(AS_IO, &isbc8030_state::isbc8030_io); - MCFG_DEVICE_ADD(I8259A_TAG, PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) + PIC8259(config, m_pic, 0); + m_pic->out_int_callback().set_inputline(m_maincpu, 0); - MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL(22'118'400) / 18) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE(I8259A_TAG, pic8259_device, ir0_w)) - MCFG_PIT8253_CLK1(XTAL(22'118'400) / 18) - MCFG_PIT8253_CLK2(XTAL(22'118'400) / 18) - MCFG_PIT8253_OUT2_HANDLER(WRITELINE(I8251A_TAG, i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(I8251A_TAG, i8251_device, write_txc)) + PIT8253(config, m_pit, 0); + m_pit->set_clk<0>(XTAL(22'118'400) / 18); + m_pit->out_handler<0>().set(m_pic, FUNC(pic8259_device::ir0_w)); + m_pit->set_clk<1>(XTAL(22'118'400) / 18); + m_pit->set_clk<2>(XTAL(22'118'400) / 18); + m_pit->out_handler<2>().set(m_usart, FUNC(i8251_device::write_rxc)); + m_pit->out_handler<2>().append(m_usart, FUNC(i8251_device::write_txc)); - MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0) - MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd)) - MCFG_I8251_DTR_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_dtr)) - MCFG_I8251_RTS_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_rts)) + I8251(config, m_usart, 0); + m_usart->txd_handler().set(m_rs232, FUNC(rs232_port_device::write_txd)); + m_usart->dtr_handler().set(m_rs232, FUNC(rs232_port_device::write_dtr)); + m_usart->rts_handler().set(m_rs232, FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0) + I8255A(config, m_ppi, 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)) -MACHINE_CONFIG_END + 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)); +} /* ROM definition */ ROM_START( isbc8030 ) diff --git a/src/mame/drivers/iteagle.cpp b/src/mame/drivers/iteagle.cpp index 663fc550d03..343e3c43426 100644 --- a/src/mame/drivers/iteagle.cpp +++ b/src/mame/drivers/iteagle.cpp @@ -173,15 +173,13 @@ MACHINE_CONFIG_START(iteagle_state::iteagle) MCFG_DEVICE_ADD(PCI_ID_NILE, VRC4373, 0, m_maincpu) MCFG_VRC4373_SET_RAM(0x00800000) MCFG_VRC4373_SET_SIMM0(0x02000000) - MCFG_DEVICE_ADD( PCI_ID_PERIPH, ITEAGLE_PERIPH, 0) - MCFG_DEVICE_ADD( PCI_ID_IDE, IDE_PCI, 0, 0x1080C693, 0x00, 0x0) - MCFG_IDE_PCI_IRQ_HANDLER( INPUTLINE(m_maincpu, MIPS3_IRQ2)) + ITEAGLE_PERIPH(config, PCI_ID_PERIPH, 0); + IDE_PCI(config, PCI_ID_IDE, 0, 0x1080C693, 0x00, 0x0).irq_handler().set_inputline(m_maincpu, MIPS3_IRQ2); - MCFG_DEVICE_ADD( PCI_ID_FPGA, ITEAGLE_FPGA, 0, "screen", m_maincpu, MIPS3_IRQ1, MIPS3_IRQ4) - MCFG_DEVICE_ADD( PCI_ID_SOUND, ES1373, 0) - MCFG_SOUND_ROUTE(0, PCI_ID_SOUND":lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, PCI_ID_SOUND":rspeaker", 1.0) - MCFG_ES1373_IRQ_HANDLER( INPUTLINE(m_maincpu, MIPS3_IRQ3)) + ITEAGLE_FPGA(config, PCI_ID_FPGA, 0, "screen", m_maincpu, MIPS3_IRQ1, MIPS3_IRQ4); + es1373_device &pci_sound(ES1373(config, PCI_ID_SOUND, 0)); + pci_sound.add_route(0, PCI_ID_SOUND":lspeaker", 1.0).add_route(1, PCI_ID_SOUND":rspeaker", 1.0); + pci_sound.irq_handler().set_inputline(m_maincpu, MIPS3_IRQ3); MCFG_DEVICE_ADD(PCI_ID_VIDEO, VOODOO_3_PCI, 0, m_maincpu, "screen") MCFG_VOODOO_PCI_FBMEM(16) diff --git a/src/mame/drivers/jade.cpp b/src/mame/drivers/jade.cpp index 12f99d56acd..41e619fb7a6 100644 --- a/src/mame/drivers/jade.cpp +++ b/src/mame/drivers/jade.cpp @@ -70,14 +70,13 @@ MACHINE_CONFIG_START(jade_state::jade) MCFG_DEVICE_PROGRAM_MAP(mem_map) MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_ADD("ctc1", Z80CTC, XTAL(4'000'000)) + Z80CTC(config, "ctc1", 4_MHz_XTAL); - MCFG_DEVICE_ADD("ctc2", Z80CTC, XTAL(4'000'000)) - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, txca_w)) + z80ctc_device &ctc2(Z80CTC(config, "ctc2", 4_MHz_XTAL)); + ctc2.zc_callback<0>().set("sio", FUNC(z80sio_device::rxca_w)); + ctc2.zc_callback<0>().append("sio", FUNC(z80sio_device::txca_w)); - MCFG_DEVICE_ADD("trg0", CLOCK, XTAL(4'000'000) / 2) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc2", z80ctc_device, trg0)) + CLOCK(config, "trg0", 4_MHz_XTAL / 2).signal_handler().set("ctc2", FUNC(z80ctc_device::trg0)); /* Devices */ MCFG_DEVICE_ADD("sio", Z80SIO, XTAL(4'000'000)) diff --git a/src/mame/drivers/jp.cpp b/src/mame/drivers/jp.cpp index 41faf918895..be2e3fe5400 100644 --- a/src/mame/drivers/jp.cpp +++ b/src/mame/drivers/jp.cpp @@ -340,33 +340,33 @@ MACHINE_CONFIG_START(jp_state::jp) MCFG_NVRAM_ADD_0FILL("nvram") - MCFG_DEVICE_ADD("latch0", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, jp_state, disp_data_w)) MCFG_DEVCB_INVERT + LS259(config, m_latch[0]); + m_latch[0]->q_out_cb<1>().set(FUNC(jp_state::disp_data_w)).invert(); - MCFG_DEVICE_ADD("latch1", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, jp_state, disp_clock_w)) MCFG_DEVCB_INVERT + LS259(config, m_latch[1]); + m_latch[1]->q_out_cb<1>().set(FUNC(jp_state::disp_clock_w)).invert(); - MCFG_DEVICE_ADD("latch2", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, jp_state, disp_strobe_w)) MCFG_DEVCB_INVERT + LS259(config, m_latch[2]); + m_latch[2]->q_out_cb<1>().set(FUNC(jp_state::disp_strobe_w)).invert(); - MCFG_DEVICE_ADD("latch3", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, jp_state, row_w)) + LS259(config, m_latch[3]); + m_latch[3]->q_out_cb<1>().set(FUNC(jp_state::row_w)); - MCFG_DEVICE_ADD("latch4", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, jp_state, row_w)) + LS259(config, m_latch[4]); + m_latch[4]->q_out_cb<1>().set(FUNC(jp_state::row_w)); - MCFG_DEVICE_ADD("latch5", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, jp_state, row_w)) + LS259(config, m_latch[5]); + m_latch[5]->q_out_cb<1>().set(FUNC(jp_state::row_w)); - MCFG_DEVICE_ADD("latch6", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, jp_state, row_w)) + LS259(config, m_latch[6]); + m_latch[6]->q_out_cb<1>().set(FUNC(jp_state::row_w)); - MCFG_DEVICE_ADD("latch7", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, jp_state, row_w)) + LS259(config, m_latch[7]); + m_latch[7]->q_out_cb<1>().set(FUNC(jp_state::row_w)); - MCFG_DEVICE_ADD("latch8", LS259, 0) + LS259(config, m_latch[8]); - MCFG_DEVICE_ADD("latch9", LS259, 0) + LS259(config, m_latch[9]); /* Video */ MCFG_DEFAULT_LAYOUT(layout_jp) diff --git a/src/mame/drivers/jpmsys5.cpp b/src/mame/drivers/jpmsys5.cpp index 9d93ed80713..c59942041d5 100644 --- a/src/mame/drivers/jpmsys5.cpp +++ b/src/mame/drivers/jpmsys5.cpp @@ -35,6 +35,7 @@ #include "includes/jpmsys5.h" #include "machine/clock.h" +#include "machine/input_merger.h" #include "sound/saa1099.h" #include "screen.h" #include "speaker.h" @@ -537,11 +538,6 @@ WRITE_LINE_MEMBER(jpmsys5_state::u26_o1_callback) * *************************************/ -WRITE_LINE_MEMBER(jpmsys5_state::acia_irq) -{ - m_maincpu->set_input_line(INT_6850ACIA, state ? ASSERT_LINE : CLEAR_LINE); -} - WRITE_LINE_MEMBER(jpmsys5_state::a0_tx_w) { m_a0_data_out = state; @@ -588,28 +584,30 @@ void jpmsys5v_state::machine_reset() *************************************/ MACHINE_CONFIG_START(jpmsys5v_state::jpmsys5v) - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(8'000'000)) - MCFG_DEVICE_PROGRAM_MAP(m68000_map) + M68000(config, m_maincpu, 8_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &jpmsys5v_state::m68000_map); - MCFG_DEVICE_ADD("acia6850_0", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(*this, jpmsys5v_state, a0_tx_w)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, jpmsys5v_state, acia_irq)) + INPUT_MERGER_ANY_HIGH(config, "acia_irq").output_handler().set_inputline(m_maincpu, INT_6850ACIA); - MCFG_DEVICE_ADD("acia6850_1", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(*this, jpmsys5v_state, a1_tx_w)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, jpmsys5v_state, acia_irq)) + ACIA6850(config, m_acia6850[0], 0); + m_acia6850[0]->txd_handler().set(FUNC(jpmsys5v_state::a0_tx_w)); + m_acia6850[0]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<0>)); - MCFG_DEVICE_ADD("acia6850_2", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(*this, jpmsys5v_state, a2_tx_w)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, jpmsys5v_state, acia_irq)) + ACIA6850(config, m_acia6850[1], 0); + m_acia6850[1]->txd_handler().set(FUNC(jpmsys5v_state::a1_tx_w)); + m_acia6850[1]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<1>)); - MCFG_DEVICE_ADD("acia_clock", CLOCK, 10000) // What are the correct ACIA clocks ? - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia6850_0", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_0", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_1", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_1", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_2", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_2", acia6850_device, write_rxc)) + ACIA6850(config, m_acia6850[2], 0); + m_acia6850[2]->txd_handler().set(FUNC(jpmsys5v_state::a2_tx_w)); + m_acia6850[2]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<2>)); + + clock_device &acia_clock(CLOCK(config, "acia_clock", 10000)); // What are the correct ACIA clocks ? + acia_clock.signal_handler().set(m_acia6850[0], FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia6850[0], FUNC(acia6850_device::write_rxc)); + acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_rxc)); + acia_clock.signal_handler().append(m_acia6850[2], FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia6850[2], FUNC(acia6850_device::write_rxc)); MCFG_NVRAM_ADD_0FILL("nvram") @@ -807,29 +805,30 @@ void jpmsys5_state::machine_reset() // later (incompatible with earlier revision) motherboards used a YM2413 MACHINE_CONFIG_START(jpmsys5_state::jpmsys5_ym) - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(8'000'000)) + M68000(config, m_maincpu, 8_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &jpmsys5_state::m68000_awp_map); - MCFG_DEVICE_PROGRAM_MAP(m68000_awp_map) + INPUT_MERGER_ANY_HIGH(config, "acia_irq").output_handler().set_inputline(m_maincpu, INT_6850ACIA); - MCFG_DEVICE_ADD("acia6850_0", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(*this, jpmsys5_state, a0_tx_w)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, jpmsys5_state, acia_irq)) + ACIA6850(config, m_acia6850[0], 0); + m_acia6850[0]->txd_handler().set(FUNC(jpmsys5_state::a0_tx_w)); + m_acia6850[0]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<0>)); - MCFG_DEVICE_ADD("acia6850_1", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(*this, jpmsys5_state, a1_tx_w)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, jpmsys5_state, acia_irq)) + ACIA6850(config, m_acia6850[1], 0); + m_acia6850[1]->txd_handler().set(FUNC(jpmsys5_state::a1_tx_w)); + m_acia6850[1]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<1>)); - MCFG_DEVICE_ADD("acia6850_2", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(*this, jpmsys5_state, a2_tx_w)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, jpmsys5_state, acia_irq)) + ACIA6850(config, m_acia6850[2], 0); + m_acia6850[2]->txd_handler().set(FUNC(jpmsys5_state::a2_tx_w)); + m_acia6850[2]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<2>)); - MCFG_DEVICE_ADD("acia_clock", CLOCK, 10000) // What are the correct ACIA clocks ? - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia6850_0", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_0", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_1", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_1", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_2", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_2", acia6850_device, write_rxc)) + clock_device &acia_clock(CLOCK(config, "acia_clock", 10000)); // What are the correct ACIA clocks ? + acia_clock.signal_handler().set(m_acia6850[0], FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia6850[0], FUNC(acia6850_device::write_rxc)); + acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_rxc)); + acia_clock.signal_handler().append(m_acia6850[2], FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia6850[2], FUNC(acia6850_device::write_rxc)); MCFG_NVRAM_ADD_0FILL("nvram") MCFG_S16LF01_ADD("vfd",0) @@ -864,28 +863,30 @@ MACHINE_CONFIG_END // the first rev PCB used an SAA1099 MACHINE_CONFIG_START(jpmsys5_state::jpmsys5) - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(8'000'000)) - MCFG_DEVICE_PROGRAM_MAP(m68000_awp_map_saa) + M68000(config, m_maincpu, 8_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &jpmsys5_state::m68000_awp_map_saa); - MCFG_DEVICE_ADD("acia6850_0", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(*this, jpmsys5_state, a0_tx_w)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, jpmsys5_state, acia_irq)) + INPUT_MERGER_ANY_HIGH(config, "acia_irq").output_handler().set_inputline(m_maincpu, INT_6850ACIA); - MCFG_DEVICE_ADD("acia6850_1", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(*this, jpmsys5_state, a1_tx_w)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, jpmsys5_state, acia_irq)) + ACIA6850(config, m_acia6850[0], 0); + m_acia6850[0]->txd_handler().set(FUNC(jpmsys5_state::a0_tx_w)); + m_acia6850[0]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<0>)); - MCFG_DEVICE_ADD("acia6850_2", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(*this, jpmsys5_state, a2_tx_w)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, jpmsys5_state, acia_irq)) + ACIA6850(config, m_acia6850[1], 0); + m_acia6850[1]->txd_handler().set(FUNC(jpmsys5_state::a1_tx_w)); + m_acia6850[1]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<1>)); - MCFG_DEVICE_ADD("acia_clock", CLOCK, 10000) // What are the correct ACIA clocks ? - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia6850_0", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_0", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_1", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_1", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_2", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia6850_2", acia6850_device, write_rxc)) + ACIA6850(config, m_acia6850[2], 0); + m_acia6850[2]->txd_handler().set(FUNC(jpmsys5_state::a2_tx_w)); + m_acia6850[2]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<2>)); + + clock_device &acia_clock(CLOCK(config, "acia_clock", 10000)); // What are the correct ACIA clocks ? + acia_clock.signal_handler().set(m_acia6850[0], FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia6850[0], FUNC(acia6850_device::write_rxc)); + acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_rxc)); + acia_clock.signal_handler().append(m_acia6850[2], FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append(m_acia6850[2], FUNC(acia6850_device::write_rxc)); MCFG_NVRAM_ADD_0FILL("nvram") MCFG_S16LF01_ADD("vfd",0) diff --git a/src/mame/drivers/kaypro.cpp b/src/mame/drivers/kaypro.cpp index 9bf3fb191ce..24ec3ce48bf 100644 --- a/src/mame/drivers/kaypro.cpp +++ b/src/mame/drivers/kaypro.cpp @@ -226,25 +226,25 @@ MACHINE_CONFIG_START(kaypro_state::kayproii) /* devices */ MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro, "com,cpm", 3) - MCFG_DEVICE_ADD("kbd", KAYPRO_10_KEYBOARD, 0) - MCFG_KAYPRO10KBD_RXD_CB(WRITELINE("sio", z80sio_device, rxb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, syncb_w)) + kaypro_10_keyboard_device &kbd(KAYPRO_10_KEYBOARD(config, "kbd")); + kbd.rxd_cb().set("sio", FUNC(z80sio_device::rxb_w)); + kbd.rxd_cb().append("sio", FUNC(z80sio_device::syncb_w)); MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer") MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, kaypro_state, write_centronics_busy)) MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") - MCFG_DEVICE_ADD("serial", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("sio", z80sio_device, rxa_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, synca_w)) // TODO: confirm this is connected - MCFG_RS232_CTS_HANDLER(WRITELINE("sio", z80sio_device, ctsa_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("sio", z80sio_device, dcda_w)) + rs232_port_device &serial(RS232_PORT(config, "serial", default_rs232_devices, nullptr)); + serial.rxd_handler().set("sio", FUNC(z80sio_device::rxa_w)); + serial.rxd_handler().append("sio", FUNC(z80sio_device::synca_w)); // TODO: confirm this is connected + serial.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w)); + serial.dcd_handler().set("sio", FUNC(z80sio_device::dcda_w)); - MCFG_DEVICE_ADD("brg", COM8116, XTAL(5'068'800)) // WD1943, SMC8116 - MCFG_COM8116_FT_HANDLER(WRITELINE("sio", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, txca_w)) - MCFG_COM8116_FR_HANDLER(WRITELINE("sio", z80sio_device, rxtxcb_w)) + com8116_device &brg(COM8116(config, "brg", XTAL(5'068'800))); // WD1943, SMC8116 + brg.ft_handler().set("sio", FUNC(z80sio_device::rxca_w)); + brg.ft_handler().append("sio", FUNC(z80sio_device::txca_w)); + brg.fr_handler().set("sio", FUNC(z80sio_device::rxtxcb_w)); MCFG_DEVICE_ADD("z80pio_g", Z80PIO, 20_MHz_XTAL / 8) MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) @@ -322,28 +322,27 @@ MACHINE_CONFIG_START(kaypro_state::kaypro484) MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro, "com,cpm", 3) - MCFG_DEVICE_ADD("kbd", KAYPRO_10_KEYBOARD, 0) - MCFG_KAYPRO10KBD_RXD_CB(WRITELINE("sio_1", z80sio_device, rxb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio_1", z80sio_device, syncb_w)) + kaypro_10_keyboard_device &kbd(KAYPRO_10_KEYBOARD(config, "kbd")); + kbd.rxd_cb().set("sio_1", FUNC(z80sio_device::rxb_w)); + kbd.rxd_cb().append("sio_1", FUNC(z80sio_device::syncb_w)); - MCFG_CLOCK_ADD("kbdtxrxc", 4800) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("sio_1", z80sio_device, rxtxcb_w)) + CLOCK(config, "kbdtxrxc", 4800).signal_handler().set("sio_1", FUNC(z80sio_device::rxtxcb_w)); MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer") MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, kaypro_state, write_centronics_busy)) MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") - MCFG_DEVICE_ADD("modem", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("sio_1", z80sio_device, rxa_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio_1", z80sio_device, synca_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("sio_1", z80sio_device, ctsa_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("sio_1", z80sio_device, dcda_w)) + rs232_port_device &modem(RS232_PORT(config, "modem", default_rs232_devices, nullptr)); + modem.rxd_handler().set("sio_1", FUNC(z80sio_device::rxa_w)); + modem.rxd_handler().append("sio_1", FUNC(z80sio_device::synca_w)); + modem.cts_handler().set("sio_1", FUNC(z80sio_device::ctsa_w)); + modem.dcd_handler().set("sio_1", FUNC(z80sio_device::dcda_w)); - MCFG_DEVICE_ADD("serprn", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("sio_2", z80sio_device, rxa_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio_2", z80sio_device, synca_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("sio_2", z80sio_device, ctsa_w)) + rs232_port_device &serprn(RS232_PORT(config, "serprn", default_rs232_devices, nullptr)); + serprn.rxd_handler().set("sio_2", FUNC(z80sio_device::rxa_w)); + serprn.rxd_handler().append("sio_2", FUNC(z80sio_device::synca_w)); + serprn.cts_handler().set("sio_2", FUNC(z80sio_device::ctsa_w)); MCFG_DEVICE_ADD("sio_1", Z80SIO, 16_MHz_XTAL / 4) MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // FIXME: use a combiner @@ -356,11 +355,11 @@ MACHINE_CONFIG_START(kaypro_state::kaypro484) MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // FIXME: use a combiner MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("serprn", rs232_port_device, write_txd)) - MCFG_DEVICE_ADD("brg", COM8116, XTAL(5'068'800)) // WD1943, SMC8116 - MCFG_COM8116_FR_HANDLER(WRITELINE("sio_1", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio_1", z80sio_device, txca_w)) - MCFG_COM8116_FT_HANDLER(WRITELINE("sio_2", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio_2", z80sio_device, txca_w)) + com8116_device &brg(COM8116(config, "brg", XTAL(5'068'800))); // WD1943, SMC8116 + brg.fr_handler().set("sio_1", FUNC(z80sio_device::rxca_w)); + brg.fr_handler().append("sio_1", FUNC(z80sio_device::txca_w)); + brg.ft_handler().set("sio_2", FUNC(z80sio_device::rxca_w)); + brg.ft_handler().append("sio_2", FUNC(z80sio_device::txca_w)); MCFG_DEVICE_ADD("fdc", FD1793, 16_MHz_XTAL / 16) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, kaypro_state, fdc_intrq_w)) diff --git a/src/mame/drivers/kdt6.cpp b/src/mame/drivers/kdt6.cpp index 8aeb0c48814..9be939079ad 100644 --- a/src/mame/drivers/kdt6.cpp +++ b/src/mame/drivers/kdt6.cpp @@ -654,41 +654,41 @@ MACHINE_CONFIG_START(kdt6_state::psi98) MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(*this, kdt6_state, io_w)) // jumper J3 allows selection of 16MHz / 8 instead - MCFG_CLOCK_ADD("uart_clk", XTAL(9'830'400) / 8) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc1", z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc1", z80ctc_device, trg2)) + clock_device &uart_clk(CLOCK(config, "uart_clk", XTAL(9'830'400) / 8)); + uart_clk.signal_handler().set("ctc1", FUNC(z80ctc_device::trg1)); + uart_clk.signal_handler().append("ctc1", FUNC(z80ctc_device::trg2)); - MCFG_DEVICE_ADD("ctc1", Z80CTC, XTAL(16'000'000) / 4) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("sio", z80sio_device, rxtxcb_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE("sio", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, txca_w)) + z80ctc_device &ctc1(Z80CTC(config, "ctc1", XTAL(16'000'000) / 4)); + ctc1.intr_callback().set_inputline(m_cpu, INPUT_LINE_IRQ0); + ctc1.zc_callback<1>().set(m_sio, FUNC(z80sio_device::rxtxcb_w)); + ctc1.zc_callback<2>().set(m_sio, FUNC(z80sio_device::rxca_w)); + ctc1.zc_callback<2>().append(m_sio, FUNC(z80sio_device::txca_w)); - MCFG_DEVICE_ADD("ctc2", Z80CTC, XTAL(16'000'000) / 4) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC0_CB(WRITELINE("speaker", speaker_sound_device, level_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE("ctc2", z80ctc_device, trg3)) + z80ctc_device &ctc2(Z80CTC(config, "ctc2", XTAL(16'000'000) / 4)); + ctc2.intr_callback().set_inputline(m_cpu, INPUT_LINE_IRQ0); + ctc2.zc_callback<0>().set("speaker", FUNC(speaker_sound_device::level_w)); + ctc2.zc_callback<2>().set("ctc2", FUNC(z80ctc_device::trg3)); - MCFG_DEVICE_ADD("sio", Z80SIO, XTAL(16'000'000) / 4) - MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("rs232a", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE("rs232a", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE("rs232a", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE(*this, kdt6_state, siob_tx_w)) - MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE("rs232b", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("rs232b", rs232_port_device, write_rts)) + Z80SIO(config, m_sio, XTAL(16'000'000) / 4); + m_sio->out_int_callback().set_inputline(m_cpu, INPUT_LINE_IRQ0); + m_sio->out_txda_callback().set("rs232a", FUNC(rs232_port_device::write_txd)); + m_sio->out_dtra_callback().set("rs232a", FUNC(rs232_port_device::write_dtr)); + m_sio->out_rtsa_callback().set("rs232a", FUNC(rs232_port_device::write_rts)); + m_sio->out_txdb_callback().set(FUNC(kdt6_state::siob_tx_w)); + m_sio->out_dtrb_callback().set(m_rs232b, FUNC(rs232_port_device::write_dtr)); + m_sio->out_rtsb_callback().set(m_rs232b, FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("sio", z80sio_device, rxa_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("sio", z80sio_device, dcda_w)) - MCFG_RS232_DSR_HANDLER(WRITELINE("sio", z80sio_device, synca_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("sio", z80sio_device, ctsa_w)) MCFG_DEVCB_XOR(1) + rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, nullptr)); + rs232a.rxd_handler().set(m_sio, FUNC(z80sio_device::rxa_w)); + rs232a.dcd_handler().set(m_sio, FUNC(z80sio_device::dcda_w)); + rs232a.dsr_handler().set(m_sio, FUNC(z80sio_device::synca_w)); + rs232a.cts_handler().set(m_sio, FUNC(z80sio_device::ctsa_w)).invert(); - MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE(*this, kdt6_state, rs232b_rx_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("sio", z80sio_device, dcdb_w)) - MCFG_RS232_DSR_HANDLER(WRITELINE("sio", z80sio_device, syncb_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("sio", z80sio_device, ctsb_w)) MCFG_DEVCB_XOR(1) + RS232_PORT(config, m_rs232b, default_rs232_devices, nullptr); + m_rs232b->rxd_handler().set(FUNC(kdt6_state::rs232b_rx_w)); + m_rs232b->dcd_handler().set(m_sio, FUNC(z80sio_device::dcdb_w)); + m_rs232b->dsr_handler().set(m_sio, FUNC(z80sio_device::syncb_w)); + m_rs232b->cts_handler().set(m_sio, FUNC(z80sio_device::ctsb_w)).invert(); MCFG_DEVICE_ADD("pio", Z80PIO, XTAL(16'000'000) / 4) MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) diff --git a/src/mame/drivers/kingobox.cpp b/src/mame/drivers/kingobox.cpp index 5f7ff56bf8c..7244289575e 100644 --- a/src/mame/drivers/kingobox.cpp +++ b/src/mame/drivers/kingobox.cpp @@ -465,28 +465,27 @@ void kingofb_state::machine_reset() MACHINE_CONFIG_START(kingofb_state::kingofb) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 4000000) /* 4.0 MHz */ - MCFG_DEVICE_PROGRAM_MAP(kingobox_map) + Z80(config, m_maincpu, 4000000); // 4.0 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &kingofb_state::kingobox_map); - MCFG_DEVICE_ADD("video", Z80, 4000000) /* 4.0 MHz */ - MCFG_DEVICE_PROGRAM_MAP(kingobox_video_map) + Z80(config, m_video_cpu, 4000000); // 4.0 MHz + m_video_cpu->set_addrmap(AS_PROGRAM, &kingofb_state::kingobox_video_map); - MCFG_DEVICE_ADD("sprite", Z80, 4000000) /* 4.0 MHz */ - MCFG_DEVICE_PROGRAM_MAP(kingobox_sprite_map) + Z80(config, m_sprite_cpu, 4000000); // 4.0 MHz + m_sprite_cpu->set_addrmap(AS_PROGRAM, &kingofb_state::kingobox_sprite_map); - MCFG_INPUT_MERGER_ALL_HIGH("nmigate") - MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("video", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sprite", INPUT_LINE_NMI)) + INPUT_MERGER_ALL_HIGH(config, m_nmigate); + m_nmigate->output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); + m_nmigate->output_handler().append_inputline(m_video_cpu, INPUT_LINE_NMI); + m_nmigate->output_handler().append_inputline(m_sprite_cpu, INPUT_LINE_NMI); - MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) /* 4.0 MHz */ - MCFG_DEVICE_PROGRAM_MAP(kingobox_sound_map) - MCFG_DEVICE_IO_MAP(kingobox_sound_io_map) + Z80(config, m_audiocpu, 4000000); // 4.0 MHz + m_audiocpu->set_addrmap(AS_PROGRAM, &kingofb_state::kingobox_sound_map); + m_audiocpu->set_addrmap(AS_IO, &kingofb_state::kingobox_sound_io_map); - MCFG_DEVICE_ADD("soundnmi", CLOCK, 6000) /* Hz */ - MCFG_CLOCK_SIGNAL_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI)) + CLOCK(config, "soundnmi", 6000).signal_handler().set_inputline(m_audiocpu, INPUT_LINE_NMI); - MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* We really need heavy synching among the processors */ + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) // We really need heavy synching among the processors /* video hardware */ @@ -524,28 +523,27 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(kingofb_state::ringking) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 4000000) /* 4.0 MHz */ - MCFG_DEVICE_PROGRAM_MAP(ringking_map) + Z80(config, m_maincpu, 4000000); // 4.0 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &kingofb_state::ringking_map); - MCFG_DEVICE_ADD("video", Z80, 4000000) /* 4.0 MHz */ - MCFG_DEVICE_PROGRAM_MAP(ringking_video_map) + Z80(config, m_video_cpu, 4000000); // 4.0 MHz + m_video_cpu->set_addrmap(AS_PROGRAM, &kingofb_state::ringking_video_map); - MCFG_DEVICE_ADD("sprite", Z80, 4000000) /* 4.0 MHz */ - MCFG_DEVICE_PROGRAM_MAP(ringking_sprite_map) + Z80(config, m_sprite_cpu, 4000000); // 4.0 MHz + m_sprite_cpu->set_addrmap(AS_PROGRAM, &kingofb_state::ringking_sprite_map); - MCFG_INPUT_MERGER_ALL_HIGH("nmigate") - MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("video", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sprite", INPUT_LINE_NMI)) + INPUT_MERGER_ALL_HIGH(config, m_nmigate); + m_nmigate->output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); + m_nmigate->output_handler().append_inputline(m_video_cpu, INPUT_LINE_NMI); + m_nmigate->output_handler().append_inputline(m_sprite_cpu, INPUT_LINE_NMI); - MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) /* 4.0 MHz */ - MCFG_DEVICE_PROGRAM_MAP(kingobox_sound_map) - MCFG_DEVICE_IO_MAP(ringking_sound_io_map) + Z80(config, m_audiocpu, 4000000); // 4.0 MHz + m_audiocpu->set_addrmap(AS_PROGRAM, &kingofb_state::kingobox_sound_map); + m_audiocpu->set_addrmap(AS_IO, &kingofb_state::ringking_sound_io_map); - MCFG_DEVICE_ADD("soundnmi", CLOCK, 6000) /* Hz */ - MCFG_CLOCK_SIGNAL_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI)) + CLOCK(config, "soundnmi", 6000).signal_handler().set_inputline(m_audiocpu, INPUT_LINE_NMI); - MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* We really need heavy synching among the processors */ + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) // We really need heavy synching among the processors /* video hardware */ diff --git a/src/mame/drivers/kinst.cpp b/src/mame/drivers/kinst.cpp index 2115fc25dd7..8a40c968940 100644 --- a/src/mame/drivers/kinst.cpp +++ b/src/mame/drivers/kinst.cpp @@ -727,9 +727,8 @@ MACHINE_CONFIG_START(kinst_state::kinst) MCFG_DEVICE_PROGRAM_MAP(main_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", kinst_state, irq0_start) - MCFG_ATA_INTERFACE_ADD("ata", ata_devices, "hdd", nullptr, true) - MCFG_ATA_INTERFACE_IRQ_HANDLER(INPUTLINE(m_maincpu, 1)) + MCFG_ATA_INTERFACE_IRQ_HANDLER(INPUTLINE("maincpu", 1)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/konin.cpp b/src/mame/drivers/konin.cpp index 82e0a43ec90..07671e183ce 100644 --- a/src/mame/drivers/konin.cpp +++ b/src/mame/drivers/konin.cpp @@ -141,24 +141,24 @@ MACHINE_CONFIG_START(konin_state::konin) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("intlatch", i8212_device, inta_cb) MCFG_DEVICE_ADD("intlatch", I8212, 0) - MCFG_I8212_MD_CALLBACK(GND) + MCFG_I8212_MD_CALLBACK(CONSTANT(0)) MCFG_I8212_DI_CALLBACK(READ8("picu", i8214_device, vector_r)) MCFG_I8212_INT_CALLBACK(INPUTLINE("maincpu", I8085_INTR_LINE)) MCFG_DEVICE_ADD("picu", I8214, XTAL(4'000'000)) MCFG_I8214_INT_CALLBACK(WRITELINE("intlatch", i8212_device, stb_w)) - MCFG_DEVICE_ADD("mainpit", PIT8253, 0) + pit8253_device &mainpit(PIT8253(config, "mainpit", 0)); // wild guess at UART clock and source - MCFG_PIT8253_CLK0(1536000) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + mainpit.set_clk<0>(1536000); + mainpit.out_handler<0>().set("uart", FUNC(i8251_device::write_txc)); + mainpit.out_handler<0>().append("uart", FUNC(i8251_device::write_rxc)); - MCFG_DEVICE_ADD("mainppi", I8255, 0) + I8255(config, "mainppi", 0); - MCFG_DEVICE_ADD("iopit", PIT8253, 0) + PIT8253(config, m_iopit, 0); - MCFG_DEVICE_ADD("ioppi", I8255, 0) + I8255(config, m_ioppi, 0); MCFG_DEVICE_ADD("uart", I8251, 0) MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/kopunch.cpp b/src/mame/drivers/kopunch.cpp index 8fbacc46d01..249bcd57a5a 100644 --- a/src/mame/drivers/kopunch.cpp +++ b/src/mame/drivers/kopunch.cpp @@ -247,24 +247,24 @@ MACHINE_CONFIG_START(kopunch_state::kopunch) MCFG_I8255_IN_PORTB_CB(READ8(*this, kopunch_state, sensors1_r)) MCFG_I8255_IN_PORTC_CB(READ8(*this, kopunch_state, sensors2_r)) - MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) + i8255_device &ppi1(I8255A(config, "ppi8255_1", 0)); // $34 - always $80 (PPI mode 0, ports A & B & C as output) - MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, kopunch_state, coin_w)) - MCFG_I8255_OUT_PORTB_CB(LOGGER("PPI8255 - unmapped write port B")) - MCFG_I8255_OUT_PORTC_CB(LOGGER("PPI8255 - unmapped write port C")) + ppi1.out_pa_callback().set(FUNC(kopunch_state::coin_w)); + ppi1.out_pb_callback().set_log("PPI8255 - unmapped write port B"); + ppi1.out_pc_callback().set_log("PPI8255 - unmapped write port C"); - MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0) + i8255_device &ppi2(I8255A(config, "ppi8255_2", 0)); // $38 - always $89 (PPI mode 0, ports A & B as output, port C as input) - MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, kopunch_state, lamp_w)) - MCFG_I8255_OUT_PORTB_CB(LOGGER("PPI8255 - unmapped write port B")) - MCFG_I8255_IN_PORTC_CB(IOPORT("DSW")) + ppi2.out_pa_callback().set(FUNC(kopunch_state::lamp_w)); + ppi2.out_pb_callback().set_log("PPI8255 - unmapped write port B"); + ppi2.in_pc_callback().set_ioport("DSW"); - MCFG_DEVICE_ADD("ppi8255_3", I8255A, 0) + i8255_device &ppi3(I8255A(config, "ppi8255_3", 0)); // $3c - always $88 (PPI mode 0, ports A & B & lower C as output, upper C as input) - MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, kopunch_state, scroll_x_w)) - MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, kopunch_state, scroll_y_w)) - MCFG_I8255_IN_PORTC_CB(IOPORT("P2")) - MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, kopunch_state, gfxbank_w)) + ppi3.out_pa_callback().set(FUNC(kopunch_state::scroll_x_w)); + ppi3.out_pb_callback().set(FUNC(kopunch_state::scroll_y_w)); + ppi3.in_pc_callback().set_ioport("P2"); + ppi3.out_pc_callback().set(FUNC(kopunch_state::gfxbank_w)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/kyugo.cpp b/src/mame/drivers/kyugo.cpp index c4174157658..49f42ac102e 100644 --- a/src/mame/drivers/kyugo.cpp +++ b/src/mame/drivers/kyugo.cpp @@ -534,10 +534,10 @@ MACHINE_CONFIG_START(kyugo_state::kyugo_base) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, kyugo_state, nmi_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, kyugo_state, flipscreen_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &mainlatch(LS259(config, "mainlatch")); + mainlatch.q_out_cb<0>().set(FUNC(kyugo_state::nmi_mask_w)); + mainlatch.q_out_cb<1>().set(FUNC(kyugo_state::flipscreen_w)); + mainlatch.q_out_cb<2>().set_inputline(m_subcpu, INPUT_LINE_RESET).invert(); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/liberatr.cpp b/src/mame/drivers/liberatr.cpp index 9cff2742c9e..9ed5915adc9 100644 --- a/src/mame/drivers/liberatr.cpp +++ b/src/mame/drivers/liberatr.cpp @@ -429,15 +429,15 @@ MACHINE_CONFIG_START(liberatr_state::liberatr) MCFG_DEVICE_ADD("earom", ER2055, 0) - MCFG_DEVICE_ADD("outlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT // START LED1 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // START LED2 - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // TBSWP - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // SPARE - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, liberatr_state, trackball_reset_w)) // CTRLD - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, liberatr_state, coin_counter_right_w)) - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, liberatr_state, coin_counter_left_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, liberatr_state, planet_select_w)) + LS259(config, m_outlatch); + m_outlatch->q_out_cb<0>().set_output("led0").invert(); // START LED1 + m_outlatch->q_out_cb<1>().set_output("led1").invert(); // START LED2 + m_outlatch->q_out_cb<2>().set_nop(); // TBSWP + m_outlatch->q_out_cb<3>().set_nop(); // SPARE + m_outlatch->q_out_cb<4>().set(FUNC(liberatr_state::trackball_reset_w)); // CTRLD + m_outlatch->q_out_cb<5>().set(FUNC(liberatr_state::coin_counter_right_w)); + m_outlatch->q_out_cb<6>().set(FUNC(liberatr_state::coin_counter_left_w)); + m_outlatch->q_out_cb<7>().set([this] (int state) { m_planet_select = state; }); MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/m24.cpp b/src/mame/drivers/m24.cpp index 0b494adce18..4dc916ddf52 100644 --- a/src/mame/drivers/m24.cpp +++ b/src/mame/drivers/m24.cpp @@ -297,7 +297,7 @@ MACHINE_CONFIG_START(m24_state::olivetti) MCFG_DEVICE_MODIFY("mb:dma8237") MCFG_I8237_OUT_HREQ_CB(WRITELINE(*this, m24_state, dma_hrq_w)) MCFG_DEVICE_MODIFY("mb:pic8259") - devcb = &downcast(*device).set_out_int_callback(DEVCB_WRITELINE(*this, m24_state, int_w)); + downcast(*device).set_out_int_callback(DEVCB_WRITELINE(*this, m24_state, int_w)); /* software lists */ MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150") diff --git a/src/mame/drivers/m79152pc.cpp b/src/mame/drivers/m79152pc.cpp index a4287e8e44a..d39720ed3b3 100644 --- a/src/mame/drivers/m79152pc.cpp +++ b/src/mame/drivers/m79152pc.cpp @@ -144,9 +144,9 @@ MACHINE_CONFIG_START(m79152pc_state::m79152pc) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_m79152pc) MCFG_PALETTE_ADD_MONOCHROME("palette") - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", z80sio_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", z80sio_device, rxca_w)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set(m_uart, FUNC(z80sio_device::txca_w)); + uart_clock.signal_handler().append(m_uart, FUNC(z80sio_device::rxca_w)); MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL(4'000'000)) //MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) diff --git a/src/mame/drivers/magmax.cpp b/src/mame/drivers/magmax.cpp index 65cb698f624..726d2219e8b 100644 --- a/src/mame/drivers/magmax.cpp +++ b/src/mame/drivers/magmax.cpp @@ -366,9 +366,9 @@ MACHINE_CONFIG_START(magmax_state::magmax) MCFG_DEVICE_ADD(m_ay[2], AY8910, XTAL(20'000'000)/16) /* verified on pcb */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, 0)) - MCFG_GENERIC_LATCH_SEPARATE_ACKNOWLEDGE(true) + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); + m_soundlatch->set_separate_acknowledge(true); MACHINE_CONFIG_END diff --git a/src/mame/drivers/mappy.cpp b/src/mame/drivers/mappy.cpp index 58cf22ed556..6c948e7a9b3 100644 --- a/src/mame/drivers/mappy.cpp +++ b/src/mame/drivers/mappy.cpp @@ -1333,22 +1333,21 @@ MACHINE_CONFIG_START(mappy_state::superpac_common) MCFG_DEVICE_ADD("sub", MC6809E, PIXEL_CLOCK/4) /* 1.536 MHz */ MCFG_DEVICE_PROGRAM_MAP(superpac_cpu2_map) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2M on CPU board - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, mappy_state, int_on_2_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, mappy_state, int_on_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("namco", namco_15xx_device, sound_enable_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE("namcoio_1", namcoio_device, set_reset_line)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("namcoio_2", namcoio_device, set_reset_line)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &mainlatch(LS259(config, "mainlatch")); // 2M on CPU board + mainlatch.q_out_cb<0>().set(FUNC(mappy_state::int_on_2_w)); + mainlatch.q_out_cb<1>().set(FUNC(mappy_state::int_on_w)); + mainlatch.q_out_cb<3>().set(m_namco_15xx, FUNC(namco_15xx_device::sound_enable_w)); + mainlatch.q_out_cb<4>().set(m_namcoio[0], FUNC(namcoio_device::set_reset_line)).invert(); + mainlatch.q_out_cb<4>().append(m_namcoio[1], FUNC(namcoio_device::set_reset_line)).invert(); + mainlatch.q_out_cb<5>().set_inputline(m_subcpu, INPUT_LINE_RESET).invert(); MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) - MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ - /* synchronization of the CPUs */ + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) // 100 CPU slices per frame - an high value to ensure proper synchronization of the CPUs - MCFG_DEVICE_ADD("dipmux", LS157, 0) - MCFG_74157_A_IN_CB(IOPORT("DSW2")) - MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) + ls157_device &dipmux(LS157(config, "dipmux")); + dipmux.a_in_callback().set_ioport("DSW2"); + dipmux.b_in_callback().set_ioport("DSW2").rshift(4); /* video hardware */ MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_superpac) @@ -1373,60 +1372,60 @@ MACHINE_CONFIG_START(mappy_state::superpac_common) MACHINE_CONFIG_END -MACHINE_CONFIG_START(mappy_state::superpac) - +void mappy_state::superpac(machine_config &config) +{ superpac_common(config); - MCFG_DEVICE_ADD("namcoio_1", NAMCO_56XX, 0) - MCFG_NAMCO56XX_IN_0_CB(IOPORT("COINS")) - MCFG_NAMCO56XX_IN_1_CB(IOPORT("P1")) - MCFG_NAMCO56XX_IN_2_CB(IOPORT("P2")) - MCFG_NAMCO56XX_IN_3_CB(IOPORT("BUTTONS")) + NAMCO_56XX(config, m_namcoio[0], 0); + m_namcoio[0]->in_callback<0>().set_ioport("COINS"); + m_namcoio[0]->in_callback<1>().set_ioport("P1"); + m_namcoio[0]->in_callback<2>().set_ioport("P2"); + m_namcoio[0]->in_callback<3>().set_ioport("BUTTONS"); - MCFG_DEVICE_ADD("namcoio_2", NAMCO_56XX, 0) - MCFG_NAMCO56XX_IN_0_CB(READ8("dipmux", ls157_device, output_r)) - MCFG_NAMCO56XX_IN_1_CB(IOPORT("DSW1")) - MCFG_NAMCO56XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO56XX_IN_3_CB(IOPORT("DSW0")) - MCFG_NAMCO56XX_OUT_0_CB(WRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(mappy_state::pacnpal) + NAMCO_56XX(config, m_namcoio[1], 0); + m_namcoio[1]->in_callback<0>().set("dipmux", FUNC(ls157_device::output_r)); + m_namcoio[1]->in_callback<1>().set_ioport("DSW1"); + m_namcoio[1]->in_callback<2>().set_ioport("DSW1").rshift(4); + m_namcoio[1]->in_callback<3>().set_ioport("DSW0"); + m_namcoio[1]->out_callback<0>().set("dipmux", FUNC(ls157_device::select_w)).bit(0); +} +void mappy_state::pacnpal(machine_config &config) +{ superpac_common(config); - MCFG_DEVICE_ADD("namcoio_1", NAMCO_56XX, 0) - MCFG_NAMCO56XX_IN_0_CB(IOPORT("COINS")) - MCFG_NAMCO56XX_IN_1_CB(IOPORT("P1")) - MCFG_NAMCO56XX_IN_2_CB(IOPORT("P2")) - MCFG_NAMCO56XX_IN_3_CB(IOPORT("BUTTONS")) - MCFG_NAMCO56XX_OUT_0_CB(WRITE8(*this, mappy_state, out_lamps)) + NAMCO_56XX(config, m_namcoio[0], 0); + m_namcoio[0]->in_callback<0>().set_ioport("COINS"); + m_namcoio[0]->in_callback<1>().set_ioport("P1"); + m_namcoio[0]->in_callback<2>().set_ioport("P2"); + m_namcoio[0]->in_callback<3>().set_ioport("BUTTONS"); + m_namcoio[0]->out_callback<0>().set(FUNC(mappy_state::out_lamps)); - MCFG_DEVICE_ADD("namcoio_2", NAMCO_59XX, 0) - MCFG_NAMCO59XX_IN_0_CB(READ8("dipmux", ls157_device, output_r)) - MCFG_NAMCO59XX_IN_1_CB(IOPORT("DSW1")) - MCFG_NAMCO59XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO59XX_IN_3_CB(IOPORT("DSW0")) - MCFG_NAMCO59XX_OUT_0_CB(WRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0) -MACHINE_CONFIG_END + NAMCO_59XX(config, m_namcoio[1], 0); + m_namcoio[1]->in_callback<0>().set("dipmux", FUNC(ls157_device::output_r)); + m_namcoio[1]->in_callback<1>().set_ioport("DSW1"); + m_namcoio[1]->in_callback<2>().set_ioport("DSW1").rshift(4); + m_namcoio[1]->in_callback<3>().set_ioport("DSW0"); + m_namcoio[1]->out_callback<0>().set("dipmux", FUNC(ls157_device::select_w)).bit(0); +} MACHINE_CONFIG_START(mappy_state::grobda) superpac_common(config); - MCFG_DEVICE_ADD("namcoio_1", NAMCO_58XX, 0) - MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS")) - MCFG_NAMCO58XX_IN_1_CB(IOPORT("P1")) - MCFG_NAMCO58XX_IN_2_CB(IOPORT("P2")) - MCFG_NAMCO58XX_IN_3_CB(IOPORT("BUTTONS")) + NAMCO_58XX(config, m_namcoio[0], 0); + m_namcoio[0]->in_callback<0>().set_ioport("COINS"); + m_namcoio[0]->in_callback<1>().set_ioport("P1"); + m_namcoio[0]->in_callback<2>().set_ioport("P2"); + m_namcoio[0]->in_callback<3>().set_ioport("BUTTONS"); - MCFG_DEVICE_ADD("namcoio_2", NAMCO_56XX, 0) - MCFG_NAMCO56XX_IN_0_CB(READ8("dipmux", ls157_device, output_r)) - MCFG_NAMCO56XX_IN_1_CB(IOPORT("DSW1")) - MCFG_NAMCO56XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO56XX_IN_3_CB(IOPORT("DSW0")) - MCFG_NAMCO56XX_OUT_0_CB(WRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0) + NAMCO_56XX(config, m_namcoio[1], 0); + m_namcoio[1]->in_callback<0>().set("dipmux", FUNC(ls157_device::output_r)); + m_namcoio[1]->in_callback<1>().set_ioport("DSW1"); + m_namcoio[1]->in_callback<2>().set_ioport("DSW1").rshift(4); + m_namcoio[1]->in_callback<3>().set_ioport("DSW0"); + m_namcoio[1]->out_callback<0>().set("dipmux", FUNC(ls157_device::select_w)).bit(0); /* sound hardware */ MCFG_DEVICE_ADD("dac", DAC_4BIT_BINARY_WEIGHTED, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.275) // alternate route to 15XX-related DAC? @@ -1447,36 +1446,36 @@ MACHINE_CONFIG_START(mappy_state::phozon) MCFG_DEVICE_ADD("sub2", MC6809E, PIXEL_CLOCK/4) /* SUB CPU */ MCFG_DEVICE_PROGRAM_MAP(phozon_cpu3_map) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5C - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, mappy_state, int_on_2_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, mappy_state, int_on_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, mappy_state, int_on_3_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("namco", namco_15xx_device, sound_enable_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &mainlatch(LS259(config, "mainlatch")); // 5C + mainlatch.q_out_cb<0>().set(FUNC(mappy_state::int_on_2_w)); + mainlatch.q_out_cb<1>().set(FUNC(mappy_state::int_on_w)); + mainlatch.q_out_cb<2>().set(FUNC(mappy_state::int_on_3_w)); + mainlatch.q_out_cb<3>().set(m_namco_15xx, FUNC(namco_15xx_device::sound_enable_w)); + mainlatch.q_out_cb<4>().set(m_namcoio[0], FUNC(namcoio_device::set_reset_line)).invert(); + mainlatch.q_out_cb<4>().append(m_namcoio[1], FUNC(namcoio_device::set_reset_line)).invert(); + mainlatch.q_out_cb<5>().set_inputline(m_subcpu, INPUT_LINE_RESET).invert(); + mainlatch.q_out_cb<6>().set_inputline(m_subcpu2, INPUT_LINE_RESET).invert(); MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) - MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ - /* synchronization of the CPUs */ - MCFG_DEVICE_ADD("namcoio_1", NAMCO_58XX, 0) - MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS")) - MCFG_NAMCO58XX_IN_1_CB(IOPORT("P1")) - MCFG_NAMCO58XX_IN_2_CB(IOPORT("P2")) - MCFG_NAMCO58XX_IN_3_CB(IOPORT("BUTTONS")) + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) // 100 CPU slices per frame - an high value to ensure proper synchronization of the CPUs - MCFG_DEVICE_ADD("namcoio_2", NAMCO_56XX, 0) - MCFG_NAMCO56XX_IN_0_CB(READ8("dipmux", ls157_device, output_r)) - MCFG_NAMCO56XX_IN_1_CB(IOPORT("DSW1")) - MCFG_NAMCO56XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO56XX_IN_3_CB(IOPORT("DSW0")) - MCFG_NAMCO56XX_OUT_0_CB(WRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0) + NAMCO_58XX(config, m_namcoio[0], 0); + m_namcoio[0]->in_callback<0>().set_ioport("COINS"); + m_namcoio[0]->in_callback<1>().set_ioport("P1"); + m_namcoio[0]->in_callback<2>().set_ioport("P2"); + m_namcoio[0]->in_callback<3>().set_ioport("BUTTONS"); - MCFG_DEVICE_ADD("dipmux", LS157, 0) - MCFG_74157_A_IN_CB(IOPORT("DSW2")) - MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) + NAMCO_56XX(config, m_namcoio[1], 0); + m_namcoio[1]->in_callback<0>().set("dipmux", FUNC(ls157_device::output_r)); + m_namcoio[1]->in_callback<1>().set_ioport("DSW1"); + m_namcoio[1]->in_callback<2>().set_ioport("DSW1").rshift(4); + m_namcoio[1]->in_callback<3>().set_ioport("DSW0"); + m_namcoio[1]->out_callback<0>().set("dipmux", FUNC(ls157_device::select_w)).bit(0); + + ls157_device &dipmux(LS157(config, "dipmux")); + dipmux.a_in_callback().set_ioport("DSW2"); + dipmux.b_in_callback().set_ioport("DSW2").rshift(4); /* video hardware */ MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_phozon) @@ -1510,23 +1509,22 @@ MACHINE_CONFIG_START(mappy_state::mappy_common) MCFG_DEVICE_ADD("sub", MC6809E, PIXEL_CLOCK/4) /* 1.536 MHz */ MCFG_DEVICE_PROGRAM_MAP(mappy_cpu2_map) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2M on CPU board - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, mappy_state, int_on_2_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, mappy_state, int_on_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, mappy_state, mappy_flip_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("namco", namco_15xx_device, sound_enable_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE("namcoio_1", namcoio_device, set_reset_line)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("namcoio_2", namcoio_device, set_reset_line)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &mainlatch(LS259(config, "mainlatch")); // 2M on CPU board + mainlatch.q_out_cb<0>().set(FUNC(mappy_state::int_on_2_w)); + mainlatch.q_out_cb<1>().set(FUNC(mappy_state::int_on_w)); + mainlatch.q_out_cb<2>().set(FUNC(mappy_state::mappy_flip_w)); + mainlatch.q_out_cb<3>().set(m_namco_15xx, FUNC(namco_15xx_device::sound_enable_w)); + mainlatch.q_out_cb<4>().set(m_namcoio[0], FUNC(namcoio_device::set_reset_line)).invert(); + mainlatch.q_out_cb<4>().append(m_namcoio[1], FUNC(namcoio_device::set_reset_line)).invert(); + mainlatch.q_out_cb<5>().set_inputline(m_subcpu, INPUT_LINE_RESET).invert(); MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) - MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ - /* synchronization of the CPUs */ + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) // 100 CPU slices per frame - an high value to ensure proper synchronization of the CPUs - MCFG_DEVICE_ADD("dipmux", LS157, 0) - MCFG_74157_A_IN_CB(IOPORT("DSW2")) - MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) + ls157_device &dipmux(LS157(config, "dipmux")); + dipmux.a_in_callback().set_ioport("DSW2"); + dipmux.b_in_callback().set_ioport("DSW2").rshift(4); /* video hardware */ MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_mappy) @@ -1550,23 +1548,23 @@ MACHINE_CONFIG_START(mappy_state::mappy_common) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) MACHINE_CONFIG_END -MACHINE_CONFIG_START(mappy_state::mappy) - +void mappy_state::mappy(machine_config &config) +{ mappy_common(config); - MCFG_DEVICE_ADD("namcoio_1", NAMCO_58XX, 0) - MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS")) - MCFG_NAMCO58XX_IN_1_CB(IOPORT("P1")) - MCFG_NAMCO58XX_IN_2_CB(IOPORT("P2")) - MCFG_NAMCO58XX_IN_3_CB(IOPORT("BUTTONS")) + NAMCO_58XX(config, m_namcoio[0], 0); + m_namcoio[0]->in_callback<0>().set_ioport("COINS"); + m_namcoio[0]->in_callback<1>().set_ioport("P1"); + m_namcoio[0]->in_callback<2>().set_ioport("P2"); + m_namcoio[0]->in_callback<3>().set_ioport("BUTTONS"); - MCFG_DEVICE_ADD("namcoio_2", NAMCO_58XX, 0) - MCFG_NAMCO58XX_IN_0_CB(READ8("dipmux", ls157_device, output_r)) - MCFG_NAMCO58XX_IN_1_CB(IOPORT("DSW1")) - MCFG_NAMCO58XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO58XX_IN_3_CB(IOPORT("DSW0")) - MCFG_NAMCO58XX_OUT_0_CB(WRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0) -MACHINE_CONFIG_END + NAMCO_58XX(config, m_namcoio[1], 0); + m_namcoio[1]->in_callback<0>().set("dipmux", FUNC(ls157_device::output_r)); + m_namcoio[1]->in_callback<1>().set_ioport("DSW1"); + m_namcoio[1]->in_callback<2>().set_ioport("DSW1").rshift(4); + m_namcoio[1]->in_callback<3>().set_ioport("DSW0"); + m_namcoio[1]->out_callback<0>().set("dipmux", FUNC(ls157_device::select_w)).bit(0); +} MACHINE_CONFIG_START(mappy_state::digdug2) @@ -1575,18 +1573,18 @@ MACHINE_CONFIG_START(mappy_state::digdug2) MCFG_WATCHDOG_MODIFY("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 0) - MCFG_DEVICE_ADD("namcoio_1", NAMCO_58XX, 0) - MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS")) - MCFG_NAMCO58XX_IN_1_CB(IOPORT("P1")) - MCFG_NAMCO58XX_IN_2_CB(IOPORT("P2")) - MCFG_NAMCO58XX_IN_3_CB(IOPORT("BUTTONS")) + NAMCO_58XX(config, m_namcoio[0], 0); + m_namcoio[0]->in_callback<0>().set_ioport("COINS"); + m_namcoio[0]->in_callback<1>().set_ioport("P1"); + m_namcoio[0]->in_callback<2>().set_ioport("P2"); + m_namcoio[0]->in_callback<3>().set_ioport("BUTTONS"); - MCFG_DEVICE_ADD("namcoio_2", NAMCO_56XX, 0) - MCFG_NAMCO56XX_IN_0_CB(READ8("dipmux", ls157_device, output_r)) - MCFG_NAMCO56XX_IN_1_CB(IOPORT("DSW1")) - MCFG_NAMCO56XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO56XX_IN_3_CB(IOPORT("DSW0")) - MCFG_NAMCO56XX_OUT_0_CB(WRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0) + NAMCO_56XX(config, m_namcoio[1], 0); + m_namcoio[1]->in_callback<0>().set("dipmux", FUNC(ls157_device::output_r)); + m_namcoio[1]->in_callback<1>().set_ioport("DSW1"); + m_namcoio[1]->in_callback<2>().set_ioport("DSW1").rshift(4); + m_namcoio[1]->in_callback<3>().set_ioport("DSW0"); + m_namcoio[1]->out_callback<0>().set("dipmux", FUNC(ls157_device::select_w)).bit(0); MACHINE_CONFIG_END MACHINE_CONFIG_START(mappy_state::todruaga) @@ -1598,24 +1596,24 @@ MACHINE_CONFIG_START(mappy_state::todruaga) MCFG_PALETTE_ENTRIES(64*4+64*16) MACHINE_CONFIG_END -MACHINE_CONFIG_START(mappy_state::motos) - +void mappy_state::motos(machine_config &config) +{ mappy_common(config); - MCFG_DEVICE_ADD("namcoio_1", NAMCO_56XX, 0) - MCFG_NAMCO56XX_IN_0_CB(IOPORT("COINS")) - MCFG_NAMCO56XX_IN_1_CB(IOPORT("P1")) - MCFG_NAMCO56XX_IN_2_CB(IOPORT("P2")) - MCFG_NAMCO56XX_IN_3_CB(IOPORT("BUTTONS")) - MCFG_NAMCO56XX_OUT_0_CB(WRITE8(*this, mappy_state, out_lamps)) + NAMCO_56XX(config, m_namcoio[0], 0); + m_namcoio[0]->in_callback<0>().set_ioport("COINS"); + m_namcoio[0]->in_callback<1>().set_ioport("P1"); + m_namcoio[0]->in_callback<2>().set_ioport("P2"); + m_namcoio[0]->in_callback<3>().set_ioport("BUTTONS"); + m_namcoio[0]->out_callback<0>().set(FUNC(mappy_state::out_lamps)); - MCFG_DEVICE_ADD("namcoio_2", NAMCO_56XX, 0) - MCFG_NAMCO56XX_IN_0_CB(READ8("dipmux", ls157_device, output_r)) - MCFG_NAMCO56XX_IN_1_CB(IOPORT("DSW1")) - MCFG_NAMCO56XX_IN_2_CB(IOPORT("DSW1")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO56XX_IN_3_CB(IOPORT("DSW0")) - MCFG_NAMCO56XX_OUT_0_CB(WRITELINE("dipmux", ls157_device, select_w)) MCFG_DEVCB_BIT(0) -MACHINE_CONFIG_END + NAMCO_56XX(config, m_namcoio[1], 0); + m_namcoio[1]->in_callback<0>().set("dipmux", FUNC(ls157_device::output_r)); + m_namcoio[1]->in_callback<1>().set_ioport("DSW1"); + m_namcoio[1]->in_callback<2>().set_ioport("DSW1").rshift(4); + m_namcoio[1]->in_callback<3>().set_ioport("DSW0"); + m_namcoio[1]->out_callback<0>().set("dipmux", FUNC(ls157_device::select_w)).bit(0); +} diff --git a/src/mame/drivers/marineb.cpp b/src/mame/drivers/marineb.cpp index 2daba71e7d0..1e2bd737e4b 100644 --- a/src/mame/drivers/marineb.cpp +++ b/src/mame/drivers/marineb.cpp @@ -584,18 +584,18 @@ MACHINE_CONFIG_START(marineb_state::changes) MACHINE_CONFIG_END -MACHINE_CONFIG_START(marineb_state::springer) +void marineb_state::springer(machine_config &config) +{ marineb(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("outlatch") - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, marineb_state, flipscreen_y_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, marineb_state, flipscreen_x_w)) MCFG_DEVCB_INVERT + ls259_device &outlatch(*subdevice("outlatch")); + outlatch.q_out_cb<1>().set(FUNC(marineb_state::flipscreen_y_w)).invert(); + outlatch.q_out_cb<2>().set(FUNC(marineb_state::flipscreen_x_w)).invert(); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(marineb_state, screen_update_springer) -MACHINE_CONFIG_END + subdevice("screen")->set_screen_update(FUNC(marineb_state::screen_update_springer)); +} MACHINE_CONFIG_START(marineb_state::hoccer) @@ -647,14 +647,15 @@ MACHINE_CONFIG_START(marineb_state::hopprobo) MACHINE_CONFIG_END -MACHINE_CONFIG_START(marineb_state::bcruzm12) +void marineb_state::bcruzm12(machine_config &config) +{ wanted(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("outlatch") - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, marineb_state, flipscreen_y_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, marineb_state, flipscreen_x_w)) MCFG_DEVCB_INVERT -MACHINE_CONFIG_END + ls259_device &outlatch(*subdevice("outlatch")); + outlatch.q_out_cb<1>().set(FUNC(marineb_state::flipscreen_y_w)).invert(); + outlatch.q_out_cb<2>().set(FUNC(marineb_state::flipscreen_x_w)).invert(); +} /*************************************************************************** diff --git a/src/mame/drivers/mbee.cpp b/src/mame/drivers/mbee.cpp index 9156369fe11..6324fe929b7 100644 --- a/src/mame/drivers/mbee.cpp +++ b/src/mame/drivers/mbee.cpp @@ -786,13 +786,13 @@ MACHINE_CONFIG_START(mbee_state::mbee56) MCFG_DEVICE_IO_MAP(mbee56_io) MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee56) - MCFG_DEVICE_ADD("fdc", WD2793, 4_MHz_XTAL / 2) - MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, mbee_state, fdc_intrq_w)) - MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, mbee_state, fdc_drq_w)) - MCFG_WD_FDC_ENMF_CALLBACK(GND) - MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbee_floppies, "525qd", floppy_image_device::default_floppy_formats) + WD2793(config, m_fdc, 4_MHz_XTAL / 2); + m_fdc->intrq_wr_callback().set(FUNC(mbee_state::fdc_intrq_w)); + m_fdc->drq_wr_callback().set(FUNC(mbee_state::fdc_drq_w)); + m_fdc->enmf_rd_callback().set_constant(0); + MCFG_FLOPPY_DRIVE_ADD(m_floppy0, mbee_floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbee_floppies, "525qd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(m_floppy1, mbee_floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) MACHINE_CONFIG_END @@ -814,13 +814,13 @@ MACHINE_CONFIG_START(mbee_state::mbee128p) MCFG_DEVICE_IO_MAP(mbee128_io) MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee128) - MCFG_DEVICE_ADD("fdc", WD2793, 4_MHz_XTAL / 2) - MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, mbee_state, fdc_intrq_w)) - MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, mbee_state, fdc_drq_w)) - MCFG_WD_FDC_ENMF_CALLBACK(GND) - MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbee_floppies, "525qd", floppy_image_device::default_floppy_formats) + WD2793(config, m_fdc, 4_MHz_XTAL / 2); + m_fdc->intrq_wr_callback().set(FUNC(mbee_state::fdc_intrq_w)); + m_fdc->drq_wr_callback().set(FUNC(mbee_state::fdc_drq_w)); + m_fdc->enmf_rd_callback().set_constant(0); + MCFG_FLOPPY_DRIVE_ADD(m_floppy0, mbee_floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbee_floppies, "525qd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(m_floppy1, mbee_floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) MACHINE_CONFIG_END @@ -833,9 +833,9 @@ MACHINE_CONFIG_START(mbee_state::mbee256) MCFG_DEVICE_REMOVE("fdc:0") MCFG_DEVICE_REMOVE("fdc:1") - MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbee_floppies, "35dd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(m_floppy0, mbee_floppies, "35dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbee_floppies, "35dd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(m_floppy1, mbee_floppies, "35dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) MACHINE_CONFIG_END diff --git a/src/mame/drivers/mc8020.cpp b/src/mame/drivers/mc8020.cpp index 22848299345..ac848e7c1f9 100644 --- a/src/mame/drivers/mc8020.cpp +++ b/src/mame/drivers/mc8020.cpp @@ -324,10 +324,10 @@ MACHINE_CONFIG_START(mc8020_state::mc8020) MCFG_DEVICE_ADD("ctc_clock", CLOCK, XTAL(2'457'600) / 64) // guess MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg2)) - MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL(2'457'600)) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC2_CB(WRITELINE("ctc", z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg0)) + z80ctc_device &ctc(Z80CTC(config, "ctc", XTAL(2'457'600))); + ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + ctc.zc_callback<2>().set("ctc", FUNC(z80ctc_device::trg1)); + ctc.zc_callback<2>().append("ctc", FUNC(z80ctc_device::trg0)); MACHINE_CONFIG_END diff --git a/src/mame/drivers/mc8030.cpp b/src/mame/drivers/mc8030.cpp index 4244d12378e..6a12da64087 100644 --- a/src/mame/drivers/mc8030.cpp +++ b/src/mame/drivers/mc8030.cpp @@ -227,9 +227,9 @@ MACHINE_CONFIG_START(mc8030_state::mc8030) // ZC1: to SIO CLK CH B // ZC2: KMBG (??) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("asp_sio", z80sio_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("asp_sio", z80sio_device, rxca_w)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set("asp_sio", FUNC(z80sio_device::txca_w)); + uart_clock.signal_handler().append("asp_sio", FUNC(z80sio_device::rxca_w)); MCFG_DEVICE_ADD("asp_sio", Z80SIO, 4800) MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) diff --git a/src/mame/drivers/mccpm.cpp b/src/mame/drivers/mccpm.cpp index 49fb1a5e083..218a0f34a1d 100644 --- a/src/mame/drivers/mccpm.cpp +++ b/src/mame/drivers/mccpm.cpp @@ -87,9 +87,9 @@ MACHINE_CONFIG_START(mccpm_state::mccpm) MCFG_DEVICE_IO_MAP(mccpm_io) /* Devices */ - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("sio", z80sio_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, rxca_w)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set("sio", FUNC(z80sio_device::txca_w)); + uart_clock.signal_handler().append("sio", FUNC(z80sio_device::rxca_w)); MCFG_DEVICE_ADD("sio", Z80SIO, XTAL(4'000'000)) MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) diff --git a/src/mame/drivers/meritm.cpp b/src/mame/drivers/meritm.cpp index 05a6222e8da..7364dca26d3 100644 --- a/src/mame/drivers/meritm.cpp +++ b/src/mame/drivers/meritm.cpp @@ -1110,19 +1110,19 @@ MACHINE_CONFIG_START(meritm_state::crt250) MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, meritm_state, crt250_port_b_w)) // used LMP x DRIVE MCFG_I8255_IN_PORTC_CB(READ8(*this, meritm_state, _8255_port_c_r)) - MCFG_DEVICE_ADD(m_z80pio[0], Z80PIO, SYSTEM_CLK/6) - MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(m_maincpu, INPUT_LINE_IRQ0)) - MCFG_Z80PIO_IN_PA_CB(READ8(*this, meritm_state, audio_pio_port_a_r)) - MCFG_Z80PIO_OUT_PA_CB(WRITE8(*this, meritm_state, audio_pio_port_a_w)) - MCFG_Z80PIO_IN_PB_CB(READ8(*this, meritm_state, audio_pio_port_b_r)) - MCFG_Z80PIO_OUT_PB_CB(WRITE8(*this, meritm_state, audio_pio_port_b_w)) + Z80PIO(config, m_z80pio[0], SYSTEM_CLK/6); + m_z80pio[0]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_z80pio[0]->in_pa_callback().set(FUNC(meritm_state::audio_pio_port_a_r)); + m_z80pio[0]->out_pa_callback().set(FUNC(meritm_state::audio_pio_port_a_w)); + m_z80pio[0]->in_pb_callback().set(FUNC(meritm_state::audio_pio_port_b_r)); + m_z80pio[0]->out_pb_callback().set(FUNC(meritm_state::audio_pio_port_b_w)); - MCFG_DEVICE_ADD(m_z80pio[1], Z80PIO, SYSTEM_CLK/6) - MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(m_maincpu, INPUT_LINE_IRQ0)) - MCFG_Z80PIO_IN_PA_CB(IOPORT("PIO1_PORTA")) - MCFG_Z80PIO_OUT_PA_CB(WRITE8(*this, meritm_state, io_pio_port_a_w)) - MCFG_Z80PIO_IN_PB_CB(IOPORT("PIO1_PORTB")) - MCFG_Z80PIO_OUT_PB_CB(WRITE8(*this, meritm_state, io_pio_port_b_w)) + Z80PIO(config, m_z80pio[1], SYSTEM_CLK/6); + m_z80pio[1]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_z80pio[1]->in_pa_callback().set_ioport("PIO1_PORTA"); + m_z80pio[1]->out_pa_callback().set(FUNC(meritm_state::io_pio_port_a_w)); + m_z80pio[1]->in_pb_callback().set_ioport("PIO1_PORTB"); + m_z80pio[1]->out_pb_callback().set(FUNC(meritm_state::io_pio_port_b_w)); MCFG_TIMER_DRIVER_ADD_SCANLINE("vblank_start", meritm_state, vblank_start_tick, "screen", 259, 262) MCFG_TIMER_DRIVER_ADD_SCANLINE("vblank_end", meritm_state, vblank_end_tick, "screen", 262, 262) diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp index 0a443478dcb..a5fb2376707 100644 --- a/src/mame/drivers/metro.cpp +++ b/src/mame/drivers/metro.cpp @@ -1146,7 +1146,7 @@ void metro_state::mouja_okimap(address_map &map) MCFG_DEVICE_ADD(_tag, PUZZLET_IO, 0) #define MCFG_PUZZLET_IO_DATA_CALLBACK(_devcb) \ - devcb = &puzzlet_io_device::set_data_cb(*device, DEVCB_##_devcb); + puzzlet_io_device::set_data_cb(*device, DEVCB_##_devcb); class puzzlet_io_device : public device_t { public: diff --git a/src/mame/drivers/mfabfz.cpp b/src/mame/drivers/mfabfz.cpp index f7f8120f55b..199af8b58ca 100644 --- a/src/mame/drivers/mfabfz.cpp +++ b/src/mame/drivers/mfabfz.cpp @@ -104,14 +104,14 @@ void mfabfz_state::machine_reset() MACHINE_CONFIG_START(mfabfz_state::mfabfz) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",I8085A, XTAL(4'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(mfabfz_mem) - MCFG_DEVICE_IO_MAP(mfabfz_io) + I8085A(config, m_maincpu, 4_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &mfabfz_state::mfabfz_mem); + m_maincpu->set_addrmap(AS_IO, &mfabfz_state::mfabfz_io); // uart1 - terminal - clock hardware unknown - MCFG_DEVICE_ADD("uart1_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart1", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart1", i8251_device, write_rxc)) + clock_device &uart1_clock(CLOCK(config, "uart1_clock", 153600)); + uart1_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc)); + uart1_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("uart1", I8251, 0) MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) @@ -124,7 +124,7 @@ MACHINE_CONFIG_START(mfabfz_state::mfabfz) MCFG_RS232_CTS_HANDLER(WRITELINE("uart1", i8251_device, write_cts)) // uart2 - cassette - clock comes from 2MHz through a divider consisting of 4 chips and some jumpers. - MCFG_DEVICE_ADD("uart2", I8251, 0) + I8251(config, "uart2", 0); MACHINE_CONFIG_END static DEVICE_INPUT_DEFAULTS_START( terminal ) @@ -136,17 +136,20 @@ static DEVICE_INPUT_DEFAULTS_START( terminal ) DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 ) DEVICE_INPUT_DEFAULTS_END -MACHINE_CONFIG_START(mfabfz_state::mfabfz85) +void mfabfz_state::mfabfz85(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",I8085A, XTAL(4'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(mfabfz_mem) - MCFG_DEVICE_IO_MAP(mfabfz85_io) - MCFG_I8085A_SID(READLINE("rs232", rs232_port_device, rxd_r)) - MCFG_I8085A_SOD(WRITELINE("rs232", rs232_port_device, write_txd)) MCFG_DEVCB_INVERT - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") - MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal) - MCFG_DEVICE_ADD("uart2", I8251, 0) -MACHINE_CONFIG_END + i8085a_cpu_device &maincpu(I8085A(config, m_maincpu, 4_MHz_XTAL / 2)); + maincpu.set_addrmap(AS_PROGRAM, &mfabfz_state::mfabfz_mem); + maincpu.set_addrmap(AS_IO, &mfabfz_state::mfabfz85_io); + maincpu.in_sid_func().set("rs232", FUNC(rs232_port_device::rxd_r)); + maincpu.out_sod_func().set("rs232", FUNC(rs232_port_device::write_txd)).invert(); + + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); + rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); + + I8251(config, "uart2", 0); +} /* ROM definition */ diff --git a/src/mame/drivers/mice.cpp b/src/mame/drivers/mice.cpp index 8d21d5c1fbd..b8ef71e8a19 100644 --- a/src/mame/drivers/mice.cpp +++ b/src/mame/drivers/mice.cpp @@ -181,12 +181,12 @@ MACHINE_CONFIG_START(mice_state::mice) MCFG_RS232_CTS_HANDLER(WRITELINE("uart", i8251_device, write_cts)) MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", mice_terminal) - MCFG_DEVICE_ADD("rpt", I8155, 6.144_MHz_XTAL / 2) - MCFG_I8155_IN_PORTC_CB(IOPORT("BAUD")) - MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + i8155_device &rpt(I8155(config, "rpt", 6.144_MHz_XTAL / 2)); + rpt.in_pa_callback().set_ioport("BAUD"); + rpt.out_to_callback().set("uart", FUNC(i8251_device::write_txc)); + rpt.out_to_callback().append("uart", FUNC(i8251_device::write_rxc)); - MCFG_DEVICE_ADD("ppi", I8255, 0) + I8255(config, "ppi", 0); MACHINE_CONFIG_END MACHINE_CONFIG_START(mice_state::mice2) diff --git a/src/mame/drivers/micro3d.cpp b/src/mame/drivers/micro3d.cpp index bf0c61999c2..08768fc7b5c 100644 --- a/src/mame/drivers/micro3d.cpp +++ b/src/mame/drivers/micro3d.cpp @@ -322,9 +322,9 @@ MACHINE_CONFIG_START(micro3d_state::micro3d) MCFG_DEVICE_ADD("scc", SCC8530N, 32_MHz_XTAL / 2 / 2) MCFG_Z80SCC_OUT_TXDB_CB(WRITELINE("monitor_drmath", rs232_port_device, write_txd)) - MCFG_DEVICE_ADD("monitor_drmath", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("scc", z80scc_device, rxb_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("scc", z80scc_device, dcdb_w)) MCFG_DEVCB_XOR(1) + rs232_port_device &monitor_drmath(RS232_PORT(config, "monitor_drmath", default_rs232_devices, nullptr)); + monitor_drmath.rxd_handler().set("scc", FUNC(z80scc_device::rxb_w)); + monitor_drmath.dcd_handler().set("scc", FUNC(z80scc_device::dcdb_w)).exor(1); MCFG_DEVICE_ADD("audiocpu", I8051, 11.0592_MHz_XTAL) MCFG_DEVICE_PROGRAM_MAP(soundmem_prg) diff --git a/src/mame/drivers/microdec.cpp b/src/mame/drivers/microdec.cpp index 65e0d88e879..4093dd1aae6 100644 --- a/src/mame/drivers/microdec.cpp +++ b/src/mame/drivers/microdec.cpp @@ -190,49 +190,48 @@ void microdec_state::init_microdec() membank("bankw0")->configure_entry(0, &main[0x1000]); } -MACHINE_CONFIG_START(microdec_state::microdec) +void microdec_state::microdec(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(16'000'000) / 4) - MCFG_DEVICE_PROGRAM_MAP(microdec_mem) - MCFG_DEVICE_IO_MAP(microdec_io) + Z80(config, m_maincpu, 16_MHz_XTAL / 4); + m_maincpu->set_addrmap(AS_PROGRAM, µdec_state::microdec_mem); + m_maincpu->set_addrmap(AS_IO, µdec_state::microdec_io); /* video hardware */ - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart1", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart1", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart2", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart2", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc)); - MCFG_DEVICE_ADD("uart1", I8251, 0) - MCFG_I8251_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd)) - MCFG_I8251_DTR_HANDLER(WRITELINE("rs232a", rs232_port_device, write_dtr)) - MCFG_I8251_RTS_HANDLER(WRITELINE("rs232a", rs232_port_device, write_rts)) + i8251_device &uart1(I8251(config, "uart1", 0)); + uart1.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd)); + uart1.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr)); + uart1.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("uart1", i8251_device, write_rxd)) - MCFG_RS232_DSR_HANDLER(WRITELINE("uart1", i8251_device, write_dsr)) - MCFG_RS232_CTS_HANDLER(WRITELINE("uart1", i8251_device, write_cts)) + rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal")); + rs232a.rxd_handler().set("uart1", FUNC(i8251_device::write_rxd)); + rs232a.dsr_handler().set("uart1", FUNC(i8251_device::write_dsr)); + rs232a.cts_handler().set("uart1", FUNC(i8251_device::write_cts)); - MCFG_DEVICE_ADD("uart2", I8251, 0) - MCFG_I8251_TXD_HANDLER(WRITELINE("rs232b", rs232_port_device, write_txd)) - MCFG_I8251_DTR_HANDLER(WRITELINE("rs232b", rs232_port_device, write_dtr)) - MCFG_I8251_RTS_HANDLER(WRITELINE("rs232b", rs232_port_device, write_rts)) + i8251_device &uart2(I8251(config, "uart2", 0)); + uart2.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd)); + uart2.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr)); + uart2.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("uart2", i8251_device, write_rxd)) - MCFG_RS232_DSR_HANDLER(WRITELINE("uart2", i8251_device, write_dsr)) - MCFG_RS232_CTS_HANDLER(WRITELINE("uart2", i8251_device, write_cts)) + rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr)); + rs232b.rxd_handler().set("uart2", FUNC(i8251_device::write_rxd)); + rs232b.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr)); + rs232b.cts_handler().set("uart2", FUNC(i8251_device::write_cts)); - MCFG_UPD765A_ADD("fdc", true, true) - MCFG_UPD765_INTRQ_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_FLOPPY_DRIVE_ADD("fdc:0", microdec_floppies, "525hd", floppy_image_device::default_floppy_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) - //MCFG_FLOPPY_DRIVE_ADD("fdc:1", microdec_floppies, "525hd", floppy_image_device::default_floppy_formats) - //MCFG_FLOPPY_DRIVE_SOUND(true) + UPD765A(config, m_fdc, true, true); + m_fdc->intrq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + FLOPPY_CONNECTOR(config, "fdc:0", microdec_floppies, "525hd", floppy_image_device::default_floppy_formats).enable_sound(true); + //FLOPPY_CONNECTOR(config, "fdc:1", microdec_floppies, "525hd", floppy_image_device::default_floppy_formats).enable_sound(true); // software lists - MCFG_SOFTWARE_LIST_ADD("flop_list", "md2_flop") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "flop_list").set_original("md2_flop"); +} /* ROM definition */ ROM_START( md2 ) diff --git a/src/mame/drivers/microkit.cpp b/src/mame/drivers/microkit.cpp index 312337dfcb7..a9ce30f7c92 100644 --- a/src/mame/drivers/microkit.cpp +++ b/src/mame/drivers/microkit.cpp @@ -125,7 +125,7 @@ MACHINE_CONFIG_START(microkit_state::microkit) MCFG_DEVICE_ADD("maincpu", CDP1802, 1750000) MCFG_DEVICE_PROGRAM_MAP(microkit_mem) MCFG_DEVICE_IO_MAP(microkit_io) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, microkit_state, clear_r)) /* video hardware */ diff --git a/src/mame/drivers/microterm.cpp b/src/mame/drivers/microterm.cpp index 8c12b71b689..d8e00c718d5 100644 --- a/src/mame/drivers/microterm.cpp +++ b/src/mame/drivers/microterm.cpp @@ -99,16 +99,15 @@ MACHINE_CONFIG_START(microterm_state::mt420) MCFG_DEVICE_PROGRAM_MAP(mt420_mem_map) MCFG_DEVICE_IO_MAP(mt420_io_map) - MCFG_DEVICE_ADD("duart", SCN2681, XTAL(3'686'400)) // MC2681 - MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_MC68681_OUTPORT_CALLBACK(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(3) + scn2681_device &duart(SCN2681(config, "duart", XTAL(3'686'400))); // MC2681 + duart.irq_cb().set_inputline(m_maincpu, 0); + duart.outport_cb().set("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(5); + duart.outport_cb().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4); + duart.outport_cb().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3); - MCFG_DEVICE_ADD("aci", MC2661, XTAL(3'686'400)) // SCN2641 + MC2661(config, "aci", XTAL(3'686'400)); // SCN2641 - MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) - MCFG_EEPROM_SERIAL_DO_CALLBACK(WRITELINE("duart", scn2681_device, ip6_w)) + EEPROM_SERIAL_93C46_16BIT(config, "eeprom").do_callback().set("duart", FUNC(scn2681_device::ip6_w)); MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL(9'877'680), 612, 0, 480, 269, 0, 250) @@ -128,20 +127,18 @@ MACHINE_CONFIG_START(microterm_state::mt5510) MCFG_DEVICE_PROGRAM_MAP(mt5510_mem_map) MCFG_DEVICE_IO_MAP(mt5510_io_map) - MCFG_DEVICE_ADD("duart", SCN2681, XTAL(3'686'400)) - MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_MC68681_OUTPORT_CALLBACK(WRITELINE("eeprom1", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom2", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom1", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom2", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom1", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(3) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom2", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(3) + scn2681_device &duart(SCN2681(config, "duart", XTAL(3'686'400))); + duart.irq_cb().set_inputline(m_maincpu, 0); + duart.outport_cb().set("eeprom1", FUNC(eeprom_serial_93cxx_device::di_write)).bit(6); + duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::di_write)).bit(5); + duart.outport_cb().append("eeprom1", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4); + duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4); + duart.outport_cb().append("eeprom1", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3); + duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3); - MCFG_DEVICE_ADD("eeprom1", EEPROM_SERIAL_93C46_16BIT) - MCFG_EEPROM_SERIAL_DO_CALLBACK(WRITELINE("duart", scn2681_device, ip6_w)) + EEPROM_SERIAL_93C46_16BIT(config, "eeprom1").do_callback().set("duart", FUNC(scn2681_device::ip6_w)); - MCFG_DEVICE_ADD("eeprom2", EEPROM_SERIAL_93C46_16BIT) - MCFG_EEPROM_SERIAL_DO_CALLBACK(WRITELINE("duart", scn2681_device, ip5_w)) + EEPROM_SERIAL_93C46_16BIT(config, "eeprom2").do_callback().set("duart", FUNC(scn2681_device::ip5_w)); MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL(45'830'400) / 2, 1120, 0, 960, 341, 0, 300) // wild guess at resolution diff --git a/src/mame/drivers/milwaukee.cpp b/src/mame/drivers/milwaukee.cpp index 774c6afc3f3..a0017b97413 100644 --- a/src/mame/drivers/milwaukee.cpp +++ b/src/mame/drivers/milwaukee.cpp @@ -52,33 +52,34 @@ void milwaukee_state::mem_map(address_map &map) static INPUT_PORTS_START( milwaukee ) INPUT_PORTS_END -MACHINE_CONFIG_START(milwaukee_state::milwaukee) - MCFG_DEVICE_ADD("maincpu", M6502, XTAL(16'000'000) / 16) - MCFG_DEVICE_PROGRAM_MAP(mem_map) +void milwaukee_state::milwaukee(machine_config &config) +{ + M6502(config, m_maincpu, 16_MHz_XTAL / 16); + m_maincpu->set_addrmap(AS_PROGRAM, &milwaukee_state::mem_map); - MCFG_DEVICE_ADD("pit", PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL(16'000'000) / 16 / 4) // 250 kHz - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("pit", pit8253_device, write_gate0)) MCFG_DEVCB_INVERT - MCFG_PIT8253_CLK1(XTAL(16'000'000) / 2 / 13 / 2048 / 5) // 60.09 Hz? - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("pit", pit8253_device, write_clk2)) MCFG_DEVCB_INVERT + pit8253_device &pit(PIT8253(config, "pit", 0)); + pit.set_clk<0>(16_MHz_XTAL / 16 / 4); // 250 kHz + pit.out_handler<0>().set("pit", FUNC(pit8253_device::write_gate0)).invert(); + pit.set_clk<1>(16_MHz_XTAL / 2 / 13 / 2048 / 5); // 60.09 Hz? + pit.out_handler<1>().set("pit", FUNC(pit8253_device::write_clk2)).invert(); - MCFG_DEVICE_ADD("pia1", PIA6821, 0) - MCFG_DEVICE_ADD("pia2", PIA6821, 0) - MCFG_DEVICE_ADD("acia2", ACIA6850, 0) - MCFG_DEVICE_ADD("ssda", MC6852, 0) + PIA6821(config, "pia1", 0); + PIA6821(config, "pia2", 0); + ACIA6850(config, "acia2", 0); + MC6852(config, "ssda", 0); - MCFG_DEVICE_ADD("acia_clock", CLOCK, XTAL(16'000'000) / 2 / 13 / 4) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia1", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia1", acia6850_device, write_rxc)) + clock_device &acia_clock(CLOCK(config, "acia_clock", 16_MHz_XTAL / 2 / 13 / 4)); + acia_clock.signal_handler().set("acia1", FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append("acia1", FUNC(acia6850_device::write_rxc)); - MCFG_DEVICE_ADD("acia1", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_ACIA6850_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts)) + acia6850_device &acia1(ACIA6850(config, "acia1", 0)); + acia1.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); + acia1.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("acia1", acia6850_device, write_rxd)) - MCFG_RS232_CTS_HANDLER(WRITELINE("acia1", acia6850_device, write_cts)) -MACHINE_CONFIG_END + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); + rs232.rxd_handler().set("acia1", FUNC(acia6850_device::write_rxd)); + rs232.cts_handler().set("acia1", FUNC(acia6850_device::write_cts)); +} ROM_START( mc1200 ) ROM_REGION( 0x0c00, "roms", 0 ) diff --git a/src/mame/drivers/miniframe.cpp b/src/mame/drivers/miniframe.cpp index e1bc117ca9b..879a80b5d4d 100644 --- a/src/mame/drivers/miniframe.cpp +++ b/src/mame/drivers/miniframe.cpp @@ -248,24 +248,24 @@ MACHINE_CONFIG_START(miniframe_state::miniframe) MCFG_FLOPPY_DRIVE_ADD("wd2797:0", miniframe_floppies, "525dd", floppy_image_device::default_floppy_formats) // 8263s - MCFG_DEVICE_ADD("pit8253", PIT8253, 0) - MCFG_PIT8253_CLK0(76800) - MCFG_PIT8253_CLK1(76800) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("pic8259", pic8259_device, ir4_w)) + pit8253_device &pit8253(PIT8253(config, "pit8253", 0)); + pit8253.set_clk<0>(76800); + pit8253.set_clk<1>(76800); + pit8253.out_handler<0>().set("pic8259", FUNC(pic8259_device::ir4_w)); // FIXME: fighting for IR4 - error, or needs input merger? // chain clock 1 output into clock 2 - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("pit8253", pit8253_device, write_clk2)) + pit8253.out_handler<1>().set("pit8253", FUNC(pit8253_device::write_clk2)); // and ir4 on the PIC - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("pic8259", pic8259_device, ir4_w)) + pit8253.out_handler<1>().append("pic8259", FUNC(pic8259_device::ir4_w)); - MCFG_DEVICE_ADD("baudgen", PIT8253, 0) - MCFG_PIT8253_CLK0(1228800) - MCFG_PIT8253_CLK1(1228800) - MCFG_PIT8253_CLK2(1228800) + pit8253_device &baudgen(PIT8253(config, "baudgen", 0)); + baudgen.set_clk<0>(1228800); + baudgen.set_clk<1>(1228800); + baudgen.set_clk<2>(1228800); // PIC8259s MCFG_DEVICE_ADD("pic8259", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", M68K_IRQ_4)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/mits680b.cpp b/src/mame/drivers/mits680b.cpp index 7c5e084ba8d..a32c09a1d32 100644 --- a/src/mame/drivers/mits680b.cpp +++ b/src/mame/drivers/mits680b.cpp @@ -70,9 +70,9 @@ MACHINE_CONFIG_START(mits680b_state::mits680b) MCFG_DEVICE_ADD("maincpu", M6800, XTAL(1'000'000) / 2) MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set("acia", FUNC(acia6850_device::write_txc)); + uart_clock.signal_handler().append("acia", FUNC(acia6850_device::write_rxc)); MCFG_DEVICE_ADD("acia", ACIA6850, 0) MCFG_ACIA6850_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/mk14.cpp b/src/mame/drivers/mk14.cpp index 0e0fc4f22ba..37bf50993fa 100644 --- a/src/mame/drivers/mk14.cpp +++ b/src/mame/drivers/mk14.cpp @@ -205,7 +205,7 @@ MACHINE_CONFIG_START(mk14_state::mk14) /* basic machine hardware */ // IC1 1SP-8A/600 (8060) SC/MP Microprocessor MCFG_DEVICE_ADD("maincpu", INS8060, XTAL(4'433'619)) - MCFG_SCMP_CONFIG(WRITELINE(*this, mk14_state, cass_w), NOOP, READLINE(*this, mk14_state, cass_r), NOOP, READLINE(*this, mk14_state, cass_r), NOOP) + MCFG_SCMP_CONFIG(WRITELINE(*this, mk14_state, cass_w), NOOP, READLINE(*this, mk14_state, cass_r), CONSTANT(0), READLINE(*this, mk14_state, cass_r), NOOP) MCFG_DEVICE_PROGRAM_MAP(mem_map) /* video hardware */ diff --git a/src/mame/drivers/mmd1.cpp b/src/mame/drivers/mmd1.cpp index 0b019468de9..9455b4c2820 100644 --- a/src/mame/drivers/mmd1.cpp +++ b/src/mame/drivers/mmd1.cpp @@ -523,8 +523,8 @@ MACHINE_CONFIG_START(mmd1_state::mmd2) MCFG_I8279_OUT_SL_CB(WRITE8(*this, mmd1_state, mmd2_scanlines_w)) // scan SL lines MCFG_I8279_OUT_DISP_CB(WRITE8(*this, mmd1_state, mmd2_digit_w)) // display A&B MCFG_I8279_IN_RL_CB(READ8(*this, mmd1_state, mmd2_kbd_r)) // kbd RL lines - MCFG_I8279_IN_SHIFT_CB(VCC) // Shift key - MCFG_I8279_IN_CTRL_CB(VCC) + MCFG_I8279_IN_SHIFT_CB(CONSTANT(1)) // Shift key + MCFG_I8279_IN_CTRL_CB(CONSTANT(1)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/model1.cpp b/src/mame/drivers/model1.cpp index 1761909668d..257946d3c71 100644 --- a/src/mame/drivers/model1.cpp +++ b/src/mame/drivers/model1.cpp @@ -1710,15 +1710,15 @@ MACHINE_CONFIG_START(model1_state::model1) MCFG_VIDEO_START_OVERRIDE(model1_state,model1) - MCFG_SEGAM1AUDIO_ADD(M1AUDIO_TAG) - MCFG_SEGAM1AUDIO_RXD_HANDLER(WRITELINE("m1uart", i8251_device, write_rxd)) + SEGAM1AUDIO(config, m_m1audio, 0); + m_m1audio->rxd_handler().set(m_m1uart, FUNC(i8251_device::write_rxd)); - MCFG_DEVICE_ADD("m1uart", I8251, 8000000) // uPD71051C, clock unknown - MCFG_I8251_TXD_HANDLER(WRITELINE(M1AUDIO_TAG, segam1audio_device, write_txd)) + I8251(config, m_m1uart, 8000000); // uPD71051C, clock unknown + m_m1uart->txd_handler().set(m_m1audio, FUNC(segam1audio_device::write_txd)); - MCFG_CLOCK_ADD("m1uart_clock", 500000) // 16 times 31.25MHz (standard Sega/MIDI sound data rate) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("m1uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("m1uart", i8251_device, write_rxc)) + clock_device &m1uart_clock(CLOCK(config, "m1uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate) + m1uart_clock.signal_handler().set(m_m1uart, FUNC(i8251_device::write_txc)); + m1uart_clock.signal_handler().append(m_m1uart, FUNC(i8251_device::write_rxc)); MACHINE_CONFIG_END MACHINE_CONFIG_START(model1_state::model1_hle) @@ -1781,9 +1781,7 @@ MACHINE_CONFIG_START(model1_state::swa) MCFG_SOUND_ROUTE(1, "dright", 1.0) // Apparently m1audio has to filter out commands the DSB shouldn't see - MCFG_DEVICE_MODIFY(M1AUDIO_TAG) - MCFG_SEGAM1AUDIO_RXD_HANDLER(WRITELINE("m1uart", i8251_device, write_rxd)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(DSBZ80_TAG, dsbz80_device, write_txd)) + m_m1audio->rxd_handler().append(m_dsbz80, FUNC(dsbz80_device::write_txd)); MACHINE_CONFIG_END MACHINE_CONFIG_START(model1_state::wingwar) diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index 704e05808c4..5972bda7232 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -2445,13 +2445,13 @@ MACHINE_CONFIG_START(model2_state::model2_scsp) MCFG_SOUND_ROUTE(0, "lspeaker", 2.0) MCFG_SOUND_ROUTE(0, "rspeaker", 2.0) - MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051C, clock unknown -// MCFG_I8251_RXRDY_HANDLER(WRITELINE(*this, model2_state, sound_ready_w)) -// MCFG_I8251_TXRDY_HANDLER(WRITELINE(*this, model2_state, sound_ready_w)) + I8251(config, m_uart, 8000000); // uPD71051C, clock unknown +// m_uart->rxrdy_handler().set(FUNC(model2_state::sound_ready_w)); +// m_uart->txrdy_handler().set(FUNC(model2_state::sound_ready_w)); - MCFG_CLOCK_ADD("uart_clock", 500000) // 16 times 31.25MHz (standard Sega/MIDI sound data rate) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate) + uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc)); MACHINE_CONFIG_END /* original Model 2 */ @@ -2494,15 +2494,15 @@ MACHINE_CONFIG_START(model2o_state::model2o) model2_timers(config); model2_screen(config); - MCFG_SEGAM1AUDIO_ADD(M1AUDIO_TAG) - MCFG_SEGAM1AUDIO_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd)) + SEGAM1AUDIO(config, m_m1audio, 0); + m_m1audio->rxd_handler().set(m_uart, FUNC(i8251_device::write_rxd)); - MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051C, clock unknown - MCFG_I8251_TXD_HANDLER(WRITELINE(M1AUDIO_TAG, segam1audio_device, write_txd)) + I8251(config, m_uart, 8000000); // uPD71051C, clock unknown + m_uart->txd_handler().set(m_m1audio, FUNC(segam1audio_device::write_txd)); - MCFG_CLOCK_ADD("uart_clock", 500000) // 16 times 31.25MHz (standard Sega/MIDI sound data rate) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate) + uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc)); MCFG_M2COMM_ADD("m2comm") MACHINE_CONFIG_END @@ -2544,14 +2544,14 @@ MACHINE_CONFIG_START(model2_state::sj25_0207_01) MCFG_DEVICE_IO_MAP(drive_io_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", model2_state, irq0_line_hold) - MCFG_DEVICE_ADD("driveio1", SEGA_315_5296, 0) // unknown clock - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, model2_state, driveio_port_w)) - MCFG_315_5296_IN_PORTG_CB(READ8(*this, model2_state, driveio_portg_r)) - MCFG_315_5296_IN_PORTH_CB(READ8(*this, model2_state, driveio_porth_r)) + sega_315_5296_device &driveio1(SEGA_315_5296(config, "driveio1", 0)); // unknown clock + driveio1.out_pd_callback().set(FUNC(model2_state::driveio_port_w)); + driveio1.in_pg_callback().set(FUNC(model2_state::driveio_portg_r)); + driveio1.in_ph_callback().set(FUNC(model2_state::driveio_porth_r)); - MCFG_DEVICE_ADD("driveio2", SEGA_315_5296, 0) // unknown clock + SEGA_315_5296(config, "driveio2", 0); // unknown clock - MCFG_DEVICE_ADD("driveadc", MSM6253, 0) + MSM6253(config, "driveadc", 0); MACHINE_CONFIG_END MACHINE_CONFIG_START(model2o_state::daytona) @@ -2665,11 +2665,11 @@ MACHINE_CONFIG_END // Includes a Model 1 Sound board for additional sounds - Deluxe version only MACHINE_CONFIG_START(model2a_state::manxttdx) manxtt(config); - MCFG_SEGAM1AUDIO_ADD(M1AUDIO_TAG) - MCFG_SEGAM1AUDIO_RXD_HANDLER(WRITELINE("uart", i8251_device, write_rxd)) - MCFG_DEVICE_MODIFY("uart") - MCFG_I8251_TXD_HANDLER(WRITELINE(M1AUDIO_TAG, segam1audio_device, write_txd)) + SEGAM1AUDIO(config, m_m1audio, 0); + m_m1audio->rxd_handler().set(m_uart, FUNC(i8251_device::write_rxd)); + + m_uart->txd_handler().set(m_m1audio, FUNC(segam1audio_device::write_txd)); MACHINE_CONFIG_END MACHINE_CONFIG_START( model2a_state::srallyc ) @@ -2901,8 +2901,7 @@ MACHINE_CONFIG_START( model2c_state::stcc ) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) - MCFG_DEVICE_MODIFY("uart") - MCFG_I8251_TXD_HANDLER(WRITELINE(DSBZ80_TAG, dsbz80_device, write_txd)) + m_uart->txd_handler().set(m_dsbz80, FUNC(dsbz80_device::write_txd)); MACHINE_CONFIG_END MACHINE_CONFIG_START( model2c_state::waverunr ) diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp index 8f5500a0778..a127a29b146 100644 --- a/src/mame/drivers/model3.cpp +++ b/src/mame/drivers/model3.cpp @@ -5849,12 +5849,12 @@ MACHINE_CONFIG_START(model3_state::scud) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) - MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051 - MCFG_I8251_TXD_HANDLER(WRITELINE(DSBZ80_TAG, dsbz80_device, write_txd)) + I8251(config, m_uart, 8000000); // uPD71051 + m_uart->txd_handler().set(m_dsbz80, FUNC(dsbz80_device::write_txd)); - MCFG_CLOCK_ADD("uart_clock", 500000) // 16 times 31.25MHz (standard Sega/MIDI sound data rate) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate) + uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc)); MACHINE_CONFIG_END MACHINE_CONFIG_START(model3_state::model3_20) diff --git a/src/mame/drivers/mrflea.cpp b/src/mame/drivers/mrflea.cpp index 1b25d88777c..5678a2bc898 100644 --- a/src/mame/drivers/mrflea.cpp +++ b/src/mame/drivers/mrflea.cpp @@ -270,16 +270,16 @@ MACHINE_CONFIG_START(mrflea_state::mrflea) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) - MCFG_DEVICE_ADD("mainppi", I8255, 0) - MCFG_I8255_IN_PORTB_CB(READ8("subppi", i8255_device, pb_r)) - MCFG_I8255_OUT_PORTC_CB(WRITELINE("subppi", i8255_device, pc4_w)) MCFG_DEVCB_BIT(7) // OBFA -> STBA - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("subppi", i8255_device, pc2_w)) MCFG_DEVCB_BIT(1) // IBFB -> ACKB + i8255_device &mainppi(I8255(config, "mainppi", 0)); + mainppi.in_pb_callback().set("subppi", FUNC(i8255_device::pb_r)); + mainppi.out_pc_callback().set("subppi", FUNC(i8255_device::pc4_w)).bit(7); // OBFA -> STBA + mainppi.out_pc_callback().append("subppi", FUNC(i8255_device::pc2_w)).bit(1); // IBFB -> ACKB - MCFG_DEVICE_ADD("subppi", I8255, 0) - MCFG_I8255_IN_PORTA_CB(READ8("mainppi", i8255_device, pa_r)) - MCFG_I8255_OUT_PORTC_CB(WRITELINE("mainppi", i8255_device, pc6_w)) MCFG_DEVCB_BIT(5) // IBFA -> ACKA - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("pic", pic8259_device, ir0_w)) MCFG_DEVCB_BIT(3) // INTRA - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mainppi", i8255_device, pc2_w)) MCFG_DEVCB_BIT(1) // OBFB -> STBB + i8255_device &subppi(I8255(config, "subppi", 0)); + subppi.in_pa_callback().set("mainppi", FUNC(i8255_device::pa_r)); + subppi.out_pc_callback().set("mainppi", FUNC(i8255_device::pc6_w)).bit(5); // IBFA -> ACKA + subppi.out_pc_callback().append("pic", FUNC(pic8259_device::ir0_w)).bit(3); // INTRA + subppi.out_pc_callback().append("mainppi", FUNC(i8255_device::pc2_w)).bit(1); // OBFB -> STBB MCFG_DEVICE_ADD("pic", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("subcpu", 0)) diff --git a/src/mame/drivers/multi8.cpp b/src/mame/drivers/multi8.cpp index 05706b52420..93d34916724 100644 --- a/src/mame/drivers/multi8.cpp +++ b/src/mame/drivers/multi8.cpp @@ -605,9 +605,9 @@ MACHINE_CONFIG_START(multi8_state::multi8) MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, multi8_state, portb_w)) MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, multi8_state, portc_w)) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set("uart", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart", FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("uart", I8251, 0) // for cassette MCFG_DEVICE_ADD("pit", PIT8253, 0) diff --git a/src/mame/drivers/munchmo.cpp b/src/mame/drivers/munchmo.cpp index f36713eac6b..3e7b92aded3 100644 --- a/src/mame/drivers/munchmo.cpp +++ b/src/mame/drivers/munchmo.cpp @@ -352,8 +352,7 @@ MACHINE_CONFIG_START(munchmo_state::mnchmobl) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(ASSERTLINE(m_audiocpu, 0)) + GENERIC_LATCH_8(config, m_soundlatch).data_pending_callback().set_inputline(m_audiocpu, 0, ASSERT_LINE); /* AY clock speeds confirmed to match known recording */ MCFG_DEVICE_ADD(m_ay8910[0], AY8910, XTAL(15'000'000)/8) diff --git a/src/mame/drivers/mx2178.cpp b/src/mame/drivers/mx2178.cpp index d96d5f8b813..d6ade3f1ba2 100644 --- a/src/mame/drivers/mx2178.cpp +++ b/src/mame/drivers/mx2178.cpp @@ -154,11 +154,11 @@ MACHINE_CONFIG_START(mx2178_state::mx2178) MCFG_MC6845_UPDATE_ROW_CB(mx2178_state, crtc_update_row) MCFG_MC6845_OUT_VSYNC_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) - MCFG_DEVICE_ADD("acia_clock", CLOCK, XTAL(18'869'600) / 30) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia1", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia1", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia2", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia2", acia6850_device, write_rxc)) + clock_device &acia_clock(CLOCK(config, "acia_clock", XTAL(18'869'600) / 30)); + acia_clock.signal_handler().set("acia1", FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append("acia1", FUNC(acia6850_device::write_rxc)); + acia_clock.signal_handler().append("acia2", FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append("acia2", FUNC(acia6850_device::write_rxc)); MCFG_DEVICE_ADD("acia1", ACIA6850, 0) MCFG_ACIA6850_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/namcos12.cpp b/src/mame/drivers/namcos12.cpp index 6105611f2c2..fedcd9504e3 100644 --- a/src/mame/drivers/namcos12.cpp +++ b/src/mame/drivers/namcos12.cpp @@ -1727,19 +1727,20 @@ void namcos12_state::init_golgo13() MACHINE_CONFIG_START(namcos12_state::namcos12_mobo) /* basic machine hardware */ - MCFG_DEVICE_ADD("sub", H83002, 16934400) // frequency based on research (superctr) + MCFG_DEVICE_ADD(m_sub, H83002, 16934400) // frequency based on research (superctr) MCFG_DEVICE_PROGRAM_MAP(s12h8rwmap) MCFG_DEVICE_IO_MAP(s12h8iomap) MCFG_NAMCO_SETTINGS_ADD("namco_settings") - MCFG_RTC4543_ADD("rtc", XTAL(32'768)) + MCFG_RTC4543_ADD(m_rtc, XTAL(32'768)) MCFG_RTC4543_DATA_CALLBACK(WRITELINE("sub:sci1", h8_sci_device, rx_w)) - MCFG_DEVICE_MODIFY("sub:sci1") - MCFG_H8_SCI_TX_CALLBACK(WRITELINE("namco_settings", namco_settings_device, data_w)) - MCFG_H8_SCI_CLK_CALLBACK(WRITELINE("rtc", rtc4543_device, clk_w)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("namco_settings", namco_settings_device, clk_w)) + // FIXME: need better syntax for configuring H8 onboard devices + h8_sci_device &sub_sci1(*m_sub->subdevice("sci1")); + sub_sci1.tx_handler().set(m_settings, FUNC(namco_settings_device::data_w)); + sub_sci1.clk_handler().set(m_rtc, FUNC(rtc4543_device::clk_w)).invert(); + sub_sci1.clk_handler().append(m_settings, FUNC(namco_settings_device::clk_w)); MCFG_DEVICE_ADD("at28c16", AT28C16, 0) diff --git a/src/mame/drivers/namcos23.cpp b/src/mame/drivers/namcos23.cpp index 56f63206b6f..1d30616c4f9 100644 --- a/src/mame/drivers/namcos23.cpp +++ b/src/mame/drivers/namcos23.cpp @@ -3576,13 +3576,13 @@ GFXDECODE_END MACHINE_CONFIG_START(namcos23_state::gorgon) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", R4650BE, BUSCLOCK*4) + MCFG_DEVICE_ADD(m_maincpu, R4650BE, BUSCLOCK*4) MCFG_MIPS3_ICACHE_SIZE(8192) // VERIFIED MCFG_MIPS3_DCACHE_SIZE(8192) // VERIFIED MCFG_DEVICE_PROGRAM_MAP(gorgon_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos23_state, interrupt) - MCFG_DEVICE_ADD("subcpu", H83002, H8CLOCK ) + MCFG_DEVICE_ADD(m_subcpu, H83002, H8CLOCK) MCFG_DEVICE_PROGRAM_MAP( s23h8rwmap ) MCFG_DEVICE_IO_MAP( s23h8iomap ) @@ -3590,7 +3590,7 @@ MACHINE_CONFIG_START(namcos23_state::gorgon) MCFG_DEVICE_MODIFY("subcpu:sci0") MCFG_H8_SCI_SET_EXTERNAL_CLOCK_PERIOD(attotime::from_hz(JVSCLOCK/8)) - MCFG_DEVICE_ADD("iocpu", H83334, JVSCLOCK ) + MCFG_DEVICE_ADD(m_iocpu, H83334, JVSCLOCK ) MCFG_DEVICE_PROGRAM_MAP( s23iobrdmap ) MCFG_DEVICE_IO_MAP( s23iobrdiomap ) @@ -3603,13 +3603,14 @@ MACHINE_CONFIG_START(namcos23_state::gorgon) MCFG_NAMCO_SETTINGS_ADD("namco_settings") - MCFG_RTC4543_ADD("rtc", XTAL(32'768)) + MCFG_RTC4543_ADD(m_rtc, XTAL(32'768)) MCFG_RTC4543_DATA_CALLBACK(WRITELINE("subcpu:sci1", h8_sci_device, rx_w)) - MCFG_DEVICE_MODIFY("subcpu:sci1") - MCFG_H8_SCI_TX_CALLBACK(WRITELINE("namco_settings", namco_settings_device, data_w)) - MCFG_H8_SCI_CLK_CALLBACK(WRITELINE("rtc", rtc4543_device, clk_w)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("namco_settings", namco_settings_device, clk_w)) + // FIXME: need better syntax for configuring H8 onboard devices + h8_sci_device &subcpu_sci1(*m_subcpu->subdevice("sci1")); + subcpu_sci1.tx_handler().set(m_settings, FUNC(namco_settings_device::data_w)); + subcpu_sci1.clk_handler().set(m_rtc, FUNC(rtc4543_device::clk_w)).invert(); + subcpu_sci1.clk_handler().append(m_settings, FUNC(namco_settings_device::clk_w)); MCFG_NVRAM_ADD_0FILL("nvram") @@ -3643,13 +3644,13 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(namcos23_state::s23) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", R4650BE, BUSCLOCK*4) + MCFG_DEVICE_ADD(m_maincpu, R4650BE, BUSCLOCK*4) MCFG_MIPS3_ICACHE_SIZE(8192) // VERIFIED MCFG_MIPS3_DCACHE_SIZE(8192) // VERIFIED MCFG_DEVICE_PROGRAM_MAP(s23_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos23_state, interrupt) - MCFG_DEVICE_ADD("subcpu", H83002, H8CLOCK ) + MCFG_DEVICE_ADD(m_subcpu, H83002, H8CLOCK) MCFG_DEVICE_PROGRAM_MAP( s23h8rwmap ) MCFG_DEVICE_IO_MAP( s23h8iomap ) @@ -3657,7 +3658,7 @@ MACHINE_CONFIG_START(namcos23_state::s23) MCFG_DEVICE_MODIFY("subcpu:sci0") MCFG_H8_SCI_SET_EXTERNAL_CLOCK_PERIOD(attotime::from_hz(JVSCLOCK/8)) - MCFG_DEVICE_ADD("iocpu", H83334, JVSCLOCK ) + MCFG_DEVICE_ADD(m_iocpu, H83334, JVSCLOCK ) MCFG_DEVICE_PROGRAM_MAP( s23iobrdmap ) MCFG_DEVICE_IO_MAP( s23iobrdiomap ) @@ -3670,13 +3671,14 @@ MACHINE_CONFIG_START(namcos23_state::s23) MCFG_NAMCO_SETTINGS_ADD("namco_settings") - MCFG_RTC4543_ADD("rtc", XTAL(32'768)) + MCFG_RTC4543_ADD(m_rtc, XTAL(32'768)) MCFG_RTC4543_DATA_CALLBACK(WRITELINE("subcpu:sci1", h8_sci_device, rx_w)) - MCFG_DEVICE_MODIFY("subcpu:sci1") - MCFG_H8_SCI_TX_CALLBACK(WRITELINE("namco_settings", namco_settings_device, data_w)) - MCFG_H8_SCI_CLK_CALLBACK(WRITELINE("rtc", rtc4543_device, clk_w)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("namco_settings", namco_settings_device, clk_w)) + // FIXME: need better syntax for configuring H8 onboard devices + h8_sci_device &subcpu_sci1(*m_subcpu->subdevice("sci1")); + subcpu_sci1.tx_handler().set(m_settings, FUNC(namco_settings_device::data_w)); + subcpu_sci1.clk_handler().set(m_rtc, FUNC(rtc4543_device::clk_w)).invert(); + subcpu_sci1.clk_handler().append(m_settings, FUNC(namco_settings_device::clk_w)); MCFG_NVRAM_ADD_0FILL("nvram") @@ -3732,13 +3734,13 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(namcos23_state::ss23) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", R4650BE, BUSCLOCK*5) + MCFG_DEVICE_ADD(m_maincpu, R4650BE, BUSCLOCK*5) MCFG_MIPS3_ICACHE_SIZE(8192) // VERIFIED MCFG_MIPS3_DCACHE_SIZE(8192) // VERIFIED MCFG_DEVICE_PROGRAM_MAP(s23_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", namcos23_state, interrupt) - MCFG_DEVICE_ADD("subcpu", H83002, H8CLOCK ) + MCFG_DEVICE_ADD(m_subcpu, H83002, H8CLOCK) MCFG_DEVICE_PROGRAM_MAP( s23h8rwmap ) MCFG_DEVICE_IO_MAP( s23h8iomap ) @@ -3750,13 +3752,14 @@ MACHINE_CONFIG_START(namcos23_state::ss23) MCFG_NAMCO_SETTINGS_ADD("namco_settings") - MCFG_RTC4543_ADD("rtc", XTAL(32'768)) + MCFG_RTC4543_ADD(m_rtc, XTAL(32'768)) MCFG_RTC4543_DATA_CALLBACK(WRITELINE("subcpu:sci1", h8_sci_device, rx_w)) - MCFG_DEVICE_MODIFY("subcpu:sci1") - MCFG_H8_SCI_TX_CALLBACK(WRITELINE("namco_settings", namco_settings_device, data_w)) - MCFG_H8_SCI_CLK_CALLBACK(WRITELINE("rtc", rtc4543_device, clk_w)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("namco_settings", namco_settings_device, clk_w)) + // FIXME: need better syntax for configuring H8 onboard devices + h8_sci_device &subcpu_sci1(*m_subcpu->subdevice("sci1")); + subcpu_sci1.tx_handler().set(m_settings, FUNC(namco_settings_device::data_w)); + subcpu_sci1.clk_handler().set(m_rtc, FUNC(rtc4543_device::clk_w)).invert(); + subcpu_sci1.clk_handler().append(m_settings, FUNC(namco_settings_device::clk_w)); MCFG_NVRAM_ADD_0FILL("nvram") diff --git a/src/mame/drivers/nbmj9195.cpp b/src/mame/drivers/nbmj9195.cpp index 2767038d9cb..4738f676d50 100644 --- a/src/mame/drivers/nbmj9195.cpp +++ b/src/mame/drivers/nbmj9195.cpp @@ -2527,16 +2527,16 @@ MACHINE_CONFIG_START(nbmj9195_state::NBMJDRV1_base) MCFG_TMPZ84C011_PORTE_WRITE_CB(WRITE8(*this, nbmj9195_state, soundcpu_porte_w)) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(1024, 512) /* no way this is correct */ - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 240-1) - MCFG_SCREEN_UPDATE_DRIVER(nbmj9195_state, screen_update) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c011_device, trg1)) MCFG_DEVCB_INVERT + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK); + m_screen->set_refresh_hz(60); + m_screen->set_size(1024, 512); /* no way this is correct */ + m_screen->set_visarea(0, 640-1, 0, 240-1); + m_screen->set_screen_update(FUNC(nbmj9195_state::screen_update)); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(m_maincpu, FUNC(tmpz84c011_device::trg1)).invert(); - MCFG_PALETTE_ADD("palette", 256) + MCFG_PALETTE_ADD(m_palette, 256) /* sound hardware */ SPEAKER(config, "speaker").front_center(); diff --git a/src/mame/drivers/nemesis.cpp b/src/mame/drivers/nemesis.cpp index c3d9c9a7de5..2ce71783485 100644 --- a/src/mame/drivers/nemesis.cpp +++ b/src/mame/drivers/nemesis.cpp @@ -1468,17 +1468,17 @@ MACHINE_CONFIG_START(nemesis_state::nemesis) MCFG_DEVICE_ADD("audiocpu", Z80,14318180/4) /* From schematics, should be accurate */ MCFG_DEVICE_PROGRAM_MAP(sound_map) /* fixed */ - MCFG_DEVICE_ADD("outlatch", LS259, 0) // 13J - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, nemesis_state, coin1_lockout_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, nemesis_state, coin2_lockout_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, nemesis_state, sound_irq_w)) + ls259_device &outlatch(LS259(config, "outlatch")); // 13J + outlatch.q_out_cb<0>().set(FUNC(nemesis_state::coin1_lockout_w)); + outlatch.q_out_cb<0>().append(FUNC(nemesis_state::coin2_lockout_w)); + outlatch.q_out_cb<2>().set(FUNC(nemesis_state::sound_irq_w)); - MCFG_DEVICE_ADD("intlatch", LS259, 0) // 11K - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, nemesis_state, irq_enable_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, nemesis_state, gfx_flipx_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, nemesis_state, gfx_flipy_w)) + ls259_device &intlatch(LS259(config, "intlatch")); // 11K + intlatch.q_out_cb<0>().set(FUNC(nemesis_state::irq_enable_w)); + intlatch.q_out_cb<2>().set(FUNC(nemesis_state::gfx_flipx_w)); + intlatch.q_out_cb<3>().set(FUNC(nemesis_state::gfx_flipy_w)); - MCFG_WATCHDOG_ADD("watchdog") + WATCHDOG_TIMER(config, "watchdog", 0); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index 49067ee0c27..fcbad852f34 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -1921,17 +1921,17 @@ MACHINE_CONFIG_START(neogeo_base_state::neogeo_base) MCFG_DEVICE_ADD(m_sprgen, NEOGEO_SPRITE_OPTIMZIED, 0) /* audio hardware */ - MCFG_INPUT_MERGER_ALL_HIGH(m_audionmi) - MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE(m_audiocpu, INPUT_LINE_NMI)); + INPUT_MERGER_ALL_HIGH(config, m_audionmi); + m_audionmi->output_handler().set_inputline(m_audiocpu, INPUT_LINE_NMI); - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) - MCFG_GENERIC_LATCH_SEPARATE_ACKNOWLEDGE(false) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(WRITELINE(m_audionmi, input_merger_device, in_w<0>)) + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->set_separate_acknowledge(false); + m_soundlatch->data_pending_callback().set(m_audionmi, FUNC(input_merger_device::in_w<0>)); - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch2) + GENERIC_LATCH_8(config, m_soundlatch2); - MCFG_DEVICE_ADD(m_ym, YM2610, NEOGEO_YM2610_CLOCK) - MCFG_YM2610_IRQ_HANDLER(INPUTLINE(m_audiocpu, 0)) + YM2610(config, m_ym, NEOGEO_YM2610_CLOCK); + m_ym->irq_handler().set_inputline(m_audiocpu, 0); MACHINE_CONFIG_END diff --git a/src/mame/drivers/neogeocd.cpp b/src/mame/drivers/neogeocd.cpp index fc807da9b08..08b1f225101 100644 --- a/src/mame/drivers/neogeocd.cpp +++ b/src/mame/drivers/neogeocd.cpp @@ -1041,8 +1041,7 @@ MACHINE_CONFIG_START(ngcd_state::neocd) MCFG_DEVICE_PROGRAM_MAP(neocd_audio_map) MCFG_DEVICE_IO_MAP(neocd_audio_io_map) - MCFG_DEVICE_MODIFY("systemlatch") - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(LOGGER("NeoCD: write to regular vector change address?")) // what IS going on with "neocdz doubledr" and why do games write here if it's hooked up to nothing? + subdevice("systemlatch")->q_out_cb<1>().set_log("NeoCD: write to regular vector change address?"); // what IS going on with "neocdz doubledr" and why do games write here if it's hooked up to nothing? MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DRIVER(ngcd_state, screen_update_neocd) diff --git a/src/mame/drivers/ngen.cpp b/src/mame/drivers/ngen.cpp index 02535aad214..f2b0b044568 100644 --- a/src/mame/drivers/ngen.cpp +++ b/src/mame/drivers/ngen.cpp @@ -1039,11 +1039,11 @@ MACHINE_CONFIG_START(ngen_state::ngen) MCFG_WD2010_OUT_INTRQ_CB(WRITELINE("pic",pic8259_device,ir2_w)) MCFG_WD2010_IN_BCS_CB(READ8(*this, ngen_state,hd_buffer_r)) MCFG_WD2010_OUT_BCS_CB(WRITE8(*this, ngen_state,hd_buffer_w)) - MCFG_WD2010_IN_DRDY_CB(VCC) - MCFG_WD2010_IN_INDEX_CB(VCC) - MCFG_WD2010_IN_WF_CB(VCC) - MCFG_WD2010_IN_TK000_CB(VCC) - MCFG_WD2010_IN_SC_CB(VCC) + MCFG_WD2010_IN_DRDY_CB(CONSTANT(1)) + MCFG_WD2010_IN_INDEX_CB(CONSTANT(1)) + MCFG_WD2010_IN_WF_CB(CONSTANT(1)) + MCFG_WD2010_IN_TK000_CB(CONSTANT(1)) + MCFG_WD2010_IN_SC_CB(CONSTANT(1)) MCFG_DEVICE_ADD("hdc_timer", PIT8253, 0) MCFG_PIT8253_CLK2(20_MHz_XTAL / 10) // 2MHz MCFG_FLOPPY_DRIVE_ADD("fdc:0", ngen_floppies, "525qd", floppy_image_device::default_floppy_formats) @@ -1150,11 +1150,11 @@ MACHINE_CONFIG_START(ngen386_state::ngen386) MCFG_WD2010_OUT_INTRQ_CB(WRITELINE("pic",pic8259_device,ir2_w)) MCFG_WD2010_IN_BCS_CB(READ8(*this, ngen_state,hd_buffer_r)) MCFG_WD2010_OUT_BCS_CB(WRITE8(*this, ngen_state,hd_buffer_w)) - MCFG_WD2010_IN_DRDY_CB(VCC) - MCFG_WD2010_IN_INDEX_CB(VCC) - MCFG_WD2010_IN_WF_CB(VCC) - MCFG_WD2010_IN_TK000_CB(VCC) - MCFG_WD2010_IN_SC_CB(VCC) + MCFG_WD2010_IN_DRDY_CB(CONSTANT(1)) + MCFG_WD2010_IN_INDEX_CB(CONSTANT(1)) + MCFG_WD2010_IN_WF_CB(CONSTANT(1)) + MCFG_WD2010_IN_TK000_CB(CONSTANT(1)) + MCFG_WD2010_IN_SC_CB(CONSTANT(1)) MCFG_DEVICE_ADD("hdc_timer", PIT8253, 0) MCFG_PIT8253_CLK2(20_MHz_XTAL / 10) // 2MHz MCFG_FLOPPY_DRIVE_ADD("fdc:0", ngen_floppies, "525qd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/ninjaw.cpp b/src/mame/drivers/ninjaw.cpp index ae1853c5685..b6cd27bcf4d 100644 --- a/src/mame/drivers/ninjaw.cpp +++ b/src/mame/drivers/ninjaw.cpp @@ -753,13 +753,13 @@ MACHINE_CONFIG_START(ninjaw_state::ninjaw) MCFG_QUANTUM_TIME(attotime::from_hz(16000000/1024)) /* CPU slices */ //MCFG_QUANTUM_PERFECT_CPU("maincpu") - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, ninjaw_state, coin_control_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + tc0040ioc_device &tc0040ioc(TC0040IOC(config, "tc0040ioc", 0)); + tc0040ioc.read_0_callback().set_ioport("DSWA"); + tc0040ioc.read_1_callback().set_ioport("DSWB"); + tc0040ioc.read_2_callback().set_ioport("IN0"); + tc0040ioc.read_3_callback().set_ioport("IN1"); + tc0040ioc.write_4_callback().set(FUNC(ninjaw_state::coin_control_w)); + tc0040ioc.read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_ninjaw) @@ -869,13 +869,13 @@ MACHINE_CONFIG_START(ninjaw_state::darius2) MCFG_QUANTUM_TIME(attotime::from_hz(16000000/1024)) /* CPU slices */ //MCFG_QUANTUM_PERFECT_CPU("maincpu") - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, ninjaw_state, coin_control_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + tc0040ioc_device &tc0040ioc(TC0040IOC(config, "tc0040ioc", 0)); + tc0040ioc.read_0_callback().set_ioport("DSWA"); + tc0040ioc.read_1_callback().set_ioport("DSWB"); + tc0040ioc.read_2_callback().set_ioport("IN0"); + tc0040ioc.read_3_callback().set_ioport("IN1"); + tc0040ioc.write_4_callback().set(FUNC(ninjaw_state::coin_control_w)); + tc0040ioc.read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_ninjaw) diff --git a/src/mame/drivers/norautp.cpp b/src/mame/drivers/norautp.cpp index c28bb800202..90a29ff2c4c 100644 --- a/src/mame/drivers/norautp.cpp +++ b/src/mame/drivers/norautp.cpp @@ -1249,23 +1249,23 @@ MACHINE_CONFIG_START(norautp_state::noraut_base) MCFG_NVRAM_ADD_0FILL("nvram") /* doesn't work if placed at derivative drivers */ - MCFG_DEVICE_ADD("ppi8255_0", I8255, 0) + I8255(config, m_ppi8255[0], 0); /* (60-63) Mode 0 - Port A set as input */ - MCFG_I8255_IN_PORTA_CB(IOPORT("DSW1")) - MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, norautp_state, mainlamps_w)) - MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, norautp_state, counterlamps_w)) + m_ppi8255[0]->in_pa_callback().set_ioport("DSW1"); + m_ppi8255[0]->out_pb_callback().set(FUNC(norautp_state::mainlamps_w)); + m_ppi8255[0]->out_pc_callback().set(FUNC(norautp_state::counterlamps_w)); - MCFG_DEVICE_ADD("ppi8255_1", I8255, 0) + I8255(config, m_ppi8255[1], 0); /* (a0-a3) Mode 0 - Ports A & B set as input */ - MCFG_I8255_IN_PORTA_CB(IOPORT("IN0")) - MCFG_I8255_IN_PORTB_CB(IOPORT("IN1")) - MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, norautp_state, soundlamps_w)) + m_ppi8255[1]->in_pa_callback().set_ioport("IN0"); + m_ppi8255[1]->in_pb_callback().set_ioport("IN1"); + m_ppi8255[1]->out_pc_callback().set(FUNC(norautp_state::soundlamps_w)); - MCFG_DEVICE_ADD("ppi8255_2", I8255, 0) + I8255(config, m_ppi8255[2], 0); /* (c0-c3) Group A Mode 2 (5-lines handshacked bidirectional port) Group B Mode 0, output; (see below for lines PC0-PC2) */ - MCFG_I8255_IN_PORTC_CB(IOPORT("IN2")) - MCFG_I8255_OUT_PORTC_CB(WRITELINE(*this, norautp_state, ppi2_obf_w)) MCFG_DEVCB_BIT(7) + m_ppi8255[2]->in_pc_callback().set_ioport("IN2"); + m_ppi8255[2]->out_pc_callback().set(FUNC(norautp_state::ppi2_obf_w)).bit(7); /* PPI-2 is configured as mixed mode2 and mode0 output. It means that port A should be bidirectional and port B just as output. Port C as hshk regs, and P0-P2 as input (norautp, norautjp) or output (other sets). */ diff --git a/src/mame/drivers/nss.cpp b/src/mame/drivers/nss.cpp index b8907a845aa..9618457ed66 100644 --- a/src/mame/drivers/nss.cpp +++ b/src/mame/drivers/nss.cpp @@ -871,9 +871,9 @@ MACHINE_CONFIG_START(nss_state::nss) MCFG_SCREEN_UPDATE_DRIVER( snes_state, screen_update ) MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, nss_state, nss_vblank_irq)) - MCFG_DEVICE_ADD("ppu", SNES_PPU, 0) - MCFG_SNES_PPU_OPENBUS_CB(READ8(*this, nss_state, snes_open_bus_r)) - MCFG_VIDEO_SET_SCREEN("screen") + SNES_PPU(config, m_ppu, 0); + m_ppu->open_bus_callback().set([this] { return snes_open_bus_r(); }); // lambda because overloaded function name + m_ppu->set_screen("screen"); // NSS MCFG_SCREEN_ADD("osd", RASTER) diff --git a/src/mame/drivers/ob68k1a.cpp b/src/mame/drivers/ob68k1a.cpp index 9fe0ba9e2e9..dba4d185167 100644 --- a/src/mame/drivers/ob68k1a.cpp +++ b/src/mame/drivers/ob68k1a.cpp @@ -182,46 +182,46 @@ void ob68k1a_state::machine_reset() // MACHINE_CONFIG( ob68k1a ) //------------------------------------------------- -MACHINE_CONFIG_START(ob68k1a_state::ob68k1a) +void ob68k1a_state::ob68k1a(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD(MC68000L10_TAG, M68000, XTAL(10'000'000)) - MCFG_DEVICE_PROGRAM_MAP(ob68k1a_mem) + M68000(config, m_maincpu, 10_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &ob68k1a_state::ob68k1a_mem); // devices - MCFG_DEVICE_ADD(MC6821_0_TAG, PIA6821, 0) - MCFG_DEVICE_ADD(MC6821_1_TAG, PIA6821, 0) - MCFG_DEVICE_ADD(MC6840_TAG, PTM6840, XTAL(10'000'000)/10) - MCFG_PTM6840_EXTERNAL_CLOCKS(0, 0, 0) + PIA6821(config, m_pia0, 0); + PIA6821(config, m_pia1, 0); + PTM6840(config, MC6840_TAG, 10_MHz_XTAL/10).set_external_clocks(0, 0, 0); - MCFG_DEVICE_ADD(MC6850_0_TAG, ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_txd)) - MCFG_ACIA6850_RTS_HANDLER(WRITELINE(RS232_A_TAG, rs232_port_device, write_rts)) + ACIA6850(config, m_acia0, 0); + m_acia0->txd_handler().set(m_rs232a, FUNC(rs232_port_device::write_txd)); + m_acia0->rts_handler().set(m_rs232a, FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD(RS232_A_TAG, RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE(MC6850_0_TAG, acia6850_device, write_rxd)) - MCFG_RS232_DCD_HANDLER(WRITELINE(MC6850_0_TAG, acia6850_device, write_dcd)) - MCFG_RS232_CTS_HANDLER(WRITELINE(MC6850_0_TAG, acia6850_device, write_cts)) + RS232_PORT(config, m_rs232a, default_rs232_devices, "terminal"); + m_rs232a->rxd_handler().set(m_acia0, FUNC(acia6850_device::write_rxd)); + m_rs232a->dcd_handler().set(m_acia0, FUNC(acia6850_device::write_dcd)); + m_rs232a->cts_handler().set(m_acia0, FUNC(acia6850_device::write_cts)); - MCFG_DEVICE_ADD(MC6850_1_TAG, ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_txd)) - MCFG_ACIA6850_RTS_HANDLER(WRITELINE(RS232_B_TAG, rs232_port_device, write_rts)) + ACIA6850(config, m_acia1, 0); + m_acia1->txd_handler().set(m_rs232b, FUNC(rs232_port_device::write_txd)); + m_acia1->rts_handler().set(m_rs232b, FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD(RS232_B_TAG, RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE(MC6850_1_TAG, acia6850_device, write_rxd)) - MCFG_RS232_DCD_HANDLER(WRITELINE(MC6850_1_TAG, acia6850_device, write_dcd)) - MCFG_RS232_CTS_HANDLER(WRITELINE(MC6850_1_TAG, acia6850_device, write_cts)) + RS232_PORT(config, m_rs232b, default_rs232_devices, nullptr); + m_rs232b->rxd_handler().set(m_acia1, FUNC(acia6850_device::write_rxd)); + m_rs232b->dcd_handler().set(m_acia1, FUNC(acia6850_device::write_dcd)); + m_rs232b->cts_handler().set(m_acia1, FUNC(acia6850_device::write_cts)); - MCFG_DEVICE_ADD(COM8116_TAG, COM8116, XTAL(5'068'800)) - MCFG_COM8116_FR_HANDLER(WRITELINE(MC6850_0_TAG, acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(MC6850_0_TAG, acia6850_device, write_rxc)) - MCFG_COM8116_FT_HANDLER(WRITELINE(MC6850_1_TAG, acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(MC6850_1_TAG, acia6850_device, write_rxc)) + COM8116(config, m_dbrg, 5.0688_MHz_XTAL); + m_dbrg->fr_handler().set(m_acia0, FUNC(acia6850_device::write_txc)); + m_dbrg->fr_handler().append(m_acia0, FUNC(acia6850_device::write_rxc)); + m_dbrg->ft_handler().set(m_acia1, FUNC(acia6850_device::write_txc)); + m_dbrg->ft_handler().append(m_acia1, FUNC(acia6850_device::write_rxc)); // internal ram - MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("32K") - MCFG_RAM_EXTRA_OPTIONS("128K") -MACHINE_CONFIG_END + RAM(config, m_ram, 0); + m_ram->set_default_size("32K"); + m_ram->set_extra_options("128K"); +} diff --git a/src/mame/drivers/octopus.cpp b/src/mame/drivers/octopus.cpp index 195baa448bd..4f08d346331 100644 --- a/src/mame/drivers/octopus.cpp +++ b/src/mame/drivers/octopus.cpp @@ -926,12 +926,12 @@ MACHINE_CONFIG_START(octopus_state::octopus) MCFG_DEVICE_ADD("pic_master", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, octopus_state, get_slave_ack)) MCFG_DEVICE_ADD("pic_slave", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic_master", pic8259_device, ir7_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) // RTC (MC146818 via i8255 PPI) MCFG_DEVICE_ADD("ppi", I8255, 0) @@ -983,14 +983,14 @@ MACHINE_CONFIG_START(octopus_state::octopus) MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE("serial_a",rs232_port_device, write_rts)) MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("serial_b",rs232_port_device, write_rts)) - MCFG_DEVICE_ADD("serial_a", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("serial",z80sio_device, rxa_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("serial",z80sio_device, ctsa_w)) MCFG_DEVCB_INVERT - //MCFG_RS232_RI_HANDLER(WRITELINE("serial",z80sio_device, ria_w)) MCFG_DEVCB_INVERT - MCFG_DEVICE_ADD("serial_b", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("serial",z80sio_device, rxb_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("serial",z80sio_device, ctsb_w)) MCFG_DEVCB_INVERT - //MCFG_RS232_RI_HANDLER(WRITELINE("serial",z80sio_device, rib_w)) MCFG_DEVCB_INVERT + rs232_port_device &serial_a(RS232_PORT(config, "serial_a", default_rs232_devices, nullptr)); + serial_a.rxd_handler().set(m_serial, FUNC(z80sio_device::rxa_w)); + serial_a.cts_handler().set(m_serial, FUNC(z80sio_device::ctsa_w)).invert(); + //serial_a.ri_handler().set(m_serial, FUNC(z80sio_device::ria_w)).invert(); + rs232_port_device &serial_b(RS232_PORT(config, "serial_b", default_rs232_devices, nullptr)); + serial_b.rxd_handler().set(m_serial, FUNC(z80sio_device::rxb_w)); + serial_b.cts_handler().set(m_serial, FUNC(z80sio_device::ctsb_w)).invert(); + //serial_b.ri_handler().set(m_serial, FUNC(z80sio_device::rib_w)).invert(); MCFG_DEVICE_ADD(m_parallel, CENTRONICS, octopus_centronics_devices, "printer") MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(*this, octopus_state, parallel_busy_w)) diff --git a/src/mame/drivers/okean240.cpp b/src/mame/drivers/okean240.cpp index c97618dc5b8..d21bdbbd038 100644 --- a/src/mame/drivers/okean240.cpp +++ b/src/mame/drivers/okean240.cpp @@ -533,10 +533,10 @@ MACHINE_CONFIG_START(okean240_state::okean240t) MCFG_DEVICE_ADD("ppie", I8255, 0) - MCFG_DEVICE_ADD("pit", PIT8253, 0) - MCFG_PIT8253_CLK1(3072000) // artificial rate - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + pit8253_device &pit(PIT8253(config, "pit", 0)); + pit.set_clk<1>(3072000); // artificial rate + pit.out_handler<1>().set("uart", FUNC(i8251_device::write_txc)); + pit.out_handler<1>().append("uart", FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("pic", PIC8259, 0) diff --git a/src/mame/drivers/olyboss.cpp b/src/mame/drivers/olyboss.cpp index 34f41399498..ac42030082a 100644 --- a/src/mame/drivers/olyboss.cpp +++ b/src/mame/drivers/olyboss.cpp @@ -448,11 +448,11 @@ MACHINE_CONFIG_START( olyboss_state::olybossd ) MCFG_DEVICE_ADD("uic", AM9519, 0) MCFG_AM9519_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_UPD765A_ADD("fdc", true, true) - MCFG_UPD765_INTRQ_CALLBACK(WRITELINE("uic", am9519_device, ireq2_w)) MCFG_DEVCB_INVERT - MCFG_UPD765_DRQ_CALLBACK(WRITELINE(I8257_TAG, i8257_device, dreq0_w)) - MCFG_FLOPPY_DRIVE_ADD("fdc:0", bosscd_floppies, "525qd", floppy_image_device::default_floppy_formats) - MCFG_FLOPPY_DRIVE_SOUND(true) + UPD765A(config, m_fdc, true, true); + m_fdc->intrq_wr_callback().set(m_uic, FUNC(am9519_device::ireq2_w)).invert(); + m_fdc->drq_wr_callback().set(m_dma, FUNC(i8257_device::dreq0_w)); + FLOPPY_CONNECTOR(config, m_fdd0, bosscd_floppies, "525qd", floppy_image_device::default_floppy_formats); + m_fdd0->enable_sound(true); MCFG_DEVICE_ADD(I8257_TAG, I8257, XTAL(4'000'000)) MCFG_I8257_OUT_HRQ_CB(WRITELINE(*this, olyboss_state, hrq_w)) @@ -463,12 +463,12 @@ MACHINE_CONFIG_START( olyboss_state::olybossd ) MCFG_I8257_OUT_IOW_2_CB(WRITE8(*this, olyboss_state, crtcdma_w)) MCFG_I8257_OUT_TC_CB(WRITELINE(*this, olyboss_state, tc_w)) - MCFG_DEVICE_ADD(UPD3301_TAG, UPD3301, XTAL(14'318'181)) - MCFG_UPD3301_CHARACTER_WIDTH(8) - MCFG_UPD3301_DRAW_CHARACTER_CALLBACK_OWNER(olyboss_state, olyboss_display_pixels) - MCFG_UPD3301_DRQ_CALLBACK(WRITELINE(I8257_TAG, i8257_device, dreq2_w)) - MCFG_UPD3301_INT_CALLBACK(WRITELINE("uic", am9519_device, ireq0_w)) MCFG_DEVCB_INVERT - MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) + UPD3301(config, m_crtc, XTAL(14'318'181)); + m_crtc->set_character_width(8); + m_crtc->set_display_callback(FUNC(olyboss_state::olyboss_display_pixels), this); + m_crtc->drq_wr_callback().set(m_dma, FUNC(i8257_device::dreq2_w)); + m_crtc->int_wr_callback().set(m_uic, FUNC(am9519_device::ireq0_w)).invert(); + m_crtc->set_screen(SCREEN_TAG); MCFG_DEVICE_ADD("ppi", I8255, 0) MCFG_I8255_IN_PORTA_CB(READ8(*this, olyboss_state, keyboard_read)) diff --git a/src/mame/drivers/onyx.cpp b/src/mame/drivers/onyx.cpp index b5e77bbfe10..6be6a56b0e3 100644 --- a/src/mame/drivers/onyx.cpp +++ b/src/mame/drivers/onyx.cpp @@ -145,9 +145,9 @@ MACHINE_CONFIG_START(onyx_state::c8002) MCFG_DEVICE_IO_MAP(subio) MCFG_MACHINE_RESET_OVERRIDE(onyx_state, c8002) - MCFG_DEVICE_ADD("sio1_clock", CLOCK, 307200) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("sio1", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio1" ,z80sio_device, txca_w)) + clock_device &sio1_clock(CLOCK(config, "sio1_clock", 307200)); + sio1_clock.signal_handler().set(m_sio1, FUNC(z80sio_device::rxca_w)); + sio1_clock.signal_handler().append(m_sio1, FUNC(z80sio_device::txca_w)); /* peripheral hardware */ MCFG_DEVICE_ADD("pio1", Z80PIO, XTAL(16'000'000)/4) @@ -174,9 +174,9 @@ MACHINE_CONFIG_START(onyx_state::c8002) MCFG_DEVICE_ADD("pio1s", Z80PIO, XTAL(16'000'000)/4) //MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("subcpu", INPUT_LINE_IRQ0)) - MCFG_DEVICE_ADD("sio1s_clock", CLOCK, 614400) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("sio1s", z80sio_device, rxtxcb_w)) - //MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio1s" ,z80sio_device, txca_w)) + clock_device &sio1s_clock(CLOCK(config, "sio1s_clock", 614400)); + sio1s_clock.signal_handler().set("sio1s", FUNC(z80sio_device::rxtxcb_w)); + //sio1s_clock.signal_handler().append("sio1s", FUNC(z80sio_device::txca_w)); MCFG_DEVICE_ADD("sio1s", Z80SIO, XTAL(16'000'000) /4) MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("rs232s", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/osbexec.cpp b/src/mame/drivers/osbexec.cpp index c6ccbddf714..6cd100a9f19 100644 --- a/src/mame/drivers/osbexec.cpp +++ b/src/mame/drivers/osbexec.cpp @@ -599,17 +599,16 @@ MACHINE_CONFIG_START(osbexec_state::osbexec) MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_device, in_w<2>)) MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_device, in_w<3>)) - MCFG_INPUT_MERGER_ANY_HIGH("mainirq") - MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE(m_maincpu, 0)) + INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, 0); - MCFG_DEVICE_ADD(m_sio, Z80SIO, MAIN_CLOCK/6) - MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE(MODEM_PORT_TAG, rs232_port_device, write_txd)) MCFG_DEVCB_INVERT - MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE(MODEM_PORT_TAG, rs232_port_device, write_dtr)) MCFG_DEVCB_INVERT - MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE(MODEM_PORT_TAG, rs232_port_device, write_rts)) MCFG_DEVCB_INVERT - MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE(PRINTER_PORT_TAG, rs232_port_device, write_txd)) MCFG_DEVCB_INVERT - MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE(PRINTER_PORT_TAG, rs232_port_device, write_dtr)) MCFG_DEVCB_INVERT - MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE(PRINTER_PORT_TAG, rs232_port_device, write_rts)) MCFG_DEVCB_INVERT - MCFG_Z80SIO_OUT_INT_CB(WRITELINE("mainirq", input_merger_device, in_w<4>)) + Z80SIO(config, m_sio, MAIN_CLOCK/6); + m_sio->out_txda_callback().set(MODEM_PORT_TAG, FUNC(rs232_port_device::write_txd)).invert(); + m_sio->out_dtra_callback().set(MODEM_PORT_TAG, FUNC(rs232_port_device::write_dtr)).invert(); + m_sio->out_rtsa_callback().set(MODEM_PORT_TAG, FUNC(rs232_port_device::write_rts)).invert(); + m_sio->out_txdb_callback().set(PRINTER_PORT_TAG, FUNC(rs232_port_device::write_txd)).invert(); + m_sio->out_dtrb_callback().set(PRINTER_PORT_TAG, FUNC(rs232_port_device::write_dtr)).invert(); + m_sio->out_rtsb_callback().set(PRINTER_PORT_TAG, FUNC(rs232_port_device::write_rts)).invert(); + m_sio->out_int_callback().set("mainirq", FUNC(input_merger_device::in_w<4>)); MCFG_DEVICE_ADD("ctc", PIT8253, 0) MCFG_PIT8253_CLK0(MAIN_CLOCK / 13) // divided by 74S161 @ UC25 @@ -619,17 +618,17 @@ MACHINE_CONFIG_START(osbexec_state::osbexec) MCFG_PIT8253_OUT1_HANDLER(WRITELINE(m_sio, z80sio_device, rxtxcb_w)) //MCFG_PIT8253_OUT2_HANDLER(WRITELINE(*this, osbexec_state, spindle_clk_w)) - MCFG_DEVICE_ADD(MODEM_PORT_TAG, RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE(m_sio, z80sio_device, rxa_w)) MCFG_DEVCB_INVERT - MCFG_RS232_DCD_HANDLER(WRITELINE(m_sio, z80sio_device, dcda_w)) MCFG_DEVCB_INVERT - MCFG_RS232_DSR_HANDLER(WRITELINE(*this, osbexec_state, modem_dsr_w)) - MCFG_RS232_RI_HANDLER(WRITELINE(*this, osbexec_state, modem_ri_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE(m_sio, z80sio_device, ctsa_w)) MCFG_DEVCB_INVERT + rs232_port_device &modem_port(RS232_PORT(config, MODEM_PORT_TAG, default_rs232_devices, nullptr)); + modem_port.rxd_handler().set(m_sio, FUNC(z80sio_device::rxa_w)).invert(); + modem_port.dcd_handler().set(m_sio, FUNC(z80sio_device::dcda_w)).invert(); + modem_port.dsr_handler().set(FUNC(osbexec_state::modem_dsr_w)); + modem_port.ri_handler().set(FUNC(osbexec_state::modem_ri_w)); + modem_port.cts_handler().set(m_sio, FUNC(z80sio_device::ctsa_w)).invert(); - MCFG_DEVICE_ADD(PRINTER_PORT_TAG, RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE(m_sio, z80sio_device, rxb_w)) MCFG_DEVCB_INVERT - MCFG_RS232_DCD_HANDLER(WRITELINE(m_sio, z80sio_device, dcdb_w)) MCFG_DEVCB_INVERT - MCFG_RS232_CTS_HANDLER(WRITELINE(m_sio, z80sio_device, ctsb_w)) MCFG_DEVCB_INVERT + rs232_port_device &printer_port(RS232_PORT(config, PRINTER_PORT_TAG, default_rs232_devices, nullptr)); + printer_port.rxd_handler().set(m_sio, FUNC(z80sio_device::rxb_w)).invert(); + printer_port.dcd_handler().set(m_sio, FUNC(z80sio_device::dcdb_w)).invert(); + printer_port.cts_handler().set(m_sio, FUNC(z80sio_device::ctsb_w)).invert(); MCFG_DEVICE_ADD("mb8877", MB8877, MAIN_CLOCK/24) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(m_pia_1, pia6821_device, cb1_w)) diff --git a/src/mame/drivers/othello.cpp b/src/mame/drivers/othello.cpp index 5514da5af93..b0790562582 100644 --- a/src/mame/drivers/othello.cpp +++ b/src/mame/drivers/othello.cpp @@ -411,7 +411,7 @@ MACHINE_CONFIG_START(othello_state::othello) MCFG_DEVICE_IO_MAP(audio_portmap) MCFG_DEVICE_ADD(m_n7751, N7751, XTAL(6'000'000)) - MCFG_MCS48_PORT_T1_IN_CB(GND) // labelled as "TEST", connected to ground + MCFG_MCS48_PORT_T1_IN_CB(CONSTANT(0)) // labelled as "TEST", connected to ground MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, othello_state, n7751_command_r)) MCFG_MCS48_PORT_BUS_IN_CB(READ8(*this, othello_state, n7751_rom_r)) MCFG_MCS48_PORT_P1_OUT_CB(WRITE8("dac", dac_byte_interface, data_w)) diff --git a/src/mame/drivers/othunder.cpp b/src/mame/drivers/othunder.cpp index 9168c1af617..c58d7da7125 100644 --- a/src/mame/drivers/othunder.cpp +++ b/src/mame/drivers/othunder.cpp @@ -622,14 +622,14 @@ MACHINE_CONFIG_START(othunder_state::othunder) MCFG_ADC0808_IN2_CB(IOPORT("P2X")) MCFG_ADC0808_IN3_CB(IOPORT("P2Y")) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(7) - MCFG_TC0220IOC_WRITE_3_CB(WRITE8(*this, othunder_state, eeprom_w)) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, othunder_state, coins_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::do_read)).lshift(7); + m_tc0220ioc->write_3_callback().set(FUNC(othunder_state::eeprom_w)); + m_tc0220ioc->write_4_callback().set(FUNC(othunder_state::coins_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/p8k.cpp b/src/mame/drivers/p8k.cpp index 8429206dffd..cadcf6628f9 100644 --- a/src/mame/drivers/p8k.cpp +++ b/src/mame/drivers/p8k.cpp @@ -432,9 +432,9 @@ MACHINE_CONFIG_START(p8k_state::p8k) MCFG_Z80DMA_IN_IORQ_CB(READ8(*this, p8k_state, io_read_byte)) MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(*this, p8k_state, io_write_byte)) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 307200) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("sio", z80sio_device, txcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, rxcb_w)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 307200)); + uart_clock.signal_handler().set("sio", FUNC(z80sio_device::txcb_w)); + uart_clock.signal_handler().append("sio", FUNC(z80sio_device::rxcb_w)); MCFG_DEVICE_ADD("ctc0", Z80CTC, 1229000) /* 1.22MHz clock */ // to implement: callbacks! @@ -494,9 +494,9 @@ MACHINE_CONFIG_START(p8k_state::p8k_16) MCFG_DEVICE_ADD("p8k_16_daisy", P8K_16_DAISY, 0) MCFG_Z80_DAISY_CHAIN(p8k_16_daisy_chain) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 307200) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("sio", z80sio_device, txcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, rxcb_w)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 307200)); + uart_clock.signal_handler().set("sio", FUNC(z80sio_device::txcb_w)); + uart_clock.signal_handler().append("sio", FUNC(z80sio_device::rxcb_w)); /* peripheral hardware */ MCFG_DEVICE_ADD("ctc0", Z80CTC, XTAL(4'000'000)) diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp index 207868f8383..cf7f985c557 100644 --- a/src/mame/drivers/pacman.cpp +++ b/src/mame/drivers/pacman.cpp @@ -3781,10 +3781,10 @@ MACHINE_CONFIG_START(pacman_state::s2650games) pacman(config); /* basic machine hardware */ - MCFG_DEVICE_REPLACE("maincpu", S2650, MASTER_CLOCK/6/2) /* 2H */ - MCFG_DEVICE_PROGRAM_MAP(s2650games_map) - MCFG_DEVICE_DATA_MAP(s2650games_dataport) - MCFG_S2650_SENSE_INPUT(READLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT + s2650_device &maincpu(S2650(config.replace(), m_maincpu, MASTER_CLOCK/6/2)); /* 2H */ + maincpu.set_addrmap(AS_PROGRAM, &pacman_state::s2650games_map); + maincpu.set_addrmap(AS_DATA, &pacman_state::s2650games_dataport); + maincpu.sense_handler().set("screen", FUNC(screen_device::vblank)).invert(); MCFG_DEVICE_MODIFY("mainlatch") MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) diff --git a/src/mame/drivers/pandoras.cpp b/src/mame/drivers/pandoras.cpp index 0a1d1884792..dff8388cdc9 100644 --- a/src/mame/drivers/pandoras.cpp +++ b/src/mame/drivers/pandoras.cpp @@ -326,14 +326,14 @@ MACHINE_CONFIG_START(pandoras_state::pandoras) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - needed for correct synchronization of the sound CPUs */ - MCFG_DEVICE_ADD("mainlatch", LS259, 0) // C3 - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, pandoras_state, cpua_irq_enable_w)) // ENA - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // OFSET - unknown - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, pandoras_state, coin_counter_1_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, pandoras_state, coin_counter_2_w)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, pandoras_state, flipscreen_w)) // FLIP - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, pandoras_state, cpub_irq_enable_w)) // ENB - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // RESETB + ls259_device &mainlatch(LS259(config, "mainlatch")); // C3 + mainlatch.q_out_cb<0>().set(FUNC(pandoras_state::cpua_irq_enable_w)); // ENA + mainlatch.q_out_cb<1>().set_nop(); // OFSET - unknown + mainlatch.q_out_cb<2>().set(FUNC(pandoras_state::coin_counter_1_w)); + mainlatch.q_out_cb<3>().set(FUNC(pandoras_state::coin_counter_2_w)); + mainlatch.q_out_cb<5>().set(FUNC(pandoras_state::flipscreen_w)); // FLIP + mainlatch.q_out_cb<6>().set(FUNC(pandoras_state::cpub_irq_enable_w)); // ENB + mainlatch.q_out_cb<7>().set_inputline(m_subcpu, INPUT_LINE_RESET).invert(); // RESETB MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/pc100.cpp b/src/mame/drivers/pc100.cpp index 773576d06d9..8d802d3322c 100644 --- a/src/mame/drivers/pc100.cpp +++ b/src/mame/drivers/pc100.cpp @@ -660,7 +660,7 @@ MACHINE_CONFIG_START(pc100_state::pc100) MCFG_DEVICE_ADD("pic8259", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(GND) // ??? + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) // ??? MCFG_DEVICE_ADD("uart8251", I8251, 0) //MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/pc88va.cpp b/src/mame/drivers/pc88va.cpp index eb5bfaf8244..ddf04b74783 100644 --- a/src/mame/drivers/pc88va.cpp +++ b/src/mame/drivers/pc88va.cpp @@ -1633,12 +1633,12 @@ MACHINE_CONFIG_START(pc88va_state::pc88va) MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, pc88va_state, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir7_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("dmac", AM9517A, 8000000) /* ch2 is FDC, ch0/3 are "user". ch1 is unused */ MCFG_AM9517A_OUT_HREQ_CB(WRITELINE(*this, pc88va_state, pc88va_hlda_w)) diff --git a/src/mame/drivers/pc9801.cpp b/src/mame/drivers/pc9801.cpp index baa2cb7063d..fc849cd28fa 100644 --- a/src/mame/drivers/pc9801.cpp +++ b/src/mame/drivers/pc9801.cpp @@ -2306,13 +2306,13 @@ MACHINE_CONFIG_START(pc9801_state::pc9801_ide) MACHINE_CONFIG_END MACHINE_CONFIG_START(pc9801_state::pc9801_common) - MCFG_DEVICE_ADD("pit8253", PIT8253, 0) - MCFG_PIT8253_CLK0(MAIN_CLOCK_X1) /* heartbeat IRQ */ - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("pic8259_master", pic8259_device, ir0_w)) - MCFG_PIT8253_CLK1(MAIN_CLOCK_X1) /* Memory Refresh */ - MCFG_PIT8253_CLK2(MAIN_CLOCK_X1) /* RS-232c */ - MCFG_PIT8253_OUT2_HANDLER(WRITELINE(UPD8251_TAG, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(UPD8251_TAG, i8251_device, write_rxc)) + PIT8253(config, m_pit8253, 0); + m_pit8253->set_clk<0>(MAIN_CLOCK_X1); // heartbeat IRQ + m_pit8253->out_handler<0>().set(m_pic1, FUNC(pic8259_device::ir0_w)); + m_pit8253->set_clk<1>(MAIN_CLOCK_X1); // Memory Refresh + m_pit8253->set_clk<2>(MAIN_CLOCK_X1); // RS-232C + m_pit8253->out_handler<2>().set(m_sio, FUNC(i8251_device::write_txc)); + m_pit8253->out_handler<2>().append(m_sio, FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("i8237", AM9517A, 5000000) // unknown clock, TODO: check channels 0 - 1 MCFG_I8237_OUT_HREQ_CB(WRITELINE(*this, pc9801_state, dma_hrq_changed)) @@ -2328,12 +2328,12 @@ MACHINE_CONFIG_START(pc9801_state::pc9801_common) MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, pc9801_state, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir7_w)) // TODO: Check ir7_w - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("ppi8255_sys", I8255, 0) MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2")) @@ -2351,11 +2351,11 @@ MACHINE_CONFIG_START(pc9801_state::pc9801_common) MCFG_DEVICE_ADD(UPD8251_TAG, I8251, 0) - MCFG_UPD765A_ADD("upd765_2hd", true, true) - MCFG_UPD765_INTRQ_CALLBACK(WRITELINE("pic8259_slave", pic8259_device, ir3_w)) - MCFG_UPD765_DRQ_CALLBACK(WRITELINE("i8237", am9517a_device, dreq2_w)) MCFG_DEVCB_INVERT - MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:0", pc9801_floppies, "525hd", pc9801_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:1", pc9801_floppies, "525hd", pc9801_state::floppy_formats) + UPD765A(config, m_fdc_2hd, true, true); + m_fdc_2hd->intrq_wr_callback().set(m_pic2, FUNC(pic8259_device::ir3_w)); + m_fdc_2hd->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq2_w)).invert(); + FLOPPY_CONNECTOR(config, "upd765_2hd:0", pc9801_floppies, "525hd", pc9801_state::floppy_formats); + FLOPPY_CONNECTOR(config, "upd765_2hd:1", pc9801_floppies, "525hd", pc9801_state::floppy_formats); MCFG_DEVICE_ADD("ppi8255_fdd", I8255, 0) MCFG_I8255_IN_PORTA_CB(CONSTANT(0xff)) @@ -2403,11 +2403,11 @@ MACHINE_CONFIG_START(pc9801_state::pc9801) MCFG_RAM_DEFAULT_SIZE("640K") MCFG_RAM_EXTRA_OPTIONS("128K,256K,384K,512K") - MCFG_UPD765A_ADD("upd765_2dd", false, true) - MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(*this, pc9801_state, fdc_2dd_irq)) - MCFG_UPD765_DRQ_CALLBACK(WRITELINE("i8237", am9517a_device, dreq3_w)) MCFG_DEVCB_INVERT - MCFG_FLOPPY_DRIVE_ADD("upd765_2dd:0", pc9801_floppies, "525dd", pc9801_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("upd765_2dd:1", pc9801_floppies, "525dd", pc9801_state::floppy_formats) + UPD765A(config, m_fdc_2dd, false, true); + m_fdc_2dd->intrq_wr_callback().set(FUNC(pc9801_state::fdc_2dd_irq)); + m_fdc_2dd->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq3_w)).invert(); + FLOPPY_CONNECTOR(config, "upd765_2dd:0", pc9801_floppies, "525dd", pc9801_state::floppy_formats); + FLOPPY_CONNECTOR(config, "upd765_2dd:1", pc9801_floppies, "525dd", pc9801_state::floppy_formats); pc9801_sasi(config); MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL(32'768), NOOP, NOOP) diff --git a/src/mame/drivers/pcd.cpp b/src/mame/drivers/pcd.cpp index f32bdfc5de2..0587c223a16 100644 --- a/src/mame/drivers/pcd.cpp +++ b/src/mame/drivers/pcd.cpp @@ -524,7 +524,7 @@ MACHINE_CONFIG_START(pcd_state::pcd) MCFG_DEVICE_ADD("fdc", WD2793, 16_MHz_XTAL / 8) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE("pic1", pic8259_device, ir6_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE("maincpu", i80186_cpu_device, drq1_w)) - MCFG_WD_FDC_ENMF_CALLBACK(GND) + MCFG_WD_FDC_ENMF_CALLBACK(CONSTANT(0)) // floppy drives MCFG_FLOPPY_DRIVE_ADD("fdc:0", pcd_floppies, "55f", pcd_state::floppy_formats) diff --git a/src/mame/drivers/pcm.cpp b/src/mame/drivers/pcm.cpp index 881cbc481ee..58c9b3449ac 100644 --- a/src/mame/drivers/pcm.cpp +++ b/src/mame/drivers/pcm.cpp @@ -295,15 +295,15 @@ MACHINE_CONFIG_START(pcm_state::pcm) MCFG_DEVICE_ADD("sio", Z80SIO, XTAL(10'000'000) /4) - MCFG_DEVICE_ADD("ctc_u", Z80CTC, XTAL(10'000'000) /4) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) + Z80CTC(config, m_ctc_u, 10_MHz_XTAL / 4); + m_ctc_u->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - MCFG_DEVICE_ADD("ctc_s", Z80CTC, XTAL(10'000'000) /4) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, rxca_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("sio", z80sio_device, rxtxcb_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE(*this, pcm_state, pcm_82_w)) // speaker + Z80CTC(config, m_ctc_s, 10_MHz_XTAL / 4); + m_ctc_s->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_ctc_s->zc_callback<0>().set("sio", FUNC(z80sio_device::rxca_w)); + m_ctc_s->zc_callback<0>().append("sio", FUNC(z80sio_device::txca_w)); + m_ctc_s->zc_callback<1>().set("sio", FUNC(z80sio_device::rxtxcb_w)); + m_ctc_s->zc_callback<2>().set(FUNC(pcm_state::pcm_82_w)); // speaker MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/drivers/pecom.cpp b/src/mame/drivers/pecom.cpp index 2e60b208dbf..ac5d4b2228d 100644 --- a/src/mame/drivers/pecom.cpp +++ b/src/mame/drivers/pecom.cpp @@ -175,7 +175,7 @@ MACHINE_CONFIG_START(pecom_state::pecom64) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, cdp1869_device::DOT_CLK_PAL/3) MCFG_DEVICE_PROGRAM_MAP(pecom64_mem) MCFG_DEVICE_IO_MAP(pecom64_io) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, pecom_state, clear_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, pecom_state, ef2_r)) MCFG_COSMAC_Q_CALLBACK(WRITELINE(*this, pecom_state, q_w)) diff --git a/src/mame/drivers/peoplepc.cpp b/src/mame/drivers/peoplepc.cpp index 073f2c4205e..06cc28e0a5b 100644 --- a/src/mame/drivers/peoplepc.cpp +++ b/src/mame/drivers/peoplepc.cpp @@ -261,12 +261,12 @@ MACHINE_CONFIG_START(peoplepc_state::olypeopl) MCFG_DEVICE_ADD("pic8259_0", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, peoplepc_state, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_1", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_0", pic8259_device, ir7_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("ppi8255", I8255, 0) diff --git a/src/mame/drivers/peyper.cpp b/src/mame/drivers/peyper.cpp index 26c326205dd..bcf4ad25e22 100644 --- a/src/mame/drivers/peyper.cpp +++ b/src/mame/drivers/peyper.cpp @@ -630,8 +630,8 @@ MACHINE_CONFIG_START(peyper_state::peyper) MCFG_I8279_OUT_SL_CB(WRITE8(*this, peyper_state, col_w)) // scan SL lines MCFG_I8279_OUT_DISP_CB(WRITE8(*this, peyper_state, disp_w)) // display A&B MCFG_I8279_IN_RL_CB(READ8(*this, peyper_state, sw_r)) // kbd RL lines - MCFG_I8279_IN_SHIFT_CB(VCC) // Shift key - MCFG_I8279_IN_CTRL_CB(VCC) + MCFG_I8279_IN_SHIFT_CB(CONSTANT(1)) // Shift key + MCFG_I8279_IN_CTRL_CB(CONSTANT(1)) MACHINE_CONFIG_END // Not allowed to set up an array all at once, so we have this mess diff --git a/src/mame/drivers/pg685.cpp b/src/mame/drivers/pg685.cpp index 320d384025a..1ea1fd48e77 100644 --- a/src/mame/drivers/pg685.cpp +++ b/src/mame/drivers/pg685.cpp @@ -432,7 +432,7 @@ MACHINE_CONFIG_START(pg685_state::pg675) MCFG_DEVICE_ADD("mainpic", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) // i/o cpu @@ -481,7 +481,7 @@ MACHINE_CONFIG_START(pg685_state::pg685) MCFG_DEVICE_ADD("mainpic", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) // i/o cpu @@ -532,7 +532,7 @@ MACHINE_CONFIG_START(pg685_state::pg685oua12) MCFG_DEVICE_ADD("mainpic", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) // i/o cpu diff --git a/src/mame/drivers/pimps.cpp b/src/mame/drivers/pimps.cpp index 31335ecb2ed..b93bacbd965 100644 --- a/src/mame/drivers/pimps.cpp +++ b/src/mame/drivers/pimps.cpp @@ -129,39 +129,39 @@ static DEVICE_INPUT_DEFAULTS_START( terminal ) // set up terminal to default to DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 ) DEVICE_INPUT_DEFAULTS_END -MACHINE_CONFIG_START(pimps_state::pimps) - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",I8085A, XTAL(2'000'000)) - MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_IO_MAP(io_map) +void pimps_state::pimps(machine_config &config) +{ + I8085A(config, m_maincpu, 2_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &pimps_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &pimps_state::io_map); - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart1", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart1", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart2", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart2", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153'600)); + uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc)); - MCFG_DEVICE_ADD("uart1", I8251, 0) - MCFG_I8251_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd)) - MCFG_I8251_DTR_HANDLER(WRITELINE("rs232a", rs232_port_device, write_dtr)) - MCFG_I8251_RTS_HANDLER(WRITELINE("rs232a", rs232_port_device, write_rts)) + i8251_device &uart1(I8251(config, "uart1", 0)); + uart1.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd)); + uart1.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr)); + uart1.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("uart1", i8251_device, write_rxd)) - MCFG_RS232_DSR_HANDLER(WRITELINE("uart1", i8251_device, write_dsr)) - MCFG_RS232_CTS_HANDLER(WRITELINE("uart1", i8251_device, write_cts)) - MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal) // must be exactly here + rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal")); + rs232a.rxd_handler().set("uart1", FUNC(i8251_device::write_rxd)); + rs232a.dsr_handler().set("uart1", FUNC(i8251_device::write_dsr)); + rs232a.cts_handler().set("uart1", FUNC(i8251_device::write_cts)); + rs232a.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); // must be exactly here - MCFG_DEVICE_ADD("uart2", I8251, 0) - MCFG_I8251_TXD_HANDLER(WRITELINE("rs232b", rs232_port_device, write_txd)) - MCFG_I8251_DTR_HANDLER(WRITELINE("rs232b", rs232_port_device, write_dtr)) - MCFG_I8251_RTS_HANDLER(WRITELINE("rs232b", rs232_port_device, write_rts)) + i8251_device &uart2(I8251(config, "uart2", 0)); + uart2.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd)); + uart2.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr)); + uart2.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("uart2", i8251_device, write_rxd)) - MCFG_RS232_DSR_HANDLER(WRITELINE("uart2", i8251_device, write_dsr)) - MCFG_RS232_CTS_HANDLER(WRITELINE("uart2", i8251_device, write_cts)) -MACHINE_CONFIG_END + rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr)); + rs232b.rxd_handler().set("uart2", FUNC(i8251_device::write_rxd)); + rs232b.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr)); + rs232b.cts_handler().set("uart2", FUNC(i8251_device::write_cts)); +} /* ROM definition */ ROM_START( pimps ) diff --git a/src/mame/drivers/pktgaldx.cpp b/src/mame/drivers/pktgaldx.cpp index 1e061c2e6cb..164fdece3ab 100644 --- a/src/mame/drivers/pktgaldx.cpp +++ b/src/mame/drivers/pktgaldx.cpp @@ -378,11 +378,11 @@ MACHINE_CONFIG_START(pktgaldx_state::pktgaldx) MCFG_DECO_SPRITE_GFX_REGION(2) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO104_ADD("ioprot104") - MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) - MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) - MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) - MCFG_DECO146_SET_INTERFACE_SCRAMBLE(8,9, 4,5,6,7 ,1,0,3,2) // hopefully this is correct, nothing else uses this arrangement! + DECO104PROT(config, m_deco104, 0); + m_deco104->port_a_cb().set_ioport("INPUTS"); + m_deco104->port_b_cb().set_ioport("SYSTEM"); + m_deco104->port_c_cb().set_ioport("DSW"); + m_deco104->set_interface_scramble(8,9, 4,5,6,7, 1,0,3,2); // hopefully this is correct, nothing else uses this arrangement! /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/play_2.cpp b/src/mame/drivers/play_2.cpp index 6d4ac1a001f..12865da25cd 100644 --- a/src/mame/drivers/play_2.cpp +++ b/src/mame/drivers/play_2.cpp @@ -370,7 +370,7 @@ MACHINE_CONFIG_START(play_2_state::play_2) MCFG_DEVICE_ADD("maincpu", CDP1802, XTAL(2'950'000)) MCFG_DEVICE_PROGRAM_MAP(play_2_map) MCFG_DEVICE_IO_MAP(play_2_io) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, play_2_state, clear_r)) MCFG_COSMAC_EF1_CALLBACK(READLINE(*this, play_2_state, ef1_r)) MCFG_COSMAC_EF4_CALLBACK(READLINE(*this, play_2_state, ef4_r)) @@ -388,13 +388,13 @@ MACHINE_CONFIG_START(play_2_state::play_2) MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, play_2_state, clock2_w)) // This is actually a 4013 chip (has 2 RS flipflops) - MCFG_DEVICE_ADD("4013a", TTL7474, 0) - MCFG_7474_COMP_OUTPUT_CB(WRITELINE("4013a", ttl7474_device, d_w)) - MCFG_7474_OUTPUT_CB(WRITELINE(*this, play_2_state, q4013a_w)) + TTL7474(config, m_4013a, 0); + m_4013a->comp_output_cb().set(m_4013a, FUNC(ttl7474_device::d_w)); + m_4013a->output_cb().set(FUNC(play_2_state::q4013a_w)); - MCFG_DEVICE_ADD("4013b", TTL7474, 0) - MCFG_7474_OUTPUT_CB(WRITELINE("maincpu", cosmac_device, ef2_w)) - MCFG_7474_COMP_OUTPUT_CB(WRITELINE("maincpu", cosmac_device, int_w)) MCFG_DEVCB_INVERT // int is reversed in mame + TTL7474(config, m_4013b, 0); + m_4013b->output_cb().set(m_maincpu, FUNC(cosmac_device::ef2_w)); + m_4013b->comp_output_cb().set(m_maincpu, FUNC(cosmac_device::int_w)).invert(); // int is reversed in mame /* Sound */ genpin_audio(config); diff --git a/src/mame/drivers/play_3.cpp b/src/mame/drivers/play_3.cpp index aaf00424e82..5c56395a9f2 100644 --- a/src/mame/drivers/play_3.cpp +++ b/src/mame/drivers/play_3.cpp @@ -480,7 +480,7 @@ MACHINE_CONFIG_START(play_3_state::play_3) MCFG_DEVICE_ADD("maincpu", CDP1802, XTAL(3'579'545)) MCFG_DEVICE_PROGRAM_MAP(play_3_map) MCFG_DEVICE_IO_MAP(play_3_io) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, play_3_state, clear_r)) MCFG_COSMAC_EF1_CALLBACK(READLINE(*this, play_3_state, ef1_r)) MCFG_COSMAC_EF4_CALLBACK(READLINE(*this, play_3_state, ef4_r)) @@ -499,13 +499,13 @@ MACHINE_CONFIG_START(play_3_state::play_3) MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, play_3_state, clock2_w)) // This is actually a 4013 chip (has 2 RS flipflops) - MCFG_DEVICE_ADD("4013a", TTL7474, 0) - MCFG_7474_OUTPUT_CB(WRITELINE(*this, play_3_state, q4013a_w)) - MCFG_7474_COMP_OUTPUT_CB(WRITELINE("4013a", ttl7474_device, d_w)) + TTL7474(config, m_4013a, 0); + m_4013a->output_cb().set(FUNC(play_3_state::q4013a_w)); + m_4013a->comp_output_cb().set(m_4013a, FUNC(ttl7474_device::d_w)); - MCFG_DEVICE_ADD("4013b", TTL7474, 0) - MCFG_7474_OUTPUT_CB(WRITELINE("maincpu", cosmac_device, ef2_w)) MCFG_DEVCB_INVERT // inverted - MCFG_7474_COMP_OUTPUT_CB(WRITELINE("maincpu", cosmac_device, int_w)) MCFG_DEVCB_INVERT // inverted + TTL7474(config, m_4013b, 0); + m_4013b->output_cb().set(m_maincpu, FUNC(cosmac_device::ef2_w)).invert(); // inverted + m_4013b->comp_output_cb().set(m_maincpu, FUNC(cosmac_device::int_w)).invert(); // inverted /* Sound */ genpin_audio(config); @@ -513,7 +513,7 @@ MACHINE_CONFIG_START(play_3_state::play_3) MCFG_DEVICE_ADD("audiocpu", CDP1802, XTAL(3'579'545)) MCFG_DEVICE_PROGRAM_MAP(play_3_audio_map) MCFG_DEVICE_IO_MAP(play_3_audio_io) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, play_3_state, clear_a_r)) SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/playch10.cpp b/src/mame/drivers/playch10.cpp index e4766016db5..5c1106e2b8d 100644 --- a/src/mame/drivers/playch10.cpp +++ b/src/mame/drivers/playch10.cpp @@ -646,27 +646,27 @@ WRITE_LINE_MEMBER(playch10_state::vblank_irq) MACHINE_CONFIG_START(playch10_state::playch10) // basic machine hardware - MCFG_DEVICE_ADD("maincpu", Z80, 8000000/2) // 4 MHz - MCFG_DEVICE_PROGRAM_MAP(bios_map) - MCFG_DEVICE_IO_MAP(bios_io_map) + Z80(config, m_maincpu, 8000000/2); // 4 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &playch10_state::bios_map); + m_maincpu->set_addrmap(AS_IO, &playch10_state::bios_io_map); - MCFG_DEVICE_ADD("cart", N2A03, NTSC_APU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(cart_map) + N2A03(config, m_cartcpu, NTSC_APU_CLOCK); + m_cartcpu->set_addrmap(AS_PROGRAM, &playch10_state::cart_map); - MCFG_DEVICE_ADD("outlatch1", LS259, 0) // 7D - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, playch10_state, sdcs_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, playch10_state, cntrl_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, playch10_state, disp_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, playch10_state, sound_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("cart", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // GAMERES - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("cart", INPUT_LINE_HALT)) MCFG_DEVCB_INVERT // GAMESTOP + ls259_device &outlatch1(LS259(config, "outlatch1")); // 7D + outlatch1.q_out_cb<0>().set(FUNC(playch10_state::sdcs_w)); + outlatch1.q_out_cb<1>().set(FUNC(playch10_state::cntrl_mask_w)); + outlatch1.q_out_cb<2>().set(FUNC(playch10_state::disp_mask_w)); + outlatch1.q_out_cb<3>().set(FUNC(playch10_state::sound_mask_w)); + outlatch1.q_out_cb<4>().set_inputline(m_cartcpu, INPUT_LINE_RESET).invert(); // GAMERES + outlatch1.q_out_cb<5>().set_inputline(m_cartcpu, INPUT_LINE_HALT).invert(); // GAMESTOP - MCFG_DEVICE_ADD("outlatch2", LS259, 0) // 7E - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, playch10_state, nmi_enable_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, playch10_state, dog_di_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, playch10_state, ppu_reset_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, playch10_state, up8w_w)) - MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(*this, playch10_state, cart_sel_w)) MCFG_DEVCB_MASK(0x78) MCFG_DEVCB_RSHIFT(-3) + ls259_device &outlatch2(LS259(config, "outlatch2")); // 7E + outlatch2.q_out_cb<0>().set(FUNC(playch10_state::nmi_enable_w)); + outlatch2.q_out_cb<1>().set(FUNC(playch10_state::dog_di_w)); + outlatch2.q_out_cb<2>().set(FUNC(playch10_state::ppu_reset_w)); + outlatch2.q_out_cb<7>().set(FUNC(playch10_state::up8w_w)); + outlatch2.parallel_out_cb().set(FUNC(playch10_state::cart_sel_w)).rshift(3).mask(0x0f); // video hardware MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_playch10) @@ -687,11 +687,11 @@ MACHINE_CONFIG_START(playch10_state::playch10) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(playch10_state, screen_update_playch10_bottom) - MCFG_PPU2C03B_ADD("ppu") - MCFG_PPU2C0X_SET_SCREEN("bottom") - MCFG_PPU2C0X_CPU("cart") - MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("cart", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, playch10_state, int_detect_w)) + PPU_2C03B(config, m_ppu, 0); + m_ppu->set_screen("bottom"); + m_ppu->set_cpu_tag("cart"); + m_ppu->int_callback().set_inputline(m_cartcpu, INPUT_LINE_NMI); + m_ppu->int_callback().append(FUNC(playch10_state::int_detect_w)); SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/plus4.cpp b/src/mame/drivers/plus4.cpp index c9b5cb87af6..a2cb4c6e626 100644 --- a/src/mame/drivers/plus4.cpp +++ b/src/mame/drivers/plus4.cpp @@ -919,27 +919,27 @@ MACHINE_CONFIG_START(plus4_state::plus4) // devices MCFG_PLS100_ADD(PLA_TAG) - MCFG_DEVICE_ADD(m_user, PET_USER_PORT, plus4_user_port_cards, nullptr) - MCFG_PET_USER_PORT_4_HANDLER(WRITELINE(m_spi_user, mos6529_device, write_p2)) // cassette sense - MCFG_PET_USER_PORT_5_HANDLER(WRITELINE(m_spi_user, mos6529_device, write_p3)) - MCFG_PET_USER_PORT_6_HANDLER(WRITELINE(m_spi_user, mos6529_device, write_p4)) - MCFG_PET_USER_PORT_7_HANDLER(WRITELINE(m_spi_user, mos6529_device, write_p5)) - MCFG_PET_USER_PORT_8_HANDLER(WRITELINE(m_acia, mos6551_device, write_rxc)) - MCFG_PET_USER_PORT_B_HANDLER(WRITELINE(m_spi_user, mos6529_device, write_p0)) - MCFG_PET_USER_PORT_C_HANDLER(WRITELINE(m_acia, mos6551_device, write_rxd)) - MCFG_PET_USER_PORT_F_HANDLER(WRITELINE(m_spi_user, mos6529_device, write_p7)) - MCFG_PET_USER_PORT_H_HANDLER(WRITELINE(m_acia, mos6551_device, write_dcd)) MCFG_DEVCB_XOR(1) // TODO: add missing pull up before inverter - MCFG_PET_USER_PORT_J_HANDLER(WRITELINE(m_spi_user, mos6529_device, write_p6)) - MCFG_PET_USER_PORT_K_HANDLER(WRITELINE(m_spi_user, mos6529_device, write_p1)) - MCFG_PET_USER_PORT_L_HANDLER(WRITELINE(m_acia, mos6551_device, write_dsr)) MCFG_DEVCB_XOR(1) // TODO: add missing pull up before inverter + PET_USER_PORT(config, m_user, plus4_user_port_cards, nullptr); + m_user->p4_handler().set(m_spi_user, FUNC(mos6529_device::write_p2)); // cassette sense + m_user->p5_handler().set(m_spi_user, FUNC(mos6529_device::write_p3)); + m_user->p6_handler().set(m_spi_user, FUNC(mos6529_device::write_p4)); + m_user->p7_handler().set(m_spi_user, FUNC(mos6529_device::write_p5)); + m_user->p8_handler().set(m_acia, FUNC(mos6551_device::write_rxc)); + m_user->pb_handler().set(m_spi_user, FUNC(mos6529_device::write_p0)); + m_user->pc_handler().set(m_acia, FUNC(mos6551_device::write_rxd)); + m_user->pf_handler().set(m_spi_user, FUNC(mos6529_device::write_p7)); + m_user->ph_handler().set(m_acia, FUNC(mos6551_device::write_dcd)).invert(); // TODO: add missing pull up before inverter + m_user->pj_handler().set(m_spi_user, FUNC(mos6529_device::write_p6)); + m_user->pk_handler().set(m_spi_user, FUNC(mos6529_device::write_p1)); + m_user->pl_handler().set(m_acia, FUNC(mos6551_device::write_dsr)).invert(); // TODO: add missing pull up before inverter - MCFG_DEVICE_ADD(m_acia, MOS6551, 0) - MCFG_MOS6551_XTAL(XTAL(1'843'200)) - MCFG_MOS6551_RXC_HANDLER(WRITELINE(m_user, pet_user_port_device, write_8)) - MCFG_MOS6551_RTS_HANDLER(WRITELINE(m_user, pet_user_port_device, write_d)) MCFG_DEVCB_XOR(1) - MCFG_MOS6551_DTR_HANDLER(WRITELINE(m_user, pet_user_port_device, write_e)) MCFG_DEVCB_XOR(1) - MCFG_MOS6551_TXD_HANDLER(WRITELINE(m_user, pet_user_port_device, write_m)) - MCFG_MOS6551_IRQ_HANDLER(WRITELINE(*this, plus4_state, acia_irq_w)) + MOS6551(config, m_acia, 0); + m_acia->set_xtal(1.8432_MHz_XTAL); + m_acia->rxc_handler().set(m_user, FUNC(pet_user_port_device::write_8)); + m_acia->rts_handler().set(m_user, FUNC(pet_user_port_device::write_d)).invert(); + m_acia->dtr_handler().set(m_user, FUNC(pet_user_port_device::write_e)).invert(); + m_acia->txd_handler().set(m_user, FUNC(pet_user_port_device::write_m)); + m_acia->irq_handler().set(FUNC(plus4_state::acia_irq_w)); MCFG_DEVICE_ADD(m_spi_user, MOS6529, 0) MCFG_MOS6529_P0_HANDLER(WRITELINE(m_user, pet_user_port_device, write_b)) diff --git a/src/mame/drivers/pm68k.cpp b/src/mame/drivers/pm68k.cpp index 142b5829328..c8020e6c8d9 100644 --- a/src/mame/drivers/pm68k.cpp +++ b/src/mame/drivers/pm68k.cpp @@ -71,11 +71,11 @@ MACHINE_CONFIG_START(pm68k_state::pm68k) MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE("rs232b", rs232_port_device, write_dtr)) MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("rs232b", rs232_port_device, write_rts)) - MCFG_DEVICE_ADD("stc", AM9513, 4000000) - MCFG_AM9513_OUT4_CALLBACK(WRITELINE("mpsc", i8274_new_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mpsc", i8274_new_device, txca_w)) - MCFG_AM9513_OUT5_CALLBACK(WRITELINE("mpsc", i8274_new_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mpsc", i8274_new_device, txcb_w)) + am9513_device &stc(AM9513(config, "stc", 4000000)); + stc.out4_cb().set("mpsc", FUNC(i8274_new_device::rxca_w)); + stc.out4_cb().append("mpsc", FUNC(i8274_new_device::txca_w)); + stc.out5_cb().set("mpsc", FUNC(i8274_new_device::rxcb_w)); + stc.out5_cb().append("mpsc", FUNC(i8274_new_device::txcb_w)); MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(WRITELINE("mpsc", i8274_new_device, rxa_w)) diff --git a/src/mame/drivers/pntnpuzl.cpp b/src/mame/drivers/pntnpuzl.cpp index 36528e8994f..104a265b2b1 100644 --- a/src/mame/drivers/pntnpuzl.cpp +++ b/src/mame/drivers/pntnpuzl.cpp @@ -359,12 +359,12 @@ MACHINE_CONFIG_START(pntnpuzl_state::pntnpuzl) MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) - MCFG_DEVICE_ADD("via", VIA6522, XTAL(12'000'000) / 10) - MCFG_VIA6522_READPA_HANDLER(IOPORT("IN2")) - MCFG_VIA6522_READPB_HANDLER(IOPORT("IN1")) - MCFG_VIA6522_WRITEPB_HANDLER(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(4) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(5) + VIA6522(config, m_via, 12_MHz_XTAL / 10); + m_via->readpa_handler().set_ioport("IN2"); + m_via->readpb_handler().set_ioport("IN1"); + m_via->writepb_handler().set("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(4); + m_via->writepb_handler().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(6); + m_via->writepb_handler().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5); // CB2 used for serial communication with 8798 MCFG_DEVICE_ADD("mcu", P8098, XTAL(12'000'000)) diff --git a/src/mame/drivers/pokechmp.cpp b/src/mame/drivers/pokechmp.cpp index a2784703321..48f2eec067f 100644 --- a/src/mame/drivers/pokechmp.cpp +++ b/src/mame/drivers/pokechmp.cpp @@ -229,22 +229,22 @@ WRITE_LINE_MEMBER(pokechmp_state::sound_irq) MACHINE_CONFIG_START(pokechmp_state::pokechmp) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, XTAL(4'000'000)/4) - MCFG_DEVICE_PROGRAM_MAP(pokechmp_map) + M6502(config, m_maincpu, 4_MHz_XTAL/4); + m_maincpu->set_addrmap(AS_PROGRAM, &pokechmp_state::pokechmp_map); - MCFG_DEVICE_ADD("audiocpu", M6502, XTAL(4'000'000)/4) - MCFG_DEVICE_PROGRAM_MAP(pokechmp_sound_map) + M6502(config, m_audiocpu, 4_MHz_XTAL/4); + m_audiocpu->set_addrmap(AS_PROGRAM, &pokechmp_state::pokechmp_sound_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(pokechmp_state, screen_update_pokechmp) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, pokechmp_state, sound_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(pokechmp_state::screen_update_pokechmp)); + screen.set_palette("palette"); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); + screen.screen_vblank().append(FUNC(pokechmp_state::sound_irq)); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pokechmp) MCFG_PALETTE_ADD("palette", 0x400) diff --git a/src/mame/drivers/polepos.cpp b/src/mame/drivers/polepos.cpp index 636ae61685f..f3489d4df0f 100644 --- a/src/mame/drivers/polepos.cpp +++ b/src/mame/drivers/polepos.cpp @@ -862,14 +862,14 @@ MACHINE_CONFIG_START(polepos_state::polepos) MCFG_DEVICE_ADD(m_subcpu2, Z8002, MASTER_CLOCK/8) /* 3.072 MHz */ MCFG_DEVICE_PROGRAM_MAP(z8002_map_2) - MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/8/2) /* 1.536 MHz */ - MCFG_NAMCO_51XX_SCREEN("screen") - MCFG_NAMCO_51XX_INPUT_0_CB(IOPORT("IN0")) MCFG_DEVCB_MASK(0x0f) - MCFG_NAMCO_51XX_INPUT_1_CB(IOPORT("IN0")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO_51XX_INPUT_2_CB(IOPORT("DSWB")) MCFG_DEVCB_MASK(0x0f) - MCFG_NAMCO_51XX_INPUT_3_CB(IOPORT("DSWB")) MCFG_DEVCB_RSHIFT(4) - MCFG_NAMCO_51XX_OUTPUT_0_CB(WRITE8(*this, polepos_state,out_0)) - MCFG_NAMCO_51XX_OUTPUT_1_CB(WRITE8(*this, polepos_state,out_1)) + namco_51xx_device &n51xx(NAMCO_51XX(config, "51xx", MASTER_CLOCK/8/2)); /* 1.536 MHz */ + n51xx.set_screen_tag(m_screen); + n51xx.input_callback<0>().set_ioport("IN0").mask(0x0f); + n51xx.input_callback<1>().set_ioport("IN0").rshift(4); + n51xx.input_callback<2>().set_ioport("DSWB").mask(0x0f); + n51xx.input_callback<3>().set_ioport("DSWB").rshift(4); + n51xx.output_callback<0>().set(FUNC(polepos_state::out_0)); + n51xx.output_callback<1>().set(FUNC(polepos_state::out_1)); MCFG_NAMCO_52XX_ADD("52xx", MASTER_CLOCK/8/2) /* 1.536 MHz */ MCFG_NAMCO_52XX_DISCRETE("discrete") @@ -877,12 +877,12 @@ MACHINE_CONFIG_START(polepos_state::polepos) MCFG_NAMCO_52XX_ROMREAD_CB(READ8(*this, polepos_state,namco_52xx_rom_r)) MCFG_NAMCO_52XX_SI_CB(READ8(*this, polepos_state,namco_52xx_si_r)) - MCFG_NAMCO_53XX_ADD("53xx", MASTER_CLOCK/8/2) /* 1.536 MHz */ - MCFG_NAMCO_53XX_K_CB(READ8(*this, polepos_state,namco_53xx_k_r)) - MCFG_NAMCO_53XX_INPUT_0_CB(READ8(*this, polepos_state,steering_changed_r)) - MCFG_NAMCO_53XX_INPUT_1_CB(READ8(*this, polepos_state,steering_delta_r)) - MCFG_NAMCO_53XX_INPUT_2_CB(IOPORT("DSWA")) MCFG_DEVCB_MASK(0x0f) - MCFG_NAMCO_53XX_INPUT_3_CB(IOPORT("DSWA")) MCFG_DEVCB_RSHIFT(4) + namco_53xx_device &n53xx(NAMCO_53XX(config, "53xx", MASTER_CLOCK/8/2)); /* 1.536 MHz */ + n53xx.k_port_callback().set(FUNC(polepos_state::namco_53xx_k_r)); + n53xx.input_callback<0>().set(FUNC(polepos_state::steering_changed_r)); + n53xx.input_callback<1>().set(FUNC(polepos_state::steering_delta_r)); + n53xx.input_callback<2>().set_ioport("DSWA").mask(0x0f); + n53xx.input_callback<3>().set_ioport("DSWA").rshift(4); MCFG_NAMCO_54XX_ADD("54xx", MASTER_CLOCK/8/2) /* 1.536 MHz */ MCFG_NAMCO_54XX_DISCRETE("discrete") @@ -906,16 +906,16 @@ MACHINE_CONFIG_START(polepos_state::polepos) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", polepos_state, scanline, "screen", 0, 1) - MCFG_DEVICE_ADD(m_latch, LS259, 0) // at 8E on polepos - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(CLEARLINE(m_maincpu, 0)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, polepos_state, iosel_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(m_namco_sound, namco_device, sound_enable_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("polepos", polepos_sound_device, clson_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, polepos_state, gasel_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE(m_subcpu, INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE(m_subcpu2, INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, polepos_state, sb0_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, polepos_state, chacl_w)) + LS259(config, m_latch); // at 8E on polepos + m_latch->q_out_cb<0>().set_inputline(m_maincpu, 0, CLEAR_LINE).invert(); + m_latch->q_out_cb<1>().set(FUNC(polepos_state::iosel_w)); + m_latch->q_out_cb<2>().set(m_namco_sound, FUNC(namco_device::sound_enable_w)); + m_latch->q_out_cb<2>().set("polepos", FUNC(polepos_sound_device::clson_w)); + m_latch->q_out_cb<3>().set(FUNC(polepos_state::gasel_w)); + m_latch->q_out_cb<4>().set_inputline(m_subcpu, INPUT_LINE_RESET).invert(); + m_latch->q_out_cb<5>().set_inputline(m_subcpu2, INPUT_LINE_RESET).invert(); + m_latch->q_out_cb<6>().set(FUNC(polepos_state::sb0_w)); + m_latch->q_out_cb<7>().set(FUNC(polepos_state::chacl_w)); /* video hardware */ MCFG_SCREEN_ADD(m_screen, RASTER) @@ -996,12 +996,11 @@ MACHINE_CONFIG_START(polepos_state::topracern) MCFG_DEVICE_ADD(m_subcpu2, Z8002, MASTER_CLOCK/8) /* 3.072 MHz */ MCFG_DEVICE_PROGRAM_MAP(z8002_map_2) - /* TODO, remove these devices too, this bootleg doesn't have them, but the emulation doesn't boot without them.. */ - /* doesn't exist on the bootleg, but required for now or the game only boots in test mode! - they probably simulate some of the logic */ - MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/8/2) /* 1.536 MHz */ - MCFG_NAMCO_51XX_SCREEN("screen") - MCFG_NAMCO_51XX_INPUT_1_CB(IOPORT("IN0")) MCFG_DEVCB_RSHIFT(4) + // TODO, remove these devices too, this bootleg doesn't have them, but the emulation doesn't boot without them. + // doesn't exist on the bootleg, but required for now or the game only boots in test mode! they probably simulate some of the logic + namco_51xx_device &n51xx(NAMCO_51XX(config, "51xx", MASTER_CLOCK/8/2)); /* 1.536 MHz */ + n51xx.set_screen_tag(m_screen); + n51xx.input_callback<1>().set_ioport("IN0").rshift(4); MCFG_NAMCO_06XX_ADD("06xx", MASTER_CLOCK/8/64) MCFG_NAMCO_06XX_MAINCPU("maincpu") @@ -1017,16 +1016,16 @@ MACHINE_CONFIG_START(polepos_state::topracern) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", polepos_state, scanline, "screen", 0, 1) - MCFG_DEVICE_ADD(m_latch, LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(CLEARLINE(m_maincpu, 0)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, polepos_state, iosel_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(m_namco_sound, namco_device, sound_enable_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("polepos", polepos_sound_device, clson_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, polepos_state, gasel_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE(m_subcpu, INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE(m_subcpu2, INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, polepos_state, sb0_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, polepos_state, chacl_w)) + LS259(config, m_latch); + m_latch->q_out_cb<0>().set_inputline(m_maincpu, 0, CLEAR_LINE).invert(); + m_latch->q_out_cb<1>().set(FUNC(polepos_state::iosel_w)); + m_latch->q_out_cb<2>().set(m_namco_sound, FUNC(namco_device::sound_enable_w)); + m_latch->q_out_cb<2>().set("polepos", FUNC(polepos_sound_device::clson_w)); + m_latch->q_out_cb<3>().set(FUNC(polepos_state::gasel_w)); + m_latch->q_out_cb<4>().set_inputline(m_subcpu, INPUT_LINE_RESET).invert(); + m_latch->q_out_cb<5>().set_inputline(m_subcpu2, INPUT_LINE_RESET).invert(); + m_latch->q_out_cb<6>().set(FUNC(polepos_state::sb0_w)); + m_latch->q_out_cb<7>().set(FUNC(polepos_state::chacl_w)); /* video hardware */ MCFG_SCREEN_ADD(m_screen, RASTER) @@ -1063,21 +1062,22 @@ MACHINE_CONFIG_START(polepos_state::topracern) MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) MACHINE_CONFIG_END -MACHINE_CONFIG_START(polepos_state::polepos2bi) +void polepos_state::polepos2bi(machine_config &config) +{ topracern(config); - MCFG_DEVICE_ADD(m_sound_z80, Z80, MASTER_CLOCK/8) /*? MHz */ - MCFG_DEVICE_PROGRAM_MAP(sound_z80_bootleg_map) - MCFG_DEVICE_IO_MAP(sound_z80_bootleg_iomap) + Z80(config, m_sound_z80, MASTER_CLOCK/8); /*? MHz */ + m_sound_z80->set_addrmap(AS_PROGRAM, &polepos_state::sound_z80_bootleg_map); + m_sound_z80->set_addrmap(AS_IO, &polepos_state::sound_z80_bootleg_iomap); - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_sound_z80, INPUT_LINE_NMI)) - MCFG_GENERIC_LATCH_SEPARATE_ACKNOWLEDGE(true) + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_sound_z80, INPUT_LINE_NMI); + m_soundlatch->set_separate_acknowledge(true); - MCFG_DEVICE_ADD("tms", TMS5220, 600000) /* ? Mhz */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80) -MACHINE_CONFIG_END + TMS5220(config, "tms", 600000) /* ? Mhz */ + .add_route(ALL_OUTPUTS, "lspeaker", 0.80) + .add_route(ALL_OUTPUTS, "rspeaker", 0.80); +} diff --git a/src/mame/drivers/polgar.cpp b/src/mame/drivers/polgar.cpp index c0686570977..a935b2a50a8 100644 --- a/src/mame/drivers/polgar.cpp +++ b/src/mame/drivers/polgar.cpp @@ -515,14 +515,14 @@ MACHINE_CONFIG_START(mephisto_risc_state::mrisc) MCFG_NVRAM_ADD_0FILL("nvram") - MCFG_DEVICE_ADD("outlatch", HC259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(OUTPUT("led100")) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(OUTPUT("led101")) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(OUTPUT("led102")) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(OUTPUT("led103")) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(OUTPUT("led104")) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(OUTPUT("led105")) - MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(MEMBANK("rombank")) MCFG_DEVCB_MASK(0xc0) MCFG_DEVCB_XOR(0x40) MCFG_DEVCB_RSHIFT(-6) + hc259_device &outlatch(HC259(config, "outlatch")); + outlatch.q_out_cb<0>().set_output("led100"); + outlatch.q_out_cb<1>().set_output("led101"); + outlatch.q_out_cb<2>().set_output("led102"); + outlatch.q_out_cb<3>().set_output("led103"); + outlatch.q_out_cb<4>().set_output("led104"); + outlatch.q_out_cb<5>().set_output("led105"); + outlatch.parallel_out_cb().set_membank("rombank").rshift(6).mask(0x03).exor(0x01); MCFG_RAM_ADD("ram") MCFG_RAM_DEFAULT_SIZE("1M") @@ -548,9 +548,9 @@ MACHINE_CONFIG_START(mephisto_academy_state::academy) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(academy_mem) - MCFG_DEVICE_REPLACE("outlatch", HC259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, mephisto_academy_state, academy_nmi_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE("display:beeper", beep_device, set_state)) MCFG_DEVCB_INVERT + hc259_device &outlatch(HC259(config.replace(), "outlatch")); + outlatch.q_out_cb<1>().set(FUNC(mephisto_academy_state::academy_nmi_w)); + outlatch.q_out_cb<2>().set("display:beeper", FUNC(beep_device::set_state)).invert(); MCFG_DEFAULT_LAYOUT(layout_mephisto_academy) MACHINE_CONFIG_END diff --git a/src/mame/drivers/policetr.cpp b/src/mame/drivers/policetr.cpp index e8520cb5b89..5d97a50ed9e 100644 --- a/src/mame/drivers/policetr.cpp +++ b/src/mame/drivers/policetr.cpp @@ -404,13 +404,13 @@ MACHINE_CONFIG_START(policetr_state::policetr) EEPROM_SERIAL_93C66_16BIT(config, m_eeprom); /* video hardware */ - device = &SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); m_screen->set_refresh_hz(60); m_screen->set_size(400, 262); /* needs to be verified */ m_screen->set_visarea(0, 393, 0, 239); m_screen->set_palette(m_palette); - MCFG_SCREEN_UPDATE_DRIVER(policetr_state, screen_update_policetr); + m_screen->set_screen_update(FUNC(policetr_state::screen_update_policetr)); PALETTE(config, m_palette, 256); @@ -424,10 +424,11 @@ MACHINE_CONFIG_START(policetr_state::policetr) MACHINE_CONFIG_END -MACHINE_CONFIG_START(policetr_state::sshooter) +void policetr_state::sshooter(machine_config &config) +{ policetr(config); m_maincpu->set_addrmap(AS_PROGRAM, &policetr_state::sshooter_map); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/poly.cpp b/src/mame/drivers/poly.cpp index 0154f503671..0ab407676f1 100644 --- a/src/mame/drivers/poly.cpp +++ b/src/mame/drivers/poly.cpp @@ -344,13 +344,12 @@ MACHINE_CONFIG_START(poly_state::poly) //MCFG_ACIA6850_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts)) MCFG_ACIA6850_IRQ_HANDLER(WRITELINE("irqs", input_merger_device, in_w<6>)) - MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) + CLOCK(config, m_acia_clock, 153600); + m_acia_clock->signal_handler().set(m_acia, FUNC(acia6850_device::write_txc)); + m_acia_clock->signal_handler().append(m_acia, FUNC(acia6850_device::write_rxc)); /* software lists */ - MCFG_SOFTWARE_LIST_ADD("flop_list", "poly_flop") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "POLY1") + SOFTWARE_LIST(config, "flop_list").set_original("poly_flop").set_filter("POLY1"); MACHINE_CONFIG_END diff --git a/src/mame/drivers/prof80.cpp b/src/mame/drivers/prof80.cpp index 4ff164c48b3..2ecc7001fbc 100644 --- a/src/mame/drivers/prof80.cpp +++ b/src/mame/drivers/prof80.cpp @@ -470,25 +470,25 @@ MACHINE_CONFIG_START(prof80_state::prof80) MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":3", prof80_floppies, nullptr, floppy_image_device::default_floppy_formats) // DEMUX latches - MCFG_DEVICE_ADD(m_flra, LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(UPD1990A_TAG, upd1990a_device, data_in_w)) // TDI - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(UPD1990A_TAG, upd1990a_device, c0_w)) // C0 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(UPD1990A_TAG, upd1990a_device, c1_w)) // C1 - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(UPD1990A_TAG, upd1990a_device, c2_w)) // C2 - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, prof80_state, ready_w)) // READY - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(UPD1990A_TAG, upd1990a_device, clk_w)) // TCK - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, prof80_state, inuse_w)) // IN USE - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, prof80_state, motor_w)) // _MOTOR - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, prof80_state, select_w)) // SELECT - MCFG_DEVICE_ADD(m_flrb, LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, prof80_state, resf_w)) // RESF - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, prof80_state, mini_w)) // MINI - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(m_rs232a, rs232_port_device, write_rts)) // _RTS - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(m_rs232a, rs232_port_device, write_txd)) // TX - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, prof80_state, mstop_w)) // _MSTOP - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(m_rs232b, rs232_port_device, write_txd)) // TXP - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(UPD1990A_TAG, upd1990a_device, stb_w)) // TSTB - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(m_mmu, prof80_mmu_device, mme_w)) // MME + LS259(config, m_flra); + m_flra->q_out_cb<0>().set(UPD1990A_TAG, FUNC(upd1990a_device::data_in_w)); // TDI + m_flra->q_out_cb<0>().append(UPD1990A_TAG, FUNC(upd1990a_device::c0_w)); // C0 + m_flra->q_out_cb<1>().set(UPD1990A_TAG, FUNC(upd1990a_device::c1_w)); // C1 + m_flra->q_out_cb<2>().set(UPD1990A_TAG, FUNC(upd1990a_device::c2_w)); // C2 + m_flra->q_out_cb<3>().set(FUNC(prof80_state::ready_w)); // READY + m_flra->q_out_cb<4>().set(UPD1990A_TAG, FUNC(upd1990a_device::clk_w)); // TCK + m_flra->q_out_cb<5>().set(FUNC(prof80_state::inuse_w)); // IN USE + m_flra->q_out_cb<6>().set(FUNC(prof80_state::motor_w)); // _MOTOR + m_flra->q_out_cb<7>().set(FUNC(prof80_state::select_w)); // SELECT + LS259(config, m_flrb); + m_flrb->q_out_cb<0>().set(FUNC(prof80_state::resf_w)); // RESF + m_flrb->q_out_cb<1>().set(FUNC(prof80_state::mini_w)); // MINI + m_flrb->q_out_cb<2>().set(m_rs232a, FUNC(rs232_port_device::write_rts)); // _RTS + m_flrb->q_out_cb<3>().set(m_rs232a, FUNC(rs232_port_device::write_txd)); // TX + m_flrb->q_out_cb<4>().set(FUNC(prof80_state::mstop_w)); // _MSTOP + m_flrb->q_out_cb<5>().set(m_rs232b, FUNC(rs232_port_device::write_txd)); // TXP + m_flrb->q_out_cb<6>().set(UPD1990A_TAG, FUNC(upd1990a_device::stb_w)); // TSTB + m_flrb->q_out_cb<7>().set(m_mmu, FUNC(prof80_mmu_device::mme_w)); // MME // ECB bus MCFG_ECBBUS_ADD() @@ -499,8 +499,8 @@ MACHINE_CONFIG_START(prof80_state::prof80) MCFG_ECBBUS_SLOT_ADD(5, "ecb_5", ecbbus_cards, nullptr) // V24 - MCFG_DEVICE_ADD(m_rs232a, RS232_PORT, default_rs232_devices, nullptr) - MCFG_DEVICE_ADD(m_rs232b, RS232_PORT, default_rs232_devices, nullptr) + RS232_PORT(config, m_rs232a, default_rs232_devices, nullptr); + RS232_PORT(config, m_rs232b, default_rs232_devices, nullptr); // internal ram MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mame/drivers/proteus.cpp b/src/mame/drivers/proteus.cpp index a40f94a5cb5..766e41ff829 100644 --- a/src/mame/drivers/proteus.cpp +++ b/src/mame/drivers/proteus.cpp @@ -329,9 +329,9 @@ MACHINE_CONFIG_START(proteus_state::proteus) MCFG_DEVICE_PROGRAM_MAP(proteus_z80_mem) MCFG_DEVICE_IO_MAP(proteus_z80_io) - MCFG_INPUT_MERGER_ANY_HIGH("irqs") - MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("z80", INPUT_LINE_IRQ0)) + INPUT_MERGER_ANY_HIGH(config, m_irqs); + m_irqs->output_handler().set_inputline(m_maincpu, M6809_IRQ_LINE); + m_irqs->output_handler().append_inputline(m_z80, INPUT_LINE_IRQ0); /* fdc */ MCFG_DEVICE_ADD("fdc", FD1771, 4_MHz_XTAL / 2) @@ -380,9 +380,9 @@ MACHINE_CONFIG_START(proteus_state::proteus) MCFG_RS232_RXD_HANDLER(WRITELINE("acia0", acia6850_device, write_rxd)) MCFG_RS232_CTS_HANDLER(WRITELINE("acia0", acia6850_device, write_cts)) - MCFG_DEVICE_ADD("acia0_clock", CLOCK, 4_MHz_XTAL / 2 / 13) // TODO: this is set using jumpers - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia0", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia0", acia6850_device, write_rxc)) + clock_device &acia0_clock(CLOCK(config, "acia0_clock", 4_MHz_XTAL / 2 / 13)); // TODO: this is set using jumpers + acia0_clock.signal_handler().set(m_acia[0], FUNC(acia6850_device::write_txc)); + acia0_clock.signal_handler().append(m_acia[0], FUNC(acia6850_device::write_rxc)); /* printer port */ MCFG_DEVICE_ADD("acia1", ACIA6850, 0) @@ -394,9 +394,9 @@ MACHINE_CONFIG_START(proteus_state::proteus) MCFG_RS232_RXD_HANDLER(WRITELINE("acia1", acia6850_device, write_rxd)) MCFG_RS232_CTS_HANDLER(WRITELINE("acia1", acia6850_device, write_cts)) - MCFG_DEVICE_ADD("acia1_clock", CLOCK, 4_MHz_XTAL / 2 / 13) // TODO: this is set using jumpers J2 - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia1", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia1", acia6850_device, write_rxc)) + clock_device &acia1_clock(CLOCK(config, "acia1_clock", 4_MHz_XTAL / 2 / 13)); // TODO: this is set using jumpers J2 + acia1_clock.signal_handler().set(m_acia[1], FUNC(acia6850_device::write_txc)); + acia1_clock.signal_handler().append(m_acia[1], FUNC(acia6850_device::write_rxc)); /* modem port */ MCFG_DEVICE_ADD("acia2", ACIA6850, 0) @@ -408,9 +408,9 @@ MACHINE_CONFIG_START(proteus_state::proteus) MCFG_RS232_RXD_HANDLER(WRITELINE("acia2", acia6850_device, write_rxd)) MCFG_RS232_CTS_HANDLER(WRITELINE("acia2", acia6850_device, write_cts)) - MCFG_DEVICE_ADD("acia2_clock", CLOCK, 4_MHz_XTAL / 2 / 13) // TODO: this is set using jumpers J1 - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia2", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia2", acia6850_device, write_rxc)) + clock_device &acia2_clock(CLOCK(config, "acia2_clock", 4_MHz_XTAL / 2 / 13)); // TODO: this is set using jumpers J1 + acia2_clock.signal_handler().set(m_acia[2], FUNC(acia6850_device::write_txc)); + acia2_clock.signal_handler().append(m_acia[2], FUNC(acia6850_device::write_rxc)); /* software lists */ MCFG_SOFTWARE_LIST_ADD("flop_list", "poly_flop") diff --git a/src/mame/drivers/pulsar.cpp b/src/mame/drivers/pulsar.cpp index 844858f4ddd..0f0f425da38 100644 --- a/src/mame/drivers/pulsar.cpp +++ b/src/mame/drivers/pulsar.cpp @@ -234,12 +234,12 @@ MACHINE_CONFIG_START(pulsar_state::pulsar) MCFG_RS232_CTS_HANDLER(WRITELINE("dart", z80dart_device, ctsa_w)) MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal) - MCFG_DEVICE_ADD("brg", COM8116, 5.0688_MHz_XTAL) + com8116_device &brg(COM8116(config, "brg", 5.0688_MHz_XTAL)); // Schematic has the labels for FT and FR the wrong way around, but the pin numbers are correct. - MCFG_COM8116_FR_HANDLER(WRITELINE("dart", z80dart_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart", z80dart_device, rxca_w)) - MCFG_COM8116_FT_HANDLER(WRITELINE("dart", z80dart_device, txcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart", z80dart_device, rxcb_w)) + brg.fr_handler().set("dart", FUNC(z80dart_device::txca_w)); + brg.fr_handler().append("dart", FUNC(z80dart_device::rxca_w)); + brg.ft_handler().set("dart", FUNC(z80dart_device::txcb_w)); + brg.ft_handler().append("dart", FUNC(z80dart_device::rxcb_w)); MCFG_DEVICE_ADD("fdc", FD1797, 4_MHz_XTAL / 2) MCFG_FLOPPY_DRIVE_ADD("fdc:0", pulsar_floppies, "525hd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/punchout.cpp b/src/mame/drivers/punchout.cpp index 9fd885c9c83..4242cd10c15 100644 --- a/src/mame/drivers/punchout.cpp +++ b/src/mame/drivers/punchout.cpp @@ -649,15 +649,15 @@ MACHINE_CONFIG_START(punchout_state::punchout) MCFG_PALETTE_ADD("palette", 0x200) MCFG_DEFAULT_LAYOUT(layout_dualhovu) - MCFG_SCREEN_ADD("top", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(punchout_state, screen_update_punchout_top) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, punchout_state, vblank_irq)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("audiocpu", INPUT_LINE_NMI)) + screen_device &top(SCREEN(config, "top", SCREEN_TYPE_RASTER)); + top.set_refresh_hz(60); + top.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + top.set_size(32*8, 32*8); + top.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + top.set_screen_update(FUNC(punchout_state::screen_update_punchout_top)); + top.set_palette(m_palette); + top.screen_vblank().set(FUNC(punchout_state::vblank_irq)); + top.screen_vblank().append_inputline(m_audiocpu, INPUT_LINE_NMI); MCFG_SCREEN_ADD("bottom", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/pve500.cpp b/src/mame/drivers/pve500.cpp index 3376205f388..2342cf415d1 100644 --- a/src/mame/drivers/pve500.cpp +++ b/src/mame/drivers/pve500.cpp @@ -362,14 +362,14 @@ WRITE8_MEMBER(pve500_state::io_sel_w) MACHINE_CONFIG_START(pve500_state::pve500) /* Main CPU */ - MCFG_DEVICE_ADD("maincpu", TMPZ84C015, 12_MHz_XTAL / 2) /* TMPZ84C015BF-6 */ - MCFG_DEVICE_PROGRAM_MAP(maincpu_prg) - MCFG_DEVICE_IO_MAP(maincpu_io) - MCFG_Z80_DAISY_CHAIN(maincpu_daisy_chain) - MCFG_TMPZ84C015_OUT_DTRA_CB(WRITELINE(*this, pve500_state, GPI_w)) - MCFG_TMPZ84C015_OUT_DTRB_CB(WRITELINE("buzzer", beep_device, set_state)) MCFG_DEVCB_INVERT - MCFG_TMPZ84C015_OUT_TXDA_CB(WRITELINE("recorder", rs232_port_device, write_txd)) - MCFG_TMPZ84C015_OUT_TXDB_CB(WRITELINE("player1", rs232_port_device, write_txd)) + TMPZ84C015(config, m_maincpu, 12_MHz_XTAL / 2); // TMPZ84C015BF-6 + m_maincpu->set_addrmap(AS_PROGRAM, &pve500_state::maincpu_prg); + m_maincpu->set_addrmap(AS_IO, &pve500_state::maincpu_io); + m_maincpu->set_daisy_config(maincpu_daisy_chain); + m_maincpu->out_dtra_callback().set(FUNC(pve500_state::GPI_w)); + m_maincpu->out_dtrb_callback().set(m_buzzer, FUNC(beep_device::set_state)).invert(); + m_maincpu->out_txda_callback().set("recorder", FUNC(rs232_port_device::write_txd)); + m_maincpu->out_txdb_callback().set("player1", FUNC(rs232_port_device::write_txd)); MCFG_DEVICE_ADD("external_ctc", Z80CTC, 12_MHz_XTAL / 2) MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) @@ -429,15 +429,15 @@ MACHINE_CONFIG_START(pve500_state::pve500) MCFG_DEVICE_ADD("serial_mixer", RS232_PORT, default_rs232_devices, nullptr) MCFG_RS232_RXD_HANDLER(WRITELINE("subcpu", tmpz84c015_device, rxb_w)) - MCFG_DEVICE_ADD("clk1", CLOCK, 12_MHz_XTAL / 20) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("maincpu", tmpz84c015_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("maincpu", tmpz84c015_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("maincpu", tmpz84c015_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("maincpu", tmpz84c015_device, txcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("subcpu", tmpz84c015_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("subcpu", tmpz84c015_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("subcpu", tmpz84c015_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("subcpu", tmpz84c015_device, txcb_w)) + clock_device &clk1(CLOCK(config, "clk1", 12_MHz_XTAL / 20)); + clk1.signal_handler().set(m_maincpu, FUNC(tmpz84c015_device::rxca_w)); + clk1.signal_handler().append(m_maincpu, FUNC(tmpz84c015_device::txca_w)); + clk1.signal_handler().append(m_maincpu, FUNC(tmpz84c015_device::rxcb_w)); + clk1.signal_handler().append(m_maincpu, FUNC(tmpz84c015_device::txcb_w)); + clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::rxca_w)); + clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::txca_w)); + clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::rxcb_w)); + clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::txcb_w)); /* ICF5: 2kbytes of RAM shared between the two CPUs (dual-port RAM)*/ MCFG_DEVICE_ADD("mb8421", MB8421, 0) diff --git a/src/mame/drivers/qtsbc.cpp b/src/mame/drivers/qtsbc.cpp index 75109e511b2..4a937b3bebb 100644 --- a/src/mame/drivers/qtsbc.cpp +++ b/src/mame/drivers/qtsbc.cpp @@ -486,12 +486,12 @@ MACHINE_CONFIG_START(qtsbc_state::qtsbc) MCFG_DEVICE_IO_MAP(io_map) /* video hardware */ - MCFG_DEVICE_ADD("pit", PIT8253, 0) // U9 - MCFG_PIT8253_CLK0(4_MHz_XTAL / 2) /* Timer 0: baud rate gen for 8251 */ - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("usart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("usart", i8251_device, write_rxc)) - MCFG_PIT8253_CLK1(4_MHz_XTAL / 2) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("pit", pit8253_device, write_clk2)) + PIT8253(config, m_pit, 0); // U9 + m_pit->set_clk<0>(4_MHz_XTAL / 2); /* Timer 0: baud rate gen for 8251 */ + m_pit->out_handler<0>().set(m_usart, FUNC(i8251_device::write_txc)); + m_pit->out_handler<0>().append(m_usart, FUNC(i8251_device::write_rxc)); + m_pit->set_clk<1>(4_MHz_XTAL / 2); + m_pit->out_handler<1>().set(m_pit, FUNC(pit8253_device::write_clk2)); MCFG_DEVICE_ADD("usart", I8251, 0) // U8 MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/qvt6800.cpp b/src/mame/drivers/qvt6800.cpp index d78330beb51..3c44d039870 100644 --- a/src/mame/drivers/qvt6800.cpp +++ b/src/mame/drivers/qvt6800.cpp @@ -83,9 +83,9 @@ MACHINE_CONFIG_START(qvt6800_state::qvt102) MCFG_Z80CTC_ZC0_CB(WRITELINE("acia", acia6850_device, write_txc)) MCFG_Z80CTC_ZC1_CB(WRITELINE("acia", acia6850_device, write_rxc)) - MCFG_DEVICE_ADD("ctcclk", CLOCK, XTAL(16'669'800) / 18) // OR of CRTC CLK and Ï•1 - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg1)) + clock_device &ctcclk(CLOCK(config, "ctcclk", 16.6698_MHz_XTAL / 18)); // OR of CRTC CLK and Ï•1 + ctcclk.signal_handler().set("ctc", FUNC(z80ctc_device::trg0)); + ctcclk.signal_handler().append("ctc", FUNC(z80ctc_device::trg1)); MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL(16'669'800), 882, 0, 720, 315, 0, 300) diff --git a/src/mame/drivers/qx10.cpp b/src/mame/drivers/qx10.cpp index 29fd95593bb..5e4513a552b 100644 --- a/src/mame/drivers/qx10.cpp +++ b/src/mame/drivers/qx10.cpp @@ -769,12 +769,12 @@ MACHINE_CONFIG_START(qx10_state::qx10) MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, qx10_state, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir7_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("upd7201", UPD7201, MAIN_CLK/4) // channel b clock set by pit2 channel 2 // Channel A: Keyboard @@ -809,9 +809,9 @@ MACHINE_CONFIG_START(qx10_state::qx10) MCFG_DEVICE_ADD("rtc", MC146818, 32.768_kHz_XTAL) MCFG_MC146818_IRQ_HANDLER(WRITELINE("pic8259_slave", pic8259_device, ir2_w)) - MCFG_UPD765A_ADD("upd765", true, true) - MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(*this, qx10_state, qx10_upd765_interrupt)) - MCFG_UPD765_DRQ_CALLBACK(WRITELINE("8237dma_1", am9517a_device, dreq0_w)) MCFG_DEVCB_INVERT + UPD765A(config, m_fdc, true, true); + m_fdc->intrq_wr_callback().set(FUNC(qx10_state::qx10_upd765_interrupt)); + m_fdc->drq_wr_callback().set(m_dma_1, FUNC(am9517a_device::dreq0_w)).invert(); MCFG_FLOPPY_DRIVE_ADD("upd765:0", qx10_floppies, "525dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765:1", qx10_floppies, "525dd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/raiden.cpp b/src/mame/drivers/raiden.cpp index a421a5b928b..11b317ddbc2 100644 --- a/src/mame/drivers/raiden.cpp +++ b/src/mame/drivers/raiden.cpp @@ -350,17 +350,17 @@ MACHINE_CONFIG_START(raiden_state::raiden) MCFG_QUANTUM_TIME(attotime::from_hz(12000)) /* video hardware */ - MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM16) + BUFFERED_SPRITERAM16(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(59.60) /* verified on pcb */ - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(raiden_state, screen_update_raiden) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, raiden_state, vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(59.60); // verified on pcb */ + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(raiden_state::screen_update_raiden)); + screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + screen.screen_vblank().append(FUNC(raiden_state::vblank_irq)); + screen.set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_raiden) MCFG_PALETTE_ADD("palette", 2048) diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp index 369e453094d..c3c87549a8f 100644 --- a/src/mame/drivers/rainbow.cpp +++ b/src/mame/drivers/rainbow.cpp @@ -3286,10 +3286,10 @@ MACHINE_CONFIG_START(rainbow_state::rainbow) MCFG_WD2010_IN_WF_CB(READLINE(*this, rainbow_state, hdc_write_fault)) // WRITE FAULT (set to GND if not serviced) MCFG_WD2010_IN_DRDY_CB(READLINE(*this, rainbow_state, hdc_drive_ready)) // DRIVE_READY (set to VCC if not serviced) - MCFG_WD2010_IN_SC_CB(VCC) // SEEK COMPLETE (set to VCC if not serviced) + MCFG_WD2010_IN_SC_CB(CONSTANT(1)) // SEEK COMPLETE (set to VCC if not serviced) - MCFG_WD2010_IN_TK000_CB(VCC) // CURRENTLY NOT EVALUATED WITHIN 'WD2010' - MCFG_WD2010_IN_INDEX_CB(VCC) // " + MCFG_WD2010_IN_TK000_CB(CONSTANT(1)) // CURRENTLY NOT EVALUATED WITHIN 'WD2010' + MCFG_WD2010_IN_INDEX_CB(CONSTANT(1)) // " MCFG_HARDDISK_ADD("decharddisk1") /// ******************************** / HARD DISK CONTROLLER **************************************** diff --git a/src/mame/drivers/rc702.cpp b/src/mame/drivers/rc702.cpp index 1c4b2143bb0..83aab9020f4 100644 --- a/src/mame/drivers/rc702.cpp +++ b/src/mame/drivers/rc702.cpp @@ -340,14 +340,13 @@ MACHINE_CONFIG_START(rc702_state::rc702) MCFG_MACHINE_RESET_OVERRIDE(rc702_state, rc702) - MCFG_DEVICE_ADD("ctc_clock", CLOCK, 614000) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, rc702_state, clock_w)) + CLOCK(config, "ctc_clock", 614000).signal_handler().set(FUNC(rc702_state::clock_w)); - MCFG_DEVICE_ADD("ctc1", Z80CTC, XTAL(8'000'000) / 2) - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio1", z80dart_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio1", z80dart_device, rxca_w)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("sio1", z80dart_device, rxtxcb_w)) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) + Z80CTC(config, m_ctc1, 8_MHz_XTAL / 2); + m_ctc1->zc_callback<0>().set("sio1", FUNC(z80dart_device::txca_w)); + m_ctc1->zc_callback<0>().append("sio1", FUNC(z80dart_device::rxca_w)); + m_ctc1->zc_callback<1>().set("sio1", FUNC(z80dart_device::rxtxcb_w)); + m_ctc1->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); MCFG_DEVICE_ADD("sio1", Z80DART, XTAL(8'000'000) / 2) MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) @@ -388,12 +387,12 @@ MACHINE_CONFIG_START(rc702_state::rc702) MCFG_SCREEN_VISIBLE_AREA(0, 272*2-1, 0, 200-1) MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275_device, screen_update) - MCFG_DEVICE_ADD("crtc", I8275, 11640000/7) - MCFG_I8275_CHARACTER_WIDTH(7) - MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(rc702_state, display_pixels) - MCFG_I8275_IRQ_CALLBACK(WRITELINE("7474", ttl7474_device, clear_w)) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc1", z80ctc_device, trg2)) - MCFG_I8275_DRQ_CALLBACK(WRITELINE(*this, rc702_state, crtc_drq_w)) + i8275_device &crtc(I8275(config, "crtc", 11640000/7)); + crtc.set_character_width(7); + crtc.set_display_callback(FUNC(rc702_state::display_pixels), this); + crtc.irq_wr_callback().set(m_7474, FUNC(ttl7474_device::clear_w)).invert(); + crtc.irq_wr_callback().append(m_ctc1, FUNC(z80ctc_device::trg2)); + crtc.drq_wr_callback().set(FUNC(rc702_state::crtc_drq_w)); MCFG_PALETTE_ADD("palette", 2) /* sound hardware */ diff --git a/src/mame/drivers/retofinv.cpp b/src/mame/drivers/retofinv.cpp index 0259a6940b6..3ff3ca9652b 100644 --- a/src/mame/drivers/retofinv.cpp +++ b/src/mame/drivers/retofinv.cpp @@ -432,13 +432,13 @@ MACHINE_CONFIG_START(retofinv_state::retofinv) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - enough for the sound CPU to read all commands */ - MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC72 - probably shared between CPUs - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, retofinv_state, irq0_ack_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, retofinv_state, coinlockout_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("68705", taito68705_mcu_device, reset_w)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, retofinv_state, irq1_ack_w)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &mainlatch(LS259(config, "mainlatch")); // IC72 - probably shared between CPUs + mainlatch.q_out_cb<0>().set(FUNC(retofinv_state::irq0_ack_w)); + mainlatch.q_out_cb<1>().set(FUNC(retofinv_state::coinlockout_w)); + mainlatch.q_out_cb<2>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert(); + mainlatch.q_out_cb<3>().set(m_68705, FUNC(taito68705_mcu_device::reset_w)).invert(); + mainlatch.q_out_cb<4>().set(FUNC(retofinv_state::irq1_ack_w)); + mainlatch.q_out_cb<5>().set_inputline(m_subcpu, INPUT_LINE_RESET).invert(); MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/rmnimbus.cpp b/src/mame/drivers/rmnimbus.cpp index e745ae96a5c..262f3799d3c 100644 --- a/src/mame/drivers/rmnimbus.cpp +++ b/src/mame/drivers/rmnimbus.cpp @@ -188,8 +188,8 @@ MACHINE_CONFIG_START(rmnimbus_state::nimbus) MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_centronics, centronics_device, write_strobe)) MCFG_VIA6522_IRQ_HANDLER(WRITELINE(m_maincpu, i80186_cpu_device, int3_w)) - MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer") - MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(VIA_TAG, via6522_device, write_ca1)) MCFG_DEVCB_INVERT + CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->ack_handler().set(m_via, FUNC(via6522_device::write_ca1)).invert(); MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") diff --git a/src/mame/drivers/rohga.cpp b/src/mame/drivers/rohga.cpp index 87704621b15..4a99049c2f1 100644 --- a/src/mame/drivers/rohga.cpp +++ b/src/mame/drivers/rohga.cpp @@ -938,11 +938,11 @@ MACHINE_CONFIG_START(rohga_state::rohga) MCFG_DECO_SPRITE_GFX_REGION(3) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO104_ADD("ioprot") - MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) - MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) - MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) - MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0)) + DECO104PROT(config, m_ioprot, 0); + m_ioprot->port_a_cb().set_ioport("INPUTS"); + m_ioprot->port_b_cb().set_ioport("SYSTEM"); + m_ioprot->port_c_cb().set_ioport("DSW"); + m_ioprot->soundlatch_irq_cb().set_inputline("audiocpu", 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -1030,12 +1030,12 @@ MACHINE_CONFIG_START(rohga_state::wizdfire) MCFG_DECO_SPRITE_GFX_REGION(4) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO104_ADD("ioprot") - MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) - MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) - MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) - MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0)) - MCFG_DECO146_SET_INTERFACE_SCRAMBLE_REVERSE + DECO104PROT(config, m_ioprot, 0); + m_ioprot->port_a_cb().set_ioport("INPUTS"); + m_ioprot->port_b_cb().set_ioport("SYSTEM"); + m_ioprot->port_c_cb().set_ioport("DSW"); + m_ioprot->soundlatch_irq_cb().set_inputline("audiocpu", 0); + m_ioprot->set_interface_scramble_reverse(); MCFG_VIDEO_START_OVERRIDE(rohga_state, wizdfire) @@ -1219,11 +1219,11 @@ MACHINE_CONFIG_START(rohga_state::schmeisr) MCFG_DECO_SPRITE_GFX_REGION(3) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO104_ADD("ioprot") - MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) - MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) - MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) - MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0)) + DECO104PROT(config, m_ioprot, 0); + m_ioprot->port_a_cb().set_ioport("INPUTS"); + m_ioprot->port_b_cb().set_ioport("SYSTEM"); + m_ioprot->port_c_cb().set_ioport("DSW"); + m_ioprot->soundlatch_irq_cb().set_inputline("audiocpu", 0); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/royalmah.cpp b/src/mame/drivers/royalmah.cpp index bfdd6aa8d60..839f16fef12 100644 --- a/src/mame/drivers/royalmah.cpp +++ b/src/mame/drivers/royalmah.cpp @@ -3662,13 +3662,12 @@ MACHINE_CONFIG_START(royalmah_state::janptr96) MCFG_TMPZ84C015_OUT_PB_CB(WRITE8(*this, royalmah_state, janptr96_dswsel_w)) // internal CTC channels 0 & 1 have falling edge triggers - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 255, 8, 255-8) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("maincpu", tmpz84c015_device, trg0)) MCFG_DEVCB_INVERT + screen_device &screen(*subdevice("screen")); + screen.set_visarea(0, 255, 8, 255-8); + screen.screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)).invert(); /* devices */ - MCFG_DEVICE_ADD("rtc", MSM6242, XTAL(32'768)) - MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE("maincpu", tmpz84c015_device, trg1)) MCFG_DEVCB_INVERT + MSM6242(config, m_rtc, 32.768_kHz_XTAL).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg1)).invert(); MACHINE_CONFIG_END @@ -3722,8 +3721,7 @@ MACHINE_CONFIG_START(royalmah_state::mjtensin) MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) /* devices */ - MCFG_DEVICE_ADD("rtc", MSM6242, XTAL(32'768)) - MCFG_MSM6242_OUT_INT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_IRQ1)) + MSM6242(config, m_rtc, 32.768_kHz_XTAL).out_int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ1); MACHINE_CONFIG_END MACHINE_CONFIG_START(royalmah_state::cafetime) @@ -3738,8 +3736,7 @@ MACHINE_CONFIG_START(royalmah_state::cafetime) MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) /* devices */ - MCFG_DEVICE_ADD("rtc", MSM6242, XTAL(32'768)) - MCFG_MSM6242_OUT_INT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_IRQ1)) + MSM6242(config, m_rtc, 32.768_kHz_XTAL).out_int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ1); MACHINE_CONFIG_END MACHINE_CONFIG_START(royalmah_state::mjvegasa) @@ -3755,8 +3752,7 @@ MACHINE_CONFIG_START(royalmah_state::mjvegasa) MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) /* devices */ - MCFG_DEVICE_ADD("rtc", MSM6242, XTAL(32'768)) - MCFG_MSM6242_OUT_INT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_IRQ1)) + MSM6242(config, m_rtc, 32.768_kHz_XTAL).out_int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ1); MACHINE_CONFIG_END diff --git a/src/mame/drivers/runaway.cpp b/src/mame/drivers/runaway.cpp index 023d33fcb6d..90f42152651 100644 --- a/src/mame/drivers/runaway.cpp +++ b/src/mame/drivers/runaway.cpp @@ -351,14 +351,14 @@ MACHINE_CONFIG_START(runaway_state::runaway) MCFG_DEVICE_ADD("maincpu", M6502, 12096000 / 8) /* ? */ MCFG_DEVICE_PROGRAM_MAP(runaway_map) - MCFG_DEVICE_ADD("mainlatch", LS259) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // coin counter? - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // coin counter? - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, runaway_state, tile_bank_w)) + ls259_device &mainlatch(LS259(config, "mainlatch")); + mainlatch.q_out_cb<0>().set_nop(); // coin counter? + mainlatch.q_out_cb<1>().set_nop(); // coin counter? + mainlatch.q_out_cb<3>().set_output("led0").invert(); + mainlatch.q_out_cb<4>().set_output("led1").invert(); + mainlatch.q_out_cb<5>().set(FUNC(runaway_state::tile_bank_w)); - MCFG_DEVICE_ADD("earom", ER2055) + ER2055(config, m_earom); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/s7.cpp b/src/mame/drivers/s7.cpp index c9b50fb2603..d88b3f32cc3 100644 --- a/src/mame/drivers/s7.cpp +++ b/src/mame/drivers/s7.cpp @@ -505,15 +505,15 @@ MACHINE_CONFIG_START(s7_state::s7) MCFG_DEVICE_ADD("hc55516", HC55516, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speech", 1.00) - MCFG_DEVICE_ADD("pias", PIA6821, 0) - MCFG_PIA_READPB_HANDLER(READ8(*this, s7_state, sound_r)) - MCFG_PIA_WRITEPA_HANDLER(WRITE8("dac", dac_byte_interface, data_w)) - MCFG_PIA_WRITEPB_HANDLER(NOOP) - MCFG_PIA_READCA1_HANDLER(VCC) - MCFG_PIA_CA2_HANDLER(WRITELINE("hc55516", hc55516_device, digit_w)) - MCFG_PIA_CB2_HANDLER(WRITELINE("hc55516", hc55516_device, clock_w)) - MCFG_PIA_IRQA_HANDLER(INPUTLINE("audiocpu", M6808_IRQ_LINE)) - MCFG_PIA_IRQB_HANDLER(INPUTLINE("audiocpu", M6808_IRQ_LINE)) + PIA6821(config, m_pias, 0); + m_pias->readpb_handler().set(FUNC(s7_state::sound_r)); + m_pias->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w)); + m_pias->writepb_handler().set_nop(); + m_pias->readca1_handler().set_constant(1); + m_pias->ca2_handler().set(m_hc55516, FUNC(hc55516_device::digit_w)); + m_pias->cb2_handler().set(m_hc55516, FUNC(hc55516_device::clock_w)); + m_pias->irqa_handler().set_inputline(m_audiocpu, M6808_IRQ_LINE); // FIXME: needs an input merger + m_pias->irqb_handler().set_inputline(m_audiocpu, M6808_IRQ_LINE); MACHINE_CONFIG_END diff --git a/src/mame/drivers/sbrain.cpp b/src/mame/drivers/sbrain.cpp index 986fa8f2207..f7b6abc302b 100644 --- a/src/mame/drivers/sbrain.cpp +++ b/src/mame/drivers/sbrain.cpp @@ -573,15 +573,15 @@ MACHINE_CONFIG_START(sbrain_state::sbrain) MCFG_I8255_IN_PORTC_CB(READ8(*this, sbrain_state, ppi_pc_r)) MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, sbrain_state, ppi_pc_w)) - MCFG_DEVICE_ADD("uart0", I8251, 0) + I8251(config, m_u0, 0); - MCFG_DEVICE_ADD("uart1", I8251, 0) + I8251(config, m_u1, 0); - MCFG_DEVICE_ADD("brg", COM8116, 5.0688_MHz_XTAL) // BR1941L - MCFG_COM8116_FR_HANDLER(WRITELINE("uart0", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart0", i8251_device, write_rxc)) - MCFG_COM8116_FT_HANDLER(WRITELINE("uart1", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart1", i8251_device, write_rxc)) + com8116_device &brg(COM8116(config, "brg", 5.0688_MHz_XTAL)); // BR1941L + brg.fr_handler().set(m_u0, FUNC(i8251_device::write_txc)); + brg.fr_handler().append(m_u0, FUNC(i8251_device::write_rxc)); + brg.ft_handler().set(m_u1, FUNC(i8251_device::write_txc)); + brg.ft_handler().append(m_u1, FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("fdc", FD1791, 16_MHz_XTAL / 16) MCFG_FLOPPY_DRIVE_ADD("fdc:0", sbrain_floppies, "525dd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/sbrkout.cpp b/src/mame/drivers/sbrkout.cpp index 19fd78c9e7c..a4f68428d88 100644 --- a/src/mame/drivers/sbrkout.cpp +++ b/src/mame/drivers/sbrkout.cpp @@ -559,16 +559,16 @@ GFXDECODE_END MACHINE_CONFIG_START(sbrkout_state::sbrkout) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502,MAIN_CLOCK/16) /* 375 KHz? Should be 750KHz? */ - MCFG_DEVICE_PROGRAM_MAP(main_map) + M6502(config, m_maincpu, MAIN_CLOCK/16); // 375 KHz? Should be 750KHz? + m_maincpu->set_addrmap(AS_PROGRAM, &sbrkout_state::main_map); - MCFG_DEVICE_ADD("outlatch", F9334, 0) // H8 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT // SERV LED (active low) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(OUTPUT("lamp0")) // LAMP1 - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(OUTPUT("lamp1")) // LAMP2 - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, sbrkout_state, pot_mask1_w)) - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, sbrkout_state, pot_mask2_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, sbrkout_state, coincount_w)) + F9334(config, m_outlatch); // H8 + m_outlatch->q_out_cb<1>().set_output("led0").invert(); // SERV LED (active low) + m_outlatch->q_out_cb<3>().set_output("lamp0"); // LAMP1 + m_outlatch->q_out_cb<4>().set_output("lamp1"); // LAMP2 + m_outlatch->q_out_cb<5>().set(FUNC(sbrkout_state::pot_mask1_w)); + m_outlatch->q_out_cb<6>().set(FUNC(sbrkout_state::pot_mask2_w)); + m_outlatch->q_out_cb<7>().set(FUNC(sbrkout_state::coincount_w)); // Note that connecting pin 15 to a pullup, as shown on the schematics, may result in spurious // coin counter activity as stated in Atari bulletin B-0054 (which recommends tying it to the // CPU reset line instead). @@ -594,12 +594,12 @@ MACHINE_CONFIG_START(sbrkout_state::sbrkout) MACHINE_CONFIG_END -MACHINE_CONFIG_START(sbrkoutct_state::sbrkoutct) +void sbrkoutct_state::sbrkoutct(machine_config &config) +{ sbrkout(config); - MCFG_DEVICE_MODIFY("outlatch") - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // 2nd serve LED -MACHINE_CONFIG_END + subdevice("outlatch")->q_out_cb<2>().set_output("led1").invert(); // 2nd serve LED +} /************************************* * diff --git a/src/mame/drivers/scopus.cpp b/src/mame/drivers/scopus.cpp index 7d30e10fa9c..762ad4368e7 100644 --- a/src/mame/drivers/scopus.cpp +++ b/src/mame/drivers/scopus.cpp @@ -197,9 +197,9 @@ MACHINE_CONFIG_START(sagitta180_state::sagitta180) MCFG_RS232_CTS_HANDLER(WRITELINE("uart", i8251_device, write_cts)) MCFG_RS232_DSR_HANDLER(WRITELINE("uart", i8251_device, write_dsr)) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 19218) // 19218 / 19222 ? guesses... - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 19218)); // 19218 / 19222 ? guesses... + uart_clock.signal_handler().set("uart", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart", FUNC(i8251_device::write_rxc)); // MCFG_DEVICE_ADD("intlatch", I8212, 0) // MCFG_I8212_MD_CALLBACK(GND) // guessed ! diff --git a/src/mame/drivers/sdk85.cpp b/src/mame/drivers/sdk85.cpp index 346b8c5ee74..43ef2643343 100644 --- a/src/mame/drivers/sdk85.cpp +++ b/src/mame/drivers/sdk85.cpp @@ -167,13 +167,13 @@ MACHINE_CONFIG_START(sdk85_state::sdk85) MCFG_DEFAULT_LAYOUT(layout_sdk85) /* Devices */ - MCFG_DEVICE_ADD("kdc", I8279, 6.144_MHz_XTAL / 2) // Keyboard/Display Controller (A13) + MCFG_DEVICE_ADD("kdc", I8279, 6.144_MHz_XTAL / 2) // Keyboard/Display Controller (A13) MCFG_I8279_OUT_IRQ_CB(INPUTLINE("maincpu", I8085_RST55_LINE)) // irq - MCFG_I8279_OUT_SL_CB(WRITE8(*this, sdk85_state, scanlines_w)) // scan SL lines - MCFG_I8279_OUT_DISP_CB(WRITE8(*this, sdk85_state, digit_w)) // display A&B - MCFG_I8279_IN_RL_CB(READ8(*this, sdk85_state, kbd_r)) // kbd RL lines - MCFG_I8279_IN_SHIFT_CB(VCC) // Shift key - MCFG_I8279_IN_CTRL_CB(VCC) + MCFG_I8279_OUT_SL_CB(WRITE8(*this, sdk85_state, scanlines_w)) // scan SL lines + MCFG_I8279_OUT_DISP_CB(WRITE8(*this, sdk85_state, digit_w)) // display A&B + MCFG_I8279_IN_RL_CB(READ8(*this, sdk85_state, kbd_r)) // kbd RL lines + MCFG_I8279_IN_SHIFT_CB(CONSTANT(1)) // Shift key + MCFG_I8279_IN_CTRL_CB(CONSTANT(1)) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/drivers/sdk86.cpp b/src/mame/drivers/sdk86.cpp index f43f0932ad5..fba2a060f41 100644 --- a/src/mame/drivers/sdk86.cpp +++ b/src/mame/drivers/sdk86.cpp @@ -166,16 +166,16 @@ MACHINE_CONFIG_START(sdk86_state::sdk86) MCFG_RS232_DSR_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_dsr)) MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal) - MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL(14'745'600)/3/16) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(I8251_TAG, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(I8251_TAG, i8251_device, write_rxc)) + 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)); + usart_clock.signal_handler().append(I8251_TAG, FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("i8279", I8279, 2500000) // based on divider MCFG_I8279_OUT_SL_CB(WRITE8(*this, sdk86_state, scanlines_w)) // scan SL lines MCFG_I8279_OUT_DISP_CB(WRITE8(*this, sdk86_state, digit_w)) // display A&B MCFG_I8279_IN_RL_CB(READ8(*this, sdk86_state, kbd_r)) // kbd RL lines - MCFG_I8279_IN_SHIFT_CB(GND) // Shift key - MCFG_I8279_IN_CTRL_CB(GND) + MCFG_I8279_IN_SHIFT_CB(CONSTANT(0)) // Shift key + MCFG_I8279_IN_CTRL_CB(CONSTANT(0)) MCFG_DEVICE_ADD("port1", I8255A, 0) MCFG_DEVICE_ADD("port2", I8255A, 0) diff --git a/src/mame/drivers/seattle.cpp b/src/mame/drivers/seattle.cpp index 37abdb7a0e4..27ac8f4f7be 100644 --- a/src/mame/drivers/seattle.cpp +++ b/src/mame/drivers/seattle.cpp @@ -1905,9 +1905,9 @@ MACHINE_CONFIG_START(seattle_state::seattle_common) MCFG_GT64XXX_SET_CS(3, seattle_state::seattle_cs3_map) MCFG_GT64XX_SET_SIMM0(0x00800000) - MCFG_DEVICE_ADD(PCI_ID_IDE, IDE_PCI, 0, 0x100b0002, 0x01, 0x0) - MCFG_IDE_PCI_IRQ_HANDLER(INPUTLINE(m_maincpu, IDE_IRQ_NUM)) - MCFG_IDE_PCI_SET_LEGACY_TOP(0x0a0) + ide_pci_device &ide(IDE_PCI(config, PCI_ID_IDE, 0, 0x100b0002, 0x01, 0x0)); + ide.irq_handler().set_inputline(m_maincpu, IDE_IRQ_NUM); + ide.set_legacy_top(0x0a0); MCFG_DEVICE_ADD(PCI_ID_VIDEO, VOODOO_1_PCI, 0, m_maincpu, m_screen) MCFG_VOODOO_PCI_FBMEM(2) diff --git a/src/mame/drivers/seattlecmp.cpp b/src/mame/drivers/seattlecmp.cpp index 4cd8cc944fa..dc68997df5b 100644 --- a/src/mame/drivers/seattlecmp.cpp +++ b/src/mame/drivers/seattlecmp.cpp @@ -111,20 +111,20 @@ MACHINE_CONFIG_START(seattle_comp_state::seattle) MCFG_DEVICE_IO_MAP(io_map) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic1", pic8259_device, inta_cb) - MCFG_DEVICE_ADD("pic1", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_INT0)) - MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, seattle_comp_state, pic_slave_ack)) + PIC8259(config, m_pic[0], 0); + m_pic[0]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_INT0); + m_pic[0]->read_slave_ack_callback().set(FUNC(seattle_comp_state::pic_slave_ack)); - MCFG_DEVICE_ADD("pic2", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic1", pic8259_device, ir1_w)) + PIC8259(config, m_pic[1], 0); + m_pic[1]->out_int_callback().set(m_pic[0], FUNC(pic8259_device::ir1_w)); - MCFG_DEVICE_ADD("stc", AM9513, XTAL(4'000'000)) // dedicated XTAL - MCFG_AM9513_OUT2_CALLBACK(WRITELINE("pic2", pic8259_device, ir0_w)) - MCFG_AM9513_OUT3_CALLBACK(WRITELINE("pic2", pic8259_device, ir4_w)) - MCFG_AM9513_OUT4_CALLBACK(WRITELINE("pic2", pic8259_device, ir7_w)) - MCFG_AM9513_OUT5_CALLBACK(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) - MCFG_AM9513_FOUT_CALLBACK(WRITELINE("stc", am9513_device, source1_w)) + am9513_device &stc(AM9513(config, "stc", 4_MHz_XTAL)); // dedicated XTAL + stc.out2_cb().set(m_pic[1], FUNC(pic8259_device::ir0_w)); + stc.out3_cb().set(m_pic[1], FUNC(pic8259_device::ir4_w)); + stc.out4_cb().set(m_pic[1], FUNC(pic8259_device::ir7_w)); + stc.out5_cb().set("uart", FUNC(i8251_device::write_txc)); + stc.out5_cb().append("uart", FUNC(i8251_device::write_rxc)); + stc.fout_cb().set("stc", FUNC(am9513_device::source1_w)); // FOUT not shown on schematics, which inexplicably have Source 1 tied to Gate 5 MCFG_DEVICE_ADD("uart", I8251, XTAL(24'000'000) / 12) // CLOCK on line 49 diff --git a/src/mame/drivers/segac2.cpp b/src/mame/drivers/segac2.cpp index 4f1298afce1..8bbea1998d8 100644 --- a/src/mame/drivers/segac2.cpp +++ b/src/mame/drivers/segac2.cpp @@ -1553,15 +1553,15 @@ MACHINE_CONFIG_START(segac2_state::segac) MCFG_MACHINE_RESET_OVERRIDE(segac2_state,segac2) MCFG_NVRAM_ADD_1FILL("nvram") // borencha requires 0xff fill or there is no sound (it lacks some of the init code of the borench set) - MCFG_DEVICE_ADD("io", SEGA_315_5296, XL2_CLOCK/6) // clock divider guessed - MCFG_315_5296_IN_PORTA_CB(IOPORT("P1")) - MCFG_315_5296_IN_PORTB_CB(IOPORT("P2")) - MCFG_315_5296_IN_PORTC_CB(READ8(*this, segac2_state, io_portc_r)) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, segac2_state, io_portd_w)) - MCFG_315_5296_IN_PORTE_CB(IOPORT("SERVICE")) - MCFG_315_5296_IN_PORTF_CB(IOPORT("COINAGE")) - MCFG_315_5296_IN_PORTG_CB(IOPORT("DSW")) - MCFG_315_5296_OUT_PORTH_CB(WRITE8(*this, segac2_state, io_porth_w)) + sega_315_5296_device &io(SEGA_315_5296(config, "io", XL2_CLOCK/6)); // clock divider guessed + io.in_pa_callback().set_ioport("P1"); + io.in_pb_callback().set_ioport("P2"); + io.in_pc_callback().set(FUNC(segac2_state::io_portc_r)); + io.out_pd_callback().set(FUNC(segac2_state::io_portd_w)); + io.in_pe_callback().set_ioport("SERVICE"); + io.in_pf_callback().set_ioport("COINAGE"); + io.in_pg_callback().set_ioport("DSW"); + io.out_ph_callback().set(FUNC(segac2_state::io_porth_w)); /* video hardware */ MCFG_DEVICE_ADD("gen_vdp", SEGA315_5313, XL2_CLOCK, "maincpu") @@ -1596,17 +1596,16 @@ MACHINE_CONFIG_START(segac2_state::segac) MACHINE_CONFIG_END -MACHINE_CONFIG_START(segac2_state::segac2) +void segac2_state::segac2(machine_config &config) +{ segac(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("io") - MCFG_315_5296_OUT_CNT1_CB(WRITELINE("upd", upd7759_device, reset_w)) + subdevice("io")->out_cnt1_callback().set(m_upd7759, FUNC(upd7759_device::reset_w)); /* sound hardware */ - MCFG_DEVICE_ADD("upd", UPD7759, XL1_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) -MACHINE_CONFIG_END + UPD7759(config, m_upd7759, XL1_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.50); +} diff --git a/src/mame/drivers/segae.cpp b/src/mame/drivers/segae.cpp index e596a7a71bb..e589974dd6d 100644 --- a/src/mame/drivers/segae.cpp +++ b/src/mame/drivers/segae.cpp @@ -932,13 +932,13 @@ MACHINE_CONFIG_START(systeme_state::ridleofp) MCFG_UPD4701_PORTX("PAD1") MCFG_UPD4701_PORTY("PAD2") - MCFG_DEVICE_MODIFY("ppi") - MCFG_I8255_IN_PORTA_CB(READ8("upd4701", upd4701_device, d_r)) - MCFG_I8255_OUT_PORTC_CB(WRITELINE("upd4701", upd4701_device, cs_w)) MCFG_DEVCB_BIT(4) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("upd4701", upd4701_device, xy_w)) MCFG_DEVCB_BIT(3) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("upd4701", upd4701_device, ul_w)) MCFG_DEVCB_BIT(2) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("upd4701", upd4701_device, resetx_w)) MCFG_DEVCB_BIT(1) // or possibly bit 0 - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("upd4701", upd4701_device, resety_w)) MCFG_DEVCB_BIT(0) // or possibly bit 1 + i8255_device &ppi(*subdevice("ppi")); + ppi.in_pa_callback().set("upd4701", FUNC(upd4701_device::d_r)); + ppi.out_pc_callback().set("upd4701", FUNC(upd4701_device::cs_w)).bit(4); + ppi.out_pc_callback().append("upd4701", FUNC(upd4701_device::xy_w)).bit(3); + ppi.out_pc_callback().append("upd4701", FUNC(upd4701_device::ul_w)).bit(2); + ppi.out_pc_callback().append("upd4701", FUNC(upd4701_device::resetx_w)).bit(1); // or possibly bit 0 + ppi.out_pc_callback().append("upd4701", FUNC(upd4701_device::resety_w)).bit(0); // or possibly bit 1 MACHINE_CONFIG_END MACHINE_CONFIG_START(systeme_state::systemex) diff --git a/src/mame/drivers/segajw.cpp b/src/mame/drivers/segajw.cpp index 93d49389d33..75910127bf2 100644 --- a/src/mame/drivers/segajw.cpp +++ b/src/mame/drivers/segajw.cpp @@ -384,19 +384,19 @@ MACHINE_CONFIG_START(segajw_state::segajw) MCFG_NVRAM_ADD_NO_FILL("nvram") - MCFG_DEVICE_ADD("io1a", SEGA_315_5296, 0) // unknown clock - MCFG_315_5296_OUT_PORTA_CB(WRITE8(*this, segajw_state, coin_counter_w)) - MCFG_315_5296_OUT_PORTB_CB(WRITE8(*this, segajw_state, lamps1_w)) - MCFG_315_5296_OUT_PORTC_CB(WRITE8(*this, segajw_state, lamps2_w)) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, segajw_state, hopper_w)) - MCFG_315_5296_IN_PORTF_CB(READ8(*this, segajw_state, coin_counter_r)) + sega_315_5296_device &io1a(SEGA_315_5296(config, "io1a", 0)); // unknown clock + io1a.out_pa_callback().set(FUNC(segajw_state::coin_counter_w)); + io1a.out_pb_callback().set(FUNC(segajw_state::lamps1_w)); + io1a.out_pc_callback().set(FUNC(segajw_state::lamps2_w)); + io1a.out_pd_callback().set(FUNC(segajw_state::hopper_w)); + io1a.in_pf_callback().set(FUNC(segajw_state::coin_counter_r)); - MCFG_DEVICE_ADD("io1c", SEGA_315_5296, 0) // unknown clock - MCFG_315_5296_IN_PORTA_CB(IOPORT("IN0")) - MCFG_315_5296_IN_PORTB_CB(IOPORT("IN1")) - MCFG_315_5296_IN_PORTC_CB(IOPORT("IN2")) - MCFG_315_5296_IN_PORTD_CB(IOPORT("IN3")) - MCFG_315_5296_OUT_PORTG_CB(WRITE8(*this, segajw_state, coinlockout_w)) + sega_315_5296_device &io1c(SEGA_315_5296(config, "io1c", 0)); // unknown clock + io1c.in_pa_callback().set_ioport("IN0"); + io1c.in_pb_callback().set_ioport("IN1"); + io1c.in_pc_callback().set_ioport("IN2"); + io1c.in_pd_callback().set_ioport("IN3"); + io1c.out_pg_callback().set(FUNC(segajw_state::coinlockout_w)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/segam1.cpp b/src/mame/drivers/segam1.cpp index 958f6e4a4f3..0d8faf3d455 100644 --- a/src/mame/drivers/segam1.cpp +++ b/src/mame/drivers/segam1.cpp @@ -362,16 +362,16 @@ MACHINE_CONFIG_START(segam1_state::segam1) MCFG_DEVICE_ADD("m1comm", Z80, 4000000) // unknown clock MCFG_DEVICE_PROGRAM_MAP(segam1_comms_map) - MCFG_DEVICE_ADD("io1", SEGA_315_5296, 0) // unknown clock - MCFG_315_5296_IN_PORTA_CB(IOPORT("INA")) - MCFG_315_5296_IN_PORTB_CB(IOPORT("INB")) - MCFG_315_5296_IN_PORTC_CB(IOPORT("INC")) - MCFG_315_5296_IN_PORTD_CB(IOPORT("IND")) - MCFG_315_5296_IN_PORTE_CB(IOPORT("INE")) - MCFG_315_5296_IN_PORTF_CB(IOPORT("INF")) + sega_315_5296_device &io1(SEGA_315_5296(config, "io1", 0)); // unknown clock + io1.in_pa_callback().set_ioport("INA"); + io1.in_pb_callback().set_ioport("INB"); + io1.in_pc_callback().set_ioport("INC"); + io1.in_pd_callback().set_ioport("IND"); + io1.in_pe_callback().set_ioport("INE"); + io1.in_pf_callback().set_ioport("INF"); - MCFG_DEVICE_ADD("io2", SEGA_315_5296, 0) // unknown clock - MCFG_315_5296_IN_PORTG_CB(IOPORT("ING")) + sega_315_5296_device &io2(SEGA_315_5296(config, "io2", 0)); // unknown clock + io2.in_pg_callback().set_ioport("ING"); MCFG_DEVICE_ADD("uart", I8251, 4000000) // unknown clock diff --git a/src/mame/drivers/segas16a.cpp b/src/mame/drivers/segas16a.cpp index 0bd7a81e63d..495e4db3d62 100644 --- a/src/mame/drivers/segas16a.cpp +++ b/src/mame/drivers/segas16a.cpp @@ -1975,7 +1975,7 @@ MACHINE_CONFIG_START(segas16a_state::system16a) MCFG_DEVICE_ADD("n7751", N7751, 6000000) MCFG_MCS48_PORT_BUS_IN_CB(READ8(*this, segas16a_state, n7751_rom_r)) - MCFG_MCS48_PORT_T1_IN_CB(GND) // labelled as "TEST", connected to ground + MCFG_MCS48_PORT_T1_IN_CB(CONSTANT(0)) // labelled as "TEST", connected to ground MCFG_MCS48_PORT_P1_OUT_CB(WRITE8("dac", dac_byte_interface, data_w)) MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, segas16a_state, n7751_p2_r)) MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(*this, segas16a_state, n7751_p2_w)) diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 4a6087927ff..3fc4f25d355 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -3813,11 +3813,12 @@ MACHINE_CONFIG_END // same as the above, but with custom Sega ICs -MACHINE_CONFIG_START(segas16b_state::rom_5797_fragment) - MCFG_SEGA_315_5248_MULTIPLIER_ADD("multiplier") - MCFG_SEGA_315_5250_COMPARE_TIMER_ADD("cmptimer_1") - MCFG_SEGA_315_5250_COMPARE_TIMER_ADD("cmptimer_2") -MACHINE_CONFIG_END +void segas16b_state::rom_5797_fragment(machine_config &config) +{ + SEGA_315_5248_MULTIPLIER(config, m_multiplier, 0); + SEGA_315_5250_COMPARE_TIMER(config, m_cmptimer_1, 0); + SEGA_315_5250_COMPARE_TIMER(config, m_cmptimer_2, 0); +} MACHINE_CONFIG_START(segas16b_state::system16b_5797) system16b(config); diff --git a/src/mame/drivers/segas18.cpp b/src/mame/drivers/segas18.cpp index c775aad6cc6..e87bba96026 100644 --- a/src/mame/drivers/segas18.cpp +++ b/src/mame/drivers/segas18.cpp @@ -1325,17 +1325,17 @@ MACHINE_CONFIG_START(segas18_state::system18) MCFG_SEGA_315_5195_MAPPER_HANDLER(segas18_state, memory_mapper) MCFG_SEGA_315_5195_PBF_CALLBACK(INPUTLINE("soundcpu", INPUT_LINE_NMI)) - MCFG_DEVICE_ADD("io", SEGA_315_5296, 16000000) - MCFG_315_5296_IN_PORTA_CB(IOPORT("P1")) - MCFG_315_5296_IN_PORTB_CB(IOPORT("P2")) - MCFG_315_5296_IN_PORTC_CB(IOPORT("P3")) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, segas18_state, misc_outputs_w)) - MCFG_315_5296_IN_PORTE_CB(IOPORT("SERVICE")) - MCFG_315_5296_IN_PORTF_CB(IOPORT("COINAGE")) - MCFG_315_5296_IN_PORTG_CB(IOPORT("DSW")) - MCFG_315_5296_OUT_PORTH_CB(WRITE8(*this, segas18_state, rom_5874_bank_w)) - MCFG_315_5296_OUT_CNT1_CB(WRITELINE("segaic16vid", segaic16_video_device, set_display_enable)) - MCFG_315_5296_OUT_CNT2_CB(WRITELINE(*this, segas18_state, set_vdp_enable)) + SEGA_315_5296(config, m_io, 16000000); + m_io->in_pa_callback().set_ioport("P1"); + m_io->in_pb_callback().set_ioport("P2"); + m_io->in_pc_callback().set_ioport("P3"); + m_io->out_pd_callback().set(FUNC(segas18_state::misc_outputs_w)); + m_io->in_pe_callback().set_ioport("SERVICE"); + m_io->in_pf_callback().set_ioport("COINAGE"); + m_io->in_pg_callback().set_ioport("DSW"); + m_io->out_ph_callback().set(FUNC(segas18_state::rom_5874_bank_w)); + m_io->out_cnt1_callback().set(m_segaic16vid, FUNC(segaic16_video_device::set_display_enable)); + m_io->out_cnt2_callback().set(FUNC(segas18_state::set_vdp_enable)); MCFG_DEVICE_ADD("gen_vdp", SEGA315_5313, 15000000, "maincpu") // ??? Frequency is a complete guess MCFG_SEGA315_5313_IS_PAL(false) @@ -1389,21 +1389,21 @@ MACHINE_CONFIG_START(segas18_state::system18_fd1094) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas18_state, irq4_line_hold) MACHINE_CONFIG_END -MACHINE_CONFIG_START(segas18_state::lghost_fd1094) +void segas18_state::lghost_fd1094(machine_config &config) +{ system18_fd1094(config); // basic machine hardware - MCFG_DEVICE_MODIFY("io") - MCFG_315_5296_OUT_PORTC_CB(WRITE8(*this, segas18_state, lghost_gun_recoil_w)) -MACHINE_CONFIG_END + m_io->out_pc_callback().set(FUNC(segas18_state::lghost_gun_recoil_w)); +} -MACHINE_CONFIG_START(segas18_state::lghost) +void segas18_state::lghost(machine_config &config) +{ system18(config); // basic machine hardware - MCFG_DEVICE_MODIFY("io") - MCFG_315_5296_OUT_PORTC_CB(WRITE8(*this, segas18_state, lghost_gun_recoil_w)) -MACHINE_CONFIG_END + m_io->out_pc_callback().set(FUNC(segas18_state::lghost_gun_recoil_w)); +} MACHINE_CONFIG_START(segas18_state::wwally_fd1094) system18_fd1094(config); diff --git a/src/mame/drivers/segas24.cpp b/src/mame/drivers/segas24.cpp index 43c5e6e99e4..29a998b7728 100644 --- a/src/mame/drivers/segas24.cpp +++ b/src/mame/drivers/segas24.cpp @@ -1873,17 +1873,17 @@ MACHINE_CONFIG_START(segas24_state::system24) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) - MCFG_DEVICE_ADD("io", SEGA_315_5296, VIDEO_CLOCK/2) - MCFG_315_5296_IN_PORTA_CB(IOPORT("P1")) - MCFG_315_5296_IN_PORTB_CB(IOPORT("P2")) - MCFG_315_5296_IN_PORTC_CB(IOPORT("P3")) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, segas24_state, hotrod_lamps_w)) - MCFG_315_5296_IN_PORTE_CB(IOPORT("SERVICE")) - MCFG_315_5296_IN_PORTF_CB(IOPORT("COINAGE")) - MCFG_315_5296_IN_PORTG_CB(IOPORT("DSW")) - MCFG_315_5296_OUT_PORTH_CB(WRITE8("dac", dac_byte_interface, data_w)) - MCFG_315_5296_OUT_CNT1_CB(WRITELINE(*this, segas24_state, cnt1)) - MCFG_315_5296_OUT_CNT2_CB(WRITELINE("ymsnd", ym2151_device, reset_w)) + sega_315_5296_device &io(SEGA_315_5296(config, "io", VIDEO_CLOCK/2)); + io.in_pa_callback().set_ioport("P1"); + io.in_pb_callback().set_ioport("P2"); + io.in_pc_callback().set_ioport("P3"); + io.out_pd_callback().set(FUNC(segas24_state::hotrod_lamps_w)); + io.in_pe_callback().set_ioport("SERVICE"); + io.in_pf_callback().set_ioport("COINAGE"); + io.in_pg_callback().set_ioport("DSW"); + io.out_ph_callback().set("dac", FUNC(dac_byte_interface::data_w)); + io.out_cnt1_callback().set(FUNC(segas24_state::cnt1)); + io.out_cnt2_callback().set("ymsnd", FUNC(ym2151_device::reset_w)); MCFG_TIMER_DRIVER_ADD("irq_timer", segas24_state, irq_timer_cb) MCFG_TIMER_DRIVER_ADD("irq_timer_clear", segas24_state, irq_timer_clear_cb) @@ -1916,13 +1916,14 @@ MACHINE_CONFIG_START(segas24_state::system24) MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) MACHINE_CONFIG_END -MACHINE_CONFIG_START(segas24_state::mahmajn) +void segas24_state::mahmajn(machine_config &config) +{ system24(config); - MCFG_DEVICE_MODIFY("io") - MCFG_315_5296_IN_PORTA_CB(READ8(*this, segas24_state, mahmajn_input_line_r)) - MCFG_315_5296_IN_PORTC_CB(READ8(*this, segas24_state, mahmajn_inputs_r)) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, segas24_state, mahmajn_mux_w)) -MACHINE_CONFIG_END + sega_315_5296_device &io(*subdevice("io")); + io.in_pa_callback().set(FUNC(segas24_state::mahmajn_input_line_r)); + io.in_pc_callback().set(FUNC(segas24_state::mahmajn_inputs_r)); + io.out_pd_callback().set(FUNC(segas24_state::mahmajn_mux_w)); +} MACHINE_CONFIG_START(segas24_state::system24_floppy) system24(config); @@ -1972,19 +1973,21 @@ MACHINE_CONFIG_START(segas24_state::system24_floppy_fd_upd) MCFG_UPD4701_PORTY("DIAL2") MACHINE_CONFIG_END -MACHINE_CONFIG_START(segas24_state::dcclub) +void segas24_state::dcclub(machine_config &config) +{ system24(config); - MCFG_DEVICE_MODIFY("io") - MCFG_315_5296_IN_PORTA_CB(READ8(*this, segas24_state, dcclub_p1_r)) - MCFG_315_5296_IN_PORTC_CB(READ8(*this, segas24_state, dcclub_p3_r)) -MACHINE_CONFIG_END + sega_315_5296_device &io(*subdevice("io")); + io.in_pa_callback().set(FUNC(segas24_state::dcclub_p1_r)); + io.in_pc_callback().set(FUNC(segas24_state::dcclub_p3_r)); +} -MACHINE_CONFIG_START(segas24_state::system24_floppy_dcclub) +void segas24_state::system24_floppy_dcclub(machine_config &config) +{ system24_floppy_fd1094(config); - MCFG_DEVICE_MODIFY("io") - MCFG_315_5296_IN_PORTA_CB(READ8(*this, segas24_state, dcclub_p1_r)) - MCFG_315_5296_IN_PORTC_CB(READ8(*this, segas24_state, dcclub_p3_r)) -MACHINE_CONFIG_END + sega_315_5296_device &io(*subdevice("io")); + io.in_pa_callback().set(FUNC(segas24_state::dcclub_p1_r)); + io.in_pc_callback().set(FUNC(segas24_state::dcclub_p3_r)); +} /************************************* diff --git a/src/mame/drivers/segas32.cpp b/src/mame/drivers/segas32.cpp index 1ad0169693c..33f91ab8279 100644 --- a/src/mame/drivers/segas32.cpp +++ b/src/mame/drivers/segas32.cpp @@ -2207,26 +2207,26 @@ MACHINE_CONFIG_START(segas32_state::device_add_mconfig) MCFG_DEVICE_PROGRAM_MAP(system32_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas32_state, start_of_vblank_int) - MCFG_DEVICE_ADD("soundcpu", Z80, MASTER_CLOCK/4) - MCFG_DEVICE_PROGRAM_MAP(system32_sound_map) - MCFG_DEVICE_IO_MAP(system32_sound_portmap) + Z80(config, m_soundcpu, MASTER_CLOCK/4); + m_soundcpu->set_addrmap(AS_PROGRAM, &segas32_state::system32_sound_map); + m_soundcpu->set_addrmap(AS_IO, &segas32_state::system32_sound_portmap); - MCFG_DEVICE_ADD("io_chip", SEGA_315_5296, 0) // unknown clock - MCFG_315_5296_IN_PORTA_CB(IOPORT("P1_A")) - MCFG_315_5296_IN_PORTB_CB(IOPORT("P2_A")) - MCFG_315_5296_IN_PORTC_CB(IOPORT("PORTC_A")) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, segas32_state, misc_output_0_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(7) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(6) - MCFG_315_5296_IN_PORTE_CB(IOPORT("SERVICE12_A")) - MCFG_315_5296_IN_PORTF_CB(IOPORT("SERVICE34_A")) - MCFG_315_5296_OUT_PORTG_CB(WRITE8(*this, segas32_state, sw2_output_0_w)) - MCFG_315_5296_OUT_PORTH_CB(WRITE8(*this, segas32_state, tilebank_external_w)) - MCFG_315_5296_OUT_CNT1_CB(WRITELINE(*this, segas32_state, display_enable_0_w)) - MCFG_315_5296_OUT_CNT2_CB(INPUTLINE("soundcpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + sega_315_5296_device &io_chip(SEGA_315_5296(config, "io_chip", 0)); // unknown clock + io_chip.in_pa_callback().set_ioport("P1_A"); + io_chip.in_pb_callback().set_ioport("P2_A"); + io_chip.in_pc_callback().set_ioport("PORTC_A"); + io_chip.out_pd_callback().set(FUNC(segas32_state::misc_output_0_w)); + io_chip.out_pd_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(7); + io_chip.out_pd_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(5); + io_chip.out_pd_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(6); + io_chip.in_pe_callback().set_ioport("SERVICE12_A"); + io_chip.in_pf_callback().set_ioport("SERVICE34_A"); + io_chip.out_pg_callback().set(FUNC(segas32_state::sw2_output_0_w)); + io_chip.out_ph_callback().set(FUNC(segas32_state::tilebank_external_w)); + io_chip.out_cnt1_callback().set(FUNC(segas32_state::display_enable_0_w)); + io_chip.out_cnt2_callback().set_inputline(m_soundcpu, INPUT_LINE_RESET).invert(); - MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) + EEPROM_SERIAL_93C46_16BIT(config, "eeprom"); MCFG_TIMER_DRIVER_ADD("v60_irq0", segas32_state, signal_v60_irq_callback) MCFG_TIMER_DRIVER_ADD("v60_irq1", segas32_state, signal_v60_irq_callback) @@ -2524,32 +2524,32 @@ MACHINE_CONFIG_START(sega_multi32_state::device_add_mconfig) MCFG_DEVICE_PROGRAM_MAP(multi32_sound_map) MCFG_DEVICE_IO_MAP(multi32_sound_portmap) - MCFG_DEVICE_ADD("io_chip_0", SEGA_315_5296, 0) // unknown clock - MCFG_315_5296_IN_PORTA_CB(IOPORT("P1_A")) - MCFG_315_5296_IN_PORTB_CB(IOPORT("P2_A")) - MCFG_315_5296_IN_PORTC_CB(IOPORT("PORTC_A")) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, segas32_state, misc_output_0_w)) - MCFG_315_5296_IN_PORTE_CB(IOPORT("SERVICE12_A")) - MCFG_315_5296_IN_PORTF_CB(IOPORT("SERVICE34_A")) - MCFG_315_5296_OUT_PORTG_CB(WRITE8(*this, segas32_state, sw2_output_0_w)) - MCFG_315_5296_OUT_PORTH_CB(WRITE8(*this, segas32_state, tilebank_external_w)) - MCFG_315_5296_OUT_CNT1_CB(WRITELINE(*this, segas32_state, display_enable_0_w)) - MCFG_315_5296_OUT_CNT2_CB(INPUTLINE("soundcpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + sega_315_5296_device &io_chip_0(SEGA_315_5296(config, "io_chip_0", 0)); // unknown clock + io_chip_0.in_pa_callback().set_ioport("P1_A"); + io_chip_0.in_pb_callback().set_ioport("P2_A"); + io_chip_0.in_pc_callback().set_ioport("PORTC_A"); + io_chip_0.out_pd_callback().set(FUNC(segas32_state::misc_output_0_w)); + io_chip_0.in_pe_callback().set_ioport("SERVICE12_A"); + io_chip_0.in_pf_callback().set_ioport("SERVICE34_A"); + io_chip_0.out_pg_callback().set(FUNC(segas32_state::sw2_output_0_w)); + io_chip_0.out_ph_callback().set(FUNC(segas32_state::tilebank_external_w)); + io_chip_0.out_cnt1_callback().set(FUNC(segas32_state::display_enable_0_w)); + io_chip_0.out_cnt2_callback().set_inputline(m_soundcpu, INPUT_LINE_RESET).invert(); - MCFG_DEVICE_ADD("io_chip_1", SEGA_315_5296, 0) // unknown clock - MCFG_315_5296_IN_PORTA_CB(IOPORT("P1_B")) - MCFG_315_5296_IN_PORTB_CB(IOPORT("P2_B")) - MCFG_315_5296_IN_PORTC_CB(IOPORT("PORTC_B")) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, segas32_state, misc_output_1_w)) - MCFG_315_5296_IN_PORTE_CB(IOPORT("SERVICE12_B")) - MCFG_315_5296_IN_PORTF_CB(IOPORT("SERVICE34_B")) - MCFG_315_5296_OUT_PORTG_CB(WRITE8(*this, segas32_state, sw2_output_1_w)) - MCFG_315_5296_OUT_PORTH_CB(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(7) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(6) - MCFG_315_5296_OUT_CNT1_CB(WRITELINE(*this, segas32_state, display_enable_1_w)) + sega_315_5296_device &io_chip_1(SEGA_315_5296(config, "io_chip_1", 0)); // unknown clock + io_chip_1.in_pa_callback().set_ioport("P1_B"); + io_chip_1.in_pb_callback().set_ioport("P2_B"); + io_chip_1.in_pc_callback().set_ioport("PORTC_B"); + io_chip_1.out_pd_callback().set(FUNC(segas32_state::misc_output_1_w)); + io_chip_1.in_pe_callback().set_ioport("SERVICE12_B"); + io_chip_1.in_pf_callback().set_ioport("SERVICE34_B"); + io_chip_1.out_pg_callback().set(FUNC(segas32_state::sw2_output_1_w)); + io_chip_1.out_ph_callback().set("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(7); + io_chip_1.out_ph_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(5); + io_chip_1.out_ph_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(6); + io_chip_1.out_cnt1_callback().set(FUNC(segas32_state::display_enable_1_w)); - MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) + EEPROM_SERIAL_93C46_16BIT(config, "eeprom"); MCFG_TIMER_DRIVER_ADD("v60_irq0", segas32_state, signal_v60_irq_callback) MCFG_TIMER_DRIVER_ADD("v60_irq1", segas32_state, signal_v60_irq_callback) diff --git a/src/mame/drivers/segaufo.cpp b/src/mame/drivers/segaufo.cpp index 71107b00e43..5b3a66a9085 100644 --- a/src/mame/drivers/segaufo.cpp +++ b/src/mame/drivers/segaufo.cpp @@ -780,31 +780,31 @@ void ufo_state::machine_start() MACHINE_CONFIG_START(ufo_state::newufo) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(16'000'000)/2) - MCFG_DEVICE_PROGRAM_MAP(ufo_map) - MCFG_DEVICE_IO_MAP(ufo_portmap) + Z80(config, m_maincpu, XTAL(16'000'000)/2); + m_maincpu->set_addrmap(AS_PROGRAM, &ufo_state::ufo_map); + m_maincpu->set_addrmap(AS_IO, &ufo_state::ufo_portmap); MCFG_TIMER_DRIVER_ADD_PERIODIC("motor_timer", ufo_state, simulate_xyz, attotime::from_hz(MOTOR_SPEED)) MCFG_TIMER_DRIVER_ADD_PERIODIC("update_timer", ufo_state, update_info, attotime::from_hz(60)) - MCFG_DEVICE_ADD("io1", SEGA_315_5296, XTAL(16'000'000)) + SEGA_315_5296(config, m_io1, XTAL(16'000'000)); // all ports set to input - MCFG_315_5296_IN_PORTA_CB(READ8(*this, ufo_state, crane_limits_r)) - MCFG_315_5296_IN_PORTB_CB(READ8(*this, ufo_state, crane_limits_r)) - MCFG_315_5296_IN_PORTE_CB(IOPORT("IN1")) - MCFG_315_5296_IN_PORTF_CB(IOPORT("DSW1")) - MCFG_315_5296_IN_PORTG_CB(IOPORT("DSW2")) - MCFG_315_5296_IN_PORTH_CB(IOPORT("IN2")) + m_io1->in_pa_callback().set(FUNC(ufo_state::crane_limits_r)); + m_io1->in_pb_callback().set(FUNC(ufo_state::crane_limits_r)); + m_io1->in_pe_callback().set_ioport("IN1"); + m_io1->in_pf_callback().set_ioport("DSW1"); + m_io1->in_pg_callback().set_ioport("DSW2"); + m_io1->in_ph_callback().set_ioport("IN2"); - MCFG_DEVICE_ADD("io2", SEGA_315_5296, XTAL(16'000'000)) + SEGA_315_5296(config, m_io2, XTAL(16'000'000)); // all ports set to output - MCFG_315_5296_OUT_PORTA_CB(WRITE8(*this, ufo_state, stepper_w)) - MCFG_315_5296_OUT_PORTB_CB(WRITE8(*this, ufo_state, cp_lamps_w)) - MCFG_315_5296_OUT_PORTC_CB(WRITE8(*this, ufo_state, cp_digits_w)) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, ufo_state, cp_digits_w)) - MCFG_315_5296_OUT_PORTE_CB(WRITE8(*this, ufo_state, crane_xyz_w)) - MCFG_315_5296_OUT_PORTF_CB(WRITE8(*this, ufo_state, crane_xyz_w)) - MCFG_315_5296_OUT_PORTG_CB(WRITE8(*this, ufo_state, ufo_lamps_w)) + m_io2->out_pa_callback().set(FUNC(ufo_state::stepper_w)); + m_io2->out_pb_callback().set(FUNC(ufo_state::cp_lamps_w)); + m_io2->out_pc_callback().set(FUNC(ufo_state::cp_digits_w)); + m_io2->out_pd_callback().set(FUNC(ufo_state::cp_digits_w)); + m_io2->out_pe_callback().set(FUNC(ufo_state::crane_xyz_w)); + m_io2->out_pf_callback().set(FUNC(ufo_state::crane_xyz_w)); + m_io2->out_pg_callback().set(FUNC(ufo_state::ufo_lamps_w)); MCFG_DEVICE_ADD("pit", PIT8254, XTAL(16'000'000)/2) // uPD71054C, configuration is unknown MCFG_PIT8253_CLK0(XTAL(16'000'000)/2/256) @@ -825,69 +825,65 @@ MACHINE_CONFIG_START(ufo_state::newufo) MCFG_SOUND_ROUTE(1, "mono", 0.40) MACHINE_CONFIG_END -MACHINE_CONFIG_START(ufo_state::ufomini) +void ufo_state::ufomini(machine_config &config) +{ newufo(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("io1") - MCFG_315_5296_IN_PORTC_CB(IOPORT("IN1")) - MCFG_315_5296_IN_PORTE_CB(NOOP) - MCFG_315_5296_IN_PORTH_CB(NOOP) -MACHINE_CONFIG_END + m_io1->in_pc_callback().set_ioport("IN1"); + m_io1->in_pe_callback().set_constant(0); + m_io1->in_ph_callback().set_constant(0); +} -MACHINE_CONFIG_START(ufo_state::ufo21) +void ufo_state::ufo21(machine_config &config) +{ newufo(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(ex_ufo21_portmap) + m_maincpu->set_addrmap(AS_IO, &ufo_state::ex_ufo21_portmap); - MCFG_DEVICE_MODIFY("io1") - MCFG_315_5296_IN_PORTA_CB(READ8(*this, ufo_state, ex_crane_limits_r)) - MCFG_315_5296_IN_PORTB_CB(READ8(*this, ufo_state, ex_crane_limits_r)) - MCFG_315_5296_IN_PORTC_CB(READ8(*this, ufo_state, ex_crane_open_r)) + m_io1->in_pa_callback().set(FUNC(ufo_state::ex_crane_limits_r)); + m_io1->in_pb_callback().set(FUNC(ufo_state::ex_crane_limits_r)); + m_io1->in_pc_callback().set(FUNC(ufo_state::ex_crane_open_r)); - MCFG_DEVICE_MODIFY("io2") - MCFG_315_5296_OUT_PORTA_CB(WRITE8(*this, ufo_state, ex_stepper_w)) - MCFG_315_5296_OUT_PORTB_CB(WRITE8(*this, ufo_state, ex_cp_lamps_w)) - MCFG_315_5296_OUT_PORTE_CB(WRITE8(*this, ufo_state, ex_crane_xyz_w)) - MCFG_315_5296_OUT_PORTF_CB(WRITE8(*this, ufo_state, ex_crane_xyz_w)) - MCFG_315_5296_OUT_PORTG_CB(NOOP) + m_io2->out_pa_callback().set(FUNC(ufo_state::ex_stepper_w)); + m_io2->out_pb_callback().set(FUNC(ufo_state::ex_cp_lamps_w)); + m_io2->out_pe_callback().set(FUNC(ufo_state::ex_crane_xyz_w)); + m_io2->out_pf_callback().set(FUNC(ufo_state::ex_crane_xyz_w)); + m_io2->out_pg_callback().set_nop(); - MCFG_DEVICE_ADD("io3", SEGA_315_5338A, 0) - MCFG_315_5338A_OUT_PA_CB(WRITE8(*this, ufo_state, ex_upd_start_w)) - MCFG_315_5338A_IN_PB_CB(READ8(*this, ufo_state, ex_upd_busy_r)) - MCFG_315_5338A_OUT_PE_CB(WRITE8(*this, ufo_state, ex_ufo21_lamps1_w)) - MCFG_315_5338A_OUT_PF_CB(WRITE8(*this, ufo_state, ex_ufo21_lamps2_w)) + sega_315_5338a_device &io3(SEGA_315_5338A(config, "io3", 0)); + io3.out_pa_callback().set(FUNC(ufo_state::ex_upd_start_w)); + io3.in_pb_callback().set(FUNC(ufo_state::ex_upd_busy_r)); + io3.out_pe_callback().set(FUNC(ufo_state::ex_ufo21_lamps1_w)); + io3.out_pf_callback().set(FUNC(ufo_state::ex_ufo21_lamps2_w)); /* sound hardware */ - MCFG_DEVICE_ADD("upd", UPD7759) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) -MACHINE_CONFIG_END + UPD7759(config, m_upd); + m_upd->add_route(ALL_OUTPUTS, "mono", 0.75); +} -MACHINE_CONFIG_START(ufo_state::ufo800) +void ufo_state::ufo800(machine_config &config) +{ newufo(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(ex_ufo800_portmap) + m_maincpu->set_addrmap(AS_IO, &ufo_state::ex_ufo800_portmap); - MCFG_DEVICE_MODIFY("io1") - MCFG_315_5296_IN_PORTA_CB(READ8(*this, ufo_state, ex_crane_limits_r)) - MCFG_315_5296_IN_PORTB_CB(IOPORT("IN2")) - MCFG_315_5296_IN_PORTC_CB(READ8(*this, ufo_state, ex_crane_open_r)) - MCFG_315_5296_IN_PORTD_CB(IOPORT("IN1")) - MCFG_315_5296_IN_PORTE_CB(NOOP) - MCFG_315_5296_IN_PORTH_CB(NOOP) + m_io1->in_pa_callback().set(FUNC(ufo_state::ex_crane_limits_r)); + m_io1->in_pb_callback().set_ioport("IN2"); + m_io1->in_pc_callback().set(FUNC(ufo_state::ex_crane_open_r)); + m_io1->in_pd_callback().set_ioport("IN1"); + m_io1->in_pe_callback().set_constant(0); + m_io1->in_ph_callback().set_constant(0); - MCFG_DEVICE_MODIFY("io2") - MCFG_315_5296_OUT_PORTA_CB(WRITE8(*this, ufo_state, ex_stepper_w)) - MCFG_315_5296_OUT_PORTB_CB(WRITE8(*this, ufo_state, ex_cp_lamps_w)) - MCFG_315_5296_OUT_PORTE_CB(WRITE8(*this, ufo_state, ex_crane_xyz_w)) - MCFG_315_5296_OUT_PORTF_CB(WRITE8(*this, ufo_state, ex_ufo800_lamps_w)) - MCFG_315_5296_OUT_PORTG_CB(NOOP) -MACHINE_CONFIG_END + m_io2->out_pa_callback().set(FUNC(ufo_state::ex_stepper_w)); + m_io2->out_pb_callback().set(FUNC(ufo_state::ex_cp_lamps_w)); + m_io2->out_pe_callback().set(FUNC(ufo_state::ex_crane_xyz_w)); + m_io2->out_pf_callback().set(FUNC(ufo_state::ex_ufo800_lamps_w)); + m_io2->out_pg_callback().set_nop(); +} diff --git a/src/mame/drivers/segaxbd.cpp b/src/mame/drivers/segaxbd.cpp index ba8901fe663..30c04711044 100644 --- a/src/mame/drivers/segaxbd.cpp +++ b/src/mame/drivers/segaxbd.cpp @@ -929,7 +929,7 @@ void segaxbd_state::main_map(address_map &map) map(0x0d0000, 0x0d0fff).mirror(0x00f000).rw("segaic16vid", FUNC(segaic16_video_device::textram_r), FUNC(segaic16_video_device::textram_w)).share("textram"); map(0x0e0000, 0x0e0007).mirror(0x003ff8).rw("multiplier_main", FUNC(sega_315_5248_multiplier_device::read), FUNC(sega_315_5248_multiplier_device::write)); map(0x0e4000, 0x0e401f).mirror(0x003fe0).rw("divider_main", FUNC(sega_315_5249_divider_device::read), FUNC(sega_315_5249_divider_device::write)); - map(0x0e8000, 0x0e801f).mirror(0x003fe0).rw("cmptimer_main", FUNC(sega_315_5250_compare_timer_device::read), FUNC(sega_315_5250_compare_timer_device::write)); + map(0x0e8000, 0x0e801f).mirror(0x003fe0).rw(m_cmptimer_1, FUNC(sega_315_5250_compare_timer_device::read), FUNC(sega_315_5250_compare_timer_device::write)); map(0x100000, 0x100fff).mirror(0x00f000).ram().share("sprites"); map(0x110000, 0x11ffff).w("sprites", FUNC(sega_xboard_sprite_device::draw_write)); map(0x120000, 0x123fff).mirror(0x00c000).ram().w(FUNC(segaxbd_state::paletteram_w)).share("paletteram"); @@ -993,7 +993,7 @@ void segaxbd_state::sound_portmap(address_map &map) map.unmap_value_high(); map.global_mask(0xff); map(0x00, 0x01).mirror(0x3e).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); - map(0x40, 0x40).mirror(0x3f).r("cmptimer_main", FUNC(sega_315_5250_compare_timer_device::zread)); + map(0x40, 0x40).mirror(0x3f).r(m_cmptimer_1, FUNC(sega_315_5250_compare_timer_device::zread)); } @@ -1017,7 +1017,7 @@ void segaxbd_state::smgp_sound2_portmap(address_map &map) { map.unmap_value_high(); map.global_mask(0xff); - map(0x40, 0x40).mirror(0x3f).r("cmptimer_main", FUNC(sega_315_5250_compare_timer_device::zread)); + map(0x40, 0x40).mirror(0x3f).r(m_cmptimer_1, FUNC(sega_315_5250_compare_timer_device::zread)); } @@ -1685,11 +1685,11 @@ MACHINE_CONFIG_START(segaxbd_state::xboard_base_mconfig ) MCFG_SEGA_315_5249_DIVIDER_ADD("divider_main") MCFG_SEGA_315_5249_DIVIDER_ADD("divider_subx") - MCFG_SEGA_315_5250_COMPARE_TIMER_ADD("cmptimer_main") - MCFG_SEGA_315_5250_68KINT_CALLBACK(WRITELINE(*this, segaxbd_state, timer_irq_w)) - MCFG_SEGA_315_5250_ZINT_CALLBACK(INPUTLINE("soundcpu", INPUT_LINE_NMI)) + SEGA_315_5250_COMPARE_TIMER(config, m_cmptimer_1, 0); + m_cmptimer_1->m68kint_callback().set(FUNC(segaxbd_state::timer_irq_w)); + m_cmptimer_1->zint_callback().set_inputline(m_soundcpu, INPUT_LINE_NMI); - MCFG_SEGA_315_5250_COMPARE_TIMER_ADD("cmptimer_subx") + SEGA_315_5250_COMPARE_TIMER(config, "cmptimer_subx", 0); MCFG_DEVICE_ADD("iochip_0", CXD1095, 0) // IC160 MCFG_CXD1095_IN_PORTA_CB(IOPORT("IO0PORTA")) @@ -1900,9 +1900,7 @@ MACHINE_CONFIG_START(segaxbd_smgp_fd1094_state::device_add_mconfig) MCFG_DEVICE_PROGRAM_MAP(smgp_airdrive_map) MCFG_DEVICE_IO_MAP(smgp_airdrive_portmap) - MCFG_DEVICE_MODIFY("cmptimer_main") - MCFG_SEGA_315_5250_ZINT_CALLBACK(INPUTLINE("soundcpu", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("soundcpu2", INPUT_LINE_NMI)) + m_cmptimer_1->zint_callback().append_inputline(m_soundcpu2, INPUT_LINE_NMI); MCFG_DEVICE_MODIFY("iochip_0") MCFG_CXD1095_IN_PORTA_CB(READ8(*this, segaxbd_state, smgp_motor_r)) @@ -1946,9 +1944,7 @@ MACHINE_CONFIG_START(segaxbd_smgp_state::device_add_mconfig) MCFG_DEVICE_PROGRAM_MAP(smgp_airdrive_map) MCFG_DEVICE_IO_MAP(smgp_airdrive_portmap) - MCFG_DEVICE_MODIFY("cmptimer_main") - MCFG_SEGA_315_5250_ZINT_CALLBACK(INPUTLINE("soundcpu", INPUT_LINE_NMI)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("soundcpu2", INPUT_LINE_NMI)) + m_cmptimer_1->zint_callback().append_inputline(m_soundcpu2, INPUT_LINE_NMI); MCFG_DEVICE_MODIFY("iochip_0") MCFG_CXD1095_IN_PORTA_CB(READ8(*this, segaxbd_state, smgp_motor_r)) diff --git a/src/mame/drivers/segaybd.cpp b/src/mame/drivers/segaybd.cpp index 51e0a9e4d1c..c28e78354c4 100644 --- a/src/mame/drivers/segaybd.cpp +++ b/src/mame/drivers/segaybd.cpp @@ -1292,15 +1292,15 @@ MACHINE_CONFIG_START(segaybd_state::yboard) MCFG_MB3773_ADD("watchdog") // IC95 - MCFG_DEVICE_ADD("io", SEGA_315_5296, MASTER_CLOCK/8) - MCFG_315_5296_IN_PORTA_CB(IOPORT("P1")) - MCFG_315_5296_IN_PORTB_CB(IOPORT("GENERAL")) - MCFG_315_5296_IN_PORTC_CB(IOPORT("LIMITSW")) - MCFG_315_5296_OUT_PORTD_CB(WRITE8(*this, segaybd_state, output1_w)) - MCFG_315_5296_OUT_PORTE_CB(WRITE8(*this, segaybd_state, misc_output_w)) - MCFG_315_5296_IN_PORTF_CB(IOPORT("DSW")) - MCFG_315_5296_IN_PORTG_CB(IOPORT("COINAGE")) - MCFG_315_5296_OUT_PORTH_CB(WRITE8(*this, segaybd_state, output2_w)) + sega_315_5296_device &io(SEGA_315_5296(config, "io", MASTER_CLOCK/8)); + io.in_pa_callback().set_ioport("P1"); + io.in_pb_callback().set_ioport("GENERAL"); + io.in_pc_callback().set_ioport("LIMITSW"); + io.out_pd_callback().set(FUNC(segaybd_state::output1_w)); + io.out_pe_callback().set(FUNC(segaybd_state::misc_output_w)); + io.in_pf_callback().set_ioport("DSW"); + io.in_pg_callback().set_ioport("COINAGE"); + io.out_ph_callback().set(FUNC(segaybd_state::output2_w)); // FMCS and CKOT connect to CS and OSC IN on MSM6253 below MCFG_DEVICE_ADD("adc", MSM6253, 0) diff --git a/src/mame/drivers/selz80.cpp b/src/mame/drivers/selz80.cpp index 04d2385cda2..655bc7269d5 100644 --- a/src/mame/drivers/selz80.cpp +++ b/src/mame/drivers/selz80.cpp @@ -228,9 +228,9 @@ MACHINE_CONFIG_START(selz80_state::selz80) MCFG_DEFAULT_LAYOUT(layout_selz80) /* Devices */ - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) + CLOCK(config, m_clock, 153600); + m_clock->signal_handler().set("uart", FUNC(i8251_device::write_txc)); + m_clock->signal_handler().append("uart", FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("uart", I8251, 0) MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) @@ -246,8 +246,8 @@ MACHINE_CONFIG_START(selz80_state::selz80) MCFG_I8279_OUT_SL_CB(WRITE8(*this, selz80_state, scanlines_w)) // scan SL lines MCFG_I8279_OUT_DISP_CB(WRITE8(*this, selz80_state, digit_w)) // display A&B MCFG_I8279_IN_RL_CB(READ8(*this, selz80_state, kbd_r)) // kbd RL lines - MCFG_I8279_IN_SHIFT_CB(VCC) // Shift key - MCFG_I8279_IN_CTRL_CB(VCC) + MCFG_I8279_IN_SHIFT_CB(CONSTANT(1)) // Shift key + MCFG_I8279_IN_CTRL_CB(CONSTANT(1)) MACHINE_CONFIG_END MACHINE_CONFIG_START(selz80_state::dagz80) diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp index 4b6d9ce70d9..0bb9e676196 100644 --- a/src/mame/drivers/seta.cpp +++ b/src/mame/drivers/seta.cpp @@ -8026,10 +8026,10 @@ MACHINE_CONFIG_START(seta_state::usclssic) MCFG_UPD4701_PORTX("TRACKX") MCFG_UPD4701_PORTY("TRACKY") - MCFG_DEVICE_ADD("buttonmux", HC157, 0) - MCFG_74157_OUT_CB(WRITELINE("upd4701", upd4701_device, middle_w)) MCFG_DEVCB_BIT(0) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("upd4701", upd4701_device, right_w)) MCFG_DEVCB_BIT(1) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("upd4701", upd4701_device, left_w)) MCFG_DEVCB_BIT(2) + HC157(config, m_buttonmux, 0); + m_buttonmux->out_callback().set(m_upd4701, FUNC(upd4701_device::middle_w)).bit(0); + m_buttonmux->out_callback().append(m_upd4701, FUNC(upd4701_device::right_w)).bit(1); + m_buttonmux->out_callback().append(m_upd4701, FUNC(upd4701_device::left_w)).bit(2); MCFG_MACHINE_START_OVERRIDE(seta_state,usclssic) MCFG_MACHINE_RESET_OVERRIDE(seta_state,calibr50) diff --git a/src/mame/drivers/seta2.cpp b/src/mame/drivers/seta2.cpp index efd21ca2000..7fb2fb8694e 100644 --- a/src/mame/drivers/seta2.cpp +++ b/src/mame/drivers/seta2.cpp @@ -728,7 +728,7 @@ void seta2_state::telpacfl_map(address_map &map) MCFG_DEVICE_ADD( _tag, FUNCUBE_TOUCHSCREEN, _clock ) #define MCFG_FUNCUBE_TOUCHSCREEN_TX_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_tx_cb(DEVCB_##_devcb); + downcast(*device).set_tx_cb(DEVCB_##_devcb); class funcube_touchscreen_device : public device_t, public device_serial_interface diff --git a/src/mame/drivers/sfcbox.cpp b/src/mame/drivers/sfcbox.cpp index 98c54a167ad..d9be50fe51f 100644 --- a/src/mame/drivers/sfcbox.cpp +++ b/src/mame/drivers/sfcbox.cpp @@ -492,9 +492,9 @@ MACHINE_CONFIG_START(sfcbox_state::sfcbox) MCFG_SCREEN_RAW_PARAMS(DOTCLK_NTSC, SNES_HTOTAL, 0, SNES_SCR_WIDTH, SNES_VTOTAL_NTSC, 0, SNES_SCR_HEIGHT_NTSC) MCFG_SCREEN_UPDATE_DRIVER( snes_state, screen_update ) - MCFG_DEVICE_ADD("ppu", SNES_PPU, 0) - MCFG_SNES_PPU_OPENBUS_CB(READ8(*this, sfcbox_state, snes_open_bus_r)) - MCFG_VIDEO_SET_SCREEN("screen") + SNES_PPU(config, m_ppu, 0); + m_ppu->open_bus_callback().set([this] { return snes_open_bus_r(); }); // lambda because overloaded function name + m_ppu->set_screen("screen"); // SFCBOX MCFG_SCREEN_ADD("osd", RASTER) diff --git a/src/mame/drivers/shangkid.cpp b/src/mame/drivers/shangkid.cpp index a29db7ce2ba..c771985ddcb 100644 --- a/src/mame/drivers/shangkid.cpp +++ b/src/mame/drivers/shangkid.cpp @@ -378,40 +378,40 @@ void shangkid_state::sound_portmap(address_map &map) MACHINE_CONFIG_START(shangkid_state::chinhero) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(18'432'000)/6) /* verified on pcb */ + MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(18'432'000)/6) /* verified on pcb */ MCFG_DEVICE_PROGRAM_MAP(chinhero_main_map) - MCFG_DEVICE_ADD("bbx", Z80, XTAL(18'432'000)/6) /* verified on pcb */ + MCFG_DEVICE_ADD(m_bbx, Z80, XTAL(18'432'000)/6) /* verified on pcb */ MCFG_DEVICE_PROGRAM_MAP(chinhero_bbx_map) MCFG_DEVICE_IO_MAP(chinhero_bbx_portmap) - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(18'432'000)/6) /* verified on pcb */ + MCFG_DEVICE_ADD(m_audiocpu, Z80, XTAL(18'432'000)/6) /* verified on pcb */ MCFG_DEVICE_PROGRAM_MAP(chinhero_sound_map) MCFG_DEVICE_IO_MAP(sound_portmap) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(INPUTLINE("bbx", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // RESET2 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // RESET3 - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, shangkid_state, sound_enable_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, shangkid_state, int_enable_1_w)) // INTE1 - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, shangkid_state, int_enable_2_w)) // INTE2 - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, shangkid_state, nmi_enable_1_w)) // NMIE1 - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, shangkid_state, nmi_enable_2_w)) // NMIE2 - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, shangkid_state, coin_counter_1_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, shangkid_state, coin_counter_2_w)) + ls259_device &mainlatch(LS259(config, "mainlatch")); + mainlatch.q_out_cb<0>().set_inputline(m_bbx, INPUT_LINE_RESET).invert(); // RESET2 + mainlatch.q_out_cb<1>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert(); // RESET3 + mainlatch.q_out_cb<1>().append(FUNC(shangkid_state::sound_enable_w)); + mainlatch.q_out_cb<2>().set(FUNC(shangkid_state::int_enable_1_w)); // INTE1 + mainlatch.q_out_cb<3>().set(FUNC(shangkid_state::int_enable_2_w)); // INTE2 + mainlatch.q_out_cb<4>().set(FUNC(shangkid_state::nmi_enable_1_w)); // NMIE1 + mainlatch.q_out_cb<5>().set(FUNC(shangkid_state::nmi_enable_2_w)); // NMIE2 + mainlatch.q_out_cb<6>().set(FUNC(shangkid_state::coin_counter_1_w)); + mainlatch.q_out_cb<7>().set(FUNC(shangkid_state::coin_counter_2_w)); MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(40*8, 28*8) - MCFG_SCREEN_VISIBLE_AREA(16, 319-16, 0, 223) - MCFG_SCREEN_UPDATE_DRIVER(shangkid_state, screen_update_shangkid) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, shangkid_state, irq_1_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, shangkid_state, irq_2_w)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(40*8, 28*8); + screen.set_visarea(16, 319-16, 0, 223); + screen.set_screen_update(FUNC(shangkid_state::screen_update_shangkid)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(shangkid_state::irq_1_w)); + screen.screen_vblank().append(FUNC(shangkid_state::irq_2_w)); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_chinhero) MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", "proms", 256) @@ -435,20 +435,17 @@ MACHINE_CONFIG_START(shangkid_state::shangkid) chinhero(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(shangkid_main_map) + m_maincpu->set_addrmap(AS_PROGRAM, &shangkid_state::shangkid_main_map); - MCFG_DEVICE_MODIFY("bbx") - MCFG_DEVICE_PROGRAM_MAP(shangkid_bbx_map) - MCFG_DEVICE_IO_MAP(shangkid_bbx_portmap) + m_bbx->set_addrmap(AS_PROGRAM, &shangkid_state::shangkid_bbx_map); + m_bbx->set_addrmap(AS_IO, &shangkid_state::shangkid_bbx_portmap); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_PROGRAM_MAP(shangkid_sound_map) + m_audiocpu->set_addrmap(AS_PROGRAM, &shangkid_state::shangkid_sound_map); - MCFG_DEVICE_MODIFY("mainlatch") + ls259_device &mainlatch(*subdevice("mainlatch")); // Q1 should *not* reset the AY-3-8910 here, or else banking writes will be lost! - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(MEMBANK("bank1")) + mainlatch.q_out_cb<1>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert(); + mainlatch.q_out_cb<7>().set_membank("bank1"); MCFG_MACHINE_RESET_OVERRIDE(shangkid_state,shangkid) diff --git a/src/mame/drivers/shougi.cpp b/src/mame/drivers/shougi.cpp index 7ff83a5da3a..ae4f0db2e5e 100644 --- a/src/mame/drivers/shougi.cpp +++ b/src/mame/drivers/shougi.cpp @@ -92,8 +92,8 @@ PROM : Type MB7051 class shougi_state : public driver_device { public: - shougi_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + shougi_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_subcpu(*this, "sub"), m_alpha_8201(*this, "alpha_8201"), @@ -383,13 +383,13 @@ MACHINE_CONFIG_START(shougi_state::shougi) MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL(10'000'000)/4/8) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // 0: sharedram = sub, 1: sharedram = main (TODO!) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, shougi_state, nmi_enable_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // ? - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("alpha_8201", alpha_8201_device, mcu_start_w)) // start/halt ALPHA-8201 - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE("alpha_8201", alpha_8201_device, bus_dir_w)) MCFG_DEVCB_INVERT // ALPHA-8201 shared RAM bus direction: 0: mcu, 1: maincpu - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // nothing? connected to +5v via resistor + ls259_device &mainlatch(LS259(config, "mainlatch")); + mainlatch.q_out_cb<0>().set_nop(); // 0: sharedram = sub, 1: sharedram = main (TODO!) + mainlatch.q_out_cb<1>().set(FUNC(shougi_state::nmi_enable_w)); + mainlatch.q_out_cb<2>().set_nop(); // ? + mainlatch.q_out_cb<3>().set("alpha_8201", FUNC(alpha_8201_device::mcu_start_w)); // start/halt ALPHA-8201 + mainlatch.q_out_cb<4>().set("alpha_8201", FUNC(alpha_8201_device::bus_dir_w)).invert(); // ALPHA-8201 shared RAM bus direction: 0: mcu, 1: maincpu + mainlatch.q_out_cb<7>().set_nop(); // nothing? connected to +5v via resistor MCFG_QUANTUM_PERFECT_CPU("maincpu") diff --git a/src/mame/drivers/slapfght.cpp b/src/mame/drivers/slapfght.cpp index 272421e9329..36381227645 100644 --- a/src/mame/drivers/slapfght.cpp +++ b/src/mame/drivers/slapfght.cpp @@ -909,17 +909,17 @@ MACHINE_CONFIG_START(slapfght_state::perfrman) MCFG_QUANTUM_PERFECT_CPU("maincpu") /* video hardware */ - MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM8) + BUFFERED_SPRITERAM8(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(slapfght_state, screen_update_perfrman) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram8_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, slapfght_state, vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 2*8, 32*8-1); + m_screen->set_screen_update(FUNC(slapfght_state::screen_update_perfrman)); + m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + m_screen->screen_vblank().append(FUNC(slapfght_state::vblank_irq)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_perfrman) MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", "proms", 256) @@ -961,17 +961,17 @@ MACHINE_CONFIG_START(slapfght_state::tigerh) MCFG_QUANTUM_PERFECT_CPU("maincpu") /* video hardware */ - MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM8) + BUFFERED_SPRITERAM8(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(1*8, 36*8-1, 2*8-1, 32*8-1-1) - MCFG_SCREEN_UPDATE_DRIVER(slapfght_state, screen_update_slapfight) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram8_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, slapfght_state, vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(1*8, 36*8-1, 2*8-1, 32*8-1-1); + m_screen->set_screen_update(FUNC(slapfght_state::screen_update_slapfight)); + m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + m_screen->screen_vblank().append(FUNC(slapfght_state::vblank_irq)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_slapfght) MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", "proms", 256) @@ -1034,17 +1034,17 @@ MACHINE_CONFIG_START(slapfght_state::slapfigh) MCFG_QUANTUM_PERFECT_CPU("maincpu") /* video hardware */ - MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM8) + BUFFERED_SPRITERAM8(config, m_spriteram); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(1*8, 36*8-1, 2*8-1, 32*8-1-1) - MCFG_SCREEN_UPDATE_DRIVER(slapfght_state, screen_update_slapfight) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram", buffered_spriteram8_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, slapfght_state, vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(1*8, 36*8-1, 2*8-1, 32*8-1-1); + m_screen->set_screen_update(FUNC(slapfght_state::screen_update_slapfight)); + m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + m_screen->screen_vblank().append(FUNC(slapfght_state::vblank_irq)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_slapfght) MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", "proms", 256) diff --git a/src/mame/drivers/slapshot.cpp b/src/mame/drivers/slapshot.cpp index 1d784f00c58..8eb5782d864 100644 --- a/src/mame/drivers/slapshot.cpp +++ b/src/mame/drivers/slapshot.cpp @@ -453,12 +453,12 @@ MACHINE_CONFIG_START(slapshot_state::slapshot) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0) - MCFG_TC0640FIO_READ_1_CB(IOPORT("COINS")) - MCFG_TC0640FIO_READ_2_CB(IOPORT("BUTTONS")) - MCFG_TC0640FIO_READ_3_CB(IOPORT("SYSTEM")) - MCFG_TC0640FIO_WRITE_4_CB(WRITE8(*this, slapshot_state, coin_control_w)) - MCFG_TC0640FIO_READ_7_CB(IOPORT("JOY")) + TC0640FIO(config, m_tc0640fio, 0); + m_tc0640fio->read_1_callback().set_ioport("COINS"); + m_tc0640fio->read_2_callback().set_ioport("BUTTONS"); + m_tc0640fio->read_3_callback().set_ioport("SYSTEM"); + m_tc0640fio->write_4_callback().set(FUNC(slapshot_state::coin_control_w)); + m_tc0640fio->read_7_callback().set_ioport("JOY"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -522,12 +522,12 @@ MACHINE_CONFIG_START(slapshot_state::opwolf3) MCFG_ADC0808_IN2_CB(IOPORT("GUN2X")) MCFG_ADC0808_IN3_CB(IOPORT("GUN2Y")) - MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0) - MCFG_TC0640FIO_READ_1_CB(IOPORT("COINS")) - MCFG_TC0640FIO_READ_2_CB(IOPORT("BUTTONS")) - MCFG_TC0640FIO_READ_3_CB(IOPORT("SYSTEM")) - MCFG_TC0640FIO_WRITE_4_CB(WRITE8(*this, slapshot_state, coin_control_w)) - MCFG_TC0640FIO_READ_7_CB(IOPORT("JOY")) + TC0640FIO(config, m_tc0640fio, 0); + m_tc0640fio->read_1_callback().set_ioport("COINS"); + m_tc0640fio->read_2_callback().set_ioport("BUTTONS"); + m_tc0640fio->read_3_callback().set_ioport("SYSTEM"); + m_tc0640fio->write_4_callback().set(FUNC(slapshot_state::coin_control_w)); + m_tc0640fio->read_7_callback().set_ioport("JOY"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/snes.cpp b/src/mame/drivers/snes.cpp index 99fc2a521be..646d3f68748 100644 --- a/src/mame/drivers/snes.cpp +++ b/src/mame/drivers/snes.cpp @@ -1352,9 +1352,9 @@ MACHINE_CONFIG_START(snes_console_state::snes) MCFG_SCREEN_RAW_PARAMS(DOTCLK_NTSC * 2, SNES_HTOTAL * 2, 0, SNES_SCR_WIDTH * 2, SNES_VTOTAL_NTSC, 0, SNES_SCR_HEIGHT_NTSC) MCFG_SCREEN_UPDATE_DRIVER( snes_state, screen_update ) - MCFG_DEVICE_ADD("ppu", SNES_PPU, 0) - MCFG_SNES_PPU_OPENBUS_CB(READ8(*this, snes_console_state, snes_open_bus_r)) - MCFG_VIDEO_SET_SCREEN("screen") + SNES_PPU(config, m_ppu, 0); + m_ppu->open_bus_callback().set([this] { return snes_open_bus_r(); }); // lambda because overloaded function name + m_ppu->set_screen("screen"); MCFG_SNES_CONTROL_PORT_ADD("ctrl1", snes_control_port_devices, "joypad") MCFG_SNESCTRL_ONSCREEN_CB(snes_console_state, onscreen_cb) diff --git a/src/mame/drivers/snesb.cpp b/src/mame/drivers/snesb.cpp index 6226babf68e..102aa8798ad 100644 --- a/src/mame/drivers/snesb.cpp +++ b/src/mame/drivers/snesb.cpp @@ -716,9 +716,9 @@ MACHINE_CONFIG_START(snesb_state::kinstb) MCFG_SCREEN_RAW_PARAMS(DOTCLK_NTSC, SNES_HTOTAL, 0, SNES_SCR_WIDTH, SNES_VTOTAL_NTSC, 0, SNES_SCR_HEIGHT_NTSC) MCFG_SCREEN_UPDATE_DRIVER( snes_state, screen_update ) - MCFG_DEVICE_ADD("ppu", SNES_PPU, 0) - MCFG_SNES_PPU_OPENBUS_CB(READ8(*this, snesb_state, snes_open_bus_r)) - MCFG_VIDEO_SET_SCREEN("screen") + SNES_PPU(config, m_ppu, 0); + m_ppu->open_bus_callback().set([this] { return snes_open_bus_r(); }); // lambda because overloaded function name + m_ppu->set_screen("screen"); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); diff --git a/src/mame/drivers/splash.cpp b/src/mame/drivers/splash.cpp index f4af04c878e..874ac35b008 100644 --- a/src/mame/drivers/splash.cpp +++ b/src/mame/drivers/splash.cpp @@ -559,11 +559,11 @@ MACHINE_CONFIG_START(splash_state::roldfrog) MCFG_DEVICE_IO_MAP(roldfrog_sound_io_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", splash_state, roldfrog_interrupt) - MCFG_DEVICE_ADD("outlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, splash_state, coin1_lockout_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, splash_state, coin2_lockout_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, splash_state, coin1_counter_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, splash_state, coin2_counter_w)) + LS259(config, m_outlatch); + m_outlatch->q_out_cb<1>().set(FUNC(splash_state::coin1_lockout_w)); + m_outlatch->q_out_cb<1>().append(FUNC(splash_state::coin2_lockout_w)); + m_outlatch->q_out_cb<2>().set(FUNC(splash_state::coin1_counter_w)); + m_outlatch->q_out_cb<3>().set(FUNC(splash_state::coin2_counter_w)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/stargame.cpp b/src/mame/drivers/stargame.cpp index 2a8c005e115..e7cd7a4ab6a 100644 --- a/src/mame/drivers/stargame.cpp +++ b/src/mame/drivers/stargame.cpp @@ -132,18 +132,17 @@ MACHINE_CONFIG_START(stargame_state::stargame) MCFG_DEVICE_ADD("ay", AY8910, 15000000 / 8) // clock line marked as CK2 and derived from 15MHz crystal MCFG_SOUND_ROUTE(ALL_OUTPUTS, "aysnd", 0.25) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // DADIS - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // DAPRI - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // RJUEGO - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // RFLIPPER - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // to AUXILLIAR socket - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // RFDIS - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // SRESET - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // MAKRES + ls259_device &mainlatch(LS259(config, "mainlatch")); + mainlatch.q_out_cb<0>().set_nop(); // DADIS + mainlatch.q_out_cb<1>().set_nop(); // DAPRI + mainlatch.q_out_cb<2>().set_nop(); // RJUEGO + mainlatch.q_out_cb<3>().set_nop(); // RFLIPPER + mainlatch.q_out_cb<4>().set_nop(); // to AUXILLIAR socket + mainlatch.q_out_cb<5>().set_nop(); // RFDIS + mainlatch.q_out_cb<6>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert(); // SRESET + mainlatch.q_out_cb<7>().set_nop(); // MAKRES - MCFG_GENERIC_LATCH_8_ADD("soundlatch") - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI)) + GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); MCFG_WATCHDOG_ADD("watchdog") MACHINE_CONFIG_END diff --git a/src/mame/drivers/starwars.cpp b/src/mame/drivers/starwars.cpp index ba82217ef7b..f71b7dda782 100644 --- a/src/mame/drivers/starwars.cpp +++ b/src/mame/drivers/starwars.cpp @@ -325,15 +325,15 @@ MACHINE_CONFIG_START(starwars_state::starwars) MCFG_X2212_ADD_AUTOSAVE("x2212") /* nvram */ - MCFG_DEVICE_ADD("outlatch", LS259, 0) // 9L/M - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, starwars_state, coin1_counter_w)) // Coin counter 1 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, starwars_state, coin2_counter_w)) // Coin counter 2 - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(OUTPUT("led2")) MCFG_DEVCB_INVERT // LED 3 - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // LED 2 - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("bank1")) // bank switch - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, starwars_state, prng_reset_w)) // reset PRNG - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT // LED 1 - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, starwars_state, recall_w)) // NVRAM array recall + ls259_device &outlatch(LS259(config, "outlatch")); // 9L/M + outlatch.q_out_cb<0>().set(FUNC(starwars_state::coin1_counter_w)); // Coin counter 1 + outlatch.q_out_cb<1>().set(FUNC(starwars_state::coin2_counter_w)); // Coin counter 2 + outlatch.q_out_cb<2>().set_output("led2").invert(); // LED 3 + outlatch.q_out_cb<3>().set_output("led1").invert(); // LED 2 + outlatch.q_out_cb<4>().set_membank("bank1"); // bank switch + outlatch.q_out_cb<5>().set(FUNC(starwars_state::prng_reset_w)); // reset PRNG + outlatch.q_out_cb<6>().set_output("led0").invert(); // LED 1 + outlatch.q_out_cb<7>().set(FUNC(starwars_state::recall_w)); // NVRAM array recall /* video hardware */ MCFG_VECTOR_ADD("vector") @@ -349,41 +349,32 @@ MACHINE_CONFIG_START(starwars_state::starwars) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("pokey1", POKEY, MASTER_CLOCK / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) + POKEY(config, m_pokey[0], MASTER_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.20); + POKEY(config, m_pokey[1], MASTER_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.20); + POKEY(config, m_pokey[2], MASTER_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.20); + POKEY(config, m_pokey[3], MASTER_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.20); - MCFG_DEVICE_ADD("pokey2", POKEY, MASTER_CLOCK / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) + TMS5220(config, m_tms, MASTER_CLOCK/2/9).add_route(ALL_OUTPUTS, "mono", 0.50); - MCFG_DEVICE_ADD("pokey3", POKEY, MASTER_CLOCK / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set(m_riot, FUNC(riot6532_device::pa7_w)); + m_soundlatch->data_pending_callback().append(FUNC(starwars_state::boost_interleave_hack)); - MCFG_DEVICE_ADD("pokey4", POKEY, MASTER_CLOCK / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) - - MCFG_DEVICE_ADD("tms", TMS5220, MASTER_CLOCK/2/9) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) - - MCFG_GENERIC_LATCH_8_ADD("soundlatch") - MCFG_GENERIC_LATCH_DATA_PENDING_CB(WRITELINE("riot", riot6532_device, pa7_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, starwars_state, boost_interleave_hack)) - - MCFG_GENERIC_LATCH_8_ADD("mainlatch") - MCFG_GENERIC_LATCH_DATA_PENDING_CB(WRITELINE("riot", riot6532_device, pa6_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, starwars_state, boost_interleave_hack)) + GENERIC_LATCH_8(config, m_mainlatch); + m_mainlatch->data_pending_callback().set(m_riot, FUNC(riot6532_device::pa6_w)); + m_mainlatch->data_pending_callback().append(FUNC(starwars_state::boost_interleave_hack)); MACHINE_CONFIG_END MACHINE_CONFIG_START(starwars_state::esb) starwars(config); + MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(esb_main_map) MCFG_DEVICE_ADD("slapstic", SLAPSTIC, 101, false) - MCFG_DEVICE_MODIFY("outlatch") - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("bank1")) - MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("bank2")) + subdevice("outlatch")->q_out_cb<4>().append_membank("bank2"); MACHINE_CONFIG_END diff --git a/src/mame/drivers/studio2.cpp b/src/mame/drivers/studio2.cpp index c3c87676086..e8a7abd6705 100644 --- a/src/mame/drivers/studio2.cpp +++ b/src/mame/drivers/studio2.cpp @@ -652,7 +652,7 @@ MACHINE_CONFIG_START(studio2_state::studio2) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, 1760000) /* the real clock is derived from an oscillator circuit */ MCFG_DEVICE_PROGRAM_MAP(studio2_map) MCFG_DEVICE_IO_MAP(studio2_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, studio2_state, clear_r)) MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, studio2_state, ef3_r)) MCFG_COSMAC_EF4_CALLBACK(READLINE(*this, studio2_state, ef4_r)) @@ -679,7 +679,7 @@ MACHINE_CONFIG_START(visicom_state::visicom) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(3'579'545)/2) MCFG_DEVICE_PROGRAM_MAP(visicom_map) MCFG_DEVICE_IO_MAP(visicom_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, visicom_state, clear_r)) MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, visicom_state, ef3_r)) MCFG_COSMAC_EF4_CALLBACK(READLINE(*this, visicom_state, ef4_r)) @@ -711,7 +711,7 @@ MACHINE_CONFIG_START(mpt02_state::mpt02) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, CDP1864_CLOCK) MCFG_DEVICE_PROGRAM_MAP(mpt02_map) MCFG_DEVICE_IO_MAP(mpt02_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, mpt02_state, clear_r)) MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, mpt02_state, ef3_r)) MCFG_COSMAC_EF4_CALLBACK(READLINE(*this, mpt02_state, ef4_r)) @@ -727,7 +727,7 @@ MACHINE_CONFIG_START(mpt02_state::mpt02) MCFG_DEVICE_ADD("beeper", BEEP, 300) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, CDP1864_CLOCK, GND, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, mpt02_state, rdata_r), READLINE(*this, mpt02_state, bdata_r), READLINE(*this, mpt02_state, gdata_r)) + MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, CDP1864_CLOCK, CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, mpt02_state, rdata_r), READLINE(*this, mpt02_state, bdata_r), READLINE(*this, mpt02_state, gdata_r)) MCFG_CDP1864_CHROMINANCE(RES_K(4.7), RES_K(8.2), RES_K(4.7), RES_K(22)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/subs.cpp b/src/mame/drivers/subs.cpp index d4fde819fbd..335b71b7293 100644 --- a/src/mame/drivers/subs.cpp +++ b/src/mame/drivers/subs.cpp @@ -212,16 +212,16 @@ MACHINE_CONFIG_START(subs_state::subs) DISCRETE(config, m_discrete, subs_discrete).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0); - MCFG_DEVICE_ADD("latch", LS259, 0) // C9 - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(OUTPUT("led0")) MCFG_DEVCB_INVERT // START LAMP 1 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // START LAMP 2 - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) + ls259_device &latch(LS259(config, "latch")); // C9 + latch.q_out_cb<0>().set_output("led0").invert(); // START LAMP 1 + latch.q_out_cb<1>().set_output("led1").invert(); // START LAMP 2 + latch.q_out_cb<2>().set(m_discrete, FUNC(discrete_device::write_line)); + latch.q_out_cb<3>().set(m_discrete, FUNC(discrete_device::write_line)); // Schematics show crash and explode reversed. But this is proper. - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, subs_state, invert1_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, subs_state, invert2_w)) + latch.q_out_cb<4>().set(m_discrete, FUNC(discrete_device::write_line)); + latch.q_out_cb<5>().set(m_discrete, FUNC(discrete_device::write_line)); + latch.q_out_cb<6>().set(FUNC(subs_state::invert1_w)); + latch.q_out_cb<7>().set(FUNC(subs_state::invert2_w)); MACHINE_CONFIG_END diff --git a/src/mame/drivers/sun1.cpp b/src/mame/drivers/sun1.cpp index 231b50e43d7..4df00473f42 100644 --- a/src/mame/drivers/sun1.cpp +++ b/src/mame/drivers/sun1.cpp @@ -114,40 +114,41 @@ void sun1_state::machine_reset() } -MACHINE_CONFIG_START(sun1_state::sun1) +void sun1_state::sun1(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(sun1_mem) + M68000(config, m_maincpu, 16_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &sun1_state::sun1_mem); - MCFG_DEVICE_ADD("timer", AM9513, XTAL(16'000'000) / 4) - MCFG_AM9513_FOUT_CALLBACK(WRITELINE("timer", am9513_device, gate1_w)) - MCFG_AM9513_OUT1_CALLBACK(NOOP) // Watchdog; generates BERR/Reset - MCFG_AM9513_OUT2_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_6)) // User timer - MCFG_AM9513_OUT3_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_7)) // Refresh timer (2 ms) - MCFG_AM9513_OUT4_CALLBACK(WRITELINE("iouart", upd7201_new_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("iouart", upd7201_new_device, txca_w)) - MCFG_AM9513_OUT5_CALLBACK(WRITELINE("iouart", upd7201_new_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("iouart", upd7201_new_device, txcb_w)) + am9513_device &timer(AM9513(config, "timer", 16_MHz_XTAL / 4)); + timer.fout_cb().set("timer", FUNC(am9513_device::gate1_w)); + timer.out1_cb().set_nop(); // Watchdog; generates BERR/Reset + timer.out2_cb().set_inputline(m_maincpu, M68K_IRQ_6); // User timer + timer.out3_cb().set_inputline(m_maincpu, M68K_IRQ_7); // Refresh timer (2 ms) + timer.out4_cb().set(m_iouart, FUNC(upd7201_new_device::rxca_w)); + timer.out4_cb().append(m_iouart, FUNC(upd7201_new_device::txca_w)); + timer.out5_cb().set(m_iouart, FUNC(upd7201_new_device::rxcb_w)); + timer.out5_cb().append(m_iouart, FUNC(upd7201_new_device::txcb_w)); - MCFG_DEVICE_ADD("iouart", UPD7201_NEW, XTAL(16'000'000) / 4) - MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("rs232a", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE("rs232a", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE("rs232a", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("rs232b", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE("rs232b", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("rs232b", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", M68K_IRQ_5)) + UPD7201_NEW(config, m_iouart, 16_MHz_XTAL / 4); + m_iouart->out_txda_callback().set("rs232a", FUNC(rs232_port_device::write_txd)); + m_iouart->out_dtra_callback().set("rs232a", FUNC(rs232_port_device::write_dtr)); + m_iouart->out_rtsa_callback().set("rs232a", FUNC(rs232_port_device::write_rts)); + m_iouart->out_txdb_callback().set("rs232b", FUNC(rs232_port_device::write_txd)); + m_iouart->out_dtrb_callback().set("rs232b", FUNC(rs232_port_device::write_dtr)); + m_iouart->out_rtsb_callback().set("rs232b", FUNC(rs232_port_device::write_rts)); + m_iouart->out_int_callback().set_inputline(m_maincpu, M68K_IRQ_5); - MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("iouart", upd7201_new_device, rxa_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("iouart", upd7201_new_device, ctsa_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("iouart", upd7201_new_device, dcda_w)) + rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal")); + rs232a.rxd_handler().set(m_iouart, FUNC(upd7201_new_device::rxa_w)); + rs232a.cts_handler().set(m_iouart, FUNC(upd7201_new_device::ctsa_w)); + rs232a.dcd_handler().set(m_iouart, FUNC(upd7201_new_device::dcda_w)); - MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("iouart", upd7201_new_device, rxb_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("iouart", upd7201_new_device, ctsb_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("iouart", upd7201_new_device, dcdb_w)) -MACHINE_CONFIG_END + rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr)); + rs232b.rxd_handler().set(m_iouart, FUNC(upd7201_new_device::rxb_w)); + rs232b.cts_handler().set(m_iouart, FUNC(upd7201_new_device::ctsb_w)); + rs232b.dcd_handler().set(m_iouart, FUNC(upd7201_new_device::dcdb_w)); +} /* ROM definition */ ROM_START( sun1 ) diff --git a/src/mame/drivers/super6.cpp b/src/mame/drivers/super6.cpp index ab79c1cce0a..69a284b8ce5 100644 --- a/src/mame/drivers/super6.cpp +++ b/src/mame/drivers/super6.cpp @@ -454,18 +454,18 @@ void super6_state::machine_reset() MACHINE_CONFIG_START(super6_state::super6) // basic machine hardware - MCFG_DEVICE_ADD(Z80_TAG, Z80, 24_MHz_XTAL / 4) + MCFG_DEVICE_ADD(m_maincpu, Z80, 24_MHz_XTAL / 4) MCFG_DEVICE_PROGRAM_MAP(super6_mem) MCFG_DEVICE_IO_MAP(super6_io) MCFG_Z80_DAISY_CHAIN(super6_daisy_chain) // devices - MCFG_DEVICE_ADD(Z80CTC_TAG, Z80CTC, 24_MHz_XTAL / 4) + MCFG_DEVICE_ADD(m_ctc, Z80CTC, 24_MHz_XTAL / 4) MCFG_Z80CTC_INTR_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0)) MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", super6_state, ctc_tick, attotime::from_hz(24_MHz_XTAL / 16)) - MCFG_DEVICE_ADD(Z80DMA_TAG, Z80DMA, 24_MHz_XTAL / 6) + MCFG_DEVICE_ADD(m_dma, Z80DMA, 24_MHz_XTAL / 6) MCFG_Z80DMA_OUT_BUSREQ_CB(INPUTLINE(Z80_TAG, INPUT_LINE_HALT)) MCFG_Z80DMA_OUT_INT_CB(WRITELINE(Z80CTC_TAG, z80ctc_device, trg2)) MCFG_Z80DMA_IN_MREQ_CB(READ8(*this, super6_state, memory_read_byte)) @@ -473,17 +473,17 @@ MACHINE_CONFIG_START(super6_state::super6) MCFG_Z80DMA_IN_IORQ_CB(READ8(*this, super6_state, io_read_byte)) MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(*this, super6_state, io_write_byte)) - MCFG_DEVICE_ADD(Z80PIO_TAG, Z80PIO, 24_MHz_XTAL / 4) + MCFG_DEVICE_ADD(m_pio, Z80PIO, 24_MHz_XTAL / 4) MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0)) MCFG_DEVICE_ADD(WD2793_TAG, WD2793, 1000000) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, super6_state, fdc_intrq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, super6_state, fdc_drq_w)) - MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", super6_floppies, "525dd", floppy_image_device::default_floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", super6_floppies, nullptr, floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(m_floppy0, super6_floppies, "525dd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(m_floppy1, super6_floppies, nullptr, floppy_image_device::default_floppy_formats) - MCFG_DEVICE_ADD(Z80DART_TAG, Z80DART, 24_MHz_XTAL / 4) + MCFG_DEVICE_ADD(m_dart, Z80DART, 24_MHz_XTAL / 4) MCFG_Z80DART_OUT_TXDA_CB(WRITELINE(RS232_A_TAG, rs232_port_device, write_txd)) MCFG_Z80DART_OUT_DTRA_CB(WRITELINE(RS232_A_TAG, rs232_port_device, write_dtr)) MCFG_Z80DART_OUT_RTSA_CB(WRITELINE(RS232_A_TAG, rs232_port_device, write_rts)) @@ -493,17 +493,17 @@ MACHINE_CONFIG_START(super6_state::super6) MCFG_Z80DART_OUT_INT_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0)) MCFG_DEVICE_ADD(RS232_A_TAG, RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE(Z80DART_TAG, z80dart_device, rxa_w)) + MCFG_RS232_RXD_HANDLER(WRITELINE(m_dart, z80dart_device, rxa_w)) MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal) MCFG_DEVICE_ADD(RS232_B_TAG, RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE(Z80DART_TAG, z80dart_device, rxb_w)) + MCFG_RS232_RXD_HANDLER(WRITELINE(m_dart, z80dart_device, rxb_w)) - MCFG_DEVICE_ADD(BR1945_TAG, COM8116, 5.0688_MHz_XTAL) - MCFG_COM8116_FR_HANDLER(WRITELINE(Z80DART_TAG, z80dart_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80DART_TAG, z80dart_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80CTC_TAG, z80ctc_device, trg1)) - MCFG_COM8116_FT_HANDLER(WRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w)) + COM8116(config, m_brg, 5.0688_MHz_XTAL); + m_brg->fr_handler().set(m_dart, FUNC(z80dart_device::txca_w)); + m_brg->fr_handler().append(m_dart, FUNC(z80dart_device::rxca_w)); + m_brg->fr_handler().append(m_ctc, FUNC(z80ctc_device::trg1)); + m_brg->ft_handler().set(m_dart, FUNC(z80dart_device::rxtxcb_w)); // internal ram MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mame/drivers/superchs.cpp b/src/mame/drivers/superchs.cpp index 3afd6b60ed1..3633faf9df5 100644 --- a/src/mame/drivers/superchs.cpp +++ b/src/mame/drivers/superchs.cpp @@ -244,14 +244,14 @@ MACHINE_CONFIG_START(superchs_state::superchs) MCFG_ADC0808_IN1_CB(IOPORT("ACCEL")) MCFG_ADC0808_IN2_CB(READ8(*this, superchs_state, volume_r)) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_1_CB(IOPORT("COINS")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("SWITCHES")) - MCFG_TC0510NIO_READ_3_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(7) - MCFG_TC0510NIO_WRITE_3_CB(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, superchs_state, coin_word_w)) + tc0510nio_device &tc0510nio(TC0510NIO(config, "tc0510nio", 0)); + tc0510nio.read_1_callback().set_ioport("COINS"); + tc0510nio.read_2_callback().set_ioport("SWITCHES"); + tc0510nio.read_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::do_read)).lshift(7); + tc0510nio.write_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5); + tc0510nio.write_3_callback().append(m_eeprom, FUNC(eeprom_serial_93cxx_device::di_write)).bit(6); + tc0510nio.write_3_callback().append(m_eeprom, FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4); + tc0510nio.write_4_callback().set(FUNC(superchs_state::coin_word_w)); // there are 'vibration' control bits somewhere! /* video hardware */ diff --git a/src/mame/drivers/superslave.cpp b/src/mame/drivers/superslave.cpp index 9e88b3f5377..d1ce0ca6dee 100644 --- a/src/mame/drivers/superslave.cpp +++ b/src/mame/drivers/superslave.cpp @@ -363,7 +363,7 @@ void superslave_state::machine_reset() MACHINE_CONFIG_START(superslave_state::superslave) // basic machine hardware - MCFG_DEVICE_ADD(Z80_TAG, Z80, XTAL(8'000'000)/2) + MCFG_DEVICE_ADD(m_maincpu, Z80, XTAL(8'000'000)/2) MCFG_DEVICE_PROGRAM_MAP(superslave_mem) MCFG_DEVICE_IO_MAP(superslave_io) MCFG_Z80_DAISY_CHAIN(superslave_daisy_chain) @@ -414,13 +414,13 @@ MACHINE_CONFIG_START(superslave_state::superslave) MCFG_RS232_DCD_HANDLER(WRITELINE(Z80DART_1_TAG, z80dart_device, dcdb_w)) MCFG_RS232_CTS_HANDLER(WRITELINE(Z80DART_1_TAG, z80dart_device, ctsb_w)) - MCFG_DEVICE_ADD(BR1941_TAG, COM8116, XTAL(5'068'800)) - MCFG_COM8116_FR_HANDLER(WRITELINE(Z80DART_0_TAG, z80dart_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80DART_0_TAG, z80dart_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80DART_1_TAG, z80dart_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80DART_1_TAG, z80dart_device, rxca_w)) - MCFG_COM8116_FT_HANDLER(WRITELINE(Z80DART_0_TAG, z80dart_device, rxtxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80DART_1_TAG, z80dart_device, rxtxcb_w)) + COM8116(config, m_dbrg, XTAL(5'068'800)); + m_dbrg->fr_handler().set(Z80DART_0_TAG, FUNC(z80dart_device::txca_w)); + m_dbrg->fr_handler().append(Z80DART_0_TAG, FUNC(z80dart_device::rxca_w)); + m_dbrg->fr_handler().append(Z80DART_1_TAG, FUNC(z80dart_device::txca_w)); + m_dbrg->fr_handler().append(Z80DART_1_TAG, FUNC(z80dart_device::rxca_w)); + m_dbrg->ft_handler().set(Z80DART_0_TAG, FUNC(z80dart_device::rxtxcb_w)); + m_dbrg->ft_handler().append(Z80DART_1_TAG, FUNC(z80dart_device::rxtxcb_w)); // internal ram MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mame/drivers/suprloco.cpp b/src/mame/drivers/suprloco.cpp index 9ce498e6f05..9c801928411 100644 --- a/src/mame/drivers/suprloco.cpp +++ b/src/mame/drivers/suprloco.cpp @@ -183,11 +183,11 @@ MACHINE_CONFIG_START(suprloco_state::suprloco) MCFG_DEVICE_PROGRAM_MAP(sound_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(suprloco_state, irq0_line_hold, 4*60) /* NMIs are caused by the main CPU */ - MCFG_DEVICE_ADD("ppi", I8255A, 0) - MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, suprloco_state, control_w)) - MCFG_I8255_TRISTATE_PORTB_CB(CONSTANT(0)) - MCFG_I8255_OUT_PORTC_CB(OUTPUT("lamp0")) MCFG_DEVCB_BIT(0) MCFG_DEVCB_INVERT // set by 8255 bit mode when no credits inserted - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("audiocpu", INPUT_LINE_NMI)) MCFG_DEVCB_BIT(7) MCFG_DEVCB_INVERT + I8255A(config, m_ppi, 0); + m_ppi->out_pb_callback().set(FUNC(suprloco_state::control_w)); + m_ppi->tri_pb_callback().set_constant(0); + m_ppi->out_pc_callback().set_output("lamp0").bit(0).invert(); // set by 8255 bit mode when no credits inserted + m_ppi->out_pc_callback().append_inputline(m_audiocpu, INPUT_LINE_NMI).bit(7).invert(); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/suprslam.cpp b/src/mame/drivers/suprslam.cpp index b91461e27a3..3348666e239 100644 --- a/src/mame/drivers/suprslam.cpp +++ b/src/mame/drivers/suprslam.cpp @@ -278,13 +278,13 @@ MACHINE_CONFIG_START(suprslam_state::suprslam) MCFG_DEVICE_PROGRAM_MAP(sound_map) MCFG_DEVICE_IO_MAP(sound_io_map) - MCFG_DEVICE_ADD("io", VS9209, 0) - MCFG_VS9209_IN_PORTA_CB(IOPORT("P1")) - MCFG_VS9209_IN_PORTB_CB(IOPORT("P2")) - MCFG_VS9209_IN_PORTC_CB(IOPORT("SYSTEM")) - MCFG_VS9209_IN_PORTD_CB(IOPORT("DSW1")) - MCFG_VS9209_IN_PORTE_CB(IOPORT("DSW2")) - MCFG_VS9209_OUT_PORTG_CB(WRITE8(*this, suprslam_state, spr_ctrl_w)) + vs9209_device &io(VS9209(config, "io", 0)); + io.porta_input_cb().set_ioport("P1"); + io.portb_input_cb().set_ioport("P2"); + io.portc_input_cb().set_ioport("SYSTEM"); + io.portd_input_cb().set_ioport("DSW1"); + io.porte_input_cb().set_ioport("DSW2"); + io.porth_output_cb().set(FUNC(suprslam_state::spr_ctrl_w)); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_suprslam) diff --git a/src/mame/drivers/supstarf.cpp b/src/mame/drivers/supstarf.cpp index 7f27eaa3e34..194f8846d35 100644 --- a/src/mame/drivers/supstarf.cpp +++ b/src/mame/drivers/supstarf.cpp @@ -188,11 +188,11 @@ MACHINE_CONFIG_START(supstarf_state::supstarf) MCFG_MCS48_PORT_T1_IN_CB(READLINE(*this, supstarf_state, phase_detect_r)) MCFG_DEVICE_ADD("soundlatch1", I8212, 0) - MCFG_I8212_MD_CALLBACK(GND) + MCFG_I8212_MD_CALLBACK(CONSTANT(0)) MCFG_I8212_INT_CALLBACK(INPUTLINE("maincpu", I8085_RST55_LINE)) MCFG_DEVICE_ADD("soundlatch2", I8212, 0) - MCFG_I8212_MD_CALLBACK(GND) + MCFG_I8212_MD_CALLBACK(CONSTANT(0)) MCFG_I8212_INT_CALLBACK(INPUTLINE("soundcpu", MCS48_INPUT_IRQ)) //MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("maincpu", I8085_READY_LINE)) diff --git a/src/mame/drivers/swtpc.cpp b/src/mame/drivers/swtpc.cpp index 6d6db26618f..b620f32c6e9 100644 --- a/src/mame/drivers/swtpc.cpp +++ b/src/mame/drivers/swtpc.cpp @@ -102,47 +102,47 @@ MACHINE_CONFIG_START(swtpc_state::swtpc) MCFG_DEVICE_ADD("maincpu", M6800, XTAL(1'843'200) / 2) MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_ADD("brg", MC14411, XTAL(1'843'200)) - MCFG_MC14411_F7_CB(WRITELINE("io0", ss50_interface_port_device, f600_1200_w)) // 1200b - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io1", ss50_interface_port_device, f600_1200_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io2", ss50_interface_port_device, f600_1200_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io3", ss50_interface_port_device, f600_1200_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io4", ss50_interface_port_device, f600_1200_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io5", ss50_interface_port_device, f600_1200_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io6", ss50_interface_port_device, f600_1200_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io7", ss50_interface_port_device, f600_1200_w)) - MCFG_MC14411_F8_CB(WRITELINE("io0", ss50_interface_port_device, f600_4800_w)) // 600b - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io1", ss50_interface_port_device, f600_4800_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io2", ss50_interface_port_device, f600_4800_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io3", ss50_interface_port_device, f600_4800_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io4", ss50_interface_port_device, f600_4800_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io5", ss50_interface_port_device, f600_4800_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io6", ss50_interface_port_device, f600_4800_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io7", ss50_interface_port_device, f600_4800_w)) - MCFG_MC14411_F9_CB(WRITELINE("io0", ss50_interface_port_device, f300_w)) // 300b - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io1", ss50_interface_port_device, f300_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io2", ss50_interface_port_device, f300_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io3", ss50_interface_port_device, f300_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io4", ss50_interface_port_device, f300_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io5", ss50_interface_port_device, f300_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io6", ss50_interface_port_device, f300_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io7", ss50_interface_port_device, f300_w)) - MCFG_MC14411_F11_CB(WRITELINE("io0", ss50_interface_port_device, f150_9600_w)) // 150b - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io1", ss50_interface_port_device, f150_9600_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io2", ss50_interface_port_device, f150_9600_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io3", ss50_interface_port_device, f150_9600_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io4", ss50_interface_port_device, f150_9600_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io5", ss50_interface_port_device, f150_9600_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io6", ss50_interface_port_device, f150_9600_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io7", ss50_interface_port_device, f150_9600_w)) - MCFG_MC14411_F13_CB(WRITELINE("io0", ss50_interface_port_device, f110_w)) // 110b - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io1", ss50_interface_port_device, f110_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io2", ss50_interface_port_device, f110_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io3", ss50_interface_port_device, f110_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io4", ss50_interface_port_device, f110_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io5", ss50_interface_port_device, f110_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io6", ss50_interface_port_device, f110_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("io7", ss50_interface_port_device, f110_w)) + MC14411(config, m_brg, XTAL(1'843'200)); + m_brg->out_f7_cb().set("io0", FUNC(ss50_interface_port_device::f600_1200_w)); // 1200b + m_brg->out_f7_cb().append("io1", FUNC(ss50_interface_port_device::f600_1200_w)); + m_brg->out_f7_cb().append("io2", FUNC(ss50_interface_port_device::f600_1200_w)); + m_brg->out_f7_cb().append("io3", FUNC(ss50_interface_port_device::f600_1200_w)); + m_brg->out_f7_cb().append("io4", FUNC(ss50_interface_port_device::f600_1200_w)); + m_brg->out_f7_cb().append("io5", FUNC(ss50_interface_port_device::f600_1200_w)); + m_brg->out_f7_cb().append("io6", FUNC(ss50_interface_port_device::f600_1200_w)); + m_brg->out_f7_cb().append("io7", FUNC(ss50_interface_port_device::f600_1200_w)); + m_brg->out_f8_cb().set("io0", FUNC(ss50_interface_port_device::f600_4800_w)); // 600b + m_brg->out_f8_cb().append("io1", FUNC(ss50_interface_port_device::f600_4800_w)); + m_brg->out_f8_cb().append("io2", FUNC(ss50_interface_port_device::f600_4800_w)); + m_brg->out_f8_cb().append("io3", FUNC(ss50_interface_port_device::f600_4800_w)); + m_brg->out_f8_cb().append("io4", FUNC(ss50_interface_port_device::f600_4800_w)); + m_brg->out_f8_cb().append("io5", FUNC(ss50_interface_port_device::f600_4800_w)); + m_brg->out_f8_cb().append("io6", FUNC(ss50_interface_port_device::f600_4800_w)); + m_brg->out_f8_cb().append("io7", FUNC(ss50_interface_port_device::f600_4800_w)); + m_brg->out_f9_cb().set("io0", FUNC(ss50_interface_port_device::f300_w)); // 300b + m_brg->out_f9_cb().append("io1", FUNC(ss50_interface_port_device::f300_w)); + m_brg->out_f9_cb().append("io2", FUNC(ss50_interface_port_device::f300_w)); + m_brg->out_f9_cb().append("io3", FUNC(ss50_interface_port_device::f300_w)); + m_brg->out_f9_cb().append("io4", FUNC(ss50_interface_port_device::f300_w)); + m_brg->out_f9_cb().append("io5", FUNC(ss50_interface_port_device::f300_w)); + m_brg->out_f9_cb().append("io6", FUNC(ss50_interface_port_device::f300_w)); + m_brg->out_f9_cb().append("io7", FUNC(ss50_interface_port_device::f300_w)); + m_brg->out_f11_cb().set("io0", FUNC(ss50_interface_port_device::f150_9600_w)); // 150b + m_brg->out_f11_cb().append("io1", FUNC(ss50_interface_port_device::f150_9600_w)); + m_brg->out_f11_cb().append("io2", FUNC(ss50_interface_port_device::f150_9600_w)); + m_brg->out_f11_cb().append("io3", FUNC(ss50_interface_port_device::f150_9600_w)); + m_brg->out_f11_cb().append("io4", FUNC(ss50_interface_port_device::f150_9600_w)); + m_brg->out_f11_cb().append("io5", FUNC(ss50_interface_port_device::f150_9600_w)); + m_brg->out_f11_cb().append("io6", FUNC(ss50_interface_port_device::f150_9600_w)); + m_brg->out_f11_cb().append("io7", FUNC(ss50_interface_port_device::f150_9600_w)); + m_brg->out_f13_cb().set("io0", FUNC(ss50_interface_port_device::f110_w)); // 110b + m_brg->out_f13_cb().append("io1", FUNC(ss50_interface_port_device::f110_w)); + m_brg->out_f13_cb().append("io2", FUNC(ss50_interface_port_device::f110_w)); + m_brg->out_f13_cb().append("io3", FUNC(ss50_interface_port_device::f110_w)); + m_brg->out_f13_cb().append("io4", FUNC(ss50_interface_port_device::f110_w)); + m_brg->out_f13_cb().append("io5", FUNC(ss50_interface_port_device::f110_w)); + m_brg->out_f13_cb().append("io6", FUNC(ss50_interface_port_device::f110_w)); + m_brg->out_f13_cb().append("io7", FUNC(ss50_interface_port_device::f110_w)); MCFG_SS50_INTERFACE_PORT_ADD("io0", default_2rs_devices, nullptr) MCFG_SS50_INTERFACE_IRQ_CALLBACK(WRITELINE("mainirq", input_merger_device, in_w<0>)) diff --git a/src/mame/drivers/swtpc09.cpp b/src/mame/drivers/swtpc09.cpp index 00435181997..48248cd5f0e 100644 --- a/src/mame/drivers/swtpc09.cpp +++ b/src/mame/drivers/swtpc09.cpp @@ -191,14 +191,14 @@ MACHINE_CONFIG_START(swtpc09_state::swtpc09_base) MCFG_RS232_RXD_HANDLER(WRITELINE("acia", acia6850_device, write_rxd)) MCFG_RS232_CTS_HANDLER(WRITELINE("acia", acia6850_device, write_cts)) - MCFG_DEVICE_ADD("acia", ACIA6850, 0) - MCFG_ACIA6850_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_ACIA6850_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts)) - MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(*this, swtpc09_state, acia_interrupt)) + ACIA6850(config, m_acia, 0); + m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); + m_acia->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); + m_acia->irq_handler().set(FUNC(swtpc09_state::acia_interrupt)); - MCFG_DEVICE_ADD("brg", MC14411, 1.8432_MHz_XTAL) - MCFG_MC14411_F1_CB(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) + MC14411(config, m_brg, 1.8432_MHz_XTAL); + m_brg->out_f1_cb().set(m_acia, FUNC(acia6850_device::write_txc)); + m_brg->out_f1_cb().append(m_acia, FUNC(acia6850_device::write_rxc)); MCFG_DEVICE_ADD("fdc", FD1793, 1_MHz_XTAL) MCFG_FLOPPY_DRIVE_ADD("fdc:0", swtpc09_floppies, "dd", swtpc09_state::floppy_formats) diff --git a/src/mame/drivers/sys9002.cpp b/src/mame/drivers/sys9002.cpp index ac0c29d20cd..2b2bba65452 100644 --- a/src/mame/drivers/sys9002.cpp +++ b/src/mame/drivers/sys9002.cpp @@ -145,11 +145,11 @@ MACHINE_CONFIG_START(sys9002_state::sys9002) MCFG_MC6845_CHAR_WIDTH(8) MCFG_MC6845_UPDATE_ROW_CB(sys9002_state, crtc_update_row) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 614400) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart1", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart1", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart2", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart2", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 614400)); + uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("uart1", I8251, 0) MCFG_I8251_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/systec.cpp b/src/mame/drivers/systec.cpp index 45e4ccca455..1c5122376f4 100644 --- a/src/mame/drivers/systec.cpp +++ b/src/mame/drivers/systec.cpp @@ -90,9 +90,9 @@ MACHINE_CONFIG_START(systec_state::systec) MCFG_DEVICE_PROGRAM_MAP(systec_mem) MCFG_DEVICE_IO_MAP(systec_io) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("sio", z80sio_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, rxca_w)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set("sio", FUNC(z80sio_device::txca_w)); + uart_clock.signal_handler().append("sio", FUNC(z80sio_device::rxca_w)); /* Devices */ MCFG_DEVICE_ADD("sio", Z80SIO, XTAL(4'000'000)) diff --git a/src/mame/drivers/taito_b.cpp b/src/mame/drivers/taito_b.cpp index 54e5cfe0af4..d6a56729cac 100644 --- a/src/mame/drivers/taito_b.cpp +++ b/src/mame/drivers/taito_b.cpp @@ -239,7 +239,7 @@ WRITE16_MEMBER(taitob_state::gain_control_w) } } -INPUT_CHANGED_MEMBER(taitob_state::realpunc_sensor) +INPUT_CHANGED_MEMBER(taitob_c_state::realpunc_sensor) { m_maincpu->set_input_line(4, HOLD_LINE); } @@ -319,7 +319,7 @@ WRITE16_MEMBER(taitob_state::spacedxo_tc0220ioc_w) } } -WRITE16_MEMBER(taitob_state::realpunc_output_w) +WRITE16_MEMBER(taitob_c_state::realpunc_output_w) { /* 15 = Camera Enable? @@ -561,19 +561,19 @@ void taitob_state::sbm_map(address_map &map) map(0x900000, 0x97ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); } -void taitob_state::realpunc_map(address_map &map) +void taitob_c_state::realpunc_map(address_map &map) { map(0x000000, 0x0fffff).rom(); map(0x100000, 0x10ffff).ram(); map(0x110000, 0x12ffff).ram(); map(0x130000, 0x13ffff).ram(); // Check me map(0x180000, 0x18000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_wordswap_r), FUNC(tc0510nio_device::halfword_wordswap_w)); - map(0x184000, 0x184001).w(FUNC(taitob_state::realpunc_video_ctrl_w)); + map(0x184000, 0x184001).w(FUNC(taitob_c_state::realpunc_video_ctrl_w)); map(0x188000, 0x188001).nopr(); map(0x188000, 0x188000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w)); map(0x188002, 0x188003).nopr(); map(0x188002, 0x188002).w("tc0140syt", FUNC(tc0140syt_device::master_comm_w)); - map(0x18c000, 0x18c001).w(FUNC(taitob_state::realpunc_output_w)); + map(0x18c000, 0x18c001).w(FUNC(taitob_c_state::realpunc_output_w)); map(0x200000, 0x27ffff).m(m_tc0180vcu, FUNC(tc0180vcu_device::tc0180vcu_memrw)); map(0x280000, 0x281fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x300000, 0x300001).rw("hd63484", FUNC(hd63484_device::status16_r), FUNC(hd63484_device::address16_w)); @@ -583,7 +583,7 @@ void taitob_state::realpunc_map(address_map &map) map(0x320002, 0x320002).w("tc0140syt", FUNC(tc0140syt_device::master_comm_w)); } -void taitob_state::realpunc_hd63484_map(address_map &map) +void taitob_c_state::realpunc_hd63484_map(address_map &map) { map(0x00000, 0x7ffff).ram(); } @@ -1701,9 +1701,9 @@ static INPUT_PORTS_START( realpunc ) PORT_BIT( 0x02, IP_ACTIVE_LOW,IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW,IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW,IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW,IPT_BUTTON2 ) PORT_NAME("Pad Photosensor 1 (N)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_state,realpunc_sensor, 0) - PORT_BIT( 0x20, IP_ACTIVE_LOW,IPT_BUTTON3 ) PORT_NAME("Pad Photosensor 2 (U)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_state,realpunc_sensor, 0) - PORT_BIT( 0x40, IP_ACTIVE_LOW,IPT_BUTTON4 ) PORT_NAME("Pad Photosensor 3 (D)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_state,realpunc_sensor, 0) + PORT_BIT( 0x10, IP_ACTIVE_LOW,IPT_BUTTON2 ) PORT_NAME("Pad Photosensor 1 (N)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_c_state,realpunc_sensor, 0) + PORT_BIT( 0x20, IP_ACTIVE_LOW,IPT_BUTTON3 ) PORT_NAME("Pad Photosensor 2 (U)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_c_state,realpunc_sensor, 0) + PORT_BIT( 0x40, IP_ACTIVE_LOW,IPT_BUTTON4 ) PORT_NAME("Pad Photosensor 3 (D)") PORT_CHANGED_MEMBER(DEVICE_SELF, taitob_c_state,realpunc_sensor, 0) PORT_BIT( 0x80, IP_ACTIVE_LOW,IPT_UNKNOWN ) INPUT_PORTS_END @@ -1757,13 +1757,13 @@ MACHINE_CONFIG_START(taitob_state::rastsag2) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1815,13 +1815,13 @@ MACHINE_CONFIG_START(taitob_state::masterw) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + tc0040ioc_device &tc0040ioc(TC0040IOC(config, "tc0040ioc", 0)); + tc0040ioc.read_0_callback().set_ioport("DSWA"); + tc0040ioc.read_1_callback().set_ioport("DSWB"); + tc0040ioc.read_2_callback().set_ioport("IN0"); + tc0040ioc.read_3_callback().set_ioport("IN1"); + tc0040ioc.write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + tc0040ioc.read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1850,13 +1850,13 @@ MACHINE_CONFIG_START(taitob_state::masterw) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2203, 24_MHz_XTAL / 8) /* 3 MHz */ - MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) - MCFG_SOUND_ROUTE(0, "mono", 0.25) - MCFG_SOUND_ROUTE(1, "mono", 0.25) - MCFG_SOUND_ROUTE(2, "mono", 0.25) - MCFG_SOUND_ROUTE(3, "mono", 0.80) + ym2203_device &ymsnd(YM2203(config, m_ym, 24_MHz_XTAL / 8)); /* 3 MHz */ + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.port_a_write_callback().set_membank(m_audiobank).mask(0x03); + ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(1, "mono", 0.25); + ymsnd.add_route(2, "mono", 0.25); + ymsnd.add_route(3, "mono", 0.80); MCFG_DEVICE_ADD("ciu", PC060HA, 0) MCFG_PC060HA_MASTER_CPU("maincpu") @@ -1894,13 +1894,13 @@ MACHINE_CONFIG_START(taitob_state::ashura) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1952,13 +1952,13 @@ MACHINE_CONFIG_START(taitob_state::crimec) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2011,13 +2011,13 @@ MACHINE_CONFIG_START(taitob_state::hitice) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2047,13 +2047,13 @@ MACHINE_CONFIG_START(taitob_state::hitice) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2203, 24_MHz_XTAL / 8) /* 3 MHz */ - MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) - MCFG_SOUND_ROUTE(0, "mono", 0.25) - MCFG_SOUND_ROUTE(1, "mono", 0.25) - MCFG_SOUND_ROUTE(2, "mono", 0.25) - MCFG_SOUND_ROUTE(3, "mono", 0.80) + ym2203_device &ymsnd(YM2203(config, m_ym, 24_MHz_XTAL / 8)); /* 3 MHz */ + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.port_a_write_callback().set_membank(m_audiobank).mask(0x03); + ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(1, "mono", 0.25); + ymsnd.add_route(2, "mono", 0.25); + ymsnd.add_route(3, "mono", 0.80); MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -2075,13 +2075,13 @@ MACHINE_CONFIG_START(taitob_state::rambo3p) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2134,13 +2134,13 @@ MACHINE_CONFIG_START(taitob_state::rambo3) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2195,13 +2195,13 @@ MACHINE_CONFIG_START(taitob_state::pbobble) MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) - MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0) - MCFG_TC0640FIO_READ_0_CB(IOPORT("SERVICE")) - MCFG_TC0640FIO_READ_1_CB(IOPORT("COIN")) - MCFG_TC0640FIO_READ_2_CB(IOPORT("START")) - MCFG_TC0640FIO_READ_3_CB(IOPORT("P1_P2_A")) - MCFG_TC0640FIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0640FIO_READ_7_CB(IOPORT("P1_P2_B")) + TC0640FIO(config, m_tc0640fio, 0); + m_tc0640fio->read_0_callback().set_ioport("SERVICE"); + m_tc0640fio->read_1_callback().set_ioport("COIN"); + m_tc0640fio->read_2_callback().set_ioport("START"); + m_tc0640fio->read_3_callback().set_ioport("P1_P2_A"); + m_tc0640fio->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0640fio->read_7_callback().set_ioport("P1_P2_B"); MCFG_DEVICE_ADD("mb87078", MB87078, 0) MCFG_MB87078_GAIN_CHANGED_CB(WRITE8(*this, taitob_state, mb87078_gain_changed)) @@ -2259,13 +2259,13 @@ MACHINE_CONFIG_START(taitob_state::spacedx) MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) - MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0) - MCFG_TC0640FIO_READ_0_CB(IOPORT("SERVICE")) - MCFG_TC0640FIO_READ_1_CB(IOPORT("COIN")) - MCFG_TC0640FIO_READ_2_CB(IOPORT("START")) - MCFG_TC0640FIO_READ_3_CB(IOPORT("P1_P2_A")) - MCFG_TC0640FIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0640FIO_READ_7_CB(IOPORT("P1_P2_B")) + TC0640FIO(config, m_tc0640fio, 0); + m_tc0640fio->read_0_callback().set_ioport("SERVICE"); + m_tc0640fio->read_1_callback().set_ioport("COIN"); + m_tc0640fio->read_2_callback().set_ioport("START"); + m_tc0640fio->read_3_callback().set_ioport("P1_P2_A"); + m_tc0640fio->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0640fio->read_7_callback().set_ioport("P1_P2_B"); MCFG_DEVICE_ADD("mb87078", MB87078, 0) MCFG_MB87078_GAIN_CHANGED_CB(WRITE8(*this, taitob_state, mb87078_gain_changed)) @@ -2320,13 +2320,13 @@ MACHINE_CONFIG_START(taitob_state::spacedxo) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2381,13 +2381,13 @@ MACHINE_CONFIG_START(taitob_state::qzshowby) MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) - MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0) - MCFG_TC0640FIO_READ_0_CB(IOPORT("SERVICE")) - MCFG_TC0640FIO_READ_1_CB(IOPORT("COIN")) - MCFG_TC0640FIO_READ_2_CB(IOPORT("START")) - MCFG_TC0640FIO_READ_3_CB(IOPORT("P1_P2_A")) - MCFG_TC0640FIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0640FIO_READ_7_CB(IOPORT("P1_P2_B")) + TC0640FIO(config, m_tc0640fio, 0); + m_tc0640fio->read_0_callback().set_ioport("SERVICE"); + m_tc0640fio->read_1_callback().set_ioport("COIN"); + m_tc0640fio->read_2_callback().set_ioport("START"); + m_tc0640fio->read_3_callback().set_ioport("P1_P2_A"); + m_tc0640fio->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0640fio->read_7_callback().set_ioport("P1_P2_B"); MCFG_DEVICE_ADD("mb87078", MB87078, 0) MCFG_MB87078_GAIN_CHANGED_CB(WRITE8(*this, taitob_state, mb87078_gain_changed)) @@ -2442,13 +2442,13 @@ MACHINE_CONFIG_START(taitob_state::viofight) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2477,13 +2477,13 @@ MACHINE_CONFIG_START(taitob_state::viofight) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2203, 24_MHz_XTAL / 8) /* 3 MHz */ - MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_AY8910_PORT_A_WRITE_CB(MEMBANK("audiobank")) MCFG_DEVCB_MASK(0x03) - MCFG_SOUND_ROUTE(0, "mono", 0.25) - MCFG_SOUND_ROUTE(1, "mono", 0.25) - MCFG_SOUND_ROUTE(2, "mono", 0.25) - MCFG_SOUND_ROUTE(3, "mono", 0.80) + ym2203_device &ymsnd(YM2203(config, m_ym, 24_MHz_XTAL / 8)); /* 3 MHz */ + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.port_a_write_callback().set_membank(m_audiobank).mask(0x03); + ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(1, "mono", 0.25); + ymsnd.add_route(2, "mono", 0.25); + ymsnd.add_route(3, "mono", 0.80); MCFG_DEVICE_ADD("oki", OKIM6295, 4.224_MHz_XTAL / 4, okim6295_device::PIN7_HIGH) // 1.056MHz clock frequency, but pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -2505,13 +2505,13 @@ MACHINE_CONFIG_START(taitob_state::silentd) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2563,13 +2563,13 @@ MACHINE_CONFIG_START(taitob_state::selfeena) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2630,13 +2630,13 @@ MACHINE_CONFIG_START(taitob_state::ryujin) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2695,13 +2695,13 @@ MACHINE_CONFIG_START(taitob_state::sbm) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("JOY")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("START")) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("PHOTOSENSOR")) + TC0510NIO(config, m_tc0510nio, 0); + m_tc0510nio->read_0_callback().set_ioport("DSWA"); + m_tc0510nio->read_1_callback().set_ioport("DSWB"); + m_tc0510nio->read_2_callback().set_ioport("JOY"); + m_tc0510nio->read_3_callback().set_ioport("START"); + m_tc0510nio->write_4_callback().set(FUNC(taitob_state::player_12_coin_ctrl_w)); + m_tc0510nio->read_7_callback().set_ioport("PHOTOSENSOR"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2752,13 +2752,13 @@ MACHINE_CONFIG_START(taitob_c_state::realpunc) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("IN1")) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitob_state, player_12_coin_ctrl_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2")) + TC0510NIO(config, m_tc0510nio, 0); + m_tc0510nio->read_0_callback().set_ioport("DSWA"); + m_tc0510nio->read_1_callback().set_ioport("DSWB"); + m_tc0510nio->read_2_callback().set_ioport("IN0"); + m_tc0510nio->read_3_callback().set_ioport("IN1"); + m_tc0510nio->write_4_callback().set(FUNC(taitob_c_state::player_12_coin_ctrl_w)); + m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2766,13 +2766,13 @@ MACHINE_CONFIG_START(taitob_c_state::realpunc) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(taitob_state, screen_update_realpunc) + MCFG_SCREEN_UPDATE_DRIVER(taitob_c_state, screen_update_realpunc) MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("tc0180vcu", tc0180vcu_device, screen_vblank)) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) - MCFG_VIDEO_START_OVERRIDE(taitob_state,realpunc) + MCFG_VIDEO_START_OVERRIDE(taitob_c_state,realpunc) MCFG_HD63484_ADD("hd63484", 0, realpunc_hd63484_map) MCFG_HD63484_AUTO_CONFIGURE_SCREEN(false) diff --git a/src/mame/drivers/taito_f2.cpp b/src/mame/drivers/taito_f2.cpp index b6a4ad4b39f..12e1953e681 100644 --- a/src/mame/drivers/taito_f2.cpp +++ b/src/mame/drivers/taito_f2.cpp @@ -2899,13 +2899,13 @@ MACHINE_CONFIG_START(taitof2_state::taito_f2_tc0220ioc ) /* basic machine hardware */ MCFG_DEVICE_REMOVE("watchdog") - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitof2_state, coin_nibble_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitof2_state::coin_nibble_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); MACHINE_CONFIG_END MACHINE_CONFIG_START(taitof2_state::taito_f2_tc0510nio ) @@ -2913,13 +2913,13 @@ MACHINE_CONFIG_START(taitof2_state::taito_f2_tc0510nio ) /* basic machine hardware */ MCFG_DEVICE_REMOVE("watchdog") - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("IN1")) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitof2_state, coin_nibble_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2")) + TC0510NIO(config, m_tc0510nio, 0); + m_tc0510nio->read_0_callback().set_ioport("DSWA"); + m_tc0510nio->read_1_callback().set_ioport("DSWB"); + m_tc0510nio->read_2_callback().set_ioport("IN0"); + m_tc0510nio->read_3_callback().set_ioport("IN1"); + m_tc0510nio->write_4_callback().set(FUNC(taitof2_state::coin_nibble_w)); + m_tc0510nio->read_7_callback().set_ioport("IN2"); MCFG_PALETTE_MODIFY("palette") MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) MACHINE_CONFIG_END @@ -3746,13 +3746,13 @@ MACHINE_CONFIG_START(taitof2_state::cameltrya) MCFG_MACHINE_START_OVERRIDE(taitof2_state,common) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitof2_state, coin_nibble_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitof2_state::coin_nibble_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3815,13 +3815,13 @@ MACHINE_CONFIG_START(taitof2_state::driveout) MCFG_MACHINE_START_OVERRIDE(taitof2_state,common) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("IN1")) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitof2_state, coin_nibble_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2")) + TC0510NIO(config, m_tc0510nio, 0); + m_tc0510nio->read_0_callback().set_ioport("DSWA"); + m_tc0510nio->read_1_callback().set_ioport("DSWB"); + m_tc0510nio->read_2_callback().set_ioport("IN0"); + m_tc0510nio->read_3_callback().set_ioport("IN1"); + m_tc0510nio->write_4_callback().set(FUNC(taitof2_state::coin_nibble_w)); + m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/taito_h.cpp b/src/mame/drivers/taito_h.cpp index 9902e60a6a8..d85e7cd93fa 100644 --- a/src/mame/drivers/taito_h.cpp +++ b/src/mame/drivers/taito_h.cpp @@ -657,13 +657,13 @@ MACHINE_CONFIG_START(taitoh_state::syvalion) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, taitoh_state, coin_control_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + TC0040IOC(config, m_tc0040ioc, 0); + m_tc0040ioc->read_0_callback().set_ioport("DSWA"); + m_tc0040ioc->read_1_callback().set_ioport("DSWB"); + m_tc0040ioc->read_2_callback().set_ioport("IN0"); + m_tc0040ioc->read_3_callback().set_ioport("IN1"); + m_tc0040ioc->write_4_callback().set(FUNC(taitoh_state::coin_control_w)); + m_tc0040ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -713,13 +713,13 @@ MACHINE_CONFIG_START(taitoh_state::recordbr) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, taitoh_state, coin_control_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + TC0040IOC(config, m_tc0040ioc, 0); + m_tc0040ioc->read_0_callback().set_ioport("DSWA"); + m_tc0040ioc->read_1_callback().set_ioport("DSWB"); + m_tc0040ioc->read_2_callback().set_ioport("IN0"); + m_tc0040ioc->read_3_callback().set_ioport("IN1"); + m_tc0040ioc->write_4_callback().set(FUNC(taitoh_state::coin_control_w)); + m_tc0040ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -778,13 +778,13 @@ MACHINE_CONFIG_START(taitoh_state::dleague) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitoh_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + tc0220ioc_device &tc0220ioc(TC0220IOC(config, "tc0220ioc", 0)); + tc0220ioc.read_0_callback().set_ioport("DSWA"); + tc0220ioc.read_1_callback().set_ioport("DSWB"); + tc0220ioc.read_2_callback().set_ioport("IN0"); + tc0220ioc.read_3_callback().set_ioport("IN1"); + tc0220ioc.write_4_callback().set(FUNC(taitoh_state::coin_control_w)); + tc0220ioc.read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/taito_l.cpp b/src/mame/drivers/taito_l.cpp index e691f4259e6..d19be238324 100644 --- a/src/mame/drivers/taito_l.cpp +++ b/src/mame/drivers/taito_l.cpp @@ -1501,13 +1501,13 @@ MACHINE_CONFIG_START(fhawk_state::fhawk) MCFG_QUANTUM_PERFECT_CPU("maincpu") - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitol_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + tc0220ioc_device &tc0220ioc(TC0220IOC(config, "tc0220ioc", 0)); + tc0220ioc.read_0_callback().set_ioport("DSWA"); + tc0220ioc.read_1_callback().set_ioport("DSWB"); + tc0220ioc.read_2_callback().set_ioport("IN0"); + tc0220ioc.read_3_callback().set_ioport("IN1"); + tc0220ioc.write_4_callback().set(FUNC(taitol_state::coin_control_w)); + tc0220ioc.read_7_callback().set_ioport("IN2"); MCFG_MACHINE_START_OVERRIDE(taitol_state, taito_l) MCFG_MACHINE_RESET_OVERRIDE(taitol_state, taito_l) @@ -1574,15 +1574,15 @@ MACHINE_CONFIG_START(taitol_2cpu_state::raimais) MCFG_QUANTUM_PERFECT_CPU("maincpu") - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, taitol_state, coin_control_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + tc0040ioc_device &tc0040ioc(TC0040IOC(config, "tc0040ioc", 0)); + tc0040ioc.read_0_callback().set_ioport("DSWA"); + tc0040ioc.read_1_callback().set_ioport("DSWB"); + tc0040ioc.read_2_callback().set_ioport("IN0"); + tc0040ioc.read_3_callback().set_ioport("IN1"); + tc0040ioc.write_4_callback().set(FUNC(taitol_state::coin_control_w)); + tc0040ioc.read_7_callback().set_ioport("IN2"); - MCFG_DEVICE_ADD("dpram", MB8421, 0) + MB8421(config, "dpram", 0); MCFG_MACHINE_START_OVERRIDE(taitol_state, taito_l) MCFG_MACHINE_RESET_OVERRIDE(taitol_state, taito_l) @@ -1618,15 +1618,15 @@ MACHINE_CONFIG_START(taitol_2cpu_state::kurikint) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) - MCFG_DEVICE_ADD("dpram", MB8421, 0) + tc0040ioc_device &tc0040ioc(TC0040IOC(config, "tc0040ioc", 0)); + tc0040ioc.read_0_callback().set_ioport("DSWA"); + tc0040ioc.read_1_callback().set_ioport("DSWB"); + tc0040ioc.read_2_callback().set_ioport("IN0"); + tc0040ioc.read_3_callback().set_ioport("IN1"); + tc0040ioc.write_4_callback().set(FUNC(taitol_state::coin_control_w)); + tc0040ioc.read_7_callback().set_ioport("IN2"); - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, taitol_state, coin_control_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + MB8421(config, "dpram", 0); MCFG_MACHINE_START_OVERRIDE(taitol_state, taito_l) MCFG_MACHINE_RESET_OVERRIDE(taitol_state, taito_l) @@ -1765,13 +1765,13 @@ MACHINE_CONFIG_START(taitol_2cpu_state::evilston) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("IN1")) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitol_state, coin_control_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2")) + tc0510nio_device &tc0510nio(TC0510NIO(config, "tc0510nio", 0)); + tc0510nio.read_0_callback().set_ioport("DSWA"); + tc0510nio.read_1_callback().set_ioport("DSWB"); + tc0510nio.read_2_callback().set_ioport("IN0"); + tc0510nio.read_3_callback().set_ioport("IN1"); + tc0510nio.write_4_callback().set(FUNC(taitol_state::coin_control_w)); + tc0510nio.read_7_callback().set_ioport("IN2"); MCFG_DEVICE_ADD("dpram", MB8421, 0) MCFG_MB8421_INTL_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI)) diff --git a/src/mame/drivers/taito_z.cpp b/src/mame/drivers/taito_z.cpp index 4a8a38be9bc..65cd34cbbd4 100644 --- a/src/mame/drivers/taito_z.cpp +++ b/src/mame/drivers/taito_z.cpp @@ -3196,13 +3196,13 @@ MACHINE_CONFIG_START(taitoz_state::contcirc) MCFG_MACHINE_START_OVERRIDE(taitoz_state,taitoz) MCFG_MACHINE_RESET_OVERRIDE(taitoz_state,taitoz) - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + TC0040IOC(config, m_tc0040ioc, 0); + m_tc0040ioc->read_0_callback().set_ioport("DSWA"); + m_tc0040ioc->read_1_callback().set_ioport("DSWB"); + m_tc0040ioc->read_2_callback().set_ioport("IN0"); + m_tc0040ioc->read_3_callback().set_ioport("IN1"); + m_tc0040ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0040ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3270,13 +3270,13 @@ MACHINE_CONFIG_START(taitoz_state::chasehq) MCFG_MACHINE_START_OVERRIDE(taitoz_state,chasehq) MCFG_MACHINE_RESET_OVERRIDE(taitoz_state,taitoz) - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + TC0040IOC(config, m_tc0040ioc, 0); + m_tc0040ioc->read_0_callback().set_ioport("DSWA"); + m_tc0040ioc->read_1_callback().set_ioport("DSWB"); + m_tc0040ioc->read_2_callback().set_ioport("IN0"); + m_tc0040ioc->read_3_callback().set_ioport("IN1"); + m_tc0040ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0040ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3346,13 +3346,13 @@ MACHINE_CONFIG_START(taitoz_state::enforce) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + TC0040IOC(config, m_tc0040ioc, 0); + m_tc0040ioc->read_0_callback().set_ioport("DSWA"); + m_tc0040ioc->read_1_callback().set_ioport("DSWB"); + m_tc0040ioc->read_2_callback().set_ioport("IN0"); + m_tc0040ioc->read_3_callback().set_ioport("IN1"); + m_tc0040ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0040ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3426,13 +3426,13 @@ MACHINE_CONFIG_START(taitoz_state::bshark) MCFG_ADC0808_IN2_CB(IOPORT("STICKY")) MCFG_ADC0808_IN3_CB(IOPORT("Y_ADJUST")) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3507,13 +3507,13 @@ MACHINE_CONFIG_START(taitoz_state::sci) MCFG_QUANTUM_TIME(attotime::from_hz(3000)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3588,13 +3588,13 @@ MACHINE_CONFIG_START(taitoz_state::nightstr) MCFG_ADC0808_IN2_CB(IOPORT("X_ADJUST")) MCFG_ADC0808_IN3_CB(IOPORT("Y_ADJUST")) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3664,13 +3664,13 @@ MACHINE_CONFIG_START(taitoz_state::aquajack) MCFG_QUANTUM_TIME(attotime::from_hz(30000)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3745,14 +3745,14 @@ MACHINE_CONFIG_START(taitoz_state::spacegun) MCFG_ADC0808_IN2_CB(IOPORT("STICKX2")) MCFG_ADC0808_IN3_CB(IOPORT("STICKY2")) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0")) - MCFG_TC0510NIO_READ_3_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(7) - MCFG_TC0510NIO_WRITE_3_CB(WRITE8(*this, taitoz_state, spacegun_eeprom_w)) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2")) + TC0510NIO(config, m_tc0510nio, 0); + m_tc0510nio->read_0_callback().set_ioport("DSWA"); + m_tc0510nio->read_1_callback().set_ioport("DSWB"); + m_tc0510nio->read_2_callback().set_ioport("IN0"); + m_tc0510nio->read_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::do_read)).lshift(7); + m_tc0510nio->write_3_callback().set(FUNC(taitoz_state::spacegun_eeprom_w)); + m_tc0510nio->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3816,13 +3816,13 @@ MACHINE_CONFIG_START(taitoz_state::dblaxle) // make quantum time to be a multiple of the xtal (fixes road layer stuck on continue) MCFG_QUANTUM_TIME(attotime::from_hz(XTAL(32'000'000)/1024)) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("IN1")) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2")) + TC0510NIO(config, m_tc0510nio, 0); + m_tc0510nio->read_0_callback().set_ioport("DSWA"); + m_tc0510nio->read_1_callback().set_ioport("DSWB"); + m_tc0510nio->read_2_callback().set_ioport("IN0"); + m_tc0510nio->read_3_callback().set_ioport("IN1"); + m_tc0510nio->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -3890,13 +3890,13 @@ MACHINE_CONFIG_START(taitoz_state::racingb) MCFG_QUANTUM_TIME(attotime::from_hz(600)) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("IN1")) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, taitoz_state, coin_control_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2")) + TC0510NIO(config, m_tc0510nio, 0); + m_tc0510nio->read_0_callback().set_ioport("DSWA"); + m_tc0510nio->read_1_callback().set_ioport("DSWB"); + m_tc0510nio->read_2_callback().set_ioport("IN0"); + m_tc0510nio->read_3_callback().set_ioport("IN1"); + m_tc0510nio->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/taitoair.cpp b/src/mame/drivers/taitoair.cpp index 00de3b4e413..59c6cdc69f3 100644 --- a/src/mame/drivers/taitoair.cpp +++ b/src/mame/drivers/taitoair.cpp @@ -720,13 +720,13 @@ MACHINE_CONFIG_START(taitoair_state::airsys) MCFG_QUANTUM_PERFECT_CPU("maincpu") - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, taitoair_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(taitoair_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); MCFG_TAITOIO_YOKE_ADD("yokectrl") diff --git a/src/mame/drivers/taitojc.cpp b/src/mame/drivers/taitojc.cpp index 1a3efcd6376..73f29e6c121 100644 --- a/src/mame/drivers/taitojc.cpp +++ b/src/mame/drivers/taitojc.cpp @@ -1097,13 +1097,13 @@ MACHINE_CONFIG_START(taitojc_state::taitojc) MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) - MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0) - MCFG_TC0640FIO_READ_0_CB(IOPORT("SERVICE")) - MCFG_TC0640FIO_READ_1_CB(IOPORT("COINS")) - MCFG_TC0640FIO_READ_2_CB(IOPORT("START")) - MCFG_TC0640FIO_READ_3_CB(IOPORT("UNUSED")) - MCFG_TC0640FIO_WRITE_4_CB(WRITE8(*this, taitojc_state, coin_control_w)) - MCFG_TC0640FIO_READ_7_CB(IOPORT("BUTTONS")) + TC0640FIO(config, m_tc0640fio, 0); + m_tc0640fio->read_0_callback().set_ioport("SERVICE"); + m_tc0640fio->read_1_callback().set_ioport("COINS"); + m_tc0640fio->read_2_callback().set_ioport("START"); + m_tc0640fio->read_3_callback().set_ioport("UNUSED"); + m_tc0640fio->write_4_callback().set(FUNC(taitojc_state::coin_control_w)); + m_tc0640fio->read_7_callback().set_ioport("BUTTONS"); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty) diff --git a/src/mame/drivers/taotaido.cpp b/src/mame/drivers/taotaido.cpp index 769b5771489..e86e1b4215d 100644 --- a/src/mame/drivers/taotaido.cpp +++ b/src/mame/drivers/taotaido.cpp @@ -358,19 +358,19 @@ MACHINE_CONFIG_START(taotaido_state::taotaido) MCFG_DEVICE_IO_MAP(sound_port_map) /* IRQs are triggered by the YM2610 */ - MCFG_DEVICE_ADD("io1", VS9209, 0) - MCFG_VS9209_IN_PORTA_CB(IOPORT("P1")) - MCFG_VS9209_IN_PORTB_CB(IOPORT("P2")) - MCFG_VS9209_IN_PORTC_CB(IOPORT("SYSTEM")) - MCFG_VS9209_IN_PORTD_CB(IOPORT("DSW1")) - MCFG_VS9209_IN_PORTE_CB(IOPORT("DSW2")) - MCFG_VS9209_IN_PORTF_CB(IOPORT("DSW3")) - MCFG_VS9209_OUT_PORTG_CB(WRITE8(*this, taotaido_state, unknown_output_w)) - MCFG_VS9209_IN_PORTH_CB(IOPORT("JP")) + vs9209_device &io1(VS9209(config, "io1", 0)); + io1.porta_input_cb().set_ioport("P1"); + io1.portb_input_cb().set_ioport("P2"); + io1.portc_input_cb().set_ioport("SYSTEM"); + io1.portd_input_cb().set_ioport("DSW1"); + io1.porte_input_cb().set_ioport("DSW2"); + io1.portf_input_cb().set_ioport("DSW3"); + io1.portg_output_cb().set(FUNC(taotaido_state::unknown_output_w)); + io1.porth_input_cb().set_ioport("JP"); - MCFG_DEVICE_ADD("io2", VS9209, 0) - MCFG_VS9209_IN_PORTA_CB(IOPORT("P3")) // used only by taotaida - MCFG_VS9209_IN_PORTB_CB(IOPORT("P4")) // used only by taotaida + vs9209_device &io2(VS9209(config, "io2", 0)); + io2.porta_input_cb().set_ioport("P3"); // used only by taotaida + io2.portb_input_cb().set_ioport("P4"); // used only by taotaida MCFG_DEVICE_ADD("watchdog", MB3773, 0) diff --git a/src/mame/drivers/tatsumi.cpp b/src/mame/drivers/tatsumi.cpp index 7984dc7b909..873605d3b76 100644 --- a/src/mame/drivers/tatsumi.cpp +++ b/src/mame/drivers/tatsumi.cpp @@ -889,11 +889,11 @@ MACHINE_CONFIG_START(apache3_state::apache3) MCFG_DEVICE_ADD("adc", M58990, 1000000) // unknown clock MCFG_ADC0808_IN0_CB(IOPORT("STICK_X")) MCFG_ADC0808_IN1_CB(IOPORT("STICK_Y")) - MCFG_ADC0808_IN2_CB(GND) // VSP1 + MCFG_ADC0808_IN2_CB(CONSTANT(0)) // VSP1 MCFG_ADC0808_IN4_CB(READ8(*this, apache3_state, apache3_vr1_r)) MCFG_ADC0808_IN5_CB(IOPORT("THROTTLE")) - MCFG_ADC0808_IN6_CB(GND) // RPSNC - MCFG_ADC0808_IN7_CB(GND) // LPSNC + MCFG_ADC0808_IN6_CB(CONSTANT(0)) // RPSNC + MCFG_ADC0808_IN7_CB(CONSTANT(0)) // LPSNC MCFG_DEVICE_ADD("ppi", I8255, 0) diff --git a/src/mame/drivers/tavernie.cpp b/src/mame/drivers/tavernie.cpp index 0d88627cb32..0d87cd96cb0 100644 --- a/src/mame/drivers/tavernie.cpp +++ b/src/mame/drivers/tavernie.cpp @@ -331,9 +331,9 @@ MACHINE_CONFIG_START(tavernie_state::cpu09) MCFG_RS232_RXD_HANDLER(WRITELINE("acia", acia6850_device, write_rxd)) MCFG_RS232_CTS_HANDLER(WRITELINE("acia", acia6850_device, write_cts)) - MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) + clock_device &acia_clock(CLOCK(config, "acia_clock", 153600)); + acia_clock.signal_handler().set("acia", FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append("acia", FUNC(acia6850_device::write_rxc)); MACHINE_CONFIG_END MACHINE_CONFIG_START(tavernie_state::ivg09) diff --git a/src/mame/drivers/thedealr.cpp b/src/mame/drivers/thedealr.cpp index 07e54756b9a..0864c2bff4a 100644 --- a/src/mame/drivers/thedealr.cpp +++ b/src/mame/drivers/thedealr.cpp @@ -558,15 +558,15 @@ MACHINE_CONFIG_START(thedealr_state::thedealr) MCFG_SETA001_SPRITE_GFXDECODE("gfxdecode") // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 384-1, 0+30, 256-1) - MCFG_SCREEN_UPDATE_DRIVER(thedealr_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, thedealr_state, screen_vblank)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("subcpu", INPUT_LINE_NMI)) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(512, 256); + screen.set_visarea(0, 384-1, 0+30, 256-1); + screen.set_screen_update(FUNC(thedealr_state::screen_update)); + screen.screen_vblank().set(FUNC(thedealr_state::screen_vblank)); + screen.screen_vblank().append_inputline(m_subcpu, INPUT_LINE_NMI); + screen.set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_thedealr) MCFG_PALETTE_ADD("palette", 512) diff --git a/src/mame/drivers/tim100.cpp b/src/mame/drivers/tim100.cpp index f76dcea0f8e..24a0c65f504 100644 --- a/src/mame/drivers/tim100.cpp +++ b/src/mame/drivers/tim100.cpp @@ -187,33 +187,33 @@ MACHINE_CONFIG_START(tim100_state::tim100) MCFG_PALETTE_ADD("palette", 3) - MCFG_DEVICE_ADD("uart_u17", I8251, 0) - MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr)) - MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts)) + i8251_device &uart_u17(I8251(config, "uart_u17", 0)); + uart_u17.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); + uart_u17.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr)); + uart_u17.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "keyboard") - MCFG_RS232_RXD_HANDLER(WRITELINE("uart_u17", i8251_device, write_rxd)) - MCFG_RS232_DSR_HANDLER(WRITELINE("uart_u17", i8251_device, write_dsr)) - MCFG_RS232_CTS_HANDLER(WRITELINE("uart_u17", i8251_device, write_cts)) - MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("keyboard", tim100) + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "keyboard")); + rs232.rxd_handler().set("uart_u17", FUNC(i8251_device::write_rxd)); + rs232.dsr_handler().set("uart_u17", FUNC(i8251_device::write_dsr)); + rs232.cts_handler().set("uart_u17", FUNC(i8251_device::write_cts)); + rs232.set_option_device_input_defaults("keyboard", DEVICE_INPUT_DEFAULTS_NAME(tim100)); - MCFG_DEVICE_ADD("uart_u18", I8251, 0) - MCFG_I8251_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd)) - MCFG_I8251_DTR_HANDLER(WRITELINE("rs232a", rs232_port_device, write_dtr)) - MCFG_I8251_RTS_HANDLER(WRITELINE("rs232a", rs232_port_device, write_rts)) + i8251_device &uart_u18(I8251(config, "uart_u18", 0)); + uart_u18.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd)); + uart_u18.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr)); + uart_u18.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, "terminal") //"keyboard") - MCFG_RS232_RXD_HANDLER(WRITELINE("uart_u18", i8251_device, write_rxd)) - MCFG_RS232_DSR_HANDLER(WRITELINE("uart_u18", i8251_device, write_dsr)) - MCFG_RS232_CTS_HANDLER(WRITELINE("uart_u18", i8251_device, write_cts)) - MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", tim100) + rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal")); //"keyboard")); + rs232a.rxd_handler().set("uart_u18", FUNC(i8251_device::write_rxd)); + rs232a.dsr_handler().set("uart_u18", FUNC(i8251_device::write_dsr)); + rs232a.cts_handler().set("uart_u18", FUNC(i8251_device::write_cts)); + rs232a.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(tim100)); - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart_u17", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart_u17", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart_u18", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart_u18", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153'600)); + uart_clock.signal_handler().set("uart_u17", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart_u17", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart_u18", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart_u18", FUNC(i8251_device::write_rxc)); MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/drivers/timelimt.cpp b/src/mame/drivers/timelimt.cpp index ca64a957426..946a92b52c7 100644 --- a/src/mame/drivers/timelimt.cpp +++ b/src/mame/drivers/timelimt.cpp @@ -237,12 +237,12 @@ MACHINE_CONFIG_START(timelimt_state::timelimt) MCFG_QUANTUM_TIME(attotime::from_hz(3000)) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC15 - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, timelimt_state, nmi_enable_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, timelimt_state, coin_lockout_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // probably flip screen - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // probably flip screen + ls259_device &mainlatch(LS259(config, "mainlatch")); // IC15 + mainlatch.q_out_cb<0>().set(FUNC(timelimt_state::nmi_enable_w)); + mainlatch.q_out_cb<2>().set(FUNC(timelimt_state::coin_lockout_w)); + mainlatch.q_out_cb<3>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert(); + mainlatch.q_out_cb<6>().set_nop(); // probably flip screen + mainlatch.q_out_cb<7>().set_nop(); // probably flip screen MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/tmc1800.cpp b/src/mame/drivers/tmc1800.cpp index 1733a079ca4..4e3d499b8bf 100644 --- a/src/mame/drivers/tmc1800.cpp +++ b/src/mame/drivers/tmc1800.cpp @@ -719,7 +719,7 @@ MACHINE_CONFIG_START(tmc1800_state::tmc1800) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(1'750'000)) MCFG_DEVICE_PROGRAM_MAP(tmc1800_map) MCFG_DEVICE_IO_MAP(tmc1800_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, tmc1800_state, clear_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, tmc1800_state, ef2_r)) MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, tmc1800_state, ef3_r)) @@ -751,7 +751,7 @@ MACHINE_CONFIG_START(osc1000b_state::osc1000b) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(1'750'000)) MCFG_DEVICE_PROGRAM_MAP(osc1000b_map) MCFG_DEVICE_IO_MAP(osc1000b_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, osc1000b_state, clear_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, osc1000b_state, ef2_r)) MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, osc1000b_state, ef3_r)) @@ -782,7 +782,7 @@ MACHINE_CONFIG_START(tmc2000_state::tmc2000) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(1'750'000)) MCFG_DEVICE_PROGRAM_MAP(tmc2000_map) MCFG_DEVICE_IO_MAP(tmc2000_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, tmc2000_state, clear_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, tmc2000_state, ef2_r)) MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, tmc2000_state, ef3_r)) @@ -808,7 +808,7 @@ MACHINE_CONFIG_START(nano_state::nano) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(1'750'000)) MCFG_DEVICE_PROGRAM_MAP(nano_map) MCFG_DEVICE_IO_MAP(nano_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, nano_state, clear_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, nano_state, ef2_r)) MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, nano_state, ef3_r)) diff --git a/src/mame/drivers/tmc2000e.cpp b/src/mame/drivers/tmc2000e.cpp index dc8d15c18d2..df5a976c9b2 100644 --- a/src/mame/drivers/tmc2000e.cpp +++ b/src/mame/drivers/tmc2000e.cpp @@ -285,7 +285,7 @@ MACHINE_CONFIG_START(tmc2000e_state::tmc2000e) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(1'750'000)) MCFG_DEVICE_PROGRAM_MAP(tmc2000e_map) MCFG_DEVICE_IO_MAP(tmc2000e_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, tmc2000e_state, clear_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, tmc2000e_state, ef2_r)) MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, tmc2000e_state, ef3_r)) @@ -298,7 +298,7 @@ MACHINE_CONFIG_START(tmc2000e_state::tmc2000e) // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), GND, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, tmc2000e_state, rdata_r), READLINE(*this, tmc2000e_state, bdata_r), READLINE(*this, tmc2000e_state, gdata_r)) + MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, tmc2000e_state, rdata_r), READLINE(*this, tmc2000e_state, bdata_r), READLINE(*this, tmc2000e_state, gdata_r)) MCFG_CDP1864_CHROMINANCE(RES_K(2.2), RES_K(1), RES_K(5.1), RES_K(4.7)) // unverified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/tmc600.cpp b/src/mame/drivers/tmc600.cpp index 6021587fe6c..522a0c96fda 100644 --- a/src/mame/drivers/tmc600.cpp +++ b/src/mame/drivers/tmc600.cpp @@ -258,7 +258,7 @@ MACHINE_CONFIG_START(tmc600_state::tmc600) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(3'570'000)) MCFG_DEVICE_PROGRAM_MAP(tmc600_map) MCFG_DEVICE_IO_MAP(tmc600_io_map) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, tmc600_state, ef2_r)) MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, tmc600_state, ef3_r)) MCFG_COSMAC_Q_CALLBACK(WRITELINE(*this, tmc600_state, q_w)) @@ -269,20 +269,20 @@ MACHINE_CONFIG_START(tmc600_state::tmc600) // keyboard output latch MCFG_DEVICE_ADD(CDP1852_KB_TAG, CDP1852, XTAL(3'570'000)/8) // clock is CDP1802 TPB - MCFG_CDP1852_MODE_CALLBACK(VCC) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(1)) // address bus demux for expansion bus MCFG_DEVICE_ADD(CDP1852_BUS_TAG, CDP1852, 0) // clock is expansion bus TPA - MCFG_CDP1852_MODE_CALLBACK(GND) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(0)) // printer output latch MCFG_DEVICE_ADD(CDP1852_TMC700_TAG, CDP1852, XTAL(3'570'000)/8) // clock is CDP1802 TPB - MCFG_CDP1852_MODE_CALLBACK(VCC) + MCFG_CDP1852_MODE_CALLBACK(CONSTANT(1)) MCFG_CDP1852_DO_CALLBACK(WRITE8(*this, tmc600_state, printer_w)) // printer connector - MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer") - MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(CDP1802_TAG, cosmac_device, ef4_w)) MCFG_DEVCB_XOR(1) + CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->busy_handler().set(CDP1802_TAG, FUNC(cosmac_device::ef4_w)).exor(1); // cassette MCFG_CASSETTE_ADD("cassette") diff --git a/src/mame/drivers/toaplan2.cpp b/src/mame/drivers/toaplan2.cpp index 14f532740b8..f3bcc76e8ba 100644 --- a/src/mame/drivers/toaplan2.cpp +++ b/src/mame/drivers/toaplan2.cpp @@ -3200,85 +3200,84 @@ GFXDECODE_END MACHINE_CONFIG_START(toaplan2_state::tekipaki) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(10'000'000)) /* 10MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(tekipaki_68k_mem) + M68000(config, m_maincpu, 10_MHz_XTAL); // 10MHz Oscillator + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::tekipaki_68k_mem); - MCFG_DEVICE_ADD("audiocpu", Z180, XTAL(10'000'000)) /* HD647180 CPU actually */ - MCFG_DEVICE_PROGRAM_MAP(hd647180_mem_map) - MCFG_DEVICE_IO_MAP(hd647180_io_map) + Z180(config, m_audiocpu, 10_MHz_XTAL); // HD647180 CPU actually + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::hd647180_mem_map); + m_audiocpu->set_addrmap(AS_IO, &toaplan2_state::hd647180_io_map); MCFG_QUANTUM_TIME(attotime::from_hz(600)) MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_GENERIC_LATCH_8_ADD("soundlatch") + GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(27'000'000)/8) - MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + ym3812_device &ymsnd(YM3812(config, "ymsnd", 27_MHz_XTAL/8)); + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::ghox) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(10'000'000)) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(ghox_68k_mem) + M68000(config, m_maincpu, 10_MHz_XTAL); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::ghox_68k_mem); - MCFG_DEVICE_ADD("audiocpu", Z180, XTAL(10'000'000)) /* HD647180 CPU actually */ - MCFG_DEVICE_PROGRAM_MAP(ghox_hd647180_mem_map) + Z180(config, m_audiocpu, 10_MHz_XTAL); /* HD647180 CPU actually */ + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::ghox_hd647180_mem_map); MCFG_QUANTUM_TIME(attotime::from_hz(600)) MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,ghox) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 1.0); // verified on pcb MACHINE_CONFIG_END /* probably dogyuun, vfive and kbash use the same decryption table; @@ -3334,152 +3333,150 @@ a4849 cd MACHINE_CONFIG_START(toaplan2_state::dogyuun) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(25'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(dogyuun_68k_mem) + M68000(config, m_maincpu, 25_MHz_XTAL/2); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::dogyuun_68k_mem); - MCFG_DEVICE_ADD("audiocpu", V25, XTAL(25'000'000)/2) /* NEC V25 type Toaplan marked CPU ??? */ - MCFG_DEVICE_PROGRAM_MAP(v25_mem) - MCFG_V25_CONFIG(nitro_decryption_table) - MCFG_V25_PORT_PT_READ_CB(IOPORT("DSWB")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P0_READ_CB(IOPORT("DSWA")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P1_READ_CB(IOPORT("JMPR")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P2_WRITE_CB(NOOP) // bit 0 is FAULT according to kbash schematic + v25_device &audiocpu(V25(config, m_audiocpu, 25_MHz_XTAL/2)); /* NEC V25 type Toaplan marked CPU ??? */ + audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::v25_mem); + audiocpu.set_decryption_table(nitro_decryption_table); + audiocpu.pt_in_cb().set_ioport("DSWB").exor(0xff); + audiocpu.p0_in_cb().set_ioport("DSWA").exor(0xff); + audiocpu.p1_in_cb().set_ioport("JMPR").exor(0xff); + audiocpu.p2_out_cb().set_nop(); // bit 0 is FAULT according to kbash schematic /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_dogyuun) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_dogyuun)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); - MCFG_DEVICE_ADD("gp9001_1", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") + GP9001_VDP(config, m_vdp[1], 27_MHz_XTAL); + m_vdp[1]->set_palette(m_palette); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 0.5); // verified on pcb - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(25'000'000)/24, okim6295_device::PIN7_HIGH) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + OKIM6295(config, m_oki[0], 25_MHz_XTAL/24, okim6295_device::PIN7_HIGH); // verified on PCB + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::kbash) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)) /* 16MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(kbash_68k_mem) + M68000(config, m_maincpu, 16_MHz_XTAL); /* 16MHz Oscillator */ + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::kbash_68k_mem); /* ROM based v25 */ - MCFG_DEVICE_ADD("audiocpu", V25, XTAL(16'000'000)) /* NEC V25 type Toaplan marked CPU ??? */ - MCFG_DEVICE_PROGRAM_MAP(kbash_v25_mem) - MCFG_V25_CONFIG(nitro_decryption_table) - MCFG_V25_PORT_PT_READ_CB(IOPORT("DSWA")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P0_READ_CB(IOPORT("DSWB")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P1_READ_CB(IOPORT("JMPR")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P2_WRITE_CB(NOOP) // bit 0 is FAULT according to kbash schematic + v25_device &audiocpu(V25(config, m_audiocpu, 16_MHz_XTAL)); /* NEC V25 type Toaplan marked CPU ??? */ + audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::kbash_v25_mem); + audiocpu.set_decryption_table(nitro_decryption_table); + audiocpu.pt_in_cb().set_ioport("DSWA").exor(0xff); + audiocpu.p0_in_cb().set_ioport("DSWB").exor(0xff); + audiocpu.p1_in_cb().set_ioport("JMPR").exor(0xff); + audiocpu.p2_out_cb().set_nop(); // bit 0 is FAULT according to kbash schematic /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 0.5); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + OKIM6295(config, m_oki[0], 32_MHz_XTAL/32, okim6295_device::PIN7_HIGH); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::kbash2) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)) /* 16MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(kbash2_68k_mem) + M68000(config, m_maincpu, 16_MHz_XTAL); /* 16MHz Oscillator */ + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::kbash2_68k_mem); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, m_oki[0], 16_MHz_XTAL/16, okim6295_device::PIN7_HIGH); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, m_oki[1], 16_MHz_XTAL/16, okim6295_device::PIN7_HIGH); + m_oki[1]->add_route(ALL_OUTPUTS, "mono", 1.0); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::truxton2) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(truxton2_68k_mem) + M68000(config, m_maincpu, 16_MHz_XTAL); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::truxton2_68k_mem); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_truxton2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_truxton2) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_2)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_2); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,truxton2) @@ -3488,21 +3485,18 @@ MACHINE_CONFIG_START(toaplan2_state::truxton2) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(16'000'000)/4, okim6295_device::PIN7_LOW) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) + OKIM6295(config, m_oki[0], 16_MHz_XTAL/4, okim6295_device::PIN7_LOW); + m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.0); + m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.0); #else // ...but the hardware is mono SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 1.0); // verified on PCB - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(16'000'000)/4, okim6295_device::PIN7_LOW) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, m_oki[0], 16_MHz_XTAL/4, okim6295_device::PIN7_LOW); // verified on PCB + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0); #endif MACHINE_CONFIG_END @@ -3510,42 +3504,42 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::pipibibs) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(10'000'000)) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(pipibibs_68k_mem) + M68000(config, m_maincpu, 10_MHz_XTAL); // verified on PCB + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::pipibibs_68k_mem); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(27'000'000)/8) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(pipibibs_sound_z80_mem) + Z80(config, m_audiocpu, 27_MHz_XTAL/8); // verified on PCB + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::pipibibs_sound_z80_mem); MCFG_QUANTUM_TIME(attotime::from_hz(600)) MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(27'000'000)/8) /* verified on pcb */ - MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + ym3812_device &ymsnd(YM3812(config, "ymsnd", 27_MHz_XTAL/8)); // verified on PCB + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0); MACHINE_CONFIG_END @@ -3556,39 +3550,39 @@ MACHINE_CONFIG_START(toaplan2_state::pipibibsbl) MCFG_DEVICE_PROGRAM_MAP(pipibibi_bootleg_68k_mem) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(toaplan2_state, pipibibsbl_irq_ack) - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(27'000'000)/8) /* ??? 3.37MHz */ - MCFG_DEVICE_PROGRAM_MAP(pipibibs_sound_z80_mem) + Z80(config, m_audiocpu, 27_MHz_XTAL/8); // ??? 3.37MHz + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::pipibibs_sound_z80_mem); MCFG_QUANTUM_TIME(attotime::from_hz(600)) MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(ASSERTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4, ASSERT_LINE); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM3812, XTAL(27'000'000)/8) - MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + ym3812_device &ymsnd(YM3812(config, "ymsnd", 27_MHz_XTAL/8)); + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0); MACHINE_CONFIG_END /* x = modified to match batsugun 'unencrypted' code - '?' likewise, but not so sure about them */ @@ -3633,43 +3627,42 @@ static const uint8_t ts001turbo_decryption_table[256] = { MACHINE_CONFIG_START(toaplan2_state::fixeight) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(fixeight_68k_mem) + M68000(config, m_maincpu, 16_MHz_XTAL); // verified on PCB + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::fixeight_68k_mem); - MCFG_DEVICE_ADD("audiocpu", V25, XTAL(16'000'000)) /* NEC V25 type Toaplan marked CPU ??? */ - MCFG_DEVICE_PROGRAM_MAP(fixeight_v25_mem) - MCFG_V25_CONFIG(ts001turbo_decryption_table) - MCFG_V25_PORT_P0_READ_CB(IOPORT("EEPROM")) - MCFG_V25_PORT_P0_WRITE_CB(IOPORT("EEPROM")) + v25_device &audiocpu(V25(config, m_audiocpu, 16_MHz_XTAL)); // NEC V25 type Toaplan marked CPU ??? + audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::fixeight_v25_mem); + audiocpu.set_decryption_table(ts001turbo_decryption_table); + audiocpu.p0_in_cb().set_ioport("EEPROM"); + audiocpu.p0_out_cb().set_ioport("EEPROM"); - MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) + EEPROM_SERIAL_93C46_16BIT(config, m_eeprom); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) /* verified on pcb */ - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_truxton2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); // verified on PCB + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_truxton2) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,truxton2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 0.5); /* verified on pcb */ - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + OKIM6295(config, m_oki[0], 16_MHz_XTAL/16, okim6295_device::PIN7_HIGH); /* verified on pcb */ + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5); MACHINE_CONFIG_END @@ -3681,398 +3674,391 @@ MACHINE_CONFIG_START(toaplan2_state::fixeightbl) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(toaplan2_state, fixeightbl_irq_ack) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_bootleg) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_bootleg)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_textrom) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(ASSERTLINE("maincpu", M68K_IRQ_2)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_2, ASSERT_LINE); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,fixeightbl) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(14'000'000)/16, okim6295_device::PIN7_LOW) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MCFG_DEVICE_ADDRESS_MAP(0, fixeightbl_oki) + OKIM6295(config, m_oki[0], 14_MHz_XTAL/16, okim6295_device::PIN7_LOW); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0); + m_oki[0]->set_addrmap(0, &toaplan2_state::fixeightbl_oki); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::vfive) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(20'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(vfive_68k_mem) + M68000(config, m_maincpu, 20_MHz_XTAL/2); // verified on PCB + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::vfive_68k_mem); - MCFG_DEVICE_ADD("audiocpu", V25, XTAL(20'000'000)/2) /* Verified on pcb, NEC V25 type Toaplan mark scratched out */ - MCFG_DEVICE_PROGRAM_MAP(vfive_v25_mem) - MCFG_V25_CONFIG(nitro_decryption_table) - MCFG_V25_PORT_PT_READ_CB(IOPORT("DSWA")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P0_READ_CB(IOPORT("DSWB")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P1_READ_CB(IOPORT("JMPR")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P2_WRITE_CB(NOOP) // bit 0 is FAULT according to kbash schematic + v25_device &audiocpu(V25(config, m_audiocpu, 20_MHz_XTAL/2)); // Verified on PCB, NEC V25 type Toaplan mark scratched out + audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::vfive_v25_mem); + audiocpu.set_decryption_table(nitro_decryption_table); + audiocpu.pt_in_cb().set_ioport("DSWA").exor(0xff); + audiocpu.p0_in_cb().set_ioport("DSWB").exor(0xff); + audiocpu.p1_in_cb().set_ioport("JMPR").exor(0xff); + audiocpu.p2_out_cb().set_nop(); // bit 0 is FAULT according to kbash schematic /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) /* verified on pcb */ - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); // verified on PCB + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) /* verified on pcb */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 1.0); // verified on PCB MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::batsugun) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(32'000'000)/2) /* 16MHz , 32MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(batsugun_68k_mem) + M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::batsugun_68k_mem); - MCFG_DEVICE_ADD("audiocpu", V25, XTAL(32'000'000)/2) /* NEC V25 type Toaplan marked CPU ??? */ - MCFG_DEVICE_PROGRAM_MAP(v25_mem) - MCFG_V25_PORT_PT_READ_CB(IOPORT("DSWA")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P0_READ_CB(IOPORT("DSWB")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P1_READ_CB(IOPORT("JMPR")) MCFG_DEVCB_XOR(0xff) - MCFG_V25_PORT_P2_WRITE_CB(NOOP) // bit 0 is FAULT according to kbash schematic + v25_device &audiocpu(V25(config, m_audiocpu, 32_MHz_XTAL/2)); // NEC V25 type Toaplan marked CPU ??? + audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::v25_mem); + audiocpu.pt_in_cb().set_ioport("DSWA").exor(0xff); + audiocpu.p0_in_cb().set_ioport("DSWB").exor(0xff); + audiocpu.p1_in_cb().set_ioport("JMPR").exor(0xff); + audiocpu.p2_out_cb().set_nop(); // bit 0 is FAULT according to kbash schematic /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_batsugun) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_batsugun)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); - MCFG_DEVICE_ADD("gp9001_1", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") + GP9001_VDP(config, m_vdp[1], 27_MHz_XTAL); + m_vdp[1]->set_palette(m_palette); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 0.5); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/8, okim6295_device::PIN7_LOW) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + OKIM6295(config, m_oki[0], 32_MHz_XTAL/8, okim6295_device::PIN7_LOW); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::pwrkick) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)) - MCFG_DEVICE_PROGRAM_MAP(pwrkick_68k_mem) + M68000(config, m_maincpu, 16_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::pwrkick_68k_mem); - MCFG_UPD4992_ADD("rtc") + UPD4992(config, m_rtc); MCFG_NVRAM_ADD_0FILL("nvram") - MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(PWRKICK_HOPPER_PULSE), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH) + TICKET_DISPENSER(config, m_hopper, attotime::from_msec(PWRKICK_HOPPER_PULSE), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - /* empty YM2151 socket*/ - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(27'000'000)/8, okim6295_device::PIN7_HIGH) // not confirmed - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + // empty YM2151 socket + OKIM6295(config, m_oki[0], 27_MHz_XTAL/8, okim6295_device::PIN7_HIGH); // not confirmed + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::othldrby) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)) - MCFG_DEVICE_PROGRAM_MAP(othldrby_68k_mem) + M68000(config, m_maincpu, 16_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::othldrby_68k_mem); - MCFG_UPD4992_ADD("rtc") + UPD4992(config, m_rtc); MCFG_NVRAM_ADD_0FILL("nvram") /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(27'000'000)/8, okim6295_device::PIN7_HIGH) // not confirmed - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + OKIM6295(config, m_oki[0], 27_MHz_XTAL/8, okim6295_device::PIN7_HIGH); // not confirmed + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::enmadaio) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(20'000'000)/2) - MCFG_DEVICE_PROGRAM_MAP(enmadaio_68k_mem) + M68000(config, m_maincpu, 20_MHz_XTAL/2); + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::enmadaio_68k_mem); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 0.5); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(16'000'000)/4, okim6295_device::PIN7_LOW) // pin7 not confirmed - MCFG_DEVICE_ADDRESS_MAP(0, enmadaio_oki) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + OKIM6295(config, m_oki[0], 16_MHz_XTAL/4, okim6295_device::PIN7_LOW); // pin7 not confirmed + m_oki[0]->set_addrmap(0, &toaplan2_state::enmadaio_oki); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::snowbro2) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)) - MCFG_DEVICE_PROGRAM_MAP(snowbro2_68k_mem) + M68000(config, m_maincpu, 16_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::snowbro2_68k_mem); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_toaplan2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(27'000'000)/10, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, m_oki[0], 27_MHz_XTAL/10, okim6295_device::PIN7_HIGH); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::mahoudai) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(32'000'000)/2) /* 16MHz , 32MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(mahoudai_68k_mem) + M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::mahoudai_68k_mem); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'000'000)/8) /* 4MHz , 32MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(raizing_sound_z80_mem) + Z80(config, m_audiocpu, 32_MHz_XTAL/8); // 4MHz, 32MHz Oscillator + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::raizing_sound_z80_mem); MCFG_QUANTUM_TIME(attotime::from_hz(600)) MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_truxton2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_textrom) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, m_oki[0], 32_MHz_XTAL/32, okim6295_device::PIN7_HIGH); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::shippumd) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(32'000'000)/2) /* 16MHz , 32MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(shippumd_68k_mem) + M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::shippumd_68k_mem); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'000'000)/8) /* 4MHz , 32MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(raizing_sound_z80_mem) + Z80(config, m_audiocpu, 32_MHz_XTAL/8); // 4MHz, 32MHz Oscillator + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::raizing_sound_z80_mem); MCFG_QUANTUM_TIME(attotime::from_hz(600)) MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_truxton2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_textrom) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(27'000'000)/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, m_oki[0], 32_MHz_XTAL/32, okim6295_device::PIN7_HIGH); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::bgaregga) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(32'000'000)/2) /* 16MHz , 32MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(bgaregga_68k_mem) + M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::bgaregga_68k_mem); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'000'000)/8) /* 4MHz , 32MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(bgaregga_sound_z80_mem) + Z80(config, m_audiocpu, 32_MHz_XTAL/8); // 4MHz, 32MHz Oscillator + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::bgaregga_sound_z80_mem); MCFG_QUANTUM_TIME(attotime::from_hz(6000)) MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_truxton2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_textrom) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_GENERIC_LATCH_8_ADD("soundlatch") - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0)) - MCFG_GENERIC_LATCH_SEPARATE_ACKNOWLEDGE(true) + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); + m_soundlatch->set_separate_acknowledge(true); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(32'000'000)/8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2151(config, "ymsnd", 32_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/16, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, m_oki[0], 32_MHz_XTAL/16, okim6295_device::PIN7_HIGH); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("nmk112", NMK112, 0) - MCFG_NMK112_ROM0("oki1") + NMK112(config, m_nmk112, 0); + m_nmk112->set_rom0_tag("oki1"); MACHINE_CONFIG_END @@ -4080,49 +4066,48 @@ MACHINE_CONFIG_START(toaplan2_state::bgareggabl) bgaregga(config); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgareggabl) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_bootleg) + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_bootleg)); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::batrider) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(32'000'000)/2) /* 16MHz , 32MHz Oscillator (verified) */ - MCFG_DEVICE_PROGRAM_MAP(batrider_68k_mem) + M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator (verified) + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::batrider_68k_mem); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'000'000)/6) /* 5.333MHz , 32MHz Oscillator (verified) */ - MCFG_DEVICE_PROGRAM_MAP(batrider_sound_z80_mem) - MCFG_DEVICE_IO_MAP(batrider_sound_z80_port) + Z80(config, m_audiocpu, 32_MHz_XTAL/6); // 5.333MHz, 32MHz Oscillator (verified) + m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::batrider_sound_z80_mem); + m_audiocpu->set_addrmap(AS_IO, &toaplan2_state::batrider_sound_z80_port); MCFG_QUANTUM_TIME(attotime::from_hz(600)) MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2) - MCFG_DEVICE_ADD("dma_space", ADDRESS_MAP_BANK, 0) - MCFG_DEVICE_PROGRAM_MAP(batrider_dma_mem) - MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) - MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(16) - MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(16) - MCFG_ADDRESS_MAP_BANK_STRIDE(0x8000) + ADDRESS_MAP_BANK(config, m_dma_space, 0); + m_dma_space->set_addrmap(0, &toaplan2_state::batrider_dma_mem); + m_dma_space->set_endianness(ENDIANNESS_BIG); + m_dma_space->set_data_width(16); + m_dma_space->set_addr_width(16); + m_dma_space->set_stride(0x8000); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_truxton2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_batrider) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_2)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_2); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,batrider) @@ -4130,31 +4115,30 @@ MACHINE_CONFIG_START(toaplan2_state::batrider) SPEAKER(config, "mono").front_center(); // these two latches are always written together, via a single move.l instruction - MCFG_GENERIC_LATCH_8_ADD("soundlatch") - MCFG_GENERIC_LATCH_8_ADD("soundlatch2") - MCFG_GENERIC_LATCH_8_ADD("soundlatch3") - MCFG_GENERIC_LATCH_8_ADD("soundlatch4") + GENERIC_LATCH_8(config, "soundlatch"); + GENERIC_LATCH_8(config, "soundlatch2"); + GENERIC_LATCH_8(config, "soundlatch3"); + GENERIC_LATCH_8(config, "soundlatch4"); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(32'000'000)/8) /* 4MHz , 32MHz Oscillator (verified) */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + YM2151(config, "ymsnd", 32_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 1.0); // 4MHz, 32MHz Oscillator (verified) - MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/10, okim6295_device::PIN7_HIGH) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, m_oki[0], 32_MHz_XTAL/10, okim6295_device::PIN7_HIGH); + m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'000'000)/10, okim6295_device::PIN7_LOW) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + OKIM6295(config, m_oki[1], 32_MHz_XTAL/10, okim6295_device::PIN7_LOW); + m_oki[1]->add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_ADD("nmk112", NMK112, 0) - MCFG_NMK112_ROM0("oki1") - MCFG_NMK112_ROM1("oki2") + NMK112(config, m_nmk112, 0); + m_nmk112->set_rom0_tag("oki1"); + m_nmk112->set_rom1_tag("oki2"); MACHINE_CONFIG_END MACHINE_CONFIG_START(toaplan2_state::bbakraid) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, XTAL(32'000'000)/2) /* 16MHz , 32MHz Oscillator */ - MCFG_DEVICE_PROGRAM_MAP(bbakraid_68k_mem) + M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator + m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::bbakraid_68k_mem); MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'000'000)/6) /* 5.3333MHz , 32MHz Oscillator */ MCFG_DEVICE_PROGRAM_MAP(bbakraid_sound_z80_mem) @@ -4167,31 +4151,31 @@ MACHINE_CONFIG_START(toaplan2_state::bbakraid) MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C66_8BIT) - MCFG_DEVICE_ADD("dma_space", ADDRESS_MAP_BANK, 0) - MCFG_DEVICE_PROGRAM_MAP(batrider_dma_mem) - MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) - MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(16) - MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(16) - MCFG_ADDRESS_MAP_BANK_STRIDE(0x8000) + ADDRESS_MAP_BANK(config, m_dma_space, 0); + m_dma_space->set_addrmap(0, &toaplan2_state::batrider_dma_mem); + m_dma_space->set_endianness(ENDIANNESS_BIG); + m_dma_space->set_data_width(16); + m_dma_space->set_addr_width(16); + m_dma_space->set_stride(0x8000); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(27'000'000)/4,432,0,320,262,0,240) - //MCFG_SCREEN_REFRESH_RATE(60) - //MCFG_SCREEN_SIZE(432, 262) - //MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) - MCFG_SCREEN_UPDATE_DRIVER(toaplan2_state, screen_update_truxton2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, toaplan2_state, screen_vblank_toaplan2)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); + //m_screen->set_refresh_hz(60); + //m_screen->set_size(432, 262); + //m_screen->set_visarea(0, 319, 0, 239); + m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2)); + m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank_toaplan2)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_batrider) MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) - MCFG_DEVICE_ADD("gp9001_0", GP9001_VDP, XTAL(27'000'000)) - MCFG_GFX_PALETTE("palette") - MCFG_GP9001_VINT_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_1)) + GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); + m_vdp[0]->set_palette(m_palette); + m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_1); MCFG_VIDEO_START_OVERRIDE(toaplan2_state,batrider) @@ -4199,14 +4183,13 @@ MACHINE_CONFIG_START(toaplan2_state::bbakraid) SPEAKER(config, "mono").front_center(); // these two latches are always written together, via a single move.l instruction - MCFG_GENERIC_LATCH_8_ADD("soundlatch") - MCFG_GENERIC_LATCH_8_ADD("soundlatch2") - MCFG_GENERIC_LATCH_8_ADD("soundlatch3") - MCFG_GENERIC_LATCH_8_ADD("soundlatch4") + GENERIC_LATCH_8(config, "soundlatch"); + GENERIC_LATCH_8(config, "soundlatch2"); + GENERIC_LATCH_8(config, "soundlatch3"); + GENERIC_LATCH_8(config, "soundlatch4"); - MCFG_DEVICE_ADD("ymz", YMZ280B, XTAL(16'934'400)) + YMZ280B(config, "ymz", 16.9344_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 1.0); // IRQ not used ??? Connected to a test pin (TP082) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/tomcat.cpp b/src/mame/drivers/tomcat.cpp index 84e96470886..75ca544a45e 100644 --- a/src/mame/drivers/tomcat.cpp +++ b/src/mame/drivers/tomcat.cpp @@ -344,15 +344,15 @@ MACHINE_CONFIG_START(tomcat_state::tomcat) MCFG_QUANTUM_TIME(attotime::from_hz(4000)) - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(OUTPUT("led2")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, tomcat_state, mres_w)) - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, tomcat_state, sndres_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, tomcat_state, lnkmode_w)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, tomcat_state, err_w)) - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, tomcat_state, ack_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, tomcat_state, txbuff_w)) + LS259(config, m_mainlatch); + m_mainlatch->q_out_cb<0>().set_output("led1").invert(); + m_mainlatch->q_out_cb<1>().set_output("led2").invert(); + m_mainlatch->q_out_cb<2>().set(FUNC(tomcat_state::mres_w)); + m_mainlatch->q_out_cb<3>().set(FUNC(tomcat_state::sndres_w)); + m_mainlatch->q_out_cb<4>().set(FUNC(tomcat_state::lnkmode_w)); + m_mainlatch->q_out_cb<5>().set(FUNC(tomcat_state::err_w)); + m_mainlatch->q_out_cb<6>().set(FUNC(tomcat_state::ack_w)); + m_mainlatch->q_out_cb<7>().set(FUNC(tomcat_state::txbuff_w)); MCFG_NVRAM_ADD_0FILL("nvram") diff --git a/src/mame/drivers/topspeed.cpp b/src/mame/drivers/topspeed.cpp index cba573bed2b..b467e67453a 100644 --- a/src/mame/drivers/topspeed.cpp +++ b/src/mame/drivers/topspeed.cpp @@ -599,13 +599,13 @@ MACHINE_CONFIG_START(topspeed_state::topspeed) MCFG_PC060HA_MASTER_CPU("maincpu") MCFG_PC060HA_SLAVE_CPU("audiocpu") - MCFG_DEVICE_ADD("tc0040ioc", TC0040IOC, 0) - MCFG_TC0040IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0040IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0040IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0040IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0040IOC_WRITE_4_CB(WRITE8(*this, topspeed_state, coins_w)) - MCFG_TC0040IOC_READ_7_CB(IOPORT("IN2")) + TC0040IOC(config, m_tc0040ioc, 0); + m_tc0040ioc->read_0_callback().set_ioport("DSWA"); + m_tc0040ioc->read_1_callback().set_ioport("DSWB"); + m_tc0040ioc->read_2_callback().set_ioport("IN0"); + m_tc0040ioc->read_3_callback().set_ioport("IN1"); + m_tc0040ioc->write_4_callback().set(FUNC(topspeed_state::coins_w)); + m_tc0040ioc->read_7_callback().set_ioport("IN2"); // video hardware MCFG_SCREEN_ADD("screen", RASTER) @@ -624,11 +624,11 @@ MACHINE_CONFIG_START(topspeed_state::topspeed) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(16'000'000) / 4) - MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) - MCFG_YM2151_PORT_WRITE_HANDLER(MEMBANK("sndbank")) MCFG_DEVCB_MASK(0x03) - MCFG_SOUND_ROUTE(0, "filter1l", 1.0) - MCFG_SOUND_ROUTE(1, "filter1r", 1.0) + ym2151_device &ymsnd(YM2151(config, "ymsnd", 16_MHz_XTAL / 4)); + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.port_write_handler().set_membank("sndbank").mask(0x03); + ymsnd.add_route(0, "filter1l", 1.0); + ymsnd.add_route(1, "filter1r", 1.0); MCFG_DEVICE_ADD("msm1", MSM5205, XTAL(384'000)) MCFG_MSM5205_VCLK_CB(WRITELINE(*this, topspeed_state, msm5205_1_vck)) // VCK function diff --git a/src/mame/drivers/tranz330.cpp b/src/mame/drivers/tranz330.cpp index 147a626abf0..f81be4882b1 100644 --- a/src/mame/drivers/tranz330.cpp +++ b/src/mame/drivers/tranz330.cpp @@ -148,12 +148,12 @@ void tranz330_state::tranz330(machine_config &config) m_cpu->set_daisy_config(tranz330_daisy_chain); CLOCK(config, "ctc_clock", XTAL(7'159'090)/4) // ? - .set_signal_handler(DEVCB_WRITELINE(*this, tranz330_state, clock_w)); + .signal_handler().set(FUNC(tranz330_state::clock_w)); MSM6242(config, RTC_TAG, XTAL(32'768)); - INPUT_MERGER_ANY_HIGH(config, "irq", 0) - .set_output_handler(DEVCB_INPUTLINE(m_cpu, INPUT_LINE_IRQ0)); + INPUT_MERGER_ANY_HIGH(config, "irq") + .output_handler().set_inputline(m_cpu, INPUT_LINE_IRQ0); Z80PIO(config, m_pio, XTAL(7'159'090)/2); //* m_pio->set_out_int_callback(DEVCB_WRITELINE("irq", input_merger_device, in_w<0>)); //* @@ -173,9 +173,9 @@ void tranz330_state::tranz330(machine_config &config) m_ctc->set_intr_callback(DEVCB_WRITELINE("irq", input_merger_device, in_w<2>)); RS232_PORT(config, m_rs232, default_rs232_devices, nullptr); - m_rs232->set_rxd_handler(DEVCB_WRITELINE(m_dart, z80dart_device, rxb_w)); - m_rs232->set_dcd_handler(DEVCB_WRITELINE(m_dart, z80dart_device, dcdb_w)); - m_rs232->set_cts_handler(DEVCB_WRITELINE(m_dart, z80dart_device, ctsb_w)); + m_rs232->rxd_handler().set(m_dart, FUNC(z80dart_device::rxb_w)); + m_rs232->dcd_handler().set(m_dart, FUNC(z80dart_device::dcdb_w)); + m_rs232->cts_handler().set(m_dart, FUNC(z80dart_device::ctsb_w)); // video MIC10937(config, VFD_TAG).set_port_value(0); diff --git a/src/mame/drivers/triplhnt.cpp b/src/mame/drivers/triplhnt.cpp index a4b23ec9b03..d7ef4d21c8a 100644 --- a/src/mame/drivers/triplhnt.cpp +++ b/src/mame/drivers/triplhnt.cpp @@ -30,31 +30,6 @@ void triplhnt_state::set_collision(int code) } -WRITE_LINE_MEMBER(triplhnt_state::ram_2_w) -{ - if (state) - m_cmos[m_cmos_latch] = m_da_latch; -} - - -WRITE_LINE_MEMBER(triplhnt_state::sprite_zoom_w) -{ - m_sprite_zoom = state; -} - - -WRITE_LINE_MEMBER(triplhnt_state::sprite_bank_w) -{ - m_sprite_bank = state; -} - - -WRITE_LINE_MEMBER(triplhnt_state::lamp1_w) -{ - m_lamp = state ? 1 : 0; -} - - WRITE_LINE_MEMBER(triplhnt_state::coin_lockout_w) { machine().bookkeeping().coin_lockout_w(0, !state); @@ -305,17 +280,17 @@ MACHINE_CONFIG_START(triplhnt_state::triplhnt) MCFG_NVRAM_ADD_0FILL("nvram") // battery-backed 74C89 at J5 - MCFG_DEVICE_ADD("latch", F9334, 0) // J7 - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // unused - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, triplhnt_state, lamp1_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("discrete", discrete_device, write_line)) // Lamp is used to reset noise - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE("discrete", discrete_device, write_line)) // screech - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, triplhnt_state, coin_lockout_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, triplhnt_state, sprite_zoom_w)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, triplhnt_state, ram_2_w)) // CMOS write - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, triplhnt_state, tape_control_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, triplhnt_state, sprite_bank_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("discrete", discrete_device, write_line)) // bear + F9334(config, m_latch); // J7 + m_latch->q_out_cb<0>().set_nop(); // unused + m_latch->q_out_cb<1>().set([this] (int state) { m_lamp = state ? 1 : 0; }); + m_latch->q_out_cb<1>().append(m_discrete, FUNC(discrete_device::write_line)); // Lamp is used to reset noise + m_latch->q_out_cb<2>().set(m_discrete, FUNC(discrete_device::write_line)); // screech + m_latch->q_out_cb<3>().set(FUNC(triplhnt_state::coin_lockout_w)); + m_latch->q_out_cb<4>().set([this] (int state) { m_sprite_zoom = state; }); + m_latch->q_out_cb<5>().set([this] (int state) { if (state) m_cmos[m_cmos_latch] = m_da_latch; }); // CMOS write + m_latch->q_out_cb<6>().set(FUNC(triplhnt_state::tape_control_w)); + m_latch->q_out_cb<7>().set([this] (int state) { m_sprite_bank = state; }); + m_latch->q_out_cb<7>().append(m_discrete, FUNC(discrete_device::write_line)); // bear MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/trs80dt1.cpp b/src/mame/drivers/trs80dt1.cpp index 4f3f7dff75e..368ed294d21 100644 --- a/src/mame/drivers/trs80dt1.cpp +++ b/src/mame/drivers/trs80dt1.cpp @@ -327,20 +327,20 @@ MACHINE_CONFIG_START(trs80dt1_state::trs80dt1) MCFG_SCREEN_VISIBLE_AREA(0, 40*12-1, 0, 16*16-1) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_trs80dt1 ) - MCFG_DEVICE_ADD("crtc", I8275, 12480000 / 8) - MCFG_I8275_CHARACTER_WIDTH(8) - MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(trs80dt1_state, crtc_update_row) - MCFG_I8275_DRQ_CALLBACK(INPUTLINE("maincpu", MCS51_INT0_LINE)) // BRDY pin goes through inverter to /INT0, so we don't invert - MCFG_I8275_IRQ_CALLBACK(WRITELINE("7474", ttl7474_device, clear_w)) // INT pin - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("7474", ttl7474_device, d_w)) - MCFG_I8275_VRTC_CALLBACK(WRITELINE("7474", ttl7474_device, clock_w)) - MCFG_VIDEO_SET_SCREEN("screen") + I8275(config, m_crtc, 12480000 / 8); + m_crtc->set_character_width(8); + m_crtc->set_display_callback(FUNC(trs80dt1_state::crtc_update_row), this); + m_crtc->drq_wr_callback().set_inputline(m_maincpu, MCS51_INT0_LINE); // BRDY pin goes through inverter to /INT0, so we don't invert + m_crtc->irq_wr_callback().set(m_7474, FUNC(ttl7474_device::clear_w)); // INT pin + m_crtc->irq_wr_callback().append(m_7474, FUNC(ttl7474_device::d_w)); + m_crtc->vrtc_wr_callback().set(m_7474, FUNC(ttl7474_device::clock_w)); + m_crtc->set_screen("screen"); MCFG_PALETTE_ADD("palette", 3) MCFG_X2210_ADD("nvram") - MCFG_DEVICE_ADD("7474", TTL7474, 0) - MCFG_7474_COMP_OUTPUT_CB(INPUTLINE("maincpu", MCS51_INT1_LINE)) MCFG_DEVCB_INVERT // /Q connects directly to /INT1, so we need to invert? + TTL7474(config, m_7474, 0); + m_7474->comp_output_cb().set_inputline(m_maincpu, MCS51_INT1_LINE).invert(); // /Q connects directly to /INT1, so we need to invert? /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/ts803.cpp b/src/mame/drivers/ts803.cpp index 27c16cb67f8..79b169ef8c5 100644 --- a/src/mame/drivers/ts803.cpp +++ b/src/mame/drivers/ts803.cpp @@ -442,13 +442,13 @@ MACHINE_CONFIG_START(ts803_state::ts803) MCFG_MC6845_UPDATE_ROW_CB(ts803_state, crtc_update_row) MCFG_MC6845_ADDR_CHANGED_CB(ts803_state, crtc_update_addr) - MCFG_DEVICE_ADD("sti_clock", CLOCK, 16_MHz_XTAL / 13) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("sti", z80sti_device, tc_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sti", z80sti_device, rc_w)) + clock_device &sti_clock(CLOCK(config, "sti_clock", 16_MHz_XTAL / 13)); + sti_clock.signal_handler().set("sti", FUNC(z80sti_device::tc_w)); + sti_clock.signal_handler().append("sti", FUNC(z80sti_device::rc_w)); - MCFG_DEVICE_ADD("dart_clock", CLOCK, (16_MHz_XTAL / 13) / 8) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("dart", z80dart_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("dart", z80dart_device, rxca_w)) + clock_device &dart_clock(CLOCK(config, "dart_clock", 16_MHz_XTAL / 13 / 8)); + dart_clock.signal_handler().set("dart", FUNC(z80dart_device::txca_w)); + dart_clock.signal_handler().append("dart", FUNC(z80dart_device::rxca_w)); MCFG_DEVICE_ADD("sti", Z80STI, 16_MHz_XTAL / 4) MCFG_Z80STI_OUT_TBO_CB(WRITELINE("dart", z80dart_device, rxtxcb_w)) diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp index 9e635360c4e..96fedf0651e 100644 --- a/src/mame/drivers/tsamurai.cpp +++ b/src/mame/drivers/tsamurai.cpp @@ -843,15 +843,15 @@ MACHINE_CONFIG_START(tsamurai_state::m660) MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, tsamurai_state, textbank2_w)) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0, 255, 16, 255-16) - MCFG_SCREEN_UPDATE_DRIVER(tsamurai_state, screen_update) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, tsamurai_state, vblank_irq)) - MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("audio3", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(32*8, 32*8); + screen.set_visarea(0, 255, 16, 255-16); + screen.set_screen_update(FUNC(tsamurai_state::screen_update)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(tsamurai_state::vblank_irq)); + screen.screen_vblank().append_inputline(m_audio3, INPUT_LINE_NMI); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_tsamurai) MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", "proms", 256) diff --git a/src/mame/drivers/tv912.cpp b/src/mame/drivers/tv912.cpp index 79673153301..0e358b7e039 100644 --- a/src/mame/drivers/tv912.cpp +++ b/src/mame/drivers/tv912.cpp @@ -872,43 +872,44 @@ static INPUT_PORTS_START( tv912c ) PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED) INPUT_PORTS_END -MACHINE_CONFIG_START(tv912_state::tv912) - MCFG_DEVICE_ADD("maincpu", I8035, XTAL(23'814'000) / 4) // nominally +6MHz, actually 5.9535 MHz - MCFG_DEVICE_PROGRAM_MAP(prog_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(*this, tv912_state, p1_w)) - MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, tv912_state, p2_r)) - MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(*this, tv912_state, p2_w)) - MCFG_MCS48_PORT_T0_IN_CB(READLINE("rs232", rs232_port_device, cts_r)) - MCFG_MCS48_PORT_T1_IN_CB(READLINE("crtc", tms9927_device, bl_r)) MCFG_DEVCB_INVERT - MCFG_MCS48_PORT_PROG_OUT_CB(WRITELINE("uart", ay51013_device, write_xr)) MCFG_DEVCB_INVERT +void tv912_state::tv912(machine_config &config) +{ + i8035_device &maincpu(I8035(config, m_maincpu, 23.814_MHz_XTAL / 4)); // nominally +6MHz, actually 5.9535 MHz + maincpu.set_addrmap(AS_PROGRAM, &tv912_state::prog_map); + maincpu.set_addrmap(AS_IO, &tv912_state::io_map); + maincpu.p1_out_cb().set(FUNC(tv912_state::p1_w)); + maincpu.p2_in_cb().set(FUNC(tv912_state::p2_r)); + maincpu.p2_out_cb().set(FUNC(tv912_state::p2_w)); + maincpu.t0_in_cb().set(m_rs232, FUNC(rs232_port_device::cts_r)); + maincpu.t1_in_cb().set(m_crtc, FUNC(tms9927_device::bl_r)).invert(); + maincpu.prog_out_cb().set(m_uart, FUNC(ay51013_device::write_xr)).invert(); - MCFG_DEVICE_ADD("bankdev", ADDRESS_MAP_BANK, 0) - MCFG_DEVICE_PROGRAM_MAP(bank_map) - MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) - MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(12) - MCFG_ADDRESS_MAP_BANK_STRIDE(0x100) + ADDRESS_MAP_BANK(config, m_bankdev, 0); + m_bankdev->set_addrmap(0, &tv912_state::bank_map); + m_bankdev->set_data_width(8); + m_bankdev->set_addr_width(12); + m_bankdev->set_stride(0x100); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(23'814'000), 105 * CHAR_WIDTH, 0, 80 * CHAR_WIDTH, 270, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(tv912_state, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(23.814_MHz_XTAL, 105 * CHAR_WIDTH, 0, 80 * CHAR_WIDTH, 270, 0, 240); + screen.set_screen_update(FUNC(tv912_state::screen_update)); - MCFG_DEVICE_ADD("crtc", TMS9927, XTAL(23'814'000) / CHAR_WIDTH) - MCFG_TMS9927_CHAR_WIDTH(CHAR_WIDTH) - MCFG_TMS9927_VSYN_CALLBACK(INPUTLINE("maincpu", MCS48_INPUT_IRQ)) - MCFG_VIDEO_SET_SCREEN("screen") + TMS9927(config, m_crtc, 23.814_MHz_XTAL / CHAR_WIDTH); + m_crtc->set_char_width(CHAR_WIDTH); + m_crtc->vsyn_wr_callback().set_inputline(m_maincpu, MCS48_INPUT_IRQ); + m_crtc->set_screen("screen"); - MCFG_DEVICE_ADD("uart", AY51013, 0) - MCFG_AY51013_READ_SI_CB(READLINE("rs232", rs232_port_device, rxd_r)) - MCFG_AY51013_WRITE_SO_CB(WRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_AY51013_AUTO_RDAV(true) + AY51013(config, m_uart, 0); + m_uart->read_si_callback().set(m_rs232, FUNC(rs232_port_device::rxd_r)); + m_uart->write_so_callback().set(m_rs232, FUNC(rs232_port_device::write_txd)); + m_uart->set_auto_rdav(true); - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "loopback") + RS232_PORT(config, m_rs232, default_rs232_devices, "loopback"); SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beep", BEEP, XTAL(23'814'000) / 7 / 11 / 256) // nominally 1200 Hz - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) -MACHINE_CONFIG_END + BEEP(config, m_beep, 23.814_MHz_XTAL / 7 / 11 / 256); // nominally 1200 Hz + m_beep->add_route(ALL_OUTPUTS, "mono", 0.50); +} /************************************************************************************************************** diff --git a/src/mame/drivers/twincobr.cpp b/src/mame/drivers/twincobr.cpp index e9939ecc67a..d4cb0c1a534 100644 --- a/src/mame/drivers/twincobr.cpp +++ b/src/mame/drivers/twincobr.cpp @@ -694,13 +694,13 @@ MACHINE_CONFIG_START(twincobr_state::twincobr) MCFG_DEVICE_ADD("spriteram16", BUFFERED_SPRITERAM16) - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000)/4, 446, 0, 320, 286, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(twincobr_state, screen_update_toaplan0) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram16", buffered_spriteram16_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, twincobr_state, twincobr_vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(28_MHz_XTAL/4, 446, 0, 320, 286, 0, 240); + m_screen->set_screen_update(FUNC(twincobr_state::screen_update_toaplan0)); + m_screen->screen_vblank().set(m_spriteram16, FUNC(buffered_spriteram16_device::vblank_copy_rising)); + m_screen->screen_vblank().append(FUNC(twincobr_state::twincobr_vblank_irq)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_twincobr) MCFG_PALETTE_ADD("palette", 1792) diff --git a/src/mame/drivers/undrfire.cpp b/src/mame/drivers/undrfire.cpp index 20a78331f82..7003fbaf22f 100644 --- a/src/mame/drivers/undrfire.cpp +++ b/src/mame/drivers/undrfire.cpp @@ -573,17 +573,17 @@ MACHINE_CONFIG_START(undrfire_state::undrfire) MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("INPUTS0")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("INPUTS1")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("INPUTS2")) - MCFG_TC0510NIO_READ_3_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(7) - MCFG_DEVCB_CHAIN_INPUT(READLINE(*this, undrfire_state, frame_counter_r)) MCFG_DEVCB_BIT(0) - MCFG_TC0510NIO_WRITE_3_CB(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, undrfire_state, coin_word_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("SYSTEM")) + tc0510nio_device &tc0510nio(TC0510NIO(config, "tc0510nio", 0)); + tc0510nio.read_0_callback().set_ioport("INPUTS0"); + tc0510nio.read_1_callback().set_ioport("INPUTS1"); + tc0510nio.read_2_callback().set_ioport("INPUTS2"); + tc0510nio.read_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::do_read)).lshift(7); + tc0510nio.read_3_callback().append(FUNC(undrfire_state::frame_counter_r)).lshift(0); + tc0510nio.write_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5); + tc0510nio.write_3_callback().append(m_eeprom, FUNC(eeprom_serial_93cxx_device::di_write)).bit(6); + tc0510nio.write_3_callback().append(m_eeprom, FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4); + tc0510nio.write_4_callback().set(FUNC(undrfire_state::coin_word_w)); + tc0510nio.read_7_callback().set_ioport("SYSTEM"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -636,17 +636,17 @@ MACHINE_CONFIG_START(undrfire_state::cbombers) MCFG_ADC0808_EOC_FF_CB(INPUTLINE("maincpu", 5)) MCFG_ADC0808_IN0_CB(IOPORT("STEER")) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("INPUTS0")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("INPUTS1")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("INPUTS2")) - MCFG_TC0510NIO_READ_3_CB(READLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(7) - MCFG_DEVCB_CHAIN_INPUT(READLINE(*this, undrfire_state, frame_counter_r)) MCFG_DEVCB_BIT(0) - MCFG_TC0510NIO_WRITE_3_CB(WRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(5) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(6) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, undrfire_state, coin_word_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("SYSTEM")) + tc0510nio_device &tc0510nio(TC0510NIO(config, "tc0510nio", 0)); + tc0510nio.read_0_callback().set_ioport("INPUTS0"); + tc0510nio.read_1_callback().set_ioport("INPUTS1"); + tc0510nio.read_2_callback().set_ioport("INPUTS2"); + tc0510nio.read_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::do_read)).lshift(7); + tc0510nio.read_3_callback().append(FUNC(undrfire_state::frame_counter_r)).lshift(0); + tc0510nio.write_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5); + tc0510nio.write_3_callback().append(m_eeprom, FUNC(eeprom_serial_93cxx_device::di_write)).bit(6); + tc0510nio.write_3_callback().append(m_eeprom, FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4); + tc0510nio.write_4_callback().set(FUNC(undrfire_state::coin_word_w)); + tc0510nio.read_7_callback().set_ioport("SYSTEM"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/unior.cpp b/src/mame/drivers/unior.cpp index 9cec34e40bb..237e7be8a30 100644 --- a/src/mame/drivers/unior.cpp +++ b/src/mame/drivers/unior.cpp @@ -396,19 +396,18 @@ MACHINE_CONFIG_START(unior_state::unior) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.50); /* Devices */ - MCFG_DEVICE_ADD("uart", I8251, 0) + I8251(config, "uart", 0); - MCFG_DEVICE_ADD("pit", PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL(20'000'000) / 12) - MCFG_PIT8253_CLK1(XTAL(20'000'000) / 9) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) - MCFG_PIT8253_CLK2(XTAL(16'000'000) / 9 / 64) // unknown frequency - MCFG_PIT8253_OUT2_HANDLER(WRITELINE("speaker", speaker_sound_device, level_w)) + PIT8253(config, m_pit, 0); + m_pit->set_clk<0>(20_MHz_XTAL / 12); + m_pit->set_clk<1>(20_MHz_XTAL / 9); + m_pit->out_handler<1>().set("uart", FUNC(i8251_device::write_txc)); + m_pit->out_handler<1>().append("uart", FUNC(i8251_device::write_rxc)); + m_pit->set_clk<1>(16_MHz_XTAL / 9 / 64); // unknown frequency + m_pit->out_handler<2>().set("speaker", FUNC(speaker_sound_device::level_w)); MCFG_DEVICE_ADD("ppi0", I8255, 0) // ports a & c connect to an external slot diff --git a/src/mame/drivers/univac.cpp b/src/mame/drivers/univac.cpp index 9f175aadaca..e90ca7d3dbb 100644 --- a/src/mame/drivers/univac.cpp +++ b/src/mame/drivers/univac.cpp @@ -332,24 +332,24 @@ MACHINE_CONFIG_START(univac_state::uts20) MCFG_NVRAM_ADD_1FILL("nvram") - MCFG_DEVICE_ADD("ctc_clock", CLOCK, 2000000) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg2)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg3)) + clock_device &ctc_clock(CLOCK(config, "ctc_clock", 2000000)); + ctc_clock.signal_handler().set(m_ctc, FUNC(z80ctc_device::trg0)); + ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg1)); + ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg2)); + ctc_clock.signal_handler().append(m_ctc, FUNC(z80ctc_device::trg3)); - MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL(4'000'000)) - MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80CTC_ZC1_CB(WRITELINE("uart", z80sio_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", z80sio_device, rxca_w)) - MCFG_Z80CTC_ZC2_CB(WRITELINE("uart", z80sio_device, rxtxcb_w)) + Z80CTC(config, m_ctc, 4_MHz_XTAL); + m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_ctc->zc_callback<1>().set(m_uart, FUNC(z80sio_device::txca_w)); + m_ctc->zc_callback<1>().append(m_uart, FUNC(z80sio_device::rxca_w)); + m_ctc->zc_callback<2>().set(m_uart, FUNC(z80sio_device::rxtxcb_w)); - MCFG_DEVICE_ADD("uart", Z80SIO, XTAL(4'000'000)) - MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) - MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("uart", z80sio_device, rxa_w)) // FIXME: hacked in permanent loopback to pass test - MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("uart", z80sio_device, rxb_w)) // FIXME: hacked in permanent loopback to pass test - MCFG_Z80SIO_OUT_WRDYB_CB(WRITELINE("uart", z80sio_device, dcdb_w)) // FIXME: hacked in permanent loopback to pass test - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", z80sio_device, ctsb_w)) // FIXME: hacked in permanent loopback to pass test + Z80SIO(config, m_uart, 4_MHz_XTAL); + m_uart->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_uart->out_txda_callback().set(m_uart, FUNC(z80sio_device::rxa_w)); // FIXME: hacked in permanent loopback to pass test + m_uart->out_txdb_callback().set(m_uart, FUNC(z80sio_device::rxb_w)); // FIXME: hacked in permanent loopback to pass test + m_uart->out_wrdyb_callback().set(m_uart, FUNC(z80sio_device::dcdb_w)); // FIXME: hacked in permanent loopback to pass test + m_uart->out_wrdyb_callback().append(m_uart, FUNC(z80sio_device::ctsb_w)); // FIXME: hacked in permanent loopback to pass test /* Sound */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/v100.cpp b/src/mame/drivers/v100.cpp index 5eaa2cc6080..bf4d47a2bec 100644 --- a/src/mame/drivers/v100.cpp +++ b/src/mame/drivers/v100.cpp @@ -368,24 +368,24 @@ MACHINE_CONFIG_START(v100_state::v100) MCFG_SCREEN_RAW_PARAMS(XTAL(47'736'000), 170 * CHAR_WIDTH, 0, 132 * CHAR_WIDTH, 312, 0, 240) MCFG_SCREEN_UPDATE_DRIVER(v100_state, screen_update) - MCFG_DEVICE_ADD("vtac", CRT5037, XTAL(47'736'000) / CHAR_WIDTH) - MCFG_TMS9927_CHAR_WIDTH(CHAR_WIDTH) - MCFG_VIDEO_SET_SCREEN("screen") - MCFG_TMS9927_HSYN_CALLBACK(WRITELINE(*this, v100_state, picu_r_w<7>)) MCFG_DEVCB_INVERT - MCFG_TMS9927_VSYN_CALLBACK(WRITELINE(*this, v100_state, picu_r_w<6>)) MCFG_DEVCB_INVERT + CRT5037(config, m_vtac, XTAL(47'736'000) / CHAR_WIDTH); + m_vtac->set_char_width(CHAR_WIDTH); + m_vtac->set_screen("screen"); + m_vtac->hsyn_wr_callback().set(FUNC(v100_state::picu_r_w<7>)).invert(); + m_vtac->vsyn_wr_callback().set(FUNC(v100_state::picu_r_w<6>)).invert(); - MCFG_DEVICE_ADD("picu", I8214, XTAL(47'736'000) / 12) - MCFG_I8214_INT_CALLBACK(ASSERTLINE("maincpu", 0)) + I8214(config, m_picu, XTAL(47'736'000) / 12); + m_picu->int_wr_callback().set_inputline(m_maincpu, 0, ASSERT_LINE); - MCFG_DEVICE_ADD("ppi", I8255, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, v100_state, ppi_porta_w)) - MCFG_I8255_OUT_PORTB_CB(WRITELINE("earom", er1400_device, c3_w)) MCFG_DEVCB_BIT(6) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("earom", er1400_device, c2_w)) MCFG_DEVCB_BIT(5) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("earom", er1400_device, c1_w)) MCFG_DEVCB_BIT(4) MCFG_DEVCB_INVERT - MCFG_I8255_OUT_PORTC_CB(WRITELINE("earom", er1400_device, data_w)) MCFG_DEVCB_BIT(6) MCFG_DEVCB_INVERT - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("earom", er1400_device, clock_w)) MCFG_DEVCB_BIT(0) MCFG_DEVCB_INVERT + i8255_device &ppi(I8255(config, "ppi", 0)); + ppi.out_pa_callback().set(FUNC(v100_state::ppi_porta_w)); + ppi.out_pb_callback().set(m_earom, FUNC(er1400_device::c3_w)).bit(6).invert(); + ppi.out_pb_callback().append(m_earom, FUNC(er1400_device::c2_w)).bit(5).invert(); + ppi.out_pb_callback().append(m_earom, FUNC(er1400_device::c1_w)).bit(4).invert(); + ppi.out_pc_callback().set(m_earom, FUNC(er1400_device::data_w)).bit(6).invert(); + ppi.out_pc_callback().append(m_earom, FUNC(er1400_device::clock_w)).bit(0).invert(); - MCFG_DEVICE_ADD("earom", ER1400, 0) + ER1400(config, m_earom, 0); MACHINE_CONFIG_END diff --git a/src/mame/drivers/v1050.cpp b/src/mame/drivers/v1050.cpp index ac4654ec574..473fc8ff429 100644 --- a/src/mame/drivers/v1050.cpp +++ b/src/mame/drivers/v1050.cpp @@ -1109,13 +1109,13 @@ MACHINE_CONFIG_START(v1050_state::v1050) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":3", v1050_floppies, nullptr, floppy_image_device::default_floppy_formats) // SASI bus - MCFG_DEVICE_ADD(SASIBUS_TAG, SCSI_PORT, 0) - MCFG_SCSI_DATA_INPUT_BUFFER("scsi_data_in") - MCFG_SCSI_REQ_HANDLER(WRITELINE("scsi_ctrl_in", input_buffer_device, write_bit0)) MCFG_DEVCB_XOR(1) - MCFG_SCSI_BSY_HANDLER(WRITELINE("scsi_ctrl_in", input_buffer_device, write_bit1)) - MCFG_SCSI_MSG_HANDLER(WRITELINE("scsi_ctrl_in", input_buffer_device, write_bit2)) - MCFG_SCSI_CD_HANDLER(WRITELINE("scsi_ctrl_in", input_buffer_device, write_bit3)) - MCFG_SCSI_IO_HANDLER(WRITELINE(*this, v1050_state, write_sasi_io)) MCFG_DEVCB_XOR(1) // bit4 + SCSI_PORT(config, m_sasibus, 0); + m_sasibus->set_data_input_buffer("scsi_data_in"); + m_sasibus->req_handler().set("scsi_ctrl_in", FUNC(input_buffer_device::write_bit0)).exor(1); + m_sasibus->bsy_handler().set("scsi_ctrl_in", FUNC(input_buffer_device::write_bit1)); + m_sasibus->msg_handler().set("scsi_ctrl_in", FUNC(input_buffer_device::write_bit2)); + m_sasibus->cd_handler().set("scsi_ctrl_in", FUNC(input_buffer_device::write_bit3)); + m_sasibus->io_handler().set(FUNC(v1050_state::write_sasi_io)).exor(1); // bit4 MCFG_SCSIDEV_ADD(SASIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", S1410, SCSI_ID_0) MCFG_SCSI_OUTPUT_LATCH_ADD("scsi_data_out", SASIBUS_TAG) diff --git a/src/mame/drivers/v550.cpp b/src/mame/drivers/v550.cpp index 40a85747775..8c8fa969dd5 100644 --- a/src/mame/drivers/v550.cpp +++ b/src/mame/drivers/v550.cpp @@ -117,11 +117,11 @@ MACHINE_CONFIG_START(v550_state::v550) MCFG_COM8116_FT_HANDLER(WRITELINE("mpsc", upd7201_new_device, txca_w)) MCFG_COM8116_FR_HANDLER(WRITELINE("mpsc", upd7201_new_device, rxca_w)) - MCFG_DEVICE_ADD("brg2", COM8116, 5068800) // actually SMC COM8116T-020 - MCFG_COM8116_FT_HANDLER(WRITELINE("mpsc", upd7201_new_device, txcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mpsc", upd7201_new_device, rxcb_w)) - MCFG_COM8116_FR_HANDLER(WRITELINE("usart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("usart", i8251_device, write_rxc)) + com8116_device &brg2(COM8116(config, "brg2", 5068800)); // actually SMC COM8116T-020 + brg2.ft_handler().set("mpsc", FUNC(upd7201_new_device::txcb_w)); + brg2.ft_handler().append("mpsc", FUNC(upd7201_new_device::rxcb_w)); + brg2.fr_handler().set("usart", FUNC(i8251_device::write_txc)); + brg2.fr_handler().append("usart", FUNC(i8251_device::write_rxc)); MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(16'248'600, 918, 0, 720, 295, 0, 272) diff --git a/src/mame/drivers/v6809.cpp b/src/mame/drivers/v6809.cpp index 1b90d14fa59..0601684f2e1 100644 --- a/src/mame/drivers/v6809.cpp +++ b/src/mame/drivers/v6809.cpp @@ -331,15 +331,15 @@ MACHINE_CONFIG_START(v6809_state::v6809) MCFG_PTM6840_O2_CB(WRITELINE(*this, v6809_state, speaker_en_w)) MCFG_PTM6840_IRQ_CB(INPUTLINE("maincpu", M6809_IRQ_LINE)) - MCFG_DEVICE_ADD("acia0", ACIA6850, 0) + ACIA6850(config, "acia0", 0); - MCFG_DEVICE_ADD("acia1", ACIA6850, 0) + ACIA6850(config, "acia1", 0); - MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia0", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia0", acia6850_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia1", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia1", acia6850_device, write_rxc)) + clock_device &acia_clock(CLOCK(config, "acia_clock", 153600)); + acia_clock.signal_handler().set("acia0", FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append("acia0", FUNC(acia6850_device::write_rxc)); + acia_clock.signal_handler().append("acia1", FUNC(acia6850_device::write_txc)); + acia_clock.signal_handler().append("acia1", FUNC(acia6850_device::write_rxc)); MCFG_DEVICE_ADD("rtc", MM58274C, 0) // this is all guess diff --git a/src/mame/drivers/vaportra.cpp b/src/mame/drivers/vaportra.cpp index 0edc8e45efb..6b6700ae286 100644 --- a/src/mame/drivers/vaportra.cpp +++ b/src/mame/drivers/vaportra.cpp @@ -273,8 +273,8 @@ MACHINE_CONFIG_START(vaportra_state::vaportra) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, 0)) + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); MCFG_DEVICE_ADD("ym1", YM2203, XTAL(32'220'000)/8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) diff --git a/src/mame/drivers/vastar.cpp b/src/mame/drivers/vastar.cpp index 79bd42bef2b..e1c30f5a8a0 100644 --- a/src/mame/drivers/vastar.cpp +++ b/src/mame/drivers/vastar.cpp @@ -432,10 +432,10 @@ MACHINE_CONFIG_START(vastar_state::vastar) MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* 10 CPU slices per frame - seems enough to ensure proper synchronization of the CPUs */ - MCFG_DEVICE_ADD("mainlatch", LS259, 0) - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, vastar_state, nmi_mask_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, vastar_state, flip_screen_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + ls259_device &mainlatch(LS259(config, "mainlatch")); + mainlatch.q_out_cb<0>().set(FUNC(vastar_state::nmi_mask_w)); + mainlatch.q_out_cb<1>().set(FUNC(vastar_state::flip_screen_w)); + mainlatch.q_out_cb<2>().set_inputline(m_subcpu, INPUT_LINE_RESET).invert(); MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/vector4.cpp b/src/mame/drivers/vector4.cpp index 6a2ccb41ada..ed4b62df819 100644 --- a/src/mame/drivers/vector4.cpp +++ b/src/mame/drivers/vector4.cpp @@ -74,13 +74,13 @@ MACHINE_CONFIG_START(vector4_state::vector4) MCFG_DEVICE_IO_MAP(vector4_io) /* video hardware */ - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("uart1", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart1", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart2", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart2", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart3", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart3", i8251_device, write_rxc)) + clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); + uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart3", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart3", FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD("uart1", I8251, 0) MCFG_I8251_TXD_HANDLER(WRITELINE("rs232a", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/victor9k.cpp b/src/mame/drivers/victor9k.cpp index c048e2e2e21..9ad6d577c79 100644 --- a/src/mame/drivers/victor9k.cpp +++ b/src/mame/drivers/victor9k.cpp @@ -60,7 +60,6 @@ #define RS232_B_TAG "rs232b" #define SCREEN_TAG "screen" #define KB_TAG "kb" -#define FDC_TAG "fdc" class victor9k_state : public driver_device { @@ -79,7 +78,7 @@ public: m_crtc(*this, HD46505S_TAG), m_ram(*this, RAM_TAG), m_kb(*this, KB_TAG), - m_fdc(*this, FDC_TAG), + m_fdc(*this, "fdc"), m_centronics(*this, "centronics"), m_rs232a(*this, RS232_A_TAG), m_rs232b(*this, RS232_B_TAG), @@ -783,10 +782,10 @@ MACHINE_CONFIG_START(victor9k_state::victor9k) MCFG_VICTOR9K_KBRDY_HANDLER(WRITELINE(*this, victor9k_state, kbrdy_w)) MCFG_VICTOR9K_KBDATA_HANDLER(WRITELINE(*this, victor9k_state, kbdata_w)) - MCFG_DEVICE_ADD(FDC_TAG, VICTOR_9000_FDC, 0) - MCFG_VICTOR_9000_FDC_IRQ_CB(WRITELINE(*this, victor9k_state, fdc_irq_w)) - MCFG_VICTOR_9000_FDC_SYN_CB(WRITELINE(I8259A_TAG, pic8259_device, ir0_w)) MCFG_DEVCB_XOR(1) - MCFG_VICTOR_9000_FDC_LBRDY_CB(INPUTLINE(I8088_TAG, INPUT_LINE_TEST)) MCFG_DEVCB_XOR(1) + VICTOR_9000_FDC(config, m_fdc, 0); + m_fdc->irq_wr_callback().set(FUNC(victor9k_state::fdc_irq_w)); + m_fdc->syn_wr_callback().set(I8259A_TAG, FUNC(pic8259_device::ir0_w)).invert(); + m_fdc->lbrdy_wr_callback().set_inputline(I8088_TAG, INPUT_LINE_TEST).invert(); // internal ram MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mame/drivers/vip.cpp b/src/mame/drivers/vip.cpp index 3a6ffe8385a..6544d79cbf0 100644 --- a/src/mame/drivers/vip.cpp +++ b/src/mame/drivers/vip.cpp @@ -719,7 +719,7 @@ MACHINE_CONFIG_START(vip_state::vip) MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(3'521'280)/2) MCFG_DEVICE_PROGRAM_MAP(vip_mem) MCFG_DEVICE_IO_MAP(vip_io) - MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1)) MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, vip_state, clear_r)) MCFG_COSMAC_EF1_CALLBACK(READLINE(*this, vip_state, ef1_r)) MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, vip_state, ef2_r)) diff --git a/src/mame/drivers/votrpss.cpp b/src/mame/drivers/votrpss.cpp index b8eb8d2b0ee..fadb8fea0bd 100644 --- a/src/mame/drivers/votrpss.cpp +++ b/src/mame/drivers/votrpss.cpp @@ -277,12 +277,12 @@ MACHINE_CONFIG_START(votrpss_state::votrpss) MCFG_RS232_DSR_HANDLER(WRITELINE("uart", i8251_device, write_dsr)) MCFG_RS232_CTS_HANDLER(WRITELINE("uart", i8251_device, write_cts)) - MCFG_DEVICE_ADD("pit", PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL(8'000'000)) /* Timer 0: baud rate gen for 8251 */ - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("uart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("uart", i8251_device, write_rxc)) - MCFG_PIT8253_CLK1(XTAL(8'000'000) / 256) /* Timer 1: Pitch */ - MCFG_PIT8253_CLK2(XTAL(8'000'000) / 4096) /* Timer 2: Volume */ + pit8253_device &pit(PIT8253(config, "pit", 0)); + pit.set_clk<0>(8_MHz_XTAL); // Timer 0: baud rate gen for 8251 + pit.out_handler<0>().set("uart", FUNC(i8251_device::write_txc)); + pit.out_handler<0>().append("uart", FUNC(i8251_device::write_rxc)); + pit.set_clk<1>(8_MHz_XTAL / 256); // Timer 1: Pitch + pit.set_clk<2>(8_MHz_XTAL / 4096); // Timer 2: Volume MCFG_DEVICE_ADD("ppi", I8255, 0) MCFG_I8255_IN_PORTA_CB(READ8(*this, votrpss_state, ppi_pa_r)) diff --git a/src/mame/drivers/votrtnt.cpp b/src/mame/drivers/votrtnt.cpp index e44b71bec01..2c3c0e9c7f7 100644 --- a/src/mame/drivers/votrtnt.cpp +++ b/src/mame/drivers/votrtnt.cpp @@ -156,9 +156,9 @@ MACHINE_CONFIG_START(votrtnt_state::votrtnt) MCFG_RS232_RXD_HANDLER(WRITELINE("acia", acia6850_device, write_rxd)) MCFG_RS232_CTS_HANDLER(WRITELINE("acia", acia6850_device, write_cts)) - MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("acia", acia6850_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("acia", acia6850_device, write_rxc)) + CLOCK(config, m_clock, 153600); + m_clock->signal_handler().set("acia", FUNC(acia6850_device::write_txc)); + m_clock->signal_handler().append("acia", FUNC(acia6850_device::write_rxc)); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/vt100.cpp b/src/mame/drivers/vt100.cpp index a037d29b416..994f9e3bf3c 100644 --- a/src/mame/drivers/vt100.cpp +++ b/src/mame/drivers/vt100.cpp @@ -351,11 +351,11 @@ MACHINE_CONFIG_START(vt100_state::vt100) MCFG_RS232_RXD_HANDLER(WRITELINE("pusart", i8251_device, write_rxd)) MCFG_RS232_DSR_HANDLER(WRITELINE("pusart", i8251_device, write_dsr)) - MCFG_DEVICE_ADD("dbrg", COM5016_013, XTAL(24'883'200) / 9) // COM5016T-013 (or WD1943CD-02), 2.7648Mhz Clock - MCFG_COM8116_FR_HANDLER(WRITELINE("pusart", i8251_device, write_rxc)) - MCFG_COM8116_FT_HANDLER(WRITELINE("pusart", i8251_device, write_txc)) + com8116_device &dbrg(COM5016_013(config, "dbrg", XTAL(24'883'200) / 9)); // COM5016T-013 (or WD1943CD-02), 2.7648Mhz Clock + dbrg.fr_handler().set(m_pusart, FUNC(i8251_device::write_rxc)); + dbrg.ft_handler().set(m_pusart, FUNC(i8251_device::write_txc)); - MCFG_DEVICE_ADD("nvr", ER1400, 0) + ER1400(config, m_nvr, 0); MCFG_DEVICE_ADD("keyboard", VT100_KEYBOARD, 0) MCFG_VT100_KEYBOARD_SIGNAL_OUT_CALLBACK(WRITELINE("kbduart", ay31015_device, write_si)) @@ -403,21 +403,17 @@ MACHINE_CONFIG_START(vt100_state::vt100ac) MCFG_I8251_RXRDY_HANDLER(WRITELINE("stprxint", input_merger_device, in_w<2>)) MCFG_I8251_TXRDY_HANDLER(WRITELINE("stptxint", input_merger_device, in_w<2>)) - MCFG_INPUT_MERGER_ANY_HIGH("stptxint") - MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("stpcpu", I8085_RST55_LINE)) + INPUT_MERGER_ANY_HIGH(config, "stptxint").output_handler().set_inputline("stpcpu", I8085_RST55_LINE); - MCFG_INPUT_MERGER_ANY_HIGH("stprxint") - MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("stpcpu", I8085_RST65_LINE)) + INPUT_MERGER_ANY_HIGH(config, "stprxint").output_handler().set_inputline("stpcpu", I8085_RST65_LINE); - MCFG_DEVICE_MODIFY("dbrg") - MCFG_COM8116_FR_HANDLER(WRITELINE("pusart", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("stpusart0", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("stpusart1", i8251_device, write_rxc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("stpusart2", i8251_device, write_rxc)) - MCFG_COM8116_FT_HANDLER(WRITELINE("pusart", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("stpusart0", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("stpusart1", i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("stpusart2", i8251_device, write_txc)) + com8116_device &dbrg(*subdevice("dbrg")); + dbrg.fr_handler().append("stpusart0", FUNC(i8251_device::write_rxc)); + dbrg.fr_handler().append("stpusart1", FUNC(i8251_device::write_rxc)); + dbrg.fr_handler().append("stpusart2", FUNC(i8251_device::write_rxc)); + dbrg.ft_handler().append("stpusart0", FUNC(i8251_device::write_txc)); + dbrg.ft_handler().append("stpusart1", FUNC(i8251_device::write_txc)); + dbrg.ft_handler().append("stpusart2", FUNC(i8251_device::write_txc)); MACHINE_CONFIG_END MACHINE_CONFIG_START(vt100_state::vt180) diff --git a/src/mame/drivers/vta2000.cpp b/src/mame/drivers/vta2000.cpp index 49c8c4ce57d..5329285bbba 100644 --- a/src/mame/drivers/vta2000.cpp +++ b/src/mame/drivers/vta2000.cpp @@ -190,27 +190,27 @@ PALETTE_INIT_MEMBER(vta2000_state, vta2000) MACHINE_CONFIG_START(vta2000_state::vta2000) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",I8080, XTAL(4'000'000) / 4) + MCFG_DEVICE_ADD(m_maincpu, I8080, XTAL(4'000'000) / 4) MCFG_DEVICE_PROGRAM_MAP(mem_map) MCFG_DEVICE_IO_MAP(io_map) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic", pic8259_device, inta_cb) - MCFG_DEVICE_ADD("mainpit", PIT8253, 0) - MCFG_PIT8253_CLK0(500'000) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE(*this, vta2000_state, speaker_w)) + PIT8253(config, m_mainpit, 0); + m_mainpit->set_clk<0>(500'000); + m_mainpit->out_handler<0>().set(FUNC(vta2000_state::speaker_w)); - MCFG_DEVICE_ADD("pic", PIC8259, 0) - MCFG_PIC8259_IN_SP_CB(GND) - MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) + pic8259_device &pic(PIC8259(config, "pic", 0)); + pic.in_sp_callback().set_constant(0); + pic.out_int_callback().set_inputline(m_maincpu, 0); - MCFG_DEVICE_ADD("usart", I8251, XTAL(4'000'000) / 4) - MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic", pic8259_device, ir4_w)) + i8251_device &usart(I8251(config, "usart", XTAL(4'000'000) / 4)); + usart.rxrdy_handler().set("pic", FUNC(pic8259_device::ir4_w)); - MCFG_DEVICE_ADD("brgpit", PIT8253, 0) - MCFG_PIT8253_CLK0(1228800) // maybe - MCFG_PIT8253_CLK1(1228800) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE("usart", i8251_device, write_rxc)) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE("usart", i8251_device, write_txc)) // or vice versa? + pit8253_device &brgpit(PIT8253(config, "brgpit", 0)); + brgpit.set_clk<0>(1'228'800); // maybe + brgpit.set_clk<1>(1'228'800); + brgpit.out_handler<0>().set("usart", FUNC(i8251_device::write_rxc)); + brgpit.out_handler<1>().set("usart", FUNC(i8251_device::write_txc)); // or vice versa? /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/vtech1.cpp b/src/mame/drivers/vtech1.cpp index 445b4626ae9..6d9f22189fd 100644 --- a/src/mame/drivers/vtech1.cpp +++ b/src/mame/drivers/vtech1.cpp @@ -446,11 +446,11 @@ MACHINE_CONFIG_START(vtech1_state::laser110) // video hardware MCFG_SCREEN_MC6847_PAL_ADD("screen", "mc6847") - MCFG_DEVICE_ADD("mc6847", MC6847_PAL, XTAL(4'433'619)) - MCFG_MC6847_FSYNC_CALLBACK(INPUTLINE("maincpu", 0)) MCFG_DEVCB_INVERT - MCFG_MC6847_INPUT_CALLBACK(READ8(*this, vtech1_state, mc6847_videoram_r)) - MCFG_MC6847_BW(true) - MCFG_MC6847_FIXED_MODE(mc6847_pal_device::MODE_GM1) + MC6847_PAL(config, m_mc6847, XTAL(4'433'619)); + m_mc6847->fsync_wr_callback().set_inputline(m_maincpu, 0).invert(); + m_mc6847->input_callback().set(FUNC(vtech1_state::mc6847_videoram_r)); + m_mc6847->set_black_and_white(true); + m_mc6847->set_get_fixed_mode(mc6847_pal_device::MODE_GM1); // GM2 = GND, GM0 = GND, INTEXT = GND // other lines not connected @@ -476,16 +476,16 @@ MACHINE_CONFIG_START(vtech1_state::laser110) MCFG_SOFTWARE_LIST_ADD("cass_list", "vz_cass") MACHINE_CONFIG_END -MACHINE_CONFIG_START(vtech1_state::laser200) +void vtech1_state::laser200(machine_config &config) +{ laser110(config); - MCFG_DEVICE_REMOVE("mc6847") - MCFG_DEVICE_ADD("mc6847", MC6847_PAL, XTAL(4'433'619)) - MCFG_MC6847_FSYNC_CALLBACK(INPUTLINE("maincpu", 0)) MCFG_DEVCB_INVERT - MCFG_MC6847_INPUT_CALLBACK(READ8(*this, vtech1_state, mc6847_videoram_r)) - MCFG_MC6847_FIXED_MODE(mc6847_pal_device::MODE_GM1) + MC6847_PAL(config.replace(), m_mc6847, XTAL(4'433'619)); + m_mc6847->fsync_wr_callback().set_inputline(m_maincpu, 0).invert(); + m_mc6847->input_callback().set(FUNC(vtech1_state::mc6847_videoram_r)); + m_mc6847->set_get_fixed_mode(mc6847_pal_device::MODE_GM1); // GM2 = GND, GM0 = GND, INTEXT = GND // other lines not connected -MACHINE_CONFIG_END +} MACHINE_CONFIG_START(vtech1_state::laser210) laser200(config); @@ -505,11 +505,10 @@ MACHINE_CONFIG_START(vtech1_state::laser310h) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_IO_MAP(vtech1_shrg_io) - MCFG_DEVICE_REMOVE("mc6847") - MCFG_DEVICE_ADD("mc6847", MC6847_PAL, XTAL(4'433'619)) - MCFG_MC6847_FSYNC_CALLBACK(INPUTLINE("maincpu", 0)) MCFG_DEVCB_INVERT - MCFG_MC6847_INPUT_CALLBACK(READ8(*this, vtech1_state, mc6847_videoram_r)) - MCFG_MC6847_FIXED_MODE(mc6847_pal_device::MODE_GM1) + MC6847_PAL(config.replace(), m_mc6847, XTAL(4'433'619)); + m_mc6847->fsync_wr_callback().set_inputline(m_maincpu, 0).invert(); + m_mc6847->input_callback().set(FUNC(vtech1_state::mc6847_videoram_r)); + m_mc6847->set_get_fixed_mode(mc6847_pal_device::MODE_GM1); // INTEXT = GND // other lines not connected MACHINE_CONFIG_END diff --git a/src/mame/drivers/wardner.cpp b/src/mame/drivers/wardner.cpp index 3df24c22a91..e5d752ad325 100644 --- a/src/mame/drivers/wardner.cpp +++ b/src/mame/drivers/wardner.cpp @@ -427,13 +427,13 @@ MACHINE_CONFIG_START(wardner_state::wardner) MCFG_DEVICE_ADD("spriteram8", BUFFERED_SPRITERAM8) - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_RAW_PARAMS(XTAL(14'000'000)/2, 446, 0, 320, 286, 0, 240) - MCFG_SCREEN_UPDATE_DRIVER(wardner_state, screen_update_toaplan0) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("spriteram8", buffered_spriteram8_device, vblank_copy_rising)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(*this, wardner_state, wardner_vblank_irq)) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); + m_screen->set_raw(14_MHz_XTAL/2, 446, 0, 320, 286, 0, 240); + m_screen->set_screen_update(FUNC(wardner_state::screen_update_toaplan0)); + m_screen->screen_vblank().set(m_spriteram8, FUNC(buffered_spriteram8_device::vblank_copy_rising)); + m_screen->screen_vblank().append(FUNC(wardner_state::wardner_vblank_irq)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_wardner) MCFG_PALETTE_ADD("palette", 1792) diff --git a/src/mame/drivers/warriorb.cpp b/src/mame/drivers/warriorb.cpp index c17913044e3..c1826bc9003 100644 --- a/src/mame/drivers/warriorb.cpp +++ b/src/mame/drivers/warriorb.cpp @@ -445,13 +445,13 @@ MACHINE_CONFIG_START(warriorb_state::darius2d) MCFG_DEVICE_ADD("audiocpu", Z80,16000000/4) /* 4 MHz ? */ MCFG_DEVICE_PROGRAM_MAP(z80_sound_map) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, warriorb_state, coin_control_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(warriorb_state::coin_control_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_warriorb) @@ -529,13 +529,13 @@ MACHINE_CONFIG_START(warriorb_state::warriorb) MCFG_DEVICE_ADD("audiocpu", Z80,16000000/4) /* 4 MHz ? */ MCFG_DEVICE_PROGRAM_MAP(z80_sound_map) - MCFG_DEVICE_ADD("tc0510nio", TC0510NIO, 0) - MCFG_TC0510NIO_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0510NIO_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0510NIO_READ_2_CB(IOPORT("IN0")) - MCFG_TC0510NIO_READ_3_CB(IOPORT("IN1")) - MCFG_TC0510NIO_WRITE_4_CB(WRITE8(*this, warriorb_state, coin_control_w)) - MCFG_TC0510NIO_READ_7_CB(IOPORT("IN2")) + TC0510NIO(config, m_tc0510nio, 0); + m_tc0510nio->read_0_callback().set_ioport("DSWA"); + m_tc0510nio->read_1_callback().set_ioport("DSWB"); + m_tc0510nio->read_2_callback().set_ioport("IN0"); + m_tc0510nio->read_3_callback().set_ioport("IN1"); + m_tc0510nio->write_4_callback().set(FUNC(warriorb_state::coin_control_w)); + m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_warriorb) diff --git a/src/mame/drivers/wgp.cpp b/src/mame/drivers/wgp.cpp index 3994fbfd3e2..ed34c8b6136 100644 --- a/src/mame/drivers/wgp.cpp +++ b/src/mame/drivers/wgp.cpp @@ -922,13 +922,13 @@ MACHINE_CONFIG_START(wgp_state::wgp) MCFG_QUANTUM_TIME(attotime::from_hz(30000)) - MCFG_DEVICE_ADD("tc0220ioc", TC0220IOC, 0) - MCFG_TC0220IOC_READ_0_CB(IOPORT("DSWA")) - MCFG_TC0220IOC_READ_1_CB(IOPORT("DSWB")) - MCFG_TC0220IOC_READ_2_CB(IOPORT("IN0")) - MCFG_TC0220IOC_READ_3_CB(IOPORT("IN1")) - MCFG_TC0220IOC_WRITE_4_CB(WRITE8(*this, wgp_state, coins_w)) - MCFG_TC0220IOC_READ_7_CB(IOPORT("IN2")) + TC0220IOC(config, m_tc0220ioc, 0); + m_tc0220ioc->read_0_callback().set_ioport("DSWA"); + m_tc0220ioc->read_1_callback().set_ioport("DSWB"); + m_tc0220ioc->read_2_callback().set_ioport("IN0"); + m_tc0220ioc->read_3_callback().set_ioport("IN1"); + m_tc0220ioc->write_4_callback().set(FUNC(wgp_state::coins_w)); + m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/wicat.cpp b/src/mame/drivers/wicat.cpp index b4e18258a95..7a9b7b308a1 100644 --- a/src/mame/drivers/wicat.cpp +++ b/src/mame/drivers/wicat.cpp @@ -827,15 +827,15 @@ MACHINE_CONFIG_START(wicat_state::wicat) MCFG_RS232_DSR_HANDLER(WRITELINE("uart5",mc2661_device,dsr_w)) MCFG_RS232_CTS_HANDLER(WRITELINE("uart5",mc2661_device,cts_w)) - MCFG_DEVICE_ADD("ledlatch", LS259, 0) // U19 on I/O board - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, wicat_state, adir_w)) - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, wicat_state, bdir_w)) - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(OUTPUT("led1")) MCFG_DEVCB_INVERT // 0 = on, 1 = off - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(OUTPUT("led2")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(OUTPUT("led3")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(OUTPUT("led4")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(OUTPUT("led5")) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(OUTPUT("led6")) MCFG_DEVCB_INVERT + ls259_device &ledlatch(LS259(config, "ledlatch")); // U19 on I/O board + ledlatch.q_out_cb<0>().set(FUNC(wicat_state::adir_w)); + ledlatch.q_out_cb<1>().set(FUNC(wicat_state::bdir_w)); + ledlatch.q_out_cb<2>().set_output("led1").invert(); // 0 = on, 1 = off + ledlatch.q_out_cb<3>().set_output("led2").invert(); + ledlatch.q_out_cb<4>().set_output("led3").invert(); + ledlatch.q_out_cb<5>().set_output("led4").invert(); + ledlatch.q_out_cb<6>().set_output("led5").invert(); + ledlatch.q_out_cb<7>().set_output("led6").invert(); /* video hardware */ MCFG_DEVICE_ADD("videocpu", Z8002, 8_MHz_XTAL/2) // AMD AMZ8002DC diff --git a/src/mame/drivers/williams.cpp b/src/mame/drivers/williams.cpp index 07e043307bb..45098bf8bff 100644 --- a/src/mame/drivers/williams.cpp +++ b/src/mame/drivers/williams.cpp @@ -1584,14 +1584,13 @@ MACHINE_CONFIG_START(williams_state::williams_muxed) /* basic machine hardware */ /* pia */ - MCFG_DEVICE_MODIFY("pia_0") - MCFG_PIA_READPA_HANDLER(IOPORT("IN0")) MCFG_DEVCB_MASK(0x30) - MCFG_DEVCB_CHAIN_INPUT(READ8("mux_0", ls157_device, output_r)) MCFG_DEVCB_MASK(0x0f) - MCFG_DEVCB_CHAIN_INPUT(READ8("mux_1", ls157_device, output_r)) MCFG_DEVCB_RSHIFT(-6) MCFG_DEVCB_MASK(0xc0) - MCFG_PIA_READPB_HANDLER(IOPORT("IN1")) MCFG_DEVCB_MASK(0xfc) - MCFG_DEVCB_CHAIN_INPUT(READ8("mux_1", ls157_device, output_r)) MCFG_DEVCB_RSHIFT(2) MCFG_DEVCB_MASK(0x03) - MCFG_PIA_CB2_HANDLER(WRITELINE("mux_0", ls157_device, select_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mux_1", ls157_device, select_w)) + m_pia[0]->readpa_handler().set_ioport("IN0").mask(0x30); + m_pia[0]->readpa_handler().append("mux_0", FUNC(ls157_device::output_r)).mask(0x0f); + m_pia[0]->readpa_handler().append("mux_1", FUNC(ls157_device::output_r)).lshift(6).mask(0xc0); + m_pia[0]->readpb_handler().set_ioport("IN1").mask(0xfc); + m_pia[0]->readpb_handler().append("mux_1", FUNC(ls157_device::output_r)).rshift(2).mask(0x03); + m_pia[0]->cb2_handler().set("mux_0", FUNC(ls157_device::select_w)); + m_pia[0]->cb2_handler().append("mux_1", FUNC(ls157_device::select_w)); MCFG_DEVICE_ADD("mux_0", LS157, 0) // IC3 on interface board (actually LS257 with OC tied low) MCFG_74157_A_IN_CB(IOPORT("INP2")) @@ -1623,9 +1622,8 @@ MACHINE_CONFIG_START(williams_state::lottofun) /* basic machine hardware */ /* pia */ - MCFG_DEVICE_MODIFY("pia_0") - MCFG_PIA_WRITEPB_HANDLER(WRITELINE("ticket", ticket_dispenser_device, motor_w)) MCFG_DEVCB_BIT(7) - MCFG_PIA_CA2_HANDLER(WRITELINE(*this, williams_state, lottofun_coin_lock_w)) + m_pia[0]->writepa_handler().set("ticket", FUNC(ticket_dispenser_device::motor_w)).bit(7); + m_pia[0]->ca2_handler().set(FUNC(williams_state::lottofun_coin_lock_w)); MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(70), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH) MACHINE_CONFIG_END @@ -1710,11 +1708,10 @@ MACHINE_CONFIG_START(blaster_state::blaster) MCFG_DEVICE_PROGRAM_MAP(sound_map_b) /* pia */ - MCFG_DEVICE_MODIFY("pia_0") - MCFG_PIA_READPB_HANDLER(READ8("mux_b", ls157_device, output_r)) MCFG_DEVCB_MASK(0x0f) - MCFG_DEVCB_CHAIN_INPUT(IOPORT("IN1")) MCFG_DEVCB_MASK(0xf0) - MCFG_PIA_CB2_HANDLER(WRITELINE("mux_a", ls157_x2_device, select_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("mux_b", ls157_device, select_w)) + m_pia[0]->readpb_handler().set("mux_b", FUNC(ls157_device::output_r)).mask(0x0f); + m_pia[0]->readpb_handler().append_ioport("IN1").mask(0xf0); + m_pia[0]->cb2_handler().set("mux_a", FUNC(ls157_x2_device::select_w)); + m_pia[0]->cb2_handler().append("mux_b", FUNC(ls157_device::select_w)); MCFG_DEVICE_MODIFY("mux_a") // IC7 (for PA0-PA3) + IC5 (for PA4-PA7) MCFG_74157_A_IN_CB(READ8(*this, williams_state, williams_49way_port_0_r)) @@ -1805,23 +1802,23 @@ MACHINE_CONFIG_START(williams2_state::williams2) MCFG_INPUT_MERGER_ANY_HIGH("soundirq") MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("soundcpu", M6808_IRQ_LINE)) - MCFG_DEVICE_ADD("pia_0", PIA6821, 0) + MCFG_DEVICE_ADD(m_pia[0], PIA6821, 0) MCFG_PIA_READPA_HANDLER(IOPORT("IN0")) MCFG_PIA_READPB_HANDLER(IOPORT("IN1")) - MCFG_DEVICE_ADD("pia_1", PIA6821, 0) + MCFG_DEVICE_ADD(m_pia[1], PIA6821, 0) MCFG_PIA_READPA_HANDLER(IOPORT("IN2")) MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, williams2_state,williams2_snd_cmd_w)) MCFG_PIA_CB2_HANDLER(WRITELINE("pia_2", pia6821_device, ca1_w)) MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<0>)) MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<1>)) - MCFG_DEVICE_ADD("pia_2", PIA6821, 0) - MCFG_PIA_WRITEPA_HANDLER(WRITE8("pia_1", pia6821_device, portb_w)) - MCFG_PIA_WRITEPB_HANDLER(WRITE8("dac", dac_byte_interface, data_w)) - MCFG_PIA_CA2_HANDLER(WRITELINE("pia_1", pia6821_device, cb1_w)) - MCFG_PIA_IRQA_HANDLER(WRITELINE("soundirq", input_merger_any_high_device, in_w<0>)) - MCFG_PIA_IRQB_HANDLER(WRITELINE("soundirq", input_merger_any_high_device, in_w<1>)) + PIA6821(config, m_pia[2], 0); + m_pia[2]->writepa_handler().set(m_pia[1], FUNC(pia6821_device::portb_w)); + m_pia[2]->writepb_handler().set("dac", FUNC(dac_byte_interface::data_w)); + m_pia[2]->ca2_handler().set(m_pia[1], FUNC(pia6821_device::cb1_w)); + m_pia[2]->irqa_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<0>)); + m_pia[2]->irqb_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<1>)); MACHINE_CONFIG_END @@ -1897,10 +1894,9 @@ MACHINE_CONFIG_START(joust2_state::joust2) MCFG_MACHINE_RESET_OVERRIDE(joust2_state,joust2) /* pia */ - MCFG_DEVICE_MODIFY("pia_0") - MCFG_PIA_READPA_HANDLER(IOPORT("IN0")) MCFG_DEVCB_MASK(0xf0) - MCFG_DEVCB_CHAIN_INPUT(READ8("mux", ls157_device, output_r)) MCFG_DEVCB_MASK(0x0f) - MCFG_PIA_CA2_HANDLER(WRITELINE("mux", ls157_device, select_w)) + m_pia[0]->readpa_handler().set_ioport("IN0").mask(0xf0); + m_pia[0]->readpa_handler().append("mux", FUNC(ls157_device::output_r)).mask(0x0f); + m_pia[0]->ca2_handler().set("mux", FUNC(ls157_device::select_w)); MCFG_DEVICE_MODIFY("pia_1") MCFG_PIA_READPA_HANDLER(IOPORT("IN2")) diff --git a/src/mame/drivers/wiping.cpp b/src/mame/drivers/wiping.cpp index 63bfd7ae992..7dcdbdf8554 100644 --- a/src/mame/drivers/wiping.cpp +++ b/src/mame/drivers/wiping.cpp @@ -296,11 +296,11 @@ MACHINE_CONFIG_START(wiping_state::wiping) MCFG_DEVICE_PROGRAM_MAP(sound_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(wiping_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */ - MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5A - MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, wiping_state, main_irq_mask_w)) // INT1 - MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, wiping_state, sound_irq_mask_w)) // INT2 - MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, wiping_state, flipscreen_w)) // INV - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // CP2RE + ls259_device &mainlatch(LS259(config, "mainlatch")); // 5A + mainlatch.q_out_cb<0>().set(FUNC(wiping_state::main_irq_mask_w)); // INT1 + mainlatch.q_out_cb<1>().set(FUNC(wiping_state::sound_irq_mask_w)); // INT2 + mainlatch.q_out_cb<2>().set(FUNC(wiping_state::flipscreen_w)); // INV + mainlatch.q_out_cb<3>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert(); // CP2RE MCFG_WATCHDOG_ADD("watchdog") @@ -321,8 +321,7 @@ MACHINE_CONFIG_START(wiping_state::wiping) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("wiping", WIPING_CUSTOM, 96000) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + WIPING_CUSTOM(config, "wiping", 96000).add_route(ALL_OUTPUTS, "mono", 1.0); MACHINE_CONFIG_END diff --git a/src/mame/drivers/xain.cpp b/src/mame/drivers/xain.cpp index b7daa797d0f..e8223e87616 100644 --- a/src/mame/drivers/xain.cpp +++ b/src/mame/drivers/xain.cpp @@ -484,7 +484,7 @@ MACHINE_CONFIG_START(xain_state::xsleena) MCFG_DEVICE_ADD(m_audiocpu, MC6809, PIXEL_CLOCK) // 68A09 MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_ADD(m_mcu, TAITO68705_MCU, MCU_CLOCK) + TAITO68705_MCU(config, m_mcu, MCU_CLOCK); MCFG_QUANTUM_PERFECT_CPU("maincpu") @@ -501,21 +501,20 @@ MACHINE_CONFIG_START(xain_state::xsleena) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_GENERIC_LATCH_8_ADD(m_soundlatch) - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, M6809_IRQ_LINE)) + GENERIC_LATCH_8(config, m_soundlatch).data_pending_callback().set_inputline(m_audiocpu, M6809_IRQ_LINE); - MCFG_DEVICE_ADD("ym1", YM2203, MCU_CLOCK) - MCFG_YM2203_IRQ_HANDLER(INPUTLINE(m_audiocpu, M6809_FIRQ_LINE)) - MCFG_SOUND_ROUTE(0, "mono", 0.50) - MCFG_SOUND_ROUTE(1, "mono", 0.50) - MCFG_SOUND_ROUTE(2, "mono", 0.50) - MCFG_SOUND_ROUTE(3, "mono", 0.40) + ym2203_device &ym1(YM2203(config, "ym1", MCU_CLOCK)); + ym1.irq_handler().set_inputline(m_audiocpu, M6809_FIRQ_LINE); + ym1.add_route(0, "mono", 0.50); + ym1.add_route(1, "mono", 0.50); + ym1.add_route(2, "mono", 0.50); + ym1.add_route(3, "mono", 0.40); - MCFG_DEVICE_ADD("ym2", YM2203, MCU_CLOCK) - MCFG_SOUND_ROUTE(0, "mono", 0.50) - MCFG_SOUND_ROUTE(1, "mono", 0.50) - MCFG_SOUND_ROUTE(2, "mono", 0.50) - MCFG_SOUND_ROUTE(3, "mono", 0.40) + ym2203_device &ym2(YM2203(config, "ym2", MCU_CLOCK)); + ym2.add_route(0, "mono", 0.50); + ym2.add_route(1, "mono", 0.50); + ym2.add_route(2, "mono", 0.50); + ym2.add_route(3, "mono", 0.40); MACHINE_CONFIG_END diff --git a/src/mame/drivers/xerox820.cpp b/src/mame/drivers/xerox820.cpp index 0eac26ca43e..3f9ede99609 100644 --- a/src/mame/drivers/xerox820.cpp +++ b/src/mame/drivers/xerox820.cpp @@ -752,13 +752,13 @@ MACHINE_CONFIG_START(xerox820ii_state::xerox820ii) MCFG_XEROX_820_KEYBOARD_KBSTB_CALLBACK(WRITELINE(Z80PIO_KB_TAG, z80pio_device, strobe_b)) // SASI bus - MCFG_DEVICE_ADD(SASIBUS_TAG, SCSI_PORT, 0) - MCFG_SCSI_DATA_INPUT_BUFFER("sasi_data_in") - MCFG_SCSI_BSY_HANDLER(WRITELINE("sasi_ctrl_in", input_buffer_device, write_bit0)) MCFG_DEVCB_XOR(1) - MCFG_SCSI_MSG_HANDLER(WRITELINE("sasi_ctrl_in", input_buffer_device, write_bit1)) MCFG_DEVCB_XOR(1) - MCFG_SCSI_CD_HANDLER(WRITELINE("sasi_ctrl_in", input_buffer_device, write_bit2)) MCFG_DEVCB_XOR(1) - MCFG_SCSI_REQ_HANDLER(WRITELINE("sasi_ctrl_in", input_buffer_device, write_bit3)) MCFG_DEVCB_XOR(1) - MCFG_SCSI_IO_HANDLER(WRITELINE("sasi_ctrl_in", input_buffer_device, write_bit4)) MCFG_DEVCB_XOR(1) + SCSI_PORT(config, m_sasibus, 0); + m_sasibus->set_data_input_buffer("sasi_data_in"); + m_sasibus->bsy_handler().set("sasi_ctrl_in", FUNC(input_buffer_device::write_bit0)).exor(1); + m_sasibus->msg_handler().set("sasi_ctrl_in", FUNC(input_buffer_device::write_bit1)).exor(1); + m_sasibus->cd_handler().set("sasi_ctrl_in", FUNC(input_buffer_device::write_bit2)).exor(1); + m_sasibus->req_handler().set("sasi_ctrl_in", FUNC(input_buffer_device::write_bit3)).exor(1); + m_sasibus->io_handler().set("sasi_ctrl_in", FUNC(input_buffer_device::write_bit4)).exor(1); MCFG_SCSIDEV_ADD(SASIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", SA1403D, SCSI_ID_0) diff --git a/src/mame/drivers/xor100.cpp b/src/mame/drivers/xor100.cpp index 21b308d4ed4..0a3ab3dea9a 100644 --- a/src/mame/drivers/xor100.cpp +++ b/src/mame/drivers/xor100.cpp @@ -528,11 +528,11 @@ MACHINE_CONFIG_START(xor100_state::xor100) MCFG_RS232_CTS_HANDLER(WRITELINE(I8251_B_TAG, i8251_device, write_cts)) MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal) - MCFG_DEVICE_ADD(COM5016_TAG, COM8116, 5.0688_MHz_XTAL) - MCFG_COM8116_FR_HANDLER(WRITELINE(I8251_A_TAG, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(I8251_A_TAG, i8251_device, write_rxc)) - MCFG_COM8116_FT_HANDLER(WRITELINE(I8251_B_TAG, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(I8251_B_TAG, i8251_device, write_rxc)) + com8116_device &brg(COM8116(config, COM5016_TAG, 5.0688_MHz_XTAL)); + brg.fr_handler().set(m_uart_a, FUNC(i8251_device::write_txc)); + brg.fr_handler().append(m_uart_a, FUNC(i8251_device::write_rxc)); + brg.ft_handler().set(m_uart_b, FUNC(i8251_device::write_txc)); + brg.ft_handler().append(m_uart_b, FUNC(i8251_device::write_rxc)); MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0) MCFG_I8255_OUT_PORTA_CB(WRITE8("cent_data_out", output_latch_device, bus_w)) diff --git a/src/mame/drivers/z100.cpp b/src/mame/drivers/z100.cpp index fd964962330..47eb8955a04 100644 --- a/src/mame/drivers/z100.cpp +++ b/src/mame/drivers/z100.cpp @@ -699,12 +699,12 @@ MACHINE_CONFIG_START(z100_state::z100) MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, z100_state, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir3_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("pia0", PIA6821, 0) MCFG_PIA_WRITEPA_HANDLER(WRITE8(*this, z100_state, video_pia_A_w)) diff --git a/src/mame/drivers/z88.cpp b/src/mame/drivers/z88.cpp index 2a87f979641..366ddde565c 100644 --- a/src/mame/drivers/z88.cpp +++ b/src/mame/drivers/z88.cpp @@ -617,17 +617,16 @@ MACHINE_CONFIG_START(z88_state::z88) MCFG_DEFAULT_LAYOUT(layout_lcd) device = &UPD65031(config, m_blink, XTAL(9'830'400)); - MCFG_UPD65031_KB_CALLBACK(READ8(*this, z88_state, kb_r)) - MCFG_UPD65031_INT_CALLBACK(INPUTLINE(m_maincpu, INPUT_LINE_IRQ0)) - MCFG_UPD65031_NMI_CALLBACK(INPUTLINE(m_maincpu, INPUT_LINE_NMI)) - MCFG_UPD65031_SPKR_CALLBACK(WRITELINE(m_speaker, speaker_sound_device, level_w)) + m_blink->kb_rd_callback().set(FUNC(z88_state::kb_r)); + m_blink->int_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_blink->nmi_wr_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + m_blink->spkr_wr_callback().set("speaker", FUNC(speaker_sound_device::level_w)); MCFG_UPD65031_SCR_UPDATE_CB(z88_state, lcd_update) MCFG_UPD65031_MEM_UPDATE_CB(z88_state, bankswitch_update) /* sound hardware */ - SPEAKER(config, m_mono).front_center(); - SPEAKER_SOUND(config, m_speaker); - m_speaker->add_route(ALL_OUTPUTS, "mono", 0.50); + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.50); /* internal ram */ MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mame/drivers/zac2650.cpp b/src/mame/drivers/zac2650.cpp index 8b524777454..dcba11ad8aa 100644 --- a/src/mame/drivers/zac2650.cpp +++ b/src/mame/drivers/zac2650.cpp @@ -233,18 +233,18 @@ GFXDECODE_END MACHINE_CONFIG_START(zac2650_state::tinvader) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", S2650, 3800000/4) - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_S2650_SENSE_INPUT(READLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT + s2650_device &maincpu(S2650(config, m_maincpu, 3800000/4)); + maincpu.set_addrmap(AS_PROGRAM, &zac2650_state::main_map); + maincpu.sense_handler().set(m_screen, FUNC(screen_device::vblank)).invert(); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(55) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1041)) - MCFG_SCREEN_SIZE(30*24, 32*24) - MCFG_SCREEN_VISIBLE_AREA(0, 719, 0, 767) - MCFG_SCREEN_UPDATE_DRIVER(zac2650_state, screen_update_tinvader) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(55); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1041)); + m_screen->set_size(30*24, 32*24); + m_screen->set_visarea(0, 719, 0, 767); + m_screen->set_screen_update(FUNC(zac2650_state::screen_update_tinvader)); + m_screen->set_palette(m_palette); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_tinvader) MCFG_PALETTE_ADD("palette", 4) @@ -253,8 +253,8 @@ MACHINE_CONFIG_START(zac2650_state::tinvader) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("s2636", S2636, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + S2636(config, m_s2636, 0); + m_s2636->add_route(ALL_OUTPUTS, "mono", 0.25); MACHINE_CONFIG_END WRITE8_MEMBER(zac2650_state::tinvader_sound_w) diff --git a/src/mame/drivers/zn.cpp b/src/mame/drivers/zn.cpp index b9ae2221cdc..bb7e3f395c1 100644 --- a/src/mame/drivers/zn.cpp +++ b/src/mame/drivers/zn.cpp @@ -412,7 +412,7 @@ MACHINE_CONFIG_START(zn_state::zn1_1mb_vram) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_GENERIC_LATCH_8_ADD("soundlatch") + GENERIC_LATCH_8(config, m_soundlatch); MCFG_SPU_ADD( "spu", XTAL(67'737'600)/2 ) MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) @@ -459,7 +459,7 @@ MACHINE_CONFIG_START(zn_state::zn2) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_GENERIC_LATCH_8_ADD("soundlatch") + GENERIC_LATCH_8(config, m_soundlatch); MCFG_SPU_ADD( "spu", XTAL(67'737'600)/2 ) MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) @@ -664,8 +664,7 @@ MACHINE_CONFIG_START(zn_state::coh1000c) MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000c) MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000c) - MCFG_DEVICE_MODIFY("soundlatch") - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, INPUT_LINE_NMI)) + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); MCFG_DEVICE_ADD("qsound", QSOUND) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) @@ -690,8 +689,7 @@ MACHINE_CONFIG_START(zn_state::coh1002c) MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000c) MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000c) - MCFG_DEVICE_MODIFY("soundlatch") - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, INPUT_LINE_NMI)) + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); MCFG_DEVICE_ADD("qsound", QSOUND) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) @@ -852,8 +850,7 @@ MACHINE_CONFIG_START(zn_state::coh3002c) MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000c) MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000c) - MCFG_DEVICE_MODIFY("soundlatch") - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, INPUT_LINE_NMI)) + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); MCFG_DEVICE_ADD("qsound", QSOUND) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) @@ -1147,12 +1144,12 @@ MACHINE_CONFIG_START(zn_state::coh1000ta) MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000ta) MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000ta) - MCFG_DEVICE_ADD("ymsnd", YM2610B, XTAL(16'000'000)/2) - MCFG_YM2610_IRQ_HANDLER(INPUTLINE(m_audiocpu, 0)) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) - MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.0) + ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 16_MHz_XTAL/2)); + ymsnd.irq_handler().set_inputline(m_audiocpu, 0); + ymsnd.add_route(0, "lspeaker", 0.25); + ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(1, "lspeaker", 1.0); + ymsnd.add_route(2, "rspeaker", 1.0); MCFG_MB3773_ADD("mb3773") @@ -2392,13 +2389,13 @@ MACHINE_CONFIG_START(zn_state::coh1001l) MCFG_MACHINE_START_OVERRIDE(zn_state, coh1001l) MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1001l) - MCFG_GENERIC_LATCH_16_ADD("soundlatch16") - MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, 3)) + GENERIC_LATCH_16(config, m_soundlatch16); + m_soundlatch16->data_pending_callback().set_inputline(m_audiocpu, 3); - MCFG_DEVICE_ADD("ymz", YMZ280B, XTAL(16'934'400)) - MCFG_YMZ280B_IRQ_HANDLER(INPUTLINE(m_audiocpu, 2)) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) + ymz280b_device &ymz(YMZ280B(config, "ymz", XTAL(16'934'400))); + ymz.irq_handler().set_inputline(m_audiocpu, 2); + ymz.add_route(0, "lspeaker", 0.35); + ymz.add_route(1, "rspeaker", 0.35); MACHINE_CONFIG_END /* diff --git a/src/mame/drivers/zorba.cpp b/src/mame/drivers/zorba.cpp index bdf958b73cf..5772f2044ea 100644 --- a/src/mame/drivers/zorba.cpp +++ b/src/mame/drivers/zorba.cpp @@ -207,15 +207,15 @@ MACHINE_CONFIG_START(zorba_state::zorba) MCFG_PIA_IRQB_HANDLER(WRITELINE("irq1", input_merger_device, in_w<1>)) // PIT - MCFG_DEVICE_ADD("pit", PIT8254, 0) - MCFG_PIT8253_CLK0(24_MHz_XTAL / 3) - MCFG_PIT8253_CLK1(24_MHz_XTAL / 3) - MCFG_PIT8253_CLK2(24_MHz_XTAL / 3) - MCFG_PIT8253_OUT0_HANDLER(WRITELINE(*this, zorba_state, br1_w)) - MCFG_PIT8253_OUT1_HANDLER(WRITELINE(m_uart1, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(m_uart1, i8251_device, write_rxc)) - MCFG_PIT8253_OUT2_HANDLER(WRITELINE(m_uart2, i8251_device, write_txc)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(m_uart2, i8251_device, write_rxc)) + pit8254_device &pit(PIT8254(config, "pit", 0)); + pit.set_clk<0>(24_MHz_XTAL / 3); + pit.set_clk<1>(24_MHz_XTAL / 3); + pit.set_clk<2>(24_MHz_XTAL / 3); + pit.out_handler<0>().set(FUNC(zorba_state::br1_w)); + pit.out_handler<1>().set(m_uart1, FUNC(i8251_device::write_txc)); + pit.out_handler<1>().append(m_uart1, FUNC(i8251_device::write_rxc)); + pit.out_handler<2>().set(m_uart2, FUNC(i8251_device::write_txc)); + pit.out_handler<2>().append(m_uart2, FUNC(i8251_device::write_rxc)); // CRTC MCFG_DEVICE_ADD(m_crtc, I8275, 14.318'181_MHz_XTAL / 7) @@ -247,11 +247,11 @@ MACHINE_CONFIG_START(zorba_state::zorba) // J3 Parallel printer MCFG_CENTRONICS_OUTPUT_LATCH_ADD("parprndata", "parprn") - MCFG_DEVICE_ADD("parprn", CENTRONICS, centronics_devices, "printer") - MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(m_uart1, i8251_device, write_cts)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(m_uart1, i8251_device, write_dsr)) // TODO: shared with serial CTS - MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(*this, zorba_state, printer_fault_w)) - MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(*this, zorba_state, printer_select_w)) + centronics_device &parprn(CENTRONICS(config, "parprn", centronics_devices, "printer")); + parprn.busy_handler().set(m_uart1, FUNC(i8251_device::write_cts)); + parprn.busy_handler().append(m_uart1, FUNC(i8251_device::write_dsr)); // TODO: shared with serial CTS + parprn.fault_handler().set(FUNC(zorba_state::printer_fault_w)); + parprn.select_handler().set(FUNC(zorba_state::printer_select_w)); // J3 Serial printer MCFG_DEVICE_ADD("serprn", RS232_PORT, default_rs232_devices, nullptr) diff --git a/src/mame/drivers/zsbc3.cpp b/src/mame/drivers/zsbc3.cpp index 46a0301019a..c2be544d29d 100644 --- a/src/mame/drivers/zsbc3.cpp +++ b/src/mame/drivers/zsbc3.cpp @@ -85,32 +85,32 @@ INPUT_PORTS_END MACHINE_CONFIG_START(zsbc3_state::zsbc3) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80, XTAL(16'000'000) / 4) - MCFG_DEVICE_PROGRAM_MAP(zsbc3_mem) - MCFG_DEVICE_IO_MAP(zsbc3_io) + Z80(config, m_maincpu, 16_MHz_XTAL / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &zsbc3_state::zsbc3_mem); + m_maincpu->set_addrmap(AS_IO, &zsbc3_state::zsbc3_io); - MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL(16'000'000) / 4) - MCFG_Z80CTC_ZC0_CB(WRITELINE("sio", z80sio_device, txca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio", z80sio_device, rxca_w)) + z80ctc_device &ctc(Z80CTC(config, "ctc", 16_MHz_XTAL / 4)); + ctc.zc_callback<0>().set("sio", FUNC(z80sio_device::txca_w)); + ctc.zc_callback<0>().append("sio", FUNC(z80sio_device::rxca_w)); - MCFG_DEVICE_ADD("clk2mhz", CLOCK, XTAL(16'000'000) / 8) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE("ctc", z80ctc_device, trg0)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg1)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg2)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("ctc", z80ctc_device, trg3)) + clock_device &clk2mhz(CLOCK(config, "clk2mhz", 16_MHz_XTAL / 8)); + clk2mhz.signal_handler().set("ctc", FUNC(z80ctc_device::trg0)); + clk2mhz.signal_handler().append("ctc", FUNC(z80ctc_device::trg1)); + clk2mhz.signal_handler().append("ctc", FUNC(z80ctc_device::trg2)); + clk2mhz.signal_handler().append("ctc", FUNC(z80ctc_device::trg3)); - MCFG_DEVICE_ADD("sio", Z80SIO, XTAL(16'000'000) / 4) - //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // no evidence of a daisy chain because IM2 is not set - MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE("rs232", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE("rs232", rs232_port_device, write_rts)) + z80sio_device &sio(Z80SIO(config, "sio", 16_MHz_XTAL / 4)); + //sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); // no evidence of a daisy chain because IM2 is not set + sio.out_txda_callback().set("rs232", FUNC(rs232_port_device::write_txd)); + sio.out_dtra_callback().set("rs232", FUNC(rs232_port_device::write_dtr)); + sio.out_rtsa_callback().set("rs232", FUNC(rs232_port_device::write_rts)); - MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(WRITELINE("sio", z80sio_device, rxa_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("sio", z80sio_device, ctsa_w)) + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); + rs232.rxd_handler().set("sio", FUNC(z80sio_device::rxa_w)); + rs232.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w)); - MCFG_DEVICE_ADD("pio", Z80PIO, XTAL(16'000'000) / 4) - //MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) + /*z80pio_device &pio(*/Z80PIO(config, "pio", 16_MHz_XTAL / 4)/*)*/; + //pio.out_int_callback.set_inputline(m_maincpu, INPUT_LINE_IRQ0); MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/includes/alesis.h b/src/mame/includes/alesis.h index aefb7ce31af..a9fa9a1f33b 100644 --- a/src/mame/includes/alesis.h +++ b/src/mame/includes/alesis.h @@ -170,7 +170,7 @@ private: required_device m_lcdc; optional_device m_cassette; - required_device m_maincpu; + required_device m_maincpu; required_ioport m_col1; required_ioport m_col2; diff --git a/src/mame/includes/apexc.h b/src/mame/includes/apexc.h index f6e938c7f8b..f012a10da0f 100644 --- a/src/mame/includes/apexc.h +++ b/src/mame/includes/apexc.h @@ -1,6 +1,5 @@ // license:GPL-2.0+ // copyright-holders:Raphael Nabet, Robbbert - #ifndef MAME_INCLUDES_APEXC #define MAME_INCLUDES_APEXC diff --git a/src/mame/includes/apollo.h b/src/mame/includes/apollo.h index 7874dfbf0da..86381bf981e 100644 --- a/src/mame/includes/apollo.h +++ b/src/mame/includes/apollo.h @@ -338,16 +338,16 @@ void apollo_csr_set_status_register(uint16_t mask, uint16_t data); MCFG_DEVICE_ADD(_tag, APOLLO_SIO, _clock) #define MCFG_APOLLO_SIO_IRQ_CALLBACK(_cb) \ - devcb = &downcast(*device).set_irq_cb(DEVCB_##_cb); + downcast(*device).set_irq_cb(DEVCB_##_cb); #define MCFG_APOLLO_SIO_A_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_a_tx_cb(DEVCB_##_cb); + downcast(*device).set_a_tx_cb(DEVCB_##_cb); #define MCFG_APOLLO_SIO_B_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_b_tx_cb(DEVCB_##_cb); + downcast(*device).set_b_tx_cb(DEVCB_##_cb); #define MCFG_APOLLO_SIO_OUTPORT_CALLBACK(_cb) \ - devcb = &downcast(*device).set_outport_cb(DEVCB_##_cb); + downcast(*device).set_outport_cb(DEVCB_##_cb); class apollo_sio: public duart_base_device { @@ -685,7 +685,7 @@ DECLARE_DEVICE_TYPE(APOLLO_MONO19I, apollo_graphics_19i) //************************************************************************** #define MCFG_APOLLO_STDIO_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_tx_cb(DEVCB_##_cb); + downcast(*device).set_tx_cb(DEVCB_##_cb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/includes/asteroid.h b/src/mame/includes/asteroid.h index c8d0f58ef86..42054d2c125 100644 --- a/src/mame/includes/asteroid.h +++ b/src/mame/includes/asteroid.h @@ -14,8 +14,8 @@ class asteroid_state : public driver_device { public: - asteroid_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + asteroid_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_dvg(*this, "dvg"), m_earom(*this, "earom"), @@ -24,7 +24,8 @@ public: m_dsw_sel(*this, "dsw_sel"), m_cocktail(*this, "COCKTAIL"), m_ram1(*this, "ram1"), - m_ram2(*this, "ram2") { } + m_ram2(*this, "ram2") + { } /* devices */ required_device m_maincpu; diff --git a/src/mame/includes/balsente.h b/src/mame/includes/balsente.h index 3c5faab772f..955ea5e7e15 100644 --- a/src/mame/includes/balsente.h +++ b/src/mame/includes/balsente.h @@ -109,7 +109,6 @@ private: DECLARE_READ8_MEMBER(novram_8bit_r); DECLARE_WRITE8_MEMBER(novram_8bit_w); DECLARE_WRITE8_MEMBER(acia_w); - DECLARE_WRITE_LINE_MEMBER(uint_w); DECLARE_WRITE_LINE_MEMBER(uint_propagate_w); DECLARE_READ8_MEMBER(adc_data_r); DECLARE_WRITE8_MEMBER(adc_select_w); diff --git a/src/mame/includes/ccastles.h b/src/mame/includes/ccastles.h index 0bbf47be6c2..a9f04bf671a 100644 --- a/src/mame/includes/ccastles.h +++ b/src/mame/includes/ccastles.h @@ -37,7 +37,6 @@ public: protected: DECLARE_WRITE8_MEMBER(irq_ack_w); - template DECLARE_WRITE_LINE_MEMBER(ccounter_w); DECLARE_READ8_MEMBER(leta_r); DECLARE_WRITE8_MEMBER(nvram_recall_w); DECLARE_WRITE_LINE_MEMBER(nvram_store_w); diff --git a/src/mame/includes/cloud9.h b/src/mame/includes/cloud9.h index aaf24481d1f..8c9dc970317 100644 --- a/src/mame/includes/cloud9.h +++ b/src/mame/includes/cloud9.h @@ -36,8 +36,6 @@ public: protected: DECLARE_WRITE8_MEMBER(irq_ack_w); - DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); - DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); DECLARE_READ8_MEMBER(leta_r); DECLARE_WRITE8_MEMBER(nvram_recall_w); DECLARE_WRITE8_MEMBER(nvram_store_w); diff --git a/src/mame/includes/cvs.h b/src/mame/includes/cvs.h index b19bacfd303..49499306105 100644 --- a/src/mame/includes/cvs.h +++ b/src/mame/includes/cvs.h @@ -85,9 +85,9 @@ public: uint32_t screen_update_cvs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(cvs_main_cpu_interrupt); TIMER_CALLBACK_MEMBER(cvs_393hz_timer_cb); - void set_pens( ); - void cvs_scroll_stars( ); - void cvs_init_stars( ); + void set_pens(); + void cvs_scroll_stars(); + void cvs_init_stars(); void cvs_update_stars(bitmap_ind16 &bitmap, const rectangle &cliprect, const pen_t star_pen, bool update_always); void start_393hz_timer(); void cvs(machine_config &config); diff --git a/src/mame/includes/dec8.h b/src/mame/includes/dec8.h index 46bfea1cd24..b659e023ef0 100644 --- a/src/mame/includes/dec8.h +++ b/src/mame/includes/dec8.h @@ -133,7 +133,6 @@ private: DECLARE_WRITE8_MEMBER(csilver_i8751_w); DECLARE_WRITE8_MEMBER(dec8_bank_w); DECLARE_WRITE8_MEMBER(ghostb_bank_w); - DECLARE_WRITE_LINE_MEMBER(ghostb_nmi_w); DECLARE_WRITE8_MEMBER(csilver_control_w); DECLARE_WRITE8_MEMBER(dec8_sound_w); DECLARE_WRITE8_MEMBER(csilver_adpcm_data_w); diff --git a/src/mame/includes/dragon.h b/src/mame/includes/dragon.h index 3e3d62d1853..1c8f38d8830 100644 --- a/src/mame/includes/dragon.h +++ b/src/mame/includes/dragon.h @@ -8,11 +8,11 @@ ***************************************************************************/ -#pragma once - #ifndef MAME_INCLUDES_DRAGON_H #define MAME_INCLUDES_DRAGON_H +#pragma once + #include "includes/coco12.h" #include "imagedev/printer.h" diff --git a/src/mame/includes/galaxold.h b/src/mame/includes/galaxold.h index e24108613b3..92fd3c0fdbb 100644 --- a/src/mame/includes/galaxold.h +++ b/src/mame/includes/galaxold.h @@ -317,7 +317,7 @@ public: void mooncrst_map(address_map &map); void ozon1_io_map(address_map &map); void ozon1_map(address_map &map); - void racknrol(address_map &map); + void racknrol_map(address_map &map); void racknrol_io(address_map &map); void rockclim_map(address_map &map); void scramb2_map(address_map &map); diff --git a/src/mame/includes/gng.h b/src/mame/includes/gng.h index 06940c6347a..3905f28b70b 100644 --- a/src/mame/includes/gng.h +++ b/src/mame/includes/gng.h @@ -33,8 +33,6 @@ public: private: DECLARE_WRITE8_MEMBER(gng_bankswitch_w); - DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); - DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE_LINE_MEMBER(ym_reset_w); DECLARE_READ8_MEMBER(diamond_hack_r); DECLARE_WRITE8_MEMBER(gng_fgvideoram_w); diff --git a/src/mame/includes/jpmsys5.h b/src/mame/includes/jpmsys5.h index 0e3cebb0731..c8efe8e8b22 100644 --- a/src/mame/includes/jpmsys5.h +++ b/src/mame/includes/jpmsys5.h @@ -42,7 +42,6 @@ public: DECLARE_WRITE_LINE_MEMBER(pia_irq); DECLARE_WRITE_LINE_MEMBER(u29_ca2_w); DECLARE_WRITE_LINE_MEMBER(u29_cb2_w); - DECLARE_WRITE_LINE_MEMBER(acia_irq); DECLARE_WRITE_LINE_MEMBER(a0_tx_w); DECLARE_WRITE_LINE_MEMBER(a1_tx_w); DECLARE_WRITE_LINE_MEMBER(a2_tx_w); diff --git a/src/mame/includes/kopunch.h b/src/mame/includes/kopunch.h index 1bc3cceafdc..b4581f1764d 100644 --- a/src/mame/includes/kopunch.h +++ b/src/mame/includes/kopunch.h @@ -5,6 +5,10 @@ Sega KO Punch *************************************************************************/ +#ifndef MAME_INCLUDES_KOPUNCH_H +#define MAME_INCLUDES_KOPUNCH_H + +#pragma once #include "emupal.h" @@ -65,3 +69,5 @@ private: uint8_t m_gfxbank; uint8_t m_scrollx; }; + +#endif // MAME_INCLUDES_KOPUNCH_H diff --git a/src/mame/includes/liberatr.h b/src/mame/includes/liberatr.h index 1d717f7cbd1..43139771e2d 100644 --- a/src/mame/includes/liberatr.h +++ b/src/mame/includes/liberatr.h @@ -54,8 +54,6 @@ private: DECLARE_READ8_MEMBER( bitmap_xy_r ); DECLARE_WRITE8_MEMBER( bitmap_xy_w ); - DECLARE_WRITE_LINE_MEMBER(planet_select_w); - uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); // early raster EAROM interface diff --git a/src/mame/includes/pgm2.h b/src/mame/includes/pgm2.h index a3fbbcc6d33..f935cda5b72 100644 --- a/src/mame/includes/pgm2.h +++ b/src/mame/includes/pgm2.h @@ -1,6 +1,5 @@ // license:BSD-3-Clause // copyright-holders:David Haywood - #ifndef MAME_INCLUDES_PGM2_H #define MAME_INCLUDES_PGM2_H diff --git a/src/mame/includes/super6.h b/src/mame/includes/super6.h index 1fecf3ae3aa..d9641bda2a3 100644 --- a/src/mame/includes/super6.h +++ b/src/mame/includes/super6.h @@ -31,19 +31,19 @@ class super6_state : public driver_device { public: super6_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, Z80_TAG), - m_ctc(*this, Z80CTC_TAG), - m_dart(*this, Z80DART_TAG), - m_dma(*this, Z80DMA_TAG), - m_pio(*this, Z80PIO_TAG), - m_fdc(*this, WD2793_TAG), - m_brg(*this, BR1945_TAG), - m_ram(*this, RAM_TAG), - m_floppy0(*this, WD2793_TAG":0"), - m_floppy1(*this, WD2793_TAG":1"), - m_rom(*this, Z80_TAG), - m_j7(*this, "J7") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, Z80_TAG) + , m_ctc(*this, Z80CTC_TAG) + , m_dart(*this, Z80DART_TAG) + , m_dma(*this, Z80DMA_TAG) + , m_pio(*this, Z80PIO_TAG) + , m_fdc(*this, WD2793_TAG) + , m_brg(*this, BR1945_TAG) + , m_ram(*this, RAM_TAG) + , m_floppy0(*this, WD2793_TAG":0") + , m_floppy1(*this, WD2793_TAG":1") + , m_rom(*this, Z80_TAG) + , m_j7(*this, "J7") { } void super6(machine_config &config); diff --git a/src/mame/includes/taito_b.h b/src/mame/includes/taito_b.h index 33b98ae3875..78e5fd2e3cc 100644 --- a/src/mame/includes/taito_b.h +++ b/src/mame/includes/taito_b.h @@ -56,18 +56,11 @@ public: void init_taito_b(); - DECLARE_INPUT_CHANGED_MEMBER(realpunc_sensor); - - DECLARE_VIDEO_START(realpunc); - uint32_t screen_update_realpunc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - +protected: DECLARE_WRITE8_MEMBER(player_12_coin_ctrl_w); - void realpunc_map(address_map &map); - void realpunc_hd63484_map(address_map &map); void sound_map(address_map &map); -private: DECLARE_WRITE8_MEMBER(bankswitch_w); template DECLARE_READ16_MEMBER(tracky_hi_r); template DECLARE_READ16_MEMBER(tracky_lo_r); @@ -79,10 +72,8 @@ private: DECLARE_READ16_MEMBER(player_34_coin_ctrl_r); DECLARE_WRITE16_MEMBER(player_34_coin_ctrl_w); DECLARE_WRITE16_MEMBER(spacedxo_tc0220ioc_w); - DECLARE_WRITE16_MEMBER(realpunc_output_w); DECLARE_WRITE16_MEMBER(hitice_pixelram_w); DECLARE_WRITE16_MEMBER(hitice_pixel_scroll_w); - DECLARE_WRITE16_MEMBER(realpunc_video_ctrl_w); DECLARE_WRITE8_MEMBER(mb87078_gain_changed); DECLARE_VIDEO_START(hitice); DECLARE_VIDEO_RESET(hitice); @@ -116,7 +107,6 @@ private: /* video-related */ std::unique_ptr m_pixel_bitmap; - std::unique_ptr m_realpunc_bitmap; uint16_t m_pixel_scroll[3]; @@ -126,8 +116,6 @@ private: uint16_t m_eep_latch; uint16_t m_coin_word; - uint16_t m_realpunc_video_ctrl; - /* devices */ required_device m_maincpu; required_device m_audiocpu; @@ -146,7 +134,7 @@ private: optional_ioport_array<2> m_trackx_io; optional_ioport_array<2> m_tracky_io; - void hitice_clear_pixel_bitmap( ); + void hitice_clear_pixel_bitmap(); }; class taitob_c_state : public taitob_state @@ -155,6 +143,22 @@ public: using taitob_state::taitob_state; static constexpr feature_type unemulated_features() { return feature::CAMERA; } void realpunc(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(realpunc_sensor); + +protected: + DECLARE_WRITE16_MEMBER(realpunc_output_w); + DECLARE_WRITE16_MEMBER(realpunc_video_ctrl_w); + + void realpunc_map(address_map &map); + void realpunc_hd63484_map(address_map &map); + + DECLARE_VIDEO_START(realpunc); + uint32_t screen_update_realpunc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + +private: + std::unique_ptr m_realpunc_bitmap; + uint16_t m_realpunc_video_ctrl; }; -#endif // MAME_INCLUDES_TAITO_B_H \ No newline at end of file +#endif // MAME_INCLUDES_TAITO_B_H diff --git a/src/mame/includes/triplhnt.h b/src/mame/includes/triplhnt.h index 674d538bdf3..b666bd3ee25 100644 --- a/src/mame/includes/triplhnt.h +++ b/src/mame/includes/triplhnt.h @@ -57,10 +57,6 @@ private: TIMER_HIT }; - DECLARE_WRITE_LINE_MEMBER(ram_2_w); - DECLARE_WRITE_LINE_MEMBER(sprite_zoom_w); - DECLARE_WRITE_LINE_MEMBER(sprite_bank_w); - DECLARE_WRITE_LINE_MEMBER(lamp1_w); DECLARE_WRITE_LINE_MEMBER(coin_lockout_w); DECLARE_WRITE_LINE_MEMBER(tape_control_w); diff --git a/src/mame/includes/v1050.h b/src/mame/includes/v1050.h index f8f61f59ff0..87ef69b3119 100644 --- a/src/mame/includes/v1050.h +++ b/src/mame/includes/v1050.h @@ -64,8 +64,8 @@ class v1050_state : public driver_device { public: - v1050_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + v1050_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, Z80_TAG), m_subcpu(*this, M6502_TAG), m_pic(*this, UPB8214_TAG), diff --git a/src/mame/includes/xbox_pci.h b/src/mame/includes/xbox_pci.h index 14800e22fc2..7d4f69dfd62 100644 --- a/src/mame/includes/xbox_pci.h +++ b/src/mame/includes/xbox_pci.h @@ -112,7 +112,7 @@ private: DECLARE_DEVICE_TYPE(MCPX_SMBUS, mcpx_smbus_device) #define MCFG_MCPX_SMBUS_INTERRUPT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_interrupt_handler(DEVCB_##_devcb); + downcast(*device).set_interrupt_handler(DEVCB_##_devcb); /* * OHCI USB Controller @@ -151,7 +151,7 @@ private: DECLARE_DEVICE_TYPE(MCPX_OHCI, mcpx_ohci_device) #define MCFG_MCPX_OHCI_INTERRUPT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_interrupt_handler(DEVCB_##_devcb); + downcast(*device).set_interrupt_handler(DEVCB_##_devcb); /* * Ethernet @@ -295,7 +295,7 @@ private: DECLARE_DEVICE_TYPE(MCPX_IDE, mcpx_ide_device) #define MCFG_MCPX_IDE_INTERRUPT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_interrupt_handler(DEVCB_##_devcb); + downcast(*device).set_interrupt_handler(DEVCB_##_devcb); /* * AGP Bridge @@ -352,6 +352,6 @@ DECLARE_DEVICE_TYPE(NV2A_GPU, nv2a_gpu_device) #define MCFG_MCPX_NV2A_GPU_CPU(_cpu_tag) \ downcast(device)->set_cpu_tag(_cpu_tag); #define MCFG_MCPX_NV2A_GPU_INTERRUPT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_interrupt_handler(DEVCB_##_devcb); + downcast(*device).set_interrupt_handler(DEVCB_##_devcb); #endif // MAME_INCLUDES_XBOX_PCI_H diff --git a/src/mame/includes/z88.h b/src/mame/includes/z88.h index ae644f4d746..cfe59c28a84 100644 --- a/src/mame/includes/z88.h +++ b/src/mame/includes/z88.h @@ -48,8 +48,6 @@ public: , m_screen(*this, "screen") , m_palette(*this, "palette") , m_blink(*this, "blink") - , m_mono(*this, "mono") - , m_speaker(*this, "speaker") , m_lines(*this, "LINE%u", 0U) , m_banks(*this, "bank%u", 1U) , m_carts(*this, "slot%u", 0U) @@ -100,8 +98,6 @@ private: required_device m_screen; required_device m_palette; required_device m_blink; - required_device m_mono; - required_device m_speaker; required_ioport_array<8> m_lines; required_memory_bank_array<5> m_banks; optional_device_array m_carts; @@ -117,4 +113,4 @@ private: uint8_t * m_ram_base; }; -#endif /* MAME_INCLUDES_Z88_H */ +#endif // MAME_INCLUDES_Z88_H diff --git a/src/mame/machine/315_5296.h b/src/mame/machine/315_5296.h index 053705970ee..7e51589b110 100644 --- a/src/mame/machine/315_5296.h +++ b/src/mame/machine/315_5296.h @@ -13,55 +13,6 @@ -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -// A to H 8-bit input ports -#define MCFG_315_5296_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); -#define MCFG_315_5296_IN_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); -#define MCFG_315_5296_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_in_pc_callback(DEVCB_##_devcb); -#define MCFG_315_5296_IN_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_in_pd_callback(DEVCB_##_devcb); -#define MCFG_315_5296_IN_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_in_pe_callback(DEVCB_##_devcb); -#define MCFG_315_5296_IN_PORTF_CB(_devcb) \ - devcb = &downcast(*device).set_in_pf_callback(DEVCB_##_devcb); -#define MCFG_315_5296_IN_PORTG_CB(_devcb) \ - devcb = &downcast(*device).set_in_pg_callback(DEVCB_##_devcb); -#define MCFG_315_5296_IN_PORTH_CB(_devcb) \ - devcb = &downcast(*device).set_in_ph_callback(DEVCB_##_devcb); - -// A to H 8-bit output ports -#define MCFG_315_5296_OUT_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); -#define MCFG_315_5296_OUT_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); -#define MCFG_315_5296_OUT_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_out_pc_callback(DEVCB_##_devcb); -#define MCFG_315_5296_OUT_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_out_pd_callback(DEVCB_##_devcb); -#define MCFG_315_5296_OUT_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_out_pe_callback(DEVCB_##_devcb); -#define MCFG_315_5296_OUT_PORTF_CB(_devcb) \ - devcb = &downcast(*device).set_out_pf_callback(DEVCB_##_devcb); -#define MCFG_315_5296_OUT_PORTG_CB(_devcb) \ - devcb = &downcast(*device).set_out_pg_callback(DEVCB_##_devcb); -#define MCFG_315_5296_OUT_PORTH_CB(_devcb) \ - devcb = &downcast(*device).set_out_ph_callback(DEVCB_##_devcb); - -// CNT output pins -#define MCFG_315_5296_OUT_CNT0_CB(_devcb) \ - devcb = &downcast(*device).set_out_cnt0_callback(DEVCB_##_devcb); -#define MCFG_315_5296_OUT_CNT1_CB(_devcb) \ - devcb = &downcast(*device).set_out_cnt1_callback(DEVCB_##_devcb); -#define MCFG_315_5296_OUT_CNT2_CB(_devcb) \ - devcb = &downcast(*device).set_out_cnt2_callback(DEVCB_##_devcb); - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -74,32 +25,32 @@ public: sega_315_5296_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration helpers - template devcb_base &set_in_pa_callback(Object &&cb) { return m_in_pa_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_pb_callback(Object &&cb) { return m_in_pb_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_pc_callback(Object &&cb) { return m_in_pc_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_pd_callback(Object &&cb) { return m_in_pd_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_pe_callback(Object &&cb) { return m_in_pe_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_pf_callback(Object &&cb) { return m_in_pf_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_pg_callback(Object &&cb) { return m_in_pg_cb.set_callback(std::forward(cb)); } - template devcb_base &set_in_ph_callback(Object &&cb) { return m_in_ph_cb.set_callback(std::forward(cb)); } + auto in_pa_callback() { return m_in_pa_cb.bind(); } + auto in_pb_callback() { return m_in_pb_cb.bind(); } + auto in_pc_callback() { return m_in_pc_cb.bind(); } + auto in_pd_callback() { return m_in_pd_cb.bind(); } + auto in_pe_callback() { return m_in_pe_cb.bind(); } + auto in_pf_callback() { return m_in_pf_cb.bind(); } + auto in_pg_callback() { return m_in_pg_cb.bind(); } + auto in_ph_callback() { return m_in_ph_cb.bind(); } - template devcb_base &set_out_pa_callback(Object &&cb) { return m_out_pa_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_pb_callback(Object &&cb) { return m_out_pb_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_pc_callback(Object &&cb) { return m_out_pc_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_pd_callback(Object &&cb) { return m_out_pd_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_pe_callback(Object &&cb) { return m_out_pe_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_pf_callback(Object &&cb) { return m_out_pf_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_pg_callback(Object &&cb) { return m_out_pg_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_ph_callback(Object &&cb) { return m_out_ph_cb.set_callback(std::forward(cb)); } + auto out_pa_callback() { return m_out_pa_cb.bind(); } + auto out_pb_callback() { return m_out_pb_cb.bind(); } + auto out_pc_callback() { return m_out_pc_cb.bind(); } + auto out_pd_callback() { return m_out_pd_cb.bind(); } + auto out_pe_callback() { return m_out_pe_cb.bind(); } + auto out_pf_callback() { return m_out_pf_cb.bind(); } + auto out_pg_callback() { return m_out_pg_cb.bind(); } + auto out_ph_callback() { return m_out_ph_cb.bind(); } - template devcb_base &set_out_cnt0_callback(Object &&cb) { return m_out_cnt0_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_cnt1_callback(Object &&cb) { return m_out_cnt1_cb.set_callback(std::forward(cb)); } - template devcb_base &set_out_cnt2_callback(Object &&cb) { return m_out_cnt2_cb.set_callback(std::forward(cb)); } + auto out_cnt0_callback() { return m_out_cnt0_cb.bind(); } + auto out_cnt1_callback() { return m_out_cnt1_cb.bind(); } + auto out_cnt2_callback() { return m_out_cnt2_cb.bind(); } - DECLARE_READ8_MEMBER( read ); - DECLARE_WRITE8_MEMBER( write ); + DECLARE_READ8_MEMBER(read); + DECLARE_WRITE8_MEMBER(write); - uint8_t debug_peek_output(offs_t offset) { return m_output_latch[offset & 7]; } + uint8_t debug_peek_output(offs_t offset) const { return m_output_latch[offset & 7]; } protected: // device-level overrides @@ -141,5 +92,4 @@ private: // device type definition DECLARE_DEVICE_TYPE(SEGA_315_5296, sega_315_5296_device) - #endif // MAME_MACHINE_315_5296_H diff --git a/src/mame/machine/315_5338a.h b/src/mame/machine/315_5338a.h index c8ece88c109..7c2a7ea04b6 100644 --- a/src/mame/machine/315_5338a.h +++ b/src/mame/machine/315_5338a.h @@ -24,59 +24,6 @@ #pragma once -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_315_5338A_READ_CB(_devcb) \ - devcb = &downcast(*device).set_read_callback(DEVCB_##_devcb); - -#define MCFG_315_5338A_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_write_callback(DEVCB_##_devcb); - -#define MCFG_315_5338A_IN_PA_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<0>(DEVCB_##_devcb); - -#define MCFG_315_5338A_OUT_PA_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<0>(DEVCB_##_devcb); - -#define MCFG_315_5338A_IN_PB_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<1>(DEVCB_##_devcb); - -#define MCFG_315_5338A_OUT_PB_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<1>(DEVCB_##_devcb); - -#define MCFG_315_5338A_IN_PC_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<2>(DEVCB_##_devcb); - -#define MCFG_315_5338A_OUT_PC_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<2>(DEVCB_##_devcb); - -#define MCFG_315_5338A_IN_PD_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<3>(DEVCB_##_devcb); - -#define MCFG_315_5338A_OUT_PD_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<3>(DEVCB_##_devcb); - -#define MCFG_315_5338A_IN_PE_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<4>(DEVCB_##_devcb); - -#define MCFG_315_5338A_OUT_PE_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<4>(DEVCB_##_devcb); - -#define MCFG_315_5338A_IN_PF_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<5>(DEVCB_##_devcb); - -#define MCFG_315_5338A_OUT_PF_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<5>(DEVCB_##_devcb); - -#define MCFG_315_5338A_IN_PG_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<6>(DEVCB_##_devcb); - -#define MCFG_315_5338A_OUT_PG_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<6>(DEVCB_##_devcb); - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -88,17 +35,25 @@ public: sega_315_5338a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration - template devcb_base &set_read_callback(Object &&cb) - { return m_read_cb.set_callback(std::forward(cb)); } + auto read_callback() { return m_read_cb.bind(); } - template devcb_base &set_write_callback(Object &&cb) - { return m_write_cb.set_callback(std::forward(cb)); } + auto write_callback() { return m_write_cb.bind(); } - template devcb_base &set_out_callback(Object &&cb) - { return m_out_port_cb[Port].set_callback(std::forward(cb)); } + auto in_pa_callback() { return m_in_port_cb[0].bind(); } + auto in_pb_callback() { return m_in_port_cb[1].bind(); } + auto in_pc_callback() { return m_in_port_cb[2].bind(); } + auto in_pd_callback() { return m_in_port_cb[3].bind(); } + auto in_pe_callback() { return m_in_port_cb[4].bind(); } + auto in_pf_callback() { return m_in_port_cb[5].bind(); } + auto in_pg_callback() { return m_in_port_cb[6].bind(); } - template devcb_base &set_in_callback(Object &&cb) - { return m_in_port_cb[Port].set_callback(std::forward(cb)); } + auto out_pa_callback() { return m_out_port_cb[0].bind(); } + auto out_pb_callback() { return m_out_port_cb[1].bind(); } + auto out_pc_callback() { return m_out_port_cb[2].bind(); } + auto out_pd_callback() { return m_out_port_cb[3].bind(); } + auto out_pe_callback() { return m_out_port_cb[4].bind(); } + auto out_pf_callback() { return m_out_port_cb[5].bind(); } + auto out_pg_callback() { return m_out_port_cb[6].bind(); } DECLARE_READ8_MEMBER(read); DECLARE_WRITE8_MEMBER(write); diff --git a/src/mame/machine/315_5649.h b/src/mame/machine/315_5649.h index 60037925803..ad3835d0032 100644 --- a/src/mame/machine/315_5649.h +++ b/src/mame/machine/315_5649.h @@ -19,82 +19,82 @@ //************************************************************************** #define MCFG_315_5649_IN_PA_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_callback<0>(DEVCB_##_devcb); + downcast(*device).set_in_port_callback<0>(DEVCB_##_devcb); #define MCFG_315_5649_OUT_PA_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_port_callback<0>(DEVCB_##_devcb); #define MCFG_315_5649_IN_PB_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_callback<1>(DEVCB_##_devcb); + downcast(*device).set_in_port_callback<1>(DEVCB_##_devcb); #define MCFG_315_5649_OUT_PB_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_port_callback<1>(DEVCB_##_devcb); #define MCFG_315_5649_IN_PC_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_callback<2>(DEVCB_##_devcb); + downcast(*device).set_in_port_callback<2>(DEVCB_##_devcb); #define MCFG_315_5649_OUT_PC_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_callback<2>(DEVCB_##_devcb); + downcast(*device).set_out_port_callback<2>(DEVCB_##_devcb); #define MCFG_315_5649_IN_PD_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_callback<3>(DEVCB_##_devcb); + downcast(*device).set_in_port_callback<3>(DEVCB_##_devcb); #define MCFG_315_5649_OUT_PD_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_callback<3>(DEVCB_##_devcb); + downcast(*device).set_out_port_callback<3>(DEVCB_##_devcb); #define MCFG_315_5649_IN_PE_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_callback<4>(DEVCB_##_devcb); + downcast(*device).set_in_port_callback<4>(DEVCB_##_devcb); #define MCFG_315_5649_OUT_PE_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_callback<4>(DEVCB_##_devcb); + downcast(*device).set_out_port_callback<4>(DEVCB_##_devcb); #define MCFG_315_5649_IN_PF_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_callback<5>(DEVCB_##_devcb); + downcast(*device).set_in_port_callback<5>(DEVCB_##_devcb); #define MCFG_315_5649_OUT_PF_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_callback<5>(DEVCB_##_devcb); + downcast(*device).set_out_port_callback<5>(DEVCB_##_devcb); #define MCFG_315_5649_IN_PG_CB(_devcb) \ - devcb = &downcast(*device).set_in_port_callback<6>(DEVCB_##_devcb); + downcast(*device).set_in_port_callback<6>(DEVCB_##_devcb); #define MCFG_315_5649_OUT_PG_CB(_devcb) \ - devcb = &downcast(*device).set_out_port_callback<6>(DEVCB_##_devcb); + downcast(*device).set_out_port_callback<6>(DEVCB_##_devcb); #define MCFG_315_5649_AN0_CB(_devcb) \ - devcb = &downcast(*device).set_an_port_callback<0>(DEVCB_##_devcb); + downcast(*device).set_an_port_callback<0>(DEVCB_##_devcb); #define MCFG_315_5649_AN1_CB(_devcb) \ - devcb = &downcast(*device).set_an_port_callback<1>(DEVCB_##_devcb); + downcast(*device).set_an_port_callback<1>(DEVCB_##_devcb); #define MCFG_315_5649_AN2_CB(_devcb) \ - devcb = &downcast(*device).set_an_port_callback<2>(DEVCB_##_devcb); + downcast(*device).set_an_port_callback<2>(DEVCB_##_devcb); #define MCFG_315_5649_AN3_CB(_devcb) \ - devcb = &downcast(*device).set_an_port_callback<3>(DEVCB_##_devcb); + downcast(*device).set_an_port_callback<3>(DEVCB_##_devcb); #define MCFG_315_5649_AN4_CB(_devcb) \ - devcb = &downcast(*device).set_an_port_callback<4>(DEVCB_##_devcb); + downcast(*device).set_an_port_callback<4>(DEVCB_##_devcb); #define MCFG_315_5649_AN5_CB(_devcb) \ - devcb = &downcast(*device).set_an_port_callback<5>(DEVCB_##_devcb); + downcast(*device).set_an_port_callback<5>(DEVCB_##_devcb); #define MCFG_315_5649_AN6_CB(_devcb) \ - devcb = &downcast(*device).set_an_port_callback<6>(DEVCB_##_devcb); + downcast(*device).set_an_port_callback<6>(DEVCB_##_devcb); #define MCFG_315_5649_AN7_CB(_devcb) \ - devcb = &downcast(*device).set_an_port_callback<7>(DEVCB_##_devcb); + downcast(*device).set_an_port_callback<7>(DEVCB_##_devcb); #define MCFG_315_5649_SERIAL_CH1_READ_CB(_devcb) \ - devcb = &downcast(*device).set_serial_rd_callback<0>(DEVCB_##_devcb); + downcast(*device).set_serial_rd_callback<0>(DEVCB_##_devcb); #define MCFG_315_5649_SERIAL_CH1_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_serial_wr_callback<0>(DEVCB_##_devcb); + downcast(*device).set_serial_wr_callback<0>(DEVCB_##_devcb); #define MCFG_315_5649_SERIAL_CH2_READ_CB(_devcb) \ - devcb = &downcast(*device).set_serial_rd_callback<1>(DEVCB_##_devcb); + downcast(*device).set_serial_rd_callback<1>(DEVCB_##_devcb); #define MCFG_315_5649_SERIAL_CH2_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_serial_wr_callback<1>(DEVCB_##_devcb); + downcast(*device).set_serial_wr_callback<1>(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/machine/6883sam.h b/src/mame/machine/6883sam.h index 61e5fd27033..1e5669ef246 100644 --- a/src/mame/machine/6883sam.h +++ b/src/mame/machine/6883sam.h @@ -15,7 +15,7 @@ #define MCFG_SAM6883_RES_CALLBACK(_read) \ - devcb = &downcast(*device).set_res_rd_callback(DEVCB_##_read); + downcast(*device).set_res_rd_callback(DEVCB_##_read); //************************************************************************** diff --git a/src/mame/machine/abc80kb.h b/src/mame/machine/abc80kb.h index b88cf9c8a20..7e26881183d 100644 --- a/src/mame/machine/abc80kb.h +++ b/src/mame/machine/abc80kb.h @@ -25,7 +25,7 @@ //************************************************************************** #define MCFG_ABC80_KEYBOARD_KEYDOWN_CALLBACK(_write) \ - devcb = &downcast(*device).set_keydown_wr_callback(DEVCB_##_write); + downcast(*device).set_keydown_wr_callback(DEVCB_##_write); diff --git a/src/mame/machine/acs8600_ics.cpp b/src/mame/machine/acs8600_ics.cpp index 3b63cc119aa..944ea30c1f7 100644 --- a/src/mame/machine/acs8600_ics.cpp +++ b/src/mame/machine/acs8600_ics.cpp @@ -15,9 +15,10 @@ DEFINE_DEVICE_TYPE(ACS8600_ICS, acs8600_ics_device, "acs8600_ics", "Altos ACS860 acs8600_ics_device::acs8600_ics_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ACS8600_ICS, tag, owner, clock), m_icscpu(*this, "icscpu"), - m_maincpu(*this, finder_base::DUMMY_TAG), m_out_irq1_func(*this), - m_out_irq2_func(*this) + m_out_irq2_func(*this), + m_host_space_device(*this, finder_base::DUMMY_TAG), + m_host_space_index(-1) { } @@ -96,35 +97,37 @@ static const z80_daisy_config ics_daisy_chain[] = }; MACHINE_CONFIG_START(acs8600_ics_device::device_add_mconfig) - MCFG_DEVICE_ADD("icscpu", Z80, XTAL(4'000'000)) + MCFG_DEVICE_ADD(m_icscpu, Z80, 4_MHz_XTAL) MCFG_DEVICE_PROGRAM_MAP(ics_mem) MCFG_DEVICE_IO_MAP(ics_io) MCFG_Z80_DAISY_CHAIN(ics_daisy_chain) - MCFG_DEVICE_ADD("stc1", AM9513, XTAL(1'843'200)) - MCFG_AM9513_OUT1_CALLBACK(WRITELINE("sio1", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio1", z80sio_device, txca_w)) - MCFG_AM9513_OUT2_CALLBACK(WRITELINE("sio1", z80sio_device, rxtxcb_w)) - MCFG_AM9513_OUT3_CALLBACK(WRITELINE("sio2", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio2", z80sio_device, txca_w)) - MCFG_AM9513_OUT4_CALLBACK(WRITELINE("sio2", z80sio_device, rxtxcb_w)) - MCFG_AM9513_OUT5_CALLBACK(WRITELINE("sio3", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio3", z80sio_device, txca_w)) - MCFG_DEVICE_ADD("stc2", AM9513, XTAL(1'843'200)) - MCFG_AM9513_OUT1_CALLBACK(WRITELINE("sio3", z80sio_device, rxtxcb_w)) - MCFG_AM9513_OUT2_CALLBACK(WRITELINE("sio4", z80sio_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("sio4", z80sio_device, txca_w)) - MCFG_AM9513_OUT3_CALLBACK(WRITELINE("sio4", z80sio_device, rxtxcb_w)) + am9513_device &stc1(AM9513(config, "stc1", 1.8432_MHz_XTAL)); + stc1.out1_cb().set("sio1", FUNC(z80sio_device::rxca_w)); + stc1.out1_cb().append("sio1", FUNC(z80sio_device::txca_w)); + stc1.out2_cb().set("sio1", FUNC(z80sio_device::rxtxcb_w)); + stc1.out3_cb().set("sio2", FUNC(z80sio_device::rxca_w)); + stc1.out3_cb().append("sio2", FUNC(z80sio_device::txca_w)); + stc1.out4_cb().set("sio2", FUNC(z80sio_device::rxtxcb_w)); + stc1.out5_cb().set("sio3", FUNC(z80sio_device::rxca_w)); + stc1.out5_cb().append("sio3", FUNC(z80sio_device::txca_w)); + + am9513_device &stc2(AM9513(config, "stc2", 1.8432_MHz_XTAL)); + stc2.out1_cb().set("sio3", FUNC(z80sio_device::rxtxcb_w)); + stc2.out2_cb().set("sio4", FUNC(z80sio_device::rxca_w)); + stc2.out2_cb().append("sio4", FUNC(z80sio_device::txca_w)); + stc2.out3_cb().set("sio4", FUNC(z80sio_device::rxtxcb_w)); + + z80sio_device &sio1(Z80SIO(config, "sio1", 8_MHz_XTAL/2)); + sio1.out_txda_callback().set("rs2321a", FUNC(rs232_port_device::write_txd)); + sio1.out_dtra_callback().set("rs2321a", FUNC(rs232_port_device::write_dtr)); + sio1.out_rtsa_callback().set("rs2321a", FUNC(rs232_port_device::write_rts)); + sio1.out_txdb_callback().set("rs2321b", FUNC(rs232_port_device::write_txd)); + sio1.out_dtrb_callback().set("rs2321b", FUNC(rs232_port_device::write_dtr)); + sio1.out_rtsb_callback().set("rs2321b", FUNC(rs232_port_device::write_rts)); + sio1.out_int_callback().set_inputline(m_icscpu, INPUT_LINE_IRQ0); + sio1.set_cputag(m_icscpu); - MCFG_DEVICE_ADD("sio1", Z80SIO, XTAL(8'000'000)/2) - MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("rs2321a", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE("rs2321a", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE("rs2321a", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("rs2321b", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE("rs2321b", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("rs2321b", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("icscpu", INPUT_LINE_IRQ0)) - MCFG_Z80SIO_CPU("icscpu") MCFG_DEVICE_ADD("rs2321a", RS232_PORT, default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(WRITELINE("sio1", z80sio_device, rxa_w)) MCFG_RS232_DCD_HANDLER(WRITELINE("sio1", z80sio_device, dcda_w)) @@ -136,15 +139,16 @@ MACHINE_CONFIG_START(acs8600_ics_device::device_add_mconfig) MCFG_RS232_DCD_HANDLER(WRITELINE("sio1", z80sio_device, dcdb_w)) MCFG_RS232_CTS_HANDLER(WRITELINE("sio1", z80sio_device, ctsb_w)) - MCFG_DEVICE_ADD("sio2", Z80SIO, XTAL(8'000'000)/2) - MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("rs2322a", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE("rs2322a", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE("rs2322a", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("rs2322b", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE("rs2322b", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("rs2322b", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("icscpu", INPUT_LINE_IRQ0)) - MCFG_Z80SIO_CPU("icscpu") + z80sio_device &sio2(Z80SIO(config, "sio2", 8_MHz_XTAL/2)); + sio2.out_txda_callback().set("rs2322a", FUNC(rs232_port_device::write_txd)); + sio2.out_dtra_callback().set("rs2322a", FUNC(rs232_port_device::write_dtr)); + sio2.out_rtsa_callback().set("rs2322a", FUNC(rs232_port_device::write_rts)); + sio2.out_txdb_callback().set("rs2322b", FUNC(rs232_port_device::write_txd)); + sio2.out_dtrb_callback().set("rs2322b", FUNC(rs232_port_device::write_dtr)); + sio2.out_rtsb_callback().set("rs2322b", FUNC(rs232_port_device::write_rts)); + sio2.out_int_callback().set_inputline(m_icscpu, INPUT_LINE_IRQ0); + sio2.set_cputag(m_icscpu); + MCFG_DEVICE_ADD("rs2322a", RS232_PORT, default_rs232_devices, nullptr) MCFG_RS232_RXD_HANDLER(WRITELINE("sio2", z80sio_device, rxa_w)) MCFG_RS232_DCD_HANDLER(WRITELINE("sio2", z80sio_device, dcda_w)) @@ -155,15 +159,16 @@ MACHINE_CONFIG_START(acs8600_ics_device::device_add_mconfig) MCFG_RS232_DCD_HANDLER(WRITELINE("sio2", z80sio_device, dcdb_w)) MCFG_RS232_CTS_HANDLER(WRITELINE("sio2", z80sio_device, ctsb_w)) - MCFG_DEVICE_ADD("sio3", Z80SIO, XTAL(8'000'000)/2) - MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("rs2323a", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE("rs2323a", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE("rs2323a", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("rs2323b", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE("rs2323b", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("rs2323b", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("icscpu", INPUT_LINE_IRQ0)) - MCFG_Z80SIO_CPU("icscpu") + z80sio_device &sio3(Z80SIO(config, "sio3", 8_MHz_XTAL/2)); + sio3.out_txda_callback().set("rs2323a", FUNC(rs232_port_device::write_txd)); + sio3.out_dtra_callback().set("rs2323a", FUNC(rs232_port_device::write_dtr)); + sio3.out_rtsa_callback().set("rs2323a", FUNC(rs232_port_device::write_rts)); + sio3.out_txdb_callback().set("rs2323b", FUNC(rs232_port_device::write_txd)); + sio3.out_dtrb_callback().set("rs2323b", FUNC(rs232_port_device::write_dtr)); + sio3.out_rtsb_callback().set("rs2323b", FUNC(rs232_port_device::write_rts)); + sio3.out_int_callback().set_inputline(m_icscpu, INPUT_LINE_IRQ0); + sio3.set_cputag(m_icscpu); + MCFG_DEVICE_ADD("rs2323a", RS232_PORT, default_rs232_devices, nullptr) MCFG_RS232_RXD_HANDLER(WRITELINE("sio3", z80sio_device, rxa_w)) MCFG_RS232_DCD_HANDLER(WRITELINE("sio3", z80sio_device, dcda_w)) @@ -174,15 +179,16 @@ MACHINE_CONFIG_START(acs8600_ics_device::device_add_mconfig) MCFG_RS232_DCD_HANDLER(WRITELINE("sio3", z80sio_device, dcdb_w)) MCFG_RS232_CTS_HANDLER(WRITELINE("sio3", z80sio_device, ctsb_w)) - MCFG_DEVICE_ADD("sio4", Z80SIO, XTAL(8'000'000)/2) - MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("rs2324a", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE("rs2324a", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE("rs2324a", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE("rs2324b", rs232_port_device, write_txd)) - MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE("rs2324b", rs232_port_device, write_dtr)) - MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE("rs2324b", rs232_port_device, write_rts)) - MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("icscpu", INPUT_LINE_IRQ0)) - MCFG_Z80SIO_CPU("icscpu") + z80sio_device &sio4(Z80SIO(config, "sio4", 8_MHz_XTAL/2)); + sio4.out_txda_callback().set("rs2324a", FUNC(rs232_port_device::write_txd)); + sio4.out_dtra_callback().set("rs2324a", FUNC(rs232_port_device::write_dtr)); + sio4.out_rtsa_callback().set("rs2324a", FUNC(rs232_port_device::write_rts)); + sio4.out_txdb_callback().set("rs2324b", FUNC(rs232_port_device::write_txd)); + sio4.out_dtrb_callback().set("rs2324b", FUNC(rs232_port_device::write_dtr)); + sio4.out_rtsb_callback().set("rs2324b", FUNC(rs232_port_device::write_rts)); + sio4.out_int_callback().set_inputline(m_icscpu, INPUT_LINE_IRQ0); + sio4.set_cputag(m_icscpu); + MCFG_DEVICE_ADD("rs2324a", RS232_PORT, default_rs232_devices, nullptr) MCFG_RS232_RXD_HANDLER(WRITELINE("sio4", z80sio_device, rxa_w)) MCFG_RS232_DCD_HANDLER(WRITELINE("sio4", z80sio_device, dcda_w)) @@ -194,10 +200,14 @@ MACHINE_CONFIG_START(acs8600_ics_device::device_add_mconfig) MCFG_RS232_CTS_HANDLER(WRITELINE("sio4", z80sio_device, ctsb_w)) MACHINE_CONFIG_END -void acs8600_ics_device::device_start() +void acs8600_ics_device::device_resolve_objects() { - m_maincpu_mem = &m_maincpu->space(AS_PROGRAM); + m_maincpu_mem = &m_host_space_device->space(m_host_space_index); m_out_irq1_func.resolve_safe(); m_out_irq2_func.resolve_safe(); } +void acs8600_ics_device::device_start() +{ +} + diff --git a/src/mame/machine/acs8600_ics.h b/src/mame/machine/acs8600_ics.h index ef8f99c56bd..1ca1f623245 100644 --- a/src/mame/machine/acs8600_ics.h +++ b/src/mame/machine/acs8600_ics.h @@ -1,55 +1,48 @@ // license:BSD-3-Clause // copyright-holders:Carl -#ifndef MAME_MACHINE_ACS8600_ICS_H_ -#define MAME_MACHINE_ACS8600_ICS_H_ +#ifndef MAME_MACHINE_ACS8600_ICS_H +#define MAME_MACHINE_ACS8600_ICS_H #pragma once + class acs8600_ics_device : public device_t { public: - template - acs8600_ics_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&maincpu_tag) - : acs8600_ics_device(mconfig, tag, owner, (uint32_t)0) - { - m_maincpu.set_tag(std::forward(maincpu_tag)); - } - acs8600_ics_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + DECLARE_WRITE_LINE_MEMBER(attn_w); + + auto irq1_callback() { return m_out_irq1_func.bind(); } + auto irq2_callback() { return m_out_irq2_func.bind(); } + template void set_host_space(T &&tag, int index) { m_host_space_device.set_tag(std::forward(tag)); m_host_space_index = index; } + const tiny_rom_entry *device_rom_region() const override; + +protected: + virtual void device_resolve_objects() override; + virtual void device_start() override; + virtual void device_add_mconfig(machine_config &config) override; + DECLARE_WRITE8_MEMBER(hiaddr_w); DECLARE_WRITE8_MEMBER(ctrl_w); DECLARE_READ8_MEMBER(hostram_r); DECLARE_WRITE8_MEMBER(hostram_w); - DECLARE_WRITE_LINE_MEMBER(attn_w); - - template devcb_base &set_irq1_callback(Object &&cb) { return m_out_irq1_func.set_callback(std::forward(cb)); } - template devcb_base &set_irq2_callback(Object &&cb) { return m_out_irq2_func.set_callback(std::forward(cb)); } - const tiny_rom_entry *device_rom_region() const override; void ics_io(address_map &map); void ics_mem(address_map &map); -protected: - virtual void device_start() override; - virtual void device_add_mconfig(machine_config &config) override; private: required_device m_icscpu; - required_device m_maincpu; devcb_write_line m_out_irq1_func; devcb_write_line m_out_irq2_func; + required_device m_host_space_device; + int m_host_space_index; address_space *m_maincpu_mem; u8 m_hiaddr; u8 m_ctrl; }; -#define MCFG_ACS8600_ICS_IRQ1(_irq_line) \ - devcb = &downcast(*device).set_irq1_callback(DEVCB_##_irq_line); - -#define MCFG_ACS8600_ICS_IRQ2(_irq_line) \ - devcb = &downcast(*device).set_irq2_callback(DEVCB_##_irq_line); - DECLARE_DEVICE_TYPE(ACS8600_ICS, acs8600_ics_device) -#endif +#endif // MAME_MACHINE_ACS8600_ICS_H diff --git a/src/mame/machine/apollo.cpp b/src/mame/machine/apollo.cpp index 323e487f108..5fad90fa5d5 100644 --- a/src/mame/machine/apollo.cpp +++ b/src/mame/machine/apollo.cpp @@ -1084,14 +1084,14 @@ MACHINE_CONFIG_START(apollo_state::common) MCFG_I8237_OUT_DACK_2_CB(WRITELINE(*this, apollo_state, pc_dack6_w)) MCFG_I8237_OUT_DACK_3_CB(WRITELINE(*this, apollo_state, pc_dack7_w)) - MCFG_DEVICE_ADD(APOLLO_PIC1_TAG, PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, apollo_state, apollo_pic8259_master_set_int_line)) - MCFG_PIC8259_IN_SP_CB(VCC) - MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, apollo_state, apollo_pic8259_get_slave_ack)) + PIC8259(config, m_pic8259_master, 0); + m_pic8259_master->out_int_callback().set(FUNC(apollo_state::apollo_pic8259_master_set_int_line)); + m_pic8259_master->in_sp_callback().set_constant(1); + m_pic8259_master->read_slave_ack_callback().set(FUNC(apollo_state::apollo_pic8259_get_slave_ack)); - MCFG_DEVICE_ADD(APOLLO_PIC2_TAG, PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, apollo_state, apollo_pic8259_slave_set_int_line)) - MCFG_PIC8259_IN_SP_CB(GND) + PIC8259(config, m_pic8259_slave, 0); + m_pic8259_slave->out_int_callback().set(FUNC(apollo_state::apollo_pic8259_slave_set_int_line)); + m_pic8259_slave->in_sp_callback().set_constant(0); MCFG_DEVICE_ADD(APOLLO_PTM_TAG, PTM6840, 0) MCFG_PTM6840_EXTERNAL_CLOCKS(250000, 125000, 62500) diff --git a/src/mame/machine/apollo_kbd.h b/src/mame/machine/apollo_kbd.h index aba8281ba3a..97221e62fa9 100644 --- a/src/mame/machine/apollo_kbd.h +++ b/src/mame/machine/apollo_kbd.h @@ -32,10 +32,10 @@ //************************************************************************** #define MCFG_APOLLO_KBD_TX_CALLBACK(_cb) \ - devcb = &downcast(*device).set_tx_cb(DEVCB_##_cb); + downcast(*device).set_tx_cb(DEVCB_##_cb); #define MCFG_APOLLO_KBD_GERMAN_CALLBACK(_cb) \ - devcb = &downcast(*device).set_german_cb(DEVCB_##_cb); + downcast(*device).set_german_cb(DEVCB_##_cb); //************************************************************************** diff --git a/src/mame/machine/apricotkb.h b/src/mame/machine/apricotkb.h index 50c6a9cfb15..530346608fd 100644 --- a/src/mame/machine/apricotkb.h +++ b/src/mame/machine/apricotkb.h @@ -27,7 +27,7 @@ //************************************************************************** #define MCFG_APRICOT_KEYBOARD_TXD_CALLBACK(_write) \ - devcb = &downcast(*device).set_tcd_wr_callback(DEVCB_##_write); + downcast(*device).set_tcd_wr_callback(DEVCB_##_write); diff --git a/src/mame/machine/at.cpp b/src/mame/machine/at.cpp index 6057d870502..97ea32b571d 100644 --- a/src/mame/machine/at.cpp +++ b/src/mame/machine/at.cpp @@ -95,39 +95,39 @@ MACHINE_CONFIG_START(at_mb_device::device_add_mconfig) MCFG_I8237_OUT_DACK_2_CB(WRITELINE(*this, at_mb_device, dack6_w)) MCFG_I8237_OUT_DACK_3_CB(WRITELINE(*this, at_mb_device, dack7_w)) - MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(INPUTLINE(":maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) - MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, at_mb_device, get_slave_ack)) + pic8259_device &pic8259_master(PIC8259(config, "pic8259_master", 0)); + pic8259_master.out_int_callback().set_inputline(":maincpu", 0); + pic8259_master.in_sp_callback().set_constant(1); + pic8259_master.read_slave_ack_callback().set(FUNC(at_mb_device::get_slave_ack)); - MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir2_w)) - MCFG_PIC8259_IN_SP_CB(GND) + PIC8259(config, m_pic8259_slave, 0); + m_pic8259_slave->out_int_callback().set("pic8259_master", FUNC(pic8259_device::ir2_w)); + m_pic8259_slave->in_sp_callback().set_constant(0); MCFG_DEVICE_ADD("isabus", ISA16, 0) MCFG_ISA16_CPU(":maincpu") - MCFG_ISA_OUT_IRQ2_CB(WRITELINE("pic8259_slave", pic8259_device, ir2_w)) // in place of irq 2 on at irq 9 is used + MCFG_ISA_OUT_IRQ2_CB(WRITELINE(m_pic8259_slave, pic8259_device, ir2_w)) // in place of irq 2 on at irq 9 is used MCFG_ISA_OUT_IRQ3_CB(WRITELINE("pic8259_master", pic8259_device, ir3_w)) MCFG_ISA_OUT_IRQ4_CB(WRITELINE("pic8259_master", pic8259_device, ir4_w)) MCFG_ISA_OUT_IRQ5_CB(WRITELINE("pic8259_master", pic8259_device, ir5_w)) MCFG_ISA_OUT_IRQ6_CB(WRITELINE("pic8259_master", pic8259_device, ir6_w)) MCFG_ISA_OUT_IRQ7_CB(WRITELINE("pic8259_master", pic8259_device, ir7_w)) - MCFG_ISA_OUT_IRQ10_CB(WRITELINE("pic8259_slave", pic8259_device, ir3_w)) - MCFG_ISA_OUT_IRQ11_CB(WRITELINE("pic8259_slave", pic8259_device, ir4_w)) - MCFG_ISA_OUT_IRQ12_CB(WRITELINE("pic8259_slave", pic8259_device, ir5_w)) - MCFG_ISA_OUT_IRQ14_CB(WRITELINE("pic8259_slave", pic8259_device, ir6_w)) - MCFG_ISA_OUT_IRQ15_CB(WRITELINE("pic8259_slave", pic8259_device, ir7_w)) - MCFG_ISA_OUT_DRQ0_CB(WRITELINE("dma8237_1", am9517a_device, dreq0_w)) - MCFG_ISA_OUT_DRQ1_CB(WRITELINE("dma8237_1", am9517a_device, dreq1_w)) - MCFG_ISA_OUT_DRQ2_CB(WRITELINE("dma8237_1", am9517a_device, dreq2_w)) - MCFG_ISA_OUT_DRQ3_CB(WRITELINE("dma8237_1", am9517a_device, dreq3_w)) - MCFG_ISA_OUT_DRQ5_CB(WRITELINE("dma8237_2", am9517a_device, dreq1_w)) - MCFG_ISA_OUT_DRQ6_CB(WRITELINE("dma8237_2", am9517a_device, dreq2_w)) - MCFG_ISA_OUT_DRQ7_CB(WRITELINE("dma8237_2", am9517a_device, dreq3_w)) + MCFG_ISA_OUT_IRQ10_CB(WRITELINE(m_pic8259_slave, pic8259_device, ir3_w)) + MCFG_ISA_OUT_IRQ11_CB(WRITELINE(m_pic8259_slave, pic8259_device, ir4_w)) + MCFG_ISA_OUT_IRQ12_CB(WRITELINE(m_pic8259_slave, pic8259_device, ir5_w)) + MCFG_ISA_OUT_IRQ14_CB(WRITELINE(m_pic8259_slave, pic8259_device, ir6_w)) + MCFG_ISA_OUT_IRQ15_CB(WRITELINE(m_pic8259_slave, pic8259_device, ir7_w)) + MCFG_ISA_OUT_DRQ0_CB(WRITELINE(m_dma8237_1, am9517a_device, dreq0_w)) + MCFG_ISA_OUT_DRQ1_CB(WRITELINE(m_dma8237_1, am9517a_device, dreq1_w)) + MCFG_ISA_OUT_DRQ2_CB(WRITELINE(m_dma8237_1, am9517a_device, dreq2_w)) + MCFG_ISA_OUT_DRQ3_CB(WRITELINE(m_dma8237_1, am9517a_device, dreq3_w)) + MCFG_ISA_OUT_DRQ5_CB(WRITELINE(m_dma8237_2, am9517a_device, dreq1_w)) + MCFG_ISA_OUT_DRQ6_CB(WRITELINE(m_dma8237_2, am9517a_device, dreq2_w)) + MCFG_ISA_OUT_DRQ7_CB(WRITELINE(m_dma8237_2, am9517a_device, dreq3_w)) - MCFG_DEVICE_ADD("rtc", MC146818, 32.768_kHz_XTAL) - MCFG_MC146818_IRQ_HANDLER(WRITELINE("pic8259_slave", pic8259_device, ir0_w)) - MCFG_MC146818_CENTURY_INDEX(0x32) + MC146818(config, m_mc146818, 32.768_kHz_XTAL); + m_mc146818->irq_callback().set(m_pic8259_slave, FUNC(pic8259_device::ir0_w)); + m_mc146818->set_century_index(0x32); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/machine/atarigen.h b/src/mame/machine/atarigen.h index 56edee0ec77..f7a17481c2a 100644 --- a/src/mame/machine/atarigen.h +++ b/src/mame/machine/atarigen.h @@ -35,7 +35,7 @@ #define MCFG_ATARI_SOUND_COMM_ADD(_tag, _soundcpu, _intcb) \ MCFG_DEVICE_ADD(_tag, ATARI_SOUND_COMM, 0) \ downcast(*device).set_sound_cpu(_soundcpu); \ - devcb = &downcast(*device).set_main_int_cb(DEVCB_##_intcb); + downcast(*device).set_main_int_cb(DEVCB_##_intcb); diff --git a/src/mame/machine/balsente.cpp b/src/mame/machine/balsente.cpp index 465b2c5a27e..6a59c4231c3 100644 --- a/src/mame/machine/balsente.cpp +++ b/src/mame/machine/balsente.cpp @@ -333,11 +333,6 @@ WRITE8_MEMBER(balsente_state::acia_w) m_acia->write(space, offset, (BIT(offset, 0) && data == 0xe0) ? 0 : data); } -WRITE_LINE_MEMBER(balsente_state::uint_w) -{ - m_uint = bool(state); -} - WRITE_LINE_MEMBER(balsente_state::uint_propagate_w) { if (state && BIT(m_counter_control, 5)) diff --git a/src/mame/machine/c117.h b/src/mame/machine/c117.h index bbe8d3ca5c1..9432aa845c2 100644 --- a/src/mame/machine/c117.h +++ b/src/mame/machine/c117.h @@ -17,7 +17,7 @@ downcast(*device).set_cpu_tags(_maincpu, _subcpu); #define MCFG_CUS117_SUBRES_CB(_devcb) \ - devcb = &downcast(*device).set_subres_cb(DEVCB_##_devcb); + downcast(*device).set_subres_cb(DEVCB_##_devcb); //*************************************************************************** diff --git a/src/mame/machine/cammu.h b/src/mame/machine/cammu.h index efd08061d4f..e852beb4c37 100644 --- a/src/mame/machine/cammu.h +++ b/src/mame/machine/cammu.h @@ -12,7 +12,7 @@ downcast(*device).set_cammu_id(_id); #define MCFG_CAMMU_EXCEPTION_CB(_exceptioncb) \ - devcb = &downcast(*device).set_exception_callback(DEVCB_##_exceptioncb); + downcast(*device).set_exception_callback(DEVCB_##_exceptioncb); #define MCFG_CAMMU_LINK(_tag) \ downcast(*device).add_linked(_tag); diff --git a/src/mame/machine/cat702.h b/src/mame/machine/cat702.h index 4c66568b817..4d25407e4a6 100644 --- a/src/mame/machine/cat702.h +++ b/src/mame/machine/cat702.h @@ -11,7 +11,7 @@ DECLARE_DEVICE_TYPE(CAT702, cat702_device) #define MCFG_CAT702_DATAOUT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dataout_handler(DEVCB_##_devcb); + downcast(*device).set_dataout_handler(DEVCB_##_devcb); class cat702_device : public device_t { diff --git a/src/mame/machine/cit101_kbd.h b/src/mame/machine/cit101_kbd.h index 9404d0ea4a6..4ffc070e269 100644 --- a/src/mame/machine/cit101_kbd.h +++ b/src/mame/machine/cit101_kbd.h @@ -21,7 +21,7 @@ //************************************************************************** #define MCFG_CIT101_HLE_KEYBOARD_TXD_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_txd_callback(DEVCB_##_devcb); + downcast(*device).set_txd_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/machine/compiskb.h b/src/mame/machine/compiskb.h index 3d13cb2fcbb..a6e9093973f 100644 --- a/src/mame/machine/compiskb.h +++ b/src/mame/machine/compiskb.h @@ -20,7 +20,7 @@ //************************************************************************** #define MCFG_COMPIS_KEYBOARD_OUT_TX_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_tx_handler(DEVCB_##_devcb); + downcast(*device).set_out_tx_handler(DEVCB_##_devcb); diff --git a/src/mame/machine/cuda.h b/src/mame/machine/cuda.h index f7984087b33..99f786908b2 100644 --- a/src/mame/machine/cuda.h +++ b/src/mame/machine/cuda.h @@ -38,16 +38,16 @@ MCFG_DEVICE_REMOVE(CUDA_TAG) #define MCFG_CUDA_RESET_CALLBACK(_cb) \ - devcb = &downcast(*device).set_reset_cb(DEVCB_##_cb); + downcast(*device).set_reset_cb(DEVCB_##_cb); #define MCFG_CUDA_LINECHANGE_CALLBACK(_cb) \ - devcb = &downcast(*device).set_linechange_cb(DEVCB_##_cb); + downcast(*device).set_linechange_cb(DEVCB_##_cb); #define MCFG_CUDA_VIA_CLOCK_CALLBACK(_cb) \ - devcb = &downcast(*device).set_via_clock_cb(DEVCB_##_cb); + downcast(*device).set_via_clock_cb(DEVCB_##_cb); #define MCFG_CUDA_VIA_DATA_CALLBACK(_cb) \ - devcb = &downcast(*device).set_via_data_cb(DEVCB_##_cb); + downcast(*device).set_via_data_cb(DEVCB_##_cb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/machine/dec_lk201.h b/src/mame/machine/dec_lk201.h index 06c0d29beef..9d1bc423722 100644 --- a/src/mame/machine/dec_lk201.h +++ b/src/mame/machine/dec_lk201.h @@ -38,7 +38,7 @@ //************************************************************************** #define MCFG_LK201_TX_HANDLER(_cb) \ - devcb = &downcast(*device).set_tx_handler(DEVCB_##_cb); + downcast(*device).set_tx_handler(DEVCB_##_cb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/machine/deco104.h b/src/mame/machine/deco104.h index e9bde950888..aa2957437b9 100644 --- a/src/mame/machine/deco104.h +++ b/src/mame/machine/deco104.h @@ -22,8 +22,4 @@ protected: DECLARE_DEVICE_TYPE(DECO104PROT, deco104_device) - -#define MCFG_DECO104_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, DECO104PROT, 0) - #endif // MAME_MACHINE_DECO104_H diff --git a/src/mame/machine/deco146.h b/src/mame/machine/deco146.h index fd9bc753154..2ac17aed197 100644 --- a/src/mame/machine/deco146.h +++ b/src/mame/machine/deco146.h @@ -9,16 +9,16 @@ #define MCFG_DECO146_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_port_a_cb(DEVCB_##_devcb); + downcast(*device).set_port_a_cb(DEVCB_##_devcb); #define MCFG_DECO146_IN_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_port_b_cb(DEVCB_##_devcb); + downcast(*device).set_port_b_cb(DEVCB_##_devcb); #define MCFG_DECO146_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_port_c_cb(DEVCB_##_devcb); + downcast(*device).set_port_c_cb(DEVCB_##_devcb); #define MCFG_DECO146_SOUNDLATCH_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_soundlatch_irq_callback(DEVCB_##_devcb); + downcast(*device).set_soundlatch_irq_callback(DEVCB_##_devcb); // there are some standard ways the chip gets hooked up, so have them here ready to use #define MCFG_DECO146_SET_INTERFACE_SCRAMBLE( a9,a8,a7,a6,a5,a4,a3,a2,a1,a0 ) \ @@ -85,6 +85,9 @@ public: template devcb_base &set_port_a_cb(Object &&object) { return m_port_a_r.set_callback(std::forward(object)); } template devcb_base &set_port_b_cb(Object &&object) { return m_port_b_r.set_callback(std::forward(object)); } template devcb_base &set_port_c_cb(Object &&object) { return m_port_c_r.set_callback(std::forward(object)); } + auto port_a_cb() { return m_port_a_r.bind(); } + auto port_b_cb() { return m_port_b_r.bind(); } + auto port_c_cb() { return m_port_c_r.bind(); } void set_interface_scramble(uint8_t a9, uint8_t a8, uint8_t a7, uint8_t a6, uint8_t a5, uint8_t a4, uint8_t a3,uint8_t a2,uint8_t a1,uint8_t a0) { m_external_addrswap[9] = a9; @@ -103,6 +106,7 @@ public: void set_use_magic_read_address_xor(bool use_xor) { m_magic_read_address_xor_enabled = use_xor; } template devcb_base &set_soundlatch_irq_callback(Object &&cb) { return m_soundlatch_irq_cb.set_callback(std::forward(cb)); } + auto soundlatch_irq_cb() { return m_soundlatch_irq_cb.bind(); } DECLARE_READ8_MEMBER( soundlatch_r ); diff --git a/src/mame/machine/deco_irq.h b/src/mame/machine/deco_irq.h index bc559c9cbf0..78a44d21741 100644 --- a/src/mame/machine/deco_irq.h +++ b/src/mame/machine/deco_irq.h @@ -23,22 +23,22 @@ downcast(*device).set_screen_tag(_screen_tag); #define MCFG_DECO_IRQ_LIGHTGUN1_CB(_devcb) \ - devcb = &downcast(*device).set_lightgun1_callback(DEVCB_##_devcb); + downcast(*device).set_lightgun1_callback(DEVCB_##_devcb); #define MCFG_DECO_IRQ_LIGHTGUN2_CB(_devcb) \ - devcb = &downcast(*device).set_lightgun2_callback(DEVCB_##_devcb); + downcast(*device).set_lightgun2_callback(DEVCB_##_devcb); #define MCFG_DECO_IRQ_LIGHTGUN_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_lightgun_irq_callback(DEVCB_##_devcb); + downcast(*device).set_lightgun_irq_callback(DEVCB_##_devcb); #define MCFG_DECO_IRQ_RASTER1_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_raster1_irq_callback(DEVCB_##_devcb); + downcast(*device).set_raster1_irq_callback(DEVCB_##_devcb); #define MCFG_DECO_IRQ_RASTER2_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_raster2_irq_callback(DEVCB_##_devcb); + downcast(*device).set_raster2_irq_callback(DEVCB_##_devcb); #define MCFG_DECO_IRQ_VBLANK_IRQ_CB(_devcb) \ - devcb = &downcast(*device).set_vblank_irq_callback(DEVCB_##_devcb); + downcast(*device).set_vblank_irq_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/machine/egret.h b/src/mame/machine/egret.h index a6bb3bc6fc8..c94cf56be0f 100644 --- a/src/mame/machine/egret.h +++ b/src/mame/machine/egret.h @@ -36,16 +36,16 @@ MCFG_DEVICE_REMOVE(EGRET_TAG) #define MCFG_EGRET_RESET_CALLBACK(_cb) \ - devcb = &downcast(*device).set_reset_cb(DEVCB_##_cb); + downcast(*device).set_reset_cb(DEVCB_##_cb); #define MCFG_EGRET_LINECHANGE_CALLBACK(_cb) \ - devcb = &downcast(*device).set_linechange_cb(DEVCB_##_cb); + downcast(*device).set_linechange_cb(DEVCB_##_cb); #define MCFG_EGRET_VIA_CLOCK_CALLBACK(_cb) \ - devcb = &downcast(*device).set_via_clock_cb(DEVCB_##_cb); + downcast(*device).set_via_clock_cb(DEVCB_##_cb); #define MCFG_EGRET_VIA_DATA_CALLBACK(_cb) \ - devcb = &downcast(*device).set_via_data_cb(DEVCB_##_cb); + downcast(*device).set_via_data_cb(DEVCB_##_cb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/machine/esqpanel.h b/src/mame/machine/esqpanel.h index 730a46b2bc8..05221f2745c 100644 --- a/src/mame/machine/esqpanel.h +++ b/src/mame/machine/esqpanel.h @@ -53,10 +53,10 @@ MCFG_DEVICE_REMOVE(_tag) #define MCFG_ESQPANEL_TX_CALLBACK(_write) \ - devcb = &downcast(*device).set_tx_wr_callback(DEVCB_##_write); + downcast(*device).set_tx_wr_callback(DEVCB_##_write); #define MCFG_ESQPANEL_ANALOG_CALLBACK(_write) \ - devcb = &downcast(*device).set_analog_wr_callback(DEVCB_##_write); + downcast(*device).set_analog_wr_callback(DEVCB_##_write); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/machine/fm_scsi.h b/src/mame/machine/fm_scsi.h index 2fcd1950fbd..c93b2d0ae4c 100644 --- a/src/mame/machine/fm_scsi.h +++ b/src/mame/machine/fm_scsi.h @@ -16,9 +16,9 @@ MCFG_DEVICE_ADD(_tag, FMSCSI, 0) #define MCFG_FMSCSI_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_FMSCSI_DRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_drq_handler(DEVCB_##_devcb); + downcast(*device).set_drq_handler(DEVCB_##_devcb); class fmscsi_device : public legacy_scsi_host_adapter { diff --git a/src/mame/machine/gaelco3d.h b/src/mame/machine/gaelco3d.h index 4a30d708322..21a37195445 100644 --- a/src/mame/machine/gaelco3d.h +++ b/src/mame/machine/gaelco3d.h @@ -16,7 +16,7 @@ ***************************************************************************/ #define MCFG_GAELCO_SERIAL_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); diff --git a/src/mame/machine/hp9845_printer.h b/src/mame/machine/hp9845_printer.h index 0c8aea9e594..c7752b24c03 100644 --- a/src/mame/machine/hp9845_printer.h +++ b/src/mame/machine/hp9845_printer.h @@ -16,13 +16,13 @@ #include "imagedev/bitbngr.h" #define MCFG_9845PRT_IRL_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irl_handler(DEVCB_##_devcb); + downcast(*device).set_irl_handler(DEVCB_##_devcb); #define MCFG_9845PRT_FLG_HANDLER(_devcb) \ - devcb = &downcast(*device).set_flg_handler(DEVCB_##_devcb); + downcast(*device).set_flg_handler(DEVCB_##_devcb); #define MCFG_9845PRT_STS_HANDLER(_devcb) \ - devcb = &downcast(*device).set_sts_handler(DEVCB_##_devcb); + downcast(*device).set_sts_handler(DEVCB_##_devcb); class hp9845_printer_device : public device_t { diff --git a/src/mame/machine/ibm6580_fdc.h b/src/mame/machine/ibm6580_fdc.h index 30bbb2c9b6f..92a85fb9a7d 100644 --- a/src/mame/machine/ibm6580_fdc.h +++ b/src/mame/machine/ibm6580_fdc.h @@ -10,13 +10,13 @@ #define MCFG_DW_FDC_OUT_DATA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_data_handler(DEVCB_##_devcb); + downcast(*device).set_out_data_handler(DEVCB_##_devcb); #define MCFG_DW_FDC_OUT_CLOCK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_clock_handler(DEVCB_##_devcb); + downcast(*device).set_out_clock_handler(DEVCB_##_devcb); #define MCFG_DW_FDC_OUT_STROBE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_strobe_handler(DEVCB_##_devcb); + downcast(*device).set_out_strobe_handler(DEVCB_##_devcb); class dw_fdc_device : public device_t diff --git a/src/mame/machine/ibm6580_kbd.h b/src/mame/machine/ibm6580_kbd.h index f39ce79857b..4796503ba58 100644 --- a/src/mame/machine/ibm6580_kbd.h +++ b/src/mame/machine/ibm6580_kbd.h @@ -6,23 +6,14 @@ #pragma once -#define MCFG_DW_KEYBOARD_OUT_DATA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_data_handler(DEVCB_##_devcb); - -#define MCFG_DW_KEYBOARD_OUT_CLOCK_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_clock_handler(DEVCB_##_devcb); - -#define MCFG_DW_KEYBOARD_OUT_STROBE_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_strobe_handler(DEVCB_##_devcb); - class dw_keyboard_device : public device_t { public: dw_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_out_data_handler(Object &&cb) { return m_out_data.set_callback(std::forward(cb)); } - template devcb_base &set_out_clock_handler(Object &&cb) { return m_out_clock.set_callback(std::forward(cb)); } - template devcb_base &set_out_strobe_handler(Object &&cb) { return m_out_strobe.set_callback(std::forward(cb)); } + auto out_data_handler() { return m_out_data.bind(); } + auto out_clock_handler() { return m_out_clock.bind(); } + auto out_strobe_handler() { return m_out_strobe.bind(); } DECLARE_WRITE_LINE_MEMBER(reset_w); DECLARE_WRITE_LINE_MEMBER(ack_w); diff --git a/src/mame/machine/interpro_ioga.h b/src/mame/machine/interpro_ioga.h index cb7b8529788..dee30060b17 100644 --- a/src/mame/machine/interpro_ioga.h +++ b/src/mame/machine/interpro_ioga.h @@ -7,27 +7,27 @@ #pragma once #define MCFG_INTERPRO_IOGA_NMI_CB(_out_nmi) \ - devcb = &downcast(*device).set_out_nmi_callback(DEVCB_##_out_nmi); + downcast(*device).set_out_nmi_callback(DEVCB_##_out_nmi); #define MCFG_INTERPRO_IOGA_IRQ_CB(_out_irq) \ - devcb = &downcast(*device).set_out_irq_callback(DEVCB_##_out_irq); + downcast(*device).set_out_irq_callback(DEVCB_##_out_irq); #define MCFG_INTERPRO_IOGA_IVEC_CB(_out_ivec) \ - devcb = &downcast(*device).set_out_irq_vector_callback(DEVCB_##_out_ivec); + downcast(*device).set_out_irq_vector_callback(DEVCB_##_out_ivec); #define MCFG_INTERPRO_IOGA_DMA_CB(_channel, _dma_r, _dma_w) \ - devcb = &downcast(*device).set_dma_r_callback(_channel, DEVCB_##_dma_r); \ - devcb = &downcast(*device).set_dma_w_callback(_channel, DEVCB_##_dma_w); + downcast(*device).set_dma_r_callback(_channel, DEVCB_##_dma_r); \ + downcast(*device).set_dma_w_callback(_channel, DEVCB_##_dma_w); #define MCFG_INTERPRO_IOGA_SERIAL_DMA_CB(_channel, _dma_r, _dma_w) \ - devcb = &downcast(*device).set_serial_dma_r_callback(_channel, DEVCB_##_dma_r); \ - devcb = &downcast(*device).set_serial_dma_w_callback(_channel, DEVCB_##_dma_w); + downcast(*device).set_serial_dma_r_callback(_channel, DEVCB_##_dma_r); \ + downcast(*device).set_serial_dma_w_callback(_channel, DEVCB_##_dma_w); #define MCFG_INTERPRO_IOGA_FDCTC_CB(_tc) \ - devcb = &downcast(*device).set_fdc_tc_callback(DEVCB_##_tc); + downcast(*device).set_fdc_tc_callback(DEVCB_##_tc); #define MCFG_INTERPRO_IOGA_ETH_CA_CB(_ca) \ - devcb = &downcast(*device).set_eth_ca_callback(DEVCB_##_ca); + downcast(*device).set_eth_ca_callback(DEVCB_##_ca); #define MCFG_INTERPRO_IOGA_MEMORY(_tag, _spacenum) \ downcast(*device).set_memory(_tag, _spacenum); @@ -85,6 +85,15 @@ public: template devcb_base &set_serial_dma_w_callback(int channel, Object &&cb) { return m_serial_dma_channel[channel].device_w.set_callback(std::forward(cb)); } template devcb_base &set_fdc_tc_callback(Object &&cb) { return m_fdc_tc_func.set_callback(std::forward(cb)); } template devcb_base &set_eth_ca_callback(Object &&cb) { return m_eth_ca_func.set_callback(std::forward(cb)); } + auto out_nmi_callback() { return m_out_nmi_func.bind(); } + auto out_irq_callback() { return m_out_irq_func.bind(); } + auto out_irq_vector_callback() { return m_out_irq_vector_func.bind(); } + template auto dma_r_callback() { return m_dma_channel[Chan].device_r.bind(); } + template auto dma_w_callback() { return m_dma_channel[Chan].device_w.bind(); } + template auto serial_dma_r_callback() { return m_serial_dma_channel[Chan].device_r.bind(); } + template auto serial_dma_w_callback() { return m_serial_dma_channel[Chan].device_w.bind(); } + auto fdc_tc_callback() { return m_fdc_tc_func.bind(); } + auto eth_ca_callback() { return m_eth_ca_func.bind(); } void set_memory(const char *const tag, const int spacenum) { diff --git a/src/mame/machine/interpro_sga.h b/src/mame/machine/interpro_sga.h index d9753bb5533..c845722eb0e 100644 --- a/src/mame/machine/interpro_sga.h +++ b/src/mame/machine/interpro_sga.h @@ -7,7 +7,7 @@ #pragma once #define MCFG_INTERPRO_SGA_BERR_CB(_out_berr) \ - devcb = &downcast(*device).set_out_berr_callback(DEVCB_##_out_berr); + downcast(*device).set_out_berr_callback(DEVCB_##_out_berr); class interpro_sga_device : public device_t { diff --git a/src/mame/machine/ioptimer.h b/src/mame/machine/ioptimer.h index e3a45ca2a0b..a109474d5ce 100644 --- a/src/mame/machine/ioptimer.h +++ b/src/mame/machine/ioptimer.h @@ -16,7 +16,7 @@ #define MCFG_IOP_TIMER_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_cb(DEVCB_##_write); + downcast(*device).set_int_cb(DEVCB_##_write); class iop_timer_device : public device_t { diff --git a/src/mame/machine/isbc_208.h b/src/mame/machine/isbc_208.h index f05cd797907..792b9c72306 100644 --- a/src/mame/machine/isbc_208.h +++ b/src/mame/machine/isbc_208.h @@ -51,7 +51,7 @@ private: }; #define MCFG_ISBC_208_IRQ(_irq_line) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_irq_line); + downcast(*device).set_irq_callback(DEVCB_##_irq_line); DECLARE_DEVICE_TYPE(ISBC_208, isbc_208_device) diff --git a/src/mame/machine/isbc_215g.h b/src/mame/machine/isbc_215g.h index 565d742f1de..76336b85dab 100644 --- a/src/mame/machine/isbc_215g.h +++ b/src/mame/machine/isbc_215g.h @@ -85,7 +85,7 @@ private: }; #define MCFG_ISBC_215_IRQ(_irq_line) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_irq_line); + downcast(*device).set_irq_callback(DEVCB_##_irq_line); DECLARE_DEVICE_TYPE(ISBC_215G, isbc_215g_device) diff --git a/src/mame/machine/k573cass.h b/src/mame/machine/k573cass.h index c317ef2aaf2..4a623f35bfc 100644 --- a/src/mame/machine/k573cass.h +++ b/src/mame/machine/k573cass.h @@ -17,7 +17,7 @@ #include "machine/zs01.h" #define MCFG_KONAMI573_CASSETTE_DSR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dsr_handler(DEVCB_##_devcb); + downcast(*device).set_dsr_handler(DEVCB_##_devcb); DECLARE_DEVICE_TYPE(KONAMI573_CASSETTE_SLOT, konami573_cassette_slot_device) @@ -143,28 +143,28 @@ DECLARE_DEVICE_TYPE(KONAMI573_CASSETTE_Y, konami573_cassette_y_device) #define MCFG_KONAMI573_CASSETTE_Y_D0_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d0_handler(DEVCB_##_devcb); + downcast(*device).set_d0_handler(DEVCB_##_devcb); #define MCFG_KONAMI573_CASSETTE_Y_D1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d1_handler(DEVCB_##_devcb); + downcast(*device).set_d1_handler(DEVCB_##_devcb); #define MCFG_KONAMI573_CASSETTE_Y_D2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d2_handler(DEVCB_##_devcb); + downcast(*device).set_d2_handler(DEVCB_##_devcb); #define MCFG_KONAMI573_CASSETTE_Y_D3_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d3_handler(DEVCB_##_devcb); + downcast(*device).set_d3_handler(DEVCB_##_devcb); #define MCFG_KONAMI573_CASSETTE_Y_D4_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d4_handler(DEVCB_##_devcb); + downcast(*device).set_d4_handler(DEVCB_##_devcb); #define MCFG_KONAMI573_CASSETTE_Y_D5_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d5_handler(DEVCB_##_devcb); + downcast(*device).set_d5_handler(DEVCB_##_devcb); #define MCFG_KONAMI573_CASSETTE_Y_D6_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d6_handler(DEVCB_##_devcb); + downcast(*device).set_d6_handler(DEVCB_##_devcb); #define MCFG_KONAMI573_CASSETTE_Y_D7_HANDLER(_devcb) \ - devcb = &downcast(*device).set_d7_handler(DEVCB_##_devcb); + downcast(*device).set_d7_handler(DEVCB_##_devcb); class konami573_cassette_y_device: public device_t, public konami573_cassette_interface diff --git a/src/mame/machine/kay_kbd.h b/src/mame/machine/kay_kbd.h index 689fdb1e32e..4274f7f3199 100644 --- a/src/mame/machine/kay_kbd.h +++ b/src/mame/machine/kay_kbd.h @@ -8,10 +8,6 @@ #include "sound/spkrdev.h" -#define MCFG_KAYPRO10KBD_RXD_CB(cb) \ - devcb = &downcast(*device).set_rxd_cb(DEVCB_##cb); - - class kaypro_10_keyboard_device : public device_t { public: @@ -19,9 +15,9 @@ public: machine_config const &mconfig, char const *tag, device_t *owner, - std::uint32_t clock); + std::uint32_t clock = 0); - template devcb_base &set_rxd_cb(Object &&cb) { return m_rxd_cb.set_callback(std::forward(cb)); } + auto rxd_cb() { return m_rxd_cb.bind(); } DECLARE_WRITE_LINE_MEMBER(txd_w) { m_txd = state ? 1U : 0U; } diff --git a/src/mame/machine/kc_keyb.h b/src/mame/machine/kc_keyb.h index 08d23773372..1ccef297e9f 100644 --- a/src/mame/machine/kc_keyb.h +++ b/src/mame/machine/kc_keyb.h @@ -12,7 +12,7 @@ #pragma once #define MCFG_KC_KEYBOARD_OUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_out_wr_callback(DEVCB_##_write); + downcast(*device).set_out_wr_callback(DEVCB_##_write); /*************************************************************************** TYPE DEFINITIONS diff --git a/src/mame/machine/km035.h b/src/mame/machine/km035.h index 2f932fdd586..ad8dc58d21b 100644 --- a/src/mame/machine/km035.h +++ b/src/mame/machine/km035.h @@ -18,10 +18,10 @@ //************************************************************************** #define MCFG_KM035_TX_HANDLER(_cb) \ - devcb = &downcast(*device).set_tx_handler(DEVCB_##_cb); + downcast(*device).set_tx_handler(DEVCB_##_cb); #define MCFG_KM035_RTS_HANDLER(_cb) \ - devcb = &downcast(*device).set_rts_handler(DEVCB_##_cb); + downcast(*device).set_rts_handler(DEVCB_##_cb); //************************************************************************** diff --git a/src/mame/machine/m24_kbd.h b/src/mame/machine/m24_kbd.h index cf3c7df39f4..5aa4fe3ccae 100644 --- a/src/mame/machine/m24_kbd.h +++ b/src/mame/machine/m24_kbd.h @@ -8,7 +8,7 @@ #include "cpu/mcs48/mcs48.h" #define MCFG_M24_KEYBOARD_OUT_DATA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_data_handler(DEVCB_##_devcb); + downcast(*device).set_out_data_handler(DEVCB_##_devcb); class m24_keyboard_device : public device_t { diff --git a/src/mame/machine/m24_z8000.h b/src/mame/machine/m24_z8000.h index 970f5aa273c..df226b87926 100644 --- a/src/mame/machine/m24_z8000.h +++ b/src/mame/machine/m24_z8000.h @@ -11,7 +11,7 @@ #include "machine/pic8259.h" #define MCFG_M24_Z8000_HALT(_devcb) \ - devcb = &downcast(*device).set_halt_callback(DEVCB_##_devcb); + downcast(*device).set_halt_callback(DEVCB_##_devcb); class m24_z8000_device : public device_t { diff --git a/src/mame/machine/mackbd.cpp b/src/mame/machine/mackbd.cpp index c5af275772d..741226a7e84 100644 --- a/src/mame/machine/mackbd.cpp +++ b/src/mame/machine/mackbd.cpp @@ -160,16 +160,17 @@ INPUT_PORTS_END // device_add_mconfig - add device configuration //------------------------------------------------- -MACHINE_CONFIG_START(mackbd_device::device_add_mconfig) - MCFG_DEVICE_ADD(MACKBD_CPU_TAG, I8021, 3000000) // "the approximate clock rate of the MPU is 3 MHz" - MCFG_MCS48_PORT_BUS_IN_CB(READ8(*this, mackbd_device, p0_r)) - MCFG_MCS48_PORT_BUS_OUT_CB(WRITE8(*this, mackbd_device, p0_w)) - MCFG_MCS48_PORT_P1_IN_CB(READ8(*this, mackbd_device, p1_r)) - MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(*this, mackbd_device, p1_w)) - MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, mackbd_device, p2_r)) - MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(*this, mackbd_device, p2_w)) - MCFG_MCS48_PORT_T1_IN_CB(IOPORT("MODS")) MCFG_DEVCB_RSHIFT(1) // option -MACHINE_CONFIG_END +void mackbd_device::device_add_mconfig(machine_config &config) +{ + mcs48_cpu_device &cpu(I8021(config, m_maincpu, 3000000)); // "the approximate clock rate of the MPU is 3 MHz" + cpu.bus_in_cb().set(FUNC(mackbd_device::p0_r)); + cpu.bus_out_cb().set(FUNC(mackbd_device::p0_w)); + cpu.p1_in_cb().set(FUNC(mackbd_device::p1_r)); + cpu.p1_out_cb().set(FUNC(mackbd_device::p1_w)); + cpu.p2_in_cb().set(FUNC(mackbd_device::p2_r)); + cpu.p2_out_cb().set(FUNC(mackbd_device::p2_w)); + cpu.t1_in_cb().set_ioport("MODS").bit(1); // option +} const tiny_rom_entry *mackbd_device::device_rom_region() const { @@ -189,8 +190,8 @@ ioport_constructor mackbd_device::device_input_ports() const // mackbd_device - constructor //------------------------------------------------- -mackbd_device::mackbd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, MACKBD, tag, owner, clock), +mackbd_device::mackbd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, MACKBD, tag, owner, clock), m_maincpu(*this, MACKBD_CPU_TAG), m_clkout_handler(*this), m_dataout_handler(*this) diff --git a/src/mame/machine/mackbd.h b/src/mame/machine/mackbd.h index 0a1178d51be..4fba653cfc4 100644 --- a/src/mame/machine/mackbd.h +++ b/src/mame/machine/mackbd.h @@ -24,7 +24,7 @@ devcb = downcast(*device).set_clkout_handler(DEVCB_##_devcb); #define MCFG_MACKBD_DATAOUT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dataout_handler(DEVCB_##_devcb); + downcast(*device).set_dataout_handler(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/machine/microdrv.h b/src/mame/machine/microdrv.h index ced4d175223..7fa62714adb 100644 --- a/src/mame/machine/microdrv.h +++ b/src/mame/machine/microdrv.h @@ -28,7 +28,7 @@ MCFG_DEVICE_ADD(_tag, MICRODRIVE, 0) #define MCFG_MICRODRIVE_COMMS_OUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_comms_out_wr_callback(DEVCB_##_write); + downcast(*device).set_comms_out_wr_callback(DEVCB_##_write); diff --git a/src/mame/machine/micropolis.h b/src/mame/machine/micropolis.h index 7474e77cbaf..5f2dd3f7b08 100644 --- a/src/mame/machine/micropolis.h +++ b/src/mame/machine/micropolis.h @@ -28,13 +28,13 @@ MCFG_MICROPOLIS_DRIVE_TAGS(FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3) #define MCFG_MICROPOLIS_DDEN_CALLBACK(_read) \ - devcb = &downcast(*device).set_dden_rd_callback(DEVCB_##_read); + downcast(*device).set_dden_rd_callback(DEVCB_##_read); #define MCFG_MICROPOLIS_INTRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_intrq_wr_callback(DEVCB_##_write); + downcast(*device).set_intrq_wr_callback(DEVCB_##_write); #define MCFG_MICROPOLIS_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); /*************************************************************************** MACROS diff --git a/src/mame/machine/midikbd.h b/src/mame/machine/midikbd.h index 993003cbd80..d3c77dec6ab 100644 --- a/src/mame/machine/midikbd.h +++ b/src/mame/machine/midikbd.h @@ -10,7 +10,7 @@ #define MCFG_MIDI_KBD_ADD(_tag, _devcb, _clock) \ MCFG_DEVICE_ADD(_tag, MIDI_KBD, _clock) \ - devcb = &downcast(*device).set_tx_callback(DEVCB_##_devcb); + downcast(*device).set_tx_callback(DEVCB_##_devcb); class midi_keyboard_device : public device_t, public device_serial_interface { diff --git a/src/mame/machine/midwayic.h b/src/mame/machine/midwayic.h index 0b7e3e6e820..8d764d34999 100644 --- a/src/mame/machine/midwayic.h +++ b/src/mame/machine/midwayic.h @@ -239,16 +239,16 @@ DECLARE_DEVICE_TYPE(MIDWAY_IOASIC, midway_ioasic_device) downcast(*device).set_shuffle_default(_shuffle); #define MCFG_MIDWAY_IOASIC_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irqhandler_callback(DEVCB_##_write); + downcast(*device).set_irqhandler_callback(DEVCB_##_write); #define MCFG_MIDWAY_IOASIC_AUTO_ACK(_ack) \ downcast(*device).set_auto_ack(_ack); #define MCFG_MIDWAY_IOASIC_OUT_TX_CB(_devcb) \ - devcb = &downcast(*device).set_serial_tx_callback(DEVCB_##_devcb); + downcast(*device).set_serial_tx_callback(DEVCB_##_devcb); #define MCFG_MIDWAY_IOASIC_AUX_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_aux_output_callback(DEVCB_##_devcb); + downcast(*device).set_aux_output_callback(DEVCB_##_devcb); enum diff --git a/src/mame/machine/mm1kb.h b/src/mame/machine/mm1kb.h index 9cf08ecd942..d9204ae3f69 100644 --- a/src/mame/machine/mm1kb.h +++ b/src/mame/machine/mm1kb.h @@ -20,7 +20,7 @@ //************************************************************************** #define MCFG_MM1_KEYBOARD_KBST_CALLBACK(_write) \ - devcb = &downcast(*device).set_kbst_wr_callback(DEVCB_##_write); + downcast(*device).set_kbst_wr_callback(DEVCB_##_write); diff --git a/src/mame/machine/model1io.cpp b/src/mame/machine/model1io.cpp index dadc2e026dd..8fef843c855 100644 --- a/src/mame/machine/model1io.cpp +++ b/src/mame/machine/model1io.cpp @@ -128,30 +128,31 @@ const tiny_rom_entry *model1io_device::device_rom_region() const // device_add_mconfig - add device configuration //------------------------------------------------- -MACHINE_CONFIG_START( model1io_device::device_add_mconfig ) - MCFG_DEVICE_ADD("iocpu", Z80, 32_MHz_XTAL/8) - MCFG_DEVICE_PROGRAM_MAP(mem_map) +void model1io_device::device_add_mconfig(machine_config &config) +{ + z80_device &iocpu(Z80(config, "iocpu", 32_MHz_XTAL/8)); + iocpu.set_addrmap(AS_PROGRAM, &model1io_device::mem_map); - MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) // 93C45 + EEPROM_SERIAL_93C46_16BIT(config, m_eeprom); // 93C45 - MCFG_DEVICE_ADD("io", SEGA_315_5338A, 32_MHz_XTAL) - MCFG_315_5338A_READ_CB(READ8(*this, model1io_device, io_r)) - MCFG_315_5338A_WRITE_CB(WRITE8(*this, model1io_device, io_w)) - MCFG_315_5338A_OUT_PA_CB(WRITE8(*this, model1io_device, io_pa_w)) - MCFG_315_5338A_IN_PB_CB(READ8(*this, model1io_device, io_pb_r)) - MCFG_315_5338A_IN_PC_CB(READ8(*this, model1io_device, io_pc_r)) - MCFG_315_5338A_IN_PD_CB(READ8(*this, model1io_device, io_pd_r)) - MCFG_315_5338A_IN_PE_CB(READ8(*this, model1io_device, io_pe_r)) - MCFG_315_5338A_OUT_PE_CB(WRITE8(*this, model1io_device, io_pe_w)) - MCFG_315_5338A_OUT_PF_CB(WRITE8(*this, model1io_device, io_pf_w)) - MCFG_315_5338A_IN_PG_CB(READ8(*this, model1io_device, io_pg_r)) + sega_315_5338a_device &io(SEGA_315_5338A(config, "io", 32_MHz_XTAL)); + io.read_callback().set(FUNC(model1io_device::io_r)); + io.write_callback().set(FUNC(model1io_device::io_w)); + io.out_pa_callback().set(FUNC(model1io_device::io_pa_w)); + io.in_pb_callback().set(FUNC(model1io_device::io_pb_r)); + io.in_pc_callback().set(FUNC(model1io_device::io_pc_r)); + io.in_pd_callback().set(FUNC(model1io_device::io_pd_r)); + io.in_pe_callback().set(FUNC(model1io_device::io_pe_r)); + io.out_pe_callback().set(FUNC(model1io_device::io_pe_w)); + io.out_pf_callback().set(FUNC(model1io_device::io_pf_w)); + io.in_pg_callback().set(FUNC(model1io_device::io_pg_r)); - MCFG_DEVICE_ADD("adc", MSM6253, 0) - MCFG_MSM6253_IN0_ANALOG_READ(model1io_device, analog0_r) - MCFG_MSM6253_IN1_ANALOG_READ(model1io_device, analog1_r) - MCFG_MSM6253_IN2_ANALOG_READ(model1io_device, analog2_r) - MCFG_MSM6253_IN3_ANALOG_READ(model1io_device, analog3_r) -MACHINE_CONFIG_END + msm6253_device &adc(MSM6253(config, "adc", 0)); + adc.set_input_cb<0>(FUNC(model1io_device::analog0_r), this); + adc.set_input_cb<1>(FUNC(model1io_device::analog1_r), this); + adc.set_input_cb<2>(FUNC(model1io_device::analog2_r), this); + adc.set_input_cb<3>(FUNC(model1io_device::analog3_r), this); +} //************************************************************************** diff --git a/src/mame/machine/model1io.h b/src/mame/machine/model1io.h index 78434ff5adb..7c78ab2cf18 100644 --- a/src/mame/machine/model1io.h +++ b/src/mame/machine/model1io.h @@ -23,52 +23,52 @@ //************************************************************************** #define MCFG_MODEL1IO_READ_CB(_devcb) \ - devcb = &downcast(*device).set_read_callback(DEVCB_##_devcb); + downcast(*device).set_read_callback(DEVCB_##_devcb); #define MCFG_MODEL1IO_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_write_callback(DEVCB_##_devcb); + downcast(*device).set_write_callback(DEVCB_##_devcb); #define MCFG_MODEL1IO_IN0_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 0); + downcast(*device).set_in_callback(DEVCB_##_devcb, 0); #define MCFG_MODEL1IO_IN1_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 1); + downcast(*device).set_in_callback(DEVCB_##_devcb, 1); #define MCFG_MODEL1IO_IN2_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback(DEVCB_##_devcb, 2); + downcast(*device).set_in_callback(DEVCB_##_devcb, 2); #define MCFG_MODEL1IO_DRIVE_READ_CB(_devcb) \ - devcb = &downcast(*device).set_drive_read_callback(DEVCB_##_devcb); + downcast(*device).set_drive_read_callback(DEVCB_##_devcb); #define MCFG_MODEL1IO_DRIVE_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_drive_write_callback(DEVCB_##_devcb); + downcast(*device).set_drive_write_callback(DEVCB_##_devcb); #define MCFG_MODEL1IO_AN0_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback(DEVCB_##_devcb, 0); + downcast(*device).set_an_callback(DEVCB_##_devcb, 0); #define MCFG_MODEL1IO_AN1_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback(DEVCB_##_devcb, 1); + downcast(*device).set_an_callback(DEVCB_##_devcb, 1); #define MCFG_MODEL1IO_AN2_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback(DEVCB_##_devcb, 2); + downcast(*device).set_an_callback(DEVCB_##_devcb, 2); #define MCFG_MODEL1IO_AN3_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback(DEVCB_##_devcb, 3); + downcast(*device).set_an_callback(DEVCB_##_devcb, 3); #define MCFG_MODEL1IO_AN4_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback(DEVCB_##_devcb, 4); + downcast(*device).set_an_callback(DEVCB_##_devcb, 4); #define MCFG_MODEL1IO_AN5_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback(DEVCB_##_devcb, 5); + downcast(*device).set_an_callback(DEVCB_##_devcb, 5); #define MCFG_MODEL1IO_AN6_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback(DEVCB_##_devcb, 6); + downcast(*device).set_an_callback(DEVCB_##_devcb, 6); #define MCFG_MODEL1IO_AN7_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback(DEVCB_##_devcb, 7); + downcast(*device).set_an_callback(DEVCB_##_devcb, 7); #define MCFG_MODEL1IO_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_output_callback(DEVCB_##_devcb); + downcast(*device).set_output_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/machine/model1io2.cpp b/src/mame/machine/model1io2.cpp index 4a793bf63bb..4d142f5c5a8 100644 --- a/src/mame/machine/model1io2.cpp +++ b/src/mame/machine/model1io2.cpp @@ -135,57 +135,57 @@ const tiny_rom_entry *model1io2_device::device_rom_region() const //------------------------------------------------- MACHINE_CONFIG_START( model1io2_device::device_add_mconfig ) - MCFG_DEVICE_ADD("iocpu", TMPZ84C015, 19.6608_MHz_XTAL / 2) // TMPZ84C015AF-12 - MCFG_DEVICE_PROGRAM_MAP(mem_map) + tmpz84c015_device &iocpu(TMPZ84C015(config, "iocpu", 19.6608_MHz_XTAL / 2)); // TMPZ84C015AF-12 + iocpu.set_addrmap(AS_PROGRAM, &model1io2_device::mem_map); // SIO channel a baud rate adjusted by dsw1 1+2: 38400, 19200, 9600, 4800 - MCFG_TMPZ84C015_ZC2_CB(WRITELINE("iocpu", tmpz84c015_device, rxca_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("iocpu", tmpz84c015_device, txca_w)) - MCFG_TMPZ84C015_ZC3_CB(WRITELINE("iocpu", tmpz84c015_device, rxcb_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("iocpu", tmpz84c015_device, txcb_w)) + iocpu.zc_callback<2>().set("iocpu", FUNC(tmpz84c015_device::rxca_w)); + iocpu.zc_callback<2>().append("iocpu", FUNC(tmpz84c015_device::txca_w)); + iocpu.zc_callback<3>().set("iocpu", FUNC(tmpz84c015_device::rxcb_w)); + iocpu.zc_callback<3>().append("iocpu", FUNC(tmpz84c015_device::txcb_w)); - MCFG_TMPZ84C015_OUT_TXDA_CB(WRITELINE("cn7", rs232_port_device, write_txd)) - MCFG_TMPZ84C015_OUT_RTSA_CB(WRITELINE("cn7", rs232_port_device, write_rts)) - MCFG_TMPZ84C015_OUT_DTRA_CB(WRITELINE("cn7", rs232_port_device, write_dtr)) + iocpu.out_txda_callback().set("cn7", FUNC(rs232_port_device::write_txd)); + iocpu.out_rtsa_callback().set("cn7", FUNC(rs232_port_device::write_rts)); + iocpu.out_dtra_callback().set("cn7", FUNC(rs232_port_device::write_dtr)); - MCFG_TMPZ84C015_OUT_TXDB_CB(WRITELINE("cn8", rs232_port_device, write_txd)) - MCFG_TMPZ84C015_OUT_RTSB_CB(WRITELINE("cn8", rs232_port_device, write_rts)) - MCFG_TMPZ84C015_OUT_DTRB_CB(WRITELINE("cn8", rs232_port_device, write_dtr)) + iocpu.out_txdb_callback().set("cn8", FUNC(rs232_port_device::write_txd)); + iocpu.out_rtsb_callback().set("cn8", FUNC(rs232_port_device::write_rts)); + iocpu.out_dtrb_callback().set("cn8", FUNC(rs232_port_device::write_dtr)); - MCFG_TMPZ84C015_IN_PA_CB(IOPORT("dsw2")) - MCFG_TMPZ84C015_IN_PB_CB(IOPORT("dsw3")) + iocpu.in_pa_callback().set_ioport("dsw2"); + iocpu.in_pb_callback().set_ioport("dsw3"); - MCFG_DEVICE_ADD("cn7", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("iocpu", tmpz84c015_device, rxa_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("iocpu", tmpz84c015_device, ctsa_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("iocpu", tmpz84c015_device, dcda_w)) + rs232_port_device &cn7(RS232_PORT(config, "cn7", default_rs232_devices, nullptr)); + cn7.rxd_handler().set("iocpu", FUNC(tmpz84c015_device::rxa_w)); + cn7.cts_handler().set("iocpu", FUNC(tmpz84c015_device::ctsa_w)); + cn7.dcd_handler().set("iocpu", FUNC(tmpz84c015_device::dcda_w)); - MCFG_DEVICE_ADD("cn8", RS232_PORT, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(WRITELINE("iocpu", tmpz84c015_device, rxb_w)) - MCFG_RS232_CTS_HANDLER(WRITELINE("iocpu", tmpz84c015_device, ctsb_w)) - MCFG_RS232_DCD_HANDLER(WRITELINE("iocpu", tmpz84c015_device, dcdb_w)) + rs232_port_device &cn8(RS232_PORT(config, "cn8", default_rs232_devices, nullptr)); + cn8.rxd_handler().set("iocpu", FUNC(tmpz84c015_device::rxb_w)); + cn8.cts_handler().set("iocpu", FUNC(tmpz84c015_device::ctsb_w)); + cn8.dcd_handler().set("iocpu", FUNC(tmpz84c015_device::dcdb_w)); - MCFG_DEVICE_ADD("io", SEGA_315_5338A, 32_MHz_XTAL) - MCFG_315_5338A_READ_CB(READ8(*this, model1io2_device, io_r)) - MCFG_315_5338A_WRITE_CB(WRITE8(*this, model1io2_device, io_w)) - MCFG_315_5338A_IN_PA_CB(READ8(*this, model1io2_device, io_pa_r)) - MCFG_315_5338A_IN_PB_CB(READ8(*this, model1io2_device, io_pb_r)) - MCFG_315_5338A_IN_PC_CB(READ8(*this, model1io2_device, io_pc_r)) - MCFG_315_5338A_OUT_PD_CB(WRITE8(*this, model1io2_device, io_pd_w)) - MCFG_315_5338A_IN_PE_CB(READ8(*this, model1io2_device, io_pe_r)) - MCFG_315_5338A_OUT_PE_CB(WRITE8(*this, model1io2_device, io_pe_w)) - MCFG_315_5338A_OUT_PF_CB(WRITE8(*this, model1io2_device, io_pf_w)) - MCFG_315_5338A_OUT_PG_CB(WRITE8(*this, model1io2_device, io_pg_w)) + sega_315_5338a_device &io(SEGA_315_5338A(config, "io", 32_MHz_XTAL)); + io.read_callback().set(FUNC(model1io2_device::io_r)); + io.write_callback().set(FUNC(model1io2_device::io_w)); + io.in_pa_callback().set(FUNC(model1io2_device::io_pa_r)); + io.in_pb_callback().set(FUNC(model1io2_device::io_pb_r)); + io.in_pc_callback().set(FUNC(model1io2_device::io_pc_r)); + io.out_pd_callback().set(FUNC(model1io2_device::io_pd_w)); + io.in_pe_callback().set(FUNC(model1io2_device::io_pe_r)); + io.out_pe_callback().set(FUNC(model1io2_device::io_pe_w)); + io.out_pf_callback().set(FUNC(model1io2_device::io_pf_w)); + io.out_pg_callback().set(FUNC(model1io2_device::io_pg_w)); - MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT) // 93C45 + EEPROM_SERIAL_93C46_16BIT(config, m_eeprom); // 93C45 - MCFG_DEVICE_ADD("watchdog", MB3773, 0) + MB3773(config, m_watchdog, 0); - MCFG_DEVICE_ADD("adc", MSM6253, 32_MHz_XTAL / 16 / 4) - MCFG_MSM6253_IN0_ANALOG_READ(model1io2_device, analog0_r) - MCFG_MSM6253_IN1_ANALOG_READ(model1io2_device, analog1_r) - MCFG_MSM6253_IN2_ANALOG_READ(model1io2_device, analog2_r) - MCFG_MSM6253_IN3_ANALOG_READ(model1io2_device, analog3_r) + msm6253_device &adc(MSM6253(config, "adc", 32_MHz_XTAL / 16 / 4)); + adc.set_input_cb<0>(FUNC(model1io2_device::analog0_r), this); + adc.set_input_cb<1>(FUNC(model1io2_device::analog1_r), this); + adc.set_input_cb<2>(FUNC(model1io2_device::analog2_r), this); + adc.set_input_cb<3>(FUNC(model1io2_device::analog3_r), this); // diagnostic lcd display MCFG_SCREEN_ADD("screen", LCD) diff --git a/src/mame/machine/model1io2.h b/src/mame/machine/model1io2.h index f9e26a1ca3d..90e43430ff9 100644 --- a/src/mame/machine/model1io2.h +++ b/src/mame/machine/model1io2.h @@ -22,52 +22,52 @@ //************************************************************************** #define MCFG_MODEL1IO2_READ_CB(_devcb) \ - devcb = &downcast(*device).set_read_callback(DEVCB_##_devcb); + downcast(*device).set_read_callback(DEVCB_##_devcb); #define MCFG_MODEL1IO2_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_write_callback(DEVCB_##_devcb); + downcast(*device).set_write_callback(DEVCB_##_devcb); #define MCFG_MODEL1IO2_IN0_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<0>(DEVCB_##_devcb); + downcast(*device).set_in_callback<0>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_IN1_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<1>(DEVCB_##_devcb); + downcast(*device).set_in_callback<1>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_IN2_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<2>(DEVCB_##_devcb); + downcast(*device).set_in_callback<2>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_DRIVE_READ_CB(_devcb) \ - devcb = &downcast(*device).set_drive_read_callback(DEVCB_##_devcb); + downcast(*device).set_drive_read_callback(DEVCB_##_devcb); #define MCFG_MODEL1IO2_DRIVE_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_drive_write_callback(DEVCB_##_devcb); + downcast(*device).set_drive_write_callback(DEVCB_##_devcb); #define MCFG_MODEL1IO2_AN0_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback<0>(DEVCB_##_devcb); + downcast(*device).set_an_callback<0>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_AN1_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback<1>(DEVCB_##_devcb); + downcast(*device).set_an_callback<1>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_AN2_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback<2>(DEVCB_##_devcb); + downcast(*device).set_an_callback<2>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_AN3_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback<3>(DEVCB_##_devcb); + downcast(*device).set_an_callback<3>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_AN4_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback<4>(DEVCB_##_devcb); + downcast(*device).set_an_callback<4>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_AN5_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback<5>(DEVCB_##_devcb); + downcast(*device).set_an_callback<5>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_AN6_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback<6>(DEVCB_##_devcb); + downcast(*device).set_an_callback<6>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_AN7_CB(_devcb) \ - devcb = &downcast(*device).set_an_callback<7>(DEVCB_##_devcb); + downcast(*device).set_an_callback<7>(DEVCB_##_devcb); #define MCFG_MODEL1IO2_OUTPUT_CB(_devcb) \ - devcb = &downcast(*device).set_output_callback(DEVCB_##_devcb); + downcast(*device).set_output_callback(DEVCB_##_devcb); #define MCFG_MODEL1IO2_LIGHTGUN_P1Y_TAG(_tag) \ downcast(*device).set_lightgun_tag<0>(_tag); diff --git a/src/mame/machine/ms7004.h b/src/mame/machine/ms7004.h index 608ba702723..4c6979a486e 100644 --- a/src/mame/machine/ms7004.h +++ b/src/mame/machine/ms7004.h @@ -17,10 +17,10 @@ //************************************************************************** #define MCFG_MS7004_TX_HANDLER(_cb) \ - devcb = &downcast(*device).set_tx_handler(DEVCB_##_cb); + downcast(*device).set_tx_handler(DEVCB_##_cb); #define MCFG_MS7004_RTS_HANDLER(_cb) \ - devcb = &downcast(*device).set_rts_handler(DEVCB_##_cb); + downcast(*device).set_rts_handler(DEVCB_##_cb); //************************************************************************** diff --git a/src/mame/machine/msx_matsushita.h b/src/mame/machine/msx_matsushita.h index 8e155e2b399..0cf24e8bcdb 100644 --- a/src/mame/machine/msx_matsushita.h +++ b/src/mame/machine/msx_matsushita.h @@ -14,7 +14,7 @@ DECLARE_DEVICE_TYPE(MSX_MATSUSHITA, msx_matsushita_device) MCFG_DEVICE_ADD(_tag, MSX_MATSUSHITA, 0) #define MCFG_MSX_MATSUSHITA_TURBO_CB(_devcb) \ - devcb = &downcast(*device).set_turbo_callback(DEVCB_##_devcb); + downcast(*device).set_turbo_callback(DEVCB_##_devcb); class msx_matsushita_device : public device_t, diff --git a/src/mame/machine/namco06.h b/src/mame/machine/namco06.h index a6a411be3ce..bce93495248 100644 --- a/src/mame/machine/namco06.h +++ b/src/mame/machine/namco06.h @@ -23,42 +23,42 @@ struct namco_06xx_config downcast(*device).set_maincpu(_tag); #define MCFG_NAMCO_06XX_READ_0_CB(_devcb) \ - devcb = &downcast(*device).set_read_callback<0>(DEVCB_##_devcb); + downcast(*device).set_read_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_READ_1_CB(_devcb) \ - devcb = &downcast(*device).set_read_callback<1>(DEVCB_##_devcb); + downcast(*device).set_read_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_READ_2_CB(_devcb) \ - devcb = &downcast(*device).set_read_callback<2>(DEVCB_##_devcb); + downcast(*device).set_read_callback<2>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_READ_3_CB(_devcb) \ - devcb = &downcast(*device).set_read_callback<3>(DEVCB_##_devcb); + downcast(*device).set_read_callback<3>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_READ_REQUEST_0_CB(_devcb) \ - devcb = &downcast(*device).set_read_request_callback<0>(DEVCB_##_devcb); + downcast(*device).set_read_request_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_READ_REQUEST_1_CB(_devcb) \ - devcb = &downcast(*device).set_read_request_callback<1>(DEVCB_##_devcb); + downcast(*device).set_read_request_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_READ_REQUEST_2_CB(_devcb) \ - devcb = &downcast(*device).set_read_request_callback<2>(DEVCB_##_devcb); + downcast(*device).set_read_request_callback<2>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_READ_REQUEST_3_CB(_devcb) \ - devcb = &downcast(*device).set_read_request_callback<3>(DEVCB_##_devcb); + downcast(*device).set_read_request_callback<3>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_WRITE_0_CB(_devcb) \ - devcb = &downcast(*device).set_write_callback<0>(DEVCB_##_devcb); + downcast(*device).set_write_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_WRITE_1_CB(_devcb) \ - devcb = &downcast(*device).set_write_callback<1>(DEVCB_##_devcb); + downcast(*device).set_write_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_WRITE_2_CB(_devcb) \ - devcb = &downcast(*device).set_write_callback<2>(DEVCB_##_devcb); + downcast(*device).set_write_callback<2>(DEVCB_##_devcb); #define MCFG_NAMCO_06XX_WRITE_3_CB(_devcb) \ - devcb = &downcast(*device).set_write_callback<3>(DEVCB_##_devcb); + downcast(*device).set_write_callback<3>(DEVCB_##_devcb); /* device get info callback */ diff --git a/src/mame/machine/namco51.h b/src/mame/machine/namco51.h index 3f94482c9ce..0ee64727137 100644 --- a/src/mame/machine/namco51.h +++ b/src/mame/machine/namco51.h @@ -15,22 +15,22 @@ downcast(*device).set_screen_tag(screen_tag); #define MCFG_NAMCO_51XX_INPUT_0_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<0>(DEVCB_##_devcb); + downcast(*device).set_input_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO_51XX_INPUT_1_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<1>(DEVCB_##_devcb); + downcast(*device).set_input_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO_51XX_INPUT_2_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<2>(DEVCB_##_devcb); + downcast(*device).set_input_callback<2>(DEVCB_##_devcb); #define MCFG_NAMCO_51XX_INPUT_3_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<3>(DEVCB_##_devcb); + downcast(*device).set_input_callback<3>(DEVCB_##_devcb); #define MCFG_NAMCO_51XX_OUTPUT_0_CB(_devcb) \ - devcb = &downcast(*device).set_output_callback<0>(DEVCB_##_devcb); + downcast(*device).set_output_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO_51XX_OUTPUT_1_CB(_devcb) \ - devcb = &downcast(*device).set_output_callback<1>(DEVCB_##_devcb); + downcast(*device).set_output_callback<1>(DEVCB_##_devcb); class namco_51xx_device : public device_t { @@ -40,6 +40,8 @@ public: template void set_screen_tag(T &&tag) { m_screen.set_tag(std::forward(tag)); } template devcb_base &set_input_callback(Object &&cb) { return m_in[N].set_callback(std::forward(cb)); } template devcb_base &set_output_callback(Object &&cb) { return m_out[N].set_callback(std::forward(cb)); } + template auto input_callback() { return m_in[N].bind(); } + template auto output_callback() { return m_out[N].bind(); } DECLARE_WRITE8_MEMBER( write ); DECLARE_READ8_MEMBER( read ); diff --git a/src/mame/machine/namco53.h b/src/mame/machine/namco53.h index 7b8852bc738..ec2be4d9330 100644 --- a/src/mame/machine/namco53.h +++ b/src/mame/machine/namco53.h @@ -11,22 +11,22 @@ MCFG_DEVICE_ADD(_tag, NAMCO_53XX, _clock) #define MCFG_NAMCO_53XX_K_CB(_devcb) \ - devcb = &downcast(*device).set_k_port_callback(DEVCB_##_devcb); + downcast(*device).set_k_port_callback(DEVCB_##_devcb); #define MCFG_NAMCO_53XX_INPUT_0_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<0>(DEVCB_##_devcb); + downcast(*device).set_input_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO_53XX_INPUT_1_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<1>(DEVCB_##_devcb); + downcast(*device).set_input_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO_53XX_INPUT_2_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<2>(DEVCB_##_devcb); + downcast(*device).set_input_callback<2>(DEVCB_##_devcb); #define MCFG_NAMCO_53XX_INPUT_3_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<3>(DEVCB_##_devcb); + downcast(*device).set_input_callback<3>(DEVCB_##_devcb); #define MCFG_NAMCO_53XX_P_CB(_devcb) \ - devcb = &downcast(*device).set_p_port_callback(DEVCB_##_devcb); + downcast(*device).set_p_port_callback(DEVCB_##_devcb); class namco_53xx_device : public device_t @@ -35,9 +35,12 @@ public: namco_53xx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); template devcb_base &set_input_callback(Object &&cb) { return m_in[N].set_callback(std::forward(cb)); } + template auto input_callback() { return m_in[N].bind(); } template devcb_base &set_k_port_callback(Object &&cb) { return m_k.set_callback(std::forward(cb)); } template devcb_base &set_p_port_callback(Object &&cb) { return m_p.set_callback(std::forward(cb)); } + auto k_port_callback() { return m_k.bind(); } + auto p_port_callback() { return m_p.bind(); } DECLARE_READ8_MEMBER( K_r ); DECLARE_READ8_MEMBER( R0_r ); diff --git a/src/mame/machine/namco62.h b/src/mame/machine/namco62.h index c4bffda3ab9..5a2778ec572 100644 --- a/src/mame/machine/namco62.h +++ b/src/mame/machine/namco62.h @@ -9,22 +9,22 @@ MCFG_DEVICE_ADD(_tag, NAMCO_62XX, _clock) #define MCFG_NAMCO_62XX_INPUT_0_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<0>(DEVCB_##_devcb); + downcast(*device).set_input_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO_62XX_INPUT_1_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<1>(DEVCB_##_devcb); + downcast(*device).set_input_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO_62XX_INPUT_2_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<2>(DEVCB_##_devcb); + downcast(*device).set_input_callback<2>(DEVCB_##_devcb); #define MCFG_NAMCO_62XX_INPUT_3_CB(_devcb) \ - devcb = &downcast(*device).set_input_callback<3>(DEVCB_##_devcb); + downcast(*device).set_input_callback<3>(DEVCB_##_devcb); #define MCFG_NAMCO_62XX_OUTPUT_0_CB(_devcb) \ - devcb = &downcast(*device).set_output_callback<0>(DEVCB_##_devcb); + downcast(*device).set_output_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO_62XX_OUTPUT_1_CB(_devcb) \ - devcb = &downcast(*device).set_output_callback<1>(DEVCB_##_devcb); + downcast(*device).set_output_callback<1>(DEVCB_##_devcb); class namco_62xx_device : public device_t diff --git a/src/mame/machine/namco_c148.h b/src/mame/machine/namco_c148.h index c2e2cab4e50..f63d958a0af 100644 --- a/src/mame/machine/namco_c148.h +++ b/src/mame/machine/namco_c148.h @@ -25,10 +25,10 @@ downcast(*device).link_c148_device(_tag); #define MCFG_NAMCO_C148_EXT1_CB(_cb) \ - devcb = &downcast(*device).set_out_ext1_callback(DEVCB_##_cb); + downcast(*device).set_out_ext1_callback(DEVCB_##_cb); #define MCFG_NAMCO_C148_EXT2_CB(_cb) \ - devcb = &downcast(*device).set_out_ext2_callback(DEVCB_##_cb); + downcast(*device).set_out_ext2_callback(DEVCB_##_cb); //************************************************************************** diff --git a/src/mame/machine/namcoio.h b/src/mame/machine/namcoio.h index a0fd950369e..b788fd452a6 100644 --- a/src/mame/machine/namcoio.h +++ b/src/mame/machine/namcoio.h @@ -13,7 +13,8 @@ class namcoio_device : public device_t public: template devcb_base &set_in_callback(Object &&cb) { return m_in_cb[N].set_callback(std::forward(cb)); } template devcb_base &set_out_callback(Object &&cb) { return m_out_cb[N].set_callback(std::forward(cb)); } - + template auto in_callback() { return m_in_cb[N].bind(); } + template auto out_callback() { return m_out_cb[N].bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -89,59 +90,59 @@ DECLARE_DEVICE_TYPE(NAMCO_59XX, namco59xx_device) ***************************************************************************/ #define MCFG_NAMCO56XX_IN_0_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<0>(DEVCB_##_devcb); + downcast(*device).set_in_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO56XX_IN_1_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<1>(DEVCB_##_devcb); + downcast(*device).set_in_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO56XX_IN_2_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<2>(DEVCB_##_devcb); + downcast(*device).set_in_callback<2>(DEVCB_##_devcb); #define MCFG_NAMCO56XX_IN_3_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<3>(DEVCB_##_devcb); + downcast(*device).set_in_callback<3>(DEVCB_##_devcb); #define MCFG_NAMCO56XX_OUT_0_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO56XX_OUT_1_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO58XX_IN_0_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<0>(DEVCB_##_devcb); + downcast(*device).set_in_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO58XX_IN_1_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<1>(DEVCB_##_devcb); + downcast(*device).set_in_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO58XX_IN_2_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<2>(DEVCB_##_devcb); + downcast(*device).set_in_callback<2>(DEVCB_##_devcb); #define MCFG_NAMCO58XX_IN_3_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<3>(DEVCB_##_devcb); + downcast(*device).set_in_callback<3>(DEVCB_##_devcb); #define MCFG_NAMCO58XX_OUT_0_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO58XX_OUT_1_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO59XX_IN_0_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<0>(DEVCB_##_devcb); + downcast(*device).set_in_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO59XX_IN_1_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<1>(DEVCB_##_devcb); + downcast(*device).set_in_callback<1>(DEVCB_##_devcb); #define MCFG_NAMCO59XX_IN_2_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<2>(DEVCB_##_devcb); + downcast(*device).set_in_callback<2>(DEVCB_##_devcb); #define MCFG_NAMCO59XX_IN_3_CB(_devcb) \ - devcb = &downcast(*device).set_in_callback<3>(DEVCB_##_devcb); + downcast(*device).set_in_callback<3>(DEVCB_##_devcb); #define MCFG_NAMCO59XX_OUT_0_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<0>(DEVCB_##_devcb); + downcast(*device).set_out_callback<0>(DEVCB_##_devcb); #define MCFG_NAMCO59XX_OUT_1_CB(_devcb) \ - devcb = &downcast(*device).set_out_callback<1>(DEVCB_##_devcb); + downcast(*device).set_out_callback<1>(DEVCB_##_devcb); #endif // MAME_MACHINE_NAMCOIO_H diff --git a/src/mame/machine/nb1412m2.h b/src/mame/machine/nb1412m2.h index a570a7a4021..ae57cf2a1bb 100644 --- a/src/mame/machine/nb1412m2.h +++ b/src/mame/machine/nb1412m2.h @@ -21,7 +21,7 @@ Nichibutsu 1412M2 device emulation MCFG_DEVICE_ADD((tag), NB1412M2, (freq)) #define MCFG_NB1412M2_DAC_CB(_devcb) \ - devcb = &downcast(*device).set_dac_callback(DEVCB_##_devcb); + downcast(*device).set_dac_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/machine/nextkbd.h b/src/mame/machine/nextkbd.h index 7e04b5e1ba6..7ec98122c56 100644 --- a/src/mame/machine/nextkbd.h +++ b/src/mame/machine/nextkbd.h @@ -7,13 +7,13 @@ #define MCFG_NEXTKBD_INT_CHANGE_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_change_wr_callback(DEVCB_##_write); + downcast(*device).set_int_change_wr_callback(DEVCB_##_write); #define MCFG_NEXTKBD_INT_POWER_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_power_wr_callback(DEVCB_##_write); + downcast(*device).set_int_power_wr_callback(DEVCB_##_write); #define MCFG_NEXTKBD_INT_NMI_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_nmi_wr_callback(DEVCB_##_write); + downcast(*device).set_int_nmi_wr_callback(DEVCB_##_write); class nextkbd_device : public device_t { public: diff --git a/src/mame/machine/nextmo.h b/src/mame/machine/nextmo.h index 90d778f2877..af88f690f9d 100644 --- a/src/mame/machine/nextmo.h +++ b/src/mame/machine/nextmo.h @@ -6,10 +6,10 @@ #pragma once #define MCFG_NEXTMO_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_NEXTMO_DRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_drq_wr_callback(DEVCB_##_write); + downcast(*device).set_drq_wr_callback(DEVCB_##_write); class nextmo_device : public device_t { diff --git a/src/mame/machine/pc1512kb.h b/src/mame/machine/pc1512kb.h index fe5f7c5b30a..f4830b9221d 100644 --- a/src/mame/machine/pc1512kb.h +++ b/src/mame/machine/pc1512kb.h @@ -30,10 +30,10 @@ //************************************************************************** #define MCFG_PC1512_KEYBOARD_CLOCK_CALLBACK(_write) \ - devcb = &downcast(*device).set_clock_wr_callback(DEVCB_##_write); + downcast(*device).set_clock_wr_callback(DEVCB_##_write); #define MCFG_PC1512_KEYBOARD_DATA_CALLBACK(_write) \ - devcb = &downcast(*device).set_data_wr_callback(DEVCB_##_write); + downcast(*device).set_data_wr_callback(DEVCB_##_write); diff --git a/src/mame/machine/pc9801_kbd.h b/src/mame/machine/pc9801_kbd.h index 140a8c326e5..7275bf99666 100644 --- a/src/mame/machine/pc9801_kbd.h +++ b/src/mame/machine/pc9801_kbd.h @@ -17,7 +17,7 @@ //************************************************************************** #define MCFG_PC9801_KBD_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); //************************************************************************** diff --git a/src/mame/machine/pcd_kbd.h b/src/mame/machine/pcd_kbd.h index b8f95c2853a..2fce6e8e31e 100644 --- a/src/mame/machine/pcd_kbd.h +++ b/src/mame/machine/pcd_kbd.h @@ -6,7 +6,7 @@ #pragma once #define MCFG_PCD_KEYBOARD_OUT_TX_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_tx_handler(DEVCB_##_devcb); + downcast(*device).set_out_tx_handler(DEVCB_##_devcb); class pcd_keyboard_device : public device_t { diff --git a/src/mame/machine/pcshare.cpp b/src/mame/machine/pcshare.cpp index 0ab2e7f20bc..67caa8e7415 100644 --- a/src/mame/machine/pcshare.cpp +++ b/src/mame/machine/pcshare.cpp @@ -190,12 +190,12 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(pcat_base_state::pcat_common) MCFG_DEVICE_ADD("pic8259_1", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, pcat_base_state, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_2", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_1", pic8259_device, ir2_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("dma8237_1", AM9517A, 14.318181_MHz_XTAL / 3) MCFG_I8237_OUT_HREQ_CB(WRITELINE(*this, pcat_base_state, pc_dma_hrq_changed)) diff --git a/src/mame/machine/ps2timer.h b/src/mame/machine/ps2timer.h index 879526f1d92..902bf93af0a 100644 --- a/src/mame/machine/ps2timer.h +++ b/src/mame/machine/ps2timer.h @@ -14,7 +14,6 @@ #pragma once -#include "emu.h" class ps2_timer_device : public device_t { @@ -115,4 +114,4 @@ protected: DECLARE_DEVICE_TYPE(SONYPS2_TIMER, ps2_timer_device) -#endif // MAME_MACHINE_PS2TIMER_H \ No newline at end of file +#endif // MAME_MACHINE_PS2TIMER_H diff --git a/src/mame/machine/psxcd.h b/src/mame/machine/psxcd.h index dd9b19dfbe4..2a32e094ff9 100644 --- a/src/mame/machine/psxcd.h +++ b/src/mame/machine/psxcd.h @@ -13,7 +13,7 @@ //************************************************************************** #define MCFG_PSXCD_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class psxcd_device : public cdrom_image_device { diff --git a/src/mame/machine/qimi.h b/src/mame/machine/qimi.h index baef9984218..0ebfad9a8a5 100644 --- a/src/mame/machine/qimi.h +++ b/src/mame/machine/qimi.h @@ -19,7 +19,7 @@ //************************************************************************** #define MCFG_QIMI_EXTINT_CALLBACK(_write) \ - devcb = &downcast(*device).set_exting_wr_callback(DEVCB_##_write); + downcast(*device).set_exting_wr_callback(DEVCB_##_write); diff --git a/src/mame/machine/rad_eu3a05gpio.h b/src/mame/machine/rad_eu3a05gpio.h index 435e09be56f..329ac588940 100644 --- a/src/mame/machine/rad_eu3a05gpio.h +++ b/src/mame/machine/rad_eu3a05gpio.h @@ -5,13 +5,13 @@ #define MAME_AUDIO_RAD_EU3A05GPIO_H #define MCFG_RADICA6502_GPIO_READ_PORT0_CB(_devcb) \ - devcb = &downcast(*device).set_gpio_read_0_callback(DEVCB_##_devcb); + downcast(*device).set_gpio_read_0_callback(DEVCB_##_devcb); #define MCFG_RADICA6502_GPIO_READ_PORT1_CB(_devcb) \ - devcb = &downcast(*device).set_gpio_read_1_callback(DEVCB_##_devcb); + downcast(*device).set_gpio_read_1_callback(DEVCB_##_devcb); #define MCFG_RADICA6502_GPIO_READ_PORT2_CB(_devcb) \ - devcb = &downcast(*device).set_gpio_read_2_callback(DEVCB_##_devcb); + downcast(*device).set_gpio_read_2_callback(DEVCB_##_devcb); class radica6502_gpio_device : public device_t diff --git a/src/mame/machine/segaic16.h b/src/mame/machine/segaic16.h index 4cd2c64cbd7..48b6c0c3b59 100644 --- a/src/mame/machine/segaic16.h +++ b/src/mame/machine/segaic16.h @@ -27,9 +27,9 @@ #define MCFG_SEGA_315_5195_MAPPER_HANDLER(_class, _mapper) \ downcast(*device).set_mapper(sega_315_5195_mapper_device::mapper_delegate(&_class::_mapper, #_class "::" #_mapper, nullptr, (_class *)nullptr)); #define MCFG_SEGA_315_5195_PBF_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_pbf_callback(DEVCB_##_devcb); + downcast(*device).set_pbf_callback(DEVCB_##_devcb); #define MCFG_SEGA_315_5195_MCU_INT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_mcu_int_callback(DEVCB_##_devcb); + downcast(*device).set_mcu_int_callback(DEVCB_##_devcb); #define MCFG_SEGA_315_5248_MULTIPLIER_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, SEGA_315_5248_MULTIPLIER, 0) @@ -37,13 +37,6 @@ #define MCFG_SEGA_315_5249_DIVIDER_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, SEGA_315_5249_DIVIDER, 0) -#define MCFG_SEGA_315_5250_COMPARE_TIMER_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, SEGA_315_5250_COMPARE_TIMER, 0) -#define MCFG_SEGA_315_5250_68KINT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_68kint_callback(DEVCB_##_devcb); -#define MCFG_SEGA_315_5250_ZINT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_zint_callback(DEVCB_##_devcb); - //************************************************************************** // TYPE DEFINITIONS @@ -252,8 +245,8 @@ public: sega_315_5250_compare_timer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration helpers - template devcb_base &set_68kint_callback(Object &&object) { return m_68kint_callback.set_callback(std::forward(object)); } - template devcb_base &set_zint_callback(Object &&object) { return m_zint_callback.set_callback(std::forward(object)); } + auto m68kint_callback() { return m_68kint_callback.bind(); } + auto zint_callback() { return m_zint_callback.bind(); } // public interface DECLARE_WRITE_LINE_MEMBER(exck_w); diff --git a/src/mame/machine/seibucop/seibucop.h b/src/mame/machine/seibucop/seibucop.h index 7bd5809d9bf..2ab5e2ab6b6 100644 --- a/src/mame/machine/seibucop/seibucop.h +++ b/src/mame/machine/seibucop/seibucop.h @@ -17,10 +17,10 @@ #define LOG_Move0905 0 #define MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_videoramout_cb(DEVCB_##_devcb); + downcast(*device).set_videoramout_cb(DEVCB_##_devcb); #define MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_paletteramout_cb(DEVCB_##_devcb); + downcast(*device).set_paletteramout_cb(DEVCB_##_devcb); #define MCFG_RAIDEN2COP_HOST_CPU(_tag) \ downcast(*device).set_host_cpu_tag(_tag); diff --git a/src/mame/machine/tait8741.h b/src/mame/machine/tait8741.h index 5da76a49d7a..ceb9b39e823 100644 --- a/src/mame/machine/tait8741.h +++ b/src/mame/machine/tait8741.h @@ -18,10 +18,10 @@ MCFG_DEVICE_ADD(_tag, TAITO8741_4PACK, 0) #define MCFG_TAITO8741_PORT_HANDLERS(_devcb0, _devcb1, _devcb2, _devcb3) \ - devcb = &downcast(*device).set_port_handler_0_callback(DEVCB_##_devcb0); \ - devcb = &downcast(*device).set_port_handler_1_callback(DEVCB_##_devcb1); \ - devcb = &downcast(*device).set_port_handler_2_callback(DEVCB_##_devcb2); \ - devcb = &downcast(*device).set_port_handler_3_callback(DEVCB_##_devcb3); + downcast(*device).set_port_handler_0_callback(DEVCB_##_devcb0); \ + downcast(*device).set_port_handler_1_callback(DEVCB_##_devcb1); \ + downcast(*device).set_port_handler_2_callback(DEVCB_##_devcb2); \ + downcast(*device).set_port_handler_3_callback(DEVCB_##_devcb3); #define MCFG_TAITO8741_MODES(_mode0, _mode1, _mode2, _mode3) \ downcast(*device).set_mode(0, _mode0); \ diff --git a/src/mame/machine/taito68705interface.h b/src/mame/machine/taito68705interface.h index ce87836187e..80871f77799 100644 --- a/src/mame/machine/taito68705interface.h +++ b/src/mame/machine/taito68705interface.h @@ -63,7 +63,7 @@ private: #define MCFG_TAITO_M68705_AUX_STROBE_CB(cb) \ - devcb = &downcast(*device).set_aux_strobe_cb(DEVCB_##cb); + downcast(*device).set_aux_strobe_cb(DEVCB_##cb); class taito68705_mcu_device : public taito68705_mcu_device_base { @@ -98,10 +98,10 @@ protected: #define MCFG_ARKANOID_MCU_SEMAPHORE_CB(cb) \ - devcb = &downcast(*device).set_semaphore_cb(DEVCB_##cb); + downcast(*device).set_semaphore_cb(DEVCB_##cb); #define MCFG_ARKANOID_MCU_PORTB_R_CB(cb) \ - devcb = &downcast(*device).set_portb_r_cb(DEVCB_##cb); + downcast(*device).set_portb_r_cb(DEVCB_##cb); class arkanoid_mcu_device_base : public taito68705_mcu_device_base { diff --git a/src/mame/machine/taitocchip.h b/src/mame/machine/taitocchip.h index 526b54137c4..f551a7192b0 100644 --- a/src/mame/machine/taitocchip.h +++ b/src/mame/machine/taitocchip.h @@ -15,25 +15,25 @@ DECLARE_DEVICE_TYPE(TAITO_CCHIP, taito_cchip_device) MCFG_DEVICE_ADD(_tag, TAITO_CCHIP, _clock) #define MCFG_CCHIP_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_in_pa_callback(DEVCB_##_devcb); + downcast(*device).set_in_pa_callback(DEVCB_##_devcb); #define MCFG_CCHIP_IN_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_in_pb_callback(DEVCB_##_devcb); + downcast(*device).set_in_pb_callback(DEVCB_##_devcb); #define MCFG_CCHIP_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_in_pc_callback(DEVCB_##_devcb); + downcast(*device).set_in_pc_callback(DEVCB_##_devcb); #define MCFG_CCHIP_IN_PORTAD_CB(_devcb) \ - devcb = &downcast(*device).set_in_ad_callback(DEVCB_##_devcb); + downcast(*device).set_in_ad_callback(DEVCB_##_devcb); #define MCFG_CCHIP_OUT_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_out_pa_callback(DEVCB_##_devcb); + downcast(*device).set_out_pa_callback(DEVCB_##_devcb); #define MCFG_CCHIP_OUT_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_out_pb_callback(DEVCB_##_devcb); + downcast(*device).set_out_pb_callback(DEVCB_##_devcb); #define MCFG_CCHIP_OUT_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_out_pc_callback(DEVCB_##_devcb); + downcast(*device).set_out_pc_callback(DEVCB_##_devcb); class taito_cchip_device : public device_t diff --git a/src/mame/machine/taitoio.h b/src/mame/machine/taitoio.h index 63b843b8f28..06bd5868d2d 100644 --- a/src/mame/machine/taitoio.h +++ b/src/mame/machine/taitoio.h @@ -21,12 +21,12 @@ class tc0040ioc_device : public device_t public: tc0040ioc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_read_0_callback(Object &&cb) { return m_read_0_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_1_callback(Object &&cb) { return m_read_1_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_2_callback(Object &&cb) { return m_read_2_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_3_callback(Object &&cb) { return m_read_3_cb.set_callback(std::forward(cb)); } - template devcb_base &set_write_4_callback(Object &&cb) { return m_write_4_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_7_callback(Object &&cb) { return m_read_7_cb.set_callback(std::forward(cb)); } + auto read_0_callback() { return m_read_0_cb.bind(); } + auto read_1_callback() { return m_read_1_cb.bind(); } + auto read_2_callback() { return m_read_2_cb.bind(); } + auto read_3_callback() { return m_read_3_cb.bind(); } + auto write_4_callback() { return m_write_4_cb.bind(); } + auto read_7_callback() { return m_read_7_cb.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -64,13 +64,13 @@ class tc0220ioc_device : public device_t public: tc0220ioc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_read_0_callback(Object &&cb) { return m_read_0_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_1_callback(Object &&cb) { return m_read_1_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_2_callback(Object &&cb) { return m_read_2_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_3_callback(Object &&cb) { return m_read_3_cb.set_callback(std::forward(cb)); } - template devcb_base &set_write_3_callback(Object &&cb) { return m_write_3_cb.set_callback(std::forward(cb)); } - template devcb_base &set_write_4_callback(Object &&cb) { return m_write_4_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_7_callback(Object &&cb) { return m_read_7_cb.set_callback(std::forward(cb)); } + auto read_0_callback() { return m_read_0_cb.bind(); } + auto read_1_callback() { return m_read_1_cb.bind(); } + auto read_2_callback() { return m_read_2_cb.bind(); } + auto read_3_callback() { return m_read_3_cb.bind(); } + auto write_3_callback() { return m_write_3_cb.bind(); } + auto write_4_callback() { return m_write_4_cb.bind(); } + auto read_7_callback() { return m_read_7_cb.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -103,13 +103,13 @@ class tc0510nio_device : public device_t public: tc0510nio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_read_0_callback(Object &&cb) { return m_read_0_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_1_callback(Object &&cb) { return m_read_1_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_2_callback(Object &&cb) { return m_read_2_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_3_callback(Object &&cb) { return m_read_3_cb.set_callback(std::forward(cb)); } - template devcb_base &set_write_3_callback(Object &&cb) { return m_write_3_cb.set_callback(std::forward(cb)); } - template devcb_base &set_write_4_callback(Object &&cb) { return m_write_4_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_7_callback(Object &&cb) { return m_read_7_cb.set_callback(std::forward(cb)); } + auto read_0_callback() { return m_read_0_cb.bind(); } + auto read_1_callback() { return m_read_1_cb.bind(); } + auto read_2_callback() { return m_read_2_cb.bind(); } + auto read_3_callback() { return m_read_3_cb.bind(); } + auto write_3_callback() { return m_write_3_cb.bind(); } + auto write_4_callback() { return m_write_4_cb.bind(); } + auto read_7_callback() { return m_read_7_cb.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -146,13 +146,12 @@ class tc0640fio_device : public device_t public: tc0640fio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_read_0_callback(Object &&cb) { return m_read_0_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_1_callback(Object &&cb) { return m_read_1_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_2_callback(Object &&cb) { return m_read_2_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_3_callback(Object &&cb) { return m_read_3_cb.set_callback(std::forward(cb)); } - template devcb_base &set_write_4_callback(Object &&cb) { return m_write_4_cb.set_callback(std::forward(cb)); } - template devcb_base &set_read_7_callback(Object &&cb) { return m_read_7_cb.set_callback(std::forward(cb)); } - + auto read_0_callback() { return m_read_0_cb.bind(); } + auto read_1_callback() { return m_read_1_cb.bind(); } + auto read_2_callback() { return m_read_2_cb.bind(); } + auto read_3_callback() { return m_read_3_cb.bind(); } + auto write_4_callback() { return m_write_4_cb.bind(); } + auto read_7_callback() { return m_read_7_cb.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -183,91 +182,4 @@ protected: DECLARE_DEVICE_TYPE(TC0640FIO, tc0640fio_device) - -/*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ - -#define MCFG_TC0040IOC_READ_0_CB(_devcb) \ - devcb = &downcast(*device).set_read_0_callback(DEVCB_##_devcb); - -#define MCFG_TC0040IOC_READ_1_CB(_devcb) \ - devcb = &downcast(*device).set_read_1_callback(DEVCB_##_devcb); - -#define MCFG_TC0040IOC_READ_2_CB(_devcb) \ - devcb = &downcast(*device).set_read_2_callback(DEVCB_##_devcb); - -#define MCFG_TC0040IOC_READ_3_CB(_devcb) \ - devcb = &downcast(*device).set_read_3_callback(DEVCB_##_devcb); - -#define MCFG_TC0040IOC_WRITE_4_CB(_devcb) \ - devcb = &downcast(*device).set_write_4_callback(DEVCB_##_devcb); - -#define MCFG_TC0040IOC_READ_7_CB(_devcb) \ - devcb = &downcast(*device).set_read_7_callback(DEVCB_##_devcb); - - -#define MCFG_TC0220IOC_READ_0_CB(_devcb) \ - devcb = &downcast(*device).set_read_0_callback(DEVCB_##_devcb); - -#define MCFG_TC0220IOC_READ_1_CB(_devcb) \ - devcb = &downcast(*device).set_read_1_callback(DEVCB_##_devcb); - -#define MCFG_TC0220IOC_READ_2_CB(_devcb) \ - devcb = &downcast(*device).set_read_2_callback(DEVCB_##_devcb); - -#define MCFG_TC0220IOC_READ_3_CB(_devcb) \ - devcb = &downcast(*device).set_read_3_callback(DEVCB_##_devcb); - -#define MCFG_TC0220IOC_WRITE_3_CB(_devcb) \ - devcb = &downcast(*device).set_write_3_callback(DEVCB_##_devcb); - -#define MCFG_TC0220IOC_WRITE_4_CB(_devcb) \ - devcb = &downcast(*device).set_write_4_callback(DEVCB_##_devcb); - -#define MCFG_TC0220IOC_READ_7_CB(_devcb) \ - devcb = &downcast(*device).set_read_7_callback(DEVCB_##_devcb); - - -#define MCFG_TC0510NIO_READ_0_CB(_devcb) \ - devcb = &downcast(*device).set_read_0_callback(DEVCB_##_devcb); - -#define MCFG_TC0510NIO_READ_1_CB(_devcb) \ - devcb = &downcast(*device).set_read_1_callback(DEVCB_##_devcb); - -#define MCFG_TC0510NIO_READ_2_CB(_devcb) \ - devcb = &downcast(*device).set_read_2_callback(DEVCB_##_devcb); - -#define MCFG_TC0510NIO_READ_3_CB(_devcb) \ - devcb = &downcast(*device).set_read_3_callback(DEVCB_##_devcb); - -#define MCFG_TC0510NIO_WRITE_3_CB(_devcb) \ - devcb = &downcast(*device).set_write_3_callback(DEVCB_##_devcb); - -#define MCFG_TC0510NIO_WRITE_4_CB(_devcb) \ - devcb = &downcast(*device).set_write_4_callback(DEVCB_##_devcb); - -#define MCFG_TC0510NIO_READ_7_CB(_devcb) \ - devcb = &downcast(*device).set_read_7_callback(DEVCB_##_devcb); - - -#define MCFG_TC0640FIO_READ_0_CB(_devcb) \ - devcb = &downcast(*device).set_read_0_callback(DEVCB_##_devcb); - -#define MCFG_TC0640FIO_READ_1_CB(_devcb) \ - devcb = &downcast(*device).set_read_1_callback(DEVCB_##_devcb); - -#define MCFG_TC0640FIO_READ_2_CB(_devcb) \ - devcb = &downcast(*device).set_read_2_callback(DEVCB_##_devcb); - -#define MCFG_TC0640FIO_READ_3_CB(_devcb) \ - devcb = &downcast(*device).set_read_3_callback(DEVCB_##_devcb); - -#define MCFG_TC0640FIO_WRITE_4_CB(_devcb) \ - devcb = &downcast(*device).set_write_4_callback(DEVCB_##_devcb); - -#define MCFG_TC0640FIO_READ_7_CB(_devcb) \ - devcb = &downcast(*device).set_read_7_callback(DEVCB_##_devcb); - - #endif // MAME_MACHINE_TAITOIO_H diff --git a/src/mame/machine/taitosjsec.h b/src/mame/machine/taitosjsec.h index 48ccfe57a1b..d46e5ec705f 100644 --- a/src/mame/machine/taitosjsec.h +++ b/src/mame/machine/taitosjsec.h @@ -13,13 +13,13 @@ DECLARE_DEVICE_TYPE(TAITO_SJ_SECURITY_MCU, taito_sj_security_mcu_device) #define MCFG_TAITO_SJ_SECURITY_MCU_INT_MODE(mode) \ downcast(*device).set_int_mode(taito_sj_security_mcu_device::int_mode::mode); #define MCFG_TAITO_SJ_SECURITY_MCU_68READ_CB(cb) \ - devcb = &downcast(*device).set_68read_cb(DEVCB_##cb); + downcast(*device).set_68read_cb(DEVCB_##cb); #define MCFG_TAITO_SJ_SECURITY_MCU_68WRITE_CB(cb) \ - devcb = &downcast(*device).set_68write_cb(DEVCB_##cb); + downcast(*device).set_68write_cb(DEVCB_##cb); #define MCFG_TAITO_SJ_SECURITY_MCU_68INTRQ_CB(cb) \ - devcb = &downcast(*device).set_68intrq_cb(DEVCB_##cb); + downcast(*device).set_68intrq_cb(DEVCB_##cb); #define MCFG_TAITO_SJ_SECURITY_MCU_BUSRQ_CB(cb) \ - devcb = &downcast(*device).set_busrq_cb(DEVCB_##cb); + downcast(*device).set_busrq_cb(DEVCB_##cb); class taito_sj_security_mcu_device : public device_t { diff --git a/src/mame/machine/tandy2kb.h b/src/mame/machine/tandy2kb.h index 39ecdace66f..1af6a5d3b52 100644 --- a/src/mame/machine/tandy2kb.h +++ b/src/mame/machine/tandy2kb.h @@ -28,10 +28,10 @@ //************************************************************************** #define MCFG_TANDY2000_KEYBOARD_CLOCK_CALLBACK(_write) \ - devcb = &downcast(*device).set_clock_wr_callback(DEVCB_##_write); + downcast(*device).set_clock_wr_callback(DEVCB_##_write); #define MCFG_TANDY2000_KEYBOARD_DATA_CALLBACK(_write) \ - devcb = &downcast(*device).set_data_wr_callback(DEVCB_##_write); + downcast(*device).set_data_wr_callback(DEVCB_##_write); diff --git a/src/mame/machine/trs80m2kb.h b/src/mame/machine/trs80m2kb.h index 9637f240601..b3f0d987855 100644 --- a/src/mame/machine/trs80m2kb.h +++ b/src/mame/machine/trs80m2kb.h @@ -29,7 +29,7 @@ //************************************************************************** #define MCFG_TRS80M2_KEYBOARD_CLOCK_CALLBACK(_write) \ - devcb = &downcast(*device).set_clock_wr_callback(DEVCB_##_write); + downcast(*device).set_clock_wr_callback(DEVCB_##_write); diff --git a/src/mame/machine/upd65031.h b/src/mame/machine/upd65031.h index 17e6ec64913..490772f4777 100644 --- a/src/mame/machine/upd65031.h +++ b/src/mame/machine/upd65031.h @@ -18,16 +18,16 @@ //************************************************************************** #define MCFG_UPD65031_KB_CALLBACK(_read) \ - devcb = &downcast(*device).set_kb_rd_callback(DEVCB_##_read); + downcast(*device).set_kb_rd_callback(DEVCB_##_read); #define MCFG_UPD65031_INT_CALLBACK(_write) \ - devcb = &downcast(*device).set_int_wr_callback(DEVCB_##_write); + downcast(*device).set_int_wr_callback(DEVCB_##_write); #define MCFG_UPD65031_NMI_CALLBACK(_write) \ - devcb = &downcast(*device).set_nmi_wr_callback(DEVCB_##_write); + downcast(*device).set_nmi_wr_callback(DEVCB_##_write); #define MCFG_UPD65031_SPKR_CALLBACK(_write) \ - devcb = &downcast(*device).set_spkr_wr_callback(DEVCB_##_write); + downcast(*device).set_spkr_wr_callback(DEVCB_##_write); #define MCFG_UPD65031_SCR_UPDATE_CB(_class, _method) \ downcast(*device).set_screen_update_callback(upd65031_screen_update_delegate(&_class::_method, #_class "::" #_method, this)); @@ -59,6 +59,10 @@ public: template devcb_base &set_int_wr_callback(Object &&cb) { return m_write_int.set_callback(std::forward(cb)); } template devcb_base &set_nmi_wr_callback(Object &&cb) { return m_write_nmi.set_callback(std::forward(cb)); } template devcb_base &set_spkr_wr_callback(Object &&cb) { return m_write_spkr.set_callback(std::forward(cb)); } + auto kb_rd_callback() { return m_read_kb.bind(); } + auto int_wr_callback() { return m_write_int.bind(); } + auto nmi_wr_callback() { return m_write_nmi.bind(); } + auto spkr_wr_callback() { return m_write_spkr.bind(); } template void set_screen_update_callback(Object &&cb) { m_screen_update_cb = std::forward(cb); } template void set_memory_update_callback(Object &&cb) { m_out_mem_cb = std::forward(cb); } diff --git a/src/mame/machine/v1050kb.h b/src/mame/machine/v1050kb.h index 96172ba33ff..a36280bb425 100644 --- a/src/mame/machine/v1050kb.h +++ b/src/mame/machine/v1050kb.h @@ -21,7 +21,7 @@ //************************************************************************** #define MCFG_V1050_KEYBOARD_OUT_TX_HANDLER(_devcb) \ - devcb = &downcast(*device).set_out_tx_handler(DEVCB_##_devcb); + downcast(*device).set_out_tx_handler(DEVCB_##_devcb); diff --git a/src/mame/machine/victor9k_fdc.h b/src/mame/machine/victor9k_fdc.h index 649598af50c..a7c39c6e7b5 100644 --- a/src/mame/machine/victor9k_fdc.h +++ b/src/mame/machine/victor9k_fdc.h @@ -19,21 +19,6 @@ -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_VICTOR_9000_FDC_IRQ_CB(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); - -#define MCFG_VICTOR_9000_FDC_SYN_CB(_write) \ - devcb = &downcast(*device).set_syn_wr_callback(DEVCB_##_write); - -#define MCFG_VICTOR_9000_FDC_LBRDY_CB(_write) \ - devcb = &downcast(*device).set_lbrdy_wr_callback(DEVCB_##_write); - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -46,9 +31,9 @@ public: // construction/destruction victor_9000_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_irq_wr_callback(Object &&cb) { return m_irq_cb.set_callback(std::forward(cb)); } - template devcb_base &set_syn_wr_callback(Object &&cb) { return m_syn_cb.set_callback(std::forward(cb)); } - template devcb_base &set_lbrdy_wr_callback(Object &&cb) { return m_lbrdy_cb.set_callback(std::forward(cb)); } + auto irq_wr_callback() { return m_irq_cb.bind(); } + auto syn_wr_callback() { return m_syn_cb.bind(); } + auto lbrdy_wr_callback() { return m_lbrdy_cb.bind(); } DECLARE_READ8_MEMBER( cs5_r ) { return m_via4->read(space, offset); } DECLARE_WRITE8_MEMBER( cs5_w ) { m_via4->write(space, offset, data); } diff --git a/src/mame/machine/victor9k_kb.h b/src/mame/machine/victor9k_kb.h index e1e042ac7e3..683100506c9 100644 --- a/src/mame/machine/victor9k_kb.h +++ b/src/mame/machine/victor9k_kb.h @@ -21,10 +21,10 @@ //************************************************************************** #define MCFG_VICTOR9K_KBRDY_HANDLER(_devcb) \ - devcb = &downcast(*device).set_kbrdy_cb(DEVCB_##_devcb); + downcast(*device).set_kbrdy_cb(DEVCB_##_devcb); #define MCFG_VICTOR9K_KBDATA_HANDLER(_devcb) \ - devcb = &downcast(*device).set_kbdata_cb(DEVCB_##_devcb); + downcast(*device).set_kbdata_cb(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/machine/vs9209.h b/src/mame/machine/vs9209.h index 161799419cc..6acebb5022c 100644 --- a/src/mame/machine/vs9209.h +++ b/src/mame/machine/vs9209.h @@ -11,46 +11,6 @@ #pragma once -//************************************************************************** -// CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_VS9209_IN_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(0, DEVCB_##_devcb); -#define MCFG_VS9209_IN_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(1, DEVCB_##_devcb); -#define MCFG_VS9209_IN_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(2, DEVCB_##_devcb); -#define MCFG_VS9209_IN_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(3, DEVCB_##_devcb); -#define MCFG_VS9209_IN_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(4, DEVCB_##_devcb); -#define MCFG_VS9209_IN_PORTF_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(5, DEVCB_##_devcb); -#define MCFG_VS9209_IN_PORTG_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(6, DEVCB_##_devcb); -#define MCFG_VS9209_IN_PORTH_CB(_devcb) \ - devcb = &downcast(*device).set_input_cb(7, DEVCB_##_devcb); - -#ifdef VS9209_PROBABLY_NONEXISTENT_OUTPUTS -#define MCFG_VS9209_OUT_PORTA_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(0, DEVCB_##_devcb); -#define MCFG_VS9209_OUT_PORTB_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(1, DEVCB_##_devcb); -#define MCFG_VS9209_OUT_PORTC_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(2, DEVCB_##_devcb); -#define MCFG_VS9209_OUT_PORTD_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(3, DEVCB_##_devcb); -#endif -#define MCFG_VS9209_OUT_PORTE_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(4, DEVCB_##_devcb); -#define MCFG_VS9209_OUT_PORTF_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(5, DEVCB_##_devcb); -#define MCFG_VS9209_OUT_PORTG_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(6, DEVCB_##_devcb); -#define MCFG_VS9209_OUT_PORTH_CB(_devcb) \ - devcb = &downcast(*device).set_output_cb(7, DEVCB_##_devcb); - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -64,16 +24,24 @@ public: vs9209_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); // configuration - template devcb_base &set_input_cb(int p, Object &&obj) - { - assert(p >= 0 && p < 8); - return m_input_cb[p].set_callback(std::forward(obj)); - } - template devcb_base &set_output_cb(int p, Object &&obj) - { - assert(p >= 0 && p < 8); - return m_output_cb[p].set_callback(std::forward(obj)); - } + auto porta_input_cb() { return m_input_cb[0].bind(); } + auto portb_input_cb() { return m_input_cb[1].bind(); } + auto portc_input_cb() { return m_input_cb[2].bind(); } + auto portd_input_cb() { return m_input_cb[3].bind(); } + auto porte_input_cb() { return m_input_cb[4].bind(); } + auto portf_input_cb() { return m_input_cb[5].bind(); } + auto portg_input_cb() { return m_input_cb[6].bind(); } + auto porth_input_cb() { return m_input_cb[7].bind(); } +#ifdef VS9209_PROBABLY_NONEXISTENT_OUTPUTS + auto porta_output_cb() { return m_output_cb[0].bind(); } + auto portb_output_cb() { return m_output_cb[1].bind(); } + auto portc_output_cb() { return m_output_cb[2].bind(); } + auto portd_output_cb() { return m_output_cb[3].bind(); } +#endif // VS9209_PROBABLY_NONEXISTENT_OUTPUTS + auto porte_output_cb() { return m_output_cb[4].bind(); } + auto portf_output_cb() { return m_output_cb[5].bind(); } + auto portg_output_cb() { return m_output_cb[6].bind(); } + auto porth_output_cb() { return m_output_cb[7].bind(); } // memory handlers DECLARE_READ8_MEMBER(read); diff --git a/src/mame/machine/vt100_kbd.h b/src/mame/machine/vt100_kbd.h index 9b1499fd918..0c2a6c24d76 100644 --- a/src/mame/machine/vt100_kbd.h +++ b/src/mame/machine/vt100_kbd.h @@ -22,7 +22,7 @@ //************************************************************************** #define MCFG_VT100_KEYBOARD_SIGNAL_OUT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_signal_out_callback(DEVCB_##_devcb); + downcast(*device).set_signal_out_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/machine/wangpckb.h b/src/mame/machine/wangpckb.h index c5b3d59a92f..320f0f57d01 100644 --- a/src/mame/machine/wangpckb.h +++ b/src/mame/machine/wangpckb.h @@ -34,7 +34,7 @@ MCFG_DEVICE_ADD(WANGPC_KEYBOARD_TAG, WANGPC_KEYBOARD, 0) #define MCFG_WANGPCKB_TXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txd_handler(DEVCB_##_devcb); + downcast(*device).set_txd_handler(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/machine/x820kb.h b/src/mame/machine/x820kb.h index 1a17b8d3123..e3000fe415a 100644 --- a/src/mame/machine/x820kb.h +++ b/src/mame/machine/x820kb.h @@ -20,7 +20,7 @@ //************************************************************************** #define MCFG_XEROX_820_KEYBOARD_KBSTB_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_kbstb_wr_callback(DEVCB_##_devcb); + downcast(*device).set_kbstb_wr_callback(DEVCB_##_devcb); diff --git a/src/mame/machine/xbox.cpp b/src/mame/machine/xbox.cpp index a85a0c2bfb6..2e2bc7bdaa2 100644 --- a/src/mame/machine/xbox.cpp +++ b/src/mame/machine/xbox.cpp @@ -893,12 +893,12 @@ MACHINE_CONFIG_START(xbox_base_state::xbox_base) MCFG_DEVICE_ADD("pic8259_1", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE(*this, xbox_base_state, xbox_pic8259_1_set_int_line)) - MCFG_PIC8259_IN_SP_CB(VCC) + MCFG_PIC8259_IN_SP_CB(CONSTANT(1)) MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, xbox_base_state, get_slave_ack)) MCFG_DEVICE_ADD("pic8259_2", PIC8259, 0) MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_1", pic8259_device, ir2_w)) - MCFG_PIC8259_IN_SP_CB(GND) + MCFG_PIC8259_IN_SP_CB(CONSTANT(0)) MCFG_DEVICE_ADD("pit8254", PIT8254, 0) MCFG_PIT8253_CLK0(1125000) /* heartbeat IRQ */ diff --git a/src/mame/machine/znmcu.h b/src/mame/machine/znmcu.h index 8603bac7eb8..5b8e3a88d94 100644 --- a/src/mame/machine/znmcu.h +++ b/src/mame/machine/znmcu.h @@ -9,19 +9,19 @@ DECLARE_DEVICE_TYPE(ZNMCU, znmcu_device) #define MCFG_ZNMCU_DATAOUT_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dataout_handler(DEVCB_##_devcb); + downcast(*device).set_dataout_handler(DEVCB_##_devcb); #define MCFG_ZNMCU_DSR_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dsr_handler(DEVCB_##_devcb); + downcast(*device).set_dsr_handler(DEVCB_##_devcb); #define MCFG_ZNMCU_DSW_HANDLER(_devcb) \ - devcb = &downcast(*device).set_dsw_handler(DEVCB_##_devcb); + downcast(*device).set_dsw_handler(DEVCB_##_devcb); #define MCFG_ZNMCU_ANALOG1_HANDLER(_devcb) \ - devcb = &downcast(*device).set_analog1_handler(DEVCB_##_devcb); + downcast(*device).set_analog1_handler(DEVCB_##_devcb); #define MCFG_ZNMCU_ANALOG2_HANDLER(_devcb) \ - devcb = &downcast(*device).set_analog2_handler(DEVCB_##_devcb); + downcast(*device).set_analog2_handler(DEVCB_##_devcb); class znmcu_device : public device_t { diff --git a/src/mame/machine/zx8302.h b/src/mame/machine/zx8302.h index f49bfddd72e..150a697c624 100644 --- a/src/mame/machine/zx8302.h +++ b/src/mame/machine/zx8302.h @@ -45,46 +45,46 @@ downcast(*device).set_rtc_clock(_clk); #define MCFG_ZX8302_OUT_IPL1L_CB(_devcb) \ - devcb = &downcast(*device).set_out_ipl1l_callback(DEVCB_##_devcb); + downcast(*device).set_out_ipl1l_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_BAUDX4_CB(_devcb) \ - devcb = &downcast(*device).set_out_baudx4_callback(DEVCB_##_devcb); + downcast(*device).set_out_baudx4_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_COMDATA_CB(_devcb) \ - devcb = &downcast(*device).set_out_comdata_callback(DEVCB_##_devcb); + downcast(*device).set_out_comdata_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_TXD1_CB(_devcb) \ - devcb = &downcast(*device).set_out_txd1_callback(DEVCB_##_devcb); + downcast(*device).set_out_txd1_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_TXD2_CB(_devcb) \ - devcb = &downcast(*device).set_out_txd2_callback(DEVCB_##_devcb); + downcast(*device).set_out_txd2_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_NETOUT_CB(_devcb) \ - devcb = &downcast(*device).set_out_netout_callback(DEVCB_##_devcb); + downcast(*device).set_out_netout_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_MDSELCK_CB(_devcb) \ - devcb = &downcast(*device).set_out_mdselck_callback(DEVCB_##_devcb); + downcast(*device).set_out_mdselck_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_MDSELD_CB(_devcb) \ - devcb = &downcast(*device).set_out_mdseld_callback(DEVCB_##_devcb); + downcast(*device).set_out_mdseld_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_MDRDW_CB(_devcb) \ - devcb = &downcast(*device).set_out_mdrdw_callback(DEVCB_##_devcb); + downcast(*device).set_out_mdrdw_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_ERASE_CB(_devcb) \ - devcb = &downcast(*device).set_out_erase_callback(DEVCB_##_devcb); + downcast(*device).set_out_erase_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_RAW1_CB(_devcb) \ - devcb = &downcast(*device).set_out_raw1_callback(DEVCB_##_devcb); + downcast(*device).set_out_raw1_callback(DEVCB_##_devcb); #define MCFG_ZX8302_IN_RAW1_CB(_devcb) \ - devcb = &downcast(*device).set_in_raw1_callback(DEVCB_##_devcb); + downcast(*device).set_in_raw1_callback(DEVCB_##_devcb); #define MCFG_ZX8302_OUT_RAW2_CB(_devcb) \ - devcb = &downcast(*device).set_out_raw2_callback(DEVCB_##_devcb); + downcast(*device).set_out_raw2_callback(DEVCB_##_devcb); #define MCFG_ZX8302_IN_RAW2_CB(_devcb) \ - devcb = &downcast(*device).set_in_raw2_callback(DEVCB_##_devcb); + downcast(*device).set_in_raw2_callback(DEVCB_##_devcb); ///************************************************************************* diff --git a/src/mame/video/733_asr.h b/src/mame/video/733_asr.h index 82edf41dd5a..6d5527762bf 100644 --- a/src/mame/video/733_asr.h +++ b/src/mame/video/733_asr.h @@ -87,9 +87,9 @@ private: DECLARE_DEVICE_TYPE(ASR733, asr733_device) #define MCFG_ASR733_KEYINT_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_keyint_callback(DEVCB_##_intcallb); + downcast(*device).set_keyint_callback(DEVCB_##_intcallb); #define MCFG_ASR733_LINEINT_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_lineint_callback(DEVCB_##_intcallb); + downcast(*device).set_lineint_callback(DEVCB_##_intcallb); #endif // MAME_VIDEO_733_ASR diff --git a/src/mame/video/911_vdt.h b/src/mame/video/911_vdt.h index b47786ef87b..b92c0a9d748 100644 --- a/src/mame/video/911_vdt.h +++ b/src/mame/video/911_vdt.h @@ -115,9 +115,9 @@ private: DECLARE_DEVICE_TYPE(VDT911, vdt911_device) #define MCFG_VDT911_KEYINT_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_keyint_callback(DEVCB_##_intcallb); + downcast(*device).set_keyint_callback(DEVCB_##_intcallb); #define MCFG_VDT911_LINEINT_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_lineint_callback(DEVCB_##_intcallb); + downcast(*device).set_lineint_callback(DEVCB_##_intcallb); #endif // MAME_VIDEO_911_VDT_H diff --git a/src/mame/video/abc800.cpp b/src/mame/video/abc800.cpp index 53f0530ead4..ec9c2c63999 100644 --- a/src/mame/video/abc800.cpp +++ b/src/mame/video/abc800.cpp @@ -278,11 +278,12 @@ uint32_t abc800m_state::screen_update(screen_device &screen, bitmap_rgb32 &bitma //------------------------------------------------- MACHINE_CONFIG_START(abc800m_state::abc800m_video) - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, ABC800_CCLK) - MCFG_MC6845_SHOW_BORDER_AREA(true) - MCFG_MC6845_CHAR_WIDTH(ABC800_CHAR_WIDTH) - MCFG_MC6845_UPDATE_ROW_CB(abc800m_state, abc800m_update_row) - MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(Z80DART_TAG, z80dart_device, rib_w)) MCFG_DEVCB_XOR(1) + mc6845_device &mc6845(MC6845(config, MC6845_TAG, ABC800_CCLK)); + mc6845.set_screen(SCREEN_TAG); + mc6845.set_show_border_area(true); + mc6845.set_char_width(ABC800_CHAR_WIDTH); + mc6845.set_update_row_callback(FUNC(abc800m_state::abc800m_update_row), this); + mc6845.out_vsync_callback().set(m_dart, FUNC(z80dart_device::rib_w)).invert(); MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t(0xff, 0xff, 0x00)) MCFG_SCREEN_UPDATE_DRIVER(abc800m_state, screen_update) diff --git a/src/mame/video/abc802.cpp b/src/mame/video/abc802.cpp index 893e76f5e0f..fb1eb1da22f 100644 --- a/src/mame/video/abc802.cpp +++ b/src/mame/video/abc802.cpp @@ -179,12 +179,13 @@ WRITE_LINE_MEMBER( abc802_state::vs_w ) //------------------------------------------------- MACHINE_CONFIG_START(abc802_state::abc802_video) - MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, ABC800_CCLK) - MCFG_MC6845_SHOW_BORDER_AREA(true) - MCFG_MC6845_CHAR_WIDTH(ABC800_CHAR_WIDTH) - MCFG_MC6845_UPDATE_ROW_CB(abc802_state, abc802_update_row) - MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(*this, abc802_state, vs_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80DART_TAG, z80dart_device, rib_w)) MCFG_DEVCB_XOR(1) + mc6845_device &mc6845(MC6845(config, MC6845_TAG, ABC800_CCLK)); + mc6845.set_screen(SCREEN_TAG); + mc6845.set_show_border_area(true); + mc6845.set_char_width(ABC800_CHAR_WIDTH); + mc6845.set_update_row_callback(FUNC(abc802_state::abc802_update_row), this); + mc6845.out_vsync_callback().set(FUNC(abc802_state::vs_w)); + mc6845.out_vsync_callback().append(m_dart, FUNC(z80dart_device::rib_w)).invert(); MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::amber()) MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update) diff --git a/src/mame/video/atarivad.h b/src/mame/video/atarivad.h index a7461bff3c9..acc8486d4c4 100644 --- a/src/mame/video/atarivad.h +++ b/src/mame/video/atarivad.h @@ -21,7 +21,7 @@ #define MCFG_ATARI_VAD_ADD(_tag, _screen, _intcb) \ MCFG_DEVICE_ADD(_tag, ATARI_VAD, 0) \ MCFG_VIDEO_SET_SCREEN(_screen) \ - devcb = &downcast(*device).set_scanline_int_cb(DEVCB_##_intcb); + downcast(*device).set_scanline_int_cb(DEVCB_##_intcb); #define MCFG_ATARI_VAD_PLAYFIELD(_class, _gfxtag, _getinfo) \ { std::string fulltag(device->tag()); fulltag.append(":playfield"); device_t *device; \ diff --git a/src/mame/video/bfm_dm01.h b/src/mame/video/bfm_dm01.h index bac2de6ce74..93205a92a7a 100644 --- a/src/mame/video/bfm_dm01.h +++ b/src/mame/video/bfm_dm01.h @@ -14,7 +14,7 @@ #include "screen.h" #define MCFG_BFM_DM01_BUSY_CB(_devcb) \ - devcb = &downcast(*device).set_busy_callback(DEVCB_##_devcb); + downcast(*device).set_busy_callback(DEVCB_##_devcb); class bfm_dm01_device : public device_t { diff --git a/src/mame/video/cidelsa.cpp b/src/mame/video/cidelsa.cpp index e8cbfab93a1..d649d64ddad 100644 --- a/src/mame/video/cidelsa.cpp +++ b/src/mame/video/cidelsa.cpp @@ -159,7 +159,7 @@ MACHINE_CONFIG_START(cidelsa_state::destryer_video) MCFG_CDP1869_CHAR_PCB_READ_OWNER(cidelsa_state, cidelsa_pcb_r) MCFG_CDP1869_CHAR_RAM_READ_OWNER(cidelsa_state, cidelsa_charram_r) MCFG_CDP1869_CHAR_RAM_WRITE_OWNER(cidelsa_state, cidelsa_charram_w) - MCFG_CDP1869_PAL_NTSC_CALLBACK(VCC) + MCFG_CDP1869_PAL_NTSC_CALLBACK(CONSTANT(1)) MCFG_CDP1869_PRD_CALLBACK(WRITELINE(*this, cidelsa_state, prd_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END @@ -173,7 +173,7 @@ MACHINE_CONFIG_START(cidelsa_state::altair_video) MCFG_CDP1869_CHAR_PCB_READ_OWNER(cidelsa_state, cidelsa_pcb_r) MCFG_CDP1869_CHAR_RAM_READ_OWNER(cidelsa_state, cidelsa_charram_r) MCFG_CDP1869_CHAR_RAM_WRITE_OWNER(cidelsa_state, cidelsa_charram_w) - MCFG_CDP1869_PAL_NTSC_CALLBACK(VCC) + MCFG_CDP1869_PAL_NTSC_CALLBACK(CONSTANT(1)) MCFG_CDP1869_PRD_CALLBACK(WRITELINE(*this, cidelsa_state, prd_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END @@ -187,7 +187,7 @@ MACHINE_CONFIG_START(draco_state::draco_video) MCFG_CDP1869_CHAR_PCB_READ_OWNER(draco_state, draco_pcb_r) MCFG_CDP1869_CHAR_RAM_READ_OWNER(draco_state, draco_charram_r) MCFG_CDP1869_CHAR_RAM_WRITE_OWNER(draco_state, draco_charram_w) - MCFG_CDP1869_PAL_NTSC_CALLBACK(VCC) + MCFG_CDP1869_PAL_NTSC_CALLBACK(CONSTANT(1)) MCFG_CDP1869_PRD_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1)) MCFG_DEVICE_ADD(AY8910_TAG, AY8910, DRACO_SND_CHR1) MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT) diff --git a/src/mame/video/comx35.cpp b/src/mame/video/comx35.cpp index 2754d80d2d5..7c31d10be56 100644 --- a/src/mame/video/comx35.cpp +++ b/src/mame/video/comx35.cpp @@ -100,7 +100,7 @@ MACHINE_CONFIG_START(comx35_state::comx35_pal_video) MCFG_CDP1869_CHAR_PCB_READ_OWNER(comx35_state, comx35_pcb_r) MCFG_CDP1869_CHAR_RAM_READ_OWNER(comx35_state, comx35_charram_r) MCFG_CDP1869_CHAR_RAM_WRITE_OWNER(comx35_state, comx35_charram_w) - MCFG_CDP1869_PAL_NTSC_CALLBACK(VCC) + MCFG_CDP1869_PAL_NTSC_CALLBACK(CONSTANT(1)) MCFG_CDP1869_PRD_CALLBACK(WRITELINE(*this, comx35_state, prd_w)) MCFG_CDP1869_SET_SCREEN(SCREEN_TAG) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) @@ -119,7 +119,7 @@ MACHINE_CONFIG_START(comx35_state::comx35_ntsc_video) MCFG_CDP1869_CHAR_PCB_READ_OWNER(comx35_state, comx35_pcb_r) MCFG_CDP1869_CHAR_RAM_READ_OWNER(comx35_state, comx35_charram_r) MCFG_CDP1869_CHAR_RAM_WRITE_OWNER(comx35_state, comx35_charram_w) - MCFG_CDP1869_PAL_NTSC_CALLBACK(GND) + MCFG_CDP1869_PAL_NTSC_CALLBACK(CONSTANT(0)) MCFG_CDP1869_PRD_CALLBACK(WRITELINE(*this, comx35_state, prd_w)) MCFG_CDP1869_SET_SCREEN(SCREEN_TAG) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/video/decodmd1.cpp b/src/mame/video/decodmd1.cpp index 90a5abf593e..e23e47644a7 100644 --- a/src/mame/video/decodmd1.cpp +++ b/src/mame/video/decodmd1.cpp @@ -217,13 +217,13 @@ MACHINE_CONFIG_START(decodmd_type1_device::device_add_mconfig) MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("8K") - MCFG_DEVICE_ADD("bitlatch", HC259, 0) // U4 - MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(MEMBANK("dmdbank1")) MCFG_DEVCB_MASK(0x07) MCFG_DEVCB_INVERT - MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, decodmd_type1_device, blank_w)) - MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, decodmd_type1_device, status_w)) - MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, decodmd_type1_device, rowdata_w)) - MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, decodmd_type1_device, rowclock_w)) - MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, decodmd_type1_device, test_w)) + HC259(config, m_bitlatch); // U4 + m_bitlatch->parallel_out_cb().set_membank(m_rombank1).mask(0x07).invert(); + m_bitlatch->q_out_cb<3>().set(FUNC(decodmd_type1_device::blank_w)); + m_bitlatch->q_out_cb<4>().set(FUNC(decodmd_type1_device::status_w)); + m_bitlatch->q_out_cb<5>().set(FUNC(decodmd_type1_device::rowdata_w)); + m_bitlatch->q_out_cb<6>().set(FUNC(decodmd_type1_device::rowclock_w)); + m_bitlatch->q_out_cb<7>().set(FUNC(decodmd_type1_device::test_w)); MACHINE_CONFIG_END diff --git a/src/mame/video/dynax_blitter_rev2.h b/src/mame/video/dynax_blitter_rev2.h index 29704351251..a28f2fb8f8a 100644 --- a/src/mame/video/dynax_blitter_rev2.h +++ b/src/mame/video/dynax_blitter_rev2.h @@ -16,24 +16,24 @@ //************************************************************************** #define MCFG_DYNAX_BLITTER_REV2_VRAM_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_vram_out_cb(DEVCB_##_devcb); + downcast(*device).set_vram_out_cb(DEVCB_##_devcb); #define MCFG_DYNAX_BLITTER_REV2_SCROLLX_CB(_devcb) \ - devcb = &downcast(*device).set_scrollx_cb(DEVCB_##_devcb); + downcast(*device).set_scrollx_cb(DEVCB_##_devcb); #define MCFG_DYNAX_BLITTER_REV2_SCROLLY_CB(_devcb) \ - devcb = &downcast(*device).set_scrolly_cb(DEVCB_##_devcb); + downcast(*device).set_scrolly_cb(DEVCB_##_devcb); #define MCFG_DYNAX_BLITTER_REV2_READY_CB(_devcb) \ - devcb = &downcast(*device).set_ready_cb(DEVCB_##_devcb); + downcast(*device).set_ready_cb(DEVCB_##_devcb); #define MCFG_CDRACULA_BLITTER_VRAM_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_vram_out_cb(DEVCB_##_devcb); + downcast(*device).set_vram_out_cb(DEVCB_##_devcb); #define MCFG_CDRACULA_BLITTER_SCROLLX_CB(_devcb) \ - devcb = &downcast(*device).set_scrollx_cb(DEVCB_##_devcb); + downcast(*device).set_scrollx_cb(DEVCB_##_devcb); #define MCFG_CDRACULA_BLITTER_SCROLLY_CB(_devcb) \ - devcb = &downcast(*device).set_scrolly_cb(DEVCB_##_devcb); + downcast(*device).set_scrolly_cb(DEVCB_##_devcb); #define MCFG_CDRACULA_BLITTER_READY_CB(_devcb) \ - devcb = &downcast(*device).set_ready_cb(DEVCB_##_devcb); + downcast(*device).set_ready_cb(DEVCB_##_devcb); #define MCFG_CDRACULA_BLITTER_DEST_CB(_devcb) \ - devcb = &downcast(*device).set_blit_dest_cb(DEVCB_##_devcb); + downcast(*device).set_blit_dest_cb(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS @@ -52,6 +52,10 @@ public: template devcb_base &set_scrollx_cb(Object &&cb) { return m_scrollx_cb.set_callback(std::forward(cb)); } template devcb_base &set_scrolly_cb(Object &&cb) { return m_scrolly_cb.set_callback(std::forward(cb)); } template devcb_base &set_ready_cb(Object &&cb) { return m_ready_cb.set_callback(std::forward(cb)); } + auto vram_out_cb() { return m_vram_out_cb.bind(); } + auto scrollx_cb() { return m_scrollx_cb.bind(); } + auto scrolly_cb() { return m_scrolly_cb.bind(); } + auto ready_cb() { return m_ready_cb.bind(); } // write handlers DECLARE_WRITE8_MEMBER(pen_w); diff --git a/src/mame/video/exidy440.cpp b/src/mame/video/exidy440.cpp index df28b2b340d..3aba8684ea7 100644 --- a/src/mame/video/exidy440.cpp +++ b/src/mame/video/exidy440.cpp @@ -463,13 +463,13 @@ uint32_t topsecex_state::screen_update_topsecex(screen_device &screen, bitmap_in MACHINE_CONFIG_START(exidy440_state::exidy440_video) MCFG_PALETTE_ADD("palette", 256) - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(exidy440_state, screen_update_exidy440) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, exidy440_state, vblank_interrupt_w)) - MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE("440audio", exidy440_sound_device, sound_interrupt_w)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_video_attributes(VIDEO_ALWAYS_UPDATE); + screen.set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); + screen.set_screen_update(FUNC(exidy440_state::screen_update_exidy440)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(exidy440_state::vblank_interrupt_w)); + screen.screen_vblank().append(m_custom, FUNC(exidy440_sound_device::sound_interrupt_w)); MACHINE_CONFIG_END diff --git a/src/mame/video/gime.h b/src/mame/video/gime.h index a8f208ff58c..3ecf1aa3e7e 100644 --- a/src/mame/video/gime.h +++ b/src/mame/video/gime.h @@ -28,13 +28,13 @@ #define MCFG_GIME_FSYNC_CALLBACK MCFG_MC6847_FSYNC_CALLBACK #define MCFG_GIME_IRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_irq_wr_callback(DEVCB_##_write); + downcast(*device).set_irq_wr_callback(DEVCB_##_write); #define MCFG_GIME_FIRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_firq_wr_callback(DEVCB_##_write); + downcast(*device).set_firq_wr_callback(DEVCB_##_write); #define MCFG_GIME_FLOATING_BUS_CALLBACK(_read) \ - devcb = &downcast(*device).set_floating_bus_rd_callback(DEVCB_##_read); + downcast(*device).set_floating_bus_rd_callback(DEVCB_##_read); //************************************************************************** diff --git a/src/mame/video/gp9001.h b/src/mame/video/gp9001.h index 876ea9ba886..9e3a25a2a64 100644 --- a/src/mame/video/gp9001.h +++ b/src/mame/video/gp9001.h @@ -6,9 +6,6 @@ #pragma once -#define MCFG_GP9001_VINT_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_vint_out_cb(DEVCB_##_devcb); - class gp9001vdp_device : public device_t, public device_gfx_interface, public device_video_interface, @@ -22,14 +19,14 @@ class gp9001vdp_device : public device_t, public: gp9001vdp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_vint_out_cb(Object &&obj) { return m_vint_out_cb.set_callback(std::forward(obj)); } + auto vint_out_cb() { return m_vint_out_cb.bind(); } - void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, const uint8_t* primap ); - void gp9001_draw_custom_tilemap( bitmap_ind16 &bitmap, int layer, const uint8_t* priremap, const uint8_t* pri_enable ); - void gp9001_render_vdp( bitmap_ind16 &bitmap, const rectangle &cliprect); - void gp9001_screen_eof(void); - void create_tilemaps(void); - void init_scroll_regs(void); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, const uint8_t* primap); + void gp9001_draw_custom_tilemap(bitmap_ind16 &bitmap, int layer, const uint8_t* priremap, const uint8_t* pri_enable); + void gp9001_render_vdp(bitmap_ind16 &bitmap, const rectangle &cliprect); + void gp9001_screen_eof(); + void create_tilemaps(); + void init_scroll_regs(); bitmap_ind8 *custom_priority_bitmap; diff --git a/src/mame/video/gtia.h b/src/mame/video/gtia.h index e00ac8aa73b..2d01f47bfbf 100644 --- a/src/mame/video/gtia.h +++ b/src/mame/video/gtia.h @@ -17,10 +17,10 @@ #define MCFG_GTIA_READ_CB(_devcb) \ - devcb = &downcast(*device).set_read_callback(DEVCB_##_devcb); + downcast(*device).set_read_callback(DEVCB_##_devcb); #define MCFG_GTIA_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_write_callback(DEVCB_##_devcb); + downcast(*device).set_write_callback(DEVCB_##_devcb); #define MCFG_GTIA_REGION(region) \ downcast(*device).set_region(region); diff --git a/src/mame/video/k051960.h b/src/mame/video/k051960.h index a5807d3efea..a5c523fcab7 100644 --- a/src/mame/video/k051960.h +++ b/src/mame/video/k051960.h @@ -28,13 +28,13 @@ typedef device_delegate(*device).set_screen_tag(_tag); #define MCFG_K051960_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); #define MCFG_K051960_NMI_HANDLER(_devcb) \ - devcb = &downcast(*device).set_nmi_handler(DEVCB_##_devcb); + downcast(*device).set_nmi_handler(DEVCB_##_devcb); #define MCFG_K051960_VREG_CONTRAST_HANDLER(_devcb) \ - devcb = &downcast(*device).set_vreg_contrast_handler(DEVCB_##_devcb); + downcast(*device).set_vreg_contrast_handler(DEVCB_##_devcb); class k051960_device : public device_t, public device_gfx_interface diff --git a/src/mame/video/k052109.h b/src/mame/video/k052109.h index 294ee133366..69ee5108dc2 100644 --- a/src/mame/video/k052109.h +++ b/src/mame/video/k052109.h @@ -20,7 +20,7 @@ typedef device_delegate(*device).set_screen_tag(_tag); #define MCFG_K052109_IRQ_HANDLER(_devcb) \ - devcb = &downcast(*device).set_irq_handler(DEVCB_##_devcb); + downcast(*device).set_irq_handler(DEVCB_##_devcb); class k052109_device : public device_t, public device_gfx_interface diff --git a/src/mame/video/k053250_ps.h b/src/mame/video/k053250_ps.h index ebc16089ce7..f755a34a1c1 100644 --- a/src/mame/video/k053250_ps.h +++ b/src/mame/video/k053250_ps.h @@ -17,7 +17,7 @@ downcast(*device).set_offsets(offx, offy); #define MCFG_K053250PS_DMAIRQ_CB(_cb) \ - devcb = &downcast(*device).set_dmairq_cb(DEVCB_##_cb); + downcast(*device).set_dmairq_cb(DEVCB_##_cb); class k053250ps_device : public device_t, public device_gfx_interface, diff --git a/src/mame/video/k057714.h b/src/mame/video/k057714.h index 08524f1fde3..2b902fc62b6 100644 --- a/src/mame/video/k057714.h +++ b/src/mame/video/k057714.h @@ -64,7 +64,7 @@ private: DECLARE_DEVICE_TYPE(K057714, k057714_device) #define MCFG_K057714_IRQ_CALLBACK(_devcb) \ - devcb = &downcast(*device).set_irq_callback(DEVCB_##_devcb); + downcast(*device).set_irq_callback(DEVCB_##_devcb); #endif // MAME_MACHINE_K057714_H diff --git a/src/mame/video/k1ge.h b/src/mame/video/k1ge.h index 250ad493173..1fcac610cf2 100644 --- a/src/mame/video/k1ge.h +++ b/src/mame/video/k1ge.h @@ -17,14 +17,14 @@ #define MCFG_K1GE_ADD(_tag, _clock, _screen, _vblank, _hblank ) \ MCFG_DEVICE_ADD( _tag, K1GE, _clock ) \ MCFG_VIDEO_SET_SCREEN( _screen ) \ - devcb = &downcast(*device).set_vblank_callback(DEVCB_##_vblank ); \ - devcb = &downcast(*device).set_hblank_callback(DEVCB_##_hblank ); + downcast(*device).set_vblank_callback(DEVCB_##_vblank ); \ + downcast(*device).set_hblank_callback(DEVCB_##_hblank ); #define MCFG_K2GE_ADD(_tag, _clock, _screen, _vblank, _hblank ) \ MCFG_DEVICE_ADD( _tag, K2GE, _clock ) \ MCFG_VIDEO_SET_SCREEN( _screen ) \ - devcb = &downcast(*device).set_vblank_callback(DEVCB_##_vblank ); \ - devcb = &downcast(*device).set_hblank_callback(DEVCB_##_hblank ); + downcast(*device).set_vblank_callback(DEVCB_##_vblank ); \ + downcast(*device).set_hblank_callback(DEVCB_##_hblank ); class k1ge_device : public device_t, public device_video_interface diff --git a/src/mame/video/liberatr.cpp b/src/mame/video/liberatr.cpp index c97b1cd66ad..f4d59688d0d 100644 --- a/src/mame/video/liberatr.cpp +++ b/src/mame/video/liberatr.cpp @@ -54,12 +54,6 @@ WRITE8_MEMBER( liberatr_state::bitmap_w ) } -WRITE_LINE_MEMBER(liberatr_state::planet_select_w) -{ - m_planet_select = state; -} - - /******************************************************************************************** liberatr_init_planet() diff --git a/src/mame/video/nick.h b/src/mame/video/nick.h index a57258309c7..3f2cc6452f2 100644 --- a/src/mame/video/nick.h +++ b/src/mame/video/nick.h @@ -33,7 +33,7 @@ #define MCFG_NICK_VIRQ_CALLBACK(_write) \ - devcb = &downcast(*device).set_virq_wr_callback(DEVCB_##_write); + downcast(*device).set_virq_wr_callback(DEVCB_##_write); /* there are 64us per line, although in reality diff --git a/src/mame/video/pcd.h b/src/mame/video/pcd.h index 0a92588d310..8d874d5cbf8 100644 --- a/src/mame/video/pcd.h +++ b/src/mame/video/pcd.h @@ -15,7 +15,7 @@ #define MCFG_PCX_VIDEO_TXD_HANDLER(_devcb) \ - devcb = &downcast(*device).set_txd_handler(DEVCB_##_devcb); + downcast(*device).set_txd_handler(DEVCB_##_devcb); class pcdx_video_device : public device_t, public device_gfx_interface { diff --git a/src/mame/video/pecom.cpp b/src/mame/video/pecom.cpp index 5365b9fd3bc..1cd4c67287f 100644 --- a/src/mame/video/pecom.cpp +++ b/src/mame/video/pecom.cpp @@ -101,7 +101,7 @@ MACHINE_CONFIG_START(pecom_state::pecom_video) MCFG_CDP1869_CHAR_PCB_READ_OWNER(pecom_state, pecom_pcb_r) MCFG_CDP1869_CHAR_RAM_READ_OWNER(pecom_state, pecom_char_ram_r) MCFG_CDP1869_CHAR_RAM_WRITE_OWNER(pecom_state, pecom_char_ram_w) - MCFG_CDP1869_PAL_NTSC_CALLBACK(VCC) + MCFG_CDP1869_PAL_NTSC_CALLBACK(CONSTANT(1)) MCFG_CDP1869_PRD_CALLBACK(WRITELINE(*this, pecom_state, pecom_prd_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25); diff --git a/src/mame/video/runaway.cpp b/src/mame/video/runaway.cpp index 234355c3450..01fdecad60a 100644 --- a/src/mame/video/runaway.cpp +++ b/src/mame/video/runaway.cpp @@ -44,10 +44,9 @@ WRITE_LINE_MEMBER(runaway_state::tile_bank_w) { if (state != m_tile_bank) { + m_tile_bank = state; m_bg_tilemap->mark_all_dirty(); } - - m_tile_bank = state; } diff --git a/src/mame/video/segaic24.h b/src/mame/video/segaic24.h index 04d0fae7250..dfc17df0099 100644 --- a/src/mame/video/segaic24.h +++ b/src/mame/video/segaic24.h @@ -11,10 +11,10 @@ #pragma once #define MCFG_S24TILE_XHOUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_xhout_write_callback(DEVCB_##_write); + downcast(*device).set_xhout_write_callback(DEVCB_##_write); #define MCFG_S24TILE_XVOUT_CALLBACK(_write) \ - devcb = &downcast(*device).set_xvout_write_callback(DEVCB_##_write); + downcast(*device).set_xvout_write_callback(DEVCB_##_write); class segas24_tile_device : public device_t, public device_gfx_interface diff --git a/src/mame/video/seibu_crtc.h b/src/mame/video/seibu_crtc.h index 30818aa5a6f..e6e58be1e10 100644 --- a/src/mame/video/seibu_crtc.h +++ b/src/mame/video/seibu_crtc.h @@ -17,19 +17,19 @@ //************************************************************************** #define MCFG_SEIBU_CRTC_DECRYPT_KEY_CB(_devcb) \ - devcb = &downcast(*device).set_decrypt_key_callback(DEVCB_##_devcb); + downcast(*device).set_decrypt_key_callback(DEVCB_##_devcb); #define MCFG_SEIBU_CRTC_LAYER_EN_CB(_devcb) \ - devcb = &downcast(*device).set_layer_en_callback(DEVCB_##_devcb); + downcast(*device).set_layer_en_callback(DEVCB_##_devcb); #define MCFG_SEIBU_CRTC_LAYER_SCROLL_CB(_devcb) \ - devcb = &downcast(*device).set_layer_scroll_callback(DEVCB_##_devcb); + downcast(*device).set_layer_scroll_callback(DEVCB_##_devcb); #define MCFG_SEIBU_CRTC_LAYER_SCROLL_BASE_CB(_devcb) \ - devcb = &downcast(*device).set_layer_scroll_base_callback(DEVCB_##_devcb); + downcast(*device).set_layer_scroll_base_callback(DEVCB_##_devcb); #define MCFG_SEIBU_CRTC_REG_1A_CB(_devcb) \ - devcb = &downcast(*device).set_reg_1a_callback(DEVCB_##_devcb); + downcast(*device).set_reg_1a_callback(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/video/taito_b.cpp b/src/mame/video/taito_b.cpp index 2383430f83f..a5ad113d0be 100644 --- a/src/mame/video/taito_b.cpp +++ b/src/mame/video/taito_b.cpp @@ -32,7 +32,7 @@ void taitob_state::hitice_clear_pixel_bitmap( ) hitice_pixelram_w(space, i, 0, 0xffff); } -WRITE16_MEMBER(taitob_state::realpunc_video_ctrl_w) +WRITE16_MEMBER(taitob_c_state::realpunc_video_ctrl_w) { COMBINE_DATA(&m_realpunc_video_ctrl); } @@ -62,7 +62,7 @@ VIDEO_RESET_MEMBER(taitob_state,hitice) } -VIDEO_START_MEMBER(taitob_state,realpunc) +VIDEO_START_MEMBER(taitob_c_state,realpunc) { m_realpunc_bitmap = std::make_unique(m_screen->width(), m_screen->height()); @@ -107,7 +107,7 @@ uint32_t taitob_state::screen_update_taitob(screen_device &screen, bitmap_ind16 -uint32_t taitob_state::screen_update_realpunc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +uint32_t taitob_c_state::screen_update_realpunc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { const pen_t *palette = m_palette->pens(); uint8_t const video_control = m_tc0180vcu->get_videoctrl(); diff --git a/src/mame/video/tc0180vcu.h b/src/mame/video/tc0180vcu.h index 3d3f4e8ece8..f8c31c75dea 100644 --- a/src/mame/video/tc0180vcu.h +++ b/src/mame/video/tc0180vcu.h @@ -6,9 +6,9 @@ #pragma once #define MCFG_TC0180VCU_INTH_CALLBACK(_write) \ - devcb = &downcast(*device).set_inth_callback(DEVCB_##_write); + downcast(*device).set_inth_callback(DEVCB_##_write); #define MCFG_TC0180VCU_INTL_CALLBACK(_write) \ - devcb = &downcast(*device).set_intl_callback(DEVCB_##_write); + downcast(*device).set_intl_callback(DEVCB_##_write); class tc0180vcu_device : public device_t, public device_gfx_interface, public device_video_interface { diff --git a/src/mame/video/tia.h b/src/mame/video/tia.h index 027f9d2b68d..57c9ade29aa 100644 --- a/src/mame/video/tia.h +++ b/src/mame/video/tia.h @@ -36,13 +36,13 @@ struct player_gfx { //************************************************************************** #define MCFG_TIA_READ_INPUT_PORT_CB(_devcb) \ - devcb = &downcast(*device).set_read_input_port_callback(DEVCB_##_devcb); + downcast(*device).set_read_input_port_callback(DEVCB_##_devcb); #define MCFG_TIA_DATABUS_CONTENTS_CB(_devcb) \ - devcb = &downcast(*device).set_databus_contents_callback(DEVCB_##_devcb); + downcast(*device).set_databus_contents_callback(DEVCB_##_devcb); #define MCFG_TIA_VSYNC_CB(_devcb) \ - devcb = &downcast(*device).set_vsync_callback(DEVCB_##_devcb); + downcast(*device).set_vsync_callback(DEVCB_##_devcb); //************************************************************************** // TYPE DEFINITIONS diff --git a/src/mame/video/tmc1800.cpp b/src/mame/video/tmc1800.cpp index 29414734828..631bf1595ab 100644 --- a/src/mame/video/tmc1800.cpp +++ b/src/mame/video/tmc1800.cpp @@ -57,7 +57,7 @@ MACHINE_CONFIG_START(tmc2000_state::tmc2000_video) MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update) SPEAKER(config, "mono").front_center(); - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), GND, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, tmc2000_state, rdata_r), READLINE(*this, tmc2000_state, bdata_r), READLINE(*this, tmc2000_state, gdata_r)) + MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, tmc2000_state, rdata_r), READLINE(*this, tmc2000_state, bdata_r), READLINE(*this, tmc2000_state, gdata_r)) MCFG_CDP1864_CHROMINANCE(RES_K(1.21), RES_K(2.05), RES_K(2.26), RES_K(3.92)) // RL64, RL63, RL61, RL65 (also RH62 (2K pot) in series, but ignored here) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END @@ -67,7 +67,7 @@ MACHINE_CONFIG_START(nano_state::nano_video) MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update) SPEAKER(config, "mono").front_center(); - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), GND, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, VCC, VCC, VCC) + MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, CONSTANT(1), CONSTANT(1), CONSTANT(1)) MCFG_CDP1864_CHROMINANCE(RES_K(1.21), RES_INF, RES_INF, 0) // R18 (unconfirmed) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END diff --git a/src/mame/video/tmc600.cpp b/src/mame/video/tmc600.cpp index 00cf771de67..bfa59a47995 100644 --- a/src/mame/video/tmc600.cpp +++ b/src/mame/video/tmc600.cpp @@ -128,7 +128,7 @@ MACHINE_CONFIG_START(tmc600_state::tmc600_video) MCFG_CDP1869_COLOR_CLOCK(cdp1869_device::COLOR_CLK_PAL) MCFG_CDP1869_CHAR_PCB_READ_OWNER(tmc600_state, tmc600_pcb_r) MCFG_CDP1869_CHAR_RAM_READ_OWNER(tmc600_state, tmc600_char_ram_r) - MCFG_CDP1869_PAL_NTSC_CALLBACK(VCC) + MCFG_CDP1869_PAL_NTSC_CALLBACK(CONSTANT(1)) MCFG_CDP1869_PRD_CALLBACK(WRITELINE(*this, tmc600_state, prd_w)) MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/video/uv201.h b/src/mame/video/uv201.h index 39311855a2c..26d11435a92 100644 --- a/src/mame/video/uv201.h +++ b/src/mame/video/uv201.h @@ -65,13 +65,13 @@ //************************************************************************** #define MCFG_UV201_EXT_INT_CALLBACK(_write) \ - devcb = &downcast(*device).set_ext_int_wr_callback(DEVCB_##_write); + downcast(*device).set_ext_int_wr_callback(DEVCB_##_write); #define MCFG_UV201_HBLANK_CALLBACK(_write) \ - devcb = &downcast(*device).set_hblank_wr_callback(DEVCB_##_write); + downcast(*device).set_hblank_wr_callback(DEVCB_##_write); #define MCFG_UV201_DB_CALLBACK(_read) \ - devcb = &downcast(*device).set_db_rd_callback(DEVCB_##_read); + downcast(*device).set_db_rd_callback(DEVCB_##_read); diff --git a/src/mame/video/vsystem_gga.h b/src/mame/video/vsystem_gga.h index a15d02a963a..02e633c2b38 100644 --- a/src/mame/video/vsystem_gga.h +++ b/src/mame/video/vsystem_gga.h @@ -51,7 +51,7 @@ //************************************************************************** #define MCFG_VSYSTEM_GGA_REGISTER_WRITE_CB(_devcb) \ - devcb = &downcast(*device).set_write_cb(DEVCB_##_devcb); + downcast(*device).set_write_cb(DEVCB_##_devcb); //************************************************************************** diff --git a/src/mame/video/vtvideo.h b/src/mame/video/vtvideo.h index 9017657cffd..fa91cc64398 100644 --- a/src/mame/video/vtvideo.h +++ b/src/mame/video/vtvideo.h @@ -117,15 +117,15 @@ DECLARE_DEVICE_TYPE(RAINBOW_VIDEO, rainbow_video_device) downcast(*device).set_chargen_tag(_tag); #define MCFG_VT_VIDEO_RAM_CALLBACK(_read) \ - devcb = &downcast(*device).set_ram_rd_callback(DEVCB_##_read); + downcast(*device).set_ram_rd_callback(DEVCB_##_read); #define MCFG_VT_VIDEO_VERT_FREQ_INTR_CALLBACK(_write) \ - devcb = &downcast(*device).set_vert_freq_intr_wr_callback(DEVCB_##_write); + downcast(*device).set_vert_freq_intr_wr_callback(DEVCB_##_write); #define MCFG_VT_VIDEO_LBA3_LBA4_CALLBACK(_write) \ - devcb = &downcast(*device).set_lba3_lba4_wr_callback(DEVCB_##_write); + downcast(*device).set_lba3_lba4_wr_callback(DEVCB_##_write); #define MCFG_VT_VIDEO_LBA7_CALLBACK(_write) \ - devcb = &downcast(*device).set_lba7_wr_callback(DEVCB_##_write); + downcast(*device).set_lba7_wr_callback(DEVCB_##_write); #endif // MAME_VIDEO_VTVIDEO_H diff --git a/src/mame/video/wpc_dmd.h b/src/mame/video/wpc_dmd.h index 312974f4fdd..a6d6f6bfa3f 100644 --- a/src/mame/video/wpc_dmd.h +++ b/src/mame/video/wpc_dmd.h @@ -11,7 +11,7 @@ #include "machine/timer.h" #define MCFG_WPC_DMD_SCANLINE_CALLBACK(_scanline_cb) \ - devcb = &downcast(*device).set_scanline_cb(DEVCB_##_scanline_cb); + downcast(*device).set_scanline_cb(DEVCB_##_scanline_cb); class wpc_dmd_device : public device_t { diff --git a/src/mame/video/ygv608.h b/src/mame/video/ygv608.h index c2c9e82ed3a..ae054a0ac6b 100644 --- a/src/mame/video/ygv608.h +++ b/src/mame/video/ygv608.h @@ -315,10 +315,10 @@ DECLARE_DEVICE_TYPE(YGV608, ygv608_device) //************************************************************************** #define MCFG_YGV608_VBLANK_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_vblank_callback(DEVCB_##_intcallb); + downcast(*device).set_vblank_callback(DEVCB_##_intcallb); #define MCFG_YGV608_RASTER_HANDLER( _intcallb ) \ - devcb = &downcast(*device).set_raster_callback(DEVCB_##_intcallb); + downcast(*device).set_raster_callback(DEVCB_##_intcallb); #endif diff --git a/src/mame/video/zx8301.h b/src/mame/video/zx8301.h index 4c92403a519..1d3b64f22d8 100644 --- a/src/mame/video/zx8301.h +++ b/src/mame/video/zx8301.h @@ -42,7 +42,7 @@ ///************************************************************************* #define MCFG_ZX8301_VSYNC_CALLBACK(_write) \ - devcb = &downcast(*device).set_vsync_wr_callback(DEVCB_##_write); + downcast(*device).set_vsync_wr_callback(DEVCB_##_write);