1 // license: BSD-3-Clause
2 // copyright-holders: Dirk Best
3 /***************************************************************************
4 
5     Casio FP-6000 Keyboard
6 
7 ***************************************************************************/
8 
9 #ifndef MAME_MACHINE_FP6000_KBD_H
10 #define MAME_MACHINE_FP6000_KBD_H
11 
12 #pragma once
13 
14 #include "machine/keyboard.h"
15 
16 
17 //**************************************************************************
18 //  TYPE DEFINITIONS
19 //**************************************************************************
20 
21 // ======================> fp6000_kbd_device
22 
23 class fp6000_kbd_device :  public device_t, protected device_matrix_keyboard_interface<6>
24 {
25 public:
26 	// construction/destruction
27 	fp6000_kbd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
28 
29 	// callbacks
int_handler()30 	auto int_handler() { return m_int_handler.bind(); }
31 
32 	uint8_t read(offs_t offset);
33 	void write(offs_t offset, uint8_t data);
34 
35 protected:
36 	// device-level overrides
37 	virtual ioport_constructor device_input_ports() const override;
38 	virtual void device_start() override;
39 	virtual void device_reset() override;
40 
41 	// device_matrix_keyboard_interface overrides
42 	virtual void key_make(uint8_t row, uint8_t column) override;
43 	virtual void key_break(uint8_t row, uint8_t column) override;
44 	virtual void key_repeat(uint8_t row, uint8_t column) override;
45 
46 private:
47 	devcb_write_line m_int_handler;
48 
49 	enum
50 	{
51 		STATUS_READY_FOR_DATA = 0x01,
52 		STATUS_DATA_AVAILABLE = 0x02
53 	};
54 
55 	uint8_t translate(uint8_t row, uint8_t column);
56 	void send_key(uint8_t code);
57 
58 	uint8_t m_status;
59 	uint8_t m_data;
60 };
61 
62 // device type definition
63 DECLARE_DEVICE_TYPE(FP6000_KBD, fp6000_kbd_device)
64 
65 #endif // MAME_MACHINE_FP6000_KBD_H
66