Sprint 8 - complete discrete sound

This commit is contained in:
Derrick Renaud 2009-10-02 02:10:43 +00:00
parent 27bbf65bd1
commit 9ca9d30419
11 changed files with 131 additions and 107 deletions

View File

@ -272,32 +272,21 @@ static DISCRETE_RESET(dst_comp_adder)
*
* DST_CLAMP - Simple signal clamping circuit
*
* input[0] - Enable ramp
* input[1] - Input value
* input[2] - Minimum value
* input[3] - Maximum value
* input[4] - Clamp output when disabled
* input[0] - Input value
* input[1] - Minimum value
* input[2] - Maximum value
*
************************************************************************/
#define DST_CLAMP__ENABLE DISCRETE_INPUT(0)
#define DST_CLAMP__IN DISCRETE_INPUT(1)
#define DST_CLAMP__MIN DISCRETE_INPUT(2)
#define DST_CLAMP__MAX DISCRETE_INPUT(3)
#define DST_CLAMP__CLAMP DISCRETE_INPUT(4)
#define DST_CLAMP__IN DISCRETE_INPUT(0)
#define DST_CLAMP__MIN DISCRETE_INPUT(1)
#define DST_CLAMP__MAX DISCRETE_INPUT(2)
static DISCRETE_STEP(dst_clamp)
{
if(DST_CLAMP__ENABLE)
{
if (DST_CLAMP__IN < DST_CLAMP__MIN) node->output[0] = DST_CLAMP__MIN;
else if (DST_CLAMP__IN > DST_CLAMP__MAX) node->output[0] = DST_CLAMP__MAX;
else node->output[0]= DST_CLAMP__IN;
}
else
{
node->output[0] = DST_CLAMP__CLAMP;
}
}
/************************************************************************

View File

@ -1193,34 +1193,30 @@
*
* .------------.
* | |
* ENAB -0------>| |
* INP0 -0------>| |
* | |
* INP0 -1------>| |
* MIN -1------>| CLAMP |----> Netlist node
* | |
* MIN -2------>| CLAMP |----> Netlist node
* | |
* MAX -3------>| |
* | |
* CLAMP -4------>| |
* MAX -2------>| |
* | |
* '------------'
*
* Declaration syntax
*
* DISCRETE_CLAMP(name of node,
* enable,
* input node,
* minimum node or static value,
* maximum node or static value,
* clamp node or static value when disabled)
* maximum node or static value),
*
* Example config line
*
* DISCRETE_CLAMP(NODE_9,NODE_10,NODE_11,2.0,10.0,5.0)
* DISCRETE_CLAMP(NODE_9,NODE_10,2.0,10.0)
*
* Node10 when not zero will allow clamp to operate forcing the value
* on the node output, to be within the MIN/MAX boundard. When enable
* is set to zero the node will output the clamp value
* Force the value on the node output, to be within the MIN/MAX
* boundary. In this example the output is clamped to the range
* of 2.0 to 10.0 inclusive.
*
* EXAMPLES: Sprint 8
*
***********************************************************************
*
@ -4319,7 +4315,7 @@ enum
#define DISCRETE_ADDER2(NODE,ENAB,INP0,INP1) { NODE, DST_ADDER , 3, { ENAB,INP0,INP1 }, { ENAB,INP0,INP1 }, NULL, "DISCRETE_ADDER2" },
#define DISCRETE_ADDER3(NODE,ENAB,INP0,INP1,INP2) { NODE, DST_ADDER , 4, { ENAB,INP0,INP1,INP2 }, { ENAB,INP0,INP1,INP2 }, NULL, "DISCRETE_ADDER3" },
#define DISCRETE_ADDER4(NODE,ENAB,INP0,INP1,INP2,INP3) { NODE, DST_ADDER , 5, { ENAB,INP0,INP1,INP2,INP3 }, { ENAB,INP0,INP1,INP2,INP3 }, NULL, "DISCRETE_ADDER4" },
#define DISCRETE_CLAMP(NODE,ENAB,INP0,MIN,MAX,CLAMP) { NODE, DST_CLAMP , 5, { ENAB,INP0,MIN,MAX,CLAMP }, { ENAB,INP0,MIN,MAX,CLAMP }, NULL, "DISCRETE_CLAMP" },
#define DISCRETE_CLAMP(NODE,INP0,MIN,MAX) { NODE, DST_CLAMP , 3, { INP0,MIN,MAX }, { INP0,MIN,MAX }, NULL, "DISCRETE_CLAMP" },
#define DISCRETE_DIVIDE(NODE,ENAB,INP0,INP1) { NODE, DST_DIVIDE , 3, { ENAB,INP0,INP1 }, { ENAB,INP0,INP1 }, NULL, "DISCRETE_DIVIDE" },
#define DISCRETE_GAIN(NODE,INP0,GAIN) { NODE, DST_GAIN , 3, { INP0,NODE_NC,NODE_NC }, { INP0,GAIN,0 }, NULL, "DISCRETE_GAIN" },
#define DISCRETE_INVERT(NODE,INP0) { NODE, DST_GAIN , 3, { INP0,NODE_NC,NODE_NC }, { INP0,-1,0 }, NULL, "DISCRETE_INVERT" },

View File

@ -280,7 +280,7 @@ static DISCRETE_SOUND_START(galaxian)
// Next is mult/add opamp circuit
DISCRETE_MULTADD(NODE_110, NODE_105, GAL_R33/RES_3_PARALLEL(GAL_R31,GAL_R32,GAL_R33),
-5.0*GAL_R33/GAL_R31)
DISCRETE_CLAMP(NODE_111,1,NODE_110,0.0,5.0,0.0)
DISCRETE_CLAMP(NODE_111,NODE_110,0.0,5.0)
// The three 555
DISCRETE_555_ASTABLE_CV(NODE_115, GAL_INP_FS1, GAL_R22, GAL_R23, GAL_C17, NODE_111, &galaxian_555_vco_desc)
DISCRETE_555_ASTABLE_CV(NODE_116, GAL_INP_FS2, GAL_R25, GAL_R26, GAL_C18, NODE_111, &galaxian_555_vco_desc)

View File

@ -187,7 +187,7 @@ DISCRETE_SOUND_START( madalien )
DISCRETE_TRANSFORM3(NODE_32, MADALIEN_8910_PSG_A, NODE_30, -RES_K(10)/RES_K(3.3), "01-2*1+")
// pin 1
DISCRETE_SWITCH(NODE_33, 1, MADALIEN_8910_PORTA_3, NODE_31, NODE_32)
DISCRETE_CLAMP(NODE_34, 1, NODE_33, -5, 5.0-1.5, 0)
DISCRETE_CLAMP(NODE_34, NODE_33, -5, 5.0-1.5)
// bottom op-amp
DISCRETE_ONOFF(NODE_40, MADALIEN_8910_PORTA_6, MADALIEN_8910_PSG_B)
@ -230,7 +230,7 @@ DISCRETE_SOUND_START( madalien )
************************************************/
DISCRETE_CRFILTER(NODE_60, 1, MADALIEN_8910_PORTB_7, RES_K(100), CAP_U(4.7))
// 2 diodes clamp it positive.
DISCRETE_CLAMP(NODE_62, 1, NODE_60, 0, 12, 0)
DISCRETE_CLAMP(NODE_62, NODE_60, 0, 12)
// the 0.047uF cap to ground just removes real world spikes.
// it does not have to be simulated.
DISCRETE_MIXER2(NODE_64, 1, NODE_62, 5, &madalien_555_1c_cv)

View File

@ -981,11 +981,9 @@ static DISCRETE_SOUND_START(checkmat)
NODE_23, /* IN0 */
15) /* GAIN */
DISCRETE_CLAMP(CHECKMAT_BOOM_SND, /* IC Q2/3, pin 10 */
1, /* ENAB */
NODE_24, /* IN0 */
0 - 6, /* MIN */
12.0 - OP_AMP_NORTON_VBE -6,/* MAX */
0) /* CLAMP */
12.0 - OP_AMP_NORTON_VBE -6)/* MAX */
/************************************************
* Tone generator
@ -2572,11 +2570,9 @@ static DISCRETE_SOUND_START(spcenctr)
NODE_31, /* IN0 */
-0.5) /* IN1 */
DISCRETE_CLAMP(NODE_33,
1, /* ENAB */
NODE_32, /* IN0 */
0, /* MIN */
12, /* MAX */
0) /* CLAMP */
12) /* MAX */
DISCRETE_CRFILTER(NODE_34,
1, /* ENAB */
SPCENCTR_NOISE, /* IN0 */
@ -2640,11 +2636,9 @@ static DISCRETE_SOUND_START(spcenctr)
NODE_63, /* IN0 */
6.8) /* IN1 */
DISCRETE_CLAMP(SPCENCTR_CRASH_SND, /* IC C2, pin 5 */
1, /* ENAB */
NODE_64, /* IN0 */
0, /* MIN */
12.0 - OP_AMP_NORTON_VBE, /* MAX */
0) /* CLAMP */
12.0 - OP_AMP_NORTON_VBE) /* MAX */
/************************************************
@ -3599,11 +3593,9 @@ static const discrete_mixer_desc invaders_mixer =
INVADERS_NODE(71, _board), /* IN0 */ \
-0.5) /* IN1 */ \
DISCRETE_CLAMP(INVADERS_NODE(73, _board), \
1, /* ENAB */ \
INVADERS_NODE(72, _board), /* IN0 */ \
0, /* MIN */ \
12, /* MAX */ \
0) /* CLAMP */ \
12) /* MAX */ \
DISCRETE_CRFILTER(INVADERS_NODE(74, _board), \
1, /* ENAB */ \
INVADERS_NOISE, /* IN0 */ \

View File

@ -336,11 +336,9 @@ DISCRETE_SOUND_START(polepos)
0.5 /* overall filter GAIN */)
/* clamp to the maximum of the op-amp shifted by vRef */
DISCRETE_CLAMP(POLEPOS_CHANL4_SND,
1, /* ENAB */
NODE_54, /* IN0 */
0, /* MIN */
5.0 - OP_AMP_VP_RAIL_OFFSET - POLEPOS_VREF, /* MAX */
0.0 - POLEPOS_VREF /* disabled CLAMP value */)
5.0 - OP_AMP_VP_RAIL_OFFSET - POLEPOS_VREF) /* MAX */
/************************************************
* Output

View File

@ -335,7 +335,7 @@ DISCRETE_SOUND_START( skyraid )
DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &skyraid_explosion_filter) /* TYPE,INFO */
/* IC E10, pin 14 gain and clipping */
DISCRETE_GAIN(NODE_23, NODE_22, SKYRAID_R119 / SKYRAID_R121 + 1)
DISCRETE_CLAMP(SKYRAID_EXPLOSION_SND, 1, NODE_23, -5, 12.0 - 1.5, 0)
DISCRETE_CLAMP(SKYRAID_EXPLOSION_SND, NODE_23, -5, 12.0 - 1.5)
/************************************************
* Jet, Plane sound
@ -397,7 +397,7 @@ DISCRETE_SOUND_START( skyraid )
SKYRAID_C93)
/* IC E10, pin 1 gain and clipping */
DISCRETE_GAIN(NODE_94, NODE_93, - SKYRAID_R118 / (SKYRAID_R122 + RES_5_PARALLEL(SKYRAID_R120, SKYRAID_R32, SKYRAID_R29, SKYRAID_R30, SKYRAID_R31)))
DISCRETE_CLAMP(NODE_95, 1, NODE_94, -5, 12.0 - 1.5, 0)
DISCRETE_CLAMP(NODE_95, NODE_94, -5, 12.0 - 1.5)
DISCRETE_OUTPUT(NODE_95, 32700.0/8)
DISCRETE_SOUND_END

View File

@ -361,7 +361,7 @@ DISCRETE_SOUND_START( fantasy )
/* This is not the perfect way to discharge, but it is good enough for now */
/* it does not take into acount that there is no discharge when noise is low */
DISCRETE_RCDISC2(NODE_10, FANTASY_BOMB_EN, 0, RES_K(10) + RES_K(33), DEFAULT_TTL_V_LOGIC_1 - 0.5, RES_K(1), CAP_U(1))
DISCRETE_CLAMP(FANTASY_NOISE_LOGIC, 1, FANTASY_NOISE_STREAM_IN, 0, 1, 0)
DISCRETE_CLAMP(FANTASY_NOISE_LOGIC, FANTASY_NOISE_STREAM_IN, 0, 1)
DISCRETE_SWITCH(NODE_11, 1, FANTASY_NOISE_LOGIC, 0, NODE_10)
DISCRETE_OP_AMP_FILTER(NODE_20, 1, NODE_11, 0, DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &fantasy_filter)

View File

@ -36,6 +36,9 @@
#define SPRINT8_AUDIO_5_6 NODE_24
#define SPRINT8_AUDIO_4_8 NODE_25
/* Adjusters */
#define SPRINT8_R132_POT NODE_29
/* Parts List - Resistors */
#define SPRINT8_R1 RES_K(47)
@ -56,12 +59,16 @@
#define SPRINT8_R97 RES_K(2.2)
#define SPRINT8_R99 RES_K(27)
#define SPRINT8_R100 RES_K(1)
#define SPRINT8_R101 RES_K(2.2)
#define SPRINT8_R132 RES_K(100)
#define SPRINT8_R145 RES_K(3.3)
#define SPRINT8_R146 RES_K(7.5)
#define SPRINT8_R147 100
#define SPRINT8_R148 RES_K(1)
#define SPRINT8_R149 RES_K(22)
/* Parts List - Capacitors */
#define SPRINT8_C8 CAP_U(.01)
#define SPRINT8_C17 CAP_U(.001)
#define SPRINT8_C18 CAP_U(.047)
#define SPRINT8_C19 CAP_U(.047)
@ -69,6 +76,7 @@
#define SPRINT8_C27 CAP_U(.22)
#define SPRINT8_C28 CAP_U(.1)
#define SPRINT8_C59 CAP_U(.1)
#define SPRINT8_C63 CAP_U(.1)
#define SPRINT8_C64 CAP_U(.1)
#define SPRINT8_C89 CAP_U(.1)
#define SPRINT8_C90 CAP_U(.1)
@ -85,11 +93,11 @@ static const discrete_lfsr_desc sprint8_lfsr =
0, /* Reset Value */
10, /* Use Bit 10 as XOR input 0 */
15, /* Use Bit 15 as XOR input 1 */
DISC_LFSR_XOR, /* Feedback stage1 is XOR */
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 */
DISC_LFSR_FLAG_RESET_TYPE_H, /* Output is not inverted */
DISC_LFSR_FLAG_RESET_TYPE_L, /* Output is not inverted */
12 /* Output bit */
};
@ -126,11 +134,19 @@ static const discrete_op_amp_filt_info sprint8_motor_filter =
5.0 * RES_VOLTAGE_DIVIDER(SPRINT8_R19, SPRINT8_R20), 5, 0 /* vRef, vP, vN */
};
static const discrete_mixer_desc sprint8_crash_screech_mixer =
{
DISC_MIXER_IS_RESISTOR,
{SPRINT8_R149, SPRINT8_R91},
{0, NODE_80}, /* R93 switched in/out of circuit */
{0}, 0, 0, SPRINT8_C64, 0, 0, 1 /* c, rI, rF, cF, cAmp, vRef, gain */
};
static const discrete_mixer_desc sprint8_mixer =
{
DISC_MIXER_IS_RESISTOR,
{SPRINT8_R1 + SPRINT8_R100, SPRINT8_R3, SPRINT8_R4},
{0}, {0}, 0, 0, 0, 0, 0, 1 /* no r_nodes, c, rI, rF, cF, cAmp, vRef, gain */
{0}, {0}, 0, 0, 0, SPRINT8_C8, 0, 1 /* r_nodes, c, rI, rF, cF, cAmp, vRef, gain */
};
@ -153,7 +169,7 @@ DISCRETE_SOUND_START( sprint8 )
/************************************************
* Input register mapping
************************************************/
DISCRETE_INPUT_NOT (SPRINT8_CRASH_EN)
DISCRETE_INPUT_LOGIC(SPRINT8_CRASH_EN)
DISCRETE_INPUT_NOT (SPRINT8_SCREECH_EN)
DISCRETE_INPUT_NOT (SPRINT8_ATTRACT_EN)
DISCRETE_INPUTX_LOGIC(SPRINT8_MOTOR1_EN, DEFAULT_TTL_V_LOGIC_1, 0, 0)
@ -164,30 +180,55 @@ DISCRETE_SOUND_START( sprint8 )
DISCRETE_INPUTX_LOGIC(SPRINT8_MOTOR6_EN, DEFAULT_TTL_V_LOGIC_1, 0, 0)
DISCRETE_INPUTX_LOGIC(SPRINT8_MOTOR7_EN, DEFAULT_TTL_V_LOGIC_1, 0, 0)
DISCRETE_INPUTX_LOGIC(SPRINT8_MOTOR8_EN, DEFAULT_TTL_V_LOGIC_1, 0, 0)
DISCRETE_ADJUSTMENT_TAG(SPRINT8_R132_POT, 0, SPRINT8_R132, DISC_LINADJ, "R132")
/************************************************
* Noise Generator, Crash, Screech
************************************************/
/* Address line A2 is used to XOR the feedback bits.
* This can not easily be implemented, so I just set the
* feedback as XNOR. */
DISCRETE_LFSR_NOISE(SPRINT8_NOISE, /* IC F7, pin 13 */
1, /* ENAB */
SPRINT8_ATTRACT_EN, /* RESET */
SPRINT8_2V, 1, 0, 0.5, &sprint8_lfsr) /* CLK,AMPL,FEED,BIAS,LFSRTB */
DISCRETE_CONSTANT(NODE_70, 0)
// DISCRETE_CUSTOM4(NODE_70, SPRINT8_NOISE, SPRINT8_R148, SPRINT8_R147, SPRINT8_C90, &sprint8_custom_screech_charge)
DISCRETE_555_ASTABLE_CV(NODE_71,
DISCRETE_GAIN(NODE_70, SPRINT8_NOISE, DEFAULT_TTL_V_LOGIC_1 * RES_VOLTAGE_DIVIDER(SPRINT8_R148, SPRINT8_R147))
DISCRETE_CRFILTER_VREF(NODE_71,
1, /* ENAB */
NODE_70, /* IN0 */
RES_2_PARALLEL(SPRINT8_R148, SPRINT8_R147) + RES_2_PARALLEL(RES_K(5), RES_K(10)),
SPRINT8_C90,
5.0 * RES_VOLTAGE_DIVIDER(RES_K(5), RES_K(10))) /* ref to 555 CV pin */
DISCRETE_555_ASTABLE_CV(NODE_72,
SPRINT8_SCREECH_EN, /* RESET */
SPRINT8_R145, SPRINT8_R146, SPRINT8_C89,
NODE_70, /* CTRLV */
NODE_71, /* CTRLV */
&sprint8_crash_555a_desc)
DISCRETE_INTEGRATE(NODE_72, SPRINT8_CRASH_EN, 0, &sprint8_crash_integrate)
DISCRETE_RCDISC2(NODE_73,
SPRINT8_NOISE, /* SWITCH - inverted by Q20 */
NODE_72, SPRINT8_R93 + SPRINT8_R91, /* INP0,RVAL0 */
0, SPRINT8_R91, /* INP1,RVAL1 */
SPRINT8_C64) /* CVAL */
DISCRETE_INTEGRATE(NODE_73, SPRINT8_CRASH_EN, 0, &sprint8_crash_integrate)
DISCRETE_CONSTANT(SPRINT8_CRASH_SCREECH_SND, 0)
DISCRETE_SWITCH(NODE_80,
1, /* ENAB */
SPRINT8_NOISE, /* SWITCH */
SPRINT8_R93, 1) /* INP0,INP1*/
DISCRETE_SWITCH(NODE_74, /* effect of Q20 */
1, /* ENAB */
SPRINT8_NOISE, /* SWITCH */
NODE_73, 0) /* INP0,INP1*/
DISCRETE_MIXER2(NODE_75,
1, /* ENAB */
NODE_72,
NODE_74,
&sprint8_crash_screech_mixer)
DISCRETE_CRFILTER_VREF(NODE_76,
1, /* ENAB */
NODE_75, /* IN0 */
SPRINT8_R93 + SPRINT8_R91, SPRINT8_C63,
5) /* VREF */
/* IC E5, pin 14 gain. Does not simulate minor DC offset caused by R93. */
DISCRETE_TRANSFORM5(NODE_77, NODE_76, 5, SPRINT8_R132_POT, SPRINT8_R101, 1, "01-23/4+*1+")
DISCRETE_CLAMP(SPRINT8_CRASH_SCREECH_SND, NODE_77, 0, 15.0 - 1.5)
/************************************************
* Car Motor
@ -195,54 +236,54 @@ DISCRETE_SOUND_START( sprint8 )
DISCRETE_TASK_START()
SPRINT8_MOTOR_CIRCUIT(1)
SPRINT8_MOTOR_CIRCUIT(2)
DISCRETE_TASK_END()
DISCRETE_TASK_START()
SPRINT8_MOTOR_CIRCUIT(3)
SPRINT8_MOTOR_CIRCUIT(7)
DISCRETE_TASK_END()
DISCRETE_TASK_START()
SPRINT8_MOTOR_CIRCUIT(5)
SPRINT8_MOTOR_CIRCUIT(6)
DISCRETE_TASK_END()
DISCRETE_TASK_START()
SPRINT8_MOTOR_CIRCUIT(4)
SPRINT8_MOTOR_CIRCUIT(8)
DISCRETE_TASK_END()
/************************************************
* Final Mix
************************************************/
DISCRETE_MIXER3(SPRINT8_AUDIO_1_2,
SPRINT8_ATTRACT_EN, /* ENAB */
SPRINT8_CRASH_SCREECH_SND,
SPRINT8_MOTOR1_SND,
SPRINT8_MOTOR2_SND,
&sprint8_mixer)
DISCRETE_TASK_END()
DISCRETE_TASK_START()
SPRINT8_MOTOR_CIRCUIT(3)
SPRINT8_MOTOR_CIRCUIT(7)
DISCRETE_MIXER3(SPRINT8_AUDIO_3_7,
SPRINT8_ATTRACT_EN, /* ENAB */
SPRINT8_CRASH_SCREECH_SND,
SPRINT8_MOTOR3_SND,
SPRINT8_MOTOR7_SND,
&sprint8_mixer)
DISCRETE_TASK_END()
DISCRETE_TASK_START()
SPRINT8_MOTOR_CIRCUIT(5)
SPRINT8_MOTOR_CIRCUIT(6)
DISCRETE_MIXER3(SPRINT8_AUDIO_5_6,
SPRINT8_ATTRACT_EN, /* ENAB */
SPRINT8_CRASH_SCREECH_SND,
SPRINT8_MOTOR5_SND,
SPRINT8_MOTOR6_SND,
&sprint8_mixer)
DISCRETE_TASK_END()
DISCRETE_TASK_START()
SPRINT8_MOTOR_CIRCUIT(4)
SPRINT8_MOTOR_CIRCUIT(8)
DISCRETE_MIXER3(SPRINT8_AUDIO_4_8,
SPRINT8_ATTRACT_EN, /* ENAB */
SPRINT8_CRASH_SCREECH_SND,
SPRINT8_MOTOR4_SND,
SPRINT8_MOTOR8_SND,
&sprint8_mixer)
DISCRETE_TASK_END()
/************************************************
* Final Mix
************************************************/
DISCRETE_OUTPUT(SPRINT8_AUDIO_1_2, 32700.0/8)
DISCRETE_OUTPUT(SPRINT8_AUDIO_3_7, 32700.0/8)
DISCRETE_OUTPUT(SPRINT8_AUDIO_5_6, 32700.0/8)
DISCRETE_OUTPUT(SPRINT8_AUDIO_4_8, 32700.0/8)
DISCRETE_OUTPUT(SPRINT8_AUDIO_1_2, 65500.0/8)
DISCRETE_OUTPUT(SPRINT8_AUDIO_3_7, 65500.0/8)
DISCRETE_OUTPUT(SPRINT8_AUDIO_5_6, 65500.0/8)
DISCRETE_OUTPUT(SPRINT8_AUDIO_4_8, 65500.0/8)
DISCRETE_SOUND_END

View File

@ -252,7 +252,7 @@ DISCRETE_SOUND_START(tank8)
1.0 + 100.0/22, // max gain of E5 = 1 + r132/r101
DISC_LINADJ, "CRASH")
DISCRETE_MULTIPLY(NODE_129, NODE_127, NODE_128 )
DISCRETE_CLAMP(TANK8_CRASHEXPL, 1, NODE_129, -(12.0 - OP_AMP_VP_RAIL_OFFSET)/2, (12.0 - OP_AMP_VP_RAIL_OFFSET)/2, 0)
DISCRETE_CLAMP(TANK8_CRASHEXPL, NODE_129, -(12.0 - OP_AMP_VP_RAIL_OFFSET)/2, (12.0 - OP_AMP_VP_RAIL_OFFSET)/2)
/************************************************/
/* Combine all 10 sound sources. */

View File

@ -261,6 +261,10 @@ static INPUT_PORTS_START( sprint8 )
PORT_START("VBLANK")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
/* this is actually a variable resistor */
PORT_START("R132")
PORT_ADJUSTER(65, "R132 - Crash & Screech Volume")
INPUT_PORTS_END
@ -385,6 +389,10 @@ static INPUT_PORTS_START( sprint8p )
PORT_START("VBLANK")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
/* this is actually a variable resistor */
PORT_START("R132")
PORT_ADJUSTER(65, "R132 - Crash & Screech Volume")
INPUT_PORTS_END
@ -476,8 +484,8 @@ static MACHINE_DRIVER_START( sprint8 )
* F/R/L/R speakers. Though you can pretend the 1-2 mix is the front.
* For now I just output 1-2 as mono. */
MDRV_SPEAKER_ADD("speaker_1_2", 0.0, 0.0, 1.0) /* front */
MDRV_SPEAKER_ADD("speaker_3_7", 0.0, 0.0, -0.5) /* back */
MDRV_SPEAKER_ADD("speaker_5_6", -0.2, 0.0, 1.0) /* left */
MDRV_SPEAKER_ADD("speaker_5_6", 0.0, 0.0, -0.5) /* back */
MDRV_SPEAKER_ADD("speaker_3_7", -0.2, 0.0, 1.0) /* left */
MDRV_SPEAKER_ADD("speaker_4_8", 0.2, 0.0, 1.0) /* right */
MDRV_SOUND_ADD("discrete", DISCRETE, 0)
@ -529,5 +537,5 @@ ROM_START( sprint8a )
ROM_END
GAME( 1977, sprint8, 0, sprint8, sprint8, 0, ROT0, "Atari", "Sprint 8", GAME_IMPERFECT_SOUND )
GAME( 1977, sprint8a, sprint8, sprint8, sprint8p, 0, ROT0, "Atari", "Sprint 8 (play tag & chase)", GAME_IMPERFECT_SOUND )
GAME( 1977, sprint8, 0, sprint8, sprint8, 0, ROT0, "Atari", "Sprint 8", 0 )
GAME( 1977, sprint8a, sprint8, sprint8, sprint8p, 0, ROT0, "Atari", "Sprint 8 (play tag & chase)", 0 )