1 // license:BSD-3-Clause
2 // copyright-holders:Patrick Mackinlay
3
4 #ifndef MAME_BUS_RTPC_KBD_CON_H
5 #define MAME_BUS_RTPC_KBD_CON_H
6
7 #pragma once
8
9 class device_rtpc_kbd_interface;
10
11 class rtpc_kbd_con_device
12 : public device_t
13 , public device_single_card_slot_interface<device_rtpc_kbd_interface>
14 {
15 public:
16 template <typename T>
rtpc_kbd_con_device(machine_config const & mconfig,char const * tag,device_t * owner,T && opts,char const * dflt)17 rtpc_kbd_con_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
18 : rtpc_kbd_con_device(mconfig, tag, owner, 0U)
19 {
20 option_reset();
21 opts(*this);
22 set_default_option(dflt);
23 set_fixed(false);
24 }
25 rtpc_kbd_con_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0U);
26
out_clock_cb()27 auto out_clock_cb() { return m_out_clock_cb.bind(); }
out_data_cb()28 auto out_data_cb() { return m_out_data_cb.bind(); }
29
clock_signal()30 int clock_signal() { return m_clock_state; }
data_signal()31 int data_signal() { return m_data_state; }
32
33 void clock_write_from_mb(int state);
34 void data_write_from_mb(int state);
35 void clock_write_from_kb(int state);
36 void data_write_from_kb(int state);
37
38 protected:
39 virtual void device_resolve_objects() override;
40 virtual void device_config_complete() override;
41 virtual void device_start() override;
42
43 void update_clock_state(bool fromkb);
44 void update_data_state(bool fromkb);
45
46 devcb_write_line m_out_clock_cb;
47 devcb_write_line m_out_data_cb;
48
49 int8_t m_clock_state;
50 int8_t m_data_state;
51
52 uint8_t m_mb_clock_state;
53 uint8_t m_mb_data_state;
54 uint8_t m_kb_clock_state;
55 uint8_t m_kb_data_state;
56
57 device_rtpc_kbd_interface *m_keyboard;
58 };
59
DECLARE_DEVICE_TYPE(RTPC_KBD_CON,rtpc_kbd_con_device)60 DECLARE_DEVICE_TYPE(RTPC_KBD_CON, rtpc_kbd_con_device)
61
62 class device_rtpc_kbd_interface : public device_interface
63 {
64 friend class rtpc_kbd_port_device;
65 public:
66 virtual ~device_rtpc_kbd_interface() {}
67
68 virtual void clock_w(int state) {}
69 virtual void data_w(int state) {}
70
71 protected:
72 device_rtpc_kbd_interface(machine_config const &mconfig, device_t &device);
73
74 int clock_signal() const { return m_port->clock_signal(); }
75 int data_signal() const { return m_port->data_signal(); }
76
77 rtpc_kbd_con_device *m_port;
78 };
79
80 #endif // MAME_BUS_RTPC_KBD_CON_H
81