1 // license:BSD-3-Clause 2 // copyright-holders:Vas Crabb 3 /*************************************************************************** 4 5 Amiga 2000 Keyboard 6 7 ***************************************************************************/ 8 9 #ifndef MAME_BUS_AMIGA_KEYBOARD_A2000_H 10 #define MAME_BUS_AMIGA_KEYBOARD_A2000_H 11 12 #pragma once 13 14 #include "keyboard.h" 15 16 17 namespace bus { namespace amiga { namespace keyboard { 18 19 //************************************************************************** 20 // TYPE DECLARATIONS 21 //************************************************************************** 22 23 // ======================> a2000_kbd_g80_device 24 25 class a2000_kbd_g80_device : public device_t, public device_amiga_keyboard_interface 26 { 27 public: 28 // from host 29 virtual DECLARE_WRITE_LINE_MEMBER(kdat_w) override; 30 31 protected: 32 // construction/destruction 33 a2000_kbd_g80_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, uint32_t clock); 34 35 // MCU I/O 36 u8 mcu_bus_r(offs_t offset); 37 void mcu_p1_w(u8 data); 38 void mcu_p2_w(u8 data); 39 40 virtual const tiny_rom_entry *device_rom_region() const override; 41 virtual void device_add_mconfig(machine_config &config) override; 42 43 virtual void device_start() override; 44 virtual void device_reset() override; 45 46 void program_map(address_map &map); 47 void ext_map(address_map &map); 48 49 private: 50 required_ioport_array<13> m_rows; 51 required_device<cpu_device> m_mcu; 52 output_finder<> m_led_kbd_caps; 53 54 uint16_t m_row_drive; 55 bool m_host_kdat, m_mcu_kdat, m_mcu_kclk; 56 }; 57 58 // ======================> a2000_kbd_g80_us_device 59 60 class a2000_kbd_g80_us_device : public a2000_kbd_g80_device 61 { 62 public: 63 a2000_kbd_g80_us_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); 64 65 protected: 66 virtual ioport_constructor device_input_ports() const override; 67 }; 68 69 // ======================> a2000_kbd_g80_de_device 70 71 class a2000_kbd_g80_de_device : public a2000_kbd_g80_device 72 { 73 public: 74 a2000_kbd_g80_de_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); 75 76 protected: 77 virtual ioport_constructor device_input_ports() const override; 78 }; 79 80 // ======================> a2000_kbd_g80_se_device 81 82 class a2000_kbd_g80_se_device : public a2000_kbd_g80_device 83 { 84 public: 85 a2000_kbd_g80_se_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); 86 87 protected: 88 virtual ioport_constructor device_input_ports() const override; 89 }; 90 91 // ======================> a2000_kbd_g80_dk_device 92 93 class a2000_kbd_g80_dk_device : public a2000_kbd_g80_device 94 { 95 public: 96 a2000_kbd_g80_dk_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); 97 98 protected: 99 virtual ioport_constructor device_input_ports() const override; 100 }; 101 102 // ======================> a2000_kbd_g80_gb_device 103 104 class a2000_kbd_g80_gb_device : public a2000_kbd_g80_device 105 { 106 public: 107 a2000_kbd_g80_gb_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); 108 109 protected: 110 virtual ioport_constructor device_input_ports() const override; 111 }; 112 113 } } } // namespace bus::amiga::keyboard 114 115 116 //************************************************************************** 117 // GLOBAL VARIABLES 118 //************************************************************************** 119 120 DECLARE_DEVICE_TYPE_NS(A2000_KBD_G80_US, bus::amiga::keyboard, a2000_kbd_g80_us_device) 121 DECLARE_DEVICE_TYPE_NS(A2000_KBD_G80_DE, bus::amiga::keyboard, a2000_kbd_g80_de_device) 122 DECLARE_DEVICE_TYPE_NS(A2000_KBD_G80_SE, bus::amiga::keyboard, a2000_kbd_g80_se_device) 123 DECLARE_DEVICE_TYPE_NS(A2000_KBD_G80_DK, bus::amiga::keyboard, a2000_kbd_g80_dk_device) 124 DECLARE_DEVICE_TYPE_NS(A2000_KBD_G80_GB, bus::amiga::keyboard, a2000_kbd_g80_gb_device) 125 126 #endif // MAME_BUS_AMIGA_KEYBOARD_A2000_H 127