diff options
Diffstat (limited to 'src/devices/bus/nes_ctrl/joypad.h')
-rw-r--r-- | src/devices/bus/nes_ctrl/joypad.h | 100 |
1 files changed, 67 insertions, 33 deletions
diff --git a/src/devices/bus/nes_ctrl/joypad.h b/src/devices/bus/nes_ctrl/joypad.h index 46cfd854756..d1911111976 100644 --- a/src/devices/bus/nes_ctrl/joypad.h +++ b/src/devices/bus/nes_ctrl/joypad.h @@ -13,6 +13,7 @@ #include "ctrl.h" +INPUT_PORTS_EXTERN( nes_joypad ); //************************************************************************** // TYPE DEFINITIONS @@ -25,99 +26,132 @@ class nes_joypad_device : public device_t, { public: // construction/destruction - nes_joypad_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_joypad_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual ioport_constructor device_input_ports() const override; + virtual u8 read_bit0() override; + virtual void write(u8 data) override; protected: - nes_joypad_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + nes_joypad_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u32 latch_fill = 0x80); // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; - virtual uint8_t read_bit0() override; - virtual void write(uint8_t data) override; + virtual void set_latch() { m_latch = m_joypad->read(); } required_ioport m_joypad; - uint32_t m_latch; + u32 m_latch; // wider than standard joypad's 8-bit latch to accomodate subclass devices + const u32 m_latch_fill; // the new MSB as a joypad's shift register shifts }; + +// ======================> nes_fcpadexp_device + +class nes_fcpadexp_device : public nes_joypad_device +{ +public: + // construction/destruction + nes_fcpadexp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual u8 read_bit0() override { return 0; } + virtual u8 read_exp(offs_t offset) override; + +protected: + nes_fcpadexp_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u32 latch_fill = 0x80); +}; + + // ======================> nes_fcpad2_device class nes_fcpad2_device : public nes_joypad_device { public: // construction/destruction - nes_fcpad2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_fcpad2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual ioport_constructor device_input_ports() const override; + virtual u8 read_bit2() override; protected: - virtual uint8_t read_exp(offs_t offset) override; - virtual void write(uint8_t data) override; + // device-level overrides + virtual ioport_constructor device_input_ports() const override ATTR_COLD; + +private: + required_ioport m_mic; }; + // ======================> nes_ccpadl_device class nes_ccpadl_device : public nes_joypad_device { public: // construction/destruction - nes_ccpadl_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ccpadl_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual ioport_constructor device_input_ports() const override; +protected: + // device-level overrides + virtual ioport_constructor device_input_ports() const override ATTR_COLD; }; + // ======================> nes_ccpadr_device class nes_ccpadr_device : public nes_joypad_device { public: // construction/destruction - nes_ccpadr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ccpadr_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual ioport_constructor device_input_ports() const override; +protected: + // device-level overrides + virtual ioport_constructor device_input_ports() const override ATTR_COLD; }; -// ======================> nes_vt_majesco_ddr_device -class nes_vt_majesco_ddr_device : public nes_joypad_device +// ======================> nes_arcstick_device + +class nes_arcstick_device : public nes_fcpadexp_device { public: // construction/destruction - nes_vt_majesco_ddr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_arcstick_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual u8 read_exp(offs_t offset) override; + virtual void write(u8 data) override; - virtual ioport_constructor device_input_ports() const override; +protected: + // device-level overrides + virtual ioport_constructor device_input_ports() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + +private: + required_device<nes_control_port_device> m_daisychain; + required_ioport m_cfg; }; -// ======================> nes_arcstick_device -class nes_arcstick_device : public nes_joypad_device +// ======================> nes_vboyctrl_device + +class nes_vboyctrl_device : public nes_joypad_device { public: // construction/destruction - nes_arcstick_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_vboyctrl_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: - virtual ioport_constructor device_input_ports() const override; - virtual void device_add_mconfig(machine_config &config) override; - - virtual uint8_t read_bit0() override { return 0; } - virtual uint8_t read_exp(offs_t offset) override; - virtual void write(uint8_t data) override; - - required_device<nes_control_port_device> m_daisychain; - required_ioport m_cfg; + // device-level overrides + virtual ioport_constructor device_input_ports() const override ATTR_COLD; }; // device type definition DECLARE_DEVICE_TYPE(NES_JOYPAD, nes_joypad_device) +DECLARE_DEVICE_TYPE(NES_FCPAD_EXP, nes_fcpadexp_device) DECLARE_DEVICE_TYPE(NES_FCPAD_P2, nes_fcpad2_device) DECLARE_DEVICE_TYPE(NES_CCPAD_LEFT, nes_ccpadl_device) DECLARE_DEVICE_TYPE(NES_CCPAD_RIGHT, nes_ccpadr_device) DECLARE_DEVICE_TYPE(NES_ARCSTICK, nes_arcstick_device) -DECLARE_DEVICE_TYPE(NES_VT_MAJESCO_DDR, nes_vt_majesco_ddr_device) +DECLARE_DEVICE_TYPE(NES_VBOYCTRL, nes_vboyctrl_device) #endif // MAME_BUS_NES_CTRL_JOYPAD_H |