From 9ca9d3041953e5b7f93cf59ffc01dac8f3adf9a0 Mon Sep 17 00:00:00 2001 From: Derrick Renaud Date: Fri, 2 Oct 2009 02:10:43 +0000 Subject: [PATCH] Sprint 8 - complete discrete sound --- src/emu/sound/disc_mth.c | 29 +++----- src/emu/sound/discrete.h | 26 ++++---- src/mame/audio/galaxian.c | 2 +- src/mame/audio/madalien.c | 4 +- src/mame/audio/mw8080bw.c | 18 ++--- src/mame/audio/polepos.c | 4 +- src/mame/audio/skyraid.c | 4 +- src/mame/audio/snk6502.c | 2 +- src/mame/audio/sprint8.c | 131 ++++++++++++++++++++++++------------- src/mame/audio/tank8.c | 2 +- src/mame/drivers/sprint8.c | 16 +++-- 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 -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" }, 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 )