1 // license:GPL-2.0+
2 // copyright-holders:Dirk Best
3 /***************************************************************************
4 
5     ACT Apricot Keyboard Interface
6 
7 ***************************************************************************/
8 
9 #include "emu.h"
10 #include "keyboard.h"
11 #include "hle.h"
12 
13 
14 //**************************************************************************
15 //  DEVICE DEFINITIONS
16 //**************************************************************************
17 
18 DEFINE_DEVICE_TYPE(APRICOT_KEYBOARD_INTERFACE, apricot_keyboard_bus_device, "apricot_kbd", "Apricot Keyboard Interface")
19 
20 
21 //**************************************************************************
22 //  SLOT DEVICE
23 //**************************************************************************
24 
25 //-------------------------------------------------
26 //  apricot_keyboard_bus_device - constructor
27 //-------------------------------------------------
28 
apricot_keyboard_bus_device(const machine_config & mconfig,const char * tag,device_t * owner,uint32_t clock)29 apricot_keyboard_bus_device::apricot_keyboard_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
30 	device_t(mconfig, APRICOT_KEYBOARD_INTERFACE, tag, owner, clock),
31 	device_single_card_slot_interface<device_apricot_keyboard_interface>(mconfig, *this),
32 	m_kbd(nullptr),
33 	m_in_handler(*this)
34 {
35 }
36 
37 //-------------------------------------------------
38 //  apricot_keyboard_bus_device - destructor
39 //-------------------------------------------------
40 
~apricot_keyboard_bus_device()41 apricot_keyboard_bus_device::~apricot_keyboard_bus_device()
42 {
43 }
44 
45 //-------------------------------------------------
46 //  device_start - device-specific startup
47 //-------------------------------------------------
48 
device_start()49 void apricot_keyboard_bus_device::device_start()
50 {
51 	// get connected keyboard
52 	m_kbd = get_card_device();
53 
54 	// resolve callbacks
55 	m_in_handler.resolve_safe();
56 }
57 
58 //-------------------------------------------------
59 //  host to module interface
60 //-------------------------------------------------
61 
WRITE_LINE_MEMBER(apricot_keyboard_bus_device::out_w)62 WRITE_LINE_MEMBER( apricot_keyboard_bus_device::out_w )
63 {
64 	if (m_kbd)
65 		m_kbd->out_w(state);
66 }
67 
68 
69 //**************************************************************************
70 //  KEYBOARD INTERFACE
71 //**************************************************************************
72 
73 //-------------------------------------------------
74 //  device_apricot_keyboard_interface - constructor
75 //-------------------------------------------------
76 
device_apricot_keyboard_interface(const machine_config & mconfig,device_t & device)77 device_apricot_keyboard_interface::device_apricot_keyboard_interface(const machine_config &mconfig, device_t &device) :
78 	device_interface(device, "apricotkbd")
79 {
80 	m_host = dynamic_cast<apricot_keyboard_bus_device *>(device.owner());
81 }
82 
83 //-------------------------------------------------
84 //  ~device_apricot_keyboard_interface - destructor
85 //-------------------------------------------------
86 
~device_apricot_keyboard_interface()87 device_apricot_keyboard_interface::~device_apricot_keyboard_interface()
88 {
89 }
90 
91 
92 //**************************************************************************
93 //  SLOT INTERFACE
94 //**************************************************************************
95 
apricot_keyboard_devices(device_slot_interface & device)96 void apricot_keyboard_devices(device_slot_interface &device)
97 {
98 	device.option_add("hle", APRICOT_KEYBOARD_HLE);
99 }
100