summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/mcs40/mcs40.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/mcs40/mcs40.h')
-rw-r--r--src/devices/cpu/mcs40/mcs40.h122
1 files changed, 24 insertions, 98 deletions
diff --git a/src/devices/cpu/mcs40/mcs40.h b/src/devices/cpu/mcs40/mcs40.h
index 73cc2a10fe4..47687115ecb 100644
--- a/src/devices/cpu/mcs40/mcs40.h
+++ b/src/devices/cpu/mcs40/mcs40.h
@@ -25,80 +25,6 @@ enum
/***********************************************************************
- CONFIGURATION MACROS
-***********************************************************************/
-
-#define MCS40CB_BUSCYCLE(cls, fnc) \
- mcs40_cpu_device_base::bus_cycle_delegate((&cls::fnc), (#cls "::" #fnc), DEVICE_SELF, (cls *)nullptr)
-
-
-#define MCFG_I4004_BUS_CYCLE_CB(obj) \
- downcast<i4004_cpu_device &>(*device).set_bus_cycle_cb((MCS40CB_##obj));
-
-#define MCFG_I4004_SYNC_CB(obj) \
- downcast<i4004_cpu_device &>(*device).set_sync_cb(DEVCB_##obj);
-
-#define MCFG_I4004_CM_ROM_CB(obj) \
- downcast<i4004_cpu_device &>(*device).set_cm_rom_cb(DEVCB_##obj);
-
-#define MCFG_I4004_CM_RAM0_CB(obj) \
- downcast<i4004_cpu_device &>(*device).set_cm_ram_cb<0>(DEVCB_##obj);
-
-#define MCFG_I4004_CM_RAM1_CB(obj) \
- downcast<i4004_cpu_device &>(*device).set_cm_ram_cb<1>(DEVCB_##obj);
-
-#define MCFG_I4004_CM_RAM2_CB(obj) \
- downcast<i4004_cpu_device &>(*device).set_cm_ram_cb<2>(DEVCB_##obj);
-
-#define MCFG_I4004_CM_RAM3_CB(obj) \
- downcast<i4004_cpu_device &>(*device).set_cm_ram_cb<3>(DEVCB_##obj);
-
-#define MCFG_I4004_4289_PM_CB(obj) \
- downcast<i4004_cpu_device &>(*device).set_4289_pm_cb(DEVCB_##obj);
-
-#define MCFG_I4004_4289_F_L_CB(obj) \
- downcast<i4004_cpu_device &>(*device).set_4289_f_l_cb(DEVCB_##obj);
-
-
-#define MCFG_I4040_BUS_CYCLE_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_bus_cycle_cb((MCS40CB_##obj));
-
-#define MCFG_I4040_SYNC_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_sync_cb(DEVCB_##obj);
-
-#define MCFG_I4040_CM_ROM0_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_cm_rom_cb<0>(DEVCB_##obj);
-
-#define MCFG_I4040_CM_ROM1_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_cm_rom_cb<1>(DEVCB_##obj);
-
-#define MCFG_I4040_CM_RAM0_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_cm_ram_cb<0>(DEVCB_##obj);
-
-#define MCFG_I4040_CM_RAM1_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_cm_ram_cb<1>(DEVCB_##obj);
-
-#define MCFG_I4040_CM_RAM2_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_cm_ram_cb<2>(DEVCB_##obj);
-
-#define MCFG_I4040_CM_RAM3_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_cm_ram_cb<3>(DEVCB_##obj);
-
-#define MCFG_I4040_CY_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_cy_cb(DEVCB_##obj);
-
-#define MCFG_I4040_STP_ACK_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_stp_ack_cb(DEVCB_##obj);
-
-#define MCFG_I4040_4289_PM_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_4289_pm_cb(DEVCB_##obj);
-
-#define MCFG_I4040_4289_F_L_CB(obj) \
- downcast<i4040_cpu_device &>(*device).set_4289_f_l_cb(DEVCB_##obj);
-
-
-
-/***********************************************************************
TYPE DEFINITIONS
***********************************************************************/
@@ -125,9 +51,9 @@ public:
template <typename... T> void set_ram_status_map(T &&... args) { set_addrmap(AS_RAM_STATUS, std::forward<T>(args)...); }
template <typename... T> void set_ram_ports_map(T &&... args) { set_addrmap(AS_RAM_PORTS, std::forward<T>(args)...); }
template <typename... T> void set_program_memory_map(T &&... args) { set_addrmap(AS_PROGRAM_MEMORY, std::forward<T>(args)...); }
- template <typename Obj> void set_bus_cycle_cb(Obj &&cb) { m_bus_cycle_cb = std::forward<Obj>(cb); }
- template <typename Obj> devcb_base &set_4289_pm_cb(Obj &&cb) { return m_4289_pm_cb.set_callback(std::forward<Obj>(cb)); }
- template <typename Obj> devcb_base &set_4289_f_l_cb(Obj &&cb) { return m_4289_f_l_cb.set_callback(std::forward<Obj>(cb)); }
+ template <typename... T> void set_bus_cycle_cb(T &&... args) { m_bus_cycle_cb = bus_cycle_delegate(std::forward<T>(args)...); }
+ auto i4289_pm_cb() { return m_4289_pm_cb.bind(); }
+ auto i4289_f_l_cb() { return m_4289_f_l_cb.bind(); }
// chip select outputs
u8 get_cm_rom() const { return m_cm_rom; }
@@ -211,11 +137,11 @@ protected:
void set_stp(int state);
// configuration helpers
- template <typename Obj> devcb_base &set_sync_cb(Obj &&cb) { return m_sync_cb.set_callback(std::forward<Obj>(cb)); }
- template <unsigned N, typename Obj> devcb_base &set_cm_rom_cb(Obj &&cb) { return m_cm_rom_cb[N].set_callback(std::forward<Obj>(cb)); }
- template <unsigned N, typename Obj> devcb_base &set_cm_ram_cb(Obj &&cb) { return m_cm_ram_cb[N].set_callback(std::forward<Obj>(cb)); }
- template <typename Obj> devcb_base &set_cy_cb(Obj &&cb) { return m_cy_cb.set_callback(std::forward<Obj>(cb)); }
- template <typename Obj> devcb_base &set_stp_ack_cb(Obj &&cb) { return m_stp_ack_cb.set_callback(std::forward<Obj>(cb)); }
+ auto sync_cb() { return m_sync_cb.bind(); }
+ template <unsigned N> auto cm_rom_cb() { return m_cm_rom_cb[N].bind(); }
+ template <unsigned N> auto cm_ram_cb() { return m_cm_ram_cb[N].bind(); }
+ auto cy_cb() { return m_cy_cb.bind(); }
+ auto stp_ack_cb() { return m_stp_ack_cb.bind(); }
private:
enum
@@ -322,9 +248,9 @@ class i4004_cpu_device : public mcs40_cpu_device_base
{
public:
// configuration helpers
- template <typename Obj> devcb_base &set_sync_cb(Obj &&cb) { return mcs40_cpu_device_base::set_sync_cb(std::forward<Obj>(cb)); }
- template <typename Obj> devcb_base &set_cm_rom_cb(Obj &&cb) { return set_cm_rom_cb<0>(std::forward<Obj>(cb)); }
- template <unsigned N, typename Obj> devcb_base &set_cm_ram_cb(Obj &&cb) { return mcs40_cpu_device_base::set_cm_ram_cb<N>(std::forward<Obj>(cb)); }
+ auto sync_cb() { return mcs40_cpu_device_base::sync_cb(); }
+ auto cm_rom_cb() { return cm_rom_cb<0>(); }
+ template <unsigned N> auto cm_ram_cb() { return mcs40_cpu_device_base::cm_ram_cb<N>(); }
i4004_cpu_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);
@@ -345,9 +271,9 @@ protected:
virtual u8 do_io(u8 opr, u8 opa) override;
// configuration helpers
- using mcs40_cpu_device_base::set_sync_cb;
- using mcs40_cpu_device_base::set_cm_rom_cb;
- using mcs40_cpu_device_base::set_cm_ram_cb;
+ using mcs40_cpu_device_base::sync_cb;
+ using mcs40_cpu_device_base::cm_rom_cb;
+ using mcs40_cpu_device_base::cm_ram_cb;
};
@@ -355,11 +281,11 @@ class i4040_cpu_device : public i4004_cpu_device
{
public:
// configuration helpers
- template <typename Obj> devcb_base &set_sync_cb(Obj &&cb) { return i4004_cpu_device::set_sync_cb(std::forward<Obj>(cb)); }
- template <unsigned N, typename Obj> devcb_base &set_cm_rom_cb(Obj &&cb) { return set_cm_rom_cb<N>(std::forward<Obj>(cb)); }
- template <unsigned N, typename Obj> devcb_base &set_cm_ram_cb(Obj &&cb) { return set_cm_ram_cb<N>(std::forward<Obj>(cb)); }
- template <typename Obj> devcb_base &set_cy_cb(Obj &&cb) { return i4004_cpu_device::set_cy_cb(std::forward<Obj>(cb)); }
- template <typename Obj> devcb_base &set_stp_ack_cb(Obj &&cb) { return i4004_cpu_device::set_stp_ack_cb(std::forward<Obj>(cb)); }
+ auto sync_cb() { return i4004_cpu_device::sync_cb(); }
+ template <unsigned N> auto cm_rom_cb() { return cm_rom_cb<N>(); }
+ template <unsigned N> auto cm_ram_cb() { return cm_ram_cb<N>(); }
+ auto cy_cb() { return i4004_cpu_device::cy_cb(); }
+ auto stp_ack_cb() { return i4004_cpu_device::stp_ack_cb(); }
i4040_cpu_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);
@@ -375,11 +301,11 @@ protected:
virtual cycle do_cycle1(u8 opr, u8 opa, pmem &program_op) override;
// configuration helpers
- using mcs40_cpu_device_base::set_sync_cb;
- using mcs40_cpu_device_base::set_cm_rom_cb;
- using mcs40_cpu_device_base::set_cm_ram_cb;
- using mcs40_cpu_device_base::set_cy_cb;
- using mcs40_cpu_device_base::set_stp_ack_cb;
+ using mcs40_cpu_device_base::sync_cb;
+ using mcs40_cpu_device_base::cm_rom_cb;
+ using mcs40_cpu_device_base::cm_ram_cb;
+ using mcs40_cpu_device_base::cy_cb;
+ using mcs40_cpu_device_base::stp_ack_cb;
};