1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 /**********************************************************************
4 
5     Luxor ABC-99 keyboard and mouse emulation
6 
7 *********************************************************************/
8 
9 #ifndef MAME_BUS_ABCKB_ABC99_H
10 #define MAME_BUS_ABCKB_ABC99_H
11 
12 #pragma once
13 
14 #include "abckb.h"
15 
16 #include "cpu/mcs48/mcs48.h"
17 #include "sound/spkrdev.h"
18 
19 
20 
21 //**************************************************************************
22 //  TYPE DEFINITIONS
23 //**************************************************************************
24 
25 // ======================> abc99_device
26 
27 class abc99_device :  public device_t,
28 						public abc_keyboard_interface
29 {
30 public:
31 	// construction/destruction
32 	abc99_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
33 
34 	DECLARE_INPUT_CHANGED_MEMBER( keyboard_reset );
35 
36 protected:
37 	// device-level overrides
38 	virtual void device_start() override;
39 	virtual void device_reset() override;
40 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
41 
42 	// optional information overrides
43 	virtual const tiny_rom_entry *device_rom_region() const override;
44 	virtual void device_add_mconfig(machine_config &config) override;
45 	virtual ioport_constructor device_input_ports() const override;
46 
47 	// abc_keyboard_interface overrides
48 	virtual void txd_w(int state) override;
49 
50 private:
51 	enum
52 	{
53 		TIMER_SERIAL,
54 		TIMER_MOUSE
55 	};
56 
57 	enum
58 	{
59 		LED_1 = 0,
60 		LED_2,
61 		LED_3,
62 		LED_4,
63 		LED_5,
64 		LED_6,
65 		LED_7,
66 		LED_8,
67 		LED_INS,
68 		LED_ALT,
69 		LED_CAPS_LOCK
70 	};
71 
72 	inline void serial_input();
73 	inline void serial_output(int state);
74 	inline void serial_clock();
75 	inline void key_down(int state);
76 	inline void scan_mouse();
77 
78 	void z2_p1_w(uint8_t data);
79 	uint8_t z2_p2_r();
80 	DECLARE_READ_LINE_MEMBER( z2_t0_r );
81 	DECLARE_READ_LINE_MEMBER( z2_t1_r );
82 
83 	void z2_led_w(uint8_t data);
84 	uint8_t z5_p1_r();
85 	void z5_p2_w(uint8_t data);
86 	uint8_t z5_t1_r();
87 
88 	void abc99_z2_io(address_map &map);
89 	void abc99_z2_mem(address_map &map);
90 	void abc99_z5_mem(address_map &map);
91 
92 	emu_timer *m_serial_timer;
93 	emu_timer *m_mouse_timer;
94 
95 	required_device<i8035_device> m_maincpu;
96 	required_device<i8035_device> m_mousecpu;
97 	required_device<speaker_sound_device> m_speaker;
98 	required_ioport m_z14;
99 	required_ioport m_mouseb;
100 	output_finder<11> m_leds;
101 
102 	int m_si;
103 	int m_si_en;
104 	int m_so_z2;
105 	int m_so_z5;
106 	int m_keydown;
107 	int m_t1_z2;
108 	int m_t1_z5;
109 	int m_led_en;
110 	int m_reset;
111 	int m_txd;
112 };
113 
114 
115 // device type definition
116 DECLARE_DEVICE_TYPE(ABC99, abc99_device)
117 
118 
119 #endif // MAME_BUS_ABCKB_ABC99_H
120