diff options
Diffstat (limited to 'src/devices/machine/mos6530n.h')
-rw-r--r-- | src/devices/machine/mos6530n.h | 197 |
1 files changed, 69 insertions, 128 deletions
diff --git a/src/devices/machine/mos6530n.h b/src/devices/machine/mos6530n.h index 721ce0aeac3..d7395de94a8 100644 --- a/src/devices/machine/mos6530n.h +++ b/src/devices/machine/mos6530n.h @@ -52,11 +52,10 @@ **********************************************************************/ -#pragma once - -#ifndef __MOS6530n__ -#define __MOS6530n__ +#ifndef MAME_MACHINE_MOS6530N_H +#define MAME_MACHINE_MOS6530N_H +#pragma once @@ -65,115 +64,115 @@ //************************************************************************** #define MCFG_MOS6530n_IRQ_CB(_write) \ - devcb = &mos6530_base_t::set_irq_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_irq_wr_callback(*device, DEVCB_##_write); #define MCFG_MOS6530n_IN_PA_CB(_read) \ - devcb = &mos6530_base_t::set_pa_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pa_rd_callback(*device, DEVCB_##_read); #define MCFG_MOS6530n_OUT_PA_CB(_write) \ - devcb = &mos6530_base_t::set_pa_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pa_wr_callback(*device, DEVCB_##_write); #define MCFG_MOS6530n_IN_PB_CB(_read) \ - devcb = &mos6530_base_t::set_pb_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pb_rd_callback(*device, DEVCB_##_read); #define MCFG_MOS6530n_OUT_PB_CB(_write) \ - devcb = &mos6530_base_t::set_pb_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pb_wr_callback(*device, DEVCB_##_write); #define MCFG_MOS6530n_IN_PA0_CB(_read) \ - devcb = &mos6530_base_t::set_pa0_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pa_rd_callback<0>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PA1_CB(_read) \ - devcb = &mos6530_base_t::set_pa1_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pa_rd_callback<1>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PA2_CB(_read) \ - devcb = &mos6530_base_t::set_pa2_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pa_rd_callback<2>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PA3_CB(_read) \ - devcb = &mos6530_base_t::set_pa3_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pa_rd_callback<3>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PA4_CB(_read) \ - devcb = &mos6530_base_t::set_pa4_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pa_rd_callback<4>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PA5_CB(_read) \ - devcb = &mos6530_base_t::set_pa5_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pa_rd_callback<5>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PA6_CB(_read) \ - devcb = &mos6530_base_t::set_pa6_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pa_rd_callback<6>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PA7_CB(_read) \ - devcb = &mos6530_base_t::set_pa7_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pa_rd_callback<7>(*device, DEVCB_##_read); #define MCFG_MOS6530n_OUT_PA0_CB(_write) \ - devcb = &mos6530_base_t::set_pa0_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pa_wr_callback<0>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA1_CB(_write) \ - devcb = &mos6530_base_t::set_pa1_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pa_wr_callback<1>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA2_CB(_write) \ - devcb = &mos6530_base_t::set_pa2_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pa_wr_callback<2>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA3_CB(_write) \ - devcb = &mos6530_base_t::set_pa3_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pa_wr_callback<3>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA4_CB(_write) \ - devcb = &mos6530_base_t::set_pa4_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pa_wr_callback<4>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA5_CB(_write) \ - devcb = &mos6530_base_t::set_pa5_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pa_wr_callback<5>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA6_CB(_write) \ - devcb = &mos6530_base_t::set_pa6_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pa_wr_callback<6>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PA7_CB(_write) \ - devcb = &mos6530_base_t::set_pa7_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pa_wr_callback<7>(*device, DEVCB_##_write); #define MCFG_MOS6530n_IN_PB0_CB(_read) \ - devcb = &mos6530_base_t::set_pb0_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pb_rd_callback<0>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PB1_CB(_read) \ - devcb = &mos6530_base_t::set_pb1_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pb_rd_callback<1>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PB2_CB(_read) \ - devcb = &mos6530_base_t::set_pb2_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pb_rd_callback<2>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PB3_CB(_read) \ - devcb = &mos6530_base_t::set_pb3_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pb_rd_callback<3>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PB4_CB(_read) \ - devcb = &mos6530_base_t::set_pb4_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pb_rd_callback<4>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PB5_CB(_read) \ - devcb = &mos6530_base_t::set_pb5_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pb_rd_callback<5>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PB6_CB(_read) \ - devcb = &mos6530_base_t::set_pb6_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pb_rd_callback<6>(*device, DEVCB_##_read); #define MCFG_MOS6530n_IN_PB7_CB(_read) \ - devcb = &mos6530_base_t::set_pb7_rd_callback(*device, DEVCB_##_read); + devcb = &mos6530_device_base::set_pb_rd_callback<7>(*device, DEVCB_##_read); #define MCFG_MOS6530n_OUT_PB0_CB(_write) \ - devcb = &mos6530_base_t::set_pb0_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pb_wr_callback<0>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB1_CB(_write) \ - devcb = &mos6530_base_t::set_pb1_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pb_wr_callback<1>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB2_CB(_write) \ - devcb = &mos6530_base_t::set_pb2_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pb_wr_callback<2>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB3_CB(_write) \ - devcb = &mos6530_base_t::set_pb3_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pb_wr_callback<3>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB4_CB(_write) \ - devcb = &mos6530_base_t::set_pb4_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pb_wr_callback<4>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB5_CB(_write) \ - devcb = &mos6530_base_t::set_pb5_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pb_wr_callback<5>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB6_CB(_write) \ - devcb = &mos6530_base_t::set_pb6_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pb_wr_callback<6>(*device, DEVCB_##_write); #define MCFG_MOS6530n_OUT_PB7_CB(_write) \ - devcb = &mos6530_base_t::set_pb7_wr_callback(*device, DEVCB_##_write); + devcb = &mos6530_device_base::set_pb_wr_callback<7>(*device, DEVCB_##_write); @@ -181,51 +180,20 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> mos6530_base_t +// ======================> mos6530_device_base -class mos6530_base_t : public device_t +class mos6530_device_base : public device_t { public: - // construction/destruction - mos6530_base_t(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); - - template<class _Object> static devcb_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_irq_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pa_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pa_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pb_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pb_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa0_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pa0_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa1_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pa1_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa2_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pa2_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa3_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pa3_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa4_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pa4_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa5_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pa5_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa6_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pa6_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa7_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pa7_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa0_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pa0_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa1_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pa1_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa2_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pa2_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa3_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pa3_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa4_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pa4_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa5_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pa5_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa6_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pa6_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pa7_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pa7_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb0_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pb0_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb1_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pb1_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb2_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pb2_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb3_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pb3_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb4_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pb4_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb5_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pb5_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb6_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pb6_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb7_rd_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_in_pb7_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb0_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pb0_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb1_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pb1_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb2_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pb2_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb3_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pb3_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb4_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pb4_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb5_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pb5_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb6_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pb6_cb.set_callback(object); } - template<class _Object> static devcb_base &set_pb7_wr_callback(device_t &device, _Object object) { return downcast<mos6530_base_t &>(device).m_out_pb7_cb.set_callback(object); } + template <class Object> static devcb_base &set_irq_wr_callback(device_t &device, Object &&cb) { return downcast<mos6530_device_base &>(device).m_irq_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_pa_rd_callback(device_t &device, Object &&cb) { return downcast<mos6530_device_base &>(device).m_in8_pa_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_pa_wr_callback(device_t &device, Object &&cb) { return downcast<mos6530_device_base &>(device).m_out8_pa_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_pb_rd_callback(device_t &device, Object &&cb) { return downcast<mos6530_device_base &>(device).m_in8_pb_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_pb_wr_callback(device_t &device, Object &&cb) { return downcast<mos6530_device_base &>(device).m_out8_pb_cb.set_callback(std::forward<Object>(cb)); } + template <unsigned N, class Object> static devcb_base &set_pa_rd_callback(device_t &device, Object &&cb) { return downcast<mos6530_device_base &>(device).m_in_pa_cb[N].set_callback(std::forward<Object>(cb)); } + template <unsigned N, class Object> static devcb_base &set_pa_wr_callback(device_t &device, Object &&cb) { return downcast<mos6530_device_base &>(device).m_out_pa_cb[N].set_callback(std::forward<Object>(cb)); } + template <unsigned N, class Object> static devcb_base &set_pb_rd_callback(device_t &device, Object &&cb) { return downcast<mos6530_device_base &>(device).m_in_pb_cb[N].set_callback(std::forward<Object>(cb)); } + template <unsigned N, class Object> static devcb_base &set_pb_wr_callback(device_t &device, Object &&cb) { return downcast<mos6530_device_base &>(device).m_out_pb_cb[N].set_callback(std::forward<Object>(cb)); } DECLARE_WRITE_LINE_MEMBER( pa0_w ) { pa_w(0, state); } DECLARE_WRITE_LINE_MEMBER( pa1_w ) { pa_w(1, state); } @@ -246,6 +214,9 @@ public: DECLARE_WRITE_LINE_MEMBER( pb7_w ) { pb_w(7, state); } protected: + // construction/destruction + mos6530_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + // device-level overrides virtual void device_start() override; virtual void device_reset() override; @@ -289,42 +260,14 @@ protected: optional_region_ptr<uint8_t> m_rom; devcb_write_line m_irq_cb; - devcb_read8 m_in_pa_cb; - devcb_write8 m_out_pa_cb; - devcb_read8 m_in_pb_cb; - devcb_write8 m_out_pb_cb; - devcb_read_line m_in_pa0_cb; - devcb_read_line m_in_pa1_cb; - devcb_read_line m_in_pa2_cb; - devcb_read_line m_in_pa3_cb; - devcb_read_line m_in_pa4_cb; - devcb_read_line m_in_pa5_cb; - devcb_read_line m_in_pa6_cb; - devcb_read_line m_in_pa7_cb; - devcb_write_line m_out_pa0_cb; - devcb_write_line m_out_pa1_cb; - devcb_write_line m_out_pa2_cb; - devcb_write_line m_out_pa3_cb; - devcb_write_line m_out_pa4_cb; - devcb_write_line m_out_pa5_cb; - devcb_write_line m_out_pa6_cb; - devcb_write_line m_out_pa7_cb; - devcb_read_line m_in_pb0_cb; - devcb_read_line m_in_pb1_cb; - devcb_read_line m_in_pb2_cb; - devcb_read_line m_in_pb3_cb; - devcb_read_line m_in_pb4_cb; - devcb_read_line m_in_pb5_cb; - devcb_read_line m_in_pb6_cb; - devcb_read_line m_in_pb7_cb; - devcb_write_line m_out_pb0_cb; - devcb_write_line m_out_pb1_cb; - devcb_write_line m_out_pb2_cb; - devcb_write_line m_out_pb3_cb; - devcb_write_line m_out_pb4_cb; - devcb_write_line m_out_pb5_cb; - devcb_write_line m_out_pb6_cb; - devcb_write_line m_out_pb7_cb; + devcb_read8 m_in8_pa_cb; + devcb_write8 m_out8_pa_cb; + devcb_read8 m_in8_pb_cb; + devcb_write8 m_out8_pb_cb; + devcb_read_line m_in_pa_cb[8]; + devcb_write_line m_out_pa_cb[8]; + devcb_read_line m_in_pb_cb[8]; + devcb_write_line m_out_pb_cb[8]; uint8_t m_pa_in; uint8_t m_pa_out; @@ -371,11 +314,11 @@ protected: }; -class mos6530_t : public mos6530_base_t +class mos6530_new_device : public mos6530_device_base { public: // construction/destruction - mos6530_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + mos6530_new_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual DECLARE_ADDRESS_MAP(rom_map, 8); virtual DECLARE_ADDRESS_MAP(ram_map, 8); @@ -391,11 +334,11 @@ protected: }; -class mos6532_t : public mos6530_base_t +class mos6532_new_device : public mos6530_device_base { public: // construction/destruction - mos6532_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + mos6532_new_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual DECLARE_ADDRESS_MAP(ram_map, 8); virtual DECLARE_ADDRESS_MAP(io_map, 8); @@ -411,9 +354,7 @@ protected: // device type definition -extern const device_type MOS6530n; -extern const device_type MOS6532n; - - +DECLARE_DEVICE_TYPE(MOS6530_NEW, mos6530_new_device) +DECLARE_DEVICE_TYPE(MOS6532_NEW, mos6532_new_device) -#endif +#endif // MAME_MACHINE_MOS6530N_H |