1 /***************************************************************************
2 
3 Mario Bros memory map (preliminary):
4 
5 driver by Mirko Buffoni
6 
7 
8 0000-5fff ROM
9 6000-6fff RAM
10 7000-73ff ?
11 7400-77ff Video RAM
12 f000-ffff ROM
13 
14 read:
15 7c00      IN0
16 7c80      IN1
17 7f80      DSW
18 
19 *
20  * IN0 (bits NOT inverted)
21  * bit 7 : TEST
22  * bit 6 : START 2
23  * bit 5 : START 1
24  * bit 4 : JUMP player 1
25  * bit 3 : ? DOWN player 1 ?
26  * bit 2 : ? UP player 1 ?
27  * bit 1 : LEFT player 1
28  * bit 0 : RIGHT player 1
29  *
30 *
31  * IN1 (bits NOT inverted)
32  * bit 7 : ?
33  * bit 6 : COIN 2
34  * bit 5 : COIN 1
35  * bit 4 : JUMP player 2
36  * bit 3 : ? DOWN player 2 ?
37  * bit 2 : ? UP player 2 ?
38  * bit 1 : LEFT player 2
39  * bit 0 : RIGHT player 2
40  *
41 *
42  * DSW (bits NOT inverted)
43  * bit 7 : \ difficulty
44  * bit 6 : / 00 = easy  01 = medium  10 = hard  11 = hardest
45  * bit 5 : \ bonus
46  * bit 4 : / 00 = 20000  01 = 30000  10 = 40000  11 = none
47  * bit 3 : \ coins per play
48  * bit 2 : /
49  * bit 1 : \ 00 = 3 lives  01 = 4 lives
50  * bit 0 : / 10 = 5 lives  11 = 6 lives
51  *
52 
53 write:
54 7d00      vertical scroll (pow)
55 7d80      ?
56 7e00      sound
57 7e80-7e82 ?
58 7e83      sprite palette bank select
59 7e84      interrupt enable
60 7e85      ?
61 7f00-7f07 sound triggers
62 
63 
64 I/O ports
65 
66 write:
67 00        ?
68 
69 ***************************************************************************/
70 
71 #include "driver.h"
72 #include "vidhrdw/generic.h"
73 #include "cpu/i8039/i8039.h"
74 
75 static int p[8] = { 0,0xf0,0,0,0,0,0,0 };
76 static int t[2] = { 0,0 };
77 
78 extern WRITE_HANDLER( mario_videoram_w );
79 extern WRITE_HANDLER( mario_gfxbank_w );
80 extern WRITE_HANDLER( mario_palettebank_w );
81 extern WRITE_HANDLER( mario_scroll_w );
82 
83 extern PALETTE_INIT( mario );
84 extern VIDEO_START( mario );
85 extern VIDEO_UPDATE( mario );
86 
87 /*
88  *  from sndhrdw/mario.c
89  */
90 extern WRITE_HANDLER( mario_sh_w );
91 extern WRITE_HANDLER( mario_sh1_w );
92 extern WRITE_HANDLER( mario_sh2_w );
93 extern WRITE_HANDLER( mario_sh3_w );
94 
95 
96 #define ACTIVELOW_PORT_BIT(P,A,D)   ((P & (~(1 << A))) | ((D ^ 1) << A))
97 #define ACTIVEHIGH_PORT_BIT(P,A,D)   ((P & (~(1 << A))) | (D << A))
98 
99 
WRITE_HANDLER(mario_sh_getcoin_w)100 WRITE_HANDLER( mario_sh_getcoin_w )    { t[0] = data; }
WRITE_HANDLER(mario_sh_crab_w)101 WRITE_HANDLER( mario_sh_crab_w )       { p[1] = ACTIVEHIGH_PORT_BIT(p[1],0,data); }
WRITE_HANDLER(mario_sh_turtle_w)102 WRITE_HANDLER( mario_sh_turtle_w )     { p[1] = ACTIVEHIGH_PORT_BIT(p[1],1,data); }
WRITE_HANDLER(mario_sh_fly_w)103 WRITE_HANDLER( mario_sh_fly_w )        { p[1] = ACTIVEHIGH_PORT_BIT(p[1],2,data); }
WRITE_HANDLER(mario_sh_tuneselect_w)104 static WRITE_HANDLER( mario_sh_tuneselect_w ) { soundlatch_w(offset,data); }
105 
READ_HANDLER(mario_sh_p1_r)106 static READ_HANDLER( mario_sh_p1_r )   { return p[1]; }
READ_HANDLER(mario_sh_p2_r)107 static READ_HANDLER( mario_sh_p2_r )   { return p[2]; }
READ_HANDLER(mario_sh_t0_r)108 static READ_HANDLER( mario_sh_t0_r )   { return t[0]; }
READ_HANDLER(mario_sh_t1_r)109 static READ_HANDLER( mario_sh_t1_r )   { return t[1]; }
READ_HANDLER(mario_sh_tune_r)110 static READ_HANDLER( mario_sh_tune_r ) { return soundlatch_r(offset); }
111 
WRITE_HANDLER(mario_sh_sound_w)112 static WRITE_HANDLER( mario_sh_sound_w )
113 {
114 	DAC_data_w(0,data);
115 }
WRITE_HANDLER(mario_sh_p1_w)116 static WRITE_HANDLER( mario_sh_p1_w )
117 {
118 	p[1] = data;
119 }
WRITE_HANDLER(mario_sh_p2_w)120 static WRITE_HANDLER( mario_sh_p2_w )
121 {
122 	p[2] = data;
123 }
WRITE_HANDLER(masao_sh_irqtrigger_w)124 WRITE_HANDLER( masao_sh_irqtrigger_w )
125 {
126 	static int last;
127 
128 
129 	if (last == 1 && data == 0)
130 	{
131 		/* setting bit 0 high then low triggers IRQ on the sound CPU */
132 		cpu_set_irq_line_and_vector(1,0,HOLD_LINE,0xff);
133 	}
134 
135 	last = data;
136 }
137 
MEMORY_READ_START(readmem)138 static MEMORY_READ_START( readmem )
139 	{ 0x0000, 0x5fff, MRA_ROM },
140 	{ 0x6000, 0x6fff, MRA_RAM },
141 	{ 0x7400, 0x77ff, MRA_RAM },	/* video RAM */
142 	{ 0x7c00, 0x7c00, input_port_0_r },	/* IN0 */
143 	{ 0x7c80, 0x7c80, input_port_1_r },	/* IN1 */
144 	{ 0x7f80, 0x7f80, input_port_2_r },	/* DSW */
145 	{ 0xf000, 0xffff, MRA_ROM },
146 MEMORY_END
147 
148 
149 static MEMORY_WRITE_START( writemem )
150 	{ 0x0000, 0x5fff, MWA_ROM },
151 	{ 0x6000, 0x68ff, MWA_RAM },
152 	{ 0x6a80, 0x6fff, MWA_RAM },
153 	{ 0x6900, 0x6a7f, MWA_RAM, &spriteram, &spriteram_size },
154 	{ 0x7400, 0x77ff, mario_videoram_w, &videoram },
155 	{ 0x7c00, 0x7c00, mario_sh1_w }, /* Mario run sample */
156 	{ 0x7c80, 0x7c80, mario_sh2_w }, /* Luigi run sample */
157 	{ 0x7d00, 0x7d00, mario_scroll_w },
158 	{ 0x7e80, 0x7e80, mario_gfxbank_w },
159 	{ 0x7e83, 0x7e83, mario_palettebank_w },
160 	{ 0x7e84, 0x7e84, interrupt_enable_w },
161 	{ 0x7f00, 0x7f00, mario_sh_w },	/* death */
162 	{ 0x7f01, 0x7f01, mario_sh_getcoin_w },
163 	{ 0x7f03, 0x7f03, mario_sh_crab_w },
164 	{ 0x7f04, 0x7f04, mario_sh_turtle_w },
165 	{ 0x7f05, 0x7f05, mario_sh_fly_w },
166 	{ 0x7f00, 0x7f07, mario_sh3_w }, /* Misc discrete samples */
167 	{ 0x7e00, 0x7e00, mario_sh_tuneselect_w },
168 	{ 0x7000, 0x73ff, MWA_NOP },	/* ??? */
169 /*	{ 0x7e85, 0x7e85, MWA_RAM },	 // Sets alternative 1 and 0 /*/
170 	{ 0xf000, 0xffff, MWA_ROM },
171 MEMORY_END
172 
173 static MEMORY_WRITE_START( masao_writemem )
174 	{ 0x0000, 0x5fff, MWA_ROM },
175 	{ 0x6000, 0x68ff, MWA_RAM },
176 	{ 0x6a80, 0x6fff, MWA_RAM },
177 	{ 0x6900, 0x6a7f, MWA_RAM, &spriteram, &spriteram_size },
178 	{ 0x7400, 0x77ff, mario_videoram_w, &videoram },
179 	{ 0x7d00, 0x7d00, mario_scroll_w },
180 	{ 0x7e00, 0x7e00, soundlatch_w },
181 	{ 0x7e80, 0x7e80, mario_gfxbank_w },
182 	{ 0x7e83, 0x7e83, mario_palettebank_w },
183 	{ 0x7e84, 0x7e84, interrupt_enable_w },
184 	{ 0x7000, 0x73ff, MWA_NOP },	/* ??? */
185 	{ 0x7f00, 0x7f00, masao_sh_irqtrigger_w },
186 	{ 0xf000, 0xffff, MWA_ROM },
187 MEMORY_END
188 
189 static PORT_WRITE_START( mario_writeport )
190 	{ 0x00,   0x00,   IOWP_NOP },  /* unknown... is this a trigger? */
191 PORT_END
192 
193 static MEMORY_READ_START( readmem_sound )
194 	{ 0x0000, 0x0fff, MRA_ROM },
195 MEMORY_END
196 static MEMORY_WRITE_START( writemem_sound )
197 	{ 0x0000, 0x0fff, MWA_ROM },
198 MEMORY_END
199 static PORT_READ_START( readport_sound )
200 	{ 0x00,     0xff,     mario_sh_tune_r },
201 	{ I8039_p1, I8039_p1, mario_sh_p1_r },
202 	{ I8039_p2, I8039_p2, mario_sh_p2_r },
203 	{ I8039_t0, I8039_t0, mario_sh_t0_r },
204 	{ I8039_t1, I8039_t1, mario_sh_t1_r },
205 PORT_END
206 static PORT_WRITE_START( writeport_sound )
207 	{ 0x00,     0xff,     mario_sh_sound_w },
208 	{ I8039_p1, I8039_p1, mario_sh_p1_w },
209 	{ I8039_p2, I8039_p2, mario_sh_p2_w },
210 PORT_END
211 
212 
213 
214 INPUT_PORTS_START( mario )
215 	PORT_START      /* IN0 */
216 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
217 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
218 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
219 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
220 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
221 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
222 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
223 	PORT_BITX(0x80, IP_ACTIVE_HIGH, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
224 
225 	PORT_START      /* IN1 */
226 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_PLAYER2 )
227 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_PLAYER2 )
228 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
229 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
230 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
231 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
232 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
233 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
234 
235 	PORT_START      /* DSW0 */
236 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
237 	PORT_DIPSETTING(    0x00, "3" )
238 	PORT_DIPSETTING(    0x01, "4" )
239 	PORT_DIPSETTING(    0x02, "5" )
240 	PORT_DIPSETTING(    0x03, "6" )
241 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coinage ) )
242 	PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
243 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
244 	PORT_DIPSETTING(    0x08, DEF_STR( 1C_2C ) )
245 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_3C ) )
246 	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) )
247 	PORT_DIPSETTING(    0x00, "20000" )
248 	PORT_DIPSETTING(    0x10, "30000" )
249 	PORT_DIPSETTING(    0x20, "40000" )
250 	PORT_DIPSETTING(    0x30, "None" )
251 	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Difficulty ) )
252 	PORT_DIPSETTING(    0x00, "Easy" )
253 	PORT_DIPSETTING(    0x40, "Medium" )
254 	PORT_DIPSETTING(    0x80, "Hard" )
255 	PORT_DIPSETTING(    0xc0, "Hardest" )
256 INPUT_PORTS_END
257 
258 INPUT_PORTS_START( mariojp )
259 	PORT_START      /* IN0 */
260 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
261 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
262 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
263 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
264 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
265 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
266 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
267 	PORT_BITX(0x80, IP_ACTIVE_HIGH, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
268 
269 	PORT_START      /* IN1 */
270 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_PLAYER2 )
271 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_PLAYER2 )
272 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
273 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
274 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
275 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 )
276 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 )	/* doesn't work in game, but does in service mode */
277 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
278 
279 	PORT_START      /* DSW0 */
280 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
281 	PORT_DIPSETTING(    0x00, "3" )
282 	PORT_DIPSETTING(    0x01, "4" )
283 	PORT_DIPSETTING(    0x02, "5" )
284 	PORT_DIPSETTING(    0x03, "6" )
285 	PORT_DIPNAME( 0x1c, 0x00, DEF_STR( Coinage ) )
286 	PORT_DIPSETTING(    0x08, DEF_STR( 3C_1C ) )
287 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )
288 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
289 	PORT_DIPSETTING(    0x18, DEF_STR( 1C_2C ) )
290 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_3C ) )
291 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_4C ) )
292 	PORT_DIPSETTING(    0x14, DEF_STR( 1C_5C ) )
293 	PORT_DIPSETTING(    0x1c, DEF_STR( 1C_6C ) )
294 	PORT_DIPNAME( 0x20, 0x20, "2 Players Game" )
295 	PORT_DIPSETTING(    0x00, "1 Credit" )
296 	PORT_DIPSETTING(    0x20, "2 Credits" )
297 	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Bonus_Life ) )
298 	PORT_DIPSETTING(    0x00, "20000" )
299 	PORT_DIPSETTING(    0x40, "30000" )
300 	PORT_DIPSETTING(    0x80, "40000" )
301 	PORT_DIPSETTING(    0xc0, "None" )
302 INPUT_PORTS_END
303 
304 
305 
306 static struct GfxLayout charlayout =
307 {
308 	8,8,	/* 8*8 characters */
309 	512,	/* 512 characters */
310 	2,	/* 2 bits per pixel */
311 	{ 512*8*8, 0 },	/* the bitplanes are separated */
312 	{ 0, 1, 2, 3, 4, 5, 6, 7 },	/* pretty straightforward layout */
313 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
314 	8*8	/* every char takes 8 consecutive bytes */
315 };
316 
317 
318 static struct GfxLayout spritelayout =
319 {
320 	16,16,	/* 16*16 sprites */
321 	256,	/* 256 sprites */
322 	3,	/* 3 bits per pixel */
323 	{ 2*256*16*16, 256*16*16, 0 },	/* the bitplanes are separated */
324 	{ 0, 1, 2, 3, 4, 5, 6, 7,		/* the two halves of the sprite are separated */
325 			256*16*8+0, 256*16*8+1, 256*16*8+2, 256*16*8+3, 256*16*8+4, 256*16*8+5, 256*16*8+6, 256*16*8+7 },
326 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
327 			8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
328 	16*8	/* every sprite takes 16 consecutive bytes */
329 };
330 
331 
332 
333 static struct GfxDecodeInfo gfxdecodeinfo[] =
334 {
335 	{ REGION_GFX1, 0, &charlayout,      0, 16 },
336 	{ REGION_GFX2, 0, &spritelayout, 16*4, 32 },
337 	{ -1 } /* end of array */
338 };
339 
340 
341 
342 static struct DACinterface dac_interface =
343 {
344 	1,
345 	{ 100 }
346 };
347 
348 static const char *mario_sample_names[] =
349 {
350 	"*mario",
351 
352 	/* 7f01 - 7f07 sounds */
353 	"ice.wav",    /* 0x02 ice appears (formerly effect0.wav) */
354 	"coin.wav",   /* 0x06 coin appears (formerly effect1.wav) */
355 	"skid.wav",   /* 0x07 skid */
356 
357 	/* 7c00 */
358 	"run.wav",        /* 03, 02, 01 - 0x1b */
359 
360 	/* 7c80 */
361 	"luigirun.wav",   /* 03, 02, 01 - 0x1c */
362 
363     0	/* end of array */
364 };
365 
366 static struct Samplesinterface samples_interface =
367 {
368 	3,	/* 3 channels */
369 	25,	/* volume */
370 	mario_sample_names
371 };
372 
373 static struct AY8910interface ay8910_interface =
374 {
375 	1,      /* 1 chip */
376 	14318000/6,	/* ? */
377 	{ 50 },
378 	{ soundlatch_r },
379 	{ 0 },
380 	{ 0 },
381 	{ 0 }
382 };
383 
MEMORY_READ_START(masao_sound_readmem)384 static MEMORY_READ_START( masao_sound_readmem )
385 	{ 0x0000, 0x0fff, MRA_ROM },
386 	{ 0x2000, 0x23ff, MRA_RAM },
387 	{ 0x4000, 0x4000, AY8910_read_port_0_r },
388 MEMORY_END
389 
390 static MEMORY_WRITE_START( masao_sound_writemem )
391 	{ 0x0000, 0x0fff, MWA_ROM },
392 	{ 0x2000, 0x23ff, MWA_RAM },
393 	{ 0x6000, 0x6000, AY8910_control_port_0_w },
394 	{ 0x4000, 0x4000, AY8910_write_port_0_w },
395 MEMORY_END
396 
397 
398 static MACHINE_DRIVER_START( mario )
399 
400 	/* basic machine hardware */
401 	MDRV_CPU_ADD(Z80, 3072000)	/* 3.072 MHz (?) */
402 	MDRV_CPU_MEMORY(readmem,writemem)
403 	MDRV_CPU_PORTS(0,mario_writeport)
404 	MDRV_CPU_VBLANK_INT(nmi_line_pulse,1)
405 
406 	MDRV_CPU_ADD(I8039, 730000)
407 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)         /* 730 kHz */
408 	MDRV_CPU_MEMORY(readmem_sound,writemem_sound)
409 	MDRV_CPU_PORTS(readport_sound,writeport_sound)
410 
411 	MDRV_FRAMES_PER_SECOND(60)
412 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
413 
414 	/* video hardware */
415 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
416 	MDRV_SCREEN_SIZE(32*8, 32*8)
417 	MDRV_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
418 	MDRV_GFXDECODE(gfxdecodeinfo)
419 	MDRV_PALETTE_LENGTH(256)
420 	MDRV_COLORTABLE_LENGTH(16*4+32*8)
421 
422 	MDRV_PALETTE_INIT(mario)
423 	MDRV_VIDEO_START(mario)
424 	MDRV_VIDEO_UPDATE(mario)
425 
426 	/* sound hardware */
427 	MDRV_SOUND_ADD(DAC, dac_interface)
428 	MDRV_SOUND_ADD(SAMPLES, samples_interface)
429 MACHINE_DRIVER_END
430 
431 
432 static MACHINE_DRIVER_START( masao )
433 
434 	/* basic machine hardware */
435 	MDRV_CPU_ADD(Z80, 4000000)        /* 4.000 MHz (?) */
436 	MDRV_CPU_MEMORY(readmem,masao_writemem)
437 	MDRV_CPU_VBLANK_INT(nmi_line_pulse,1)
438 
439 	MDRV_CPU_ADD(Z80,24576000/16)
440 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)	/* ???? */
441 	MDRV_CPU_MEMORY(masao_sound_readmem,masao_sound_writemem)
442 
443 	MDRV_FRAMES_PER_SECOND(60)
444 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
445 
446 	/* video hardware */
447 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
448 	MDRV_SCREEN_SIZE(32*8, 32*8)
449 	MDRV_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
450 	MDRV_GFXDECODE(gfxdecodeinfo)
451 	MDRV_PALETTE_LENGTH(256)
452 	MDRV_COLORTABLE_LENGTH(16*4+32*8)
453 
454 	MDRV_PALETTE_INIT(mario)
455 	MDRV_VIDEO_START(mario)
456 	MDRV_VIDEO_UPDATE(mario)
457 
458 	/* sound hardware */
459 	MDRV_SOUND_ADD(AY8910, ay8910_interface)
460 MACHINE_DRIVER_END
461 
462 
463 
464 /***************************************************************************
465 
466   Game driver(s)
467 
468 ***************************************************************************/
469 
470 ROM_START( mario )
471 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
472 	ROM_LOAD( "mario.7f",     0x0000, 0x2000, CRC(c0c6e014) SHA1(36a04f9ca1c2a583477cb8a6f2ef94e044e08296) )
473 	ROM_LOAD( "mario.7e",     0x2000, 0x2000, CRC(116b3856) SHA1(e372f846d0e5a2b9b47ebd0330293fcc8a12363f) )
474 	ROM_LOAD( "mario.7d",     0x4000, 0x2000, CRC(dcceb6c1) SHA1(b19804e69ce2c98cf276c6055c3a250316b96b45) )
475 	ROM_LOAD( "mario.7c",     0xf000, 0x1000, CRC(4a63d96b) SHA1(b09060b2c84ab77cc540a27b8f932cb60ec8d442) )
476 
477 	ROM_REGION( 0x1000, REGION_CPU2, 0 )	/* sound */
478 	ROM_LOAD( "tma1c-a.6k",   0x0000, 0x1000, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) )
479 
480 	ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE )
481 	ROM_LOAD( "mario.3f",     0x0000, 0x1000, CRC(28b0c42c) SHA1(46749568aff88a28c3b6a1ac423abd1b90742a4d) )
482 	ROM_LOAD( "mario.3j",     0x1000, 0x1000, CRC(0c8cc04d) SHA1(15fae47d701dc1ef15c943cee6aa991776ecffdf) )
483 
484 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
485 	ROM_LOAD( "mario.7m",     0x0000, 0x1000, CRC(22b7372e) SHA1(4a1c1e239cb6d483e76f50d7a3b941025963c6a3) )
486 	ROM_LOAD( "mario.7n",     0x1000, 0x1000, CRC(4f3a1f47) SHA1(0747d693b9482f6dd28b0bc484fd1d3e29d35654) )
487 	ROM_LOAD( "mario.7p",     0x2000, 0x1000, CRC(56be6ccd) SHA1(15a6e16c189d45f72761ebcbe9db5001bdecd659) )
488 	ROM_LOAD( "mario.7s",     0x3000, 0x1000, CRC(56f1d613) SHA1(9af6844dbaa3615433d0595e9e85e72493e31a54) )
489 	ROM_LOAD( "mario.7t",     0x4000, 0x1000, CRC(641f0008) SHA1(589fe108c7c11278fd897f2ded8f0498bc149cfd) )
490 	ROM_LOAD( "mario.7u",     0x5000, 0x1000, CRC(7baf5309) SHA1(d9194ff7b89a18273d37b47228fc7fb7e2a0ed1f) )
491 
492 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
493 	ROM_LOAD( "mario.4p",     0x0000, 0x0200, CRC(afc9bd41) SHA1(90b739c4c7f24a88b6ac5ca29b06c032906a2801) )
494 ROM_END
495 
496 ROM_START( mariojp )
497 	ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
498 	ROM_LOAD( "tma1c-a1.7f",  0x0000, 0x2000, CRC(b64b6330) SHA1(f7084251ac325bbfa3fb804da16a50622e1fd213) )
499 	ROM_LOAD( "tma1c-a2.7e",  0x2000, 0x2000, CRC(290c4977) SHA1(5af266be0ddc883c6548c90e4a9084024a1e91a0) )
500 	ROM_LOAD( "tma1c-a1.7d",  0x4000, 0x2000, CRC(f8575f31) SHA1(710d0e72fcfce700ed2a22fb9c7c392cc76b250b) )
501 	ROM_LOAD( "tma1c-a2.7c",  0xf000, 0x1000, CRC(a3c11e9e) SHA1(d0612b0f8c2ea4e798f551922a04a324f4ed5f3d) )
502 
503 	ROM_REGION( 0x1000, REGION_CPU2, 0 )	/* sound */
504 	ROM_LOAD( "tma1c-a.6k",   0x0000, 0x1000, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) )
505 
506 	ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE )
507 	ROM_LOAD( "tma1v-a.3f",   0x0000, 0x1000, CRC(adf49ee0) SHA1(11fc2cd197bfe3ecb6af55c3c7a326c94988d2bd) )
508 	ROM_LOAD( "tma1v-a.3j",   0x1000, 0x1000, CRC(a5318f2d) SHA1(e42f5e51804195c64a56addb18b7ad12c57bb09a) )
509 
510 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
511 	ROM_LOAD( "tma1v-a.7m",   0x0000, 0x1000, CRC(186762f8) SHA1(711fdd37392656bdd5027e020d51d083ccd7c407) )
512 	ROM_LOAD( "tma1v-a.7n",   0x1000, 0x1000, CRC(e0e08bba) SHA1(315eba2c10d426c9c0bb4e36987bf8ebed7df9a0) )
513 	ROM_LOAD( "tma1v-a.7p",   0x2000, 0x1000, CRC(7b27c8c1) SHA1(3fb2613ce19e353fbcc77b6817927794fb35810f) )
514 	ROM_LOAD( "tma1v-a.7s",   0x3000, 0x1000, CRC(912ba80a) SHA1(351fb5b160216eb10e281815d05a7165ca0e5909) )
515 	ROM_LOAD( "tma1v-a.7t",   0x4000, 0x1000, CRC(5cbb92a5) SHA1(a78a378e6d3060143dc456e9c33a5068da648331) )
516 	ROM_LOAD( "tma1v-a.7u",   0x5000, 0x1000, CRC(13afb9ed) SHA1(b29dcd91cf5e639ee50b734afc7a3afce79634df) )
517 
518 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
519 	ROM_LOAD( "mario.4p",     0x0000, 0x0200, CRC(afc9bd41) SHA1(90b739c4c7f24a88b6ac5ca29b06c032906a2801) )
520 ROM_END
521 
522 ROM_START( masao )
523 	ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
524 	ROM_LOAD( "masao-4.rom",  0x0000, 0x2000, CRC(07a75745) SHA1(acc760242a8862d177e3cff90aa32c4f3dac4e65) )
525 	ROM_LOAD( "masao-3.rom",  0x2000, 0x2000, CRC(55c629b6) SHA1(1f5b5699821871aadacc511663cb4bd4e357e215) )
526 	ROM_LOAD( "masao-2.rom",  0x4000, 0x2000, CRC(42e85240) SHA1(bc8cdf867b743c5ee58fcacb63a44f826c8f8c1a) )
527 	ROM_LOAD( "masao-1.rom",  0xf000, 0x1000, CRC(b2817af9) SHA1(95e83752e544671a68df2107fae1010b187f04a6) )
528 
529 	ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for sound */
530 	ROM_LOAD( "masao-5.rom",  0x0000, 0x1000, CRC(bd437198) SHA1(ebae88461984afc97bbc103fc6d95bc3c1865eec) )
531 
532 	ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE )
533 	ROM_LOAD( "masao-6.rom",  0x0000, 0x1000, CRC(1c9e0be2) SHA1(b4a650412dad90c6f6d79e93cde49055703b7f3e) )
534 	ROM_LOAD( "masao-7.rom",  0x1000, 0x1000, CRC(747c1349) SHA1(54674f78edf86953b7d500b66393483d1a5ce8ab) )
535 
536 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
537 	ROM_LOAD( "tma1v-a.7m",   0x0000, 0x1000, CRC(186762f8) SHA1(711fdd37392656bdd5027e020d51d083ccd7c407) )
538 	ROM_LOAD( "masao-9.rom",  0x1000, 0x1000, CRC(50be3918) SHA1(73e22eee67a03732ff57e523f900f20c6aee0491) )
539 	ROM_LOAD( "mario.7p",     0x2000, 0x1000, CRC(56be6ccd) SHA1(15a6e16c189d45f72761ebcbe9db5001bdecd659) )
540 	ROM_LOAD( "tma1v-a.7s",   0x3000, 0x1000, CRC(912ba80a) SHA1(351fb5b160216eb10e281815d05a7165ca0e5909) )
541 	ROM_LOAD( "tma1v-a.7t",   0x4000, 0x1000, CRC(5cbb92a5) SHA1(a78a378e6d3060143dc456e9c33a5068da648331) )
542 	ROM_LOAD( "tma1v-a.7u",   0x5000, 0x1000, CRC(13afb9ed) SHA1(b29dcd91cf5e639ee50b734afc7a3afce79634df) )
543 
544 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
545 	ROM_LOAD( "mario.4p",     0x0000, 0x0200, CRC(afc9bd41) SHA1(90b739c4c7f24a88b6ac5ca29b06c032906a2801) )
546 ROM_END
547 
548 
549 
550 GAME( 1983, mario,   0,     mario, mario,   0, ROT180, "Nintendo of America", "Mario Bros. (US)" )
551 GAME( 1983, mariojp, mario, mario, mariojp, 0, ROT180, "Nintendo", "Mario Bros. (Japan)" )
552 GAME( 1983, masao,   mario, masao, mario,   0, ROT180, "bootleg", "Masao" )
553