diff options
author | 2018-12-17 12:40:08 +0100 | |
---|---|---|
committer | 2018-12-17 12:40:32 +0100 | |
commit | 378dde23af8dc1f386fb67767df8f679905f3ab2 (patch) | |
tree | 730d63bb120f9b88af87b57bb8b5fb8cda799358 /src/devices | |
parent | 16aaf63bd683b6f7b0f961e0959a5db222af185b (diff) |
-cpu/m6502: Removed MCFG macros. [Ryan Holtz]
-machine/mos6529, mos8722, namco68, sound/mos6581: Removed MCFG macros. [Ryan Holtz]
-machine/pla: Added a dedicated MOS8721 device. [Ryan Holtz]
-drivers/apple2gs, apple3, c128, c64, cbm2, plus4, tvboy, vic10, xavix: Removed MACHINE_CONFIG macros. [Ryan Holtz]
Thus ended the reign of MCFG within devices/cpu. Briefly a couple systems from each driver. (nw)
Diffstat (limited to 'src/devices')
25 files changed, 135 insertions, 455 deletions
diff --git a/src/devices/bus/cbm2/exp.h b/src/devices/bus/cbm2/exp.h index 6eff16c5260..51f2cb15119 100644 --- a/src/devices/bus/cbm2/exp.h +++ b/src/devices/bus/cbm2/exp.h @@ -65,7 +65,16 @@ class cbm2_expansion_slot_device : public device_t, { public: // construction/destruction - cbm2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template <typename T> + cbm2_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&opts, char const *dflt) + : cbm2_expansion_slot_device(mconfig, tag, owner, clock) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } + cbm2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); // computer interface uint8_t read(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3); diff --git a/src/devices/bus/cbmiec/cbmiec.h b/src/devices/bus/cbmiec/cbmiec.h index fb889573709..4977bfc97be 100644 --- a/src/devices/bus/cbmiec/cbmiec.h +++ b/src/devices/bus/cbmiec/cbmiec.h @@ -166,6 +166,15 @@ class cbm_iec_slot_device : public device_t, { public: // construction/destruction + template <typename T> + cbm_iec_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt) + : cbm_iec_slot_device(mconfig, tag, owner, (uint32_t)0) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } cbm_iec_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); static void add_slot(machine_config &config, const char *_tag, int _address, const char *_def_slot); diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h index 0fc56396ca9..e61755a497e 100644 --- a/src/devices/bus/plus4/exp.h +++ b/src/devices/bus/plus4/exp.h @@ -94,13 +94,17 @@ class plus4_expansion_slot_device : public device_t, { public: // construction/destruction + template <typename T> + plus4_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&opts, char const *dflt) + : plus4_expansion_slot_device(mconfig, tag, owner, clock) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } plus4_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <class Object> devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_cd_rd_callback(Object &&cb) { return m_read_dma_cd.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_cd_wr_callback(Object &&cb) { return m_write_dma_cd.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_aec_wr_callback(Object &&cb) { return m_write_aec.set_callback(std::forward<Object>(cb)); } - auto irq_wr_callback() { return m_write_irq.bind(); } auto cd_rd_callback() { return m_read_dma_cd.bind(); } auto cd_wr_callback() { return m_write_dma_cd.bind(); } diff --git a/src/devices/cpu/e0c6200/e0c6s46.cpp b/src/devices/cpu/e0c6200/e0c6s46.cpp index 4a40dff3d70..ce0687b5088 100644 --- a/src/devices/cpu/e0c6200/e0c6s46.cpp +++ b/src/devices/cpu/e0c6200/e0c6s46.cpp @@ -11,7 +11,7 @@ - finish i/o ports - serial interface - buzzer envelope addition - - add mask options to MCFG (eg. buzzer on output port R4x is optional) + - add mask options for ports (eg. buzzer on output port R4x is optional) */ diff --git a/src/devices/cpu/m6502/m3745x.cpp b/src/devices/cpu/m6502/m3745x.cpp index bee7f00223c..df65754bd78 100644 --- a/src/devices/cpu/m6502/m3745x.cpp +++ b/src/devices/cpu/m6502/m3745x.cpp @@ -40,22 +40,9 @@ DEFINE_DEVICE_TYPE(M37450, m37450_device, "m37450", "Mitsubishi M37450") m3745x_device::m3745x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map) : m740_device(mconfig, type, tag, owner, clock), m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0, internal_map), - read_p3(*this), - read_p4(*this), - read_p5(*this), - read_p6(*this), - write_p3(*this), - write_p4(*this), - write_p5(*this), - write_p6(*this), - read_ad_0(*this), - read_ad_1(*this), - read_ad_2(*this), - read_ad_3(*this), - read_ad_4(*this), - read_ad_5(*this), - read_ad_6(*this), - read_ad_7(*this), + m_read_p{{*this}, {*this}, {*this}, {*this}}, + m_write_p{{*this}, {*this}, {*this}, {*this}}, + m_read_ad{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}}, m_intreq1(0), m_intreq2(0), m_intctrl1(0), @@ -71,22 +58,15 @@ m3745x_device::m3745x_device(const machine_config &mconfig, device_type type, co void m3745x_device::device_start() { - read_p3.resolve_safe(0); - read_p4.resolve_safe(0); - read_p5.resolve_safe(0); - read_p6.resolve_safe(0); - write_p3.resolve_safe(); - write_p4.resolve_safe(); - write_p5.resolve_safe(); - write_p6.resolve_safe(); - read_ad_0.resolve_safe(0); - read_ad_1.resolve_safe(0); - read_ad_2.resolve_safe(0); - read_ad_3.resolve_safe(0); - read_ad_4.resolve_safe(0); - read_ad_5.resolve_safe(0); - read_ad_6.resolve_safe(0); - read_ad_7.resolve_safe(0); + for (int i = 0; i < 4; i++) + { + m_read_p[i].resolve_safe(0); + m_write_p[i].resolve_safe(); + } + for (int i = 0; i < 8; i++) + { + m_read_ad[i].resolve_safe(0); + } for (int i = 0; i < NUM_TIMERS; i++) { @@ -252,50 +232,14 @@ void m3745x_device::recalc_irqs() m_last_all_ints = all_ints; } -void m3745x_device::send_port(address_space &space, uint8_t offset, uint8_t data) +void m3745x_device::send_port(uint8_t offset, uint8_t data) { - switch (offset) - { - case 0: - write_p3(data); - break; - - case 1: - write_p4(data); - break; - - case 2: - write_p5(data); - break; - - case 3: - write_p6(data); - break; - } + m_write_p[offset](data); } uint8_t m3745x_device::read_port(uint8_t offset) { - uint8_t incoming = 0; - - switch (offset) - { - case 0: - incoming = read_p3(); - break; - - case 1: - incoming = read_p4(); - break; - - case 2: - incoming = read_p5(); - break; - - case 3: - incoming = read_p6(); - break; - } + uint8_t incoming = m_read_p[offset](); // apply data direction registers incoming &= (m_ddrs[offset] ^ 0xff); @@ -339,37 +283,37 @@ WRITE8_MEMBER(m3745x_device::ports_w) switch (offset) { case 0: // p3 - send_port(space, 0, data & m_ddrs[0]); + send_port(0, data & m_ddrs[0]); m_ports[0] = data; break; case 1: // p3 ddr - send_port(space, 0, m_ports[0] & data); + send_port(0, m_ports[0] & data); m_ddrs[0] = data; break; case 2: // p4 - send_port(space, 1, data & m_ddrs[1]); + send_port(1, data & m_ddrs[1]); m_ports[1] = data; break; case 4: // p5 - send_port(space, 2, data & m_ddrs[2]); + send_port(2, data & m_ddrs[2]); m_ports[2] = data; break; case 5: // p5 ddr - send_port(space, 2, m_ports[2] & data); + send_port(2, m_ports[2] & data); m_ddrs[2] = data; break; case 6: // p6 - send_port(space, 3, data & m_ddrs[3]); + send_port(3, data & m_ddrs[3]); m_ports[3] = data; break; case 7: // p6 ddr - send_port(space, 3, m_ports[3] & data); + send_port(3, m_ports[3] & data); m_ddrs[3] = data; break; } @@ -423,49 +367,12 @@ WRITE8_MEMBER(m3745x_device::intregs_w) READ8_MEMBER(m3745x_device::adc_r) { - uint8_t rv = 0; - switch (offset) { case 0: m_intreq2 &= ~IRQ2_ADC; recalc_irqs(); - - switch (m_adctrl & 7) - { - case 0: - rv = read_ad_0(); - break; - - case 1: - rv = read_ad_1(); - break; - - case 2: - rv = read_ad_2(); - break; - - case 3: - rv = read_ad_3(); - break; - - case 4: - rv = read_ad_4(); - break; - - case 5: - rv = read_ad_5(); - break; - - case 6: - rv = read_ad_6(); - break; - - case 7: - rv = read_ad_7(); - break; - } - return rv; + return m_read_ad[m_adctrl & 7](); case 1: return m_adctrl; diff --git a/src/devices/cpu/m6502/m3745x.h b/src/devices/cpu/m6502/m3745x.h index ca868f09a66..b499019036b 100644 --- a/src/devices/cpu/m6502/m3745x.h +++ b/src/devices/cpu/m6502/m3745x.h @@ -8,28 +8,6 @@ #include "m740.h" //************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_M3745X_ADC14_CALLBACKS(_ad0, _ad1, _ad2, _ad3) \ - downcast<m3745x_device *>(device)->set_ad14_callbacks(DEVCB_##_ad0, DEVCB_##_ad1, DEVCB_##_ad2, DEVCB_##_ad3); - -#define MCFG_M3745X_ADC58_CALLBACKS(_ad0, _ad1, _ad2, _ad3) \ - downcast<m3745x_device *>(device)->set_ad58_callbacks(DEVCB_##_ad0, DEVCB_##_ad1, DEVCB_##_ad2, DEVCB_##_ad3); - -#define MCFG_M3745X_PORT3_CALLBACKS(_read, _write) \ - downcast<m3745x_device *>(device)->set_p3_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M3745X_PORT4_CALLBACKS(_read, _write) \ - downcast<m3745x_device *>(device)->set_p4_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M3745X_PORT5_CALLBACKS(_read, _write) \ - downcast<m3745x_device *>(device)->set_p5_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M3745X_PORT6_CALLBACKS(_read, _write) \ - downcast<m3745x_device *>(device)->set_p6_callbacks(DEVCB_##_read, DEVCB_##_write); - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -62,50 +40,13 @@ public: const address_space_config m_program_config; - template <class Read, class Write> void set_p3_callbacks(Read &&rd, Write &&wr) - { - read_p3.set_callback(std::forward<Read>(rd)); - write_p3.set_callback(std::forward<Write>(wr)); - } - - template <class Read, class Write> void set_p4_callbacks(Read &&rd, Write &&wr) - { - read_p4.set_callback(std::forward<Read>(rd)); - write_p4.set_callback(std::forward<Write>(wr)); - } - - template <class Read, class Write> void set_p5_callbacks(Read &&rd, Write &&wr) - { - read_p5.set_callback(std::forward<Read>(rd)); - write_p5.set_callback(std::forward<Write>(wr)); - } - - template <class Read, class Write> void set_p6_callbacks(Read &&rd, Write &&wr) - { - read_p6.set_callback(std::forward<Read>(rd)); - write_p6.set_callback(std::forward<Write>(wr)); - } - - template <class Read, class Read2, class Read3, class Read4> void set_ad14_callbacks(Read &&rd, Read2 &&rd2, Read3 &&rd3, Read4 &&rd4) - { - read_ad_0.set_callback(std::forward<Read>(rd)); - read_ad_1.set_callback(std::forward<Read2>(rd2)); - read_ad_2.set_callback(std::forward<Read3>(rd3)); - read_ad_3.set_callback(std::forward<Read4>(rd4)); - } - - template <class Read, class Read2, class Read3, class Read4> void set_ad58_callbacks(Read &&rd, Read2 &&rd2, Read3 &&rd3, Read4 &&rd4) - { - read_ad_4.set_callback(std::forward<Read>(rd)); - read_ad_5.set_callback(std::forward<Read2>(rd2)); - read_ad_6.set_callback(std::forward<Read3>(rd3)); - read_ad_7.set_callback(std::forward<Read4>(rd4)); - } + template<std::size_t Bit> auto read_p() { return m_read_p[Bit-3].bind(); } + template<std::size_t Bit> auto write_p() { return m_write_p[Bit-3].bind(); } + template<std::size_t Bit> auto read_ad() { return m_read_ad[Bit].bind(); } - devcb_read8 read_p3, read_p4, read_p5, read_p6; - devcb_write8 write_p3, write_p4, write_p5, write_p6; - devcb_read8 read_ad_0, read_ad_1, read_ad_2, read_ad_3; - devcb_read8 read_ad_4, read_ad_5, read_ad_6, read_ad_7; + devcb_read8 m_read_p[4]; + devcb_write8 m_write_p[4]; + devcb_read8 m_read_ad[8]; DECLARE_READ8_MEMBER(ports_r); DECLARE_WRITE8_MEMBER(ports_w); @@ -127,7 +68,7 @@ protected: virtual void execute_set_input(int inputnum, int state) override; virtual space_config_vector memory_space_config() const override; - void send_port(address_space &space, uint8_t offset, uint8_t data); + void send_port(uint8_t offset, uint8_t data); uint8_t read_port(uint8_t offset); void recalc_irqs(); diff --git a/src/devices/cpu/m6502/m5074x.cpp b/src/devices/cpu/m6502/m5074x.cpp index 67a8267fc8e..9626dc0d9ad 100644 --- a/src/devices/cpu/m6502/m5074x.cpp +++ b/src/devices/cpu/m6502/m5074x.cpp @@ -42,14 +42,8 @@ DEFINE_DEVICE_TYPE(M50741, m50741_device, "m50741", "Mitsubishi M50741") m5074x_device::m5074x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map) : m740_device(mconfig, type, tag, owner, clock), m_program_config("program", ENDIANNESS_LITTLE, 8, 13, 0, internal_map), - read_p0(*this), - read_p1(*this), - read_p2(*this), - read_p3(*this), - write_p0(*this), - write_p1(*this), - write_p2(*this), - write_p3(*this), + m_read_p{{*this}, {*this}, {*this}, {*this}}, + m_write_p{{*this}, {*this}, {*this}, {*this}}, m_intctrl(0), m_tmrctrl(0), m_tmr12pre(0), @@ -70,14 +64,11 @@ m5074x_device::m5074x_device(const machine_config &mconfig, device_type type, co void m5074x_device::device_start() { - read_p0.resolve_safe(0); - read_p1.resolve_safe(0); - read_p2.resolve_safe(0); - read_p3.resolve_safe(0); - write_p0.resolve_safe(); - write_p1.resolve_safe(); - write_p2.resolve_safe(); - write_p3.resolve_safe(); + for (int i = 0; i < 4; i++) + { + m_read_p[i].resolve_safe(0); + m_write_p[i].resolve_safe(); + } for (int i = 0; i < NUM_TIMERS; i++) { @@ -289,48 +280,12 @@ void m5074x_device::recalc_timer(int timer) void m5074x_device::send_port(address_space &space, uint8_t offset, uint8_t data) { - switch (offset) - { - case 0: - write_p0(data); - break; - - case 1: - write_p1(data); - break; - - case 2: - write_p2(data); - break; - - case 3: - write_p3(data); - break; - } + m_write_p[offset](data); } uint8_t m5074x_device::read_port(uint8_t offset) { - uint8_t incoming = 0; - - switch (offset) - { - case 0: - incoming = read_p0(); - break; - - case 1: - incoming = read_p1(); - break; - - case 2: - incoming = read_p2(); - break; - - case 3: - incoming = read_p3(); - break; - } + uint8_t incoming = m_read_p[offset](); // apply data direction registers incoming &= (m_ddrs[offset] ^ 0xff); diff --git a/src/devices/cpu/m6502/m5074x.h b/src/devices/cpu/m6502/m5074x.h index cb1b71a962c..1729ff39d25 100644 --- a/src/devices/cpu/m6502/m5074x.h +++ b/src/devices/cpu/m6502/m5074x.h @@ -16,34 +16,6 @@ #define M5074X_INTERNAL_ROM(_tag) (_tag ":" M5074X_INTERNAL_ROM_REGION) //************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_M5074X_PORT0_READ_CALLBACK(_read) \ - downcast<m5074x_device &>(*device).set_p0_rd_callback(DEVCB_##_read); - -#define MCFG_M5074X_PORT1_READ_CALLBACK(_read) \ - downcast<m5074x_device &>(*device).set_p1_rd_callback(DEVCB_##_read); - -#define MCFG_M5074X_PORT2_READ_CALLBACK(_read) \ - downcast<m5074x_device &>(*device).set_p2_rd_callback(DEVCB_##_read); - -#define MCFG_M5074X_PORT3_READ_CALLBACK(_read) \ - downcast<m5074x_device &>(*device).set_p3_rd_callback(DEVCB_##_read); - -#define MCFG_M5074X_PORT0_WRITE_CALLBACK(_write) \ - downcast<m5074x_device &>(*device).set_p0_wr_callback(DEVCB_##_write); - -#define MCFG_M5074X_PORT1_WRITE_CALLBACK(_write) \ - downcast<m5074x_device &>(*device).set_p1_wr_callback(DEVCB_##_write); - -#define MCFG_M5074X_PORT2_WRITE_CALLBACK(_write) \ - downcast<m5074x_device &>(*device).set_p2_wr_callback(DEVCB_##_write); - -#define MCFG_M5074X_PORT3_WRITE_CALLBACK(_write) \ - downcast<m5074x_device &>(*device).set_p3_wr_callback(DEVCB_##_write); - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -73,17 +45,11 @@ class m5074x_device : public m740_device public: const address_space_config m_program_config; - template<class Object> devcb_base &set_p0_rd_callback(Object &&cb) { return read_p0.set_callback(std::forward<Object>(cb)); } - template<class Object> devcb_base &set_p1_rd_callback(Object &&cb) { return read_p1.set_callback(std::forward<Object>(cb)); } - template<class Object> devcb_base &set_p2_rd_callback(Object &&cb) { return read_p2.set_callback(std::forward<Object>(cb)); } - template<class Object> devcb_base &set_p3_rd_callback(Object &&cb) { return read_p3.set_callback(std::forward<Object>(cb)); } - template<class Object> devcb_base &set_p0_wr_callback(Object &&cb) { return write_p0.set_callback(std::forward<Object>(cb)); } - template<class Object> devcb_base &set_p1_wr_callback(Object &&cb) { return write_p1.set_callback(std::forward<Object>(cb)); } - template<class Object> devcb_base &set_p2_wr_callback(Object &&cb) { return write_p2.set_callback(std::forward<Object>(cb)); } - template<class Object> devcb_base &set_p3_wr_callback(Object &&cb) { return write_p3.set_callback(std::forward<Object>(cb)); } - - devcb_read8 read_p0, read_p1, read_p2, read_p3; - devcb_write8 write_p0, write_p1, write_p2, write_p3; + template <std::size_t Bit> auto read_p() { return m_read_p[Bit].bind(); } + template <std::size_t Bit> auto write_p() { return m_write_p[Bit].bind(); } + + devcb_read8 m_read_p[4]; + devcb_write8 m_write_p[4]; DECLARE_READ8_MEMBER(ports_r); DECLARE_WRITE8_MEMBER(ports_w); diff --git a/src/devices/cpu/m6502/m6502.h b/src/devices/cpu/m6502/m6502.h index fc527ad8c5a..b6034d98f0a 100644 --- a/src/devices/cpu/m6502/m6502.h +++ b/src/devices/cpu/m6502/m6502.h @@ -11,12 +11,6 @@ #ifndef MAME_CPU_M6502_M6502_H #define MAME_CPU_M6502_M6502_H -#define MCFG_M6502_DISABLE_CACHE() \ - downcast<m6502_device *>(device)->disable_cache(); - -#define MCFG_M6502_SYNC_CALLBACK(_cb) \ - downcast<m6502_device &>(*device).set_sync_callback(DEVCB_##_cb); - class m6502_device : public cpu_device { public: enum { @@ -31,7 +25,7 @@ public: bool get_sync() const { return sync; } void disable_cache() { cache_disabled = true; } - template<class Object> devcb_base &set_sync_callback(Object &&cb) { return sync_w.set_callback(std::forward<Object>(cb)); } + auto sync_cb() { return sync_w.bind(); } devcb_write_line sync_w; diff --git a/src/devices/cpu/m6502/m6510.h b/src/devices/cpu/m6502/m6510.h index 4e686560f5a..28c9ab2443a 100644 --- a/src/devices/cpu/m6502/m6510.h +++ b/src/devices/cpu/m6502/m6510.h @@ -14,12 +14,6 @@ #include "m6502.h" -#define MCFG_M6510_PORT_CALLBACKS(_read, _write) \ - downcast<m6510_device *>(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M6510_PORT_PULLS(_up, _down) \ - downcast<m6510_device *>(device)->set_pulls(_up, _down); - class m6510_device : public m6502_device { public: m6510_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -27,10 +21,6 @@ public: uint8_t get_port(); void set_pulls(uint8_t pullup, uint8_t pulldown); - template <class Read, class Write> void set_callbacks(Read &&rd, Write &&wr) { - read_port.set_callback(std::forward<Read>(rd)); - write_port.set_callback(std::forward<Write>(wr)); - } auto read_callback() { return read_port.bind(); } auto write_callback() { return write_port.bind(); } diff --git a/src/devices/cpu/m6502/m6510t.h b/src/devices/cpu/m6502/m6510t.h index 04e683bd0c3..20db82b97e9 100644 --- a/src/devices/cpu/m6502/m6510t.h +++ b/src/devices/cpu/m6502/m6510t.h @@ -13,12 +13,6 @@ #include "m6510.h" -#define MCFG_M6510T_PORT_CALLBACKS(_read, _write) \ - downcast<m6510t_device *>(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M6510T_PORT_PULLS(_up, _down) \ - downcast<m6510t_device *>(device)->set_pulls(_up, _down); - class m6510t_device : public m6510_device { public: m6510t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6502/m7501.h b/src/devices/cpu/m6502/m7501.h index 633d5ab0d78..baa26668fab 100644 --- a/src/devices/cpu/m6502/m7501.h +++ b/src/devices/cpu/m6502/m7501.h @@ -13,12 +13,6 @@ #include "m6510.h" -#define MCFG_M7501_PORT_CALLBACKS(_read, _write) \ - downcast<m7501_device *>(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M7501_PORT_PULLS(_up, _down) \ - downcast<m7501_device *>(device)->set_pulls(_up, _down); - class m7501_device : public m6510_device { public: m7501_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6502/m8502.h b/src/devices/cpu/m6502/m8502.h index bc52b45ef2c..cdd9c8c702f 100644 --- a/src/devices/cpu/m6502/m8502.h +++ b/src/devices/cpu/m6502/m8502.h @@ -14,12 +14,6 @@ #include "m6510.h" -#define MCFG_M8502_PORT_CALLBACKS(_read, _write) \ - downcast<m8502_device *>(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M8502_PORT_PULLS(_up, _down) \ - downcast<m8502_device *>(device)->set_pulls(_up, _down); - class m8502_device : public m6510_device { public: m8502_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6502/n2a03.cpp b/src/devices/cpu/m6502/n2a03.cpp index 6b257316f17..1a05dbbd73b 100644 --- a/src/devices/cpu/m6502/n2a03.cpp +++ b/src/devices/cpu/m6502/n2a03.cpp @@ -74,14 +74,13 @@ READ8_MEMBER(n2a03_device::apu_read_mem) return mintf->program->read_byte(offset); } -MACHINE_CONFIG_START(n2a03_device::device_add_mconfig) - MCFG_DEVICE_ADD("nesapu", NES_APU, DERIVED_CLOCK(1,1) ) - MCFG_NES_APU_IRQ_HANDLER(WRITELINE(*this, n2a03_device, apu_irq)) - MCFG_NES_APU_MEM_READ_CALLBACK(READ8(*this, n2a03_device, apu_read_mem)) - - MCFG_SOUND_ROUTE(ALL_OUTPUTS, ":mono", 0.50) - -MACHINE_CONFIG_END +void n2a03_device::device_add_mconfig(machine_config &config) +{ + NES_APU(config, m_apu, DERIVED_CLOCK(1,1)); + m_apu->irq().set(FUNC(n2a03_device::apu_irq)); + m_apu->mem_read().set(FUNC(n2a03_device::apu_read_mem)); + m_apu->add_route(ALL_OUTPUTS, ":mono", 0.50); +} #include "cpu/m6502/n2a03.hxx" diff --git a/src/devices/cpu/m6502/xavix.h b/src/devices/cpu/m6502/xavix.h index 5946be9c98e..9b28a429dad 100644 --- a/src/devices/cpu/m6502/xavix.h +++ b/src/devices/cpu/m6502/xavix.h @@ -12,9 +12,6 @@ #include "m6502.h" -#define MCFG_XAVIX_VECTOR_CALLBACK(_class, _method) \ - downcast<xavix_device &>(*device).set_vector_callback(xavix_device::xavix_interrupt_vector_delegate(&_class::_method, #_class "::" #_method, this)); - class xavix_device : public m6502_device { public: xavix_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -52,6 +49,15 @@ public: typedef device_delegate<int16_t (int which, int half)> xavix_interrupt_vector_delegate; template <typename Object> void set_vector_callback(Object &&cb) { m_vector_callback = std::forward<Object>(cb); } + void set_vector_callback(xavix_interrupt_vector_delegate callback) { m_vector_callback = callback; } + template <class FunctionClass> void set_vector_callback(const char *devname, int16_t (FunctionClass::*callback)(int, int), const char *name) + { + set_vector_callback(xavix_interrupt_vector_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr))); + } + template <class FunctionClass> void set_vector_callback(int16_t (FunctionClass::*callback)(int, int), const char *name) + { + set_vector_callback(xavix_interrupt_vector_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr))); + } #undef O diff --git a/src/devices/cpu/m6502/xavix2000.h b/src/devices/cpu/m6502/xavix2000.h index 23d8ca9b890..6eec3db88d5 100644 --- a/src/devices/cpu/m6502/xavix2000.h +++ b/src/devices/cpu/m6502/xavix2000.h @@ -12,9 +12,6 @@ #include "xavix.h" -#define MCFG_XAVIX2000_VECTOR_CALLBACK(_class, _method) \ - downcast<xavix2000_device &>(*device).set_vector_callback(xavix2000_device::xavix2000_interrupt_vector_delegate(&_class::_method, #_class "::" #_method, this)); - class xavix2000_device : public xavix_device { public: xavix2000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/machine/appldriv.h b/src/devices/machine/appldriv.h index 3765705f625..1a396990167 100644 --- a/src/devices/machine/appldriv.h +++ b/src/devices/machine/appldriv.h @@ -28,7 +28,13 @@ class apple525_floppy_image_device : public legacy_floppy_image_device { public: // construction/destruction - apple525_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + apple525_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, const floppy_interface *config, int dividend, int divisor) + : apple525_floppy_image_device(mconfig, tag, owner, (uint32_t)0) + { + set_floppy_config(config); + set_params(dividend, divisor); + } + apple525_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); virtual image_init_result call_load() override; virtual void call_unload() override; diff --git a/src/devices/machine/mos6529.cpp b/src/devices/machine/mos6529.cpp index a1487f13921..b3eaf9d2a67 100644 --- a/src/devices/machine/mos6529.cpp +++ b/src/devices/machine/mos6529.cpp @@ -34,14 +34,7 @@ DEFINE_DEVICE_TYPE(MOS6529, mos6529_device, "mos6529", "MOS 6529") mos6529_device::mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MOS6529, tag, owner, clock), m_input(0), - m_p0_handler(*this), - m_p1_handler(*this), - m_p2_handler(*this), - m_p3_handler(*this), - m_p4_handler(*this), - m_p5_handler(*this), - m_p6_handler(*this), - m_p7_handler(*this) + m_p_handler{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}} { } @@ -53,14 +46,8 @@ mos6529_device::mos6529_device(const machine_config &mconfig, const char *tag, d void mos6529_device::device_start() { // resolve callbacks - m_p0_handler.resolve_safe(); - m_p1_handler.resolve_safe(); - m_p2_handler.resolve_safe(); - m_p3_handler.resolve_safe(); - m_p4_handler.resolve_safe(); - m_p5_handler.resolve_safe(); - m_p6_handler.resolve_safe(); - m_p7_handler.resolve_safe(); + for (int i = 0; i < 8; i++) + m_p_handler[i].resolve_safe(); } @@ -80,12 +67,6 @@ READ8_MEMBER( mos6529_device::read ) WRITE8_MEMBER( mos6529_device::write ) { - m_p0_handler(BIT(data, 0)); - m_p1_handler(BIT(data, 1)); - m_p2_handler(BIT(data, 2)); - m_p3_handler(BIT(data, 3)); - m_p4_handler(BIT(data, 4)); - m_p5_handler(BIT(data, 5)); - m_p6_handler(BIT(data, 6)); - m_p7_handler(BIT(data, 7)); + for (int bit = 0; bit < 8; bit++) + m_p_handler[bit](BIT(data, bit)); } diff --git a/src/devices/machine/mos6529.h b/src/devices/machine/mos6529.h index abddc4175c7..d6240477e4d 100644 --- a/src/devices/machine/mos6529.h +++ b/src/devices/machine/mos6529.h @@ -28,35 +28,6 @@ //************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_MOS6529_P0_HANDLER(_devcb) \ - downcast<mos6529_device &>(*device).set_p0_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P1_HANDLER(_devcb) \ - downcast<mos6529_device &>(*device).set_p1_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P2_HANDLER(_devcb) \ - downcast<mos6529_device &>(*device).set_p2_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P3_HANDLER(_devcb) \ - downcast<mos6529_device &>(*device).set_p3_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P4_HANDLER(_devcb) \ - downcast<mos6529_device &>(*device).set_p4_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P5_HANDLER(_devcb) \ - downcast<mos6529_device &>(*device).set_p5_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P6_HANDLER(_devcb) \ - downcast<mos6529_device &>(*device).set_p6_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P7_HANDLER(_devcb) \ - downcast<mos6529_device &>(*device).set_p7_handler(DEVCB_##_devcb); - - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -68,14 +39,7 @@ public: // construction/destruction mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <class Object> devcb_base &set_p0_handler(Object &&cb) { return m_p0_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_p1_handler(Object &&cb) { return m_p1_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_p2_handler(Object &&cb) { return m_p2_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_p3_handler(Object &&cb) { return m_p3_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_p4_handler(Object &&cb) { return m_p4_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_p5_handler(Object &&cb) { return m_p5_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_p6_handler(Object &&cb) { return m_p6_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_p7_handler(Object &&cb) { return m_p7_handler.set_callback(std::forward<Object>(cb)); } + template <std::size_t Bit> auto p_handler() { return m_p_handler[Bit].bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -95,14 +59,7 @@ protected: uint8_t m_input; - devcb_write_line m_p0_handler; - devcb_write_line m_p1_handler; - devcb_write_line m_p2_handler; - devcb_write_line m_p3_handler; - devcb_write_line m_p4_handler; - devcb_write_line m_p5_handler; - devcb_write_line m_p6_handler; - devcb_write_line m_p7_handler; + devcb_write_line m_p_handler[8]; }; diff --git a/src/devices/machine/mos8722.h b/src/devices/machine/mos8722.h index 744adf415e7..e5d32d4e4ea 100644 --- a/src/devices/machine/mos8722.h +++ b/src/devices/machine/mos8722.h @@ -38,30 +38,6 @@ #pragma once - - - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_MOS8722_Z80EN_CALLBACK(_write) \ - downcast<mos8722_device &>(*device).set_z80en_wr_callback(DEVCB_##_write); - -#define MCFG_MOS8722_FSDIR_CALLBACK(_write) \ - downcast<mos8722_device &>(*device).set_fsdir_wr_callback(DEVCB_##_write); - -#define MCFG_MOS8722_GAME_CALLBACK(_read) \ - downcast<mos8722_device &>(*device).set_game_rd_callback(DEVCB_##_read); - -#define MCFG_MOS8722_EXROM_CALLBACK(_read) \ - downcast<mos8722_device &>(*device).set_exrom_rd_callback(DEVCB_##_read); - -#define MCFG_MOS8722_SENSE40_CALLBACK(_read) \ - downcast<mos8722_device &>(*device).set_sense40_rd_callback(DEVCB_##_read); - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -74,12 +50,11 @@ public: // construction/destruction mos8722_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <class Object> devcb_base &set_z80en_wr_callback(Object &&cb) { return m_write_z80en.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_fsdir_wr_callback(Object &&cb) { return m_write_fsdir.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_game_rd_callback(Object &&cb) { return m_read_game.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_exrom_rd_callback(Object &&cb) { return m_read_exrom.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_sense40_rd_callback(Object &&cb) { return m_read_sense40.set_callback(std::forward<Object>(cb)); } - + auto z80en() { return m_write_z80en.bind(); } + auto fsdir() { return m_write_fsdir.bind(); } + auto game() { return m_read_game.bind(); } + auto exrom() { return m_read_exrom.bind(); } + auto sense40() { return m_read_sense40.bind(); } uint8_t read(offs_t offset, uint8_t data); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/machine/pla.cpp b/src/devices/machine/pla.cpp index 2b73ba36a14..f1ccde8aecc 100644 --- a/src/devices/machine/pla.cpp +++ b/src/devices/machine/pla.cpp @@ -14,6 +14,7 @@ DEFINE_DEVICE_TYPE(PLA, pla_device, "pla", "PLA") DEFINE_DEVICE_TYPE(PLS100, pls100_device, "pls100", "82S100-series PLA") +DEFINE_DEVICE_TYPE(MOS8721, mos8721_device, "mos8721", "MOS 8721 PLA") //------------------------------------------------- // pla_device - constructor @@ -45,6 +46,15 @@ pls100_device::pls100_device(const machine_config &mconfig, const char *tag, dev set_num_terms(48); } +mos8721_device::mos8721_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : pla_device(mconfig, MOS8721, tag, owner, clock) +{ + // TODO: actual number of terms is unknown + set_num_inputs(27); + set_num_outputs(18); + set_num_terms(379); +} + //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- diff --git a/src/devices/machine/pla.h b/src/devices/machine/pla.h index b6cfeb42eb8..7e4672b7860 100644 --- a/src/devices/machine/pla.h +++ b/src/devices/machine/pla.h @@ -51,13 +51,6 @@ #define MCFG_PLS100_ADD(tag) \ MCFG_DEVICE_ADD((tag), PLS100) -// MOS 8721 PLA -// TODO: actual number of terms is unknown -#define MCFG_MOS8721_ADD(tag) \ - MCFG_PLA_ADD((tag), 27, 18, 379) - - - ///************************************************************************* // TYPE DEFINITIONS ///************************************************************************* @@ -129,14 +122,20 @@ private: } m_term[MAX_TERMS]; }; - class pls100_device : public pla_device { public: pls100_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); }; +class mos8721_device : public pla_device +{ +public: + mos8721_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); +}; + DECLARE_DEVICE_TYPE(PLA, pla_device) DECLARE_DEVICE_TYPE(PLS100, pls100_device) +DECLARE_DEVICE_TYPE(MOS8721, mos8721_device) #endif // MAME_MACHINE_PLA_H diff --git a/src/devices/machine/sonydriv.h b/src/devices/machine/sonydriv.h index f547d93216b..b6e4358eadb 100644 --- a/src/devices/machine/sonydriv.h +++ b/src/devices/machine/sonydriv.h @@ -40,6 +40,11 @@ class sonydriv_floppy_image_device : public legacy_floppy_image_device { public: // construction/destruction + sonydriv_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, const floppy_interface *config) + : sonydriv_floppy_image_device(mconfig, tag, owner, (uint32_t)0) + { + set_floppy_config(config); + } sonydriv_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); static void legacy_2_drives_add(machine_config &mconfig, const floppy_interface *config); diff --git a/src/devices/sound/mos6581.h b/src/devices/sound/mos6581.h index 6707be8ecac..95af2cbd687 100644 --- a/src/devices/sound/mos6581.h +++ b/src/devices/sound/mos6581.h @@ -29,20 +29,6 @@ #pragma once - - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_MOS6581_POTX_CALLBACK(_read) \ - downcast<mos6581_device &>(*device).set_potx_rd_callback(DEVCB_##_read); - -#define MCFG_MOS6581_POTY_CALLBACK(_read) \ - downcast<mos6581_device &>(*device).set_poty_rd_callback(DEVCB_##_read); - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -64,8 +50,8 @@ public: mos6581_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); ~mos6581_device(); - template <class Object> devcb_base &set_potx_rd_callback(Object &&cb) { return m_read_potx.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_poty_rd_callback(Object &&cb) { return m_read_poty.set_callback(std::forward<Object>(cb)); } + auto potx() { return m_read_potx.bind(); } + auto poty() { return m_read_poty.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/sound/nes_apu.h b/src/devices/sound/nes_apu.h index 1c1cc33460a..1a20e354331 100644 --- a/src/devices/sound/nes_apu.h +++ b/src/devices/sound/nes_apu.h @@ -54,6 +54,8 @@ public: // configuration helpers template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); } template <class Object> devcb_base &set_mem_read_callback(Object &&cb) { return m_mem_read_cb.set_callback(std::forward<Object>(cb)); } + auto irq() { return m_irq_handler.bind(); } + auto mem_read() { return m_mem_read_cb.bind(); } virtual void device_reset() override; virtual void device_clock_changed() override; |