diff options
Diffstat (limited to 'src/mame/audio/triplhnt.c')
-rw-r--r-- | src/mame/audio/triplhnt.c | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/src/mame/audio/triplhnt.c b/src/mame/audio/triplhnt.c new file mode 100644 index 00000000000..eb0c6d7d50d --- /dev/null +++ b/src/mame/audio/triplhnt.c @@ -0,0 +1,186 @@ +/************************************************************************* + + audio\triplhnt.c + +*************************************************************************/ +#include "driver.h" +#include "triplhnt.h" +#include "sound/discrete.h" + + +static const char *triplhnt_sample_names[] = +{ + "*triplhnt", + "bear_rac.wav", + "witch.wav", + 0 +}; + +struct Samplesinterface triplhnt_samples_interface = +{ + 2, /* 2 channels */ + triplhnt_sample_names +}; + + +/************************************************************************/ +/* 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, + 5, // B+ voltage of the Constant Current source + 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_TAG(NODE_20, 1, + 10000, // R86 + R88 @ 0 + 260000, // R86 + R88 @ max + DISC_LOGADJ, "BEAR") + DISCRETE_DAC_R1(NODE_21, 1, // 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 + 5, 1, 0, DISC_CLK_ON_R_EDGE) // /6 counter on rising edge + DISCRETE_TRANSFORM2(NODE_24, 1, NODE_23, 2, "01>") // IC B6, pin 8 + DISCRETE_LOGIC_INVERT(NODE_25, 1, NODE_22) // IC D9, pin 3 + DISCRETE_LOGIC_NAND(NODE_26, 1, NODE_25, TRIPLHNT_NOISE) // IC D9, pin 11 + DISCRETE_LOGIC_XOR(NODE_27, 1, 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 + 1, 1, 0, DISC_CLK_ON_R_EDGE) // /2 counter on rising edge + DISCRETE_TRANSFORM5(NODE_29, 1, NODE_24, NODE_28, NODE_26, 2, 4, "13*24*+0+") // Mix the mess together in binary + DISCRETE_DAC_R1(TRIPLHNT_BEAR_ROAR_SND, 1, 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, 1, + 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 |