blob: c9757f2a42a796ec5318d347b82cf94fe2dee35e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/**********************************************************************
AY-3-4592 Keyboard Encoder emulation
**********************************************************************
_____ _____
GND 1 |* \_/ | 40 Vcc
Data Output D1 2 | | 39 AKD
Data Output D2 3 | | 38 nMATIN
Data Output D3 4 | | 37 nPOR
Data Output D4 5 | | 36 Clock
Data Output D5 6 | | 35 nKPD
Data Output D6 7 | | 34 SLI
Data Output D7 8 | | 33 ALI
Data Output D8 9 | | 32 Matrix Output X6
Data Output D9 10 | AY-3-4592 | 31 Matrix Output X7
Data Output D10 11 | | 30 Matrix Output X5
KBINH 12 | | 29 Matrix Output X14
LO/RO 13 | | 28 Matrix Output X15
Matrix Input YA 14 | | 27 Matrix Output X13
Matrix Input YC 15 | | 26 Matrix Output X12
Matrix Input YB 16 | | 25 Matrix Output X11
Matrix Output X0 17 | | 24 Matrix Output X10
Matrix Output X1 18 | | 23 Matrix Output X9
Matrix Output X2 19 | | 22 Matrix Output X8
Matrix Output X3 20 |_____________| 21 Matrix Output X4
**********************************************************************/
#ifndef MAME_MACHINE_AY34592_H
#define MAME_MACHINE_AY34592_H
#pragma once
class ay34592_device : public device_t
{
public:
ay34592_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
template <unsigned N> auto x() { return m_read_x[N].bind(); }
auto akd_cb() { return m_akd_cb.bind(); }
auto sli_cb() { return m_sli_cb.bind(); }
auto ali_cb() { return m_ali_cb.bind(); }
auto x15_cb() { return m_x15_cb.bind(); }
// keyboard data
uint16_t data_r();
protected:
// device_t overrides
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;
private:
devcb_read16::array<14> m_read_x;
devcb_write_line m_akd_cb;
devcb_write_line m_sli_cb;
devcb_write_line m_ali_cb;
devcb_write_line m_x15_cb;
emu_timer *m_scan_timer;
TIMER_CALLBACK_MEMBER(scan_matrix);
uint16_t output_code(int mode, int x, int y);
// internal state
uint8_t m_matrix_addr;
uint8_t m_keydown_addr;
uint8_t m_opcode;
uint8_t m_akd;
uint16_t m_key_latch;
};
DECLARE_DEVICE_TYPE(AY34592, ay34592_device)
#endif // MAME_MACHINE_AY34592_H
|