diff --git a/src/devices/machine/fdc37c93x.h b/src/devices/machine/fdc37c93x.h index 3e0264c22ab..06ad6363408 100644 --- a/src/devices/machine/fdc37c93x.h +++ b/src/devices/machine/fdc37c93x.h @@ -30,22 +30,22 @@ class fdc37c93x_device : public device_t, public device_isa16_card_interface public: fdc37c93x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); ~fdc37c93x_device() {} - static void static_set_sysopt_pin(device_t &device, int value) { dynamic_cast(device).sysopt_pin = value; } // optional information overrides virtual void device_add_mconfig(machine_config &config) override; - template devcb_base &set_gp20_reset_callback(Object &&cb) { return m_gp20_reset_callback.set_callback(std::forward(cb)); } - template devcb_base &set_gp25_gatea20_callback(Object &&cb) { return m_gp25_gatea20_callback.set_callback(std::forward(cb)); } - template devcb_base &set_irq1_callback(Object &&cb) { return m_irq1_callback.set_callback(std::forward(cb)); } - template devcb_base &set_irq8_callback(Object &&cb) { return m_irq8_callback.set_callback(std::forward(cb)); } - template devcb_base &set_irq9_callback(Object &&cb) { return m_irq9_callback.set_callback(std::forward(cb)); } - template devcb_base &set_txd1_callback(Object &&cb) { return m_txd1_callback.set_callback(std::forward(cb)); } - template devcb_base &set_ndtr1_callback(Object &&cb) {return m_ndtr1_callback.set_callback(std::forward(cb)); } - template devcb_base &set_nrts1_callback(Object &&cb) {return m_nrts1_callback.set_callback(std::forward(cb)); } - template devcb_base &set_txd2_callback(Object &&cb) { return m_txd2_callback.set_callback(std::forward(cb)); } - template devcb_base &set_ndtr2_callback(Object &&cb) { return m_ndtr2_callback.set_callback(std::forward(cb)); } - template devcb_base &set_nrts2_callback(Object &&cb) { return m_nrts2_callback.set_callback(std::forward(cb)); } + void set_sysopt_pin(int value) { sysopt_pin = value; } + auto gp20_reset() { return m_gp20_reset_callback.bind(); } + auto gp25_gatea20() { return m_gp25_gatea20_callback.bind(); } + auto irq1() { return m_irq1_callback.bind(); } + auto irq8() { return m_irq8_callback.bind(); } + auto irq9() { return m_irq9_callback.bind(); } + auto txd1() { return m_txd1_callback.bind(); } + auto ndtr1() { return m_ndtr1_callback.bind(); } + auto nrts1() { return m_nrts1_callback.bind(); } + auto txd2() { return m_txd2_callback.bind(); } + auto ndtr2() { return m_ndtr2_callback.bind(); } + auto nrts2() { return m_nrts2_callback.bind(); } void remap(int space_id, offs_t start, offs_t end) override; @@ -205,43 +205,4 @@ private: DECLARE_DEVICE_TYPE(FDC37C93X, fdc37c93x_device); -#define MCFG_FDC37C93X_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, FDC37C93X, 0) - -#define MCFG_FDC37C93X_SYSOPT(_pinvalue) \ - fdc37c93x_device::static_set_sysopt_pin(*device, _pinvalue); - -#define MCFG_FDC37C93X_GP20_RESET_CB(_devcb) \ - downcast(*device).set_gp20_reset_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_GP25_GATEA20_CB(_devcb) \ - downcast(*device).set_gp25_gatea20_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_IRQ1_CB(_devcb) \ - downcast(*device).set_irq1_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_IRQ8_CB(_devcb) \ - downcast(*device).set_irq8_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_IRQ9_CB(_devcb) \ - downcast(*device).set_irq9_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_TXD1_CB(_devcb) \ - downcast(*device).set_txd1_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_NDTR1_CB(_devcb) \ - downcast(*device).set_ndtr1_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_NRTS1_CB(_devcb) \ - downcast(*device).set_nrts1_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_TXD2_CB(_devcb) \ - downcast(*device).set_txd2_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_NDTR2_CB(_devcb) \ - downcast(*device).set_ndtr2_callback(DEVCB_##_devcb); - -#define MCFG_FDC37C93X_NRTS2_CB(_devcb) \ - downcast(*device).set_nrts2_callback(DEVCB_##_devcb); - #endif // MAME_MACHINE_FDC37C93X_H diff --git a/src/devices/machine/fga002.h b/src/devices/machine/fga002.h index aab16fdaf9d..6a699a193f0 100644 --- a/src/devices/machine/fga002.h +++ b/src/devices/machine/fga002.h @@ -5,30 +5,6 @@ #include "cpu/m68000/m68000.h" // The FGA002 is designed for the 68K interrupt PL0-PL2 signalling, however used on SPARC and x86 boards too -#define MCFG_FGA002_ADD(_tag, _clock) MCFG_DEVICE_ADD(_tag, FGA002, _clock) - -// LOCAL IRQ callbacks -#define MCFG_FGA002_OUT_INT_CB(_devcb) \ - downcast(*device).set_out_int_callback(DEVCB_##_devcb); - -#define MCFG_FGA002_OUT_LIACK4_CB(_devcb) \ - downcast(*device).set_liack4_callback(DEVCB_##_devcb); - -#define MCFG_FGA002_OUT_LIACK5_CB(_devcb) \ - downcast(*device).set_liack5_callback(DEVCB_##_devcb); - -#define MCFG_FGA002_OUT_LIACK6_CB(_devcb) \ - downcast(*device).set_liack6_callback(DEVCB_##_devcb); - -#define MCFG_FGA002_OUT_LIACK7_CB(_devcb) \ - downcast(*device).set_liack7_callback(DEVCB_##_devcb); - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> fga002_device - class fga002_device : public device_t // ,public device_z80daisy_interface { @@ -53,11 +29,11 @@ class fga002_device : public device_t int acknowledge(); int get_irq_level(); - template devcb_base &set_out_int_callback(Object &&cb) { return m_out_int_cb.set_callback(std::forward(cb)); } - template devcb_base &set_liack4_callback(Object &&cb) { return m_liack4_cb.set_callback(std::forward(cb)); } - template devcb_base &set_liack5_callback(Object &&cb) { return m_liack5_cb.set_callback(std::forward(cb)); } - template devcb_base &set_liack6_callback(Object &&cb) { return m_liack6_cb.set_callback(std::forward(cb)); } - template devcb_base &set_liack7_callback(Object &&cb) { return m_liack7_cb.set_callback(std::forward(cb)); } + auto out_int() { return m_out_int_cb.bind(); } + auto liack4() { return m_liack4_cb.bind(); } + auto liack5() { return m_liack5_cb.bind(); } + auto liack6() { return m_liack6_cb.bind(); } + auto liack7() { return m_liack7_cb.bind(); } protected: // type for array of mapping of FGA registers that assembles an IRQ source diff --git a/src/mame/drivers/atpci.cpp b/src/mame/drivers/atpci.cpp index 27de97a575f..9e30991eac1 100644 --- a/src/mame/drivers/atpci.cpp +++ b/src/mame/drivers/atpci.cpp @@ -63,12 +63,11 @@ void at586_state::sb_config(device_t *device) void at586_state::superio_config(device_t *device) { - devcb_base *devcb = nullptr; - (void)devcb; - MCFG_FDC37C93X_SYSOPT(1) - MCFG_FDC37C93X_GP20_RESET_CB(INPUTLINE(":maincpu", INPUT_LINE_RESET)) - MCFG_FDC37C93X_GP25_GATEA20_CB(INPUTLINE(":maincpu", INPUT_LINE_A20)) - MCFG_FDC37C93X_IRQ1_CB(WRITELINE(":pcibus:7:i82371sb:pic8259_master", pic8259_device, ir1_w)) + fdc37c93x_device &fdc = *downcast(device); + fdc.set_sysopt_pin(1); + fdc.gp20_reset().set_inputline(":maincpu", INPUT_LINE_RESET); + fdc.gp25_gatea20().set_inputline(":maincpu", INPUT_LINE_A20); + fdc.irq1().set(":pcibus:7:i82371sb:pic8259_master", FUNC(pic8259_device::ir1_w)); } diff --git a/src/mame/drivers/fccpu30.cpp b/src/mame/drivers/fccpu30.cpp index 7d79c467849..506dc0e00e9 100644 --- a/src/mame/drivers/fccpu30.cpp +++ b/src/mame/drivers/fccpu30.cpp @@ -747,10 +747,10 @@ MACHINE_CONFIG_START(cpu30_state::cpu30) // m_pit2->timer_irq_callback().set("fga002", FUNC(fga002_device::lirq3_w)); // The timer interrupt seems to silence the terminal interrupt, needs invectigation /* FGA-002, Force Gate Array */ - MCFG_FGA002_ADD("fga002", 0) - MCFG_FGA002_OUT_INT_CB(WRITELINE(*this, cpu30_state, fga_irq_callback)) - MCFG_FGA002_OUT_LIACK4_CB(READ8("duscc", duscc_device, iack)) - MCFG_FGA002_OUT_LIACK5_CB(READ8("duscc2", duscc_device, iack)) + fga002_device &fga002(FGA002(config, m_fga002, 0)); + fga002.out_int().set(FUNC(cpu30_state::fga_irq_callback)); + fga002.liack4().set("duscc", FUNC(duscc_device::iack)); + fga002.liack5().set("duscc2", FUNC(duscc_device::iack)); // RTC MCFG_DEVICE_ADD("rtc", RTC72423, XTAL(32'768)) // Fake crystal value, the 72423 uses it own internal crystal diff --git a/src/mame/drivers/pcipc.cpp b/src/mame/drivers/pcipc.cpp index 6801f1a12f3..bfc4bec7796 100644 --- a/src/mame/drivers/pcipc.cpp +++ b/src/mame/drivers/pcipc.cpp @@ -487,19 +487,18 @@ static void isa_com(device_slot_interface &device) void pcipc_state::superio_config(device_t *device) { - devcb_base *devcb = nullptr; - (void)devcb; - MCFG_FDC37C93X_SYSOPT(1) - MCFG_FDC37C93X_GP20_RESET_CB(INPUTLINE(":maincpu", INPUT_LINE_RESET)) - MCFG_FDC37C93X_GP25_GATEA20_CB(INPUTLINE(":maincpu", INPUT_LINE_A20)) - MCFG_FDC37C93X_IRQ1_CB(WRITELINE(":pci:07.0", i82371sb_isa_device, pc_irq1_w)) - MCFG_FDC37C93X_IRQ8_CB(WRITELINE(":pci:07.0", i82371sb_isa_device, pc_irq8n_w)) - MCFG_FDC37C93X_TXD1_CB(WRITELINE(":serport0", rs232_port_device, write_txd)) - MCFG_FDC37C93X_NDTR1_CB(WRITELINE(":serport0", rs232_port_device, write_dtr)) - MCFG_FDC37C93X_NRTS1_CB(WRITELINE(":serport0", rs232_port_device, write_rts)) - MCFG_FDC37C93X_TXD2_CB(WRITELINE(":serport1", rs232_port_device, write_txd)) - MCFG_FDC37C93X_NDTR2_CB(WRITELINE(":serport1", rs232_port_device, write_dtr)) - MCFG_FDC37C93X_NRTS2_CB(WRITELINE(":serport1", rs232_port_device, write_rts)) + fdc37c93x_device &fdc = *downcast(device); + fdc.set_sysopt_pin(1); + fdc.gp20_reset().set_inputline(":maincpu", INPUT_LINE_RESET); + fdc.gp25_gatea20().set_inputline(":maincpu", INPUT_LINE_RESET); + fdc.irq1().set(":pci:07.0", FUNC(i82371sb_isa_device::pc_irq1_w)); + fdc.irq8().set(":pci:07.0", FUNC(i82371sb_isa_device::pc_irq8n_w)); + fdc.txd1().set(":serport0", FUNC(rs232_port_device::write_txd)); + fdc.ndtr1().set(":serport0", FUNC(rs232_port_device::write_dtr)); + fdc.nrts1().set(":serport0", FUNC(rs232_port_device::write_rts)); + fdc.txd2().set(":serport1", FUNC(rs232_port_device::write_txd)); + fdc.ndtr2().set(":serport1", FUNC(rs232_port_device::write_dtr)); + fdc.nrts2().set(":serport1", FUNC(rs232_port_device::write_rts)); } MACHINE_CONFIG_START(pcipc_state::pcipc)