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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
// license:BSD-3-Clause
// copyright-holders:Dirk Best
/*****************************************************************************
*
* TTL74145
*
*
* BCD-to-Decimal decoder
*
* __ __
* 0-| v |-VCC
* 1-| |-A
* 2-| |-B
* 3-| |-C
* 4-| |-D
* 5-| |-9
* 6-| |-8
* GND-|_____|-7
*
*
* Truth table
* _______________________________
* | Inputs | Outputs |
* | D C B A | 0 1 2 3 4 5 6 7 8 9 |
* |-------------------------------|
* | L L L L | L H H H H H H H H H |
* | L L L H | H L H H H H H H H H |
* | L L H L | H H L H H H H H H H |
* | L L H H | H H H L H H H H H H |
* | L H L L | H H H H L H H H H H |
* |-------------------------------|
* | L H L H | H H H H H L H H H H |
* | L H H L | H H H H H H L H H H |
* | L H H H | H H H H H H H L H H |
* | H L L L | H H H H H H H H L H |
* | H L L H | H H H H H H H H H L |
* |-------------------------------|
* | H L H L | H H H H H H H H H H |
* | H L H H | H H H H H H H H H H |
* | H H L L | H H H H H H H H H H |
* | H H L H | H H H H H H H H H H |
* | H H H L | H H H H H H H H H H |
* | H H H H | H H H H H H H H H H |
* -------------------------------
*
****************************************************************************/
#include "emu.h"
#include "74145.h"
#include "coreutil.h"
DEFINE_DEVICE_TYPE(TTL74145, ttl74145_device, "ttl74145", "TTL74145")
/***************************************************************************
DEVICE INTERFACE
***************************************************************************/
//-------------------------------------------------
// ttl74145_device - constructor
//-------------------------------------------------
ttl74145_device::ttl74145_device(const machine_config &mconfig, const char *tag, device_t *owner, const XTAL &clock)
: device_t(mconfig, TTL74145, tag, owner, clock)
, m_output_line_cb(*this)
, m_number(0)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void ttl74145_device::device_start()
{
/* resolve callbacks */
m_output_line_cb.resolve_all_safe();
// register for state saving
save_item(NAME(m_number));
}
//-------------------------------------------------
// device_start - device-specific reset
//-------------------------------------------------
void ttl74145_device::device_reset()
{
m_number = 0;
}
/***************************************************************************
IMPLEMENTATION
***************************************************************************/
void ttl74145_device::write(uint8_t data)
{
/* decode number */
uint16_t new_number = bcd_2_dec(data & 0x0f);
/* call output callbacks if the number changed */
if (new_number != m_number)
{
for (std::size_t bit = 0; bit < 10; bit++)
m_output_line_cb[bit](new_number == bit);
}
/* update state */
m_number = new_number;
}
uint16_t ttl74145_device::read()
{
return (1 << m_number) & 0x3ff;
}
|