1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 /**********************************************************************
4 
5     IBM Model F PC/AT 84-key / 3270PC 122-key keyboard emulation
6 
7 *********************************************************************/
8 
9 #ifndef MAME_BUS_PC_KBD_PCAT84_H
10 #define MAME_BUS_PC_KBD_PCAT84_H
11 
12 #pragma once
13 
14 #include "cpu/mcs48/mcs48.h"
15 #include "pc_kbdc.h"
16 #include "machine/rescap.h"
17 
18 
19 
20 //**************************************************************************
21 //  TYPE DEFINITIONS
22 //**************************************************************************
23 
24 // ======================> ibm_pc_at_84_keyboard_device
25 
26 class ibm_pc_at_84_keyboard_device :  public device_t,
27 										public device_pc_kbd_interface
28 {
29 public:
30 	// construction/destruction
31 	ibm_pc_at_84_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
32 
33 protected:
34 	ibm_pc_at_84_keyboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
35 
36 	// device-level overrides
37 	virtual void device_start() override;
38 	virtual void device_reset() override;
39 
40 	// optional information overrides
41 	virtual const tiny_rom_entry *device_rom_region() const override;
42 	virtual void device_add_mconfig(machine_config &config) override;
43 	virtual ioport_constructor device_input_ports() const override;
44 
45 	// device_pc_kbd_interface overrides
DECLARE_WRITE_LINE_MEMBER(clock_write)46 	virtual DECLARE_WRITE_LINE_MEMBER( clock_write ) override { m_maincpu->set_input_line(MCS48_INPUT_IRQ, state); };
DECLARE_WRITE_LINE_MEMBER(data_write)47 	virtual DECLARE_WRITE_LINE_MEMBER( data_write ) override { };
48 
49 private:
50 	void bus_w(uint8_t data);
51 	uint8_t p1_r();
52 	void p1_w(uint8_t data);
53 	uint8_t p2_r();
54 	void p2_w(uint8_t data);
55 	DECLARE_READ_LINE_MEMBER( t0_r );
56 	DECLARE_READ_LINE_MEMBER( t1_r );
57 
58 	enum
59 	{
60 		LED_SCROLL = 0,
61 		LED_NUM,
62 		LED_CAPS
63 	};
64 
65 	int key_depressed();
66 
67 	required_device<i8048_device> m_maincpu;
68 	required_ioport_array<16> m_dr;
69 	optional_ioport m_kbdida;
70 	optional_ioport m_kbdidb;
71 	output_finder<3> m_leds;
72 
73 	uint8_t m_db;
74 	int m_cnt;
75 	int m_sense;
76 	int m_t1;
77 };
78 
79 
80 // ======================> ibm_3270pc_122_keyboard_device
81 
82 class ibm_3270pc_122_keyboard_device :  public ibm_pc_at_84_keyboard_device
83 {
84 public:
85 	// construction/destruction
86 	ibm_3270pc_122_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
87 
88 	// optional information overrides
89 	virtual const tiny_rom_entry *device_rom_region() const override;
90 	virtual ioport_constructor device_input_ports() const override;
91 };
92 
93 
94 // device type definition
95 DECLARE_DEVICE_TYPE(PC_KBD_IBM_PC_AT_84,   ibm_pc_at_84_keyboard_device)
96 DECLARE_DEVICE_TYPE(PC_KBD_IBM_3270PC_122, ibm_3270pc_122_keyboard_device)
97 
98 #endif // MAME_BUS_PC_KBD_PCAT84_H
99