1 /*
2 various early SNK games (1983-1985)
3 - Marvin's Maze
4 - Vanguard II
5 - Mad Crasher
6
7 driver by Phil Stroffolino
8
9 Known Issues:
10 Mad Crasher fails the ROM test, but ROMs are verified to be good (reason's unknown)
11 Mad Crasher sound effects aren't being played (fixed)
12 Vanguard II crashes under dos with sound enabled (cannot verify)
13 Marvin's maze crashes under dos with sound enabled, hangs with sound disabled (cannot verify)
14
15
16 Change Log
17 ----------
18
19 AT08XX03:
20 - added shadows
21 - fixed Mad Crasher bad background, sound effects and foreground priority.
22 (great now I can fall under the skyway like I did at Chuck'n Cheese;)
23 - fixed Vanguard2 scroll offsets
24 - tuned music tempo and wavegen frequency
25 */
26
27 #include "driver.h"
28 #include "vidhrdw/generic.h"
29 #include "cpu/z80/z80.h"
30 #include "snk.h"
31
32 #define CREDITS "Phil Stroffolino\nTim Lindquist\nCarlos A. Lozano"
33
34
35 /***************************************************************************
36 **
37 ** CPUA and CPUB communicate through shared RAM.
38 **
39 ***************************************************************************/
40
41 extern READ_HANDLER( marvins_background_ram_r );
42 extern WRITE_HANDLER( marvins_background_ram_w );
43
44 extern READ_HANDLER( marvins_foreground_ram_r );
45 extern WRITE_HANDLER( marvins_foreground_ram_w );
46
47 extern READ_HANDLER( marvins_text_ram_r );
48 extern WRITE_HANDLER( marvins_text_ram_w );
49
50 extern READ_HANDLER( marvins_spriteram_r );
51 extern WRITE_HANDLER( marvins_spriteram_w );
52
53
54 /***************************************************************************
55 **
56 ** Video Driver
57 **
58 ***************************************************************************/
59
60 extern VIDEO_START( marvins );
61 extern VIDEO_UPDATE( marvins );
62 extern VIDEO_UPDATE( madcrash );
63
64 extern WRITE_HANDLER( marvins_palette_bank_w );
65
66
67 /***************************************************************************
68 **
69 ** Interrupt Handling
70 **
71 ** CPUA can trigger an interrupt on CPUB, and CPUB can trigger an interrupt
72 ** on CPUA. Each CPU must re-enable interrupts on itself.
73 **
74 ***************************************************************************/
75
76 /* see drivers\snk.c*/
77
78
79 /***************************************************************************
80 **
81 ** Sound System
82 **
83 ** The sound CPU is a slave, with communication.
84 **
85 ** Sound Chips: PSGX2 + "Wave Generater"
86 **
87 ** The Custom Wave Generator is controlled by 6 bytes
88 **
89 ** The first pair of registers (0x8002, 0x8003) appear to define frequency
90 ** as a fraction: RAM[0x8003]/RAM[0x8002].
91 **
92 ** (0x8004, 0x8005, 0x8006, 0x8007) are currently unmapped. Probably they
93 ** control the shape of the wave being played.
94 **
95 ** snkwave_interface is currently implemented with the "namco" sound component.
96 **
97 ***************************************************************************/
98
99 extern WRITE_HANDLER( snkwave_w );
100
101 static int sound_cpu_busy;
102
103 static struct namco_interface snkwave_interface =
104 {
105 8000000/256, /* (wave generator has a 8MHz clock near it) */
106 1, /* number of voices */
107 10, /* playback volume */
108 -1 /* memory region */
109 };
110
111 static struct AY8910interface ay8910_interface =
112 {
113 2, /* number of chips */
114 2000000, /* 2 MHz */
115 { 25,25 },
116 { 0 },
117 { 0 },
118 { 0 },
119 { 0 }
120 };
121
init_sound(int busy_bit)122 static void init_sound( int busy_bit )
123 {
124 snk_sound_busy_bit = busy_bit;
125 sound_cpu_busy = 0;
126 }
127
WRITE_HANDLER(sound_command_w)128 static WRITE_HANDLER( sound_command_w )
129 {
130 sound_cpu_busy = snk_sound_busy_bit;
131 soundlatch_w(0, data);
132 cpu_set_irq_line(2, 0, HOLD_LINE);
133 }
134
READ_HANDLER(sound_command_r)135 static READ_HANDLER( sound_command_r )
136 {
137 sound_cpu_busy = 0;
138 return(soundlatch_r(0));
139 }
140
READ_HANDLER(sound_nmi_ack_r)141 static READ_HANDLER( sound_nmi_ack_r )
142 {
143 cpu_set_nmi_line(2, CLEAR_LINE);
144 return 0;
145 }
146
147 /* this input port has one of its bits mapped to sound CPU status */
READ_HANDLER(marvins_port_0_r)148 static READ_HANDLER( marvins_port_0_r )
149 {
150 return(input_port_0_r(0) | sound_cpu_busy);
151 }
152
MEMORY_READ_START(readmem_sound)153 static MEMORY_READ_START( readmem_sound )
154 { 0x0000, 0x3fff, MRA_ROM },
155 { 0x4000, 0x4000, sound_command_r },
156 { 0xa000, 0xa000, sound_nmi_ack_r },
157 { 0xe000, 0xe7ff, MRA_RAM },
158 MEMORY_END
159
160 static MEMORY_WRITE_START( writemem_sound )
161 { 0x0000, 0x3fff, MWA_ROM, &namco_wavedata }, /* silly hack - this shouldn't be here */
162 { 0x8000, 0x8000, AY8910_control_port_0_w },
163 { 0x8001, 0x8001, AY8910_write_port_0_w },
164 { 0x8002, 0x8007, snkwave_w },
165 { 0x8008, 0x8008, AY8910_control_port_1_w },
166 { 0x8009, 0x8009, AY8910_write_port_1_w },
167 { 0xe000, 0xe7ff, MWA_RAM },
168 MEMORY_END
169
170 static PORT_READ_START( readport_sound )
171 { 0x0000, 0x0000, MRA_NOP },
172 PORT_END
173
174
175 /***************************************************************************
176 **
177 ** Memory Maps for CPUA, CPUB
178 **
179 ** Shared RAM is shuffled in Mad Crasher/Vanguard II compared to
180 ** Marvin's Maze.
181 **
182 ** A few ports are mapped differently for each game.
183 **
184 ***************************************************************************/
185
186 static MEMORY_READ_START( marvins_readmem_CPUA )
187 { 0x0000, 0x5fff, MRA_ROM },
188 { 0x8000, 0x8000, marvins_port_0_r }, /* coin input, start, sound CPU status */
189 { 0x8100, 0x8100, input_port_1_r }, /* player #1 controls */
190 { 0x8200, 0x8200, input_port_2_r }, /* player #2 controls */
191 { 0x8400, 0x8400, input_port_3_r }, /* dipswitch#1 */
192 { 0x8500, 0x8500, input_port_4_r }, /* dipswitch#2 */
193 { 0x8700, 0x8700, snk_cpuB_nmi_trigger_r },
194 { 0x8000, 0xffff, MRA_RAM },
195 MEMORY_END
196
197 static MEMORY_WRITE_START( marvins_writemem_CPUA )
198 { 0x0000, 0x5fff, MWA_ROM },
199 { 0x6000, 0x6000, marvins_palette_bank_w },
200 { 0x8300, 0x8300, sound_command_w },
201 { 0x8600, 0x8600, MWA_RAM }, /* video attribute*/
202 { 0x8700, 0x8700, snk_cpuA_nmi_ack_w },
203 { 0xc000, 0xcfff, MWA_RAM, &spriteram },
204 { 0xd000, 0xdfff, marvins_background_ram_w, &spriteram_3 },
205 { 0xe000, 0xefff, marvins_foreground_ram_w, &spriteram_2 },
206 { 0xf000, 0xffff, marvins_text_ram_w, &videoram },
207 MEMORY_END
208
209 static MEMORY_READ_START( marvins_readmem_CPUB )
210 { 0x0000, 0x5fff, MRA_ROM },
211 { 0x8700, 0x8700, snk_cpuA_nmi_trigger_r },
212 { 0xc000, 0xcfff, marvins_spriteram_r },
213 { 0xd000, 0xdfff, marvins_background_ram_r },
214 { 0xe000, 0xefff, marvins_foreground_ram_r },
215 { 0xf000, 0xffff, marvins_text_ram_r },
216 MEMORY_END
217
218 static MEMORY_WRITE_START( marvins_writemem_CPUB )
219 { 0x0000, 0x5fff, MWA_ROM },
220 { 0x8700, 0x8700, snk_cpuB_nmi_ack_w },
221 { 0xc000, 0xcfff, marvins_spriteram_w },
222 { 0xd000, 0xdfff, marvins_background_ram_w },
223 { 0xe000, 0xefff, marvins_foreground_ram_w },
224 { 0xf000, 0xffff, marvins_text_ram_w },
225 MEMORY_END
226
227
228 static MEMORY_READ_START( madcrash_readmem_CPUA )
229 { 0x0000, 0x7fff, MRA_ROM },
230 { 0x8000, 0x8000, marvins_port_0_r }, /* coin input, start, sound CPU status */
231 { 0x8100, 0x8100, input_port_1_r }, /* player #1 controls */
232 { 0x8200, 0x8200, input_port_2_r }, /* player #2 controls */
233 { 0x8400, 0x8400, input_port_3_r }, /* dipswitch#1 */
234 { 0x8500, 0x8500, input_port_4_r }, /* dipswitch#2 */
235 { 0x8700, 0x8700, snk_cpuB_nmi_trigger_r },
236 { 0x8000, 0xffff, MRA_RAM },
237 MEMORY_END
238
239 static MEMORY_WRITE_START( madcrash_writemem_CPUA )
240 { 0x0000, 0x7fff, MWA_ROM },
241 { 0x8300, 0x8300, sound_command_w },
242 { 0x8600, 0x86ff, MWA_RAM }, /* video attribute*/
243 { 0x8700, 0x8700, snk_cpuA_nmi_ack_w },
244 /* { 0xc800, 0xc800, marvins_palette_bank_w }, */ /* palette bank switch (c8f1 for Vanguard)*/
245 { 0xc800, 0xc8ff, MWA_RAM },
246 { 0xc000, 0xcfff, MWA_RAM, &spriteram },
247 { 0xd000, 0xdfff, marvins_background_ram_w, &spriteram_3 },
248 { 0xe000, 0xefff, marvins_foreground_ram_w, &spriteram_2 },
249 { 0xf000, 0xffff, marvins_text_ram_w, &videoram },
250 MEMORY_END
251
252 static MEMORY_READ_START( madcrash_readmem_CPUB )
253 { 0x0000, 0x9fff, MRA_ROM },
254 { 0xc000, 0xcfff, marvins_foreground_ram_r },
255 { 0xd000, 0xdfff, marvins_text_ram_r },
256 { 0xe000, 0xefff, marvins_spriteram_r },
257 { 0xf000, 0xffff, marvins_background_ram_r },
258 MEMORY_END
259
260 static MEMORY_WRITE_START( madcrash_writemem_CPUB )
261 { 0x0000, 0x7fff, MWA_ROM },
262 { 0x8700, 0x8700, snk_cpuB_nmi_ack_w }, /* Vangaurd II */
263 { 0x8000, 0x9fff, MWA_ROM }, /* extra ROM for Mad Crasher */
264 { 0xa000, 0xa000, snk_cpuB_nmi_ack_w }, /* Mad Crasher */
265 { 0xc000, 0xcfff, marvins_foreground_ram_w },
266 { 0xd000, 0xdfff, marvins_text_ram_w },
267 { 0xe000, 0xefff, marvins_spriteram_w },
268 { 0xf000, 0xffff, marvins_background_ram_w },
269 MEMORY_END
270
271
272 INPUT_PORTS_START( marvins )
273 PORT_START
274 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
275 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
276 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 )
277 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
278 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
279 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
280 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* sound CPU status */
281 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
282
283 PORT_START /* player#1 controls */
284 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
285 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
286 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
287 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
288 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
289 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
290 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
291
292 PORT_START /* player#2 controls */
293 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
294 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
295 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
296 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
297 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
298 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
299 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
300
301 PORT_START /* DSW1 */
302 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
303 PORT_DIPSETTING( 0x00, "1" )
304 PORT_DIPSETTING( 0x01, "2" )
305 PORT_DIPSETTING( 0x02, "3" )
306 PORT_DIPSETTING( 0x03, "5" )
307 PORT_BITX(0x04, 0x04, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Infinite Lives", IP_JOY_NONE, IP_KEY_NONE )
308 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
309 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
310 PORT_DIPNAME( 0x38, 0x00, DEF_STR( Coinage ) )
311 PORT_DIPSETTING( 0x38, DEF_STR( 5C_1C ) )
312 PORT_DIPSETTING( 0x30, DEF_STR( 3C_1C ) )
313 PORT_DIPSETTING( 0x28, DEF_STR( 2C_1C ) )
314 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
315 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
316 PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) )
317 PORT_DIPSETTING( 0x18, DEF_STR( 1C_5C ) )
318 PORT_DIPSETTING( 0x20, DEF_STR( 1C_6C ) )
319 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) )
320 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
321 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
322 PORT_DIPNAME( 0x80, 0x80, "Freeze" )
323 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
324 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
325
326 PORT_START /* DSW2 */
327 PORT_DIPNAME( 0x07, 0x00, "1st Bonus Life" )
328 PORT_DIPSETTING( 0x00, "10000" )
329 PORT_DIPSETTING( 0x01, "20000" )
330 PORT_DIPSETTING( 0x02, "30000" )
331 PORT_DIPSETTING( 0x03, "40000" )
332 PORT_DIPSETTING( 0x04, "50000" )
333 PORT_DIPSETTING( 0x05, "60000" )
334 PORT_DIPSETTING( 0x06, "70000" )
335 PORT_DIPSETTING( 0x07, "80000" )
336 PORT_DIPNAME( 0x18, 0x08, "2nd Bonus Life" )
337 PORT_DIPSETTING( 0x08, "1st bonus*2" )
338 PORT_DIPSETTING( 0x10, "1st bonus*3" )
339 PORT_DIPSETTING( 0x18, "1st bonus*4" )
340 PORT_DIPSETTING( 0x00, "None" )
341 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
342 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
343 PORT_DIPSETTING( 0x20, DEF_STR( On ) )
344 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
345 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
346 PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) )
347 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
348 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
349 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
350 INPUT_PORTS_END
351
352
353 INPUT_PORTS_START( vangrd2 )
354 PORT_START
355 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
356 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
357 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
358 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
359 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
360 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* sound CPU status */
361 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
362 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
363
364 PORT_START /* player#1 controls */
365 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
366 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
367 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
368 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
369 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 )
370 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
371 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
372
373 PORT_START /* player#2 controls */
374 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
375 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
376 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
377 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
378 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
379 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
380 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
381
382 PORT_START /* DSW1 */
383 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
384 PORT_DIPSETTING( 0x00, DEF_STR( 6C_1C ) )
385 PORT_DIPSETTING( 0x01, DEF_STR( 5C_1C ) )
386 PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
387 PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) )
388 PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
389 PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
390 PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
391 PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
392 PORT_DIPNAME( 0x38, 0x38, DEF_STR( Bonus_Life ) )
393 PORT_DIPSETTING( 0x38, "30000" )
394 PORT_DIPSETTING( 0x30, "40000" )
395 PORT_DIPSETTING( 0x28, "50000" )
396 PORT_DIPSETTING( 0x20, "60000" )
397 PORT_DIPSETTING( 0x18, "70000" )
398 PORT_DIPSETTING( 0x10, "80000" )
399 PORT_DIPSETTING( 0x08, "90000" )
400 PORT_DIPSETTING( 0x00, "100000" )
401 PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Lives ) )
402 PORT_DIPSETTING( 0x00, "1" )
403 PORT_DIPSETTING( 0x40, "2" )
404 PORT_DIPSETTING( 0x80, "3" )
405 PORT_DIPSETTING( 0xc0, "5" )
406
407 PORT_START /* DSW2 */
408 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) )
409 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
410 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
411 PORT_DIPNAME( 0x02, 0x02, "Freeze" )
412 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
413 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
414 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Cabinet ) )
415 PORT_DIPSETTING( 0x04, DEF_STR( Upright ) )
416 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
417 PORT_DIPNAME( 0x08, 0x08, "Language" )
418 PORT_DIPSETTING( 0x08, "English" )
419 PORT_DIPSETTING( 0x00, "Japanese" )
420 PORT_DIPNAME( 0x10, 0x00, "Bonus Life Occurence" )
421 PORT_DIPSETTING( 0x00, "Every bonus" )
422 PORT_DIPSETTING( 0x10, "Bonus only" )
423 PORT_BITX(0x20, 0x20, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Infinite Lives", IP_JOY_NONE, IP_KEY_NONE )
424 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
425 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
426 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) )
427 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
428 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
429 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
430 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
431 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
432 INPUT_PORTS_END
433
434
435 INPUT_PORTS_START( madcrash )
436 PORT_START
437 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
438 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
439 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
440 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
441 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
442 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* sound CPU status */
443 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
444 PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
445
446 PORT_START /* player#1 controls */
447 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
448 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
449 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
450 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
451 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 )
452 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
453 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
454
455 PORT_START /* player#2 controls */
456 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
457 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
458 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
459 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
460 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
461 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
462 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
463
464 PORT_START /* DSW1 */
465 PORT_DIPNAME( 0x01, 0x01, "Unused SW 1-0" )
466 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
467 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
468 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) )
469 PORT_DIPSETTING( 0x02, DEF_STR( Upright ) )
470 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
471 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Lives ) )
472 PORT_DIPSETTING( 0x04, "3" )
473 PORT_DIPSETTING( 0x00, "5" )
474 PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) )
475 /* PORT_DIPSETTING( 0x08, DEF_STR( 5C_1C ) )*/
476 PORT_DIPSETTING( 0x10, DEF_STR( 5C_1C ) )
477 PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) )
478 PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) )
479 PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) )
480 PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) )
481 PORT_DIPSETTING( 0x28, DEF_STR( 1C_3C ) )
482 PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
483 PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) )
484 PORT_DIPSETTING( 0xc0, "20000 60000" )
485 PORT_DIPSETTING( 0x80, "40000 90000" )
486 PORT_DIPSETTING( 0x40, "50000 120000" )
487 PORT_DIPSETTING( 0x00, "None" )
488
489 PORT_START /* DSW2 */
490 PORT_DIPNAME( 0x01, 0x00, "Bonus Life Occurence" )
491 PORT_DIPSETTING( 0x01, "1st, 2nd, then every 2nd" ) /* Check the "Non Bugs" page*/
492 PORT_DIPSETTING( 0x00, "1st and 2nd only" )
493 PORT_DIPNAME( 0x06, 0x04, DEF_STR( Difficulty ) )
494 PORT_DIPSETTING( 0x06, "Easy" )
495 PORT_DIPSETTING( 0x04, "Normal" )
496 PORT_DIPSETTING( 0x02, "Hard" )
497 PORT_DIPSETTING( 0x00, "Hardest" )
498 PORT_DIPNAME( 0x18, 0x10, "Game mode" )
499 PORT_DIPSETTING( 0x18, "Demo Sounds Off" )
500 PORT_DIPSETTING( 0x10, "Demo Sounds On" )
501 PORT_BITX(0, 0x08, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Infinite Lives", IP_JOY_NONE, IP_KEY_NONE )
502 PORT_DIPSETTING( 0x00, "Freeze" )
503 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) )
504 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
505 PORT_DIPSETTING( 0x00, DEF_STR( On ) ) /* Check the "Non Bugs" page*/
506 PORT_DIPNAME( 0x40, 0x40, "Unused SW 2-6" )
507 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
508 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
509 PORT_DIPNAME( 0x80, 0x80, "Unknown SW 2-7" ) /* tested in many places*/
510 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
511 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
512 INPUT_PORTS_END
513
514
515 /***************************************************************************
516 **
517 ** Graphics Layout
518 **
519 ***************************************************************************/
520
521 static struct GfxLayout sprite_layout =
522 {
523 16,16,
524 0x100,
525 3,
526 { 0,0x2000*8,0x4000*8 },
527 {
528 7,6,5,4,3,2,1,0,
529 15,14,13,12,11,10,9,8
530 },
531 {
532 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
533 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16
534 },
535 256
536 };
537
538 static struct GfxLayout tile_layout =
539 {
540 8,8,
541 0x100,
542 4,
543 { 0, 1, 2, 3 },
544 { 4, 0, 12, 8, 20, 16, 28, 24},
545 { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
546 256
547 };
548
549 static struct GfxDecodeInfo marvins_gfxdecodeinfo[] =
550 {
551 { REGION_GFX1, 0, &tile_layout, 0x080, 8 }, /* text layer */
552 { REGION_GFX2, 0, &tile_layout, 0x110, 1 }, /* background */
553 { REGION_GFX3, 0, &tile_layout, 0x100, 1 }, /* foreground */
554 { REGION_GFX4, 0, &sprite_layout, 0x000, 16 }, /* sprites */
555 { -1 }
556 };
557
558
559 /***************************************************************************
560 **
561 ** Machine Driver
562 **
563 ***************************************************************************/
564
565 static MACHINE_DRIVER_START( marvins )
566
567 /* basic machine hardware */
568 MDRV_CPU_ADD(Z80, 3360000) /* 3.36 MHz */
MDRV_CPU_MEMORY(marvins_readmem_CPUA,marvins_writemem_CPUA)569 MDRV_CPU_MEMORY(marvins_readmem_CPUA,marvins_writemem_CPUA)
570 MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
571
572 MDRV_CPU_ADD(Z80, 3360000) /* 3.36 MHz */
573 MDRV_CPU_MEMORY(marvins_readmem_CPUB,marvins_writemem_CPUB)
574 MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
575
576 MDRV_CPU_ADD(Z80, 4000000) /* 4.0 MHz */
577 MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
578 MDRV_CPU_MEMORY(readmem_sound,writemem_sound)
579 MDRV_CPU_PORTS(readport_sound,0)
580 MDRV_CPU_PERIODIC_INT(nmi_line_assert, 244) /* schematics show a separate 244Hz timer*/
581
582 MDRV_FRAMES_PER_SECOND(60.606060)
583 MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
584 MDRV_INTERLEAVE(100)
585
586 /* video hardware */
587 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS)
588 MDRV_SCREEN_SIZE(256+32, 224)
589 MDRV_VISIBLE_AREA(0, 255+32,0, 223)
590 MDRV_GFXDECODE(marvins_gfxdecodeinfo)
591 MDRV_PALETTE_LENGTH((16+2)*16)
592
593 MDRV_VIDEO_START(marvins)
594 MDRV_VIDEO_UPDATE(marvins)
595
596 /* sound hardware */
597 MDRV_SOUND_ADD(AY8910, ay8910_interface)
598 MDRV_SOUND_ADD(NAMCO_15XX, snkwave_interface)
599 MACHINE_DRIVER_END
600
601
602 static MACHINE_DRIVER_START( vangrd2 )
603
604 /* basic machine hardware */
605 MDRV_CPU_ADD_TAG("main", Z80, 3360000) /* 3.36 MHz */
606 MDRV_CPU_MEMORY(madcrash_readmem_CPUA,madcrash_writemem_CPUA)
607 MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
608
609 MDRV_CPU_ADD_TAG("sub", Z80, 3360000) /* 3.36 MHz */
610 MDRV_CPU_MEMORY(madcrash_readmem_CPUB,madcrash_writemem_CPUB)
611 MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
612
613 MDRV_CPU_ADD(Z80, 4000000) /* 4.0 MHz */
614 MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
615 MDRV_CPU_MEMORY(readmem_sound,writemem_sound)
616 MDRV_CPU_PORTS(readport_sound,0)
617 MDRV_CPU_PERIODIC_INT(nmi_line_assert, 244)
618
619 MDRV_FRAMES_PER_SECOND(60.606060)
620 MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
621 MDRV_INTERLEAVE(100)
622
623 /* video hardware */
624 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS)
625 MDRV_SCREEN_SIZE(256+32, 224)
626 MDRV_VISIBLE_AREA(0, 255+32,0, 223)
627 MDRV_GFXDECODE(marvins_gfxdecodeinfo)
628 MDRV_PALETTE_LENGTH((16+2)*16)
629
630 MDRV_VIDEO_START(marvins)
631 MDRV_VIDEO_UPDATE(madcrash)
632
633 /* sound hardware */
634 MDRV_SOUND_ADD(AY8910, ay8910_interface)
635 MDRV_SOUND_ADD(NAMCO_15XX, snkwave_interface)
636 MACHINE_DRIVER_END
637
638
639 static MACHINE_DRIVER_START( madcrash )
640
641 /* basic machine hardware */
642 MDRV_IMPORT_FROM( vangrd2 )
643
644 MDRV_CPU_MODIFY("main")
645 MDRV_CPU_VBLANK_INT(0, 0)
646
647 MDRV_CPU_MODIFY("sub")
648 MDRV_CPU_VBLANK_INT(snk_irq_BA, 1)
649
650 MDRV_INTERLEAVE(300)
651
652 /* video hardware */
653 MDRV_VISIBLE_AREA(16, 16+256-1, 0, 0+216-1)
654 MACHINE_DRIVER_END
655
656
657 /***************************************************************************
658 **
659 ** ROM Loading
660 **
661 ** note:
662 ** Mad Crasher doesn't pass its internal checksum
663 ** Also, some of the background graphics look to be incorrect.
664 **
665 ***************************************************************************/
666
667 ROM_START( marvins )
668 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for CPUA code */
669 ROM_LOAD( "pa1", 0x0000, 0x2000, CRC(0008d791) SHA1(6ffb174b2d680314f74efeef83da9f3ee3e0c753) )
670 ROM_LOAD( "pa2", 0x2000, 0x2000, CRC(9457003c) SHA1(05ecd5c638a12163e2a65bdfcc09875618f792e1) )
671 ROM_LOAD( "pa3", 0x4000, 0x2000, CRC(54c33ecb) SHA1(cfbf9ffc125fbc51f2abef180f36781f9e748bbd) )
672
673 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for CPUB code */
674 ROM_LOAD( "pb1", 0x0000, 0x2000, CRC(3b6941a5) SHA1(9c29870196eaed87f34456fdb06bf7b69c8f489d) )
675
676 ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for sound code */
677 ROM_LOAD( "m1", 0x0000, 0x2000, CRC(2314c696) SHA1(1b84a0c82a4dcff648752f53aa1f0abf5357c5d1) )
678 ROM_LOAD( "m2", 0x2000, 0x2000, CRC(74ba5799) SHA1(c278b0e5c4134f6077d4ae7b51e3c5cba28af1a8) )
679
680 ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE )
681 ROM_LOAD( "s1", 0x0000, 0x2000, CRC(327f70f3) SHA1(078dcc6b4697617d4d833ccd59c6a543b2a88d9e) ) /* characters */
682
683 ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE )
684 ROM_LOAD( "b1", 0x0000, 0x2000, CRC(e528bc60) SHA1(3365ac7cbc57739054bc11e68831be87c0c1a97a) ) /* background tiles */
685
686 ROM_REGION( 0x2000, REGION_GFX3, ROMREGION_DISPOSE )
687 ROM_LOAD( "b2", 0x0000, 0x2000, CRC(e528bc60) SHA1(3365ac7cbc57739054bc11e68831be87c0c1a97a) ) /* foreground tiles */
688
689 ROM_REGION( 0x6000, REGION_GFX4, ROMREGION_DISPOSE )
690 ROM_LOAD( "f3", 0x0000, 0x2000, CRC(e55c9b83) SHA1(04b0d99955e4b11820015b7721ac6399a3d5a829) ) /* sprites */
691 ROM_LOAD( "f2", 0x2000, 0x2000, CRC(8fc2b081) SHA1(fb345965375cb62ec1b947d6c6d071380dc0f395) )
692 ROM_LOAD( "f1", 0x4000, 0x2000, CRC(0bd6b4e5) SHA1(c56747ff2135db734f1b5f6c2906de5ac8f53bbc) )
693
694 ROM_REGION( 0x0c00, REGION_PROMS, 0 )
695 ROM_LOAD( "marvmaze.j1", 0x000, 0x400, CRC(92f5b06d) SHA1(97979ffb6fb065d9c99da43173180fefb2de1886) )
696 ROM_LOAD( "marvmaze.j2", 0x400, 0x400, CRC(d2b25665) SHA1(b913b8b9c5ee0a29b5a115b2432c5706979059cf) )
697 ROM_LOAD( "marvmaze.j3", 0x800, 0x400, CRC(df9e6005) SHA1(8f633f664c3f8e4f6ca94bee74a68c8fda8873e3) )
698 ROM_END
699
700 ROM_START( madcrash )
701 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for CPUA code */
702 ROM_LOAD( "p8", 0x0000, 0x2000, CRC(ecb2fdc9) SHA1(7dd79fbbe286a9f18ed2cae45b1bfab765e549a1) )
703 ROM_LOAD( "p9", 0x2000, 0x2000, CRC(0a87df26) SHA1(327710452bdc5dbb931abc853957225814f224c5) )
704 ROM_LOAD( "p10", 0x4000, 0x2000, CRC(6eb8a87c) SHA1(375377df22b331175aaf1f9eb8d8ad83e8e146f6) )
705
706 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for CPUB code */
707 ROM_LOAD( "p4", 0x0000, 0x2000, CRC(5664d699) SHA1(5bfa57a0f8d718d522003da6513a70d7ca3a87a3) )
708 ROM_LOAD( "p5", 0x2000, 0x2000, CRC(dea2865a) SHA1(0807281e35159ee29fbe2d1aa087b57804f1a14f) )
709 ROM_LOAD( "p6", 0x4000, 0x2000, CRC(e25a9b9c) SHA1(26853611e3898907239e15f1a00f62290889f89b) )
710 ROM_LOAD( "p7", 0x6000, 0x2000, CRC(55b14a36) SHA1(7d5566a6ba285af92ddf560efda60a79f1da84c2) )
711 ROM_LOAD( "p3", 0x8000, 0x2000, CRC(e3c8c2cb) SHA1(b3e39eacd2609ff0fa0f511bff0fc83e6b3970d4) )
712
713 ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for sound code */
714 ROM_LOAD( "p1", 0x0000, 0x2000, CRC(2dcd036d) SHA1(4da42ab1e502fff57f5d5787df406289538fa484) )
715 ROM_LOAD( "p2", 0x2000, 0x2000, CRC(cc30ae8b) SHA1(ffedc747b9e0b616a163ff8bb1def318e522585b) )
716
717 ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE )
718 ROM_LOAD( "p13", 0x0000, 0x2000, CRC(48c4ade0) SHA1(3628abb4f425b8c9d8659c8e4082735168b0f3e9) ) /* characters */
719
720 ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE )
721 ROM_LOAD( "p11", 0x0000, 0x2000, CRC(67174956) SHA1(65a921176294212971c748932a9010f45e1fb499) ) /* background tiles */
722
723 ROM_REGION( 0x2000, REGION_GFX3, ROMREGION_DISPOSE )
724 ROM_LOAD( "p12", 0x0000, 0x2000, CRC(085094c1) SHA1(5c5599d1ed7f8a717ada54bbd28383a22e09a8fe) ) /* foreground tiles */
725
726 ROM_REGION( 0x6000, REGION_GFX4, ROMREGION_DISPOSE )
727 ROM_LOAD( "p14", 0x0000, 0x2000, CRC(07e807bc) SHA1(f651d3a5394ced8e0a1b2be3aa52b3e5a5d84c37) ) /* sprites */
728 ROM_LOAD( "p15", 0x2000, 0x2000, CRC(a74149d4) SHA1(e8011a8d4d1a98a0ffe67fc28ea9fa192ca80321) )
729 ROM_LOAD( "p16", 0x4000, 0x2000, CRC(6153611a) SHA1(b352f92b233761122f74830e46913cc4df800259) )
730
731 ROM_REGION( 0x0c00, REGION_PROMS, 0 )
732 ROM_LOAD( "m3-prom.j3", 0x000, 0x400, CRC(d19e8a91) SHA1(b21fbdb8ed8d0b27c3ec78cf2e115624f69c67e0) )
733 ROM_LOAD( "m2-prom.j4", 0x400, 0x400, CRC(9fc325af) SHA1(a180662f168ba001376f25f5d9205cb119c1ffee) )
734 ROM_LOAD( "m1-prom.j5", 0x800, 0x400, CRC(07678443) SHA1(267951886d8b031dd633dc4823d9bd862a585437) )
735 ROM_END
736
737 ROM_START( vangrd2 )
738 ROM_REGION( 0x10000, REGION_CPU1, 0 )
739 ROM_LOAD( "p1.9a", 0x0000, 0x2000, CRC(bc9eeca5) SHA1(5a737e0f0aa1a3a5296d1e1fec13b34aee970609) )
740 ROM_LOAD( "p3.11a", 0x2000, 0x2000, CRC(3970f69d) SHA1(b0ef7494888804ab5b4002730fb0232a7fd6797b) )
741 ROM_LOAD( "p2.12a", 0x4000, 0x2000, CRC(58b08b58) SHA1(eccc85191d678a0115a113002a43203afd857a5b) )
742 ROM_LOAD( "p4.14a", 0x6000, 0x2000, CRC(a95f11ea) SHA1(8007efb4ad948c8768e474fc77134f3ce52da1d2) )
743
744 ROM_REGION( 0x10000, REGION_CPU2, 0 )
745 ROM_LOAD( "p5.4a", 0x0000, 0x2000, CRC(e4dfd0ba) SHA1(12d45ff147f3ea9c9e898c3831874cd7c1a071b7) )
746 ROM_LOAD( "p6.6a", 0x2000, 0x2000, CRC(894ff00d) SHA1(1c66f327d8e94dc6ac386e11fcc5eb17c9081434) )
747 ROM_LOAD( "p7.7a", 0x4000, 0x2000, CRC(40b4d069) SHA1(56c464bd055125ffc2da02d70137aa5efe5cd8f6) )
748
749 ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for sound code */
750 ROM_LOAD( "p8.6a", 0x0000, 0x2000, CRC(a3daa438) SHA1(4e659ac7e3ebaf85bc3ce5c9946fcf0af23083b4) )
751 ROM_LOAD( "p9.8a", 0x2000, 0x2000, CRC(9345101a) SHA1(b99ad1c2a79df50b0a60fdd43ca466f6cb38445b) )
752
753 ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE )
754 ROM_LOAD( "p15.1e", 0x0000, 0x2000, CRC(85718a41) SHA1(4c9aa1f8b229410414cd67bac8cb10a14bea12f4) ) /* characters */
755
756 ROM_REGION( 0x2000, REGION_GFX2, ROMREGION_DISPOSE )
757 ROM_LOAD( "p13.1a", 0x0000, 0x2000, CRC(912f22c6) SHA1(5042edc80b58f77b3576b5e6eb8c6460c8a35494) ) /* background tiles */
758
759 ROM_REGION( 0x2000, REGION_GFX3, ROMREGION_DISPOSE )
760 ROM_LOAD( "p9", 0x0000, 0x2000, CRC(7aa0b684) SHA1(d52670ec50b1a07d6c2c537f67922063deacdeea) ) /* foreground tiles */
761
762 ROM_REGION( 0x6000, REGION_GFX4, ROMREGION_DISPOSE )
763 ROM_LOAD( "p12.1kl", 0x0000, 0x2000, CRC(8658ea6c) SHA1(d5ea9be2c1776b11abc77c944a653eeb73b27fc8) ) /* sprites */
764 ROM_LOAD( "p11.3kl", 0x2000, 0x2000, CRC(620cd4ec) SHA1(a2fcc3d24d0d3c7cc601620ae7a709f46b613c0f) )
765 ROM_LOAD( "p10.4kl", 0x4000, 0x2000, CRC(5bfc04c0) SHA1(4eb152fdf39cb0024f71d5bdf1bfc79c2b8c2329) )
766
767 ROM_REGION( 0x0c00, REGION_PROMS, 0 )
768 ROM_LOAD( "mb7054.3j", 0x000, 0x400, CRC(506f659a) SHA1(766f1a0dd462eba64546c514004e6542e200d7c3) )
769 ROM_LOAD( "mb7054.4j", 0x400, 0x400, CRC(222133ce) SHA1(109a63c8c44608a8ad9183e7b5d269765cc5f067) )
770 ROM_LOAD( "mb7054.5j", 0x800, 0x400, CRC(2e21a79b) SHA1(1956377c799e0bbd127bf4fae016adc148efe007) )
771 ROM_END
772
773
774 /*******************************************************************************************/
775
776 static DRIVER_INIT( marvins )
777 {
778 init_sound( 0x40 );
779 snk_gamegroup = 0;
780 }
781
DRIVER_INIT(madcrash)782 static DRIVER_INIT( madcrash )
783 {
784 /*
785 The following lines patch out the ROM test (which fails - probably
786 because of bit rot, so the rest of the test mode (what little there
787 is) can be explored.
788
789 unsigned char *mem = memory_region(REGION_CPU1);
790 mem[0x3a5d] = 0; mem[0x3a5e] = 0; mem[0x3a5f] = 0;
791 */
792 init_sound( 0x20 );
793 snk_gamegroup = 1;
794 snk_irq_delay = 1700;
795 }
796
DRIVER_INIT(vangrd2)797 static DRIVER_INIT( vangrd2 )
798 {
799 init_sound( 0x20 );
800 snk_gamegroup = 2;
801 }
802
803
804 GAMEX(1983, marvins, 0, marvins, marvins, marvins, ROT270, "SNK", "Marvin's Maze", GAME_NO_COCKTAIL )
805 GAMEX(1984, madcrash, 0, madcrash, madcrash, madcrash, ROT0, "SNK", "Mad Crasher", GAME_IMPERFECT_GRAPHICS )
806 GAMEX(1984, vangrd2, 0, vangrd2, vangrd2, vangrd2, ROT270, "SNK", "Vanguard II", GAME_NO_COCKTAIL )
807