summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/audio/triplhnt.cpp
blob: d0ddba719d2bf5eca657aa216301ad5c18bc1cae (plain) (tree)
1
2
3
4
5
6
7
8
9
                       
                                   

                                                                          
                      

                                                                          
                
                              


                           
                                           

                    

                   
               

  






                                                                          









                                                                                              



                                                              





                                                                 



                                                                





                                                    



                                                       





                                                         




                                                          
                                    
                           
                                      



                                                             


                      
                            
                                                   




                                                 







                                                                                                         



                    




                                       
 
                                       










                                                                           


                                                                                          




                                                                                                  
                                    

                                                          
                                                    


                                                                    
                                                  




                                                                   
                                                










                                                                                                                      
                                                        






                                                          

                                                                                        
                                              
                                          















                                                                                                                          
// license:BSD-3-Clause
// copyright-holders:Derrick Renaud
/*************************************************************************

    audio\triplhnt.cpp

*************************************************************************/
#include "emu.h"
#include "includes/triplhnt.h"
#include "sound/discrete.h"


const char *const triplhnt_sample_names[] =
{
	"*triplhnt",
	"bear_rac",
	"witch",
	nullptr
};

/************************************************************************/
/* 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_discrete)
	/************************************************/
	/* 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