diff options
author | Derrick Renaud <derrickr@mamedev.org> | 2009-10-07 03:24:19 +0000 |
---|---|---|
committer | Derrick Renaud <derrickr@mamedev.org> | 2009-10-07 03:24:19 +0000 |
commit | 935e63f8aaaa17845c0a529dfa95b5bb1f97a835 (patch) | |
tree | b8f3f7c6bdfe5fb412c1cdcbdc267624335ed91a | |
parent | 0d1660e579ec25a8ffad89ff9594a010e424e63e (diff) |
More sounds for Shuffleboard
-rw-r--r-- | src/emu/sound/disc_mth.c | 37 | ||||
-rw-r--r-- | src/emu/sound/discrete.h | 13 | ||||
-rw-r--r-- | src/mame/audio/8080bw.c | 10 | ||||
-rw-r--r-- | src/mame/audio/mw8080bw.c | 130 | ||||
-rw-r--r-- | src/mame/drivers/mw8080bw.c | 2 |
5 files changed, 152 insertions, 40 deletions
diff --git a/src/emu/sound/disc_mth.c b/src/emu/sound/disc_mth.c index eb117875c20..eb9a8b58a48 100644 --- a/src/emu/sound/disc_mth.c +++ b/src/emu/sound/disc_mth.c @@ -175,10 +175,14 @@ struct dst_tvca_op_amp_context double exponent_d[2]; /* Discharge exponents based on function F3 */ double exponent2[2]; /* Discharge/charge exponents based on function F4 */ double exponent3[2]; /* Discharge/charge exponents based on function F5 */ + double exponent4; /* Discharge/charge exponents for c4 */ double v_cap1; /* charge on cap c1 */ double v_cap2; /* charge on cap c2 */ double v_cap3; /* charge on cap c3 */ + double v_cap4; /* charge on cap c4 */ double r67; /* = r6 + r7 (for easy use later) */ + UINT8 has_c4; + UINT8 has_r4; }; @@ -2023,12 +2027,32 @@ static DISCRETE_STEP(dst_tvca_op_amp) i_pos += context->v_cap3 / info->r11; } - /* Calculate output current. */ i_out = i_pos - i_neg; if (i_out < 0) i_out = 0; + /* Convert to voltage for final output. */ - node->output[0] = i_out * info->r4; + if (context->has_c4) + { + if (context->has_r4) + { + /* voltage across r4 charging cap */ + i_out *= info->r4; + /* exponential charge */ + context->v_cap4 += (i_out - context->v_cap4) * context->exponent4; + } + else + /* linear charge */ + context->v_cap4 += i_out / context->exponent4; + if (context->v_cap4 < 0) + context->v_cap4 = 0; + node->output[0] = context->v_cap4; + } + else + node->output[0] = i_out * info->r4; + + + /* Clip the output if needed. */ if (node->output[0] > context->v_out_max) node->output[0] = context->v_out_max; } @@ -2063,10 +2087,15 @@ static DISCRETE_RESET(dst_tvca_op_amp) context->v_trig2 = (info->v2 - 0.6 - OP_AMP_NORTON_VBE) * RES_VOLTAGE_DIVIDER(info->r8, info->r9); context->exponent2[0] = RC_CHARGE_EXP(info->r9 * info->c2); context->exponent2[1] = RC_CHARGE_EXP(RES_2_PARALLEL(info->r8, info->r9) * info->c2); - context->v_cap3 = 0; - context->v_trig3 = (info->v3 - 0.6 - OP_AMP_NORTON_VBE) * RES_VOLTAGE_DIVIDER(info->r10, info->r11); + context->v_cap3 = 0; + context->v_trig3 = (info->v3 - 0.6 - OP_AMP_NORTON_VBE) * RES_VOLTAGE_DIVIDER(info->r10, info->r11); context->exponent3[0] = RC_CHARGE_EXP(info->r11 * info->c3); context->exponent3[1] = RC_CHARGE_EXP(RES_2_PARALLEL(info->r10, info->r11) * info->c3); + context->v_cap4 = 0; + if (info->r4 != 0) context->has_r4 = 1; + if (info->c4 != 0) context->has_c4 = 1; + if (context->has_r4 && context->has_c4) + context->exponent4 = RC_CHARGE_EXP(info->r4 * info->c4); DISCRETE_STEP_CALL(dst_tvca_op_amp); } diff --git a/src/emu/sound/discrete.h b/src/emu/sound/discrete.h index cd863c74f9c..2abc171fe83 100644 --- a/src/emu/sound/discrete.h +++ b/src/emu/sound/discrete.h @@ -2115,7 +2115,7 @@ * input 1 node or static value, * address of discrete_op_amp_tvca_info structure) * - * discrete_op_amp_tvca_info = { r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, c1, c2, c3, v1, v2, v3, vP, f0, f1, f2, f3, f4, f5} + * discrete_op_amp_tvca_info = { r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, c1, c2, c3, c4, v1, v2, v3, vP, f0, f1, f2, f3, f4, f5} * * Note: Set all unused components to 0. * Set all unused functions to DISC_OP_AMP_TRIGGER_FUNCTION_NONE @@ -2125,11 +2125,11 @@ * vP is the op-amp B+. * * r2a - * IN0 >----ZZZZ-----. r1 - * .----. | vP >------ZZZZ---. - * | F0 |----+ | - * '----' | r2b | r4 - * r3a '---------------ZZZZ---+---ZZZZ--. + * IN0 >----ZZZZ-----. r1 c4 + * .----. | vP >------ZZZZ---+---||----. + * | F0 |----+ | | + * '----' | r2b | r4 | + * r3a '---------------ZZZZ---+---ZZZZ--+ * IN1 >----ZZZZ---. | | * .----. | r3b | |\ | * | F1 |--+-----------------ZZZZ---+ | \ | @@ -3984,6 +3984,7 @@ struct _discrete_op_amp_tvca_info double c1; double c2; double c3; + double c4; double v1; double v2; double v3; diff --git a/src/mame/audio/8080bw.c b/src/mame/audio/8080bw.c index b1d379e8565..5c582321836 100644 --- a/src/mame/audio/8080bw.c +++ b/src/mame/audio/8080bw.c @@ -347,7 +347,7 @@ static const discrete_op_amp_osc_info polaris_sonar_vco_info = {DISC_OP_AMP_OSCILLATOR_VCO_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP, RES_M(1), RES_K(680), RES_K(680), RES_M(1), RES_M(1), RES_K(120), RES_M(1), 0, CAP_P(180), 12}; static const discrete_op_amp_tvca_info polaris_sonar_tvca_info = - { RES_M(2.7), RES_K(680), 0, RES_K(680), RES_K(1), RES_K(120), RES_K(560), 0, 0, 0, 0, CAP_U(1), 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_TRG1, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0_INV, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; + { RES_M(2.7), RES_K(680), 0, RES_K(680), RES_K(1), RES_K(120), RES_K(560), 0, 0, 0, 0, CAP_U(1), 0, 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_TRG1, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0_INV, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; static const discrete_op_amp_osc_info polaris_boat_mod_info = {DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP, RES_M(1), RES_K(10), RES_K(100), RES_K(120), RES_M(1), 0, 0, 0, CAP_U(.22), 12}; @@ -356,17 +356,17 @@ static const discrete_op_amp_osc_info polaris_boat_vco_info = {DISC_OP_AMP_OSCILLATOR_VCO_1 | DISC_OP_AMP_IS_NORTON | DISC_OP_AMP_OSCILLATOR_OUT_CAP, RES_M(1), RES_K(680), RES_K(680), RES_M(1), RES_M(1), 0, 0, 0, CAP_P(180), 12}; static const discrete_op_amp_tvca_info polaris_shot_tvca_info = - { RES_M(2.7), RES_K(680), RES_K(680), RES_K(680), RES_K(1), 0, RES_K(680), 0, 0, 0, 0, CAP_U(1), 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0_INV, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; + { RES_M(2.7), RES_K(680), RES_K(680), RES_K(680), RES_K(1), 0, RES_K(680), 0, 0, 0, 0, CAP_U(1), 0, 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0_INV, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; static const discrete_op_amp_tvca_info polaris_shiphit_tvca_info = - { RES_M(2.7), RES_K(680), RES_K(680), RES_K(680), RES_K(1), 0, RES_K(680), 0, 0, 0, 0, CAP_U(1), 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0_INV, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; + { RES_M(2.7), RES_K(680), RES_K(680), RES_K(680), RES_K(1), 0, RES_K(680), 0, 0, 0, 0, CAP_U(1), 0, 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0_INV, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; static const discrete_op_amp_tvca_info polaris_exp_tvca_info = - { RES_M(2.7), RES_K(680), 0, RES_K(680), RES_K(1), 0, RES_K(680), 0, 0, 0, 0, CAP_U(.33), 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; + { RES_M(2.7), RES_K(680), 0, RES_K(680), RES_K(1), 0, RES_K(680), 0, 0, 0, 0, CAP_U(.33), 0, 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; // The schematic shows a .22uF cap but Guru's board has a 1uF static const discrete_op_amp_tvca_info polaris_hit_tvca_info = - { RES_M(2.7), RES_K(1360), RES_K(1360), RES_K(680), RES_K(1), 0, RES_K(680), 0, 0, 0, 0, CAP_U(1), 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG1, DISC_OP_AMP_TRIGGER_FUNCTION_TRG01_NAND, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; + { RES_M(2.7), RES_K(1360), RES_K(1360), RES_K(680), RES_K(1), 0, RES_K(680), 0, 0, 0, 0, CAP_U(1), 0, 0, 0, 12, 12, 12, 12, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG1, DISC_OP_AMP_TRIGGER_FUNCTION_TRG01_NAND, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE}; // The schematic shows a 1uF cap but Guru's board has a 2.2uF static const discrete_integrate_info polaris_plane_integrate_info = diff --git a/src/mame/audio/mw8080bw.c b/src/mame/audio/mw8080bw.c index fa58da92ef5..2167d1672ef 100644 --- a/src/mame/audio/mw8080bw.c +++ b/src/mame/audio/mw8080bw.c @@ -80,7 +80,7 @@ static const discrete_op_amp_tvca_info midway_music_tvca_info = 0, CAP_U(.001), /* c500 */ 0, - 0, + 0, 0, 12, /* v1 */ 0, /* v2 */ 0, /* v3 */ @@ -650,7 +650,7 @@ static const discrete_op_amp_tvca_info boothill_tone_tvca_info = 0, CAP_U(.001), 0, - 0, + 0, 0, 12, 0, 0, @@ -679,7 +679,7 @@ static const discrete_op_amp_tvca_info boothill_shot_tvca_info = 0, CAP_U(0.22), 0, - 0, + 0, 0, 12, 0, 0, @@ -705,7 +705,7 @@ static const discrete_op_amp_tvca_info boothill_hit_tvca_info = 0, 0, 0, - 0, + 0, 0, CAP_U(1), 0, 0, @@ -930,7 +930,7 @@ static const discrete_op_amp_tvca_info checkmat_op_amp_tvca = 0, /* r11 - not used */ CAP_U(1), /* C300 */ 0, /* c2 - not used */ - 0, /* c3 - not used */ + 0, 0, /* c3, c4 - not used */ 5, /* v1 */ 0, /* v2 */ 0, /* v3 */ @@ -1126,7 +1126,7 @@ static const discrete_op_amp_tvca_info desertgu_rifle_shot_tvca_info = 0, CAP_U(0.47), 0, - 0, + 0, 0, 12, /* v1 */ 0, /* v2 */ 0, /* v3 */ @@ -1795,6 +1795,7 @@ static const discrete_op_amp_tvca_info clowns_pop_tvca_info = CAP_U(.015), /* c300 */ CAP_U(.1), /* c301 */ CAP_U(.082), /* c302 */ + 0, /* no c4 */ 5, /* v1 */ 5, /* v2 */ 5, /* v3 */ @@ -1836,7 +1837,7 @@ static const discrete_op_amp_tvca_info clowns_sb_hit_tvca_info = 0,0,0,0, CAP_U(1), /* c201 */ 0, - 0, + 0, 0, 5, /* v1 */ 0, /* v2 */ 0, /* v3 */ @@ -2092,7 +2093,7 @@ static const discrete_op_amp_tvca_info spacwalk_hit_tvca_info = SPACWALK_RJ3, 0, SPACWALK_R300, /* r5, r6, r7 */ SPACWALK_RJ3, SPACWALK_R301, /* r8, r9 */ SPACWALK_RJ3, SPACWALK_R302, /* r10, r11 */ - SPACWALK_C300, SPACWALK_C301, SPACWALK_C302, /* c1, c2, c3 */ + SPACWALK_C300, SPACWALK_C301, SPACWALK_C302, 0, /* c1, c2, c3, c4 */ 5, 5, 5, 12, /* v1, v2, v3, vP */ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, @@ -2115,7 +2116,7 @@ static const discrete_op_amp_tvca_info spacwalk_sb_hit_tvca_info = SPACWALK_R207, SPACWALK_R205, 0, SPACWALK_R208, /* r1, r2, r3, r4 */ SPACWALK_RJ3, 0, SPACWALK_R206, /* r5, r6, r7 */ 0, 0, 0, 0 , /* r8, r9, r10, r11 */ - SPACWALK_C201, 0, 0, /* c1, c2, c3 */ + SPACWALK_C201, 0, 0, 0, /* c1, c2, c3, c4 */ 5, 0, 0, 12, /* v1, v2, v3, vP */ DISC_OP_AMP_TRIGGER_FUNCTION_NONE, DISC_OP_AMP_TRIGGER_FUNCTION_NONE, @@ -2383,32 +2384,89 @@ WRITE8_DEVICE_HANDLER( spacwalk_audio_2_w ) #define SHUFFLE_R401 RES_K(3) #define SHUFFLE_R402 RES_K(5.6) #define SHUFFLE_R403 RES_K(5.6) +#define SHUFFLE_R404 RES_M(1) #define SHUFFLE_R406 RES_K(300) +#define SHUFFLE_R407 RES_K(680) #define SHUFFLE_R408 RES_K(680) +#define SHUFFLE_R409 RES_K(680) +#define SHUFFLE_R410 RES_K(680) #define SHUFFLE_R411 RES_K(680) #define SHUFFLE_R412 RES_M(2.7) #define SHUFFLE_R500 RES_K(300) +#define SHUFFLE_R503 RES_M(2.7) +#define SHUFFLE_R504 RES_K(680) +#define SHUFFLE_R505 RES_K(680) +#define SHUFFLE_R506 RES_K(100) +#define SHUFFLE_R507 RES_K(47) +#define SHUFFLE_R508 RES_K(47) +#define SHUFFLE_R509 RES_K(100) +#define SHUFFLE_R511 RES_M(2) +#define SHUFFLE_R512 RES_M(5.6) +#define SHUFFLE_R513 RES_K(680) +#define SHUFFLE_R514 RES_M(1.5) +#define SHUFFLE_R515 RES_M(1) +#define SHUFFLE_R516 RES_K(510) /* Parts List - Capacitors */ #define SHUFFLE_C300 CAP_U(0.1) #define SHUFFLE_C400 CAP_U(0.1) #define SHUFFLE_C401 CAP_U(1) +#define SHUFFLE_C402 CAP_U(1) +#define SHUFFLE_C403 CAP_U(1) #define SHUFFLE_C404 CAP_U(0.1) +#define SHUFFLE_C405 CAP_U(0.1) #define SHUFFLE_C500 CAP_U(0.1) +#define SHUFFLE_C503 CAP_U(0.0022) +#define SHUFFLE_C504 CAP_U(0.0022) +#define SHUFFLE_C505 CAP_U(0.33) +#define SHUFFLE_C506 CAP_U(1) +#define SHUFFLE_C507 CAP_U(1) +#define SHUFFLE_C508 CAP_U(1) #define SHUFFLE_HSYNC 15750 /* unmeasured */ #define SHUFFLE_1V SHUFFLE_HSYNC / 2 #define SHUFFLE_32V SHUFFLE_1V / 32 +static const discrete_op_amp_tvca_info shuffle_rolling_tvca = +{ + SHUFFLE_R512, 0, 0, SHUFFLE_R511, /* r1, r2, r3, r4 */ + RES_K(10), 0, SHUFFLE_R516, /* r5, r6, r7 */ + RES_K(10), SHUFFLE_R515, /* r8, r9 */ + RES_K(10), SHUFFLE_R514, /* r10, r11 */ + SHUFFLE_C508, SHUFFLE_C507, SHUFFLE_C506, SHUFFLE_C505, /* c1, c2, c3, c4 */ + 12, 12, 12, 12, /* v1, v2, v3, vP */ + 0, 0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, /* f0, f1, f2, f3 */ + DISC_OP_AMP_TRIGGER_FUNCTION_TRG1, /* f4 */ + DISC_OP_AMP_TRIGGER_FUNCTION_TRG2 /* f5 */ +}; + +static const discrete_op_amp_info shuffle_rolling_amp = +{ + DISC_OP_AMP_IS_NORTON, + SHUFFLE_R513, SHUFFLE_R505, SHUFFLE_R503, SHUFFLE_R504, /* r1, r2, r3, r4 */ + 0, /* c */ + 0, 12, /* vN, vP */ +}; + static const discrete_op_amp_tvca_info shuffle_foul_tvca = { SHUFFLE_R412, SHUFFLE_R411, 0, SHUFFLE_R408, /* r1, r2, r3, r4 */ RES_K(1), 0, SHUFFLE_R406, /* r5, r6, r7 */ 0, 0, 0, 0, /* r8, r9, r10, r11 */ - SHUFFLE_C404, 0, 0, /* c1, c2, c3 */ + SHUFFLE_C404, 0, 0, 0, /* c1, c2, c3, c4 */ 5, 0, 0, 12, /* v1, v2, v3, vP */ - DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, 0, 0, 0, 0 /* f0, f1, f2, f3, f4, f5 */ + 0, 0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, 0, 0 /* f0, f1, f2, f3, f4, f5 */ +}; + +static const discrete_op_amp_tvca_info shuffle_rollover_tvca = +{ + SHUFFLE_R404, SHUFFLE_R410, 0, SHUFFLE_R407, /* r1, r2, r3, r4 */ + RES_K(10), 0, SHUFFLE_R409, /* r5, r6, r7 */ + 0, 0, 0, 0, /* r8, r9, r10, r11 */ + SHUFFLE_C405, 0, 0, 0, /* c1, c2, c3, c4 */ + 12, 0, 0, 12, /* v1, v2, v3, vP */ + 0, 0, DISC_OP_AMP_TRIGGER_FUNCTION_TRG0, 0, 0, 0 /* f0, f1, f2, f3, f4, f5 */ }; static const discrete_mixer_desc shuffle_mixer = @@ -2420,13 +2478,14 @@ static const discrete_mixer_desc shuffle_mixer = 0, 0, 0, 0, 0 ,1 /* rI, rF, cF, cAmp, vRef, gain */ }; + static DISCRETE_SOUND_START(shuffle) DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLING_1_EN) DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLING_2_EN) DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLING_3_EN) DISCRETE_INPUT_LOGIC(SHUFFLE_FOUL_EN) DISCRETE_INPUT_LOGIC(SHUFFLE_ROLLOVER_EN) - DISCRETE_INPUT_LOGIC(SHUFFLE_CLICK_EN) + DISCRETE_INPUTX_LOGIC(SHUFFLE_CLICK_EN, 11.5, 0, 0) /* Noise clock was breadboarded and measured at 1210Hz */ DISCRETE_LFSR_NOISE(SHUFFLE_NOISE, /* IC N5, pin 10 */ @@ -2436,7 +2495,17 @@ static DISCRETE_SOUND_START(shuffle) /************************************************ * Shuffle rolling ************************************************/ - DISCRETE_CONSTANT(SHUFFLE_ROLLING_SND, 0) + DISCRETE_OP_AMP_TRIG_VCA(NODE_20, /* IC P3-4, pin 5 */ + SHUFFLE_ROLLING_1_EN, SHUFFLE_ROLLING_2_EN, SHUFFLE_ROLLING_3_EN, /* TRG0,TRG1,TRG2 */ + 0, 0, /*IN0,IN1 */ + &shuffle_rolling_tvca) + DISCRETE_OP_AMP(NODE_21, /* IC P3-4, pin 4 */ + 1, /* ENAB */ + SHUFFLE_NOISE, NODE_20, /* IN0,IN1 */ + &shuffle_rolling_amp) + /* filter not accurate */ + DISCRETE_FILTER1(NODE_22, 1, NODE_21, 800, DISC_FILTER_LOWPASS) + DISCRETE_GAIN(SHUFFLE_ROLLING_SND, NODE_22, .2) /************************************************ * Foul @@ -2451,12 +2520,23 @@ static DISCRETE_SOUND_START(shuffle) /************************************************ * Shuffle rollover ************************************************/ - DISCRETE_CONSTANT(SHUFFLE_ROLLOVER_SND, 0) + DISCRETE_OP_AMP_TRIG_VCA(NODE_40, /* IC M3-4, pin 4 */ + SHUFFLE_ROLLOVER_EN, 0, 0, /* TRG0,TRG1,TRG2 */ + SHUFFLE_NOISE, 0, /*IN0,IN1 */ + &shuffle_rollover_tvca) + DISCRETE_RCFILTER(NODE_41, + NODE_40, /* IN0 */ + SHUFFLE_R403, SHUFFLE_C403) + DISCRETE_RCFILTER(SHUFFLE_ROLLOVER_SND, + NODE_41, /* IN0 */ + SHUFFLE_R403 + SHUFFLE_R402, SHUFFLE_C402) /************************************************ * Click ************************************************/ - DISCRETE_CONSTANT(SHUFFLE_CLICK_SND, 0) + /* filter not accurate */ + DISCRETE_FILTER1(NODE_50, 1, SHUFFLE_CLICK_EN, 300, DISC_FILTER_LOWPASS) + DISCRETE_GAIN(SHUFFLE_CLICK_SND, NODE_50, .3) /************************************************ * Combine all sound sources. @@ -2468,7 +2548,7 @@ static DISCRETE_SOUND_START(shuffle) SHUFFLE_ROLLOVER_SND, SHUFFLE_CLICK_SND, &shuffle_mixer) - DISCRETE_OUTPUT(NODE_90, 11000) + DISCRETE_OUTPUT(NODE_90, 59200) DISCRETE_SOUND_END @@ -2489,9 +2569,11 @@ WRITE8_DEVICE_HANDLER( shuffle_audio_1_w ) sound_global_enable(device->machine, (data >> 2) & 0x01); - discrete_sound_w(device, SHUFFLE_ROLLING_1_EN, (data >> 3) & 0x01); + discrete_sound_w(device, NODE_29, (data >> 3) & 0x07); + + discrete_sound_w(device, SHUFFLE_ROLLING_3_EN, (data >> 3) & 0x01); discrete_sound_w(device, SHUFFLE_ROLLING_2_EN, (data >> 4) & 0x01); - discrete_sound_w(device, SHUFFLE_ROLLING_3_EN, (data >> 5) & 0x01); + discrete_sound_w(device, SHUFFLE_ROLLING_1_EN, (data >> 5) & 0x01); /* D6 and D7 are not connected */ } @@ -2748,7 +2830,7 @@ static const discrete_op_amp_tvca_info spcenctr_player_shot_tvca = 0, /* no r11 */ CAP_U(1), /* C506 */ 0, /* no c2 */ - 0, /* no c3 */ + 0, 0, /* no c3, c4 */ 12, /* v1 */ 0, /* no v2 */ 0, /* no v3 */ @@ -2777,7 +2859,7 @@ static const discrete_op_amp_tvca_info spcenctr_crash_tvca = 0, /* no r11 */ CAP_U(2.2), /* C304 */ 0, /* no c2 */ - 0, /* no c3 */ + 0, 0, /* no c3, c4 */ 5, /* v1 */ 0, /* no v2 */ 0, /* no v3 */ @@ -2806,7 +2888,7 @@ static const discrete_op_amp_tvca_info spcenctr_explosion_tvca = 0, /* no r11 */ CAP_U(2.2), /* C400 */ 0, /* no c2 */ - 0, /* no c3 */ + 0, 0, /* no c3, c4 */ 12, /* v1 */ 0, /* no v2 */ 0, /* no v3 */ @@ -3234,7 +3316,7 @@ static const discrete_op_amp_tvca_info bowler_fowl_tvca = 0, /* no r11 */ CAP_U(0.1), /* C1050 */ 0, /* no c2 */ - 0, /* no c3 */ + 0, 0, /* no c3, c4 */ 5, /* v1 */ 0, /* no v2 */ 0, /* no v3 */ @@ -3655,7 +3737,7 @@ static const discrete_op_amp_tvca_info invaders_explosion_tvca = 0, /* no r11 */ CAP_U(1), /* C26 */ 0, /* no c2 */ - 0, /* no c3 */ + 0, 0, /* no c3, c4 */ 12.0 - OP_AMP_NORTON_VBE, /* v1 */ 0, /* no v2 */ 0, /* no v3 */ @@ -3741,7 +3823,7 @@ static const discrete_op_amp_tvca_info invaders_missle_tvca = 0, /* no r11 */ CAP_U(0.1), /* C14 */ 0, /* no c2 */ - 0, /* no c3 */ + 0, 0, /* no c3, c4 */ 5, /* v1 */ 0, /* no v2 */ 0, /* no v3 */ diff --git a/src/mame/drivers/mw8080bw.c b/src/mame/drivers/mw8080bw.c index 1ed8e9b0c6a..96379d15b5c 100644 --- a/src/mame/drivers/mw8080bw.c +++ b/src/mame/drivers/mw8080bw.c @@ -3183,7 +3183,7 @@ ROM_END /* 630 */ GAMEL(1978, clowns1, clowns, clowns, clowns1, 0, ROT0, "Midway", "Clowns (rev. 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE , layout_clowns ) /* 640 */ GAMEL(1978, spacwalk, 0, spacwalk, spacwalk, 0, ROT0, "Midway", "Space Walk", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE, layout_spacwalk ) /* 642 */ GAME( 1978, einning, 0, dplay, einning, 0, ROT0, "Midway", "Extra Inning", GAME_SUPPORTS_SAVE ) -/* 643 */ GAME( 1978, shuffle, 0, shuffle, shuffle, 0, ROT90, "Midway", "Shuffleboard", GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) +/* 643 */ GAME( 1978, shuffle, 0, shuffle, shuffle, 0, ROT90, "Midway", "Shuffleboard", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* 644 */ GAME( 1977, dogpatch, 0, dogpatch, dogpatch, 0, ROT0, "Midway", "Dog Patch", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* 645 */ GAME( 1980, spcenctr, 0, spcenctr, spcenctr, 0, ROT0, "Midway", "Space Encounters", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* 652 */ GAMEL(1979, phantom2, 0, phantom2, phantom2, 0, ROT0, "Midway", "Phantom II", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE , layout_hoa0a0ff ) |