mirror of
https://github.com/holub/mame
synced 2025-05-19 20:29:09 +03:00
Sprint 8 - complete discrete sound
This commit is contained in:
parent
27bbf65bd1
commit
9ca9d30419
@ -272,31 +272,20 @@ 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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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" },
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -974,18 +974,16 @@ static DISCRETE_SOUND_START(checkmat)
|
||||
DISCRETE_FILTER2(NODE_23,
|
||||
1, /* ENAB */
|
||||
NODE_21, /* INP0 */
|
||||
35, /* FREQ */
|
||||
35, /* FREQ */
|
||||
1.0 / 8, /* DAMP */
|
||||
DISC_FILTER_BANDPASS)
|
||||
DISCRETE_GAIN(NODE_24,
|
||||
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 */ \
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@ -151,9 +167,9 @@ DISCRETE_OP_AMP_FILTER(NODE_RELATIVE(SPRINT8_MOTOR1_SND, _car - 1), 1, NODE_RELA
|
||||
|
||||
DISCRETE_SOUND_START( sprint8 )
|
||||
/************************************************
|
||||
* Input register mapping
|
||||
************************************************/
|
||||
DISCRETE_INPUT_NOT (SPRINT8_CRASH_EN)
|
||||
* Input register mapping
|
||||
************************************************/
|
||||
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,85 +180,110 @@ 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
|
||||
************************************************/
|
||||
* 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
|
||||
************************************************/
|
||||
* Car Motor
|
||||
************************************************/
|
||||
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
|
||||
|
||||
|
||||
|
@ -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. */
|
||||
|
@ -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 )
|
||||
|
Loading…
Reference in New Issue
Block a user