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