1 /*
2 	Sega Multi System 32 hardware
3 
4  preliminary support by Jason Lo aka fbff
5 
6  based on earlier work by R.Belmont and David Haywood which was
7  in turn based on the Modeler emulator
8 
9  Main ToDo's:
10 
11  convert from using the 16-bit V60 to the 32-bit V70 (I'm doing this
12   later as I couldn't get it to boot with the V70 for now and the gfx
13   hardware is easier to work with this way)
14 
15 
16 */
17 
18 #include "driver.h"
19 #include "vidhrdw/generic.h"
20 #include "machine/eeprom.h"
21 #include "machine/random.h"
22 
23 #define MASTER_CLOCK		32215900
24 #define MULTI32_CLOCK		40000000
25 
26 #define MAX_COLOURS (16384)
27 
28 int multi32;
29 
30 static unsigned char irq_status;
31 static data16_t *system32_shared_ram;
32 extern data16_t *system32_mixerregs[2];  /* mixer registers*/
33 
34 static data16_t *sys32_protram;
35 static data16_t *system32_workram;
36 extern data16_t sys32_tilebank_external;
37 extern data16_t sys32_displayenable;
38 
39 /* Video Hardware */
40 extern int system32_temp_kludge;
41 extern data16_t *sys32_spriteram16;
42 extern data16_t *sys32_txtilemap_ram;
43 extern data16_t *sys32_ramtile_ram;
44 extern data16_t *scrambled_paletteram16[2];
45 static data16_t *paletteram16_b;
46 
47 extern int system32_mixerShift;
48 extern int system32_screen_mode;
49 extern int system32_screen_old_mode;
50 extern int system32_allow_high_resolution;
51 
52 extern int sys32_brightness[2][3];
53 
54 WRITE16_HANDLER( sys32_videoram_w );
55 WRITE16_HANDLER( sys32_ramtile_w );
56 WRITE16_HANDLER( sys32_spriteram_w );
57 READ16_HANDLER ( sys32_videoram_r );
58 WRITE32_HANDLER( sys32_videoram_long_w );
59 READ32_HANDLER ( sys32_videoram_long_r );
60 VIDEO_START( system32 );
61 VIDEO_UPDATE( system32 );
62 
63 extern int system32_use_default_eeprom;
64 
65 static data16_t controlB[256];
66 static data16_t control[256];
67 
irq_raise(int level)68 static void irq_raise(int level)
69 {
70 	irq_status |= (1 << level);
71 	cpu_set_irq_line(0, 0, ASSERT_LINE);
72 }
73 
irq_callback(int irqline)74 static int irq_callback(int irqline)
75 {
76 	int i;
77 	for(i=7; i>=0; i--)
78 		if(irq_status & (1 << i)) {
79 			return i;
80 		}
81 	return 0;
82 }
83 
WRITE16_HANDLER(irq_ack_w)84 static WRITE16_HANDLER(irq_ack_w)
85 {
86 	if(ACCESSING_MSB) {
87 		irq_status &= data >> 8;
88 		if(!irq_status)
89 			cpu_set_irq_line(0, 0, CLEAR_LINE);
90 	}
91 }
92 
irq_init(void)93 static void irq_init(void)
94 {
95 	irq_status = 0;
96 	cpu_set_irq_line(0, 0, CLEAR_LINE);
97 	cpu_set_irq_callback(0, irq_callback);
98 }
99 
NVRAM_HANDLER(system32)100 static NVRAM_HANDLER( system32 )
101 {
102 	if (read_or_write)
103 		EEPROM_save(file);
104 	else {
105 		EEPROM_init(&eeprom_interface_93C46);
106 
107 		if (file)
108 			EEPROM_load(file);
109 	}
110 }
111 
READ16_HANDLER(system32_eeprom_r)112 static READ16_HANDLER(system32_eeprom_r)
113 {
114 	return (EEPROM_read_bit() << 7) | input_port_0_r(0);
115 }
116 
WRITE16_HANDLER(system32_eeprom_w)117 static WRITE16_HANDLER(system32_eeprom_w)
118 {
119 	if(ACCESSING_LSB) {
120 		EEPROM_write_bit(data & 0x80);
121 		EEPROM_set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE);
122 		EEPROM_set_clock_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
123 	}
124 }
125 
126 
READ16_HANDLER(sys32_read_ff)127 static READ16_HANDLER(sys32_read_ff)
128 {
129 	return 0xffff;
130 }
131 
READ16_HANDLER(sys32_read_random)132 static READ16_HANDLER(sys32_read_random)
133 {
134 	return mame_rand(); /* new random.c random number code, see clouds in ga2*/
135 }
136 
137 extern int sys32_brightness[2][3];
138 
multi32_set_colour(int offset,int monitor)139 void multi32_set_colour (int offset, int monitor)
140 {
141 	int data;
142 	int r,g,b;
143 	int r2,g2,b2;
144 	UINT16 r_bright, g_bright, b_bright;
145 
146 	/* Although the hardware writes to all 65536 colours on both monitors, the
147 	   games do not use more than 16384 colours per monitor.  We discard any
148 	   colours that are written above MAX_COLOURS(16384).
149 	*/
150 
151 	if (offset<MAX_COLOURS) {
152 		if (monitor) {
153 			data = paletteram16_b[offset];
154 		}
155 		else data = paletteram16[offset];
156 
157 		r = (data >> 0) & 0x0f;
158 		g = (data >> 4) & 0x0f;
159 		b = (data >> 8) & 0x0f;
160 
161 		r2 = (data >> 13) & 0x1;
162 		g2 = (data >> 13) & 0x1;
163 		b2 = (data >> 13) & 0x1;
164 
165 		r = (r << 4) | (r2 << 3);
166 		g = (g << 4) | (g2 << 3);
167 		b = (b << 4) | (b2 << 3);
168 
169 		/* there might be better ways of doing this ... but for now its functional ;-)*/
170 		r_bright = sys32_brightness[monitor][0]; r_bright &= 0x3f;
171 		g_bright = sys32_brightness[monitor][1]; g_bright &= 0x3f;
172 		b_bright = sys32_brightness[monitor][2]; b_bright &= 0x3f;
173 
174 		if ((r_bright & 0x20)) { r = (r * (r_bright&0x1f))>>5; } else { r = r+(((0xf8-r) * (r_bright&0x1f))>>5); }
175 		if ((g_bright & 0x20)) { g = (g * (g_bright&0x1f))>>5; } else { g = g+(((0xf8-g) * (g_bright&0x1f))>>5); }
176 		if ((b_bright & 0x20)) { b = (b * (b_bright&0x1f))>>5; } else { b = b+(((0xf8-b) * (b_bright&0x1f))>>5); }
177 
178 		palette_set_color((monitor*MAX_COLOURS)+offset,r,g,b);
179 	}
180 }
181 
WRITE16_HANDLER(multi32_paletteram16_xBBBBBGGGGGRRRRR_scrambled_word_w)182 static WRITE16_HANDLER( multi32_paletteram16_xBBBBBGGGGGRRRRR_scrambled_word_w )
183 {
184 	int r,g,b;
185 	int r2,g2,b2;
186 
187 	if (offset<MAX_COLOURS) {
188 		COMBINE_DATA(&scrambled_paletteram16[0][offset]); /* it expects to read back the same values?*/
189 
190 		/* rearrange the data to normal format ... */
191 
192 		r = (data >>1) & 0xf;
193 		g = (data >>6) & 0xf;
194 		b = (data >>11) & 0xf;
195 
196 		r2 = (data >>0) & 0x1;
197 		g2 = (data >>5) & 0x1;
198 		b2 = (data >> 10) & 0x1;
199 
200 		data = (data & 0x8000) | r | g<<4 | b << 8 | r2 << 12 | g2 << 13 | b2 << 14;
201 
202 		COMBINE_DATA(&paletteram16[offset]);
203 
204 		multi32_set_colour(offset, 0);
205 	}
206 }
207 
WRITE16_HANDLER(multi32_paletteram16_xBGRBBBBGGGGRRRR_word_w)208 static WRITE16_HANDLER( multi32_paletteram16_xBGRBBBBGGGGRRRR_word_w )
209 {
210 	if (offset<MAX_COLOURS) {
211 		COMBINE_DATA(&paletteram16[offset]);
212 
213 	/* some games use 8-bit writes to some palette regions*/
214 	/* (especially for the text layer palettes)*/
215 
216 		multi32_set_colour(offset, 0);
217 	}
218 }
219 
220 /* --------------------------------------- Monitor B ---------------------------------*/
221 
WRITE16_HANDLER(multi32_paletteram16_xBBBBBGGGGGRRRRR_scrambled_word_b_w)222 static WRITE16_HANDLER( multi32_paletteram16_xBBBBBGGGGGRRRRR_scrambled_word_b_w )
223 {
224 	int r,g,b;
225 	int r2,g2,b2;
226 
227 	if (offset<MAX_COLOURS) {
228 		COMBINE_DATA(&scrambled_paletteram16[1][offset]); /* it expects to read back the same values?*/
229 
230 		/* rearrange the data to normal format ... */
231 
232 		r = (data >>1) & 0xf;
233 		g = (data >>6) & 0xf;
234 		b = (data >>11) & 0xf;
235 
236 		r2 = (data >>0) & 0x1;
237 		g2 = (data >>5) & 0x1;
238 		b2 = (data >> 10) & 0x1;
239 
240 		data = (data & 0x8000) | r | g<<4 | b << 8 | r2 << 12 | g2 << 13 | b2 << 14;
241 
242 
243 		COMBINE_DATA(&paletteram16_b[offset]);
244 
245 		multi32_set_colour(offset, 1);
246 	}
247 }
248 
WRITE16_HANDLER(multi32_paletteram16_xBGRBBBBGGGGRRRR_word_b_w)249 static WRITE16_HANDLER( multi32_paletteram16_xBGRBBBBGGGGRRRR_word_b_w )
250 {
251 	if (offset<MAX_COLOURS) {
252 		COMBINE_DATA(&paletteram16_b[offset]);
253 
254 		/* some games use 8-bit writes to some palette regions*/
255 		/* (especially for the text layer palettes)*/
256 
257 		multi32_set_colour(offset, 1);
258 	}
259 }
260 
261 extern int analogRead[8];
262 extern int analogSwitch;
263 
READ16_HANDLER(multi32_io_analog_r)264 static READ16_HANDLER( multi32_io_analog_r )
265 {
266 /*
267 	{ 0xc00050, 0xc00057, system32_io_analog_r },
268 
269 	 Read the value of each analog control port, one bit at a time, 8 times.
270 	 Analog Input Set B is requested by the hardware using "analogSwitch"
271 */
272 	int retdata;
273 	if (offset<=3) {
274 		retdata = analogRead[offset*2+analogSwitch] & 0x80;
275 		analogRead[offset*2+analogSwitch] <<= 1;
276 		return retdata;
277 	}
278 
279 	switch(offset)
280 	{
281 	default:
282 		log_cb(RETRO_LOG_DEBUG, LOGPRE "multi32_io_analog [%d:%06x]: read %02x (mask %x)\n", cpu_getactivecpu(), activecpu_get_pc(), offset, mem_mask);
283 		return 0xffff;
284 		break;
285 	}
286 }
287 
WRITE16_HANDLER(multi32_io_analog_w)288 static WRITE16_HANDLER( multi32_io_analog_w )
289 {
290 	COMBINE_DATA(&control[offset]);
291 
292 	if (offset<=3) {
293 		if (analogSwitch) analogRead[offset*2+1]=readinputport(offset*2+5);
294 		else analogRead[offset*2]=readinputport(offset*2+4);
295 	}
296 }
297 
READ16_HANDLER(multi32_io_r)298 static READ16_HANDLER( multi32_io_r )
299 {
300 /* I/O Control port at 0xc00000
301 
302 	{ 0xc00000, 0xc00001, input_port_1_word_r },
303 	{ 0xc00002, 0xc00003, input_port_2_word_r },
304 	{ 0xc00004, 0xc00007, sys32_read_ff },
305 	{ 0xc00008, 0xc00009, input_port_3_word_r },
306 	{ 0xc0000a, 0xc0000b, system32_eeprom_r },
307 	{ 0xc0000c, 0xc0004f, sys32_read_ff },
308 */
309 	switch(offset) {
310 	case 0x00:
311 		return readinputport(0x01);
312 	case 0x01:
313 		return readinputport(0x02);
314 	case 0x02:
315 		return 0xffff;
316 	case 0x03:
317 		/* f1lap*/
318 		return 0xffff;
319 	case 0x04:
320 		return readinputport(0x03);
321 	case 0x05:
322 		return (EEPROM_read_bit() << 7) | readinputport(0x00);
323 	case 0x06:
324 		return 0xffff;
325 	case 0x07:
326 		/* scross*/
327 		return sys32_tilebank_external;
328 	case 0x0e:
329 		/* f1lap*/
330 		return 0xffff;
331 	default:
332 		log_cb(RETRO_LOG_DEBUG, LOGPRE "Port A1 %d [%d:%06x]: read (mask %x)\n", offset, cpu_getactivecpu(), activecpu_get_pc(), mem_mask);
333 		return 0xffff;
334 	}
335 }
336 
WRITE16_HANDLER(multi32_io_w)337 static WRITE16_HANDLER( multi32_io_w )
338 {
339 /* I/O Control port at 0xc00000
340 
341 	{ 0xc00006, 0xc00007, system32_eeprom_w },
342 	{ 0xc0000c, 0xc0000d, jp_v60_write_cab },
343 	{ 0xc00008, 0xc0000d, MWA16_RAM }, // Unknown c00008=f1lap , c0000c=titlef
344 	{ 0xc0000e, 0xc0000f, MWA16_RAM, &sys32_tilebank_external }, // tilebank per layer on multi32
345 	{ 0xc0001c, 0xc0001d, MWA16_RAM, &sys32_displayenable },
346 	{ 0xc0001e, 0xc0001f, MWA16_RAM }, // Unknown
347 */
348 
349 	COMBINE_DATA(&control[offset]);
350 
351 	switch(offset) {
352 	case 0x03:
353 		if(ACCESSING_LSB) {
354 			EEPROM_write_bit(data & 0x80);
355 			EEPROM_set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE);
356 			EEPROM_set_clock_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
357 		}
358 		break;
359 	case 0x04:
360 		/* f1lap*/
361 		break;
362 	case 0x06:
363 		/* jp_v60_write_cab / titlef*/
364 		break;
365 	case 0x07:
366 		/* Multi32: tilebank per layer*/
367 		COMBINE_DATA(&sys32_tilebank_external);
368 		break;
369 	case 0x0e:
370 		COMBINE_DATA(&sys32_displayenable);
371 		break;
372 	case 0x0f:
373 		/* orunners unknown*/
374 		break;
375 	default:
376 		log_cb(RETRO_LOG_DEBUG, LOGPRE "Port A1 %d [%d:%06x]: write %02x (mask %x)\n", offset, cpu_getactivecpu(), activecpu_get_pc(), data, mem_mask);
377 		break;
378 	}
379 }
380 
READ16_HANDLER(multi32_io_2_r)381 static READ16_HANDLER( multi32_io_2_r )
382 {
383 /* I/O Control port at 0xc00060
384 
385 	{ 0xc00060, 0xc00061, input_port_4_word_r },
386 	{ 0xc00062, 0xc00063, input_port_5_word_r },
387 	{ 0xc00064, 0xc00065, input_port_6_word_r },
388 	{ 0xc00066, 0xc000ff, sys32_read_ff },
389 */
390 	switch(offset) {
391 	case 0x00:
392 		return readinputport(0x04);
393 	case 0x01:
394 		return readinputport(0x05);
395 	case 0x02:
396 		return readinputport(0x06);
397 	default:
398 		log_cb(RETRO_LOG_DEBUG, LOGPRE "Port A2 %d [%d:%06x]: read (mask %x)\n", offset, cpu_getactivecpu(), activecpu_get_pc(), mem_mask);
399 		return 0xffff;
400 	}
401 }
402 
WRITE16_HANDLER(multi32_io_2_w)403 static WRITE16_HANDLER( multi32_io_2_w )
404 {
405 /* I/O Control port at 0xc00060
406 
407 	{ 0xc00060, 0xc00061, MWA16_RAM }, // Analog switch
408 	{ 0xc00074, 0xc00075, MWA16_RAM }, // Unknown
409 */
410 
411 	switch(offset) {
412 	case 0x00:
413 		/* Used by the hardware to switch the analog input ports to set B*/
414 		analogSwitch=data;
415 		break;
416 	case 0x0a:
417 		/* orunners unknown*/
418 		break;
419 	default:
420 		log_cb(RETRO_LOG_DEBUG, LOGPRE "Port A2 %d [%d:%06x]: write %02x (mask %x)\n", offset, cpu_getactivecpu(), activecpu_get_pc(), data, mem_mask);
421 		break;
422 	}
423 }
424 
READ16_HANDLER(multi32_io_B_r)425 static READ16_HANDLER( multi32_io_B_r )
426 {
427 	switch(offset) {
428 	case 0:
429 		/* orunners (mask ff00)*/
430 		return readinputport(0X0c); /* orunners Monitor B Shift Up, Shift Down buttons*/
431 	case 1:
432 		/* orunners (mask ff00)*/
433 		return readinputport(0X0d); /* orunners Monitor B DJ Music, Music Up, Music Down buttons*/
434 	case 2:
435 		return 0x00;
436 	case 3:
437 		/* orunners (mask ff00)*/
438 		return 0x00;
439 	case 4:
440 		/* harddunk (mask ff00) will not exit test mode if not 0xff*/
441 		return readinputport(0X0e); /* orunners Monitor B Service, Test, Coin and Start buttons*/
442 	case 5:
443 		/* orunners (mask ff00) locks up*/
444 		return (EEPROM_read_bit() << 7) | readinputport(0x00);
445 	case 7:
446 		/* orunners (mask ff00)*/
447 		return 0xffff;
448 	case 14:
449 		/* harddunk (mask ff00)*/
450 		return 0xffff;
451 	default:
452 		log_cb(RETRO_LOG_DEBUG, LOGPRE "Port B %d [%d:%06x]: read (mask %x)\n", offset, cpu_getactivecpu(), activecpu_get_pc(), mem_mask);
453 		return 0xffff;
454 	}
455 }
456 
WRITE16_HANDLER(multi32_io_B_w)457 static WRITE16_HANDLER( multi32_io_B_w )
458 {
459 	COMBINE_DATA(&controlB[offset]);
460 	switch(offset) {
461 
462 	case 0x03:
463 		/* titlef value=00*/
464 		break;
465 	case 0x06:
466 		/* orunners value=00, 08, 34*/
467 		break;
468 	case 0x07:
469 		if(ACCESSING_LSB) {
470 			EEPROM_write_bit(data & 0x80);
471 			EEPROM_set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE);
472 			EEPROM_set_clock_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
473 		}
474 		break;
475 	case 0x0e:
476 		/* orunners value=86 (displayenable?)*/
477 		break;
478 	case 0x0f:
479 		/* orunners value=c8*/
480 		break;
481 
482 	default:
483 		log_cb(RETRO_LOG_DEBUG, LOGPRE "Port B %d [%d:%06x]: write %02x (mask %x)\n", offset, cpu_getactivecpu(), activecpu_get_pc(), data, mem_mask);
484 		break;
485 	}
486 }
487 
MEMORY_READ16_START(multi32_readmem)488 static MEMORY_READ16_START( multi32_readmem )
489 	{ 0x000000, 0x1fffff, MRA16_ROM },
490 	{ 0x200000, 0x23ffff, MRA16_RAM }, /* work RAM*/
491 	{ 0x300000, 0x31ffff, sys32_videoram_r }, /* Tile Ram*/
492 	{ 0x400000, 0x41ffff, MRA16_RAM }, /* sprite RAM*/
493 	{ 0x500000, 0x50000d, MRA16_RAM },	/* Unknown*/
494 /*	{ 0x500002, 0x500003, jp_v60_read_cab },*/
495 
496 	{ 0x600000, 0x6100ff, MRA16_RAM }, /* Palette + mixer registers (Monitor A)*/
497 	{ 0x680000, 0x69004f, MRA16_RAM }, /* Palette + mixer registers (Monitor B)*/
498 
499 	{ 0x700000, 0x701fff, MRA16_RAM },	/* shared RAM*/
500 	{ 0x800000, 0x80000f, MRA16_RAM },	/* Unknown*/
501 	{ 0x80007e, 0x80007f, MRA16_RAM },	/* Unknown f1lap*/
502 	{ 0x801000, 0x801003, MRA16_RAM },	/* Unknown*/
503 	{ 0xa00000, 0xa00001, MRA16_RAM }, /* Unknown dbzvrvs*/
504 
505 	{ 0xc00000, 0xc0003f, multi32_io_r },
506 	{ 0xc00050, 0xc0005f, multi32_io_analog_r },
507 	{ 0xc00060, 0xc0007f, multi32_io_2_r },
508 	{ 0xc80000, 0xc8007f, multi32_io_B_r },
509 
510 	{ 0xd80000, 0xd80001, sys32_read_random },
511 	{ 0xd80002, 0xd80003, MRA16_RAM }, /* Unknown harddunk*/
512 	{ 0xe00000, 0xe0000f, MRA16_RAM },   /* Unknown*/
513 	{ 0xe80000, 0xe80003, MRA16_RAM }, /* Unknown*/
514 	{ 0xf00000, 0xffffff, MRA16_BANK1 }, /* High rom mirror*/
515 MEMORY_END
516 
517 static MEMORY_WRITE16_START( multi32_writemem )
518 	{ 0x000000, 0x1fffff, MWA16_ROM },
519 	{ 0x200000, 0x23ffff, MWA16_RAM, &system32_workram },
520 	{ 0x300000, 0x31ffff, sys32_videoram_w },
521 	{ 0x400000, 0x41ffff, sys32_spriteram_w, &sys32_spriteram16 }, /* Sprites*/
522 	{ 0x500000, 0x50000d, MWA16_RAM },	/* Unknown*/
523 
524 	{ 0x600000, 0x607fff, multi32_paletteram16_xBBBBBGGGGGRRRRR_scrambled_word_w, &scrambled_paletteram16[0] },	/* magic data-line-scrambled mirror of palette RAM * we need to shuffle data written then?*/
525 	{ 0x608000, 0x60ffff, multi32_paletteram16_xBGRBBBBGGGGRRRR_word_w, &paletteram16 }, /* Palettes*/
526 	{ 0x610000, 0x6100ff, MWA16_RAM, &system32_mixerregs[0] }, /* mixer chip registers*/
527 
528 	{ 0x680000, 0x687fff, multi32_paletteram16_xBBBBBGGGGGRRRRR_scrambled_word_b_w, &scrambled_paletteram16[1] },	/* magic data-line-scrambled mirror of palette RAM * we need to shuffle data written then?*/
529 	{ 0x688000, 0x68ffff, multi32_paletteram16_xBGRBBBBGGGGRRRR_word_b_w, &paletteram16_b }, /* Monitor B palette*/
530 	{ 0x690000, 0x69004f, MWA16_RAM, &system32_mixerregs[1] }, /* monitor B mixer registers*/
531 
532 	{ 0x700000, 0x701fff, MWA16_RAM, &system32_shared_ram }, /* Shared ram with the z80*/
533 	{ 0x800000, 0x80000f, MWA16_RAM },	/* Unknown*/
534 	{ 0x80007e, 0x80007f, MWA16_RAM },	/* Unknown f1lap*/
535 	{ 0x801000, 0x801003, MWA16_RAM },	/* Unknown*/
536 	{ 0x81002a, 0x81002b, MWA16_RAM },	/* Unknown dbzvrvs*/
537 	{ 0x810100, 0x810101, MWA16_RAM },	/* Unknown dbzvrvs*/
538 	{ 0xa00000, 0xa00fff, MWA16_RAM, &sys32_protram },	/* protection RAM*/
539 
540 	{ 0xc00000, 0xc0003f, multi32_io_w },
541 	{ 0xc00050, 0xc0005f, multi32_io_analog_w },
542 	{ 0xc00060, 0xc0007f, multi32_io_2_w },
543 	{ 0xc80000, 0xc8007f, multi32_io_B_w },
544 
545 	{ 0xd00000, 0xd00005, MWA16_RAM }, /* Unknown*/
546 	{ 0xd00006, 0xd00007, irq_ack_w },
547 	{ 0xd00008, 0xd0000b, MWA16_RAM }, /* Unknown*/
548 	{ 0xd80000, 0xd80003, MWA16_RAM }, /* Unknown titlef / harddunk*/
549 	{ 0xe00000, 0xe0000f, MWA16_RAM },   /* Unknown*/
550 	{ 0xe80000, 0xe80003, MWA16_RAM }, /* Unknown*/
551 	{ 0xf00000, 0xffffff, MWA16_ROM },
552 MEMORY_END
553 
554 
555 static MACHINE_INIT( system32 )
556 {
557 	cpu_setbank(1, memory_region(REGION_CPU1));
558 	irq_init();
559 
560 	/* force it to select lo-resolution on reset */
561 	system32_allow_high_resolution = 0;
562 	system32_screen_mode = 0;
563 	system32_screen_old_mode = 1;
564 }
565 
INTERRUPT_GEN(system32_interrupt)566 static INTERRUPT_GEN( system32_interrupt )
567 {
568 	if(cpu_getiloops())
569 		irq_raise(1);
570 	else
571 		irq_raise(0);
572 }
573 
irq_handler(int irq)574 static void irq_handler(int irq)
575 {
576 	cpu_set_irq_line( 1, 0 , irq ? ASSERT_LINE : CLEAR_LINE );
577 }
578 
579 static struct GfxLayout s32_bgcharlayout =
580 {
581 	16,16,
582 	RGN_FRAC(1,1),
583 	4,
584 	{ 0,1,2,3 },
585 	{ 0, 4, 16, 20, 8, 12, 24, 28,
586 	   32, 36, 48, 52, 40, 44, 56, 60  },
587 	{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
588 	  8*64, 9*64,10*64,11*64,12*64,13*64,14*64,15*64 },
589 	16*64
590 };
591 
592 static struct GfxLayout s32_fgcharlayout =
593 {
594 	8,8,
595 	RGN_FRAC(1,1),
596 	4,
597 	{ 0,1,2,3 },
598 	{ 0, 4, 8, 12, 16, 20, 24, 28 },
599 	{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
600 	16*16
601 };
602 
603 static struct GfxDecodeInfo gfxdecodeinfo[] =
604 {
605 	{ REGION_GFX1, 0, &s32_bgcharlayout,   0x00, 0x3ff  },
606 	{ REGION_GFX3, 0, &s32_fgcharlayout,   0x00, 0x3ff  },
607 	{ -1 } /* end of array */
608 };
609 
610 static UINT8 *sys32_SoundMemBank;
611 
READ_HANDLER(system32_bank_r)612 static READ_HANDLER( system32_bank_r )
613 {
614 	return sys32_SoundMemBank[offset];
615 }
616 
READ_HANDLER(sys32_shared_snd_r)617 static READ_HANDLER( sys32_shared_snd_r )
618 {
619 	data8_t *RAM = (data8_t *)system32_shared_ram;
620 
621 	return RAM[offset];
622 }
623 
WRITE_HANDLER(sys32_shared_snd_w)624 static WRITE_HANDLER( sys32_shared_snd_w )
625 {
626 	data8_t *RAM = (data8_t *)system32_shared_ram;
627 
628 	RAM[offset] = data;
629 }
630 
MEMORY_READ_START(multi32_sound_readmem)631 static MEMORY_READ_START( multi32_sound_readmem )
632 	{ 0x0000, 0x9fff, MRA_ROM },
633 	{ 0xa000, 0xbfff, system32_bank_r },
634 	{ 0xc000, 0xdfff, MultiPCM_reg_0_r },
635 	{ 0xe000, 0xffff, sys32_shared_snd_r },
636 MEMORY_END
637 
638 static MEMORY_WRITE_START( multi32_sound_writemem )
639 	{ 0x0000, 0x9fff, MWA_ROM },
640 	{ 0xc000, 0xdfff, MultiPCM_reg_0_w },
641 	{ 0xe000, 0xffff, sys32_shared_snd_w },
642 MEMORY_END
643 
644 static WRITE_HANDLER( sys32_soundbank_w )
645 {
646 	unsigned char *RAM = memory_region(REGION_CPU2);
647 	int Bank;
648 
649 	Bank = data * 0x2000;
650 
651 	sys32_SoundMemBank = &RAM[Bank+0x10000];
652 }
653 
PORT_READ_START(multi32_sound_readport)654 static PORT_READ_START( multi32_sound_readport )
655 	{ 0x80, 0x80, YM2612_status_port_0_A_r },
656 PORT_END
657 
658 static PORT_WRITE_START( multi32_sound_writeport )
659 	{ 0x80, 0x80, YM2612_control_port_0_A_w },
660 	{ 0x81, 0x81, YM2612_data_port_0_A_w },
661 	{ 0x82, 0x82, YM2612_control_port_0_B_w },
662 	{ 0x83, 0x83, YM2612_data_port_0_B_w },
663 	{ 0xa0, 0xa0, sys32_soundbank_w },
664 	{ 0xb0, 0xb0, MultiPCM_bank_0_w },
665 	{ 0xc1, 0xc1, IOWP_NOP },
666 PORT_END
667 
668 struct YM2612interface mul32_ym3438_interface =
669 {
670 	1,
671 	MASTER_CLOCK/4,
672 	{ 60,60 },
673 	{ 0 },	{ 0 },	{ 0 },	{ 0 },
674 	{ irq_handler }
675 };
676 
677 static struct MultiPCM_interface mul32_multipcm_interface =
678 {
679 	1,		/* 1 chip*/
680 	{ MASTER_CLOCK/4 },	/* clock*/
681 	{ MULTIPCM_MODE_MULTI32 },	/* banking mode*/
682 	{ (512*1024) },	/* bank size*/
683 	{ REGION_SOUND1 },	/* sample region*/
684 	{ YM3012_VOL(100, MIXER_PAN_CENTER, 100, MIXER_PAN_CENTER) }
685 };
686 
687 static struct MultiPCM_interface scross_multipcm_interface =
688 {
689 	1,		/* 1 chip*/
690 	{ MASTER_CLOCK/4 },	/* clock*/
691 	{ MULTIPCM_MODE_STADCROSS },	/* banking mode*/
692 	{ (512*1024) },	/* bank size*/
693 	{ REGION_SOUND1 },	/* sample region*/
694 	{ YM3012_VOL(100, MIXER_PAN_CENTER, 100, MIXER_PAN_CENTER) }
695 };
696 
697 static MACHINE_DRIVER_START( base )
698 
699 	/* basic machine hardware */
700 	MDRV_CPU_ADD(V60, MULTI32_CLOCK/2)
MDRV_CPU_MEMORY(multi32_readmem,multi32_writemem)701 	MDRV_CPU_MEMORY(multi32_readmem,multi32_writemem)
702 	MDRV_CPU_VBLANK_INT(system32_interrupt,2)
703 
704 	MDRV_CPU_ADD(Z80, MASTER_CLOCK/4)
705 	MDRV_CPU_MEMORY(multi32_sound_readmem, multi32_sound_writemem)
706 	MDRV_CPU_PORTS(multi32_sound_readport, multi32_sound_writeport)
707 
708 	MDRV_FRAMES_PER_SECOND(60)
709 	MDRV_VBLANK_DURATION(100 /*DEFAULT_60HZ_VBLANK_DURATION*/)
710 
711 	MDRV_MACHINE_INIT(system32)
712 	MDRV_NVRAM_HANDLER(system32)
713 
714 	/* video hardware */
715 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN | VIDEO_UPDATE_AFTER_VBLANK | VIDEO_RGB_DIRECT | VIDEO_HAS_SHADOWS ) /* RGB_DIRECT will be needed for alpha*/
716 	MDRV_SCREEN_SIZE(52*8*2, 28*8*2)
717 	MDRV_VISIBLE_AREA(0*8, 52*8*2-1, 0*8, 28*8*2-1)
718 
719 	MDRV_GFXDECODE(gfxdecodeinfo)
720 	MDRV_PALETTE_LENGTH(32768)
721 
722 	MDRV_VIDEO_START(system32)
723 	MDRV_VIDEO_UPDATE(system32)
724 
725 	MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
726 	MDRV_SOUND_ADD(YM3438, mul32_ym3438_interface)
727 MACHINE_DRIVER_END
728 
729 static MACHINE_DRIVER_START( multi32 )
730 	MDRV_IMPORT_FROM(base)
731 	MDRV_SOUND_ADD(MULTIPCM, mul32_multipcm_interface)
732 MACHINE_DRIVER_END
733 
734 static MACHINE_DRIVER_START( scross )
735 	MDRV_IMPORT_FROM(base)
736 	MDRV_SOUND_ADD(MULTIPCM, scross_multipcm_interface)
737 MACHINE_DRIVER_END
738 
739 static DRIVER_INIT(orunners)
740 {
741 	multi32=1;
742 	system32_temp_kludge = 0;
743 	system32_mixerShift = 4;
744 }
745 
DRIVER_INIT(titlef)746 static DRIVER_INIT(titlef)
747 {
748 	multi32=1;
749 	system32_temp_kludge = 0;
750 	system32_mixerShift = 4;
751 }
752 
DRIVER_INIT(harddunk)753 static DRIVER_INIT(harddunk)
754 {
755 	multi32=1;
756 	system32_temp_kludge = 0;
757 	system32_mixerShift = 5;
758 }
759 
760 #define SYSTEM32_PLAYER_INPUTS(_n_, _b1_, _b2_, _b3_, _b4_) \
761 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_##_b1_         | IPF_PLAYER##_n_ ) \
762 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_##_b2_         | IPF_PLAYER##_n_ ) \
763 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_##_b3_         | IPF_PLAYER##_n_ ) \
764 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_##_b4_         | IPF_PLAYER##_n_ ) \
765 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER##_n_ ) \
766 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER##_n_ ) \
767 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER##_n_ ) \
768 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER##_n_ )
769 
770 
771 INPUT_PORTS_START( orunners )
772 	PORT_START	/* port 0*/
773 	PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN )
774 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* EEPROM data */
775 
776 	PORT_START	/* port 1*/
777 	PORT_BITX( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1, "P1 Shift Up", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
778 	PORT_BITX( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2, "P1 Shift Down", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
779 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
780 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
781 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
782 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
783 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
784 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
785 
786 	PORT_START	/* port 2*/
787 	PORT_BITX( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3, "P1 DJ Music", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
788 	PORT_BITX( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4, "P1 Music Up", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
789 	PORT_BITX( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5, "P1 Music Down", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
790 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
791 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
792 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
793 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
794 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
795 
796 	PORT_START	/* port 3*/
797 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
798 	PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_SERVICE, "Test", KEYCODE_F2, IP_JOY_NONE )
799 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
800 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
801 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
802 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
803 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
804 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
805 
806 	PORT_START	/* port 4*/
807 	PORT_ANALOG( 0xff, 0x80, IPT_AD_STICK_X | IPF_CENTER | IPF_PLAYER1, 30, 10, 0x00, 0xff)
808 
809 	PORT_START	/* port 5*/
810 	PORT_BIT( 0x00, IP_ACTIVE_LOW, IPT_UNUSED )
811 
812 	PORT_START	/* port 6*/
813 	PORT_ANALOG( 0xff, 0x00, IPT_PEDAL | IPF_PLAYER1, 30, 10, 0x00, 0xff)
814 
815 	PORT_START	/* port 7*/
816 	PORT_BIT( 0x00, IP_ACTIVE_LOW, IPT_UNUSED )
817 
818 	PORT_START	/* port 8*/
819 	PORT_ANALOG( 0xff, 0x00, IPT_PEDAL2 | IPF_PLAYER1, 30, 10, 0x00, 0xff)
820 
821 	PORT_START	/* port 9*/
822 	PORT_ANALOG( 0xff, 0x00, IPT_PEDAL | IPF_PLAYER2, 30, 10, 0x00, 0xff)
823 
824 	PORT_START	/* port A*/
825 	PORT_ANALOG( 0xff, 0x80, IPT_AD_STICK_X | IPF_CENTER | IPF_PLAYER2, 30, 10, 0x00, 0xff)
826 
827 	PORT_START	/* port B*/
828 	PORT_ANALOG( 0xff, 0x00, IPT_PEDAL2 | IPF_PLAYER2, 30, 10, 0x00, 0xff)
829 
830 	PORT_START	/* port C*/
831 	PORT_BITX( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2, "P2 Shift Up", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
832 	PORT_BITX( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2, "P2 Shift Down", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
833 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
834 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
835 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
836 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
837 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
838 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
839 
840 	PORT_START	/* port D*/
841 	PORT_BITX( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2, "P2 DJ Music", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
842 	PORT_BITX( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER2, "P2 Music Up", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
843 	PORT_BITX( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 | IPF_PLAYER2, "P2 Music Down", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
844 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
845 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
846 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
847 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
848 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
849 
850 	PORT_START	/* port E*/
851 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 )
852 	PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_SERVICE, "Test", KEYCODE_F2, IP_JOY_NONE )
853 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
854 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
855 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
856 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
857 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
858 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
859 
860 	PORT_START	/* port F*/
861 	PORT_DIPNAME( 0x03, 0x01, "Monitors" )
862 	PORT_DIPSETTING(    0x01, "A only" )
863 	PORT_DIPSETTING(    0x03, "A and B" )
864 	PORT_DIPSETTING(    0x02, "B only" )
865 INPUT_PORTS_END
866 
867 INPUT_PORTS_START( titlef )
868 	PORT_START	/* 0xc0000a - port 0*/
869 	PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN )
870 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* EEPROM data */
871 
872 	PORT_START	/* 0xc00000 - port 1*/
873 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER1)
874 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER1)
875 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER1)
876 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER1)
877 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN  | IPF_PLAYER1)
878 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP    | IPF_PLAYER1)
879 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT | IPF_PLAYER1)
880 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT  | IPF_PLAYER1)
881 
882 	PORT_START	/* 0xc00002 - port 2*/
883 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER1)
884 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER1)
885 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER1)
886 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER1)
887 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN  | IPF_PLAYER1)
888 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP    | IPF_PLAYER1)
889 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT | IPF_PLAYER1)
890 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT  | IPF_PLAYER1)
891 
892 	PORT_START	/* 0xc00008 - port 3*/
893 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
894 	PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_SERVICE, "Test", KEYCODE_F2, IP_JOY_NONE )
895 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
896 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
897 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
898 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
899 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
900 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
901 
902 	PORT_START	/* 0xc00060 - port 4*/
903 	PORT_START	/* 0xc00062 - port 5*/
904 	PORT_START	/* 0xc00064 - port 6*/
905 	PORT_START	/* port 7*/
906 	PORT_START	/* port 8*/
907 	PORT_START	/* port 9*/
908 	PORT_START	/* port A*/
909 	PORT_START	/* port B*/
910 
911 	PORT_START	/* port C*/
912 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER2)
913 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER2)
914 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER2)
915 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER2)
916 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN  | IPF_PLAYER2)
917 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP    | IPF_PLAYER2)
918 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT | IPF_PLAYER2)
919 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT  | IPF_PLAYER2)
920 
921 	PORT_START	/* port D*/
922 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER2)
923 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER2)
924 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER2)
925 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN        | IPF_PLAYER2)
926 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN  | IPF_PLAYER2)
927 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP    | IPF_PLAYER2)
928 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT | IPF_PLAYER2)
929 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT  | IPF_PLAYER2)
930 
931 	PORT_START	/* port E*/
932 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
933 	PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_SERVICE, "Test1", KEYCODE_F2, IP_JOY_NONE )
934 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
935 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
936 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START3 )
937 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START4 )
938 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
939 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
940 
941 	PORT_START	/* port F*/
942 	PORT_DIPNAME( 0x03, 0x01, "Monitors" )
943 	PORT_DIPSETTING(    0x01, "A only" )
944 	PORT_DIPSETTING(    0x03, "A and B" )
945 	PORT_DIPSETTING(    0x02, "B only" )
946 INPUT_PORTS_END
947 
948 INPUT_PORTS_START( harddunk )
949 	PORT_START	/* 0xc0000a - port 0*/
950 	PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN )
951 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* EEPROM data */
952 
953 	PORT_START	/* 0xc00000 - port 1*/
954 	SYSTEM32_PLAYER_INPUTS(1, BUTTON1, BUTTON2, BUTTON3, BUTTON4)
955 
956 	PORT_START	/* 0xc00002 - port 2*/
957 	SYSTEM32_PLAYER_INPUTS(2, BUTTON1, BUTTON2, BUTTON3, BUTTON4)
958 
959 	PORT_START	/* 0xc00008 - port 3*/
960 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 )
961 	PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_SERVICE, "Test", KEYCODE_F2, IP_JOY_NONE )
962 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
963 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
964 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
965 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
966 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
967 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
968 
969 	PORT_START	/* port 4*/
970 	SYSTEM32_PLAYER_INPUTS(3, BUTTON1, BUTTON2, BUTTON3, BUTTON4)
971 
972 	PORT_START	/* port 5*/
973 	SYSTEM32_PLAYER_INPUTS(6, BUTTON1, BUTTON2, BUTTON3, BUTTON4)
974 
975 	PORT_START	/* port 6*/
976 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START3 )
977 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START6 )
978 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
979 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
980 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
981 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
982 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
983 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
984 
985 	PORT_START	/* port 7*/
986 	PORT_START	/* port 8*/
987 	PORT_START	/* port 9*/
988 	PORT_START	/* port A*/
989 	PORT_START	/* port B*/
990 
991 	PORT_START	/* port C*/
992 	SYSTEM32_PLAYER_INPUTS(4, BUTTON1, BUTTON2, BUTTON3, BUTTON4)
993 
994 	PORT_START	/* port D*/
995 	SYSTEM32_PLAYER_INPUTS(5, BUTTON1, BUTTON2, BUTTON3, BUTTON4)
996 
997 	PORT_START	/* port E*/
998 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
999 	PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_SERVICE, "Test1", KEYCODE_F2, IP_JOY_NONE )
1000 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
1001 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1002 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START4 )
1003 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START5 )
1004 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1005 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1006 
1007 	PORT_START	/* port F*/
1008 	PORT_DIPNAME( 0x03, 0x01, "Monitors" )
1009 	PORT_DIPSETTING(    0x01, "A only" )
1010 	PORT_DIPSETTING(    0x03, "A and B" )
1011 	PORT_DIPSETTING(    0x02, "B only" )
1012 INPUT_PORTS_END
1013 
1014 INPUT_PORTS_START( scross )
1015 	PORT_START	/* 0xc0000a - port 0*/
1016 	PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN )
1017 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* EEPROM data */
1018 
1019 	PORT_START	/* 0xc00000 - port 1*/
1020 	PORT_BITX( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2, "P1 Attack", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
1021 	PORT_BITX( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3, "P1 Wheelie", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
1022 	PORT_BITX( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4, "P1 Brake", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
1023 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1024 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1025 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1026 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1027 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1028 
1029 	PORT_START	/* 0xc00002 - port 2*/
1030 
1031 	PORT_START	/* 0xc00008 - port 3*/
1032 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
1033 	PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_SERVICE, "Test", KEYCODE_F2, IP_JOY_NONE )
1034 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
1035 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1036 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
1037 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1038 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1039 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1040 
1041 	PORT_START	/* port 4*/
1042 	PORT_ANALOG( 0xff, 0x7f, IPT_AD_STICK_X | IPF_CENTER | IPF_REVERSE | IPF_PLAYER1, 30, 10, 0x00, 0xff)
1043 
1044 	PORT_START	/* port 5*/
1045 
1046 	PORT_START	/* port 6*/
1047 	PORT_ANALOG( 0xff, 0x00, IPT_PEDAL | IPF_PLAYER1, 30, 10, 0x00, 0xff)
1048 
1049 	PORT_START	/* port 7*/
1050 	PORT_START	/* port 8*/
1051 	PORT_ANALOG( 0xff, 0x7f, IPT_AD_STICK_X | IPF_CENTER | IPF_REVERSE | IPF_PLAYER2, 30, 10, 0x00, 0xff)
1052 
1053 	PORT_START	/* port 9*/
1054 
1055 	PORT_START	/* port A*/
1056 	PORT_ANALOG( 0xff, 0x00, IPT_PEDAL | IPF_PLAYER2, 30, 10, 0x00, 0xff)
1057 
1058 	PORT_START	/* port B*/
1059 
1060 	PORT_START	/* port C*/
1061 	PORT_BITX( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2, "P2 Attack", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
1062 	PORT_BITX( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 | IPF_PLAYER2, "P2 Wheelie", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
1063 	PORT_BITX( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER2, "P2 Brake", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
1064 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1065 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1066 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1067 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1068 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1069 
1070 	PORT_START	/* port D*/
1071 
1072 	PORT_START	/* port E*/
1073 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 )
1074 	PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_SERVICE, "Test", KEYCODE_F2, IP_JOY_NONE )
1075 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
1076 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1077 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
1078 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1079 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1080 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1081 
1082 	PORT_START	/* port F*/
1083 	PORT_DIPNAME( 0x03, 0x01, "Monitors" )
1084 	PORT_DIPSETTING(    0x01, "A only" )
1085 	PORT_DIPSETTING(    0x03, "A and B" )
1086 	PORT_DIPSETTING(    0x02, "B only" )
1087 INPUT_PORTS_END
1088 
1089 
1090 
1091 ROM_START( orunners )
1092 	ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* v60 code */
1093 	ROM_LOAD32_WORD( "epr15618.bin", 0x000000, 0x020000, CRC(25647f76) SHA1(9f882921ebb2f078350295c322b263f75812c053) )
1094 	ROM_RELOAD(                      0x040000, 0x020000 )
1095 	ROM_RELOAD(                      0x080000, 0x020000 )
1096 	ROM_RELOAD(                      0x0c0000, 0x020000 )
1097 	ROM_LOAD32_WORD( "epr15619.bin", 0x000002, 0x020000, CRC(2a558f95) SHA1(616ec0a7b251da61a49b933c58895b1a4d39417a) )
1098 	ROM_RELOAD(                      0x040002, 0x020000 )
1099 	ROM_RELOAD(                      0x080002, 0x020000 )
1100 	ROM_RELOAD(                      0x0c0002, 0x020000 )
1101 
1102 	/* v60 data */
1103 	ROM_LOAD32_WORD( "mpr15538.bin", 0x100000, 0x080000, CRC(93958820) SHA1(e19b6f18a5707dbb64ae009d63c05eac5bac4a81) )
1104 	ROM_LOAD32_WORD( "mpr15539.bin", 0x100002, 0x080000, CRC(219760fa) SHA1(bd62a83de9c9542f6da454a87dc4947492f65c52) )
1105 
1106 	ROM_REGION( 0x90000, REGION_CPU2, 0 ) /* sound CPU */
1107 	ROM_LOAD("epr15550.bin", 0x00000, 0x80000, CRC(0205d2ed) SHA1(3475479e1a45fe96eefbe53842758898db7accbf) )
1108 	ROM_RELOAD(              0x10000, 0x80000             )
1109 
1110 	ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
1111 	ROM_LOAD16_BYTE( "mpr15548.bin", 0x000000, 0x200000, CRC(b6470a66) SHA1(e1544590c02d41f62f82a4d771b893fb0f2734c7) )
1112 	ROM_LOAD16_BYTE( "mpr15549.bin", 0x000001, 0x200000, CRC(81d12520) SHA1(1555893941e832f00ad3d0b3ad0c34a0d3a1c58a) )
1113 
1114 	ROM_REGION( 0x1000000, REGION_GFX2, 0 ) /* sprites */
1115 	ROMX_LOAD( "mpr15540.bin", 0x000000, 0x200000, CRC(a10d72b4) SHA1(6d9d5e20be6721b53ce49df4d5a1bbd91f5b3aed) , ROM_SKIP(6)|ROM_GROUPWORD )
1116 	ROMX_LOAD( "mpr15542.bin", 0x000002, 0x200000, CRC(40952374) SHA1(c669ef52508bc2f49cf812dc86ac98fb535471fa) , ROM_SKIP(6)|ROM_GROUPWORD )
1117 	ROMX_LOAD( "mpr15544.bin", 0x000004, 0x200000, CRC(39e3df45) SHA1(38a7b21617b45613b05509dda388f8f7770b186c) , ROM_SKIP(6)|ROM_GROUPWORD )
1118 	ROMX_LOAD( "mpr15546.bin", 0x000006, 0x200000, CRC(e3fcc12c) SHA1(1cf7e05c7873f68789a27a91cddf471df40d7907) , ROM_SKIP(6)|ROM_GROUPWORD )
1119 	ROMX_LOAD( "mpr15541.bin", 0x800000, 0x200000, CRC(a2003c2d) SHA1(200a2c7d78d3f5f28909267fdcdbddd58c5f5fa2) , ROM_SKIP(6)|ROM_GROUPWORD )
1120 	ROMX_LOAD( "mpr15543.bin", 0x800002, 0x200000, CRC(933e8e7b) SHA1(0d53286f524f47851a483569dc37e9f6d34cc5f4) , ROM_SKIP(6)|ROM_GROUPWORD )
1121 	ROMX_LOAD( "mpr15545.bin", 0x800004, 0x200000, CRC(53dd0235) SHA1(4aee5ae1820ff933b6bd8a54bdbf989c0bc95c1a) , ROM_SKIP(6)|ROM_GROUPWORD )
1122 	ROMX_LOAD( "mpr15547.bin", 0x800006, 0x200000, CRC(edcb2a43) SHA1(f0bcfcc749ca0267f85bf9838164869912944d00) , ROM_SKIP(6)|ROM_GROUPWORD )
1123 
1124 	ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Sega PCM sound data */
1125 	ROM_LOAD("mpr15551.bin", 0x000000, 0x200000, CRC(4894bc73) SHA1(351f5c03fb430fd87df915dfe3a377b5ada622c4) )
1126 	ROM_LOAD("mpr15552.bin", 0x200000, 0x200000, CRC(1c4b5e73) SHA1(50a8e9a200575a3522a51bf094aa0e87b90bb0a3) )
1127 
1128 	ROM_REGION( 0x20000, REGION_GFX3, 0 ) /* FG tiles */
1129 ROM_END
1130 
1131 ROM_START( harddunk )
1132 	ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* v60 code */
1133 	ROM_LOAD32_WORD( "ep16512.37", 0x000000, 0x40000, CRC(1a7de085) SHA1(2e0dac1f7715089b7f6b1035c859ffe2d674932f) )
1134 	ROM_RELOAD(                      0x080000, 0x040000 )
1135 	/* the following is the same as 16509.40 but with a different name, unusual for Sega */
1136 	ROM_LOAD32_WORD( "ep16513.40", 0x000002, 0x40000, CRC(603dee75) SHA1(32ae964a4b57d470b4900cca6e06329f1a75a6e6) )
1137 	ROM_RELOAD(                      0x080002, 0x040000 )
1138 
1139 	ROM_REGION( 0x30000, REGION_CPU2, 0 ) /* sound CPU */
1140 	ROM_LOAD("16505",        0x00000, 0x20000, CRC(eeb90a07) SHA1(d1c2132897994b2e85fd5a97222b9fcd61bc421e) )
1141 	ROM_RELOAD(              0x10000, 0x20000             )
1142 
1143 	ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
1144 	ROM_LOAD16_BYTE( "16503", 0x000000, 0x080000, CRC(ac1b6f1a) SHA1(56482931adf7fe551acf796b74cd8af3773d4fef) )
1145 	ROM_LOAD16_BYTE( "16504", 0x000001, 0x080000, CRC(7c61fcd8) SHA1(ca4354f90fada752bf11ee22a7798a8aa22b1c61) )
1146 
1147 	ROM_REGION( 0x1000000, REGION_GFX2, 0 ) /* sprites */
1148 	ROMX_LOAD( "16495", 0x000000, 0x200000, CRC(6e5f26be) SHA1(146761072bbed08f4a9df8a474b34fab61afaa4f) , ROM_SKIP(6)|ROM_GROUPWORD )
1149 	ROMX_LOAD( "16497", 0x000002, 0x200000, CRC(42ab5859) SHA1(f50c51eb81186aec5f747ecab4c5c928f8701afc) , ROM_SKIP(6)|ROM_GROUPWORD )
1150 	ROMX_LOAD( "16499", 0x000004, 0x200000, CRC(a290ea36) SHA1(2503b44174f23a9d323caab86553977d1d6d9c94) , ROM_SKIP(6)|ROM_GROUPWORD )
1151 	ROMX_LOAD( "16501", 0x000006, 0x200000, CRC(f1566620) SHA1(bcf31d11ee669d5afc7dc22c42fa59f4e48c1f50) , ROM_SKIP(6)|ROM_GROUPWORD )
1152 	ROMX_LOAD( "16496", 0x800000, 0x200000, CRC(d9d27247) SHA1(d211623478516ed1b89ab16a7fc7969954c5e353) , ROM_SKIP(6)|ROM_GROUPWORD )
1153 	ROMX_LOAD( "16498", 0x800002, 0x200000, CRC(c022a991) SHA1(a660a20692f4d9ba7be73577328f69f109be5e47) , ROM_SKIP(6)|ROM_GROUPWORD )
1154 	ROMX_LOAD( "16500", 0x800004, 0x200000, CRC(452c0be3) SHA1(af87ce4618bae2d791c1baed34ba7f853af664ff) , ROM_SKIP(6)|ROM_GROUPWORD )
1155 	ROMX_LOAD( "16502", 0x800006, 0x200000, CRC(ffc3147e) SHA1(12d882dec3098674d27058a8009e8778555f477a) , ROM_SKIP(6)|ROM_GROUPWORD )
1156 
1157 	ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Sega PCM sound data */
1158 	ROM_LOAD("mp16506.1", 0x000000, 0x200000, CRC(e779f5ed) SHA1(462d1bbe8bb12a0c5a6d6c613c720b26ec21cb25) )
1159 	ROM_LOAD("mp16507.2", 0x200000, 0x200000, CRC(31e068d3) SHA1(9ac88b15af441fb3b31ce759c565b60a09039571) )
1160 
1161 	ROM_REGION( 0x20000, REGION_GFX3, 0 ) /* FG tiles */
1162 ROM_END
1163 
1164 ROM_START( harddunj )
1165 	ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* v60 code */
1166 	ROM_LOAD32_WORD( "16508.37", 0x000000, 0x40000, CRC(b3713be5) SHA1(8123638a838e41fcc0d32e14382421b521eff94f) )
1167 	ROM_RELOAD(                      0x080000, 0x040000 )
1168 	ROM_LOAD32_WORD( "16509.40", 0x000002, 0x40000, CRC(603dee75) SHA1(32ae964a4b57d470b4900cca6e06329f1a75a6e6) )
1169 	ROM_RELOAD(                      0x080002, 0x040000 )
1170 
1171 	ROM_REGION( 0x30000, REGION_CPU2, 0 ) /* sound CPU */
1172 	ROM_LOAD("16505",        0x00000, 0x20000, CRC(eeb90a07) SHA1(d1c2132897994b2e85fd5a97222b9fcd61bc421e) )
1173 	ROM_RELOAD(              0x10000, 0x20000             )
1174 
1175 	ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
1176 	ROM_LOAD16_BYTE( "16503", 0x000000, 0x080000, CRC(ac1b6f1a) SHA1(56482931adf7fe551acf796b74cd8af3773d4fef) )
1177 	ROM_LOAD16_BYTE( "16504", 0x000001, 0x080000, CRC(7c61fcd8) SHA1(ca4354f90fada752bf11ee22a7798a8aa22b1c61) )
1178 
1179 	ROM_REGION( 0x1000000, REGION_GFX2, 0 ) /* sprites */
1180 	ROMX_LOAD( "16495", 0x000000, 0x200000, CRC(6e5f26be) SHA1(146761072bbed08f4a9df8a474b34fab61afaa4f) , ROM_SKIP(6)|ROM_GROUPWORD )
1181 	ROMX_LOAD( "16497", 0x000002, 0x200000, CRC(42ab5859) SHA1(f50c51eb81186aec5f747ecab4c5c928f8701afc) , ROM_SKIP(6)|ROM_GROUPWORD )
1182 	ROMX_LOAD( "16499", 0x000004, 0x200000, CRC(a290ea36) SHA1(2503b44174f23a9d323caab86553977d1d6d9c94) , ROM_SKIP(6)|ROM_GROUPWORD )
1183 	ROMX_LOAD( "16501", 0x000006, 0x200000, CRC(f1566620) SHA1(bcf31d11ee669d5afc7dc22c42fa59f4e48c1f50) , ROM_SKIP(6)|ROM_GROUPWORD )
1184 	ROMX_LOAD( "16496", 0x800000, 0x200000, CRC(d9d27247) SHA1(d211623478516ed1b89ab16a7fc7969954c5e353) , ROM_SKIP(6)|ROM_GROUPWORD )
1185 	ROMX_LOAD( "16498", 0x800002, 0x200000, CRC(c022a991) SHA1(a660a20692f4d9ba7be73577328f69f109be5e47) , ROM_SKIP(6)|ROM_GROUPWORD )
1186 	ROMX_LOAD( "16500", 0x800004, 0x200000, CRC(452c0be3) SHA1(af87ce4618bae2d791c1baed34ba7f853af664ff) , ROM_SKIP(6)|ROM_GROUPWORD )
1187 	ROMX_LOAD( "16502", 0x800006, 0x200000, CRC(ffc3147e) SHA1(12d882dec3098674d27058a8009e8778555f477a) , ROM_SKIP(6)|ROM_GROUPWORD )
1188 
1189 	ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Sega PCM sound data */
1190 	ROM_LOAD("mp16506.1", 0x000000, 0x200000, CRC(e779f5ed) SHA1(462d1bbe8bb12a0c5a6d6c613c720b26ec21cb25) )
1191 	ROM_LOAD("mp16507.2", 0x200000, 0x200000, CRC(31e068d3) SHA1(9ac88b15af441fb3b31ce759c565b60a09039571) )
1192 
1193 	ROM_REGION( 0x20000, REGION_GFX3, 0 ) /* FG tiles */
1194 ROM_END
1195 
1196 ROM_START( scross )
1197 	ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* v60 code */
1198 	ROM_LOAD32_WORD( "epr15093.bin", 0x000000, 0x040000, CRC(2adc7a4b) SHA1(dca71f00d94898c0758394704d819e13482bf120) )
1199 	ROM_RELOAD(                      0x080000, 0x040000 )
1200 	ROM_LOAD32_WORD( "epr15094.bin", 0x000002, 0x040000, CRC(bbb0ae73) SHA1(0d8837706405f301adf8fa85c8d4813d7600af98) )
1201 	ROM_RELOAD(                      0x080002, 0x040000 )
1202 
1203 	/* v60 data */
1204 	ROM_LOAD32_WORD( "epr15018.bin", 0x100000, 0x080000, CRC(3a98385e) SHA1(8088d337655030c28e290da4bbf44cb647dab66c) )
1205 	ROM_LOAD32_WORD( "epr15019.bin", 0x100002, 0x080000, CRC(8bf4ac83) SHA1(e594d9d9b42d0765ed8a20a40b7dd92b75124d34) )
1206 
1207 	ROM_REGION( 0x90000, REGION_CPU2, 0 ) /* sound CPU */
1208 	ROM_LOAD("epr15192.bin", 0x00000, 0x20000, CRC(7524290b) SHA1(ee58be2c0c4293ee19622b96ca493f4ce4da0038) )
1209 	ROM_RELOAD(              0x10000, 0x20000             )
1210 
1211 	ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
1212 	/* 1ST AND 2ND HALF IDENTICAL (all roms) */
1213 	ROM_LOAD16_BYTE( "epr15020.bin", 0x000000, 0x200000, CRC(65afea2f) SHA1(ad573727398bfac8e94f321be84b60e5690bfba6) )
1214 	ROM_LOAD16_BYTE( "epr15021.bin", 0x000001, 0x200000, CRC(27bc6969) SHA1(d6bb446becb2d36b73bca5055357a43b837afc0a) )
1215 
1216 	ROM_REGION( 0x1000000, REGION_GFX2, 0 ) /* sprites */
1217 	/* 1ST AND 2ND HALF IDENTICAL (all roms) */
1218 	ROMX_LOAD( "epr15022.bin", 0x000000, 0x200000, CRC(09ca9608) SHA1(cbd0138c1c7811d42b051fed6a7e3526cc4e457f) , ROM_SKIP(6)|ROM_GROUPWORD )
1219 	ROMX_LOAD( "epr15024.bin", 0x000002, 0x200000, CRC(0dc920eb) SHA1(d24d637aa0dcd3bae779ef7e12663df81667dbf7) , ROM_SKIP(6)|ROM_GROUPWORD )
1220 	ROMX_LOAD( "epr15026.bin", 0x000004, 0x200000, CRC(67637c37) SHA1(7c250e7e9dd5c07da4fa35bacdfcecd5e8fa4ec7) , ROM_SKIP(6)|ROM_GROUPWORD )
1221 	ROMX_LOAD( "epr15028.bin", 0x000006, 0x200000, CRC(9929abdc) SHA1(34b6624ddd3a0aedec0a2b433643a37f745ec66d) , ROM_SKIP(6)|ROM_GROUPWORD )
1222 	ROMX_LOAD( "epr15023.bin", 0x800000, 0x200000, CRC(0e42a2bb) SHA1(503214caf5fa9a2324b61e04f378fd1a790322df) , ROM_SKIP(6)|ROM_GROUPWORD )
1223 	ROMX_LOAD( "epr15025.bin", 0x800002, 0x200000, CRC(0c677fc6) SHA1(fc2207008417072e7ee91f722797d827e150ce2d) , ROM_SKIP(6)|ROM_GROUPWORD )
1224 	ROMX_LOAD( "epr15027.bin", 0x800004, 0x200000, CRC(d6d077f9) SHA1(928cefae9ae58239fbffb1dcee282c6ac1e661fe) , ROM_SKIP(6)|ROM_GROUPWORD )
1225 	ROMX_LOAD( "epr15029.bin", 0x800006, 0x200000, CRC(707af749) SHA1(fae5325c983df3cf198878220ad88d47339ac512) , ROM_SKIP(6)|ROM_GROUPWORD )
1226 
1227 	ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Sega PCM sound data */
1228 	/* 1ST AND 2ND HALF IDENTICAL (all roms, are these OK?) */
1229 	ROM_LOAD("epr15031.bin", 0x000000, 0x200000, CRC(663a7fd2) SHA1(b4393a687225b075db21960d19a6ddd7a9d7d086) )
1230 	ROM_LOAD("epr15032.bin", 0x200000, 0x200000, CRC(cb709f3d) SHA1(3962c8b5907d1f8f611f58ddac693cc47364a79c) )
1231 
1232 	ROM_REGION( 0x20000, REGION_GFX3, 0 ) /* FG tiles */
1233 ROM_END
1234 
1235 ROM_START( titlef )
1236 	ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* v60 code */
1237 	ROM_LOAD32_WORD( "epr15388.37", 0x000000, 0x40000, CRC(db1eefbd) SHA1(7059a1d5c9364d836c1d922071a108cbde661e0a) )
1238 	ROM_RELOAD(                      0x080000, 0x040000 )
1239 	ROM_LOAD32_WORD( "epr15389.40", 0x000002, 0x40000, CRC(da9f60a3) SHA1(87a7bea04e51e3c241871e83ff7322c6a07bd106) )
1240 	ROM_RELOAD(                      0x080002, 0x040000 )
1241 
1242 	ROM_REGION( 0x30000, REGION_CPU2, 0 ) /* sound CPU */
1243 	ROM_LOAD("epr15384.31", 0x00000, 0x20000, CRC(0f7d208d) SHA1(5425120480f813210fae28951e8bfd5acb08ca53) )
1244 	ROM_RELOAD(              0x10000, 0x20000             )
1245 
1246 	ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
1247 	ROM_LOAD16_BYTE( "mpr15381.3", 0x000000, 0x200000, CRC(162cc4d6) SHA1(2369d3d76ab5ef8f033aa45530ab957f0e5ff028) )
1248 	ROM_LOAD16_BYTE( "mpr15382.11", 0x000001, 0x200000, CRC(fd03a130) SHA1(040c36383ef5d8298af714958cd5b0a4c7556ae7) )
1249 
1250 	ROM_REGION( 0x1000000, REGION_GFX2, 0 ) /* sprites */
1251 	ROMX_LOAD( "mpr15379.14", 0x000000, 0x200000, CRC(e5c74b11) SHA1(67e4460efe5dcd88ffc12024b255efc843e6a8b5) , ROM_SKIP(6)|ROM_GROUPWORD )
1252 	ROMX_LOAD( "mpr15375.15", 0x000002, 0x200000, CRC(046a9b50) SHA1(2b4c53f2a0264835cb7197daa9b3461c212541e8) , ROM_SKIP(6)|ROM_GROUPWORD )
1253 	ROMX_LOAD( "mpr15371.10", 0x000004, 0x200000, CRC(999046c6) SHA1(37ce4e8aaf537b5366eacabaf36e4477b5624121) , ROM_SKIP(6)|ROM_GROUPWORD )
1254 	ROMX_LOAD( "mpr15373.38", 0x000006, 0x200000, CRC(9b3294d9) SHA1(19542f14ce09753385a44098dfd1aaf331e7af0e) , ROM_SKIP(6)|ROM_GROUPWORD )
1255 	ROMX_LOAD( "mpr15380.22", 0x800000, 0x200000, CRC(6ea0e58d) SHA1(1c4b761522157b0b9d086181ba6f6994879d8fdf) , ROM_SKIP(6)|ROM_GROUPWORD )
1256 	ROMX_LOAD( "mpr15376.23", 0x800002, 0x200000, CRC(de3e05c5) SHA1(cac0d04ecd37e5836d246c0809bcfc11430df591) , ROM_SKIP(6)|ROM_GROUPWORD )
1257 	ROMX_LOAD( "mpr15372.18", 0x800004, 0x200000, CRC(c187c36a) SHA1(bb55c2a768a43ef19a7847a4aa113523fee26c20) , ROM_SKIP(6)|ROM_GROUPWORD )
1258 	ROMX_LOAD( "mpr15374.41", 0x800006, 0x200000, CRC(e026aab0) SHA1(75dfaef6d50c3d1d7f27aa5e44fcbc0ff2173c6f) , ROM_SKIP(6)|ROM_GROUPWORD )
1259 
1260 	ROM_REGION( 0x300000, REGION_SOUND1, 0 ) /* Sega PCM sound data */
1261 	ROM_LOAD("mpr15385.1", 0x000000, 0x200000, CRC(5a9b0aa0) SHA1(d208aa165f9eea05e3b8c3f406ff44374e4f6887) )
1262 
1263 	ROM_REGION( 0x20000, REGION_GFX3, 0 ) /* FG tiles */
1264 ROM_END
1265 
1266 /* boot, and are playable, some gfx problems*/
1267 GAMEX( 1992, orunners,     0,        multi32, orunners, orunners, ROT0, "Sega", "Outrunners (US)", GAME_IMPERFECT_GRAPHICS )
1268 GAMEX( 1994, harddunk,     0,        multi32, harddunk, harddunk, ROT0, "Sega", "Hard Dunk (World)", GAME_IMPERFECT_GRAPHICS )
1269 GAMEX( 1994, harddunj,     harddunk, multi32, harddunk, harddunk, ROT0, "Sega", "Hard Dunk (Japan)", GAME_IMPERFECT_GRAPHICS )
1270 GAMEX( 1992, scross,       0,        scross,  scross,   orunners, ROT0, "Sega", "Stadium Cross (World)", GAME_IMPERFECT_GRAPHICS )
1271 GAMEX( 1992, titlef,       0,        multi32, titlef,   titlef,   ROT0, "Sega", "Title Fight (World)", GAME_IMPERFECT_GRAPHICS )
1272