From 4dbe268df420b60ecbd38ab3b527957d147e86ea Mon Sep 17 00:00:00 2001 From: Couriersud Date: Tue, 27 Jan 2009 22:33:45 +0000 Subject: [PATCH] Use energy values as input for XOR. This seems to better reflect the superimposition of the two signals. On the long term, both LS629 and the XOR need to be converted into a custom module to properly model mixing if the two frequencies are close to each other. Adjust C41 to 60% for skid sound. --- src/mame/audio/mario.c | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/mame/audio/mario.c b/src/mame/audio/mario.c index 94e0d5d86e4..78a4950f89e 100644 --- a/src/mame/audio/mario.c +++ b/src/mame/audio/mario.c @@ -88,8 +88,10 @@ #define MR_R6 RES_K(4.7) /* verified */ #define MR_R7 RES_K(4.7) /* verified */ -#define MR_R17 RES_K(27) /* verified, 30K in schematics */ -#define MR_R18 RES_K(27) /* verified, 30K in schematics */ +#define MR_R17 RES_K(27) /* 20 according to parts list */ + /* 27 verified, 30K in schematics */ +#define MR_R18 RES_K(27) /* 20 according to parts list */ + /* 27 verified, 30K in schematics */ #define MR_R19 RES_K(22) /* verified */ #define MR_R20 RES_K(22) /* verified */ #define MR_R40 RES_K(22) /* verified */ @@ -110,7 +112,9 @@ #define MR_C32 CAP_U(1) /* illegible on pcb */ #define MR_C39 CAP_N(4.7) /* not found */ #define MR_C40 CAP_N(22) /* verified */ -#define MR_C41 CAP_U(4.7) /* verified, hard to read */ +//#define MR_C41 CAP_U(4.7) /* verified, hard to read */ +/* The 60% adjustment is needed to bring this close to recordings */ +#define MR_C41 (CAP_U(4.7) * 0.6) #define MR_C43 CAP_U(3.3) /* verified */ #define MR_C44 CAP_U(3.3) /* verified */ @@ -124,7 +128,8 @@ DISCRETE_ONESHOTR(_N, 0, _T, TTL_HIGH, (0.25 * (_R) * (_C) * (1.0+700./(_R))), DISC_ONESHOT_RETRIG | DISC_ONESHOT_REDGE | DISC_OUT_ACTIVE_LOW) #define DISCRETE_BITSET(_N, _N1, _B) DISCRETE_TRANSFORM3(_N, _N1, (1 << ((_B)-1)), 0, "01&2>") -#define DISCRETE_ENERGY_NAND(_N, _E, _N1, _N2) DISCRETE_TRANSFORM3(_N, _N1, _N2, 1, "201*-") +#define DISCRETE_ENERGY_AND(_N, _E, _N1, _N2) DISCRETE_TRANSFORM2(_N, _N1, _N2, "01*") +#define DISCRETE_ENERGY_XOR(_N, _E, _N1, _N2) DISCRETE_TRANSFORM2(_N, _N1, _N2, "10-a") static const discrete_mixer_desc mario_mixer_desc = @@ -163,12 +168,18 @@ static DISCRETE_SOUND_START(mario) DISCRETE_LS123(NODE_10, DS_SOUND0_INV, MR_R17, MR_C14) DISCRETE_RCFILTER(NODE_11, 1, NODE_10, MR_R6, MR_C3) - DISCRETE_74LS624( NODE_12, 1, NODE_11, VSS, MR_C6, DISC_LS624_OUT_LOGIC) - DISCRETE_74LS624( NODE_13, 1, NODE_11, VSS, MR_C17, DISC_LS624_OUT_LOGIC) + //DISCRETE_74LS624( NODE_12, 1, NODE_11, VSS, MR_C6, DISC_LS624_OUT_LOGIC) + //DISCRETE_74LS624( NODE_13, 1, NODE_11, VSS, MR_C17, DISC_LS624_OUT_LOGIC) + DISCRETE_74LS624( NODE_12, 1, NODE_11, VSS, MR_C6, DISC_LS624_OUT_ENERGY) + DISCRETE_74LS624( NODE_13, 1, NODE_11, VSS, MR_C17, DISC_LS624_OUT_ENERGY) DISCRETE_LOGIC_XOR(NODE_14, 1, NODE_12, NODE_13) DISCRETE_LOGIC_AND(NODE_15, 1, NODE_14, NODE_10) DISCRETE_MULTIPLY(DS_OUT_SOUND0, 1, NODE_15, TTL_HIGH) + /* This should be more appropriate, but filters out low frequencies */ + //DISCRETE_ENERGY_XOR(NODE_14, 1, NODE_12, NODE_13) + //DISCRETE_ENERGY_AND(NODE_15, 1, NODE_14, NODE_10) + //DISCRETE_MULTIPLY(DS_OUT_SOUND0, 1, NODE_15, 1) /************************************************/ /* SOUND1 */ @@ -176,12 +187,18 @@ static DISCRETE_SOUND_START(mario) DISCRETE_LS123(NODE_20, DS_SOUND1_INV, MR_R18, MR_C15) DISCRETE_RCFILTER(NODE_21, 1, NODE_20, MR_R7, MR_C4) - DISCRETE_74LS624( NODE_22, 1, NODE_21, VSS, MR_C5, DISC_LS624_OUT_LOGIC) - DISCRETE_74LS624( NODE_23, 1, NODE_21, VSS, MR_C16, DISC_LS624_OUT_LOGIC) + //DISCRETE_74LS624( NODE_22, 1, NODE_21, VSS, MR_C5, DISC_LS624_OUT_LOGIC) + //DISCRETE_74LS624( NODE_23, 1, NODE_21, VSS, MR_C16, DISC_LS624_OUT_LOGIC) + DISCRETE_74LS624( NODE_22, 1, NODE_21, VSS, MR_C5, DISC_LS624_OUT_ENERGY) + DISCRETE_74LS624( NODE_23, 1, NODE_21, VSS, MR_C16, DISC_LS624_OUT_ENERGY) DISCRETE_LOGIC_XOR(NODE_24, 1, NODE_22, NODE_23) DISCRETE_LOGIC_AND(NODE_25, 1, NODE_24, NODE_20) DISCRETE_MULTIPLY(DS_OUT_SOUND1, 1, NODE_25, TTL_HIGH) + /* This should be more appropriate, but filters out high frequencies */ + //DISCRETE_ENERGY_XOR(NODE_24, 1, NODE_22, NODE_23) + //DISCRETE_ENERGY_AND(NODE_25, 1, NODE_24, NODE_20) + //DISCRETE_MULTIPLY(DS_OUT_SOUND1, 1, NODE_25, 1) /************************************************/ /* SOUND7 */ @@ -197,7 +214,8 @@ static DISCRETE_SOUND_START(mario) DISCRETE_RCFILTER(NODE_112, 1, NODE_111, MR_R65, MR_C44) DISCRETE_74LS624(NODE_113, 1, NODE_112, VSS, MR_C40, DISC_LS624_OUT_LOGIC) - DISCRETE_LOGIC_XOR(NODE_115, 1, NODE_102, NODE_113) + //DISCRETE_LOGIC_XOR(NODE_115, 1, NODE_102, NODE_113) + DISCRETE_ENERGY_XOR(NODE_115, 1, NODE_102, NODE_113) DISCRETE_TRANSFORM2(NODE_116, NODE_104, TTL_HIGH, "0!1*") DISCRETE_RCFILTER(NODE_117, 1, NODE_116, MR_R64, MR_C43) @@ -205,6 +223,8 @@ static DISCRETE_SOUND_START(mario) DISCRETE_LOGIC_AND(NODE_120, 1, NODE_115, NODE_110) DISCRETE_MULTIPLY(DS_OUT_SOUND7, 1, NODE_120, TTL_HIGH) + //DISCRETE_ENERGY_AND(NODE_120, 1, NODE_115, NODE_110) + //DISCRETE_MULTIPLY(DS_OUT_SOUND7, 1, NODE_120, 1) /************************************************/ /* DAC */ @@ -228,7 +248,7 @@ static DISCRETE_SOUND_START(mario) */ // EZV20 equivalent filter circuit ... DISCRETE_CRFILTER(NODE_296,1,NODE_295, RES_K(1), CAP_U(4.7)) - DISCRETE_OUTPUT(NODE_296, 32767.0/5.0 * 2) + DISCRETE_OUTPUT(NODE_296, 32767.0/5.0 * 3) //DISCRETE_WAVELOG2(NODE_296, 32767/5.0 * 2, DS_SOUND0_INV, 10000) //DISCRETE_WAVELOG2(NODE_296, 32767/5.0 * 2, DS_SOUND7_INV, 10000)