diff options
Diffstat (limited to 'src/devices/cpu/mcs40/mcs40.h')
-rw-r--r-- | src/devices/cpu/mcs40/mcs40.h | 122 |
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; }; |