summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/emu/sound/disc_mth.c37
-rw-r--r--src/emu/sound/discrete.h13
-rw-r--r--src/mame/audio/8080bw.c10
-rw-r--r--src/mame/audio/mw8080bw.c130
-rw-r--r--src/mame/drivers/mw8080bw.c2
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 )