diff options
author | Couriersud <couriersud@users.noreply.github.com> | 2008-08-22 21:29:11 +0000 |
---|---|---|
committer | Couriersud <couriersud@users.noreply.github.com> | 2008-08-22 21:29:11 +0000 |
commit | e972cc16449eeae578f86650a5ab679c35300b22 (patch) | |
tree | 14dde2da235ef285039577eefdabc8623c5d6aef | |
parent | d8d031e8d3b9f023d0180279b944b0dfecaeb2eb (diff) |
dkong & friends: Use new latch device
* adds new latch device where appropriate
* increased accuracy since now all main/sound cpu communications are properly latched
* removed quite some code as a consequence
* minor cosmetic edits
-rw-r--r-- | src/mame/audio/dkong.c | 446 | ||||
-rw-r--r-- | src/mame/drivers/dkong.c | 122 | ||||
-rw-r--r-- | src/mame/includes/dkong.h | 23 | ||||
-rw-r--r-- | src/mame/video/dkong.c | 103 |
4 files changed, 275 insertions, 419 deletions
diff --git a/src/mame/audio/dkong.c b/src/mame/audio/dkong.c index 8a64e25dbec..01478ef6bec 100644 --- a/src/mame/audio/dkong.c +++ b/src/mame/audio/dkong.c @@ -2,9 +2,8 @@ #include "cpu/i8039/i8039.h" #include "cpu/m6502/m6502.h" #include "sound/nes_apu.h" -#include "sound/samples.h" #include "sound/discrete.h" -#include "sound/dac.h" +#include "machine/latch8.h" #include "sound/tms5110.h" #include "sound/5110intf.h" @@ -28,24 +27,9 @@ * sound is completely overmodulated. */ -// FIXME: Review at a later time +/* FIXME: Review at a later time */ #define DK_REVIEW (1) -#define ACTIVELOW_PORT_BIT(P,A,D) (((P) & (~(1 << (A)))) | (((D) ^ 1) << (A))) - -/* Needed for dkongjr ... FIXME */ -//#define I8035_T_R(N) ((portT >> (N)) & 1) -#define I8035_T_R(M,N) ((soundlatch2_r(machine,0) >> (N)) & 1) -#define I8035_T_W_AL(M,N,D) do { state->portT = ACTIVELOW_PORT_BIT(state->portT,N,D); soundlatch2_w(machine, 0, state->portT); } while (0) - -#define I8035_P1_R(M) (soundlatch3_r(M,0)) -#define I8035_P2_R(M) (soundlatch4_r(M,0)) -#define I8035_P1_W(M,D) soundlatch3_w(M,0,D) -#define I8035_P2_W(M,D) soundlatch4_w(M,0,D) - -#define I8035_P1_W_AL(M,B,D) I8035_P1_W(M,ACTIVELOW_PORT_BIT(I8035_P1_R(M),B,(D))) -#define I8035_P2_W_AL(M,B,D) I8035_P2_W(M,ACTIVELOW_PORT_BIT(I8035_P2_R(M),B,(D))) - /**************************************************************** * @@ -62,7 +46,7 @@ #define DS_SOUND7_INV NODE_05 #define DS_SOUND9_INV NODE_06 #define DS_DAC NODE_07 -#define DS_DAC_DISCHARGE NODE_08 +#define DS_DISCHARGE_INV NODE_08 #define DS_SOUND0 NODE_208 #define DS_SOUND1 NODE_209 @@ -205,7 +189,7 @@ static const discrete_mixer_desc dkong_rc_jump_desc = DISC_MIXER_IS_RESISTOR, {1, DK_R49+DK_R51,NE555_INTERNAL_R,2*NE555_INTERNAL_R}, {NODE_26,0,0,0}, - {0,0,0,0}, // no node capacitors + {0,0,0,0}, /* no node capacitors */ 0, 0, DK_C24, 0, @@ -217,7 +201,7 @@ static const discrete_mixer_desc dkong_rc_walk_desc = DISC_MIXER_IS_RESISTOR, {1, DK_R45+DK_R44,NE555_INTERNAL_R,2*NE555_INTERNAL_R}, {NODE_52,0,0,0}, - {0,0,0,0}, // no node capacitors + {0,0,0,0}, /* no node capacitors */ 0, 0, DK_C29, 0, @@ -228,8 +212,8 @@ static const discrete_mixer_desc dkong_mixer_desc = { DISC_MIXER_IS_RESISTOR, {DK_R2, DK_R24, DK_R1, DK_R14}, - {0,0,0}, // no variable resistors - {0,0,0}, // no node capacitors + {0,0,0}, /* no variable resistors */ + {0,0,0}, /* no node capacitors */ #if DK_REVIEW 0, RES_K(10), #else @@ -275,13 +259,13 @@ static DISCRETE_SOUND_START(dkong2b) /* Input register mapping for dkong */ /************************************************/ - // DISCRETE_INPUT_DATA + /* DISCRETE_INPUT_DATA */ DISCRETE_INPUT_NOT(DS_SOUND2_INV) DISCRETE_INPUT_NOT(DS_SOUND1_INV) DISCRETE_INPUT_NOT(DS_SOUND0_INV) - DISCRETE_INPUT_LOGIC(DS_DAC_DISCHARGE) + DISCRETE_INPUT_NOT(DS_DISCHARGE_INV) DISCRETE_INPUT_DATA(DS_DAC) - // Mixing - DAC + /* Mixing - DAC */ DISCRETE_ADJUSTMENT_TAG(DS_ADJ_DAC, 0, 1, DISC_LINADJ, "VR2") /************************************************/ @@ -297,7 +281,7 @@ static DISCRETE_SOUND_START(dkong2b) /************************************************/ /* Noise */ DISCRETE_LFSR_NOISE(NODE_11, 1, 1, CLOCK_2VF, 1.0, 0, 0.5, &dkong_lfsr) - DISCRETE_COUNTER(NODE_12, 1, 0, NODE_11, 7, DISC_COUNT_UP, 0, DISC_CLK_ON_R_EDGE) // LS161, IC 3J + DISCRETE_COUNTER(NODE_12, 1, 0, NODE_11, 7, DISC_COUNT_UP, 0, DISC_CLK_ON_R_EDGE) /* LS161, IC 3J */ DISCRETE_TRANSFORM3(NODE_13,1,NODE_12,3,DK_SUP_V,"01>2*") /* Stomp */ @@ -307,8 +291,8 @@ static DISCRETE_SOUND_START(dkong2b) DISCRETE_TRANSFORM2(NODE_16, 1, NODE_15, 0.6, "01>") DISCRETE_RCDISC2(NODE_17,NODE_16,DK_SUP_V,DK_R8+DK_R7,0.0,DK_R7,DK_C20) - DISCRETE_DIODE_MIXER2(NODE_18, 1, DK_1N5553_V, NODE_13, NODE_13) // D3 - DISCRETE_DIODE_MIXER2(NODE_20, 1, DK_1N5553_V, NODE_17, NODE_18) // D1, D2 + DISCRETE_DIODE_MIXER2(NODE_18, 1, DK_1N5553_V, NODE_13, NODE_13) /* D3 */ + DISCRETE_DIODE_MIXER2(NODE_20, 1, DK_1N5553_V, NODE_17, NODE_18) /* D1, D2 */ DISCRETE_RCINTEGRATE(NODE_22,1,NODE_20,DK_R5, R_PARALLEL(DK_R4+DK_R3,DK_R6),0,DK_C19,DK_SUP_V,DISC_RC_INTEGRATE_TYPE1) DISCRETE_MULTIPLY(DS_OUT_SOUND0,1,NODE_22,DK_R3/R_SERIE(DK_R3,DK_R4)) @@ -316,7 +300,7 @@ static DISCRETE_SOUND_START(dkong2b) /************************************************/ /* Jump */ /************************************************/ - +/* tt */ DISCRETE_MULTIPLY(NODE_24,1,DS_SOUND1,DK_SUP_V) /* 4049B Inverter Oscillator build from 3 inverters */ DISCRETE_INVERTER_OSC(NODE_25,1,0,DK_R38,DK_R39,DK_C26,0,&dkong_inverter_osc_desc_jump) @@ -361,8 +345,8 @@ static DISCRETE_SOUND_START(dkong2b) /************************************************/ /* Signal decay circuit Q7, R20, C32 */ - DISCRETE_RCDISC(NODE_70, DS_DAC_DISCHARGE, 1, DK_R20, DK_C32) - DISCRETE_TRANSFORM4(NODE_71, 1, DS_DAC, DK_SUP_V/256.0, NODE_70, DS_DAC_DISCHARGE, "01*3!2+*") + DISCRETE_RCDISC(NODE_70, DS_DISCHARGE_INV, 1, DK_R20, DK_C32) + DISCRETE_TRANSFORM4(NODE_71, 1, DS_DAC, DK_SUP_V/256.0, NODE_70, DS_DISCHARGE_INV, "01*3!2+*") /* following the DAC are two opamps. The first is a current-to-voltage changer * for the DAC08 which delivers a variable output current. @@ -387,12 +371,12 @@ static DISCRETE_SOUND_START(dkong2b) DISCRETE_MIXER4(NODE_288, 1, DS_OUT_SOUND0, DS_OUT_SOUND1, DS_OUT_DAC, DS_OUT_SOUND2, &dkong_mixer_desc) - // Amplifier: internal amplifier + /* Amplifier: internal amplifier */ DISCRETE_ADDER2(NODE_289,1,NODE_288,5.0*43.0/(100.0+43.0)) DISCRETE_RCINTEGRATE(NODE_294,1,NODE_289,0,150,1000, CAP_U(33),DK_SUP_V,DISC_RC_INTEGRATE_TYPE3) DISCRETE_CRFILTER(NODE_295,1,NODE_294, RES_K(50), DK_C13) - //DISCRETE_CRFILTER(NODE_295,1,NODE_294, 1000, DK_C13) - // EZV20 equivalent filter circuit ... + /*DISCRETE_CRFILTER(NODE_295,1,NODE_294, 1000, DK_C13) */ + /* EZV20 equivalent filter circuit ... */ DISCRETE_CRFILTER(NODE_296,1,NODE_295, RES_K(1), CAP_U(4.7)) #if DK_NO_FILTERS DISCRETE_OUTPUT(NODE_288, 32767.0/5.0 * 10) @@ -418,14 +402,14 @@ DISCRETE_SOUND_END #define RS_R8 RES_K(100) #define RS_R9 RES_K(10) #define RS_R14 RES_K(10) -#define RS_R15 RES_K(5.6) // ???? +#define RS_R15 RES_K(5.6) /* ???? */ #define RS_R16 RES_K(5.6) #define RS_R18 RES_K(4.7) #define RS_R22 RES_K(5.6) #define RS_R23 RES_K(5.6) #define RS_R25 RES_K(10) #define RS_R26 RES_K(5.1) -#define RS_R27 RES_K(2) // 10k in schematics - but will oscillate +#define RS_R27 RES_K(2) /* 10k in schematics - but will oscillate */ #define RS_R28 150 #define RS_R29 RES_K(4.7) #define RS_R30 RES_K(10) @@ -444,7 +428,7 @@ DISCRETE_SOUND_END #define RS_R54 RES_K(1.2) #define RS_R55 RES_K(10) #define RS_R56 RES_K(12) -#define RS_R57 RES_K(4.3) // ??? 43 +#define RS_R57 RES_K(4.3) /* ??? 43 */ #define RS_R58 RES_K(43) #define RS_R59 RES_K(1.2) #define RS_R60 RES_K(10) @@ -483,8 +467,8 @@ DISCRETE_SOUND_END static const discrete_mixer_desc radarscp_mixer_desc = {DISC_MIXER_IS_RESISTOR, {RS_R14, RS_R25, RS_R2, RS_R42, RS_R1}, - {0,0,0,0,0}, // no variable resistors - {0,0,0,0,0}, // no node capacitors + {0,0,0,0,0}, /* no variable resistors */ + {0,0,0,0,0}, /* no node capacitors */ 0, RS_VR2, 0, RS_C2, @@ -494,7 +478,7 @@ static const discrete_mixer_desc radarscp_mixer_desc_0 = {DISC_MIXER_IS_RESISTOR, {RS_R56+RS_R54,NE555_INTERNAL_R,R_PARALLEL(2*NE555_INTERNAL_R,RS_R55) }, {0,0,0}, - {0,0,0,0}, // no node capacitors + {0,0,0,0}, /* no node capacitors */ 0, 0, RS_C51, 0, @@ -503,8 +487,8 @@ static const discrete_mixer_desc radarscp_mixer_desc_0 = static const discrete_mixer_desc radarscp_mixer_desc_7 = {DISC_MIXER_IS_RESISTOR, {RS_R63+RS_R59, NE555_INTERNAL_R,R_PARALLEL(2*NE555_INTERNAL_R,RS_R60)}, - {0,0,0}, // no variable resistors - {0,0,0}, // no node capacitors + {0,0,0}, /* no variable resistors */ + {0,0,0}, /* no node capacitors */ 0, 0, RS_C50, 0, @@ -531,16 +515,16 @@ static DISCRETE_SOUND_START(radarscp) /* Input register mapping for radarscp */ /************************************************/ - // DISCRETE_INPUT_DATA + /* DISCRETE_INPUT_DATA */ DISCRETE_INPUT_NOT(DS_SOUND0_INV) DISCRETE_INPUT_NOT(DS_SOUND1_INV) DISCRETE_INPUT_NOT(DS_SOUND2_INV) DISCRETE_INPUT_NOT(DS_SOUND6_INV) DISCRETE_INPUT_NOT(DS_SOUND7_INV) - DISCRETE_INPUT_LOGIC(DS_DAC_DISCHARGE) + DISCRETE_INPUT_NOT(DS_DISCHARGE_INV) DISCRETE_INPUT_DATA(DS_DAC) - // Mixing - DAC + /* Mixing - DAC */ DISCRETE_ADJUSTMENT_TAG(DS_ADJ_DAC, 0, 1, DISC_LINADJ, "VR2") /************************************************/ @@ -555,10 +539,10 @@ static DISCRETE_SOUND_START(radarscp) /************************************************/ DISCRETE_LFSR_NOISE(NODE_11, 1, 1, CLOCK_2VF, 1.0, 0, 0.5, &dkong_lfsr) - // Clear (1) from SOUND6 - DISCRETE_COUNTER(NODE_12, 1, DS_SOUND6_INV, NODE_11, 15, DISC_COUNT_UP, 0, DISC_CLK_ON_R_EDGE) // LS161, IC 3J - DISCRETE_TRANSFORM3(NODE_13,1,NODE_12,0x04,DK_SUP_V,"01&1=2*") //QC => SND02 - DISCRETE_TRANSFORM3(NODE_14,1,NODE_12,0x02,DK_SUP_V,"01&1=2*") //QB => SND01 + /* Clear (1) from SOUND6 */ + DISCRETE_COUNTER(NODE_12, 1, DS_SOUND6_INV, NODE_11, 15, DISC_COUNT_UP, 0, DISC_CLK_ON_R_EDGE) /* LS161, IC 3J */ + DISCRETE_TRANSFORM3(NODE_13,1,NODE_12,0x04,DK_SUP_V,"01&1=2*") /*QC => SND02 */ + DISCRETE_TRANSFORM3(NODE_14,1,NODE_12,0x02,DK_SUP_V,"01&1=2*") /*QB => SND01 */ /************************************************/ /* SOUND2 */ @@ -567,11 +551,11 @@ static DISCRETE_SOUND_START(radarscp) /* C21 is discharged via Q5 BE */ DISCRETE_RCDISC_MODULATED(NODE_16,1,DS_SOUND2_INV,0,RS_R_NN01,0,0,RS_R9*2,RS_C20,DK_SUP_V) - DISCRETE_TRANSFORM2(NODE_17, 1, NODE_16, 0.6, "01>") // TR2 + DISCRETE_TRANSFORM2(NODE_17, 1, NODE_16, 0.6, "01>") /* TR2 */ DISCRETE_RCDISC2(NODE_18,NODE_17,DK_SUP_V,RS_R8+RS_R7,0.0,RS_R7,RS_C19) - DISCRETE_DIODE_MIXER2(NODE_19, 1, DK_1N5553_V, NODE_13, NODE_13) // D3 - DISCRETE_DIODE_MIXER2(NODE_20, 1, DK_1N5553_V, NODE_18, NODE_19) // D1, D2 + DISCRETE_DIODE_MIXER2(NODE_19, 1, DK_1N5553_V, NODE_13, NODE_13) /* D3 */ + DISCRETE_DIODE_MIXER2(NODE_20, 1, DK_1N5553_V, NODE_18, NODE_19) /* D1, D2 */ DISCRETE_RCINTEGRATE(NODE_22,1,NODE_20,RS_R5, R_PARALLEL(RS_R4+RS_R3,RS_R6),0,RS_C18,DK_SUP_V,DISC_RC_INTEGRATE_TYPE1) DISCRETE_MULTIPLY(DS_OUT_SOUND2,1,NODE_22,RS_R3/R_SERIE(RS_R3,RS_R4)) @@ -583,11 +567,11 @@ static DISCRETE_SOUND_START(radarscp) /* C21 is discharged via Q5 BE */ DISCRETE_RCDISC_MODULATED(NODE_26,1,DS_SOUND1_INV,0,RS_R_NN02,0,0,RS_R32,RS_C31,DK_SUP_V) - DISCRETE_TRANSFORM2(NODE_27, 1, NODE_26, 0.6, "01>") // TR5 + DISCRETE_TRANSFORM2(NODE_27, 1, NODE_26, 0.6, "01>") /* TR5 */ DISCRETE_RCDISC2(NODE_28,NODE_27,DK_SUP_V,RS_R31+RS_R30,0.0,RS_R30,RS_C30) - DISCRETE_DIODE_MIXER2(NODE_29, 1, DK_1N5553_V, NODE_14, NODE_14) // D3 - DISCRETE_DIODE_MIXER2(NODE_30, 1, DK_1N5553_V, NODE_28, NODE_29) // D1, D2 + DISCRETE_DIODE_MIXER2(NODE_29, 1, DK_1N5553_V, NODE_14, NODE_14) /* D3 */ + DISCRETE_DIODE_MIXER2(NODE_30, 1, DK_1N5553_V, NODE_28, NODE_29) /* D1, D2 */ DISCRETE_RCINTEGRATE(NODE_31,1,NODE_30,RS_R28, R_PARALLEL(RS_R27+RS_R26,RS_R29),0,RS_C29,DK_SUP_V,DISC_RC_INTEGRATE_TYPE1) DISCRETE_MULTIPLY(DS_OUT_SOUND1,1,NODE_31,RS_R26/R_SERIE(RS_R26,RS_R27)) @@ -627,8 +611,8 @@ static DISCRETE_SOUND_START(radarscp) /* DAC */ /************************************************/ /* Signal decay circuit Q7, R20, C32 */ - DISCRETE_RCDISC(NODE_170, DS_DAC_DISCHARGE, 1, RS_R40, RS_C40) - DISCRETE_TRANSFORM4(NODE_171, 1, DS_DAC, DK_SUP_V/256.0, NODE_170, DS_DAC_DISCHARGE, "01*3!2+*") + DISCRETE_RCDISC(NODE_170, DS_DISCHARGE_INV, 1, RS_R40, RS_C40) + DISCRETE_TRANSFORM4(NODE_171, 1, DS_DAC, DK_SUP_V/256.0, NODE_170, DS_DISCHARGE_INV, "01*3!2+*") /* following the DAC are two opamps. The first is a current-to-voltage changer * for the DAC08 which delivers a variable output current. @@ -649,7 +633,7 @@ static DISCRETE_SOUND_START(radarscp) DISCRETE_MIXER5(NODE_288, 1, DS_OUT_SOUND0, DS_OUT_SOUND1, DS_OUT_SOUND2, DS_OUT_SOUND7, DS_OUT_DAC, &radarscp_mixer_desc) - // Amplifier: internal amplifier + /* Amplifier: internal amplifier */ DISCRETE_ADDER2(NODE_289,1,NODE_288,5.0*43.0/(100.0+43.0)) DISCRETE_RCINTEGRATE(NODE_294,1,NODE_289,0,150,1000, CAP_U(33),DK_SUP_V,DISC_RC_INTEGRATE_TYPE3) DISCRETE_CRFILTER(NODE_295,1,NODE_294, 1000, DK_C13) @@ -689,7 +673,7 @@ DISCRETE_SOUND_END #define JR_C14 CAP_U(4.7) #define JR_C15 CAP_U(22) #define JR_C16 CAP_U(3.3) -#define JR_C17 CAP_U(3.3) // ??? illegible +#define JR_C17 CAP_U(3.3) /* ??? illegible */ #define JR_C18 CAP_N(22) #define JR_C19 CAP_N(4.7) #define JR_C20 CAP_U(0.12) @@ -726,8 +710,8 @@ DISCRETE_SOUND_END static const discrete_mixer_desc dkongjr_mixer_desc = {DISC_MIXER_IS_RESISTOR, {JR_R5, JR_R3, JR_R6, JR_R4, JR_R25}, - {0,0,0,0,0}, // no variable resistors - {0,0,0,0,0}, // no node capacitors + {0,0,0,0,0}, /* no variable resistors */ + {0,0,0,0,0}, /* no node capacitors */ 0, 0, JR_C155, JR_C161, @@ -736,9 +720,9 @@ static const discrete_mixer_desc dkongjr_mixer_desc = static const discrete_mixer_desc dkongjr_s1_mixer_desc = {DISC_MIXER_IS_RESISTOR, {JR_R13, JR_R12}, - {0,0}, // no variable resistors - {0,0}, // no node capacitors - 0, RES_K(90), // Internal LS624 resistors ... + {0,0}, /* no variable resistors */ + {0,0}, /* no node capacitors */ + 0, RES_K(90), /* Internal LS624 resistors ... */ JR_C24, 0, 0, 1}; @@ -771,7 +755,7 @@ static DISCRETE_SOUND_START(dkongjr) DISCRETE_INPUT_NOT(DS_SOUND6_INV) DISCRETE_INPUT_NOT(DS_SOUND7_INV) DISCRETE_INPUT_NOT(DS_SOUND9_INV) - DISCRETE_INPUT_LOGIC(DS_DAC_DISCHARGE) + DISCRETE_INPUT_NOT(DS_DISCHARGE_INV) DISCRETE_INPUT_DATA(DS_DAC) /************************************************/ @@ -827,15 +811,15 @@ static DISCRETE_SOUND_START(dkongjr) DISCRETE_COUNTER(NODE_100,1,0,NODE_118,0xFFFF,DISC_COUNT_UP,0,DISC_CLK_BY_COUNT) - DISCRETE_BITSET(NODE_101, NODE_100, 7) //LS157 2A - DISCRETE_BITSET(NODE_102, NODE_100, 4) //LS157 2B - DISCRETE_BITSET(NODE_103, NODE_100, 13) //LS157 3A - DISCRETE_BITSET(NODE_104, NODE_100, 12) //LS157 3B + DISCRETE_BITSET(NODE_101, NODE_100, 7) /*LS157 2A */ + DISCRETE_BITSET(NODE_102, NODE_100, 4) /*LS157 2B */ + DISCRETE_BITSET(NODE_103, NODE_100, 13) /*LS157 3A */ + DISCRETE_BITSET(NODE_104, NODE_100, 12) /*LS157 3B */ /* LS157 Switches */ - DISCRETE_SWITCH(NODE_105, 1, DS_SOUND7_INV, GND, NODE_113) // Switch 1 from LS624 - DISCRETE_SWITCH(NODE_106, 1, DS_SOUND7_INV, NODE_101, NODE_102) // Switch 2 - DISCRETE_SWITCH(NODE_107, 1, DS_SOUND7_INV, NODE_103, NODE_104) // Switch 3 + DISCRETE_SWITCH(NODE_105, 1, DS_SOUND7_INV, GND, NODE_113) /* Switch 1 from LS624 */ + DISCRETE_SWITCH(NODE_106, 1, DS_SOUND7_INV, NODE_101, NODE_102) /* Switch 2 */ + DISCRETE_SWITCH(NODE_107, 1, DS_SOUND7_INV, NODE_103, NODE_104) /* Switch 3 */ DISCRETE_LS123(NODE_110, DS_SOUND0_INV, JR_R8, JR_C14) DISCRETE_TRANSFORM2(NODE_111, 1, TTL_HIGH, NODE_110, "01-") @@ -855,8 +839,8 @@ static DISCRETE_SOUND_START(dkongjr) /* DAC */ /************************************************/ /* Signal decay circuit Q7, R20, C32 */ - DISCRETE_RCDISC(NODE_170, DS_DAC_DISCHARGE, 1, JR_R20, JR_C32) - DISCRETE_TRANSFORM4(NODE_171, 1, DS_DAC, DK_SUP_V/256.0, NODE_170, DS_DAC_DISCHARGE, "01*3!2+*") + DISCRETE_RCDISC(NODE_170, DS_DISCHARGE_INV, 1, JR_R20, JR_C32) + DISCRETE_TRANSFORM4(NODE_171, 1, DS_DAC, DK_SUP_V/256.0, NODE_170, DS_DISCHARGE_INV, "01*3!2+*") /* following the DAC are two opamps. The first is a current-to-voltage changer * for the DAC08 which delivers a variable output current. @@ -889,35 +873,7 @@ DISCRETE_SOUND_END * ****************************************************************/ -static SOUND_START( dkong ) -{ - dkong_state *state = machine->driver_data; - state_save_register_global(state->page); - state_save_register_global(state->mcustatus); - state_save_register_global(state->portT); -} - -static SOUND_RESET( dkong ) -{ - dkong_state *state = machine->driver_data; - - state->mcustatus = 0; - state->page = 0x47; - state->portT = 0; - - I8035_T_W_AL(machine,0,0); - I8035_T_W_AL(machine,1,0); - I8035_P1_W(machine,0xFF); - I8035_P2_W(machine,0xFF); - soundlatch_w(machine,0,0x0F); -} - -static SOUND_RESET( dkongjr ) -{ - SOUND_RESET_CALL(dkong); - soundlatch_w(machine,0,0x00); -} /**************************************************************** * @@ -1013,39 +969,18 @@ Addresses found at @0x510, cpu2 static WRITE8_HANDLER( M58817_command_w ) { - logerror("PA Write %x\n", data); - tms5110_ctl_w(machine, 0, data & 0x0f); tms5110_pdc_w(machine, 0, (data>>4) & 0x01); - // FIXME 0x20 is CS + /* FIXME 0x20 is CS */ } + /**************************************************************** * * I/O Handlers - static * ****************************************************************/ -static READ8_HANDLER( dkong_sh_p1_r ) -{ - return I8035_P1_R(machine); -} - -static READ8_HANDLER( dkong_sh_p2_r ) -{ - return I8035_P2_R(machine); -} - -static READ8_HANDLER( dkong_sh_t0_r ) -{ - return I8035_T_R(machine,0); -} - -static READ8_HANDLER( dkong_sh_t1_r ) -{ - return I8035_T_R(machine,1); -} - static WRITE8_HANDLER( dkong_voice_w ) { /* only provided for documentation purposes @@ -1062,84 +997,35 @@ static READ8_HANDLER( dkong_voice_status_r ) return 0; } -static READ8_HANDLER( dkong_sh_tune_r ) +static READ8_DEVICE_HANDLER( dkong_tune_r ) { - dkong_state *state = machine->driver_data; - UINT8 *SND = memory_region(machine, "sound"); + const device_config *devvp2 = devtag_get_device(device->machine, LATCH8, "virtual_p2"); + UINT8 *snd_rom = memory_region(device->machine, "sound"); + UINT8 page = latch8_r(devvp2,0) & 0x47; - if ( state->page & 0x40 ) + if ( page & 0x40 ) { - return (soundlatch_r(machine,0) & 0x0F) | (dkong_voice_status_r(machine,0)<<4); + return (latch8_r(device, 0) & 0x0F) | (dkong_voice_status_r(device->machine,0)<<4); } else { /* printf("rom access at pc = %4x\n",activecpu_get_pc()); */ - return (SND[0x1000+(state->page & 7)*256+offset]); + return (snd_rom[0x1000+(page & 7)*256+offset]); } } -static READ8_HANDLER( dkongjr_sh_tune_r ) -{ - return soundlatch_r(machine,0) & 0x01F; -} - -static WRITE8_HANDLER( dkong_sh_p1_w ) +static WRITE8_HANDLER( dkong_p1_w ) { discrete_sound_w(machine,DS_DAC,data); } -static READ8_HANDLER( radarsc1_sh_p1_r ) -{ - int r; - - r = (I8035_P1_R(machine) & 0x80) | (tms5110_status_r(machine,0)<<6); - return r; -} - -static WRITE8_HANDLER( dkong_sh_p2_w ) -{ - dkong_state *state = machine->driver_data; - - /* If P2.Bit7 -> is apparently an external signal decay or other output control - * If P2.Bit6 -> activates the external compressed sample ROM (not radarsc1) - * If P2.Bit5 -> Signal ANSN ==> Grid enable (radarsc1) - * If P2.Bit4 -> status code to main cpu - * P2.Bit2-0 -> select the 256 byte bank for external ROM - */ - - state->mcustatus = ((~data & 0x10) >> 4); - radarsc1_ansn_w(machine, 0, (data & 0x20) >> 5); - state->page = (data & 0x47); - - discrete_sound_w(machine,DS_DAC_DISCHARGE, (data & 0x80) ? 0 : 1 ); -} - - /**************************************************************** * * I/O Handlers - global * ****************************************************************/ -WRITE8_HANDLER( dkongjr_sh_test6_w ) -{ - I8035_P2_W_AL(machine,6,data & 1); -} - - -WRITE8_HANDLER( dkongjr_sh_tuneselect_w ) -{ - soundlatch_w(machine,offset,data); -} - -READ8_HANDLER( dkong_audio_status_r ) -{ - dkong_state *state = machine->driver_data; - - return state->mcustatus; -} - WRITE8_HANDLER( dkong_audio_irq_w ) { if (data) @@ -1148,92 +1034,6 @@ WRITE8_HANDLER( dkong_audio_irq_w ) cpunum_set_input_line(machine, 1, 0, CLEAR_LINE); } -WRITE8_HANDLER( dkong_snd_disc_w ) -{ - dkong_state *state = machine->driver_data; - - switch (offset) - { - case 0: - discrete_sound_w(machine,DS_SOUND0_INP,data & 1); - break; - case 1: - discrete_sound_w(machine,DS_SOUND1_INP,data & 1); - break; - case 2: - discrete_sound_w(machine,DS_SOUND2_INP,data & 1); - radarscp_snd02_w(machine, 0, data & 1); - break; - case 3: - if (state->hardware_type == HARDWARE_TRS01) - //SOUND3 ==> PA7 - I8035_P1_W_AL(machine,7,data & 1); - else - I8035_P2_W_AL(machine,5,data & 1); - break; - case 4: - I8035_T_W_AL(machine, 1, data & 1); - break; - case 5: - I8035_T_W_AL(machine, 0, data & 1); - break; - case 6: - discrete_sound_w(machine,DS_SOUND6_INP,data & 1); - break; - case 7: - discrete_sound_w(machine,DS_SOUND7_INP,data & 1); - break; - } - return; -} - -WRITE8_HANDLER( dkong_sh_tuneselect_w ) -{ - soundlatch_w(machine,offset,data ^ 0x0f); -} - -WRITE8_HANDLER( dkongjr_snd_w1 ) -{ - dkong_state *state = machine->driver_data; - - switch (offset) - { - case 0: /* climb */ - discrete_sound_w(machine,DS_SOUND0_INP,data & 1); - break; - case 1: /* jump */ - discrete_sound_w(machine,DS_SOUND1_INP,data & 1); - break; - case 2: /* land */ - discrete_sound_w(machine,DS_SOUND2_INP,data & 1); - break; - case 3: /* Port 3 write ==> PB 5 */ - I8035_P2_W_AL(machine,5,data & 1); - break; - case 4: /* Port 4 write */ - I8035_T_W_AL(machine,1, data & 1); - break; - case 5: /* Port 5 write */ - I8035_T_W_AL(machine,0, data & 1); - break; - case 6: /* Port 6 write ==> PB 4 */ - I8035_P2_W_AL(machine,4,data & 1); - break; - case 7: /* walk */ - discrete_sound_w(machine,DS_SOUND7_INP,data & 1); - break; - } -} - -WRITE8_HANDLER( dkongjr_snd_w2 ) -{ - switch (offset) - { - case 0: /* S9 - drop */ - discrete_sound_w(machine,DS_SOUND9_INP,data & 1); - break; - } -} /************************************* * @@ -1246,35 +1046,38 @@ static ADDRESS_MAP_START( dkong_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_END static ADDRESS_MAP_START( dkong_sound_io_map, ADDRESS_SPACE_IO, 8 ) - AM_RANGE(0x00, 0xff) AM_READWRITE(dkong_sh_tune_r, dkong_voice_w) - AM_RANGE(I8039_bus, I8039_bus) AM_READWRITE(dkong_sh_tune_r, dkong_voice_w) - AM_RANGE(I8039_p1, I8039_p1) AM_READWRITE(dkong_sh_p1_r, dkong_sh_p1_w) - AM_RANGE(I8039_p2, I8039_p2) AM_READWRITE(dkong_sh_p2_r, dkong_sh_p2_w) - AM_RANGE(I8039_t0, I8039_t0) AM_READ(dkong_sh_t0_r) - AM_RANGE(I8039_t1, I8039_t1) AM_READ(dkong_sh_t1_r) + AM_RANGE(0x00, 0xFF) AM_DEVREAD(LATCH8, "ls175.3d", dkong_tune_r) + AM_WRITE(dkong_voice_w) + AM_RANGE(I8039_bus, I8039_bus) AM_DEVREAD(LATCH8, "ls175.3d", dkong_tune_r) + AM_WRITE(dkong_voice_w) + AM_RANGE(I8039_p1, I8039_p1) AM_WRITE(dkong_p1_w) /* only write to dac */ + AM_RANGE(I8039_p2, I8039_p2) AM_LATCH8_READWRITE("virtual_p2") + AM_RANGE(I8039_t0, I8039_t0) AM_LATCH8_READBIT("ls259.6h", 5) + AM_RANGE(I8039_t1, I8039_t1) AM_LATCH8_READBIT("ls259.6h", 4) ADDRESS_MAP_END static ADDRESS_MAP_START( dkongjr_sound_io_map, ADDRESS_SPACE_IO, 8 ) - AM_RANGE(0x00, 0xff) AM_READ(dkongjr_sh_tune_r) - AM_RANGE(I8039_p1, I8039_p1) AM_READWRITE(dkong_sh_p1_r, dkong_sh_p1_w) - AM_RANGE(I8039_p2, I8039_p2) AM_READWRITE(dkong_sh_p2_r, dkong_sh_p2_w) - AM_RANGE(I8039_t0, I8039_t0) AM_READ(dkong_sh_t0_r) - AM_RANGE(I8039_t1, I8039_t1) AM_READ(dkong_sh_t1_r) + AM_RANGE(0x00, 0x00) AM_MIRROR(0xff) AM_LATCH8_READ("ls174.3d") + AM_RANGE(I8039_p1, I8039_p1) AM_WRITE(dkong_p1_w) /* only write to dac */ + AM_RANGE(I8039_p2, I8039_p2) AM_LATCH8_READWRITE("virtual_p2") + AM_RANGE(I8039_t0, I8039_t0) AM_LATCH8_READBIT("ls259.6h", 5) + AM_RANGE(I8039_t1, I8039_t1) AM_LATCH8_READBIT("ls259.6h", 4) ADDRESS_MAP_END static ADDRESS_MAP_START( radarsc1_sound_io_map, ADDRESS_SPACE_IO, 8 ) - AM_RANGE(0x00, 0xff) AM_READ(soundlatch_r) - AM_RANGE(0x00, 0xff) AM_WRITE(dkong_sh_p1_w) // DAC here - AM_RANGE(I8039_p1, I8039_p1) AM_READWRITE(radarsc1_sh_p1_r, M58817_command_w) - AM_RANGE(I8039_p2, I8039_p2) AM_READWRITE(dkong_sh_p2_r, dkong_sh_p2_w) - AM_RANGE(I8039_t0, I8039_t0) AM_READ(dkong_sh_t0_r) - AM_RANGE(I8039_t1, I8039_t1) AM_READ(dkong_sh_t1_r) + AM_RANGE(0x00, 0x00) AM_MIRROR(0xff) AM_DEVREAD(LATCH8, "ls175.3d", latch8_r) + AM_RANGE(0x00, 0xff) AM_WRITE(dkong_p1_w) /* DAC here */ + AM_RANGE(I8039_p1, I8039_p1) AM_LATCH8_READ("virtual_p1") + AM_WRITE(M58817_command_w) + AM_RANGE(I8039_p2, I8039_p2) AM_LATCH8_WRITE("virtual_p2") + AM_RANGE(I8039_t0, I8039_t0) AM_LATCH8_READBIT("ls259.6h", 5) + AM_RANGE(I8039_t1, I8039_t1) AM_LATCH8_READBIT("ls259.6h", 4) ADDRESS_MAP_END static ADDRESS_MAP_START( dkong3_sound1_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x01ff) AM_RAM - AM_RANGE(0x4016, 0x4016) AM_READ(soundlatch_r) // overwrite default - AM_RANGE(0x4017, 0x4017) AM_READ(soundlatch2_r) + AM_RANGE(0x4016, 0x4016) AM_LATCH8_READ("latch1") /* overwrite default */ + AM_RANGE(0x4017, 0x4017) AM_LATCH8_READ("latch2") AM_RANGE(0x4000, 0x4017) AM_READ(nes_psg_0_r) AM_RANGE(0x4000, 0x4017) AM_WRITE(nes_psg_0_w) AM_RANGE(0xe000, 0xffff) AM_ROM @@ -1282,7 +1085,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( dkong3_sound2_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x01ff) AM_RAM - AM_RANGE(0x4016, 0x4016) AM_READ(soundlatch3_r) // overwrite default + AM_RANGE(0x4016, 0x4016) AM_LATCH8_READ("latch3") /* overwrite default */ AM_RANGE(0x4000, 0x4017) AM_READ(nes_psg_1_r) AM_RANGE(0x4000, 0x4017) AM_WRITE(nes_psg_1_w) AM_RANGE(0xe000, 0xffff) AM_ROM @@ -1305,13 +1108,35 @@ static const nes_interface nes_interface_2 = { "n2a03b" }; MACHINE_DRIVER_START( dkong2b_audio ) + /* sound latches */ + + MDRV_LATCH8_ADD("ls175.3d") + MDRV_LATCH8_MASK(0xf0) + MDRV_LATCH8_INVERT(0x0F) + + MDRV_LATCH8_ADD("ls259.6h") + MDRV_LATCH8_DISCRETE_NODE(0, DS_SOUND0_INP) + MDRV_LATCH8_DISCRETE_NODE(1, DS_SOUND1_INP) + MDRV_LATCH8_DISCRETE_NODE(2, DS_SOUND2_INP) + MDRV_LATCH8_DISCRETE_NODE(6, DS_SOUND6_INP) + MDRV_LATCH8_DISCRETE_NODE(7, DS_SOUND7_INP) + + /* If P2.Bit7 -> is apparently an external signal decay or other output control + * If P2.Bit6 -> activates the external compressed sample ROM (not radarsc1) + * If P2.Bit5 -> Signal ANSN ==> Grid enable (radarsc1) + * If P2.Bit4 -> status code to main cpu + * P2.Bit2-0 -> select the 256 byte bank for external ROM + */ + + MDRV_LATCH8_ADD( "virtual_p2" ) /* virtual latch for port B */ + MDRV_LATCH8_INVERT( 0x20 ) /* signal is inverted */ + MDRV_LATCH8_DEVREAD(5, LATCH8, "ls259.6h", latch8_r, 3) + MDRV_LATCH8_DISCRETE_NODE(7, DS_DISCHARGE_INV) + MDRV_CPU_ADD("sound", I8035,I8035_CLOCK) MDRV_CPU_PROGRAM_MAP(dkong_sound_map,0) MDRV_CPU_IO_MAP(dkong_sound_io_map, 0) - MDRV_SOUND_START(dkong) - MDRV_SOUND_RESET(dkong) - MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD("discrete", DISCRETE, 0) MDRV_SOUND_CONFIG_DISCRETE(dkong2b) @@ -1334,6 +1159,12 @@ MACHINE_DRIVER_START( radarsc1_audio ) MDRV_IMPORT_FROM( radarscp_audio ) MDRV_CPU_MODIFY("sound") MDRV_CPU_IO_MAP(radarsc1_sound_io_map, 0) + + /* virtual_p2 is not used here */ + MDRV_LATCH8_ADD( "virtual_p1" ) /* virtual latch for port A */ + MDRV_LATCH8_INVERT( 0x80 ) /* signal is inverted */ + MDRV_LATCH8_DEVREAD(7, LATCH8, "ls259.6h", latch8_r, 3) + MDRV_LATCH8_READ(6, tms5110_status_r, 0) MDRV_SOUND_ADD("tms", M58817, XTAL_640kHz) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -1342,13 +1173,33 @@ MACHINE_DRIVER_END MACHINE_DRIVER_START( dkongjr_audio ) + /* sound latches */ + + MDRV_LATCH8_ADD("ls174.3d") + MDRV_LATCH8_MASK(0xE0) + + MDRV_LATCH8_ADD( "ls259.6h") + MDRV_LATCH8_DISCRETE_NODE(0, DS_SOUND0_INP) + MDRV_LATCH8_DISCRETE_NODE(1, DS_SOUND1_INP) + MDRV_LATCH8_DISCRETE_NODE(2, DS_SOUND2_INP) + MDRV_LATCH8_DISCRETE_NODE(7, DS_SOUND7_INP) + + MDRV_LATCH8_ADD( "ls259.5h") + MDRV_LATCH8_DISCRETE_NODE(1, DS_SOUND9_INP) + + MDRV_LATCH8_ADD( "ls259.4h") + + MDRV_LATCH8_ADD( "virtual_p2" ) /* virtual latch for port B */ + MDRV_LATCH8_INVERT( 0x70 ) /* all signals are inverted */ + MDRV_LATCH8_DEVREAD(6, LATCH8, "ls259.4h", latch8_r, 1) + MDRV_LATCH8_DEVREAD(5, LATCH8, "ls259.6h", latch8_r, 3) + MDRV_LATCH8_DEVREAD(4, LATCH8, "ls259.6h", latch8_r, 6) + MDRV_LATCH8_DISCRETE_NODE(7, DS_DISCHARGE_INV) + MDRV_CPU_ADD("sound", I8035,I8035_CLOCK) MDRV_CPU_PROGRAM_MAP(dkong_sound_map,0) MDRV_CPU_IO_MAP(dkongjr_sound_io_map, 0) - MDRV_SOUND_START(dkong) - MDRV_SOUND_RESET(dkongjr) - MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD("discrete", DISCRETE, 0) @@ -1367,6 +1218,11 @@ MACHINE_DRIVER_START( dkong3_audio ) MDRV_CPU_PROGRAM_MAP(dkong3_sound2_map, 0) MDRV_CPU_VBLANK_INT("main", nmi_line_pulse) + /* sound latches */ + MDRV_LATCH8_ADD( "latch1") + MDRV_LATCH8_ADD( "latch2") + MDRV_LATCH8_ADD( "latch3") + MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD("nes1", NES, N2A03_DEFAULTCLOCK) MDRV_SOUND_CONFIG(nes_interface_1) diff --git a/src/mame/drivers/dkong.c b/src/mame/drivers/dkong.c index 956654a9fd8..b02b498f8d3 100644 --- a/src/mame/drivers/dkong.c +++ b/src/mame/drivers/dkong.c @@ -304,6 +304,7 @@ Donkey Kong Junior Notes #include "includes/dkong.h" #include "machine/8257dma.h" #include "machine/z80dma.h" +#include "machine/latch8.h" /************************************* * @@ -471,6 +472,7 @@ static MACHINE_RESET( drakton ) memory_set_bank(1, 1); } + /************************************* * * DMA handling @@ -562,27 +564,29 @@ static WRITE8_DEVICE_HANDLER( p8257_drq_w ) static READ8_HANDLER( dkong_in2_r ) { + /* mcu status (sound feedback) is inverted bit4 from port B (8039) */ + const device_config *devvp2 = devtag_get_device(machine, LATCH8, "virtual_p2"); + UINT8 mcustatus = latch8_bit4_q_r(devvp2, 0); + UINT8 r; -#if DEBUG_DISC_SOUND - static UINT8 ui_snd = 0; - static UINT8 lst = 0; - if (!lst && (input_port_read(machine, "TST") & 0x01)) - { - ui_snd = (ui_snd + 1) % 10; - popmessage("Sound %d", ui_snd); - } - lst = input_port_read(machine, "TST") & 0x01; - if (ui_snd<8) - dkongjr_snd_w1(ui_snd, (input_port_read(machine, "TST") & 0x02)>>1); - else - dkongjr_snd_w2(ui_snd-8, (input_port_read(machine, "TST") & 0x02)>>1); -#endif + r = (input_port_read(machine, "IN2") & 0xBF) | (mcustatus << 6); + coin_counter_w(offset, r >> 7); + if (r & 0x10) + r = (r & ~0x10) | 0x80; /* service ==> coin */ + return r; +} + +static READ8_HANDLER( dkongjr_in2_r ) +{ + /* dkongjr does not have the mcu line connected */ - r = (input_port_read(machine, "IN2") & 0xBF) | (dkong_audio_status_r(machine,0) << 6); + UINT8 r; + + r = (input_port_read(machine, "IN2") & 0xBF) | 0x40; coin_counter_w(offset, r >> 7); if (r & 0x10) - r = (r & ~0x10) | 0x80; /* service ==> coint */ + r = (r & ~0x10) | 0x80; /* service ==> coin */ return r; } @@ -596,6 +600,7 @@ static READ8_HANDLER( hunchbkd_mirror_r ) return data; } + static WRITE8_HANDLER( hunchbkd_mirror_w ) { #if DEBUG_PROTECTION @@ -605,6 +610,7 @@ static WRITE8_HANDLER( hunchbkd_mirror_w ) program_write_byte(0x1000+offset,data); } + static READ8_HANDLER( epos_decrypt_rom ) { dkong_state *state = machine->driver_data; @@ -634,6 +640,7 @@ static READ8_HANDLER( epos_decrypt_rom ) return 0; } + static WRITE8_HANDLER( hunchbkd_data_w ) { dkong_state *state = machine->driver_data; @@ -641,6 +648,7 @@ static WRITE8_HANDLER( hunchbkd_data_w ) state->hunchloopback = data; } + static READ8_HANDLER( hunchbkd_port0_r ) { dkong_state *state = machine->driver_data; @@ -658,6 +666,7 @@ static READ8_HANDLER( hunchbkd_port0_r ) return 0; } + static READ8_HANDLER( hunchbkd_port1_r ) { dkong_state *state = machine->driver_data; @@ -665,6 +674,7 @@ static READ8_HANDLER( hunchbkd_port1_r ) return state->hunchloopback; } + static READ8_HANDLER( herbiedk_port1_r ) { switch (activecpu_get_pc()) @@ -676,12 +686,13 @@ static READ8_HANDLER( herbiedk_port1_r ) return 1; } + static READ8_HANDLER( spclforc_port0_r ) { switch (activecpu_get_pc()) { - case 0x00a3: // spclforc - case 0x007b: // spcfrcii + case 0x00a3: /* spclforc */ + case 0x007b: /* spcfrcii */ return 1; } @@ -738,6 +749,7 @@ static READ8_HANDLER( strtheat_inputport_0_r ) } } + static READ8_HANDLER( strtheat_inputport_1_r ) { if(input_port_read(machine, "DSW0") & 0x40) @@ -767,10 +779,12 @@ static ADDRESS_MAP_START( dkong_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x7400, 0x77ff) AM_RAM_WRITE(dkong_videoram_w) AM_BASE_MEMBER(dkong_state, video_ram) AM_RANGE(0x7800, 0x780f) AM_DEVREADWRITE(DMA8257, "dma8257", dma8257_r, dma8257_w) /* P8257 control registers */ - AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_WRITE(dkong_sh_tuneselect_w) /* IN0, sound CPU intf */ + AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_LATCH8_WRITE("ls175.3d") /* IN0, sound CPU intf */ AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_WRITE(radarscp_grid_color_w) /* IN1 */ + AM_RANGE(0x7d00, 0x7d00) AM_READ(dkong_in2_r) /* IN2 */ - AM_RANGE(0x7d00, 0x7d07) AM_WRITE(dkong_snd_disc_w) /* Sound signals */ + AM_RANGE(0x7d00, 0x7d07) AM_DEVWRITE(LATCH8, "ls259.6h", latch8_bit0_w) /* Sound signals */ + AM_RANGE(0x7d80, 0x7d80) AM_READ_PORT("DSW0") AM_WRITE(dkong_audio_irq_w) /* DSW0 */ AM_RANGE(0x7d81, 0x7d81) AM_WRITE(radarscp_grid_enable_w) AM_RANGE(0x7d82, 0x7d82) AM_WRITE(dkong_flipscreen_w) @@ -789,18 +803,23 @@ static ADDRESS_MAP_START( dkongjr_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x7400, 0x77ff) AM_RAM_WRITE(dkong_videoram_w) AM_BASE_MEMBER(dkong_state, video_ram) AM_RANGE(0x7800, 0x780f) AM_DEVREADWRITE(DMA8257, "dma8257", dma8257_r, dma8257_w) /* P8257 control registers */ - AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_WRITE(dkongjr_sh_tuneselect_w) + + AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_LATCH8_WRITE("ls174.3d") /* IN0, sound interface */ + AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_WRITE(dkongjr_gfxbank_w) - AM_RANGE(0x7c81, 0x7c81) AM_WRITE(dkongjr_sh_test6_w) - AM_RANGE(0x7d00, 0x7d00) AM_READ(dkong_in2_r) /* IN2 */ - AM_RANGE(0x7d00, 0x7d07) AM_WRITE(dkongjr_snd_w1) /* Sound addrs */ + AM_RANGE(0x7c80, 0x7c87) AM_DEVWRITE(LATCH8, "ls259.4h", latch8_bit0_w) /* latch for sound and signals above */ + + AM_RANGE(0x7d00, 0x7d00) AM_READ(dkongjr_in2_r) /* IN2 */ + AM_RANGE(0x7d00, 0x7d07) AM_DEVWRITE(LATCH8, "ls259.6h",latch8_bit0_w) /* Sound addrs */ + AM_RANGE(0x7d80, 0x7d80) AM_READ_PORT("DSW0") AM_WRITE(dkong_audio_irq_w) /* DSW0 */ - AM_RANGE(0x7d81, 0x7d81) AM_WRITE(dkongjr_snd_w2) /* Sound addrs */ AM_RANGE(0x7d82, 0x7d82) AM_WRITE(dkong_flipscreen_w) AM_RANGE(0x7d83, 0x7d83) AM_WRITE(dkong_spritebank_w) /* 2 PSL Signal */ AM_RANGE(0x7d84, 0x7d84) AM_WRITE(interrupt_enable_w) AM_RANGE(0x7d85, 0x7d85) AM_DEVWRITE(DMA8257, "dma8257", p8257_drq_w) /* P8257 ==> /DRQ0 /DRQ1 */ AM_RANGE(0x7d86, 0x7d87) AM_WRITE(dkong_palettebank_w) + AM_RANGE(0x7d80, 0x7d87) AM_DEVWRITE(LATCH8, "ls259.5h", latch8_bit0_w) /* latch for sound and signals above*/ + AM_RANGE(0x8000, 0x9fff) AM_ROM /* bootleg DKjr only */ AM_RANGE(0xb000, 0xbfff) AM_ROM /* pestplce only */ AM_RANGE(0xd000, 0xdfff) AM_ROM /* DK3 bootleg only */ @@ -814,18 +833,18 @@ static ADDRESS_MAP_START( dkong3_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_SIZE_MEMBER(dkong_state, sprite_ram_size) /* sprite set 1 */ AM_RANGE(0x7400, 0x77ff) AM_RAM_WRITE(dkong_videoram_w) AM_BASE_MEMBER(dkong_state, video_ram) - AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_WRITE(soundlatch_w) - AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_WRITE(soundlatch2_w) - AM_RANGE(0x7d00, 0x7d00) AM_READ_PORT("DSW0") AM_WRITE(soundlatch3_w) + AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_LATCH8_WRITE("latch1") + AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_LATCH8_WRITE("latch2") + AM_RANGE(0x7d00, 0x7d00) AM_READ_PORT("DSW0") AM_LATCH8_WRITE("latch3") AM_RANGE(0x7d80, 0x7d80) AM_READ_PORT("DSW1") AM_WRITE(dkong3_2a03_reset_w) AM_RANGE(0x7e80, 0x7e80) AM_WRITE(dkong3_coin_counter_w) AM_RANGE(0x7e81, 0x7e81) AM_WRITE(dkong3_gfxbank_w) AM_RANGE(0x7e82, 0x7e82) AM_WRITE(dkong_flipscreen_w) - AM_RANGE(0x7e83, 0x7e83) AM_WRITE(dkong_spritebank_w) /* 2 PSL Signal */ + AM_RANGE(0x7e83, 0x7e83) AM_WRITE(dkong_spritebank_w) /* 2 PSL Signal */ AM_RANGE(0x7e84, 0x7e84) AM_WRITE(interrupt_enable_w) - AM_RANGE(0x7e85, 0x7e85) AM_DEVWRITE(Z80DMA, "z80dma", z80dma_rdy_w) /* ==> DMA Chip */ + AM_RANGE(0x7e85, 0x7e85) AM_DEVWRITE(Z80DMA, "z80dma", z80dma_rdy_w) /* ==> DMA Chip */ AM_RANGE(0x7e86, 0x7e87) AM_WRITE(dkong_palettebank_w) - AM_RANGE(0x8000, 0x9fff) AM_ROM /* DK3 and bootleg DKjr only */ + AM_RANGE(0x8000, 0x9fff) AM_ROM /* DK3 and bootleg DKjr only */ ADDRESS_MAP_END static ADDRESS_MAP_START( dkong3_io_map, ADDRESS_SPACE_IO, 8 ) @@ -846,10 +865,10 @@ static ADDRESS_MAP_START( hunchbkd_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x0fff) AM_ROM AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE_MEMBER(dkong_state, sprite_ram) AM_SIZE_MEMBER(dkong_state, sprite_ram_size) /* 0x7000 */ - AM_RANGE(0x1400, 0x1400) AM_READ_PORT("IN0") AM_WRITE(dkong_sh_tuneselect_w) + AM_RANGE(0x1400, 0x1400) AM_READ_PORT("IN0") AM_DEVWRITE(LATCH8, "ls175.3d", latch8_w) AM_RANGE(0x1480, 0x1480) AM_READ_PORT("IN1") AM_RANGE(0x1500, 0x1500) AM_READ(dkong_in2_r) /* IN2 */ - AM_RANGE(0x1500, 0x1507) AM_WRITE(dkong_snd_disc_w) /* Sound signals */ + AM_RANGE(0x1500, 0x1507) AM_DEVWRITE(LATCH8, "ls259.6h", latch8_bit0_w) /* Sound signals */ AM_RANGE(0x1580, 0x1580) AM_READ_PORT("DSW0") AM_WRITE(dkong_audio_irq_w) /* DSW0 */ AM_RANGE(0x1582, 0x1582) AM_WRITE(dkong_flipscreen_w) AM_RANGE(0x1583, 0x1583) AM_WRITE(dkong_spritebank_w) /* 2 PSL Signal */ @@ -1197,8 +1216,8 @@ static INPUT_PORTS_START( shootgal ) PORT_MODIFY("IN2") PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Start 1 / P1 Button 1") PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Start 2 / P1 Button 2") PORT_PLAYER(1) - //PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - //PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + /* PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) */ + /* PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) */ PORT_START("DSW0") /* DSW0 */ PORT_DIPNAME( 0x01, 0x00, "1" ) @@ -1306,7 +1325,7 @@ static INPUT_PORTS_START( herodk ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION( "SW1:!2" ) PORT_DIPSETTING( 0x00, "3" ) PORT_DIPSETTING( 0x02, "5" ) - PORT_DIPNAME( 0x0c, 0x00, "Difficulty?" ) PORT_DIPLOCATION( "SW1:!3,!4" ) // Stored at 0x1c99 + PORT_DIPNAME( 0x0c, 0x00, "Difficulty?" ) PORT_DIPLOCATION( "SW1:!3,!4" ) /* Stored at 0x1c99 */ PORT_DIPSETTING( 0x00, "0" ) PORT_DIPSETTING( 0x04, "1" ) PORT_DIPSETTING( 0x08, "2" ) @@ -1727,7 +1746,7 @@ static MACHINE_DRIVER_START( pestplce ) MDRV_GFXDECODE(pestplce) MDRV_PALETTE_LENGTH(DK2B_PALETTE_LENGTH) - MDRV_PALETTE_INIT(dkong2b) // wrong! + MDRV_PALETTE_INIT(dkong2b) /* wrong! */ MDRV_VIDEO_UPDATE(pestplce) MACHINE_DRIVER_END @@ -1779,6 +1798,12 @@ static MACHINE_DRIVER_START( dkong3b ) MDRV_PALETTE_INIT(dkong3) MACHINE_DRIVER_END +/************************************* + * + * EPOS Machine drivers + * + *************************************/ + static MACHINE_DRIVER_START( strtheat ) /* basic machine hardware */ MDRV_IMPORT_FROM(dkong2b) @@ -1862,7 +1887,7 @@ ROM_START( radarsc1 ) ROM_FILL( 0x1000, 0x0800, 0xFF ) ROM_REGION( 0x0800, "tms", 0 ) /* speech rom */ - ROM_LOAD( "trs014ha.bin", 0x0000, 0x0800, CRC(d1f1b48c) SHA1(ee5584368d2e9f7bde271f5004585b53f5ff5c3f) ) // speech rom + ROM_LOAD( "trs014ha.bin", 0x0000, 0x0800, CRC(d1f1b48c) SHA1(ee5584368d2e9f7bde271f5004585b53f5ff5c3f) ) /* speech rom */ ROM_REGION( 0x1000, "gfx1", ROMREGION_DISPOSE ) ROM_LOAD( "trs01v3f", 0x0000, 0x0800, CRC(f095330e) SHA1(dd3de744f28ff108630d3336bd246d3323fa34af) ) @@ -1884,9 +1909,10 @@ ROM_START( radarsc1 ) ROM_LOAD( "trs01c2j.bin", 0x0000, 0x0100, CRC(2a087c87) SHA1(dbf0c6173583dc4fa5d3f34d2f42cbaf2bd4b167) ) /* blue */ ROM_LOAD( "trs01c2k.bin", 0x0100, 0x0100, CRC(650c5daf) SHA1(72f91ee2fab9eee58ee42881327e6345aa70b7f9) ) /* green */ ROM_LOAD( "trs01c2l.bin", 0x0200, 0x0100, CRC(23087910) SHA1(afc05c322b11fefaf0af857fee06a5afd0d4593e) ) /* red */ - // Hack! The prom at pos 1D on video board has not been dumped - // Rom 1D is a MB7051, only 5 address lines - // Rom below from TRS02 dump: rs2-v.1hc + /* Hack! The prom at pos 1D on video board has not been dumped + * Rom 1D is a MB7051, only 5 address lines + * Rom below from TRS02 dump: rs2-v.1hc + */ ROM_LOAD( "trs01v1d.bin", 0x0300, 0x0100, BAD_DUMP CRC(1b828315) SHA1(00c9f8c5ae86b68d38c66f9071b5f1ef421c1005) ) /* character color codes on a per-column basis */ ROM_END @@ -1921,9 +1947,9 @@ ROM_END ROM_START( dkongo ) ROM_REGION( 0x10000, "main", 0 ) - ROM_LOAD( "c_5f_b.bin", 0x0000, 0x1000, CRC(424f2b11) SHA1(e4f096f2bbd37281f42a5f8e083738f55c07f3dd) ) // tkg3c.5f - ROM_LOAD( "c_5ct_g.bin", 0x1000, 0x1000, CRC(5ec461ec) SHA1(acb11a8fbdbb3ab46068385fe465f681e3c824bd) ) // tkg3c.5g - ROM_LOAD( "c_5h_b.bin", 0x2000, 0x1000, CRC(1d28895d) SHA1(63792cab215fc2a7b0e8ee61d8115045571e9d42) ) // tkg3c.5h + ROM_LOAD( "c_5f_b.bin", 0x0000, 0x1000, CRC(424f2b11) SHA1(e4f096f2bbd37281f42a5f8e083738f55c07f3dd) ) /* tkg3c.5f */ + ROM_LOAD( "c_5ct_g.bin", 0x1000, 0x1000, CRC(5ec461ec) SHA1(acb11a8fbdbb3ab46068385fe465f681e3c824bd) ) /* tkg3c.5g */ + ROM_LOAD( "c_5h_b.bin", 0x2000, 0x1000, CRC(1d28895d) SHA1(63792cab215fc2a7b0e8ee61d8115045571e9d42) ) /* tkg3c.5h */ ROM_LOAD( "tkg3c.5k", 0x3000, 0x1000, CRC(553b89bb) SHA1(61611df9e2748fdcd31821038dcc0e16dc933873) ) /* space for diagnostic ROM */ @@ -2706,8 +2732,6 @@ ROM_START( drktnjr ) ROM_REGION( 0x1000, "sound", 0 ) /* sound */ /* one is used for dkong conversions, the other one for dkongjr conversions */ ROM_LOAD( "2716.3h1", 0x0000, 0x0800, CRC(2a6ec016) SHA1(c95e185a39c8029f00798ce0a00759a4deb45677) ) /* dkongjr */ - //ROM_RELOAD( 0x0800, 0x0800 ) - //ROM_FILL( 0x0800, 0x0800, 0xFF ) ROM_REGION( 0x1000, "gfx1", ROMREGION_DISPOSE ) ROM_LOAD( "2716.3n", 0x0000, 0x0800, CRC(ea0e7f9a) SHA1(a8e2b43e15281d45e414eaae98e5248bad79c41b) ) @@ -2825,10 +2849,10 @@ ROM_START( shootgal ) ROM_LOAD( "sg-01-0", 0x0000, 0x0800, CRC(f055a624) SHA1(5dfe89d7271092e665cdd5cd59d15a2b70f92f43) ) ROM_REGION( 0x1800, "tms", 0 ) - ROM_LOAD( "sg-01snd", 0x0000, 0x1000, CRC(644a0728) SHA1(e249fd57bc49572a2246aaf7c68a547f319f51bc) ) //sg-01-snd - ROM_LOAD( "sg-01spk", 0x1000, 0x0800, CRC(aacaf730) SHA1(cd562093ab8931d165cb0877e332474fce131c67) ) //sg-01-spk + ROM_LOAD( "sg-01snd", 0x0000, 0x1000, CRC(644a0728) SHA1(e249fd57bc49572a2246aaf7c68a547f319f51bc) ) /* sg-01-snd */ + ROM_LOAD( "sg-01spk", 0x1000, 0x0800, CRC(aacaf730) SHA1(cd562093ab8931d165cb0877e332474fce131c67) ) /* sg-01-spk */ - ROM_REGION( 0x2000, "user2", 0 ) // gun proms? + ROM_REGION( 0x2000, "user2", 0 ) /* gun proms? */ ROM_LOAD( "sg-1", 0x0000, 0x0200, CRC(fda82517) SHA1(b36bac69b6f8218b280aae59133ea0d22d7a99f6) ) ROM_LOAD( "sg-2", 0x0200, 0x091d, CRC(6e065613) SHA1(26d048af5c302f921de8e2c1bc7c7bf48dc21b5a) ) diff --git a/src/mame/includes/dkong.h b/src/mame/includes/dkong.h index d60626618dd..cdf9a888f18 100644 --- a/src/mame/includes/dkong.h +++ b/src/mame/includes/dkong.h @@ -47,9 +47,9 @@ #define HARDWARE_TRS02 2 #define HARDWARE_TKG02 3 -#define DK2B_PALETTE_LENGTH (256+256+8+1) // (256) -#define DK4B_PALETTE_LENGTH (256+256+8+1) // (256) -#define DK3_PALETTE_LENGTH (256+256+8+1) // (256) +#define DK2B_PALETTE_LENGTH (256+256+8+1) /* (256) */ +#define DK4B_PALETTE_LENGTH (256+256+8+1) /* (256) */ +#define DK3_PALETTE_LENGTH (256+256+8+1) /* (256) */ #define RS_PALETTE_LENGTH (256+256+8+1) typedef struct _dkong_state dkong_state; @@ -61,8 +61,6 @@ struct _dkong_state UINT8 hardware_type; /* sound state */ - UINT8 page,mcustatus; - UINT8 portT; /* video state */ tilemap *bg_tilemap; @@ -91,8 +89,6 @@ struct _dkong_state /* Save state relevant */ UINT8 gfx_bank, palette_bank; UINT8 grid_on; - UINT8 snd02_enable; - UINT8 sig_ansn; UINT16 grid_col; UINT8 sprite_bank; UINT8 dma_latch; @@ -105,9 +101,6 @@ struct _dkong_state /*----------- defined in video/dkong.c -----------*/ -WRITE8_HANDLER( radarscp_snd02_w ); /* to daisy chain sound 02 signal */ -WRITE8_HANDLER( radarsc1_ansn_w ); /* to daisy chain sound 02 signal */ - WRITE8_HANDLER( radarscp_grid_enable_w ); WRITE8_HANDLER( radarscp_grid_color_w ); WRITE8_HANDLER( dkong_flipscreen_w ); @@ -131,18 +124,8 @@ VIDEO_UPDATE( spclforc ); /*----------- defined in audio/dkong.c -----------*/ -READ8_HANDLER( dkong_audio_status_r ); WRITE8_HANDLER( dkong_audio_irq_w ); -WRITE8_HANDLER( dkong_snd_disc_w ); -WRITE8_HANDLER( dkong_sh_tuneselect_w ); - -WRITE8_HANDLER( dkongjr_sh_test6_w ); -WRITE8_HANDLER( dkongjr_sh_tuneselect_w ); - -WRITE8_HANDLER( dkongjr_snd_w1 ); -WRITE8_HANDLER( dkongjr_snd_w2 ); - MACHINE_DRIVER_EXTERN( radarscp_audio ); MACHINE_DRIVER_EXTERN( dkong2b_audio ); MACHINE_DRIVER_EXTERN( dkongjr_audio ); diff --git a/src/mame/video/dkong.c b/src/mame/video/dkong.c index 8e6d8b474f1..2be0c44406f 100644 --- a/src/mame/video/dkong.c +++ b/src/mame/video/dkong.c @@ -10,6 +10,7 @@ #include "driver.h" #include "video/resnet.h" #include "includes/dkong.h" +#include "machine/latch8.h" #define RADARSCP_BCK_COL_OFFSET 256 #define RADARSCP_GRID_COL_OFFSET (RADARSCP_BCK_COL_OFFSET + 256) @@ -60,13 +61,13 @@ static const double cd4049_al = 0.01; static const res_net_decode_info dkong_decode_info = { - 2, // there may be two proms needed to construct color - 0, // start at 0 - 255, // end at 255 - // R, G, B, R, G, B - { 256, 256, 0, 0, 0, 0}, // offsets - { 1, -2, 0, 0, 2, 0}, // shifts - {0x07,0x04,0x03,0x00,0x03,0x00} // masks + 2, /* there may be two proms needed to construct color */ + 0, /* start at 0 */ + 255, /* end at 255 */ + /* R, G, B, R, G, B */ + { 256, 256, 0, 0, 0, 0}, /* offsets */ + { 1, -2, 0, 0, 2, 0}, /* shifts */ + {0x07,0x04,0x03,0x00,0x03,0x00} /* masks */ }; static const res_net_info dkong_net_info = @@ -75,7 +76,7 @@ static const res_net_info dkong_net_info = { { RES_NET_AMP_DARLINGTON, 470, 0, 3, { 1000, 470, 220 } }, { RES_NET_AMP_DARLINGTON, 470, 0, 3, { 1000, 470, 220 } }, - { RES_NET_AMP_EMITTER, 680, 0, 2, { 470, 220, 0 } } // dkong + { RES_NET_AMP_EMITTER, 680, 0, 2, { 470, 220, 0 } } /* dkong */ } }; @@ -91,13 +92,13 @@ static const res_net_info dkong_net_bck_info = static const res_net_decode_info dkong3_decode_info = { - 1, // one prom needed to contruct color - 0, // start at 0 - 255, // end at 255 - // R, G, B - { 0, 0, 512 }, // offsets - { 4, 0, 0 }, // shifts - {0x0F,0x0F,0x0F } // masks + 1, /* one prom needed to contruct color */ + 0, /* start at 0 */ + 255, /* end at 255 */ + /* R, G, B */ + { 0, 0, 512 }, /* offsets */ + { 4, 0, 0 }, /* shifts */ + {0x0F,0x0F,0x0F } /* masks */ }; static const res_net_info dkong3_net_info = @@ -124,7 +125,7 @@ static const res_net_info radarscp_net_info = { { RES_NET_AMP_DARLINGTON, 470, 0, 3, { 1000, 470, 220 } }, { RES_NET_AMP_DARLINGTON, 470, 0, 3, { 1000, 470, 220 } }, - { RES_NET_AMP_DARLINGTON, 680, 150000, 2, { 470, 220, 0 } } // radarscp + { RES_NET_AMP_DARLINGTON, 680, 150000, 2, { 470, 220, 0 } } /* radarscp */ } }; @@ -134,7 +135,7 @@ static const res_net_info radarscp_net_bck_info = { { RES_NET_AMP_DARLINGTON, 470, 0, 0, { 0 } }, { RES_NET_AMP_DARLINGTON, 470, 0, 0, { 0 } }, - { RES_NET_AMP_DARLINGTON, 680, 150000, 0, { 0 } } // radarscp + { RES_NET_AMP_DARLINGTON, 680, 150000, 0, { 0 } } /* radarscp */ } }; @@ -163,8 +164,8 @@ static const res_net_info radarscp_stars_net_info = RES_NET_VCC_5V | RES_NET_VBIAS_5V | RES_NET_VIN_TTL_OUT | RES_NET_MONITOR_SANYO_EZV20, { { RES_NET_AMP_DARLINGTON, 4700, 470, 0, { 0 } }, - { RES_NET_AMP_DARLINGTON, 1, 0, 0, { 0 } }, // dummy - { RES_NET_AMP_DARLINGTON, 1, 0, 0, { 0 } }, // dummy + { RES_NET_AMP_DARLINGTON, 1, 0, 0, { 0 } }, /* dummy */ + { RES_NET_AMP_DARLINGTON, 1, 0, 0, { 0 } }, /* dummy */ } }; @@ -174,9 +175,9 @@ static const res_net_info radarscp_blue_net_info = { RES_NET_VCC_5V | RES_NET_VBIAS_5V | RES_NET_VIN_VCC | RES_NET_MONITOR_SANYO_EZV20, { - { RES_NET_AMP_DARLINGTON, 470, 4700, 0, { 0 } }, // bias/gnd exist in schematics, readable in TKG3 schematics - { RES_NET_AMP_DARLINGTON, 470, 4700, 0, { 0 } }, // bias/gnd exist in schematics, readable in TKG3 schematics - { RES_NET_AMP_DARLINGTON, 0, 0, 8, { 128,64,32,16,8,4,2,1 } }, // dummy + { RES_NET_AMP_DARLINGTON, 470, 4700, 0, { 0 } }, /* bias/gnd exist in schematics, readable in TKG3 schematics */ + { RES_NET_AMP_DARLINGTON, 470, 4700, 0, { 0 } }, /* bias/gnd exist in schematics, readable in TKG3 schematics */ + { RES_NET_AMP_DARLINGTON, 0, 0, 8, { 128,64,32,16,8,4,2,1 } }, /* dummy */ } }; @@ -186,9 +187,9 @@ static const res_net_info radarscp_grid_net_info = { RES_NET_VCC_5V | RES_NET_VBIAS_5V | RES_NET_VIN_TTL_OUT | RES_NET_MONITOR_SANYO_EZV20, { - { RES_NET_AMP_DARLINGTON, 0, 0, 1, { 1 } }, // dummy - { RES_NET_AMP_DARLINGTON, 0, 0, 1, { 1 } }, // dummy - { RES_NET_AMP_DARLINGTON, 0, 0, 1, { 1 } }, // dummy + { RES_NET_AMP_DARLINGTON, 0, 0, 1, { 1 } }, /* dummy */ + { RES_NET_AMP_DARLINGTON, 0, 0, 1, { 1 } }, /* dummy */ + { RES_NET_AMP_DARLINGTON, 0, 0, 1, { 1 } }, /* dummy */ } }; @@ -210,7 +211,7 @@ PALETTE_INIT( dkong2b) /* Now treat tri-state black background generation */ for (i=0;i<256;i++) - if ( (i & 0x03) == 0x00 ) // NOR => CS=1 => Tristate => real black + if ( (i & 0x03) == 0x00 ) /* NOR => CS=1 => Tristate => real black */ { int r,g,b; r = compute_res_net( 1, 0, &dkong_net_bck_info ); @@ -250,7 +251,7 @@ PALETTE_INIT( dkong4b ) /* Now treat tri-state black background generation */ for (i=0;i<256;i++) - if ( (i & 0x03) == 0x00 ) // NOR => CS=1 => Tristate => real black + if ( (i & 0x03) == 0x00 ) /* NOR => CS=1 => Tristate => real black */ { r = compute_res_net( 1, 0, &radarscp_net_bck_info ); g = compute_res_net( 1, 1, &radarscp_net_bck_info ); @@ -288,7 +289,7 @@ PALETTE_INIT( radarscp ) /* Now treat tri-state black background generation */ for (i=0;i<256;i++) - if ( (i & 0x03) == 0x00 ) // NOR => CS=1 => Tristate => real black + if ( (i & 0x03) == 0x00 ) /* NOR => CS=1 => Tristate => real black */ { r = compute_res_net( 1, 0, &radarscp_net_bck_info ); g = compute_res_net( 1, 1, &radarscp_net_bck_info ); @@ -352,7 +353,7 @@ PALETTE_INIT( radarsc1 ) /* Now treat tri-state black background generation */ for (i=0;i<256;i++) - if ( (i & 0x03) == 0x00 ) // NOR => CS=1 => Tristate => real black + if ( (i & 0x03) == 0x00 ) /* NOR => CS=1 => Tristate => real black */ { r = compute_res_net( 0, 0, &radarsc1_net_info ); g = compute_res_net( 0, 1, &radarsc1_net_info ); @@ -480,20 +481,6 @@ WRITE8_HANDLER( dkong_videoram_w ) } } -WRITE8_HANDLER( radarscp_snd02_w ) -{ - dkong_state *state = machine->driver_data; - - state->snd02_enable = data & 0x01; -} - -WRITE8_HANDLER( radarsc1_ansn_w ) -{ - dkong_state *state = machine->driver_data; - - state->sig_ansn = data & 0x01; -} - WRITE8_HANDLER( dkongjr_gfxbank_w ) { dkong_state *state = machine->driver_data; @@ -547,7 +534,7 @@ WRITE8_HANDLER( radarscp_grid_color_w ) dkong_state *state = machine->driver_data; state->grid_col = (data & 0x07) ^ 0x07; - //popmessage("Gridcol: %d", state->grid_col); + /* popmessage("Gridcol: %d", state->grid_col); */ } WRITE8_HANDLER( dkong_flipscreen_w ) @@ -716,17 +703,20 @@ INLINE double CD4049(running_machine *machine, double x) * a period of roughly 4.4 ms */ -#define RC1 (2.2e3 * 22e-6) // 22e-6; +#define RC1 (2.2e3 * 22e-6) /* 22e-6; */ #define RC2 (10e3 * 33e-6) #define RC31 (18e3 * 33e-6) #define RC32 ((18e3 + 68e3) * 33e-6) #define RC4 (90e3 * 0.47e-6) #define dt (1./60./(double) VTOTAL) -#define period2 (((INT64)(PIXEL_CLOCK) * ( 33L * 68L )) / (INT32)10000000L / 3) // period/2 in pixel ... +#define period2 (((INT64)(PIXEL_CLOCK) * ( 33L * 68L )) / (INT32)10000000L / 3) /* period/2 in pixel ... */ static void radarscp_step(running_machine *machine, int line_cnt) { dkong_state *state = machine->driver_data; + const device_config *dev6h = devtag_get_device(machine, LATCH8, "ls259.6h"); + const device_config *devvp2 = devtag_get_device(machine, LATCH8, "virtual_p2"); + /* Condensator is illegible in schematics for TRS2 board. * TRS1 board states 3.3u. */ @@ -753,13 +743,15 @@ static void radarscp_step(running_machine *machine, int line_cnt) if ( ( !(line_cnt & 0x40) && ((line_cnt+1) & 0x40) ) && (mame_rand(machine) > RAND_MAX/2)) state->sig30Hz = (1-state->sig30Hz); - state->rflip_sig = state->snd02_enable & state->sig30Hz; + /* Now mix with SND02 (sound 2) line - on 74ls259, bit2 */ + state->rflip_sig = latch8_bit2_r(dev6h, 0) & state->sig30Hz; + sig = state->rflip_sig ^ ((line_cnt & 0x80)>>7); if (state->hardware_type == HARDWARE_TRS01) state->rflip_sig = !state->rflip_sig; - if (sig) // 128VF + if (sig) /* 128VF */ diff = (0.0 - cv1); else diff = (3.4 - cv1); @@ -781,8 +773,12 @@ static void radarscp_step(running_machine *machine, int line_cnt) state->blue_level = (int)(vg3/5.0*255); - // Grid signal - if (state->grid_on && state->sig_ansn) + /* + * Grid signal + * + * Mixed with ANS line (bit 5) from Port B of 8039 + */ + if (state->grid_on && latch8_bit5_r(devvp2, 0)) { diff = (0.0 - cv3); diff = diff - diff*exp(0.0 - (1.0/RC32 * dt) ); @@ -798,7 +794,7 @@ static void radarscp_step(running_machine *machine, int line_cnt) diff = diff - diff*exp(0.0 - (1.0/RC4 * dt) ); cv4 += diff; - if (CD4049(machine, CD4049(machine, vg2 - cv4))>2.4/5.0) //TTL - Level + if (CD4049(machine, CD4049(machine, vg2 - cv4))>2.4/5.0) /* TTL - Level */ state->grid_sig = 0; else state->grid_sig = 1; @@ -831,7 +827,7 @@ static void radarscp_draw_background(running_machine *machine, dkong_state *stat { pixel = BITMAP_ADDR16(bitmap, y, x); draw_ok = !(*pixel & 0x01) && !(*pixel & 0x02); - if (state->hardware_type == HARDWARE_TRS01) // Check again from schematics + if (state->hardware_type == HARDWARE_TRS01) /* Check again from schematics */ draw_ok = draw_ok && !((htable[ (!state->rflip_sig<<7) | (x>>2)] >>2) & 0x01); if (draw_ok) *pixel = *(BITMAP_ADDR16(state->bg_bits, y, x)); @@ -930,7 +926,6 @@ static VIDEO_START( dkong_base ) state->gfx_bank = 0; state->palette_bank = 0; state->sprite_bank = 0; - state->sig_ansn = 1; state->vidhw = -1; state_save_register_global(state->gfx_bank); @@ -938,8 +933,6 @@ static VIDEO_START( dkong_base ) state_save_register_global(state->sprite_bank); state_save_register_global(state->grid_on); - state_save_register_global(state->snd02_enable); - state_save_register_global(state->sig_ansn); state_save_register_global(state->grid_col); state_save_register_global(state->flip); } |