1 // license:GPL-2.0+ 2 // copyright-holders:Dirk Best 3 /*************************************************************************** 4 5 ACT Apricot Keyboard Interface 6 7 Host interface: 9-pin D-SUB 8 9 1 +12V 10 2 OUT 11 3 IN 12 4 N/C 13 5 N/C 14 6 GND 15 7 -12V 16 8 0V 17 9 N/C 18 19 Keyboard interface: 20 21 A 0V 22 B +12V 23 C -12V 24 D N/C 25 E OUT 26 F IN 27 28 ***************************************************************************/ 29 30 #ifndef MAME_BUS_APRICOT_KEYBOARD_KEYBOARD_H 31 #define MAME_BUS_APRICOT_KEYBOARD_KEYBOARD_H 32 33 #pragma once 34 35 36 37 //************************************************************************** 38 // TYPE DEFINITIONS 39 //************************************************************************** 40 41 class device_apricot_keyboard_interface; 42 43 // ======================> apricot_keyboard_bus_device 44 45 class apricot_keyboard_bus_device : public device_t, public device_single_card_slot_interface<device_apricot_keyboard_interface> 46 { 47 public: 48 // construction/destruction 49 template <typename T> apricot_keyboard_bus_device(const machine_config & mconfig,const char * tag,device_t * owner,T && opts,const char * dflt)50 apricot_keyboard_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt) 51 : apricot_keyboard_bus_device(mconfig, tag, owner, 0) 52 { 53 option_reset(); 54 opts(*this); 55 set_default_option(dflt); 56 set_fixed(false); 57 } 58 apricot_keyboard_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 59 virtual ~apricot_keyboard_bus_device(); 60 61 // callbacks in_handler()62 auto in_handler() { return m_in_handler.bind(); } 63 64 // called from keyboard DECLARE_WRITE_LINE_MEMBER(in_w)65 DECLARE_WRITE_LINE_MEMBER( in_w ) { m_in_handler(state); } 66 67 // called from host 68 DECLARE_WRITE_LINE_MEMBER( out_w ); 69 70 protected: 71 // device-level overrides 72 virtual void device_start() override; 73 74 private: 75 device_apricot_keyboard_interface *m_kbd; 76 77 devcb_write_line m_in_handler; 78 }; 79 80 // ======================> device_apricot_keyboard_interface 81 82 class device_apricot_keyboard_interface : public device_interface 83 { 84 public: 85 // construction/destruction 86 virtual ~device_apricot_keyboard_interface(); 87 88 virtual void out_w(int state) = 0; 89 90 protected: 91 device_apricot_keyboard_interface(const machine_config &mconfig, device_t &device); 92 93 apricot_keyboard_bus_device *m_host; 94 }; 95 96 97 // device type definition 98 DECLARE_DEVICE_TYPE(APRICOT_KEYBOARD_INTERFACE, apricot_keyboard_bus_device) 99 100 // supported devices 101 void apricot_keyboard_devices(device_slot_interface &device); 102 103 104 #endif // MAME_BUS_APRICOT_KEYBOARD_KEYBOARD_H 105