1 // license:BSD-3-Clause
2 // copyright-holders:AJR
3 
4 #ifndef MAME_BUS_Z29_KBD_HE191_3425_H
5 #define MAME_BUS_Z29_KBD_HE191_3425_H
6 
7 #pragma once
8 
9 #include "bus/z29_kbd/keyboard.h"
10 #include "sound/beep.h"
11 
12 
13 class he191_3425_device : public device_t, public device_z29_keyboard_interface
14 {
15 public:
16 	// device type constructor
17 	he191_3425_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
18 
19 	// miscellanous handlers
20 	DECLARE_WRITE_LINE_MEMBER(shift_reset);
21 
22 protected:
23 	// device-level overrides
24 	virtual void device_resolve_objects() override;
25 	virtual void device_start() override;
26 	virtual ioport_constructor device_input_ports() const override;
27 	virtual void device_add_mconfig(machine_config &config) override;
28 	virtual const tiny_rom_entry *device_rom_region() const override;
29 
30 	// device_z29_keyboard_interface overrides
31 	virtual void receive_data(bool state) override;
32 
33 private:
34 	// MCU port handlers
35 	u8 mcu_pa_r();
36 	void mcu_pb_w(u8 data);
37 	void mcu_pc_w(u8 data);
38 	DECLARE_READ_LINE_MEMBER(mcu_t1_r);
39 
40 	// misc. helpers
41 	TIMER_CALLBACK_MEMBER(receive_data_synced);
42 
43 	// object finders
44 	required_device<cpu_device> m_mcu;
45 	required_device<beep_device> m_buzzer;
46 	required_ioport_array<12> m_matrix;
47 	required_ioport m_modifiers;
48 	output_finder<4> m_leds;
49 
50 	// internal state
51 	u8 m_select;
52 	bool m_recv_data;
53 };
54 
55 // device type declaration
56 DECLARE_DEVICE_TYPE(HE191_3425, he191_3425_device)
57 
58 #endif // MAME_BUS_Z29_KBD_HE191_3425_H
59