summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Derrick Renaud <derrickr@mamedev.org>2009-10-02 02:10:43 +0000
committer Derrick Renaud <derrickr@mamedev.org>2009-10-02 02:10:43 +0000
commit9ca9d3041953e5b7f93cf59ffc01dac8f3adf9a0 (patch)
tree342f9cc293a30db2a7be85eb0263c5c7cc8078b3
parent27bbf65bd1f6f190eca544acf9d846db2e60ed93 (diff)
Sprint 8 - complete discrete sound
-rw-r--r--src/emu/sound/disc_mth.c29
-rw-r--r--src/emu/sound/discrete.h26
-rw-r--r--src/mame/audio/galaxian.c2
-rw-r--r--src/mame/audio/madalien.c4
-rw-r--r--src/mame/audio/mw8080bw.c18
-rw-r--r--src/mame/audio/polepos.c4
-rw-r--r--src/mame/audio/skyraid.c4
-rw-r--r--src/mame/audio/snk6502.c2
-rw-r--r--src/mame/audio/sprint8.c131
-rw-r--r--src/mame/audio/tank8.c2
-rw-r--r--src/mame/drivers/sprint8.c16
11 files changed, 131 insertions, 107 deletions
diff --git a/src/emu/sound/disc_mth.c b/src/emu/sound/disc_mth.c
index d4269fb44f8..59f3e7bb150 100644
--- a/src/emu/sound/disc_mth.c
+++ b/src/emu/sound/disc_mth.c
@@ -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;
}
diff --git a/src/emu/sound/discrete.h b/src/emu/sound/discrete.h
index bbc17e7c047..4115fa285e3 100644
--- a/src/emu/sound/discrete.h
+++ b/src/emu/sound/discrete.h
@@ -1193,34 +1193,30 @@
*
* .------------.
* | |
- * ENAB -0------>| |
- * | |
- * INP0 -1------>| |
- * | |
- * MIN -2------>| CLAMP |----> Netlist node
+ * INP0 -0------>| |
* | |
- * MAX -3------>| |
+ * MIN -1------>| CLAMP |----> Netlist node
* | |
- * 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)
+ *
+ * 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.
*
- * 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
+ * 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" },
diff --git a/src/mame/audio/galaxian.c b/src/mame/audio/galaxian.c
index cf61f957f6d..7c8d231ee2a 100644
--- a/src/mame/audio/galaxian.c
+++ b/src/mame/audio/galaxian.c
@@ -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)
diff --git a/src/mame/audio/madalien.c b/src/mame/audio/madalien.c
index e3200624e1b..f1dfa83e9ef 100644
--- a/src/mame/audio/madalien.c
+++ b/src/mame/audio/madalien.c
@@ -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)
diff --git a/src/mame/audio/mw8080bw.c b/src/mame/audio/mw8080bw.c
index 8245d5f2324..7c31e0e8c36 100644
--- a/src/mame/audio/mw8080bw.c
+++ b/src/mame/audio/mw8080bw.c
@@ -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 */ \
diff --git a/src/mame/audio/polepos.c b/src/mame/audio/polepos.c
index b221e10b660..b82ceb0cb15 100644
--- a/src/mame/audio/polepos.c
+++ b/src/mame/audio/polepos.c
@@ -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
diff --git a/src/mame/audio/skyraid.c b/src/mame/audio/skyraid.c
index f9143de7ffd..f15d60495e5 100644
--- a/src/mame/audio/skyraid.c
+++ b/src/mame/audio/skyraid.c
@@ -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
diff --git a/src/mame/audio/snk6502.c b/src/mame/audio/snk6502.c
index 27f53b20645..0344e4def49 100644
--- a/src/mame/audio/snk6502.c
+++ b/src/mame/audio/snk6502.c
@@ -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)
diff --git a/src/mame/audio/sprint8.c b/src/mame/audio/sprint8.c
index c24f433aabc..9b7adaaa117 100644
--- a/src/mame/audio/sprint8.c
+++ b/src/mame/audio/sprint8.c
@@ -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
diff --git a/src/mame/audio/tank8.c b/src/mame/audio/tank8.c
index 528f445a525..4e9e4e2025d 100644
--- a/src/mame/audio/tank8.c
+++ b/src/mame/audio/tank8.c
@@ -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. */
diff --git a/src/mame/drivers/sprint8.c b/src/mame/drivers/sprint8.c
index 5b166db8ce1..e393859fae8 100644
--- a/src/mame/drivers/sprint8.c
+++ b/src/mame/drivers/sprint8.c
@@ -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 )