summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices
diff options
context:
space:
mode:
author mooglyguy <therealmogminer@gmail.com>2018-12-17 12:40:08 +0100
committer mooglyguy <therealmogminer@gmail.com>2018-12-17 12:40:32 +0100
commit378dde23af8dc1f386fb67767df8f679905f3ab2 (patch)
tree730d63bb120f9b88af87b57bb8b5fb8cda799358 /src/devices
parent16aaf63bd683b6f7b0f961e0959a5db222af185b (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')
-rw-r--r--src/devices/bus/cbm2/exp.h11
-rw-r--r--src/devices/bus/cbmiec/cbmiec.h9
-rw-r--r--src/devices/bus/plus4/exp.h14
-rw-r--r--src/devices/cpu/e0c6200/e0c6s46.cpp2
-rw-r--r--src/devices/cpu/m6502/m3745x.cpp139
-rw-r--r--src/devices/cpu/m6502/m3745x.h73
-rw-r--r--src/devices/cpu/m6502/m5074x.cpp63
-rw-r--r--src/devices/cpu/m6502/m5074x.h44
-rw-r--r--src/devices/cpu/m6502/m6502.h8
-rw-r--r--src/devices/cpu/m6502/m6510.h10
-rw-r--r--src/devices/cpu/m6502/m6510t.h6
-rw-r--r--src/devices/cpu/m6502/m7501.h6
-rw-r--r--src/devices/cpu/m6502/m8502.h6
-rw-r--r--src/devices/cpu/m6502/n2a03.cpp15
-rw-r--r--src/devices/cpu/m6502/xavix.h12
-rw-r--r--src/devices/cpu/m6502/xavix2000.h3
-rw-r--r--src/devices/machine/appldriv.h8
-rw-r--r--src/devices/machine/mos6529.cpp29
-rw-r--r--src/devices/machine/mos6529.h47
-rw-r--r--src/devices/machine/mos8722.h35
-rw-r--r--src/devices/machine/pla.cpp10
-rw-r--r--src/devices/machine/pla.h15
-rw-r--r--src/devices/machine/sonydriv.h5
-rw-r--r--src/devices/sound/mos6581.h18
-rw-r--r--src/devices/sound/nes_apu.h2
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;