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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
// license:???
// copyright-holders:Derrick Renaud
/*************************************************************************
audio\triplhnt.c
*************************************************************************/
#include "emu.h"
#include "includes/triplhnt.h"
#include "sound/discrete.h"
const char *const triplhnt_sample_names[] =
{
"*triplhnt",
"bear_rac",
"witch",
0
};
/************************************************************************/
/* triplhnt Sound System Analog emulation */
/* Feb 2004, Derrick Renaud */
/************************************************************************/
static const discrete_lfsr_desc triplhnt_lfsr =
{
DISC_CLK_IS_FREQ,
16, /* Bit Length */
0, /* Reset Value */
0, /* Use Bit 0 as XOR input 0 */
14, /* Use Bit 14 as XOR input 1 */
DISC_LFSR_XNOR, /* Feedback stage1 is XNOR */
DISC_LFSR_OR, /* Feedback stage2 is just stage 1 output OR with external feed */
DISC_LFSR_REPLACE, /* Feedback stage3 replaces the shifted register contents */
0x000001, /* Everything is shifted into the first bit only */
0, /* Output not inverted */
15 /* Output bit */
};
static const discrete_dac_r1_ladder triplhnt_bear_roar_v_dac =
{
4, // size of ladder
{1000000, 470000, 220000, 2200000}, // R47, R50, R48, R51
5, // vBias
68000, // R44
0, // no rGnd
0 // no smoothing cap
};
static const discrete_dac_r1_ladder triplhnt_bear_roar_out_dac =
{
3, // size of ladder
{100000, 33000, 100000}, // R56, R58, R57
0, // no vBias
0, // no rBias
0, // no rGnd
0 // no smoothing cap
};
static const discrete_dac_r1_ladder triplhnt_shot_dac =
{
4, // size of ladder
{8200, 3900, 2200, 1000}, // R53, R54, R55, R52
0, // no vBias
0, // no rBias
0, // no rGnd
0 // no smoothing cap
};
static const discrete_555_cc_desc triplhnt_bear_roar_vco =
{
DISC_555_OUT_DC | DISC_555_OUT_SQW,
5, // B+ voltage of 555
DEFAULT_555_VALUES,
0.7 // Q2 junction voltage
};
static const discrete_schmitt_osc_desc triplhnt_screech_osc =
{
2200, // R84
330, // R85
1.e-6, // C59
DEFAULT_7414_VALUES,
1 // invert output using 7400 gate E7
};
static const discrete_mixer_desc triplhnt_mixer =
{
DISC_MIXER_IS_RESISTOR,
{3300 + 19879.5, 47000, 27000 + 545.6}, // R59 + (R56||R57||R58), R60 + (R52||R53||R54||R55), R61
{0}, // No variable resistor nodes
{0}, // No caps
0, // No rI
1000, // R78
1e-7, // C72
1e-7, // C44
0, // vBias not used for resistor network
245000
};
/* Nodes - Sounds */
#define TRIPLHNT_NOISE NODE_10
#define TRIPLHNT_BEAR_ROAR_SND NODE_11
#define TRIPLHNT_SHOT_SND NODE_12
#define TRIPLHNT_SCREECH_SND NODE_13
#define POOLSHRK_SCORE_SND NODE_14
DISCRETE_SOUND_START(triplhnt)
/************************************************/
/* Input register mapping for triplhnt */
/************************************************/
/* NODE GAIN OFFSET INIT */
DISCRETE_INPUTX_DATA(TRIPLHNT_BEAR_ROAR_DATA, -1, 0x0f, 0)
DISCRETE_INPUT_NOT (TRIPLHNT_BEAR_EN)
DISCRETE_INPUT_DATA (TRIPLHNT_SHOT_DATA)
DISCRETE_INPUT_LOGIC(TRIPLHNT_SCREECH_EN)
DISCRETE_INPUT_NOT (TRIPLHNT_LAMP_EN)
/************************************************/
DISCRETE_LFSR_NOISE(TRIPLHNT_NOISE, // Output A7 pin 13
TRIPLHNT_LAMP_EN, TRIPLHNT_LAMP_EN, // From gate A8 pin 10
12096000.0/2/256, // 256H signal
DEFAULT_TTL_V_LOGIC_1, 0, DEFAULT_TTL_V_LOGIC_1/2, &triplhnt_lfsr)
/************************************************/
/* Bear Roar is a VCO with noise mixed in. */
/************************************************/
DISCRETE_ADJUSTMENT(NODE_20,
10000, // R86 + R88 @ 0
260000, // R86 + R88 @ max
DISC_LOGADJ, "BEAR")
DISCRETE_DAC_R1(NODE_21, // base of Q2
TRIPLHNT_BEAR_ROAR_DATA, // IC B10, Q0-Q3
DEFAULT_TTL_V_LOGIC_1, // TTL ON level
&triplhnt_bear_roar_v_dac)
DISCRETE_555_CC(NODE_22, 1, // IC C11 pin 3, always enabled
NODE_21, // vIn
NODE_20, // current adjust
1.e-8, // C58
0, 390000, 0, // no rBias, R87, no rDis
&triplhnt_bear_roar_vco)
DISCRETE_COUNTER(NODE_23, 1, TRIPLHNT_BEAR_EN, // IC B6, QB-QD
NODE_22, // from IC C11, pin 3
0, 5, 1, 0, DISC_CLK_ON_R_EDGE) // /6 counter on rising edge
DISCRETE_TRANSFORM2(NODE_24, NODE_23, 2, "01>") // IC B6, pin 8
DISCRETE_LOGIC_INVERT(NODE_25, NODE_22) // IC D9, pin 3
DISCRETE_LOGIC_NAND(NODE_26, NODE_25, TRIPLHNT_NOISE) // IC D9, pin 11
DISCRETE_LOGIC_XOR(NODE_27, NODE_24, NODE_26) // IC B8, pin 6
DISCRETE_COUNTER(NODE_28, 1, TRIPLHNT_BEAR_EN, // IC B6, pin 12
NODE_27, // from IC B8, pin 6
0, 1, 1, 0, DISC_CLK_ON_R_EDGE) // /2 counter on rising edge
DISCRETE_TRANSFORM5(NODE_29, NODE_24, NODE_28, NODE_26, 2, 4, "13*24*+0+") // Mix the mess together in binary
DISCRETE_DAC_R1(TRIPLHNT_BEAR_ROAR_SND, NODE_29,
DEFAULT_TTL_V_LOGIC_1,
&triplhnt_bear_roar_out_dac)
/************************************************/
/* Shot is just the noise amplitude modulated */
/* by an R1 DAC. */
/************************************************/
DISCRETE_SWITCH(NODE_40, 1, // Gate A9, pins 6, 8, 11, 3
TRIPLHNT_NOISE, // noise enables the data which is then inverted
1, TRIPLHNT_SHOT_DATA)
DISCRETE_DAC_R1(TRIPLHNT_SHOT_SND,
NODE_40,
DEFAULT_TTL_V_LOGIC_1,
&triplhnt_shot_dac)
/************************************************/
/* Screech is just the noise modulating a */
/* Schmitt VCO. */
/************************************************/
DISCRETE_SCHMITT_OSCILLATOR(TRIPLHNT_SCREECH_SND, TRIPLHNT_SCREECH_EN, TRIPLHNT_NOISE, 3.4, &triplhnt_screech_osc)
/************************************************/
/* Final mix and output. */
/************************************************/
DISCRETE_MIXER3(NODE_90, 1, TRIPLHNT_BEAR_ROAR_SND, TRIPLHNT_SHOT_SND, TRIPLHNT_SCREECH_SND, &triplhnt_mixer)
DISCRETE_OUTPUT(NODE_90, 1)
DISCRETE_SOUND_END
|