diff options
Diffstat (limited to 'src/devices/bus/isa/isa.h')
-rw-r--r-- | src/devices/bus/isa/isa.h | 73 |
1 files changed, 42 insertions, 31 deletions
diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h index 4ba5b764d24..36e949fc76f 100644 --- a/src/devices/bus/isa/isa.h +++ b/src/devices/bus/isa/isa.h @@ -62,10 +62,10 @@ ***************************************************************************/ -#pragma once +#ifndef MAME_BUS_ISA_ISA_H +#define MAME_BUS_ISA_ISA_H -#ifndef __ISA_H__ -#define __ISA_H__ +#pragma once @@ -162,21 +162,23 @@ class isa8_slot_device : public device_t, public: // construction/destruction isa8_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - isa8_slot_device(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); // device-level overrides virtual void device_start() override; // inline configuration static void static_set_isa8_slot(device_t &device, device_t *owner, const char *isa_tag); + protected: + isa8_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + // configuration device_t *m_owner; const char *m_isa_tag; }; // device type definition -extern const device_type ISA8_SLOT; +DECLARE_DEVICE_TYPE(ISA8_SLOT, isa8_slot_device) class device_isa8_card_interface; // ======================> isa8_device @@ -186,20 +188,19 @@ class isa8_device : public device_t, public: // construction/destruction isa8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - isa8_device(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); // inline configuration static void static_set_cputag(device_t &device, const char *tag); static void static_set_custom_spaces(device_t &device); - template<class _iochck> devcb_base &set_iochck_callback(_iochck iochck) { return m_write_iochck.set_callback(iochck); } - template<class _Object> static devcb_base &set_out_irq2_callback(device_t &device, _Object object) { return downcast<isa8_device &>(device).m_out_irq2_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_irq3_callback(device_t &device, _Object object) { return downcast<isa8_device &>(device).m_out_irq3_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_irq4_callback(device_t &device, _Object object) { return downcast<isa8_device &>(device).m_out_irq4_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_irq5_callback(device_t &device, _Object object) { return downcast<isa8_device &>(device).m_out_irq5_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_irq6_callback(device_t &device, _Object object) { return downcast<isa8_device &>(device).m_out_irq6_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_irq7_callback(device_t &device, _Object object) { return downcast<isa8_device &>(device).m_out_irq7_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_drq1_callback(device_t &device, _Object object) { return downcast<isa8_device &>(device).m_out_drq1_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_drq2_callback(device_t &device, _Object object) { return downcast<isa8_device &>(device).m_out_drq2_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_drq3_callback(device_t &device, _Object object) { return downcast<isa8_device &>(device).m_out_drq3_cb.set_callback(object); } + template <class Object> devcb_base &set_iochck_callback(Object &&cb) { return m_write_iochck.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq2_callback(device_t &device, Object &&cb) { return downcast<isa8_device &>(device).m_out_irq2_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq3_callback(device_t &device, Object &&cb) { return downcast<isa8_device &>(device).m_out_irq3_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq4_callback(device_t &device, Object &&cb) { return downcast<isa8_device &>(device).m_out_irq4_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq5_callback(device_t &device, Object &&cb) { return downcast<isa8_device &>(device).m_out_irq5_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq6_callback(device_t &device, Object &&cb) { return downcast<isa8_device &>(device).m_out_irq6_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq7_callback(device_t &device, Object &&cb) { return downcast<isa8_device &>(device).m_out_irq7_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_drq1_callback(device_t &device, Object &&cb) { return downcast<isa8_device &>(device).m_out_drq1_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_drq2_callback(device_t &device, Object &&cb) { return downcast<isa8_device &>(device).m_out_drq2_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_drq3_callback(device_t &device, Object &&cb) { return downcast<isa8_device &>(device).m_out_drq3_cb.set_callback(std::forward<Object>(cb)); } // for ISA8, put the 8-bit configs in the primary slots and the 16-bit configs in the secondary virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override @@ -260,6 +261,8 @@ public: const address_space_config m_program_config, m_io_config, m_program16_config, m_io16_config; protected: + isa8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + void install_space(address_spacenum spacenum, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); // device-level overrides @@ -295,7 +298,7 @@ private: // device type definition -extern const device_type ISA8; +DECLARE_DEVICE_TYPE(ISA8, isa8_device) // ======================> device_isa8_card_interface @@ -303,9 +306,9 @@ extern const device_type ISA8; class device_isa8_card_interface : public device_slot_card_interface { friend class isa8_device; + template <class ElementType> friend class simple_list; public: // construction/destruction - device_isa8_card_interface(const machine_config &mconfig, device_t &device); virtual ~device_isa8_card_interface(); device_isa8_card_interface *next() const { return m_next; } @@ -318,9 +321,14 @@ public: // inline configuration static void static_set_isabus(device_t &device, device_t *isa_device); + public: + device_isa8_card_interface(const machine_config &mconfig, device_t &device); + isa8_device *m_isa; device_t *m_isa_dev; + +private: device_isa8_card_interface *m_next; }; @@ -340,7 +348,7 @@ public: // device type definition -extern const device_type ISA16_SLOT; +DECLARE_DEVICE_TYPE(ISA16_SLOT, isa16_slot_device) // ======================> isa16_device class isa16_device : public isa8_device @@ -349,15 +357,15 @@ public: // construction/destruction isa16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template<class _Object> static devcb_base &set_out_irq10_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_irq10_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_irq11_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_irq11_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_irq12_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_irq12_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_irq14_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_irq14_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_irq15_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_irq15_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_drq0_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_drq0_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_drq5_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_drq5_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_drq6_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_drq6_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_drq7_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_drq7_cb.set_callback(object); } + template <class Object> static devcb_base &set_out_irq10_callback(device_t &device, Object &&cb) { return downcast<isa16_device &>(device).m_out_irq10_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq11_callback(device_t &device, Object &&cb) { return downcast<isa16_device &>(device).m_out_irq11_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq12_callback(device_t &device, Object &&cb) { return downcast<isa16_device &>(device).m_out_irq12_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq14_callback(device_t &device, Object &&cb) { return downcast<isa16_device &>(device).m_out_irq14_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_irq15_callback(device_t &device, Object &&cb) { return downcast<isa16_device &>(device).m_out_irq15_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_drq0_callback(device_t &device, Object &&cb) { return downcast<isa16_device &>(device).m_out_drq0_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_drq5_callback(device_t &device, Object &&cb) { return downcast<isa16_device &>(device).m_out_drq5_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_drq6_callback(device_t &device, Object &&cb) { return downcast<isa16_device &>(device).m_out_drq6_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_drq7_callback(device_t &device, Object &&cb) { return downcast<isa16_device &>(device).m_out_drq7_cb.set_callback(std::forward<Object>(cb)); } void install16_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler); @@ -418,7 +426,7 @@ private: // device type definition -extern const device_type ISA16; +DECLARE_DEVICE_TYPE(ISA16, isa16_device) // ======================> device_isa16_card_interface @@ -428,13 +436,16 @@ class device_isa16_card_interface : public device_isa8_card_interface friend class isa16_device; public: // construction/destruction - device_isa16_card_interface(const machine_config &mconfig, device_t &device); virtual ~device_isa16_card_interface(); virtual uint16_t dack16_r(int line); virtual void dack16_w(int line,uint16_t data); void set_isa_device(); + +protected: + device_isa16_card_interface(const machine_config &mconfig, device_t &device); + isa16_device *m_isa; }; -#endif /* __ISA_H__ */ +#endif // MAME_BUS_ISA_ISA_H |