summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/smpc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/smpc.h')
-rw-r--r--src/devices/machine/smpc.h115
1 files changed, 19 insertions, 96 deletions
diff --git a/src/devices/machine/smpc.h b/src/devices/machine/smpc.h
index 2321448a67f..e832cdd2558 100644
--- a/src/devices/machine/smpc.h
+++ b/src/devices/machine/smpc.h
@@ -17,57 +17,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_SMPC_HLE_ADD(tag, clock) \
- MCFG_DEVICE_ADD((tag), SMPC_HLE, (clock))
-
-#define MCFG_SMPC_HLE_SCREEN(screen_tag) \
- downcast<smpc_hle_device &>(*device).set_screen_tag(screen_tag);
-
-#define MCFG_SMPC_HLE_CONTROL_PORTS(ctrl1_tag, ctrl2_tag) \
- downcast<smpc_hle_device &>(*device).set_control_port_tags(ctrl1_tag, ctrl2_tag);
-
-#define MCFG_SMPC_HLE_PDR1_IN_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_pdr1_in_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_PDR2_IN_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_pdr2_in_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_PDR1_OUT_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_pdr1_out_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_PDR2_OUT_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_pdr2_out_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_MASTER_RESET_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_master_reset_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_MASTER_NMI_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_master_nmi_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_SLAVE_RESET_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_slave_reset_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_SOUND_RESET_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_sound_reset_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_SYSTEM_RESET_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_system_reset_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_SYSTEM_HALT_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_system_halt_handler(DEVCB_##_devcb);
-
-#define MCFG_SMPC_HLE_DOT_SELECT_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_dot_select_handler(DEVCB_##_devcb);
-
-// set_irq_handler doesn't work in Saturn driver???
-#define MCFG_SMPC_HLE_IRQ_HANDLER_CB(_devcb) \
- downcast<smpc_hle_device &>(*device).set_interrupt_handler(DEVCB_##_devcb);
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -94,63 +43,39 @@ public:
uint8_t get_ddr(bool which);
// system delegation
- template<class Object>
- devcb_base &set_master_reset_handler(Object &&cb)
- { return m_mshres.set_callback(std::forward<Object>(cb)); }
+ auto master_reset_handler() { return m_mshres.bind(); }
- template<class Object>
- devcb_base &set_master_nmi_handler(Object &&cb)
- { return m_mshnmi.set_callback(std::forward<Object>(cb)); }
+ auto master_nmi_handler() { return m_mshnmi.bind(); }
- template<class Object>
- devcb_base &set_slave_reset_handler(Object &&cb)
- { return m_sshres.set_callback(std::forward<Object>(cb)); }
+ auto slave_reset_handler() { return m_sshres.bind(); }
- template<class Object>
- devcb_base &set_sound_reset_handler(Object &&cb)
- { return m_sndres.set_callback(std::forward<Object>(cb)); }
+ auto sound_reset_handler() { return m_sndres.bind(); }
- template<class Object>
- devcb_base &set_system_reset_handler(Object &&cb)
- { return m_sysres.set_callback(std::forward<Object>(cb)); }
+ auto system_reset_handler() { return m_sysres.bind(); }
- template<class Object>
- devcb_base &set_system_halt_handler(Object &&cb)
- { return m_syshalt.set_callback(std::forward<Object>(cb)); }
+ auto system_halt_handler() { return m_syshalt.bind(); }
- template<class Object>
- devcb_base &set_dot_select_handler(Object &&cb)
- { return m_dotsel.set_callback(std::forward<Object>(cb)); }
+ auto dot_select_handler() { return m_dotsel.bind(); }
// PDR delegation
- template<class Object>
- devcb_base &set_pdr1_in_handler(Object &&cb)
- { return m_pdr1_read.set_callback(std::forward<Object>(cb)); }
+ auto pdr1_in_handler() { return m_pdr1_read.bind(); }
- template<class Object>
- devcb_base &set_pdr2_in_handler(Object &&cb)
- { return m_pdr2_read.set_callback(std::forward<Object>(cb)); }
+ auto pdr2_in_handler() { return m_pdr2_read.bind(); }
- template<class Object>
- devcb_base &set_pdr1_out_handler(Object &&cb)
- { return m_pdr1_write.set_callback(std::forward<Object>(cb)); }
+ auto pdr1_out_handler() { return m_pdr1_write.bind(); }
- template<class Object>
- devcb_base &set_pdr2_out_handler(Object &&cb)
- { return m_pdr2_write.set_callback(std::forward<Object>(cb)); }
+ auto pdr2_out_handler() { return m_pdr2_write.bind(); }
- // interrupt handler
- template<class Object>
- devcb_base &set_interrupt_handler(Object &&cb)
- { return m_irq_line.set_callback(std::forward<Object>(cb)); }
+ // interrupt handler, doesn't work in Saturn driver???
+ auto interrupt_handler() { return m_irq_line.bind(); }
void set_region_code(uint8_t rgn) { m_region_code = rgn; }
- void set_screen_tag(const char *tag) { m_screen.set_tag(tag); }
- void set_control_port_tags(const char *tag1, const char *tag2)
+ template <typename T> void set_screen_tag(T &&tag) { m_screen.set_tag(std::forward<T>(tag)); }
+ template <typename T, typename U> void set_control_port_tags(T &&tag1, U &&tag2)
{
- m_ctrl1_tag = tag1;
- m_ctrl2_tag = tag2;
+ m_ctrl1.set_tag(std::forward<T>(tag1));
+ m_ctrl2.set_tag(std::forward<U>(tag2));
// TODO: checking against nullptr still returns a device!?
m_has_ctrl_ports = true;
}
@@ -178,8 +103,6 @@ private:
emu_timer *m_rtc_timer;
emu_timer *m_intback_timer;
emu_timer *m_sndres_timer;
- const char *m_ctrl1_tag;
- const char *m_ctrl2_tag;
bool m_has_ctrl_ports;
bool m_sf;
@@ -247,8 +170,8 @@ private:
devcb_write8 m_pdr1_write;
devcb_write8 m_pdr2_write;
devcb_write_line m_irq_line;
- saturn_control_port_device *m_ctrl1;
- saturn_control_port_device *m_ctrl2;
+ optional_device<saturn_control_port_device> m_ctrl1;
+ optional_device<saturn_control_port_device> m_ctrl2;
required_device<screen_device> m_screen;