diff options
Diffstat (limited to 'src/mame/machine/decopincpu.h')
-rw-r--r-- | src/mame/machine/decopincpu.h | 82 |
1 files changed, 35 insertions, 47 deletions
diff --git a/src/mame/machine/decopincpu.h b/src/mame/machine/decopincpu.h index 853b89beeb8..c08aa2bde6a 100644 --- a/src/mame/machine/decopincpu.h +++ b/src/mame/machine/decopincpu.h @@ -15,43 +15,6 @@ #include "machine/6821pia.h" #include "machine/nvram.h" -#define MCFG_DECOCPU_TYPE1_ADD(_tag, _clock, _region) \ - MCFG_DEVICE_ADD(_tag, DECOCPU1, _clock) \ - downcast<decocpu_type1_device &>(*device).set_cpuregion(_region); - -#define MCFG_DECOCPU_TYPE2_ADD(_tag, _clock, _region) \ - MCFG_DEVICE_ADD(_tag, DECOCPU2, _clock) \ - downcast<decocpu_type1_device &>(*device).set_cpuregion(_region); - -#define MCFG_DECOCPU_TYPE3_ADD(_tag, _clock, _region) \ - MCFG_DEVICE_ADD(_tag, DECOCPU3, _clock) \ - downcast<decocpu_type1_device &>(*device).set_cpuregion(_region); - -#define MCFG_DECOCPU_TYPE3B_ADD(_tag, _clock, _region) \ - MCFG_DEVICE_ADD(_tag, DECOCPU3B, _clock) \ - downcast<decocpu_type1_device &>(*device).set_cpuregion(_region); - -#define MCFG_DECOCPU_DISPLAY(_disp_r, _disp_w) \ - downcast<decocpu_type1_device *>(device)->set_display_read_callback(DEVCB_##_disp_r); \ - downcast<decocpu_type1_device *>(device)->set_display_write_callback(DEVCB_##_disp_w); - -#define MCFG_DECOCPU_DMDSTATUS(_dmdstat_r) \ - downcast<decocpu_type1_device *>(device)->set_dmdstatus_read_callback(DEVCB_##_dmdstat_r); - -#define MCFG_DECOCPU_SOUNDLATCH(_soundlatch_w) \ - downcast<decocpu_type1_device *>(device)->set_soundlatch_write_callback(DEVCB_##_soundlatch_w); - -#define MCFG_DECOCPU_SWITCH(_switch_r, _switch_w) \ - downcast<decocpu_type1_device *>(device)->set_switch_read_callback(DEVCB_##_switch_r); \ - downcast<decocpu_type1_device *>(device)->set_switch_write_callback(DEVCB_##_switch_w); - -#define MCFG_DECOCPU_LAMP(_lamp_w) \ - downcast<decocpu_type1_device *>(device)->set_lamp_write_callback(DEVCB_##_lamp_w); - -#define MCFG_DECOCPU_SOLENOIDS(_sol_w) \ - downcast<decocpu_type1_device *>(device)->set_solenoid_write_callback(DEVCB_##_sol_w); - - // 6808 CPU's input clock is 4MHz // but because it has an internal /4 divider, its E clock runs at 1/4 that frequency #define E_CLOCK (XTAL(4'000'000)/4) @@ -65,23 +28,30 @@ class decocpu_type1_device : public device_t { public: + template <typename T> + decocpu_type1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpuregion_tag) + : decocpu_type1_device(mconfig, tag, owner, clock) + { + set_cpuregion(std::forward<T>(cpuregion_tag)); + } + decocpu_type1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // callbacks - template <class Object> void set_display_read_callback(Object &&cb) { m_read_display.set_callback(std::forward<Object>(cb)); } - template <class Object> void set_display_write_callback(Object &&cb) { m_write_display.set_callback(std::forward<Object>(cb)); } - template <class Object> void set_dmdstatus_read_callback(Object &&cb) { m_read_dmdstatus.set_callback(std::forward<Object>(cb)); } - template <class Object> void set_soundlatch_write_callback(Object &&cb) { m_write_soundlatch.set_callback(std::forward<Object>(cb)); } - template <class Object> void set_switch_read_callback(Object &&cb) { m_read_switch.set_callback(std::forward<Object>(cb)); } - template <class Object> void set_switch_write_callback(Object &&cb) { m_write_switch.set_callback(std::forward<Object>(cb)); } - template <class Object> void set_lamp_write_callback(Object &&cb) { m_write_lamp.set_callback(std::forward<Object>(cb)); } - template <class Object> void set_solenoid_write_callback(Object &&cb) { m_write_solenoid.set_callback(std::forward<Object>(cb)); } + auto display_read_callback() { return m_read_display.bind(); } + auto display_write_callback() { return m_write_display.bind(); } + auto dmdstatus_read_callback() { return m_read_dmdstatus.bind(); } + auto soundlatch_write_callback() { return m_write_soundlatch.bind(); } + auto switch_read_callback() { return m_read_switch.bind(); } + auto switch_write_callback() { return m_write_switch.bind(); } + auto lamp_write_callback() { return m_write_lamp.bind(); } + auto solenoid_write_callback() { return m_write_solenoid.bind(); } DECLARE_WRITE8_MEMBER(solenoid2_w); INPUT_CHANGED_MEMBER(main_nmi); INPUT_CHANGED_MEMBER(audio_nmi); - void set_cpuregion(const char *tag) { m_cputag = tag; } + template <typename T> void set_cpuregion(T &&tag) { m_rom.set_tag(std::forward<T>(tag)); } // region for cpu board code and data protected: static constexpr device_timer_id TIMER_IRQ = 0; @@ -103,9 +73,9 @@ protected: required_device<pia6821_device> m_pia2c; required_device<pia6821_device> m_pia30; required_device<pia6821_device> m_pia34; + required_region_ptr<uint8_t> m_rom; private: - const char* m_cputag; // region for cpu board code and data emu_timer* m_irq_timer; bool m_irq_active; bool m_ca2; @@ -141,6 +111,12 @@ private: class decocpu_type2_device : public decocpu_type1_device { public: + decocpu_type2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, const char *cpuregion_tag) + : decocpu_type2_device(mconfig, tag, owner, clock) + { + set_cpuregion(cpuregion_tag); + } + decocpu_type2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); void decocpu2_map(address_map &map); @@ -155,6 +131,12 @@ protected: class decocpu_type3_device : public decocpu_type2_device { public: + decocpu_type3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, const char *cpuregion_tag) + : decocpu_type3_device(mconfig, tag, owner, clock) + { + set_cpuregion(cpuregion_tag); + } + decocpu_type3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: @@ -167,6 +149,12 @@ protected: class decocpu_type3b_device : public decocpu_type3_device { public: + decocpu_type3b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, const char *cpuregion_tag) + : decocpu_type3b_device(mconfig, tag, owner, clock) + { + set_cpuregion(cpuregion_tag); + } + decocpu_type3b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: |