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




                                                                             
                
                    
                    
                            










                                            



                                       



                                                                                                         
                                                
                                                                     




                                                          




                                                                                                         





                                                






                                                                   










                                                 



                                                          










                                                 



                                                          










                                                 




                                                     










                                        




                                                    









                                        

  
                                    

                                                         

                                                          


                                                       
                                                       

                                                         

                                                          
                                
                                                                   
                                                                        

                                                        


                                                                         


                                                                                               

                                                          
                                
                                                                   
                                                                        

                                                        


                                                                         


                                                                                               

                                                          
                                
                                                                   
                                                                        

                                                        


                                                                         


                                                                                               

                                                          

                                                                                            
                                                                   
                                                                        

                                                        



                                                              

                                                             



                                                              

                                                            

                                                                              

                                                         

                                                          
                                




                                                                       
                                



                                                                       













                                            


                                       




                                                                                                          
                                                
                    



                                           






                                                                    
                                                 
                  
                                          


                     



                                          




                                                           
                                                 
                  
                                          


                    



                                          




                                                           
                                                 
                  
                                          


                    



                                          





                                                     




                                        
                   
                                   
                   

                                  

  
                                     

                                                         

                                                          


                                                       

                                                         

                                                          
                                
                                                                   
                                                                        

                                                         


                                                                         


                                                                                                

                                                          
                                
                                                                   
                                                                        

                                                         


                                                                         


                                                                                                

                                                          
                                
                                                                   
                                                                        

                                                         


                                                                         


                                                                                                

                                                          
                                




                                                                       

                                   
// license:BSD-3-Clause
// copyright-holders:Derrick Renaud
/***************************************************************************
    galaga.c
    Sound handler
****************************************************************************/

#include "emu.h"
#include "namco52.h"
#include "namco54.h"
#include "includes/galaga.h"


/*************************************
 *
 *  Bosconian
 *
 *  Discrete sound emulation: Feb 2007, D.R.
 *
 *************************************/

/* nodes - sounds */
#define BOSCO_CHANL1_SND        NODE_11
#define BOSCO_CHANL2_SND        NODE_12
#define BOSCO_CHANL3_SND        NODE_13
#define BOSCO_CHANL4_SND        NODE_14

#define BOSCO_54XX_DAC_R (1.0 / (1.0 / RES_K(47) + 1.0 / RES_K(22) + 1.0 / RES_K(10) + 1.0 / RES_K(4.7)))
static const discrete_dac_r1_ladder bosco_54xx_dac =
{
	4,              /* number of DAC bits */
					/* 54XX_0   54XX_1  54XX_2 */
	{ RES_K(47),    /* R28,     R32,    R46 */
		RES_K(22),  /* R27,     R31,    R45 */
		RES_K(10),  /* R26,     R30,    R44 */
		RES_K(4.7)},    /* R25,     R29,    R43 */
	0, 0, 0, 0      /* nothing extra */
};

#define BOSCO_52XX_DAC_R (1.0 / (1.0 / RES_K(100) + 1.0 / RES_K(47) + 1.0 / RES_K(22) + 1.0 / RES_K(10)))
static const discrete_dac_r1_ladder bosco_52xx_dac =
{
	4,              /* number of DAC bits */
	{ RES_K(100),   /* R14 */
		RES_K(47),  /* R13 */
		RES_K(22),  /* R12 */
		RES_K(10)}, /* R11 */
	0, 0, 0, 0      /* nothing extra */
};

/*                         R39           R38          R39 */
#define BOSCO_VREF (5.0 * (RES_K(2.2) / (RES_K(3.3) + RES_K(2.2))))

static const discrete_op_amp_filt_info bosco_chanl1_filt =
{
	BOSCO_54XX_DAC_R + RES_K(100),  /* R24 */
	0,                  /* no second input */
	RES_K(22),          /* R23 */
	0,                  /* not used */
	RES_K(220),         /* R22 */
	CAP_U(0.001),       /* C31 */
	CAP_U(0.001),       /* C30 */
	0,                  /* not used */
	BOSCO_VREF,         /* vRef */
	5,                  /* vP */
	0                   /* vN */
};

static const discrete_op_amp_filt_info bosco_chanl2_filt =
{
	BOSCO_54XX_DAC_R + RES_K(47),   /* R33 */
	0,                  /* no second input */
	RES_K(10),          /* R34 */
	0,                  /* not used */
	RES_K(150),         /* R35 */
	CAP_U(0.01),        /* C29 */
	CAP_U(0.01),        /* C28 */
	0,                  /* not used */
	BOSCO_VREF,         /* vRef */
	5,                  /* vP */
	0                   /* vN */
};

static const discrete_op_amp_filt_info bosco_chanl3_filt =
{
	BOSCO_54XX_DAC_R + RES_K(150),  /* R42 */
	0,                  /* no second input */
	RES_K(22),          /* R41 */
	0,                  /* not used */
	RES_K(470),         /* R40 */
	CAP_U(0.01),        /* C27 */
	CAP_U(0.01),        /* C26 */
	0,                  /* not used */
	BOSCO_VREF,         /* vRef */
	5,                  /* vP */
	0                   /* vN */
};

static const discrete_mixer_desc bosco_filter_mixer =
{
	DISC_MIXER_IS_OP_AMP,
	{ RES_K(33),    /* R21 */
		RES_K(33),  /* R36 */
		RES_K(10)}, /* R37 */
	{0},            /* no rNode{} */
	{0},            /* no c{} */
	0,              /* no rI */
	RES_K(3.3),     /* R20 */
	0,              /* no cF */
	0,              /* no cAmp */
	BOSCO_VREF,     /* vRef */
	1,              /* gain */
};

static const discrete_mixer_desc bosco_final_mixer =
{
	DISC_MIXER_IS_RESISTOR,
	{ RES_K(10),    /* R51 */
		RES_K(10)}, /* R55 */
	{0},            /* no rNode{} */
	{0},            /* no c{} */
	0,              /* no rI */
	RES_K(1),       /* VR1 */
	0,              /* no cF */
	CAP_U(0.1),     /* C18 */
	0,              /* vRef */
	462000          /* gain */
};

DISCRETE_SOUND_START(bosco_discrete)

	/************************************************
	 * Input register mapping
	 ************************************************/
	DISCRETE_INPUT_DATA(NAMCO_54XX_0_DATA(NODE_01))
	DISCRETE_INPUT_DATA(NAMCO_54XX_1_DATA(NODE_01))
	DISCRETE_INPUT_DATA(NAMCO_54XX_2_DATA(NODE_01))
	DISCRETE_INPUT_DATA(NAMCO_52XX_P_DATA(NODE_04))

	/************************************************
	 * CHANL1 sound
	 ************************************************/
	DISCRETE_DAC_R1(NODE_20,
					NAMCO_54XX_2_DATA(NODE_01),
					4,          /* 4V - unmeasured*/
					&bosco_54xx_dac)
	DISCRETE_OP_AMP_FILTER(BOSCO_CHANL1_SND,
					1,          /* ENAB */
					NODE_20,    /* INP0 */
					0,          /* INP1 - not used */
					DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &bosco_chanl1_filt)

	/************************************************
	 * CHANL2 sound
	 ************************************************/
	DISCRETE_DAC_R1(NODE_30,
					NAMCO_54XX_1_DATA(NODE_01),
					4,          /* 4V - unmeasured*/
					&bosco_54xx_dac)
	DISCRETE_OP_AMP_FILTER(BOSCO_CHANL2_SND,
					1,          /* ENAB */
					NODE_30,    /* INP0 */
					0,          /* INP1 - not used */
					DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &bosco_chanl2_filt)

	/************************************************
	 * CHANL3 sound
	 ************************************************/
	DISCRETE_DAC_R1(NODE_40,
					NAMCO_54XX_0_DATA(NODE_01),
					4,          /* 4V - unmeasured*/
					&bosco_54xx_dac)
	DISCRETE_OP_AMP_FILTER(BOSCO_CHANL3_SND,
					1,          /* ENAB */
					NODE_40,    /* INP0 */
					0,          /* INP1 - not used */
					DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &bosco_chanl3_filt)

	/************************************************
	 * CHANL4 sound
	 ************************************************/
	/* this circuit was simulated in SPICE and an equivalent filter circuit generated */
	DISCRETE_DAC_R1(NODE_50,
					NAMCO_52XX_P_DATA(NODE_04),
					4,          /* 4V - unmeasured*/
					&bosco_52xx_dac)
	DISCRETE_FILTER2(NODE_51,
					1,          /* ENAB */
					NODE_50,    /* INP0 */
					80,         /* FREQ */
					1.0 / 0.3,  /* DAMP */
					DISC_FILTER_HIGHPASS)
	DISCRETE_FILTER2(NODE_52,
					1,          /* ENAB */
					NODE_51,    /* INP0 */
					2400,       /* FREQ */
					1.0 / 0.9,  /* DAMP */
					DISC_FILTER_LOWPASS)
	DISCRETE_GAIN(BOSCO_CHANL4_SND,
					NODE_52,    /* IN0 */
					0.25        /* overall filter GAIN */)

	/************************************************
	 * Output
	 ************************************************/
	DISCRETE_MIXER3(NODE_90,
					1,                  /* ENAB */
					BOSCO_CHANL1_SND,   /* IN0 */
					BOSCO_CHANL2_SND,   /* IN1 */
					BOSCO_CHANL3_SND,   /* IN2 */
					&bosco_filter_mixer /* INFO */)
	DISCRETE_MIXER2(NODE_91,
					1,                  /* ENAB */
					NODE_90,            /* IN0 */
					BOSCO_CHANL4_SND,   /* IN1 */
					&bosco_final_mixer  /* INFO */)
	DISCRETE_OUTPUT(NODE_91, 1)
DISCRETE_SOUND_END



/*************************************
 *
 *  Galaga/Xevious
 *
 *  Discrete sound emulation: Feb 2007, D.R.
 *
 *************************************/

/* nodes - sounds */
#define GALAGA_CHANL1_SND       NODE_11
#define GALAGA_CHANL2_SND       NODE_12
#define GALAGA_CHANL3_SND       NODE_13


#define GALAGA_54XX_DAC_R (1.0 / (1.0 / RES_K(47) + 1.0 / RES_K(22) + 1.0 / RES_K(10) + 1.0 / RES_K(4.7)))
static const discrete_dac_r1_ladder galaga_54xx_dac =
{
	4,              /* number of DAC bits */
	{ RES_K(47),
		RES_K(22),
		RES_K(10),
		RES_K(4.7)},
	0, 0, 0, 0      /* nothing extra */
};

#define GALAGA_VREF (5.0 * (RES_K(2.2) / (RES_K(3.3) + RES_K(2.2))))

static const discrete_op_amp_filt_info galaga_chanl1_filt =
{
	GALAGA_54XX_DAC_R + RES_K(100),
	0,                  /* no second input */
	RES_K(22),
	0,                  /* not used */
	RES_K(220),
	CAP_U(0.001),
	CAP_U(0.001),
	0,                  /* not used */
	GALAGA_VREF,        /* vRef */
	5,                  /* vP */
	0,                  /* vN */
};

static const discrete_op_amp_filt_info galaga_chanl2_filt =
{
	GALAGA_54XX_DAC_R + RES_K(47),
	0,                  /* no second input */
	RES_K(10),
	0,                  /* not used */
	RES_K(150),
	CAP_U(0.01),
	CAP_U(0.01),
	0,                  /* not used */
	GALAGA_VREF,        /* vRef */
	5,                  /* vP */
	0,                  /* vN */
};

static const discrete_op_amp_filt_info galaga_chanl3_filt =
{
	GALAGA_54XX_DAC_R + RES_K(150),
	0,                  /* no second input */
	RES_K(22),
	0,                  /* not used */
	RES_K(470),
	CAP_U(0.01),
	CAP_U(0.01),
	0,                  /* not used */
	GALAGA_VREF,        /* vRef */
	5,                  /* vP */
	0,                  /* vN */
};

static const discrete_mixer_desc galaga_final_mixer =
{
	DISC_MIXER_IS_OP_AMP,
	{ RES_K(33),
		RES_K(33),
		RES_K(10)},
	{0},            /* no rNode{} */
	{0},            /* no c{} */
	0,              /* no rI */
	RES_K(3.3),
	0,              /* no cF */
	CAP_U(0.1),
	GALAGA_VREF,    /* vRef */
	40800,          /* gain */
};

DISCRETE_SOUND_START(galaga_discrete)

	/************************************************
	 * Input register mapping
	 ************************************************/
	DISCRETE_INPUT_DATA(NAMCO_54XX_0_DATA(NODE_01))
	DISCRETE_INPUT_DATA(NAMCO_54XX_1_DATA(NODE_01))
	DISCRETE_INPUT_DATA(NAMCO_54XX_2_DATA(NODE_01))

	/************************************************
	 * CHANL1 sound
	 ************************************************/
	DISCRETE_DAC_R1(NODE_20,
					NAMCO_54XX_2_DATA(NODE_01),
					4,          /* 4V - unmeasured*/
					&galaga_54xx_dac)
	DISCRETE_OP_AMP_FILTER(GALAGA_CHANL1_SND,
					1,          /* ENAB */
					NODE_20,    /* INP0 */
					0,          /* INP1 - not used */
					DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &galaga_chanl1_filt)

	/************************************************
	 * CHANL2 sound
	 ************************************************/
	DISCRETE_DAC_R1(NODE_30,
					NAMCO_54XX_1_DATA(NODE_01),
					4,          /* 4V - unmeasured*/
					&galaga_54xx_dac)
	DISCRETE_OP_AMP_FILTER(GALAGA_CHANL2_SND,
					1,          /* ENAB */
					NODE_30,    /* INP0 */
					0,          /* INP1 - not used */
					DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &galaga_chanl2_filt)

	/************************************************
	 * CHANL3 sound
	 ************************************************/
	DISCRETE_DAC_R1(NODE_40,
					NAMCO_54XX_0_DATA(NODE_01),
					4,          /* 4V - unmeasured*/
					&galaga_54xx_dac)
	DISCRETE_OP_AMP_FILTER(GALAGA_CHANL3_SND,
					1,          /* ENAB */
					NODE_40,    /* INP0 */
					0,          /* INP1 - not used */
					DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &galaga_chanl3_filt)

	/************************************************
	 * Output
	 ************************************************/
	DISCRETE_MIXER3(NODE_90,
					1,                  /* ENAB */
					GALAGA_CHANL1_SND,  /* IN0 */
					GALAGA_CHANL2_SND,  /* IN1 */
					GALAGA_CHANL3_SND,  /* IN2 */
					&galaga_final_mixer /* INFO */)
	DISCRETE_OUTPUT(NODE_90, 1)
DISCRETE_SOUND_END