1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 /**********************************************************************
4 
5     Tandy Radio Shack TRS-80 Model II keyboard emulation
6 
7 **********************************************************************/
8 
9 #ifndef MAME_MACHINE_TRS80M2KB_H
10 #define MAME_MACHINE_TRS80M2KB_H
11 
12 #pragma once
13 
14 #include "cpu/mcs48/mcs48.h"
15 #include "sound/discrete.h"
16 
17 
18 
19 //**************************************************************************
20 //  MACROS / CONSTANTS
21 //**************************************************************************
22 
23 #define TRS80M2_KEYBOARD_TAG    "trs80m2kb"
24 
25 
26 //**************************************************************************
27 //  TYPE DEFINITIONS
28 //**************************************************************************
29 
30 // ======================> trs80m2_keyboard_device
31 
32 class trs80m2_keyboard_device :  public device_t
33 {
34 public:
35 	// construction/destruction
36 	trs80m2_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
37 
clock_wr_callback()38 	auto clock_wr_callback() { return m_write_clock.bind(); }
39 
40 	DECLARE_WRITE_LINE_MEMBER( busy_w );
41 	DECLARE_READ_LINE_MEMBER( data_r );
42 
43 protected:
44 	// device-level overrides
45 	virtual void device_start() override;
46 	virtual void device_reset() override;
47 	// optional information overrides
48 	virtual const tiny_rom_entry *device_rom_region() const override;
49 	virtual void device_add_mconfig(machine_config &config) override;
50 	virtual ioport_constructor device_input_ports() const override;
51 
52 private:
53 	enum
54 	{
55 		LED_0 = 0,
56 		LED_1
57 	};
58 
59 	required_device<i8021_device> m_maincpu;
60 	required_ioport_array<12> m_y;
61 	output_finder<2> m_leds;
62 
63 	devcb_write_line   m_write_clock;
64 
65 	int m_busy;
66 	int m_data;
67 	int m_clk;
68 
69 	uint8_t m_keylatch;
70 
71 	DECLARE_READ_LINE_MEMBER( kb_t1_r );
72 	uint8_t kb_p0_r();
73 	void kb_p1_w(uint8_t data);
74 	void kb_p2_w(uint8_t data);
75 };
76 
77 
78 // device type definition
79 DECLARE_DEVICE_TYPE(TRS80M2_KEYBOARD, trs80m2_keyboard_device)
80 
81 
82 
83 #endif // MAME_MACHINE_TRS80M2KB_H
84