diff options
Diffstat (limited to 'src/devices/bus/nes_ctrl/ctrl.h')
-rw-r--r-- | src/devices/bus/nes_ctrl/ctrl.h | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/src/devices/bus/nes_ctrl/ctrl.h b/src/devices/bus/nes_ctrl/ctrl.h index 0acefbf4654..3fb22995b3c 100644 --- a/src/devices/bus/nes_ctrl/ctrl.h +++ b/src/devices/bus/nes_ctrl/ctrl.h @@ -17,6 +17,8 @@ #pragma once +#include "screen.h" + //************************************************************************** // TYPE DEFINITIONS @@ -26,47 +28,53 @@ class nes_control_port_device; // ======================> device_nes_control_port_interface -class device_nes_control_port_interface : public device_slot_card_interface +class device_nes_control_port_interface : public device_interface { public: // construction/destruction virtual ~device_nes_control_port_interface(); - virtual uint8_t read_bit0() { return 0; } - virtual uint8_t read_bit34() { return 0; } - virtual uint8_t read_exp(offs_t offset) { return 0; } - virtual void write(uint8_t data) { } + virtual u8 read_bit0() { return 0; } + virtual u8 read_bit2() { return 0; } // intended only for P2 microphone + virtual u8 read_bit34() { return 0; } + virtual u8 read_exp(offs_t offset) { return 0; } + virtual void write(u8 data) { } protected: device_nes_control_port_interface(const machine_config &mconfig, device_t &device); + // helper to keep track of strobe bit, returns true on 1 to 0 transitions + bool write_strobe(u8 data) { u8 prev = m_strobe; m_strobe = data & 1; return prev && !m_strobe; } + nes_control_port_device *m_port; + u8 m_strobe; }; // ======================> nes_control_port_device class nes_control_port_device : public device_t, - public device_slot_interface + public device_single_card_slot_interface<device_nes_control_port_interface> { public: // construction/destruction template <typename T> nes_control_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt) - : nes_control_port_device(mconfig, tag, owner, (uint32_t)0) + : nes_control_port_device(mconfig, tag, owner, (u32)0) { option_reset(); opts(*this); set_default_option(dflt); set_fixed(false); } - nes_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); virtual ~nes_control_port_device(); - uint8_t read_bit0(); - uint8_t read_bit34(); - uint8_t read_exp(offs_t offset); - void write(uint8_t data); + u8 read_bit0(); + u8 read_bit2(); + u8 read_bit34(); + u8 read_exp(offs_t offset); + void write(u8 data); template <typename T> void set_screen_tag(T &&tag) { m_screen.set_tag(std::forward<T>(tag)); } // for peripherals that interact with the machine's screen @@ -74,7 +82,7 @@ public: protected: // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; // devices device_nes_control_port_interface *m_device; @@ -86,11 +94,11 @@ DECLARE_DEVICE_TYPE(NES_CONTROL_PORT, nes_control_port_device) void nes_control_port1_devices(device_slot_interface &device); void nes_control_port2_devices(device_slot_interface &device); +void nes_control_special_devices(device_slot_interface &device); void fc_control_port1_devices(device_slot_interface &device); void fc_control_port2_devices(device_slot_interface &device); void fc_expansion_devices(device_slot_interface &device); -void majesco_control_port1_devices(device_slot_interface &device); -void majesco_control_port2_devices(device_slot_interface &device); - +void famibox_control_port12_devices(device_slot_interface &device); +void famibox_control_port3_devices(device_slot_interface &device); #endif // MAME_BUS_NES_CTRL_CTRL_H |