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