summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/mos6530n.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/mos6530n.h')
-rw-r--r--src/devices/machine/mos6530n.h197
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