1 /**************************************************************************
2  *
3  * konamigx.c - Konami System GX
4  * Driver by R. Belmont, Acho A. Tang, and Phil Stroffolino.
5  * ESC protection emulation and TMS57002 skipper by Olivier Galibert.
6  *
7  * Basic hardware consists of:
8  * - MC68EC020 main CPU at 24 MHz
9  * - MC68000 sound CPU with 2x K054539 PCM chips plus a TMS57002 DASP for effects
10  *
11  * Tilemaps are handled by the old familiar K054156 with a new partner K056832.
12  * This combination is mostly compatible with the 156/157 combo but now sports
13  * up to 8 bits per pixel as well as larger 128x64 tile planes.
14  *
15  * Sprites are handled by a K053246 combined with a K055673.  This combo was
16  * actually used on some 16 bit Konami games as well.  It appears identical
17  * to the standard 246/247 combo except with 5-8 bits per pixel.
18  *
19  * Video output is handled by a K055555 mixer/priority encoder.  This is a much
20  * more capable beast than the earlier 53251, supporting a background gradient
21  * and flexible priority handling among other features.  It's combined with the
22  * 54338 alpha blending engine first seen in Xexex for flexible blending.
23  *
24  * There are actually 4 types of System GX hardware, which are differentiated
25  * by their ROM board.  The most common is the "Type 2".
26  *
27  * 68020 memory map for Type 2:
28  * 000000: BIOS ROM (128k)
29  * 200000: game program ROM (1 meg, possibly up to 2)
30  * 400000: data ROMs
31  * c00000: Work RAM (128k)
32  * cc0000: Protection chip
33  * d00000: 054157 ROM readback for memory test
34  * d20000: sprite RAM (4k)
35  * d40000: 054157/056832 tilemap generator    (VACSET)
36  * d44000: tile bank selectors	              (VSCCS)
37  * d48000: 053246/055673 sprite generator     (OBJSET1)
38  * d4a000: more readback for sprite generator (OBJSET2)
39  * d4c000: CCU1 registers                     (CCUS1)
40  * 00: HCH			  6M/288   8M/384   12M/576	       224 256
41  * 02: HCL		   HCH 	    01      01        02	  VCH  01  01
42  * 04: HFPH		   HCL      7f      ff        ff	  VCL  07  20
43  * 06: HFPL		   HFPH	    00      00        00	  VFP  11  0c
44  * 08: HBPH		   HFPL	    10      19        23	  VBP  0e  0e
45  * 0A: HBPL		   HBPH	    00      00        00	  VSW  07  05
46  * 10: VCH		   HBPL	    30      3f        4d
47  * 12: VCL		   HSW	    03      04        09
48  * 14: VFP
49  * 16: VBP
50  * 18: VSW/HSW
51  * 1A: INT TIME
52  * 1C: INT1ACK (read VCTH) INT1 = V blank
53  * 1E: INT2ACK (read VCTL) INT2 = H blank
54  * d4e000: CCU2 registers		    (CCUS2)
55  * d50000: K055555 8-bit-per-pixel priority encoder (PCUCS)
56  * d52000: shared RAM with audio 68000      (SOUNDCS)
57  * d56000: EEPROM comms, bit 7 is watchdog, bit 5 is frame?? (WRPOR1)
58  * d56001: IRQ acknowledge (bits 0->3 = irq 1->4), IRQ enable in hi nibble (bits 4->7 = irq 1->4)
59  * d58000: control register (OBJCHA, 68000 enable/disable, probably more) (WRPOR2)
60  * d5a000: dipswitch bank 1		    (RDPORT1)
61  * d5a001: dipswitch bank 2
62  * d5a002: input port (service switch)
63  * d5a003: EEPROM data/ready in bit 0
64  * d5c000: player 1 inputs		    (RDPORT2)
65  * d5c001: player 2 inputs
66  * d5e000: test switch			    (RDPORT3)
67  * d80000: K054338 alpha blender registers
68  * d90000: palette RAM for tilemaps
69  * da0000: tilemap RAM (8k window, bankswitched by d40033)
70  * dc0000: LANCRAMCS
71  * dd0000: LANCIOCS
72  * dd2000: RS232C-1
73  * dd4000: RS232C-2
74  * dd6000: trackball 1
75  * dd8000: trackball 2
76  * dda000: ADC-WRPORT
77  * ddc000: ADC-RDPORT
78  * dde000: EXT-WRPORT
79  * de0000: EXT_RDPORT
80  * e00000: type3/4: PSAC2 registers
81  * e20000: type3/4: unk. register
82  * e40000: type3/4: unk. register
83  * e60000: type3/4: PSAC2 linecontrol RAM
84  * e80000: type3/4: main monitor's palette
85  * ea0000: type3/4: sub monitor's palette
86  * ec0000: type3/4: frame flag
87  * f00000: 32k of RnG2 additional RAM
88  *
89  * IRQs:
90  * 1: VBL (at 60 Hz)
91  * 2: HBL
92  * 3: Sprite DMA complete
93  * 4: from protection device, indicates command completion for "ESC" chip
94  *
95  */
96 
97 #define GX_DEBUG     0
98 #define GX_SKIPIDLE  1
99 
100 #include "driver.h"
101 #include "state.h"
102 
103 #include "vidhrdw/generic.h"
104 #include "vidhrdw/konamiic.h"
105 #include "cpu/m68000/m68000.h"
106 /* #include "cpu/z80/z80.h" */
107 #include "machine/eeprom.h"
108 #include "sound/k054539.h"
109 #include "machine/konamigx.h"
110 
111 VIDEO_START(konamigx_5bpp);
112 VIDEO_START(konamigx_6bpp);
113 VIDEO_START(konamigx_6bpp_2);
114 VIDEO_START(konamigx_type3);
115 VIDEO_START(konamigx_type4);
116 VIDEO_START(le2);
117 VIDEO_START(dragoonj);
118 VIDEO_START(winspike);
119 VIDEO_START(opengolf);
120 VIDEO_START(racinfrc);
121 VIDEO_UPDATE(konamigx);
122 
123 MACHINE_INIT(konamigx);
124 
125 WRITE32_HANDLER( konamigx_palette_w );
126 WRITE32_HANDLER( konamigx_palette2_w );
127 WRITE32_HANDLER( konamigx_555_palette_w );
128 WRITE32_HANDLER( konamigx_555_palette2_w );
129 WRITE32_HANDLER( konamigx_tilebank_w );
130 
131 data32_t *gx_psacram, *gx_subpaletteram32;
132 WRITE32_HANDLER( konamigx_t1_psacmap_w );
133 WRITE32_HANDLER( konamigx_t4_psacmap_w );
134 
135 int konamigx_cfgport;
136 
137 static data32_t *gx_workram; /* workram pointer for ESC protection fun */
138 static data16_t *gx_sndram;
139 static int gx_rdport1_3, gx_syncen;
140 
141 static void *dmadelay_timer;
142 
143 /**********************************************************************************/
144 /*
145    Konami ESC (E Security Chip) protection chip found on:
146 	- Salamander 2
147 	- Sexy Parodius
148 	- Twinbee Yahhoo
149 	- Dragoon Might
150 	- Daisu-Kiss
151 
152    The ESC is a custom microcontroller with external SRAM connected
153    to it.  It's microprogram is uploaded by the host game.  The ESC
154    has complete DMA access to the entire 68020 address space, like
155    most Konami protection devices.
156 
157    Most games use the same or a compatible microprogram.  This
158    program gathers the sprite information scattered around work RAM
159    and builds a sprite list in sprite RAM which is properly sorted
160    in priority order.  The Japanese version of Gokujou Parodius
161    contains a 68020 version of this program at 0x2a285c.  The code
162    below is almost a direct translation into C of that routine.
163 
164    Salamander 2 uses a different work RAM format and a different
165    ESC program, and Dragoon Might uses a third format and program.
166    These games haven't been reverse-engineered yet and so have
167    no sprites.
168 
169    Winning Spike and the Type 4 games use a new protection chip
170    made from a Xilinx FPGA.  See type4_prot_w for details.
171 
172 */
173 
174 /* constant names mostly taken from sexy parodius, which includes
175    a debug protection routine with asserts intact!  Cracking the ESC
176    would have been much more difficult without it.
177  */
178 
179 #define ESC_INIT_CONSTANT	0x0108db04
180 #define ESC_OBJECT_MAGIC_ID	0xfef724fb
181 #define ESTATE_END	2
182 #define ESTATE_ERROR	3
183 
184 /*    opcode 1*/
185 /* dragoonj*/
186 /*  ESC Opcode 1 : 000000xx 000000xx 00000xx0 00000000*/
187 /* tbyahhoo  sprites at c00000*/
188 /*  ESC Opcode 1 : 0000ffff 0000ffff 0000ffff 0000000e*/
189 /* sexyparo  sprites at c00604*/
190 /*  ESC Opcode 1 : 00000000 00000000 00d20000 00000000*/
191 /*  ESC Opcode 1 : 00000000 00000000 00d21000 00000000*/
192 /* salmndr2*/
193 /*  ESC Opcode 1 : 00c1f7f8 0022002c 00c00060 00010014*/
194 /* tokkae*/
195 /*  ESC Opcode 1 : 00c00000 0000000x 00000023 0000ffff*/
196 /* puzldama*/
197 /*  ESC Opcode 1 : 002xxxxx 00236102 xxxxxx01 xxxxxxxx*/
198 
199 /* Say hello to gokuparo at 0x2a285c*/
200 
201 static struct sprite_entry {
202 	int pri;
203 	unsigned int adr;
204 } sprites[0x100];
205 
generate_sprites(UINT32 src,UINT32 spr,int count)206 static void generate_sprites(UINT32 src, UINT32 spr, int count)
207 {
208 	int i;
209 	int scount;
210 	int ecount;
211 	scount = 0;
212 	ecount = 0;
213 
214 	for(i=0; i<count; i++) {
215 		unsigned int adr = src + 0x100*i;
216 		int pri;
217 		if(!cpu_readmem24bedw_word(adr+2))
218 			continue;
219 		pri = cpu_readmem24bedw_word(adr+28);
220 
221 		if(pri < 256) {
222 			sprites[ecount].pri = pri;
223 			sprites[ecount].adr = adr;
224 			ecount++;
225 		}
226 	}
227 	/*qsort(sprites, ecount, sizeof(struct sprite_entry), pri_comp);*/
228 
229 	for(i=0; i<ecount; i++) {
230 		unsigned int adr = sprites[i].adr;
231 		if(adr) {
232 			unsigned int set =(cpu_readmem24bedw_word(adr) << 16)|cpu_readmem24bedw_word(adr+2);
233 			unsigned short glob_x = cpu_readmem24bedw_word(adr+4);
234 			unsigned short glob_y = cpu_readmem24bedw_word(adr+8);
235 			unsigned short flip_x = cpu_readmem24bedw_word(adr+12) ? 0x1000 : 0x0000;
236 			unsigned short flip_y = cpu_readmem24bedw_word(adr+14) ? 0x2000 : 0x0000;
237 			unsigned short glob_f = flip_x | (flip_y ^ 0x2000);
238 			unsigned short zoom_x = cpu_readmem24bedw_word(adr+20);
239 			unsigned short zoom_y = cpu_readmem24bedw_word(adr+22);
240 			unsigned short color_val    = 0x0000;
241 			unsigned short color_mask   = 0xffff;
242 			unsigned short color_set    = 0x0000;
243 			unsigned short color_rotate = 0x0000;
244 			unsigned short v;
245 
246 			v = cpu_readmem24bedw_word(adr+24);
247 			if(v & 0x8000) {
248 				color_mask = 0xf3ff;
249 				color_val |= (v & 3) << 10;
250 			}
251 
252 			v = cpu_readmem24bedw_word(adr+26);
253 			if(v & 0x8000) {
254 				color_mask &= 0xfcff;
255 				color_val  |= (v & 3) << 8;
256 			}
257 
258 			v = cpu_readmem24bedw_word(adr+18);
259 			if(v & 0x8000) {
260 				color_mask &= 0xff1f;
261 				color_val  |= v & 0xe0;
262 			}
263 
264 			v = cpu_readmem24bedw_word(adr+16);
265 			if(v & 0x8000)
266 				color_set = v & 0x1f;
267 			if(v & 0x4000)
268 				color_rotate = v & 0x1f;
269 
270 			if(!zoom_x)
271 				zoom_x = 0x40;
272 			if(!zoom_y)
273 				zoom_y = 0x40;
274 
275 			if(set >= 0x200000 && set < 0xd00000)
276 			{
277 				unsigned short count2 = cpu_readmem24bedw_word(set);
278 				set += 2;
279 				while(count2) {
280 					unsigned short idx  = cpu_readmem24bedw_word(set);
281 					unsigned short flip = cpu_readmem24bedw_word(set+2);
282 					unsigned short col  = cpu_readmem24bedw_word(set+4);
283 					short y = cpu_readmem24bedw_word(set+6);
284 					short x = cpu_readmem24bedw_word(set+8);
285 
286 					if(idx == 0xffff) {
287 						set = (flip<<16) | col;
288 						if(set >= 0x200000 && set < 0xd00000)
289 							continue;
290 						else
291 							break;
292 					}
293 
294 					if(zoom_y != 0x40)
295 						y = y*0x40/zoom_y;
296 					if(zoom_x != 0x40)
297 						x = x*0x40/zoom_x;
298 
299 					if(flip_x)
300 						x = glob_x - x;
301 					else
302 						x = glob_x + x;
303 					if(x < -256 || x > 512+32)
304 						goto next;
305 
306 					if(flip_y)
307 						y = glob_y - y;
308 					else
309 						y = glob_y + y;
310 					if(y < -256 || y > 512)
311 						goto next;
312 
313 					col = (col & color_mask) | color_val;
314 					if(color_set)
315 						col = (col & 0xffe0) | color_set;
316 					if(color_rotate)
317 						col = (col & 0xffe0) | ((col + color_rotate) & 0x1f);
318 
319 					cpu_writemem24bedw_word(spr   , (flip ^ glob_f) | sprites[i].pri);
320 					cpu_writemem24bedw_word(spr+ 2, idx);
321 					cpu_writemem24bedw_word(spr+ 4, y);
322 					cpu_writemem24bedw_word(spr+ 6, x);
323 					cpu_writemem24bedw_word(spr+ 8, zoom_y);
324 					cpu_writemem24bedw_word(spr+10, zoom_x);
325 					cpu_writemem24bedw_word(spr+12, col);
326 					spr += 16;
327 					scount++;
328 					if(scount == 256)
329 						return;
330 				next:
331 					count2--;
332 					set += 10;
333 				}
334 			}
335 		}
336 	}
337 	while(scount < 256) {
338 		cpu_writemem24bedw_word(spr, scount);
339 		scount++;
340 		spr += 16;
341 	}
342 }
343 
tkmmpzdm_esc(UINT32 p1,UINT32 p2,UINT32 p3,UINT32 p4)344 static void tkmmpzdm_esc(UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
345 {
346 	konamigx_esc_alert(gx_workram, 0x0142, 0x100, 0);
347 }
348 
dragoonj_esc(UINT32 p1,UINT32 p2,UINT32 p3,UINT32 p4)349 static void dragoonj_esc(UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
350 {
351 	konamigx_esc_alert(gx_workram, 0x5c00, 0x100, 0);
352 }
353 
sal2_esc(UINT32 p1,UINT32 p2,UINT32 p3,UINT32 p4)354 static void sal2_esc(UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
355 {
356 	konamigx_esc_alert(gx_workram, 0x1c8c, 0x172, 1);
357 }
358 
sexyparo_esc(UINT32 p1,UINT32 p2,UINT32 p3,UINT32 p4)359 static void sexyparo_esc(UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
360 {
361 	/* The d20000 should probably be p3*/
362 	generate_sprites(0xc00604, 0xd20000, 0xfc);
363 }
364 
tbyahhoo_esc(UINT32 p1,UINT32 p2,UINT32 p3,UINT32 p4)365 static void tbyahhoo_esc(UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
366 {
367 	generate_sprites(0xc00000, 0xd20000, 0x100);
368 }
369 
daiskiss_esc(UINT32 p1,UINT32 p2,UINT32 p3,UINT32 p4)370 static void daiskiss_esc(UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
371 {
372 	generate_sprites(0xc00000, 0xd20000, 0x100);
373 }
374 
375 static unsigned char esc_program[4096];
376 static void (*esc_cb)(UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4);
377 
WRITE32_HANDLER(esc_w)378 static WRITE32_HANDLER( esc_w )
379 {
380 	unsigned int opcode;
381 	unsigned int params;
382 
383 	/* ignore NULL writes to the ESC (these appear to be "keepalives" on the real hardware) */
384 	if (!data)
385 	{
386 		return;
387 	}
388 
389 	/* ignore out-of-range addresses */
390 	if ((data < 0xc00000) || (data > 0xc1ffff))
391 	{
392 		return;
393 	}
394 
395 	/* the master opcode can be at an unaligned address, so get it "safely" */
396 	opcode = (cpu_readmem24bedw_word(data+2))|(cpu_readmem24bedw_word(data)<<16);
397 
398 	/* if there's an OBJECT_MAGIC_ID, that means
399 	   there is a valid ESC command packet. */
400 	if (opcode == ESC_OBJECT_MAGIC_ID)
401 	{
402 		int i;
403 		/* get the subop now */
404 		opcode = cpu_readmem24bedw(data+8);
405 		params = (cpu_readmem24bedw_word(data+12) << 16) | cpu_readmem24bedw_word(data+14);
406 
407 		switch(opcode) {
408 		case 5: /* Reset*/
409 			break;
410 		case 2: /* Load program*/
411 			for(i=0; i<4096; i++)
412 				esc_program[i] = cpu_readmem24bedw(params+i);
413 /*
414 			{
415 				FILE *f;
416 
417 				f = fopen("esc.bin", "wb");
418 				fwrite(esc_program, 4096, 1, f);
419 				fclose(f);
420 
421 				log_cb(RETRO_LOG_DEBUG, LOGPRE "Dumping ESC program\n");
422 			}
423 */
424 			break;
425 		case 1: /* Run program*/
426 			if(esc_cb) {
427 				UINT32 p1 = (cpu_readmem24bedw_word(params+0)<<16) | cpu_readmem24bedw_word(params+2);
428 				UINT32 p2 = (cpu_readmem24bedw_word(params+4)<<16) | cpu_readmem24bedw_word(params+6);
429 				UINT32 p3 = (cpu_readmem24bedw_word(params+8)<<16) | cpu_readmem24bedw_word(params+10);
430 				UINT32 p4 = (cpu_readmem24bedw_word(params+12)<<16) | cpu_readmem24bedw_word(params+14);
431 				esc_cb(p1, p2, p3, p4);
432 			}
433 			break;
434 		default:
435 /*			log_cb(RETRO_LOG_DEBUG, LOGPRE "Unknown ESC opcode %d\n", opcode);*/
436 			break;
437 		}
438 		cpu_writemem24bedw(data+9, ESTATE_END);
439 
440 		if (konamigx_wrport1_1 & 0x10)
441 		{
442 			gx_rdport1_3 &= ~8;
443 			cpu_set_irq_line(0, 4, HOLD_LINE);
444 		}
445 	}
446 	else
447 	{
448 		/* INIT_CONSTANT means just for the ESC to initialize itself,
449 		   there is not normal command parsing here. */
450 		if (opcode == ESC_INIT_CONSTANT)
451 		{
452 /*			log_cb(RETRO_LOG_DEBUG, LOGPRE "Got ESC_INIT_CONSTANT, 'booting' ESC\n");*/
453 			return;
454 		}
455 
456 		/* unknown constant (never been seen in any game..) */
457 	}
458 }
459 
460 
461 /**********************************************************************************/
462 /* NVRAM and EEPROM handlers */
463 
464 static int init_eeprom_count;
465 
NVRAM_HANDLER(konamigx_93C46)466 static NVRAM_HANDLER(konamigx_93C46)
467 {
468 	if (read_or_write)
469 		EEPROM_save(file);
470 	else
471 	{
472 		EEPROM_init(&eeprom_interface_93C46);
473 
474 		if (file)
475 		{
476 			init_eeprom_count = 0;
477 			EEPROM_load(file);
478 		}
479 		else
480 			init_eeprom_count = 10;
481 	}
482 }
483 
READ32_HANDLER(eeprom_r)484 static READ32_HANDLER( eeprom_r )
485 {
486 	/* d5a000 = DIP switches #1 (RDPORT1)*/
487 	/* d5a001 = DIP switches #2*/
488 	/* d5a002 = input port: service4/3/2/1 coin 4/3/2/1*/
489 	/* d5a003 = objint stat, exioint stat, trackint stat, excgint stat, escint stat,*/
490 	/*	    excpuint stat, objdma stat, eeprom do*/
491 
492 	/* note: racin' force expects bit 1 of the eeprom port to toggle*/
493 	return(readinputport(6)<<24 | readinputport(7)<<16 | readinputport(0)<<8 | EEPROM_read_bit() | gx_rdport1_3);
494 }
495 
WRITE32_HANDLER(eeprom_w)496 static WRITE32_HANDLER( eeprom_w )
497 {
498 	data32_t odata;
499 
500 	if (!(mem_mask & 0xff000000))
501 	{
502 		odata = data >> 24;
503 		/*
504 		  bit 7: afr
505 		  bit 6: objscan
506 		  bit 5: background color select: 0 = 338 solid color, 1 = 5^5 gradient
507 		  bit 4: coin counter 2
508 		  bit 3: coin counter 1
509 		  bit 2: eeprom clock
510 		  bit 1: eeprom chip select
511 		  bit 0: eeprom data
512 		*/
513 
514 		EEPROM_write_bit((odata&0x01) ? 1 : 0);
515 		EEPROM_set_cs_line((odata&0x02) ? CLEAR_LINE : ASSERT_LINE);
516 		EEPROM_set_clock_line((odata&0x04) ? ASSERT_LINE : CLEAR_LINE);
517 
518 		konamigx_wrport1_0 = odata;
519 	}
520 
521 	if (!(mem_mask & 0xff0000))
522 	{
523 		/*
524 		  bit 7 = mask all IRQ
525 		  bit 6 = LAN IRQ enable
526 		  bit 5 = CCU2 IRQ enable
527 		  bit 4 = ESC IRQ enable
528 		  bit 3 = EXCPU IRQ enable
529 		  bit 2 = OBJ IRQ enable
530 		  bit 1 = CCU1-INT2 enable
531 		  bit 0 = CCU1-INT1 enable
532 		*/
533 
534 		konamigx_wrport1_1 = (data>>16)&0xff;
535 /*		log_cb(RETRO_LOG_DEBUG, LOGPRE "write %x to IRQ register (PC=%x)\n", konamigx_wrport1_1, activecpu_get_pc());*/
536 
537 		/* gx_syncen is to ensure each IRQ is trigger at least once after being enabled*/
538 		if (konamigx_wrport1_1 & 0x80) gx_syncen |= konamigx_wrport1_1 & 0x1f;
539 	}
540 }
541 
WRITE32_HANDLER(control_w)542 static WRITE32_HANDLER( control_w )
543 {
544 	/*logerror("write %x to control register (mask=%x)\n", data, mem_mask);*/
545 
546 	/* known controls:*/
547 	/* bit 23 = reset graphics chips*/
548 	/* bit 22 = 0 to halt 68000, 1 to let it run (SOUNDRESET)*/
549 	/* bit 21 = VRAM-CHARD 0=VRAM, 1=ROM*/
550 	/* bit 20 = OBJCHA line for '246*/
551 	/* bit 19 = select top 2 sprite priority bits to be 14/15 or 16/17 of the*/
552 	/*          spritelist "color" word.*/
553 	/* bit 18 = if 0, the top 2 sprite priority bits are "11" else use bit 19's*/
554 	/*          results.*/
555 	/* bit 17 = DOTSEL1 : 0 = 6M, 1=8M, 2=12M, 3=16M*/
556 	/* bit 16 = DOTSEL0*/
557 	if (!(mem_mask & 0x00ff0000))
558 	{
559 		if (data & 0x400000)
560 		{
561 			/* enable 68k*/
562 			/* clear the halt condition and reset the 68000*/
563 			cpu_set_halt_line(1, CLEAR_LINE);
564 			cpu_set_reset_line(1, PULSE_LINE);
565 		}
566 		else
567 		{
568 			/* disable 68k*/
569 			cpu_set_halt_line(1, ASSERT_LINE);
570 		}
571 
572 		K053246_set_OBJCHA_line((data&0x100000) ? ASSERT_LINE : CLEAR_LINE);
573 
574 		konamigx_wrport2 = (data>>16)&0xff;
575 	}
576 }
577 
578 
579 /**********************************************************************************/
580 /* IRQ controllers */
581 
582 #define ADD_SKIPPER32(PC, BASE, START, END, DATA, MASK){ \
583   waitskip.pc   = PC;        \
584   waitskip.offs = START/4;   \
585   waitskip.data = DATA;      \
586   waitskip.mask = MASK;      \
587   resume_trigger= 1000;      \
588   install_mem_read32_handler \
589   (0, (BASE+START)&~3, (BASE+END)|3, waitskip_r);}
590 
591 static struct { UINT32 offs, pc, mask, data; } waitskip;
592 static int suspension_active, resume_trigger;
593 
READ32_HANDLER(waitskip_r)594 static READ32_HANDLER(waitskip_r)
595 {
596 	data32_t data = gx_workram[waitskip.offs+offset];
597 	mem_mask = ~mem_mask;
598 
599 	if (activecpu_get_pc() == waitskip.pc && (data & mem_mask) == (waitskip.data & mem_mask))
600 	{
601 		cpu_spinuntil_trigger(resume_trigger);
602 		suspension_active = 1;
603 	}
604 
605 	return(data);
606 }
607 
608 
READ32_HANDLER(ccu_r)609 static READ32_HANDLER( ccu_r )
610 {
611 	/* the routine at 204abe in opengolf polls to see if we're in vblank (it wants values between 0x111 and 0x1df)*/
612 	if (offset == 0x1c/4)
613 	{
614 		return 0x01002000;
615 	}
616 	else
617 	{
618 /*		log_cb(RETRO_LOG_DEBUG, LOGPRE "Read unhandled CCU register %x\n", offset);*/
619 	}
620 
621 	return 0;
622 }
623 
WRITE32_HANDLER(ccu_w)624 static WRITE32_HANDLER( ccu_w )
625 {
626 	if (offset == 0x1c/4)
627 	{
628 		/* vblank interrupt ACK*/
629 		if (!(mem_mask & 0xff000000))
630 		{
631 			cpu_set_irq_line(0, 1, CLEAR_LINE);
632 			gx_syncen |= 0x20;
633 		}
634 
635 		/* hblank interrupt ACK*/
636 		if (!(mem_mask & 0x0000ff00))
637 		{
638 			cpu_set_irq_line(0, 2, CLEAR_LINE);
639 			gx_syncen |= 0x40;
640 		}
641 	}
642 }
643 
644 
645 /*
646 	GX object DMA timings:
647 
648 	 6Mhz dotclock: 42.7us(clear) / 341.3us(transfer)
649 	 8Mhz dotclock: 32.0us(clear) / 256.0us(transfer)
650 	12Mhz dotclock: 42.7us(clear) / 341.3us(transfer)
651 */
652 
dmaend_callback(int data)653 static void dmaend_callback(int data)
654 {
655 	/* foul-proof (CPU0 could be deactivated while we wait)*/
656 	if (resume_trigger && suspension_active) { suspension_active = 0; cpu_trigger(resume_trigger); }
657 
658 	/* DMA busy flag must be cleared before triggering IRQ 3*/
659 	gx_rdport1_3 &= ~2;
660 
661 	/* IRQ 3 is the "object DMA end" IRQ also happens during vblank*/
662 	if ((konamigx_wrport1_1 & 0x84) == 0x84 || (gx_syncen & 4))
663 	{
664 		gx_syncen &= ~4;
665 
666 		/* lower OBJINT-REQ flag and trigger interrupt*/
667 		gx_rdport1_3 &= ~0x80;
668 		cpu_set_irq_line(0, 3, HOLD_LINE);
669 	}
670 }
671 
dmastart_callback(int data)672 static void dmastart_callback(int data)
673 {
674 	/* raise the DMA busy flag*/
675 	gx_rdport1_3 |= 2;
676 
677 	/* begin transfer if DMAEN(bit4 of OBJSET1) is set (see p.48)*/
678 	if (K053246_read_register(5) & 0x10)
679 	{
680 		/* disabled by default since it doesn't work too well in MAME*/
681 		konamigx_objdma();
682 	}
683 
684 	/* simulate DMA delay*/
685 	timer_adjust(dmadelay_timer, TIME_IN_USEC(120), 0, 0);
686 }
687 
688 
INTERRUPT_GEN(konamigx_vbinterrupt)689 static INTERRUPT_GEN(konamigx_vbinterrupt)
690 {
691 	/* lift idle suspension*/
692 	if (resume_trigger && suspension_active) { suspension_active = 0; cpu_trigger(resume_trigger); }
693 
694 	/* IRQ 1 is the main 60hz vblank interrupt*/
695 	if (gx_syncen & 0x20)
696 	{
697 		gx_syncen &= ~0x20;
698 
699 		if ((konamigx_wrport1_1 & 0x81) == 0x81 || (gx_syncen & 1))
700 		{
701 			gx_syncen &= ~1;
702 			cpu_set_irq_line(0, 1, HOLD_LINE);
703 		}
704 	}
705 
706 	dmastart_callback(0);
707 }
708 
INTERRUPT_GEN(konamigx_vbinterrupt_type4)709 static INTERRUPT_GEN(konamigx_vbinterrupt_type4)
710 {
711 	/* lift idle suspension*/
712 	if (resume_trigger && suspension_active) { suspension_active = 0; cpu_trigger(resume_trigger); }
713 
714 	/* IRQ 1 is the main 60hz vblank interrupt*/
715 	/* the gx_syncen & 0x20 test doesn't work on type 3 or 4 ROM boards, likely because the ROM board*/
716 	/* generates the timing in those cases.  With this change, rushing heroes and rng2 boot :)*/
717 	if (1) /* gx_syncen & 0x20)*/
718 	{
719 		gx_syncen &= ~0x20;
720 
721 		if ((konamigx_wrport1_1 & 0x81) == 0x81 || (gx_syncen & 1))
722 		{
723 			gx_syncen &= ~1;
724 			cpu_set_irq_line(0, 1, HOLD_LINE);
725 		}
726 	}
727 
728 	dmastart_callback(0);
729 }
730 
INTERRUPT_GEN(konamigx_hbinterrupt)731 static INTERRUPT_GEN(konamigx_hbinterrupt)
732 {
733 	if (!cpu_getiloops())
734 	{
735 		konamigx_vbinterrupt_type4();
736 	}
737 	else	/* hblank*/
738 	{
739 		/* IRQ 2 is a programmable interrupt with scanline resolution*/
740 		if (gx_syncen & 0x40)
741 		{
742 			gx_syncen &= ~0x40;
743 
744 			if ((konamigx_wrport1_1 & 0x82) == 0x82 || (gx_syncen & 2))
745 			{
746 				gx_syncen &= ~2;
747 				cpu_set_irq_line(0, 2, HOLD_LINE);
748 			}
749 		}
750 	}
751 }
752 
753 
754 /**********************************************************************************/
755 /* sound communication handlers */
756 
757 static data8_t sndto000[16], sndto020[16];	/* read/write split mapping */
758 static int snd020_hack;
759 
READ32_HANDLER(sound020_r)760 static READ32_HANDLER( sound020_r )
761 {
762 	data32_t reg, MSW, LSW, rv = 0;
763 
764 	reg = offset << 1;
765 
766 	if (!(mem_mask & 0xff000000))
767 	{
768 		MSW = sndto020[reg];
769 		if (reg == 2) MSW &= ~3; /* supress VOLWR busy flags*/
770 		rv |= MSW<<24;
771 	}
772 
773 	if (!(mem_mask & 0x0000ff00))
774 	{
775 		LSW = sndto020[reg+1];
776 		rv |= LSW<<8;
777 	}
778 
779 /*	log_cb(RETRO_LOG_DEBUG, LOGPRE "Read 68k @ %x (PC=%x)\n", reg, activecpu_get_pc());*/
780 
781 	/* we clearly have some problem because some games require these hacks*/
782 	/* perhaps 68000/68020 timing is skewed?*/
783 	switch (snd020_hack)
784 	{
785 		case 1: /* Lethal Enforcer init*/
786 			if (reg == 0) rv |= 0xff00;
787 			break;
788 		case 2: /* Winning Spike*/
789 			if (activecpu_get_pc() == 0x2026fe) rv = 0xc0c0c0c0;
790 			break;
791 		case 3: /* Run'n Gun 2*/
792 			if (activecpu_get_pc() == 0x24f122) rv = 0xc0c0c0c0;
793 			break;
794 		case 4:	/* Rushing Heroes*/
795 			if (activecpu_get_pc() == 0x20eda6) rv = 0xc0c0c0c0;
796 			break;
797 		case 5:	/* Vs. Net Soccer*/
798 			if (activecpu_get_pc() == 0x24c63e) rv = 0xc0c0c0c0;
799 			break;
800 		case 6: /* Slam Dunk 2*/
801 			if (activecpu_get_pc() == 0x24f21c) rv = 0xc0c0c0c0;
802 			break;
803 	}
804 
805 	return(rv);
806 }
807 
write_snd_020(int reg,int val)808 static INLINE void write_snd_020(int reg, int val)
809 {
810 	sndto000[reg] = val;
811 
812 	if (reg == 7)
813 	{
814 		cpu_set_irq_line(1, 1, HOLD_LINE);
815 	}
816 }
817 
WRITE32_HANDLER(sound020_w)818 static WRITE32_HANDLER( sound020_w )
819 {
820 	int reg=0, val=0;
821 
822 	if (!(mem_mask & 0xff000000))
823 	{
824 		reg = offset<<1;
825 		val = data>>24;
826 		write_snd_020(reg, val);
827 	}
828 
829 	if (!(mem_mask & 0x0000ff00))
830 	{
831 		reg = (offset<<1)+1;
832 		val = (data>>8)&0xff;
833 		write_snd_020(reg, val);
834 	}
835 }
836 
837 
838 /**********************************************************************************/
839 /* input handlers */
840 
841 /* National Semiconductor ADC0834 4-channel serial ADC emulation */
842 static int analog_prevclk;
843 static int analog_val = 0;
844 static int analog_latch;
845 static int analog_state = 0;
846 static int analog_cmd = 0;
847 
READ32_HANDLER(adc0834_r)848 static READ32_HANDLER( adc0834_r )
849 {
850 	return analog_val;
851 }
852 
WRITE32_HANDLER(adc0834_w)853 static WRITE32_HANDLER( adc0834_w )
854 {
855 	int clk, cs, di;
856 
857 	clk = (data >> 24)&1;		/* clock*/
858 	di = (data >> 25)&1;		/* data in*/
859 	cs = ((data >> 26)^1)&1;	/* chip select*/
860 
861 	/* resync states if CS drops*/
862 	if (!cs)
863 	{
864 		analog_state = 0;
865 		analog_prevclk = 0;
866 		return;
867 	}
868 
869 	/* CS is up, we act on the rising edge of CLK*/
870 	if ((clk) && (!analog_prevclk))
871 	{
872 		switch (analog_state)
873 		{
874 			case 0:	  /* wait for addr*/
875 			case 1:
876 			case 2:
877 			case 3:
878 			case 4:
879 			  	analog_cmd <<= 1;
880 				analog_cmd |= di;
881 			      	analog_state++;
882 				break;
883 
884 			case 5:	/* got command, latch in the proper analog read*/
885 				if (analog_cmd & 4)
886 				{
887 					analog_latch = readinputport(10);	/* gas*/
888 				}
889 				else
890 				{
891 					analog_latch = readinputport(9);	/* steer*/
892 				}
893 				analog_val = (analog_latch & 0x80)<<17;
894 				analog_latch <<= 1;
895 				analog_state++;
896 				break;
897 
898 			case 6:	/* clock out the data*/
899 				analog_val = (analog_latch & 0x80)<<17;
900 				analog_latch <<= 1;
901 				break;
902 		}
903 	}
904 
905 	analog_prevclk = clk;
906 }
907 
READ32_HANDLER(le2_gun_H_r)908 static READ32_HANDLER( le2_gun_H_r )
909 {
910 	int p1x = readinputport(9)*287/0xff+22;
911 	int p2x = readinputport(11)*287/0xff+22;
912 
913 	return (p1x<<16)|p2x;
914 }
915 
READ32_HANDLER(le2_gun_V_r)916 static READ32_HANDLER( le2_gun_V_r )
917 {
918 	int p1y = readinputport(10)*223/0xff+1;
919 	int p2y = readinputport(12)*223/0xff+1;
920 
921 	return (p1y<<16)|p2y;
922 }
923 
READ32_HANDLER(service_r)924 static READ32_HANDLER( service_r )
925 {
926 	int res = (readinputport(1)<<24) | (readinputport(8)<<8);
927 
928 	if (init_eeprom_count)
929 	{
930 		init_eeprom_count--;
931 		res &= ~0x08000000;
932 	}
933 
934 	return res;
935 }
936 
READ32_HANDLER(players_r)937 static READ32_HANDLER( players_r )
938 {
939 	return (readinputport(2)<<24) | (readinputport(3)<<16) | (readinputport(4)<<8) | (readinputport(5));
940 }
941 
942 
943 /**********************************************************************************/
944 /* system or game dependent handlers */
945 
READ32_HANDLER(gx5bppspr_r)946 static READ32_HANDLER( gx5bppspr_r )
947 {
948 	return (K055673_rom_word_r(offset*2+1, 0xffff) | K055673_rom_word_r(offset*2, 0xffff)<<16);
949 }
950 
READ32_HANDLER(gx6bppspr_r)951 static READ32_HANDLER( gx6bppspr_r )
952 {
953 	return (K055673_GX6bpp_rom_word_r(offset*2+1, 0xffff) | K055673_GX6bpp_rom_word_r(offset*2, 0xffff)<<16);
954 }
955 
READ32_HANDLER(type1_roz_r1)956 static READ32_HANDLER( type1_roz_r1 )
957 {
958 	data32_t *ROM = (data32_t *)memory_region(REGION_GFX3);
959 
960 	return ROM[offset];
961 }
962 
READ32_HANDLER(type1_roz_r2)963 static READ32_HANDLER( type1_roz_r2 )
964 {
965 	data32_t *ROM = (data32_t *)memory_region(REGION_GFX3);
966 
967 	ROM += (0x600000/2);
968 
969 	return ROM[offset];
970 }
971 
972 static int sync_frame = 0;
973 
READ32_HANDLER(type3_sync_r)974 static READ32_HANDLER( type3_sync_r )
975 {
976 	sync_frame ^= 0xffffffff;
977 
978 	return sync_frame;
979 }
980 
981 static int last_prot_op = -1, last_prot_clk;
982 
983 /*
984 	Run and Gun 2, Rushing Heroes, Winning Spike, and Vs. Net Soccer contain a XILINX FPGA that serves as security.
985 
986 	RnG2's version is stamped "K002204", while Rushing Heroes' is "K0000035891".  Vs Net's is unknown at this time.
987 	Winning Spike's is "0000032652".
988 
989 	RnG2's is used to generate the sprite list just like the ESC, among other tasks.  (RnG2 sends many commands per frame to the protection).
990 
991 	Rushing Heroes is much simpler and uses only 1 command during gameplay.  They set up a giant table of pointers
992 	at C10200->C102EF (see the routine at 2043CE.  C10001 contains which monitor they want to update (main or sub)
993 	and it changes the pointers accordingly).  This sets up the palettes, the sprite list, and the ROZ tilemap, from the looks of things.
994 
995 	Here are the lists constructed by Rushing Heroes (I've reordered the original code so it's in linear address order).
996 	Vs. Net Soccer does the same thing starting at 2064DC (in fact, Rushing Heroes appears to be heavily based on Vs. Net's code).
997 
998 	    main monitor (2043da)            sub monitor (204616)
999 	move.l  #$C0C000,($C10200).l	   move.l  #$C1C000,($C10200).l
1000 	move.l  #$C10000,($C10204).l	   move.l  #$C20000,($C10204).l
1001 	move.l  #$C0C000,($C10208).l	   move.l  #$C1C000,($C10208).l
1002 	move.l  #$C0C200,($C1020C).l	   move.l  #$C1C200,($C1020C).l
1003 	move.l  #$C0C200,($C10210).l	   move.l  #$C1C200,($C10210).l
1004 	move.l  #$C0D800,($C10214).l	   move.l  #$C1D800,($C10214).l
1005 	move.l  #$C0D800,($C10218).l	   move.l  #$C1D800,($C10218).l
1006 	move.l  #$C0EE00,($C1021C).l	   move.l  #$C1EE00,($C1021C).l
1007 	move.l  #$C0EE00,($C10220).l	   move.l  #$C1EE00,($C10220).l
1008 	move.l  #$C0F200,($C10224).l	   move.l  #$C1F200,($C10224).l
1009 	move.l  #$C0EE00,($C10228).l	   move.l  #$C1EE00,($C10228).l
1010 	move.l  #$C0EE00,($C1022C).l	   move.l  #$C1EE00,($C1022C).l
1011 	move.l  #$C0F000,($C10230).l	   move.l  #$C1F000,($C10230).l
1012 	move.l  #$C1C200,($C10234).l	   move.l  #$C0C200,($C10234).l
1013 	move.l  #$C1EE00,($C10238).l	   move.l  #$C0EE00,($C10238).l
1014 	move.l  #$C0A000,($C1023C).l	   move.l  #$C1A000,($C1023C).l
1015 	move.l  #$C0C000,($C10240).l	   move.l  #$C1C000,($C10240).l
1016 	move.l  #$C0A000,($C10244).l	   move.l  #$C1A000,($C10244).l
1017 	move.l  #$C10000,($C10248).l	   move.l  #$C20000,($C10248).l
1018 	move.l  #$C0FA00,($C1024C).l	   move.l  #$C1FA00,($C1024C).l
1019 	move.l  #$C1A000,($C10250).l	   move.l  #$C0A000,($C10250).l
1020 	move.l  #$C00000,($C10260).l	   move.l  #$C10000,($C10260).l
1021 	move.l  #$C10000,($C10264).l	   move.l  #$C00000,($C10264).l
1022 	move.l  #$C00800,($C10268).l	   move.l  #$C10800,($C10268).l
1023 	move.l  #$C01000,($C1026C).l	   move.l  #$C11000,($C1026C).l
1024 	move.l  #$C00500,($C10270).l	   move.l  #$C10500,($C10270).l
1025 	move.l  #$C00520,($C10274).l	   move.l  #$C10520,($C10274).l
1026 	move.l  #$C00540,($C10278).l	   move.l  #$C10540,($C10278).l
1027 	move.l  #$C00560,($C1027C).l	   move.l  #$C10560,($C1027C).l
1028 	move.l  #$C100C0,($C10280).l	   move.l  #$C100E0,($C10280).l
1029 	move.l  #$C100D0,($C10284).l	   move.l  #$C100F0,($C10284).l
1030 	move.l  #$C100E0,($C10288).l	   move.l  #$C100C0,($C10288).l
1031 	move.l  #$C100F0,($C1028C).l	   move.l  #$C100D0,($C1028C).l
1032 	move.l  #$E82000,($C10290).l	   move.l  #$EA2000,($C10290).l    palette segment (E80000 = main monitor palette, EA0000 = sub monitor palette)
1033 	move.l  #$E83000,($C10294).l	   move.l  #$EA3000,($C10294).l    palette segment
1034 	move.l  #$E84000,($C10298).l	   move.l  #$EA4000,($C10298).l    palette segment
1035 	move.l  #$E85000,($C1029C).l	   move.l  #$EA5000,($C1029C).l    palette segment
1036 	move.l  #$E80000,($C102A0).l	   move.l  #$EA0000,($C102A0).l    palette segment
1037 	move.l  #$E86000,($C102A4).l	   move.l  #$EA6000,($C102A4).l    palette segment
1038 	move.l  #$E86800,($C102A8).l	   move.l  #$EA6800,($C102A8).l    palette segment
1039 	move.l  #$D20000,($C102B0).l	   move.l  #$D21000,($C102B0).l    sprite list
1040 	move.l  #$D21000,($C102B4).l	   move.l  #$D22000,($C102B4).l    sprite end
1041 	move.l  #$C09000,($C102B8).l	   move.l  #$C19000,($C102B8).l
1042 	move.l  #$C0A000,($C102BC).l	   move.l  #$C1A000,($C102BC).l
1043 	move.l  #$C00700,($C102C0).l	   move.l  #$C10700,($C102C0).l
1044 	move.l  #$C00780,($C102C4).l	   move.l  #$C10780,($C102C4).l
1045 	move.l  #$C10700,($C102C8).l	   move.l  #$C00700,($C102C8).l
1046 	move.l  #$C10780,($C102CC).l	   move.l  #$C00780,($C102CC).l
1047 	move.l  #$C02070,($C102D0).l	   move.l  #$C12070,($C102D0).l
1048 	move.l  #$C09000,($C102D4).l	   move.l  #$C19000,($C102D4).l
1049 	move.l  #$C12070,($C102D8).l	   move.l  #$C02070,($C102D8).l
1050 	move.l  #$C19000,($C102DC).l	   move.l  #$C09000,($C102DC).l
1051 	move.l  #$C12000,($C102E0).l	   move.l  #$C12000,($C102E0).l
1052 	move.l  #$C20000,($C102E4).l	   move.l  #$C20000,($C102E4).l
1053 	move.l  #$C10300,($C102E8).l	   move.l  #$C10300,($C102E8).l
1054 	move.l  #$C10400,($C102EC).l	   move.l  #$C10400,($C102EC).l
1055 */
1056 
WRITE32_HANDLER(type4_prot_w)1057 static WRITE32_HANDLER( type4_prot_w )
1058 {
1059 	int clk;
1060 	int i;
1061 
1062 	if (offset == 1)
1063 	{
1064 		last_prot_op = data>>16;
1065 	}
1066 	else
1067 	{
1068 		data >>= 16;
1069 
1070 		clk = data & 0x200;
1071 		if ((clk == 0) && (last_prot_clk != 0))
1072 		{
1073 			if (last_prot_op != -1)
1074 			{
1075 				/*
1076 					known commands:
1077 					rng2   rushhero  vsnet  winspike   what
1078 					------------------------------------------------------------------------------
1079 				        0a56   0d96	 0d14   0d1c       memcpy from c01000 to c01400 for 0x400 bytes
1080 					0b16                               generate sprite list at c01000 or c08400 (not sure entirely, see routine at 209922 in rungun2)
1081 					       0d97	 0515              parse big DMA list at c10200
1082 				*/
1083 
1084 				if ((last_prot_op == 0xa56) || (last_prot_op == 0xd96) || (last_prot_op == 0xd14) || (last_prot_op == 0xd1c))
1085 				{
1086 					/* memcpy from c01000 to c01400 for 0x400 bytes (startup check for type 4 games)*/
1087 					for (i = 0; i < 0x400; i += 2)
1088 					{
1089 						cpu_writemem24bedw_word(0xc01400+i, cpu_readmem24bedw_word(0xc01000+i));
1090 					}
1091 				}
1092 				else
1093 				{
1094 					log_cb(RETRO_LOG_DEBUG, LOGPRE "GXT4: unknown protection command %x (PC=%x)\n", last_prot_op, activecpu_get_pc());
1095 				}
1096 
1097 				if (konamigx_wrport1_1 & 0x10)
1098 				{
1099 					gx_rdport1_3 &= ~8;
1100 					cpu_set_irq_line(0, 4, HOLD_LINE);
1101 				}
1102 
1103 				/* don't accidentally do a phony command*/
1104 				last_prot_op = -1;
1105 			}
1106 		}
1107 		last_prot_clk = clk;
1108 	}
1109 }
1110 
1111 /* cabinet lamps for type 1 games*/
WRITE32_HANDLER(type1_cablamps_w)1112 static WRITE32_HANDLER( type1_cablamps_w )
1113 {
1114 	set_led_status(0, (data>>24)&1);
1115 }
1116 
1117 /**********************************************************************************/
1118 /* 68020 memory handlers */
1119 
MEMORY_READ32_START(readmem)1120 static MEMORY_READ32_START( readmem )
1121 	{ 0x000000, 0x01ffff, MRA32_ROM },		/* bios*/
1122 	{ 0x200000, 0x2fffff, MRA32_ROM },		/* game program*/
1123 	{ 0x400000, 0x5fffff, MRA32_ROM },		/* data ROM*/
1124 	{ 0xc00000, 0xc1ffff, MRA32_RAM },		/* work ram*/
1125 	{ 0xd00000, 0xd01fff, K056832_5bpp_rom_long_r },	/* tile ROM readthrough (for test menu)*/
1126 	{ 0xd20000, 0xd20fff, K053247_long_r },	/* sprite RAM*/
1127 	{ 0xd21000, 0xd23fff, MRA32_RAM },		/* additional RAM in the sprite region*/
1128 	{ 0xd44000, 0xd44003, le2_gun_H_r },	/* gun horizontal position*/
1129 	{ 0xd44004, 0xd44007, le2_gun_V_r },	/* gun vertical position*/
1130 	{ 0xd4c000, 0xd4c01f, ccu_r },			/* CRT control unit*/
1131 	{ 0xd52010, 0xd5201f, sound020_r },		/* shared RAM with sound 68000*/
1132 	{ 0xd5a000, 0xd5a003, eeprom_r },		/* EEPROM read*/
1133 	{ 0xd5c000, 0xd5c003, players_r },		/* player 1 & 2 JAMMA inputs*/
1134 	{ 0xd5e000, 0xd5e003, service_r },		/* service switch*/
1135 	{ 0xd90000, 0xd97fff, MRA32_RAM },		/* palette RAM*/
1136 	{ 0xda0000, 0xda1fff, K056832_ram_long_r },	/* tilemap RAM*/
1137 	{ 0xda2000, 0xda3fff, K056832_ram_long_r },	/* tilemap RAM mirror read*/
1138 #if GX_DEBUG
1139 	{ 0xd40000, 0xd4003f, K056832_long_r },
1140 	{ 0xd50000, 0xd500ff, K055555_long_r },
1141 	{ 0xd4a010, 0xd4a01f, K053247_reg_long_r },
1142 #endif
1143 MEMORY_END
1144 
1145 static MEMORY_WRITE32_START( writemem )
1146 	{ 0xc00000, 0xc1ffff, MWA32_RAM, &gx_workram },
1147 	{ 0xcc0000, 0xcc0003, esc_w },
1148 	{ 0xd20000, 0xd20fff, K053247_long_w },
1149 	{ 0xd21000, 0xd23fff, MWA32_RAM },
1150 	{ 0xd40000, 0xd4003f, K056832_long_w },		/* VACSET*/
1151 	{ 0xd44000, 0xd4400f, konamigx_tilebank_w },/* VSCCS*/
1152 	{ 0xd48000, 0xd48007, K053246_long_w },		/* OBJSET1*/
1153 	{ 0xd4a010, 0xd4a01f, K053247_reg_long_w },	/* OBJSET2*/
1154 	{ 0xd4c000, 0xd4c01f, ccu_w },				/* CCU1(ccu_w)*/
1155 	{ 0xd4e000, 0xd4e01f, MWA32_NOP },			/* CCU2(not used by GX)*/
1156 	{ 0xd50000, 0xd500ff, K055555_long_w },		/* PCU2*/
1157 	{ 0xd52000, 0xd5200f, sound020_w },
1158 	{ 0xd56000, 0xd56003, eeprom_w },
1159 	{ 0xd58000, 0xd58003, control_w },
1160 	{ 0xd80000, 0xd8001f, K054338_long_w },		/* CLTC*/
1161 	{ 0xda0000, 0xda1fff, K056832_ram_long_w },
1162 	{ 0xda2000, 0xda3fff, K056832_ram_long_w },	/* tilemap RAM mirror write*/
1163 	{ 0xd90000, 0xd97fff, konamigx_palette_w, &paletteram32 },
1164 MEMORY_END
1165 
1166 static MEMORY_READ32_START( type1readmem )
1167 	{ 0x000000, 0x01ffff, MRA32_ROM },		/* bios*/
1168 	{ 0x200000, 0x2fffff, MRA32_ROM },		/* game program*/
1169 	{ 0x400000, 0x7fffff, MRA32_ROM },		/* data ROM*/
1170 	{ 0xc00000, 0xc1ffff, MRA32_RAM },		/* work ram*/
1171 	{ 0xd00000, 0xd01fff, K056832_6bpp_rom_long_r },
1172 	{ 0xd20000, 0xd20fff, K053247_long_r },	/* sprite RAM*/
1173 	{ 0xd21000, 0xd23fff, MRA32_RAM },		/* additional RAM in the sprite region*/
1174 	{ 0xd4a000, 0xd4a01f, gx6bppspr_r },	/* sprite ROM readback*/
1175 	{ 0xd4c000, 0xd4c01f, ccu_r },			/* CRT control unit*/
1176 	{ 0xd52010, 0xd5201f, sound020_r },		/* shared RAM with sound 68000*/
1177 	{ 0xd5a000, 0xd5a003, eeprom_r },		/* EEPROM read*/
1178 	{ 0xd5c000, 0xd5c003, players_r },		/* player 1 & 2 JAMMA inputs*/
1179 	{ 0xd5e000, 0xd5e003, service_r }, 		/* service switch*/
1180 	{ 0xd90000, 0xd97fff, MRA32_RAM },		/* palette RAM*/
1181 	{ 0xda0000, 0xda1fff, K056832_ram_long_r },	/* tilemap RAM*/
1182 	{ 0xda2000, 0xda3fff, K056832_ram_long_r },	/* tilemap RAM mirror read*/
1183 	{ 0xdc0000, 0xdc1fff, MRA32_RAM },		/* LAN?  (Racin Force has, KOG doesn't)*/
1184 	{ 0xdd0000, 0xdd00ff, MRA32_NOP },		/* LAN board*/
1185 	{ 0xddc000, 0xddcfff, adc0834_r },
1186 	{ 0xe80000, 0xe81fff, MRA32_RAM },	/* chips 21L+19L / S*/
1187 	{ 0xec0000, 0xedffff, MRA32_RAM },	/* chips 20J+23J+18J / S*/
1188 	{ 0xf00000, 0xf3ffff, type1_roz_r1 },	/* ROM readback*/
1189 	{ 0xf40000, 0xf7ffff, type1_roz_r2 },	/* ROM readback*/
1190 	{ 0xf80000, 0xf80fff, MRA32_RAM },	/* chip 21Q / S*/
1191 	{ 0xfc0000, 0xfc00ff, MRA32_RAM },	/* chip 22N / S*/
1192 MEMORY_END
1193 
1194 static MEMORY_WRITE32_START( type1writemem )
1195 	{ 0xc00000, 0xc1ffff, MWA32_RAM, &gx_workram },
1196 	{ 0xcc0000, 0xcc0003, esc_w },
1197 	{ 0xd20000, 0xd20fff, K053247_long_w },
1198 	{ 0xd21000, 0xd23fff, MWA32_RAM },
1199 	{ 0xd40000, 0xd4003f, K056832_long_w },		/* VACSET*/
1200 	{ 0xd44000, 0xd4400f, konamigx_tilebank_w },	/* VSCCS*/
1201 	{ 0xd48000, 0xd48007, K053246_long_w },		/* OBJSET1*/
1202 	{ 0xd4a010, 0xd4a01f, K053247_reg_long_w },	/* OBJSET2*/
1203 	{ 0xd4c000, 0xd4c01f, ccu_w },			/* CCU1(ccu_w)*/
1204 	{ 0xd4e000, 0xd4e01f, MWA32_NOP },		/* CCU2(not used by GX)*/
1205 	{ 0xd50000, 0xd500ff, K055555_long_w },		/* PCU2*/
1206 	{ 0xd52000, 0xd5200f, sound020_w },
1207 	{ 0xd56000, 0xd56003, eeprom_w },
1208 	{ 0xd58000, 0xd58003, control_w },
1209 	{ 0xd80000, 0xd8001f, K054338_long_w },		/* CLTC*/
1210 	{ 0xda0000, 0xda1fff, K056832_ram_long_w },
1211 	{ 0xda2000, 0xda3fff, K056832_ram_long_w },	/* tilemap RAM mirror write*/
1212 	{ 0xd90000, 0xd97fff, konamigx_palette_w, &paletteram32 },
1213 	{ 0xdc0000, 0xdc1fff, MWA32_RAM },		/* LAN? (Racin Force has, KOG doesn't)*/
1214 	{ 0xdd0000, 0xdd00ff, MWA32_NOP },		/* LAN board*/
1215 	{ 0xdda000, 0xddafff, adc0834_w },
1216 	{ 0xdde000, 0xdde003, type1_cablamps_w },
1217 	{ 0xe00000, 0xe0001f, MWA32_RAM, (data32_t**)&K053936_1_ctrl },
1218 	{ 0xe20000, 0xe2000f, MWA32_NOP },
1219 	{ 0xe40000, 0xe40003, MWA32_NOP },
1220 	{ 0xe80000, 0xe81fff, MWA32_RAM, (data32_t**)&K053936_1_linectrl },
1221 	{ 0xec0000, 0xedffff, konamigx_t1_psacmap_w, &gx_psacram },
1222 	{ 0xf80000, 0xf80fff, MWA32_RAM },
1223 	{ 0xfc0000, 0xfc00ff, MWA32_RAM },
1224 MEMORY_END
1225 
1226 static MEMORY_READ32_START( type3readmem )
1227 	{ 0x000000, 0x01ffff, MRA32_ROM },		/* bios*/
1228 	{ 0x200000, 0x2fffff, MRA32_ROM },		/* game program*/
1229 	{ 0x400000, 0x5fffff, MRA32_ROM },		/* data ROM*/
1230 	{ 0xc00000, 0xc1ffff, MRA32_RAM },		/* work ram*/
1231 	{ 0xd00000, 0xd01fff, K056832_rom_long_r },	/* tile ROM readthrough (for test menu)*/
1232 	{ 0xd20000, 0xd20fff, K053247_long_r },	/* sprite RAM*/
1233 	{ 0xd21000, 0xd23fff, MRA32_RAM },		/* additional RAM in the sprite region*/
1234 /*	{ 0xd4a000, 0xd4bfff, K053246_long_r },	*/ /* sprite ROM readthrough (for test menu)*/
1235 	{ 0xd4c000, 0xd4c01f, ccu_r },			/* CRT control unit*/
1236 	{ 0xd52010, 0xd5201f, sound020_r },		/* shared RAM with sound 68000*/
1237 	{ 0xd5a000, 0xd5a003, eeprom_r },		/* EEPROM read*/
1238 	{ 0xd5c000, 0xd5c003, players_r },		/* player 1 & 2 JAMMA inputs*/
1239 	{ 0xd5e000, 0xd5e003, service_r }, 		/* service switch*/
1240 	{ 0xd90000, 0xd97fff, MRA32_RAM },		/* palette RAM*/
1241 	{ 0xda0000, 0xda1fff, K056832_ram_long_r },	/* tilemap RAM*/
1242 	{ 0xe60000, 0xe60fff, MRA32_RAM },
1243 	{ 0xe80000, 0xe87fff, MRA32_RAM },
1244 	{ 0xea0000, 0xea3fff, MRA32_RAM },
1245 	{ 0xec0000, 0xec0003, type3_sync_r },
1246 	{ 0xf00000, 0xf07fff, MRA32_RAM },
1247 MEMORY_END
1248 
1249 static MEMORY_WRITE32_START( type3writemem )
1250 	{ 0xc00000, 0xc1ffff, MWA32_RAM, &gx_workram },
1251 	{ 0xcc0000, 0xcc0007, type4_prot_w },
1252 	{ 0xd20000, 0xd20fff, K053247_long_w },
1253 	{ 0xd21000, 0xd23fff, MWA32_RAM },
1254 	{ 0xd44000, 0xd4400f, konamigx_tilebank_w },
1255 	{ 0xd4a018, 0xd4a01b, MWA32_NOP },
1256 	{ 0xd4c01c, 0xd4c01f, MWA32_NOP },
1257 	{ 0xd50000, 0xd5007f, K055555_long_w },
1258 	{ 0xd52000, 0xd5200f, sound020_w },
1259 	{ 0xd40000, 0xd4003f, K056832_long_w },
1260 	{ 0xd48000, 0xd4803f, K053246_long_w },
1261 	{ 0xd56000, 0xd56003, eeprom_w },
1262 	{ 0xd58000, 0xd58003, control_w },
1263 	{ 0xd80000, 0xd800ff, K054338_long_w },
1264 	{ 0xda0000, 0xda1fff, K056832_ram_long_w },
1265 	{ 0xd90000, 0xd97fff, MWA32_RAM },
1266 	{ 0xe00000, 0xe0001f, MWA32_RAM, (data32_t**)&K053936_1_ctrl },
1267 	{ 0xe20000, 0xe20003, MWA32_NOP },
1268 	{ 0xe40000, 0xe40003, MWA32_NOP },
1269 	{ 0xe60000, 0xe60fff, MWA32_RAM, (data32_t**)&K053936_1_linectrl },
1270 	{ 0xe80000, 0xe87fff, konamigx_555_palette_w, &paletteram32 }, 	/* main monitor palette (twice as large as reality)*/
1271 	{ 0xea0000, 0xea3fff, konamigx_555_palette2_w, &gx_subpaletteram32 }, /* sub monitor palette*/
1272 	{ 0xf00000, 0xf07fff, MWA32_RAM },
1273 MEMORY_END
1274 
1275 static MEMORY_READ32_START( type4readmem )
1276 	{ 0x000000, 0x01ffff, MRA32_ROM },		/* bios*/
1277 	{ 0x200000, 0x2fffff, MRA32_ROM },		/* game program*/
1278 	{ 0x400000, 0x5fffff, MRA32_ROM },		/* data ROM*/
1279 	{ 0xc00000, 0xc1ffff, MRA32_RAM },		/* work ram*/
1280 	{ 0xd00000, 0xd01fff, K056832_rom_long_r },	/* tile ROM readthrough (for test menu)*/
1281 	{ 0xd20000, 0xd20fff, K053247_long_r },	/* sprite RAM*/
1282 	{ 0xd21000, 0xd23fff, MRA32_RAM },		/* additional RAM in the sprite region*/
1283 	{ 0xd4a000, 0xd4bfff, K053246_long_r },	/* sprite ROM readthrough (for test menu)*/
1284 	{ 0xd4c000, 0xd4c01f, ccu_r },			/* CRT control unit*/
1285 	{ 0xd52010, 0xd5201f, sound020_r },		/* shared RAM with sound 68000*/
1286 	{ 0xd5a000, 0xd5a003, eeprom_r },		/* EEPROM read*/
1287 	{ 0xd5c000, 0xd5c003, players_r },		/* player 1 & 2 JAMMA inputs*/
1288 	{ 0xd5e000, 0xd5e003, service_r }, 		/* service switch*/
1289 	{ 0xd90000, 0xd97fff, MRA32_RAM },		/* palette RAM*/
1290 	{ 0xda0000, 0xda1fff, K056832_ram_long_r },	/* tilemap RAM*/
1291 	{ 0xe60000, 0xe60fff, MRA32_RAM },
1292 	{ 0xe80000, 0xe8ffff, MRA32_RAM },
1293 	{ 0xea0000, 0xea7fff, MRA32_RAM },
1294 	{ 0xec0000, 0xec0003, type3_sync_r },		/* type 4 polls this too*/
1295 	{ 0xf00000, 0xf07fff, MRA32_RAM },
1296 MEMORY_END
1297 
1298 static MEMORY_WRITE32_START( type4writemem )
1299 	{ 0xc00000, 0xc1ffff, MWA32_RAM, &gx_workram },
1300 	{ 0xcc0000, 0xcc0007, type4_prot_w },
1301 	{ 0xd44000, 0xd4400f, konamigx_tilebank_w },
1302 	{ 0xd4a018, 0xd4a01b, MWA32_NOP },
1303 	{ 0xd4c01c, 0xd4c01f, MWA32_NOP },
1304 	{ 0xd50000, 0xd5007f, K055555_long_w },
1305 	{ 0xd20000, 0xd20fff, K053247_long_w },
1306 	{ 0xd21000, 0xd23fff, MWA32_RAM },
1307 	{ 0xd52000, 0xd5200f, sound020_w },
1308 	{ 0xd40000, 0xd4003f, K056832_long_w },
1309 	{ 0xd48000, 0xd4803f, K053246_long_w },
1310 	{ 0xd56000, 0xd56003, eeprom_w },
1311 	{ 0xd58000, 0xd58003, control_w },
1312 	{ 0xd80000, 0xd800ff, K054338_long_w },
1313 	{ 0xd90000, 0xd97fff, MWA32_RAM },
1314 	{ 0xda0000, 0xda1fff, K056832_ram_long_w },
1315 	{ 0xe00000, 0xe0001f, MWA32_RAM, (data32_t**)&K053936_1_ctrl },
1316 	{ 0xe20000, 0xe20003, MWA32_NOP },
1317 	{ 0xe40000, 0xe40003, MWA32_NOP },
1318 	{ 0xe60000, 0xe60fff, MWA32_RAM, (data32_t**)&K053936_1_linectrl },  /* 29C & 29G (PSAC2 line control)*/
1319 	{ 0xe80000, 0xe8ffff, konamigx_palette_w, &paletteram32 }, /* 11G/13G/15G (main screen palette RAM) (twice as large as reality)*/
1320 	{ 0xea0000, 0xea7fff, konamigx_palette2_w, &gx_subpaletteram32 }, /* 5G/7G/9G (sub screen palette RAM)*/
1321 	{ 0xf00000, 0xf07fff, konamigx_t4_psacmap_w, &gx_psacram },	/* PSAC2 tilemap*/
1322 MEMORY_END
1323 
1324 /**********************************************************************************/
1325 /* Sound handling */
1326 
1327 static READ16_HANDLER( dual539_r )
1328 {
1329 	data16_t ret = 0;
1330 
1331 	if (ACCESSING_LSB16)
1332 		ret |= K054539_1_r(offset);
1333 	if (ACCESSING_MSB16)
1334 		ret |= K054539_0_r(offset)<<8;
1335 
1336 	return ret;
1337 }
1338 
WRITE16_HANDLER(dual539_w)1339 static WRITE16_HANDLER( dual539_w )
1340 {
1341 	if (ACCESSING_LSB16)
1342 		K054539_1_w(offset, data);
1343 	if (ACCESSING_MSB16)
1344 		K054539_0_w(offset, data>>8);
1345 }
1346 
READ16_HANDLER(sndcomm68k_r)1347 static READ16_HANDLER( sndcomm68k_r )
1348 {
1349 	return sndto000[offset];
1350 }
1351 
WRITE16_HANDLER(sndcomm68k_w)1352 static WRITE16_HANDLER( sndcomm68k_w )
1353 {
1354 /*	log_cb(RETRO_LOG_DEBUG, LOGPRE "68K: write %x to %x\n", data, offset);*/
1355 	sndto020[offset] = data;
1356 }
1357 
1358 /* 68000 memory handling */
MEMORY_READ16_START(sndreadmem)1359 static MEMORY_READ16_START( sndreadmem )
1360 	{ 0x000000, 0x03ffff, MRA16_ROM },
1361 	{ 0x100000, 0x10ffff, MRA16_RAM },
1362 	{ 0x200000, 0x2004ff, dual539_r },
1363 	{ 0x300000, 0x300001, tms57002_data_word_r },
1364 	{ 0x400010, 0x40001f, sndcomm68k_r },
1365 	{ 0x500000, 0x500001, tms57002_status_word_r },
1366 MEMORY_END
1367 
1368 static MEMORY_WRITE16_START( sndwritemem )
1369 	{ 0x100000, 0x10ffff, MWA16_RAM, &gx_sndram },
1370 	{ 0x200000, 0x2004ff, dual539_w },
1371 	{ 0x300000, 0x300001, tms57002_data_word_w },
1372 	{ 0x400000, 0x40000f, sndcomm68k_w },
1373 	{ 0x500000, 0x500001, tms57002_control_word_w },
1374 	{ 0x580000, 0x580001, MWA16_NOP }, /* unknown write*/
1375 MEMORY_END
1376 
1377 /* 68000 timer interrupt controller */
1378 static INTERRUPT_GEN(gxaudio_interrupt)
1379 {
1380 	cpu_set_irq_line(1, 2, HOLD_LINE);
1381 }
1382 
1383 static struct K054539interface k054539_interface =
1384 {
1385 	2,			/* 2 chips */
1386 	48000,
1387 	{ REGION_SOUND1, REGION_SOUND1 },
1388 	{ { 100, 100 }, { 100, 100 } },
1389 	{ NULL }
1390 };
1391 
1392 
1393 /**********************************************************************************/
1394 /* hardware definitions */
1395 
1396 /* i think we could reduce the number of machine drivers with different visible areas by adjusting the sprite
1397    positioning on a per game basis too */
1398 
1399 static struct GfxLayout bglayout_8bpp =
1400 {
1401 	16,16,
1402 	RGN_FRAC(1,1),
1403 	8,
1404 	{ 0, 1, 2, 3, 4, 5, 6, 7 },
1405 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
1406 	{ 0*128, 1*128, 2*128, 3*128, 4*128, 5*128, 6*128, 7*128, 8*128, 9*128, 10*128, 11*128, 12*128, 13*128, 14*128, 15*128 },
1407 	16*128
1408 };
1409 
1410 struct GfxLayout t1_charlayout6 =
1411 {
1412 	16, 16,
1413 	RGN_FRAC(1,1),
1414 	6,
1415 	{ 20, 16, 12, 8, 4, 0 },
1416 	{ 3, 2, 1, 0, 27, 26, 25, 24, 51, 50, 49, 48, 75, 74, 73, 72 },
1417 	{ 0, 12*8, 12*8*2, 12*8*3, 12*8*4, 12*8*5, 12*8*6, 12*8*7,
1418 	  12*8*8, 12*8*9, 12*8*10, 12*8*11, 12*8*12, 12*8*13, 12*8*14, 12*8*15 },
1419 	16*16*6
1420 };
1421 
1422 struct GfxLayout t1_charlayout8 =
1423 {
1424 	16, 16,
1425 	RGN_FRAC(1,1),
1426 	8,
1427 	{ 28, 24, 20, 16, 12, 8, 4, 0 },
1428 	{ 3, 2, 1, 0, 35, 34, 33, 32, 67, 66, 65, 64, 99, 98, 97, 96 },
1429 	{ 0, 16*8, 16*8*2, 16*8*3, 16*8*4, 16*8*5, 16*8*6, 16*8*7,
1430 	  16*8*8, 16*8*9, 16*8*10, 16*8*11, 16*8*12, 16*8*13, 16*8*14, 16*8*15 },
1431 	16*16*8
1432 };
1433 
1434 /* type 1 (opengolf + racinfrc) use 6 and 8 bpp planar layouts for the 53936 */
1435 static struct GfxDecodeInfo gfxdecodeinfo_opengolf[] =
1436 {
1437 	{ REGION_GFX3, 0, &t1_charlayout8, 0x0000, 8 },
1438 	{ REGION_GFX4, 0, &t1_charlayout6, 0x0000, 8 },
1439 	{ -1 } /* end of array */
1440 };
1441 
1442 static struct GfxDecodeInfo gfxdecodeinfo_racinfrc[] =
1443 {
1444 	{ REGION_GFX3, 0, &t1_charlayout6, 0x0000, 8 },
1445 	{ REGION_GFX4, 0, &t1_charlayout6, 0x0000, 8 },
1446 	{ -1 } /* end of array */
1447 };
1448 
1449 /* type 3 & 4 games use a simple 8bpp decode for the 53936 */
1450 static struct GfxDecodeInfo gfxdecodeinfo_type34[] =
1451 {
1452 	{ REGION_GFX3, 0, &bglayout_8bpp, 0x0000, 8 },
1453 	{ -1 } /* end of array */
1454 };
1455 
1456 static MACHINE_DRIVER_START( konamigx )
1457 	/* basic machine hardware */
1458 	MDRV_CPU_ADD_TAG("main", M68EC020, 24000000)
1459 	MDRV_CPU_MEMORY(readmem,writemem)
1460 	MDRV_CPU_VBLANK_INT(konamigx_vbinterrupt, 1)
1461 
1462 	/* note: part is a -8, crystals are 18.4 and 32.0 MHz, and
1463 	   twinbee yahhoo will not pass POST if the 68000 isn't
1464 	   running at least this fast.  so the higher speed is probably a HACK... */
1465 	MDRV_CPU_ADD_TAG("sound", M68000, 9200000)
1466 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
1467 	MDRV_CPU_MEMORY(sndreadmem,sndwritemem)
1468 	MDRV_CPU_PERIODIC_INT(irq2_line_hold, 480)
1469 
1470 	MDRV_INTERLEAVE(32);
1471 	MDRV_FRAMES_PER_SECOND(60)
1472 	MDRV_VBLANK_DURATION(600)
1473 
MDRV_MACHINE_INIT(konamigx)1474 	MDRV_MACHINE_INIT(konamigx)
1475 	MDRV_NVRAM_HANDLER(konamigx_93C46)
1476 
1477 	/* video hardware */
1478 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN | VIDEO_RGB_DIRECT | VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK)
1479 	MDRV_SCREEN_SIZE(64*8, 32*8)
1480 	MDRV_VISIBLE_AREA(24, 24+288-1, 16, 16+224-1)
1481 	MDRV_PALETTE_LENGTH(8192)
1482 
1483 	MDRV_VIDEO_START(konamigx_5bpp)
1484 	MDRV_VIDEO_UPDATE(konamigx)
1485 
1486 	/* sound hardware */
1487 	MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
1488 	MDRV_SOUND_ADD(K054539, k054539_interface)
1489 MACHINE_DRIVER_END
1490 
1491 static MACHINE_DRIVER_START( dragoonj )
1492 	MDRV_IMPORT_FROM(konamigx)
1493 	MDRV_CPU_REPLACE("main", M68EC020, 26400000) /* needs higher clock to stop sprite flickerings*/
1494 	MDRV_VISIBLE_AREA(40, 40+384-1, 16, 16+224-1)
1495 	MDRV_VIDEO_START(dragoonj)
1496 MACHINE_DRIVER_END
1497 
1498 static MACHINE_DRIVER_START( le2 )
1499 	MDRV_IMPORT_FROM(konamigx)
1500 	MDRV_VIDEO_START(le2)
1501 MACHINE_DRIVER_END
1502 
1503 static MACHINE_DRIVER_START( konamigx_6bpp )
1504 	MDRV_IMPORT_FROM(konamigx)
1505 	MDRV_VIDEO_START(konamigx_6bpp)
1506 MACHINE_DRIVER_END
1507 
1508 static MACHINE_DRIVER_START( konamigx_6bpp_2 )
1509 	MDRV_IMPORT_FROM(konamigx)
1510 	MDRV_VIDEO_START(konamigx_6bpp_2)
1511 MACHINE_DRIVER_END
1512 
1513 static MACHINE_DRIVER_START( opengolf )
1514 	MDRV_IMPORT_FROM(konamigx)
1515 	MDRV_VISIBLE_AREA(40, 40+384-1, 16, 16+224-1)
1516 	MDRV_GFXDECODE(gfxdecodeinfo_opengolf)
1517 	MDRV_VIDEO_START(opengolf)
1518 
1519 	MDRV_CPU_MODIFY("main")
1520 	MDRV_CPU_MEMORY(type1readmem, type1writemem)
1521 MACHINE_DRIVER_END
1522 
1523 static MACHINE_DRIVER_START( racinfrc )
1524 	MDRV_IMPORT_FROM(konamigx)
1525 	MDRV_VISIBLE_AREA(32, 32+384-1, 16, 16+224-1)
1526 	MDRV_GFXDECODE(gfxdecodeinfo_racinfrc)
1527 	MDRV_VIDEO_START(racinfrc)
1528 
1529 	MDRV_CPU_MODIFY("main")
1530 	MDRV_CPU_MEMORY(type1readmem, type1writemem)
1531 MACHINE_DRIVER_END
1532 
1533 static MACHINE_DRIVER_START( gxtype3 )
1534 	MDRV_IMPORT_FROM(konamigx)
1535 
1536 	MDRV_CPU_MODIFY("main")
1537 	MDRV_CPU_MEMORY(type3readmem, type3writemem)
1538 	MDRV_CPU_VBLANK_INT(konamigx_hbinterrupt, 262)
1539 
1540 	MDRV_VIDEO_START(konamigx_type3)
1541 	MDRV_PALETTE_LENGTH(16384)
1542 	MDRV_SCREEN_SIZE(64*8, 32*8)
1543 	MDRV_VISIBLE_AREA(0, 64*8-1, 0, 32*8-1)
1544 	MDRV_GFXDECODE(gfxdecodeinfo_type34)
1545 MACHINE_DRIVER_END
1546 
1547 static MACHINE_DRIVER_START( gxtype4 )
1548 	MDRV_IMPORT_FROM(konamigx)
1549 
1550 	MDRV_CPU_MODIFY("main")
1551 	MDRV_CPU_MEMORY(type4readmem, type4writemem)
1552 	MDRV_CPU_VBLANK_INT(konamigx_hbinterrupt, 262)
1553 
1554 	MDRV_SCREEN_SIZE(64*8, 32*8)
1555 	MDRV_VISIBLE_AREA(0, 64*8-1, 0, 32*8-1)
1556 	MDRV_PALETTE_LENGTH(16384)
1557 	MDRV_GFXDECODE(gfxdecodeinfo_type34)
1558 	MDRV_VIDEO_START(konamigx_type4)
1559 MACHINE_DRIVER_END
1560 
1561 static MACHINE_DRIVER_START( winspike )
1562 	MDRV_IMPORT_FROM(konamigx)
1563 
1564 	MDRV_VISIBLE_AREA(38, 38+384-1, 16, 16+224-1)
1565 	MDRV_VIDEO_START(winspike)
1566 MACHINE_DRIVER_END
1567 
1568 /**********************************************************************************/
1569 /* port maps */
1570 
1571 INPUT_PORTS_START( konamigx )
1572 	PORT_START
1573 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1574 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
1575 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1576 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1577 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
1578 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
1579 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1580 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1581 
1582 	PORT_START
1583 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
1584 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1585 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )	/* for gun games */
1586 	PORT_BITX(0x08, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
1587 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1588 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1589 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1590 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1591 
1592 	PORT_START
1593 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER1 )
1594 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
1595 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER1 )
1596 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER1 )
1597 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
1598 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
1599 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
1600 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
1601 
1602 	PORT_START
1603 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
1604 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
1605 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
1606 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
1607 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
1608 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
1609 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
1610 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
1611 
1612 	PORT_START
1613 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER3 )
1614 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER3 )
1615 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER3 )
1616 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER3 )
1617 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )
1618 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )
1619 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER3 )
1620 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )
1621 
1622 	PORT_START
1623 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER4 )
1624 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER4 )
1625 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER4 )
1626 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER4 )
1627 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER4 )
1628 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER4 )
1629 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER4 )
1630 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
1631 
1632 	PORT_START
1633 	PORT_DIPNAME( 0x01, 0x00, "Stereo")
1634 	PORT_DIPSETTING(    0x00, "Stereo")
1635 	PORT_DIPSETTING(    0x01, "Mono")
1636 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
1637 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
1638 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1639 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
1640 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1641 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1642 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
1643 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1644 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1645 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
1646 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1647 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1648 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
1649 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
1650 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1651 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
1652 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
1653 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1654 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
1655 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
1656 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1657 
1658 	PORT_START
1659 	PORT_DIPNAME( 0x01, 0x01, "Foo")
1660 	PORT_DIPSETTING(    0x00, "Foo")
1661 	PORT_DIPSETTING(    0x01, "Bar")
1662 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
1663 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
1664 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1665 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
1666 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1667 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1668 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
1669 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1670 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1671 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
1672 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1673 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1674 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
1675 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
1676 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1677 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
1678 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
1679 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1680 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
1681 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
1682 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1683 INPUT_PORTS_END
1684 
1685 
1686 INPUT_PORTS_START( racinfrc )
1687 	PORT_START
1688 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1689 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
1690 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1691 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1692 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
1693 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
1694 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1695 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1696 
1697 	PORT_START
1698 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
1699 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1700 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )	/* for gun games */
1701 	PORT_BITX(0x08, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
1702 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1703 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1704 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1705 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1706 
1707 	PORT_START
1708 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER1 )
1709 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
1710 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER1 )
1711 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER1 )
1712 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
1713 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
1714 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
1715 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
1716 
1717 	PORT_START
1718 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
1719 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
1720 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
1721 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
1722 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )		/* racin force needs this set to get past the calibration screen*/
1723 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
1724 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
1725 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
1726 
1727 	PORT_START
1728 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER3 )
1729 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER3 )
1730 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER3 )
1731 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER3 )
1732 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )
1733 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )
1734 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER3 )
1735 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )
1736 
1737 	PORT_START
1738 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER4 )
1739 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER4 )
1740 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER4 )
1741 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER4 )
1742 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER4 )
1743 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER4 )
1744 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER4 )
1745 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
1746 
1747 	PORT_START
1748 	PORT_DIPNAME( 0x01, 0x00, "Stereo")
1749 	PORT_DIPSETTING(    0x00, "Stereo")
1750 	PORT_DIPSETTING(    0x01, "Mono")
1751 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
1752 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
1753 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1754 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
1755 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1756 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1757 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
1758 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1759 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1760 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
1761 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1762 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1763 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
1764 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
1765 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1766 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
1767 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
1768 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1769 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
1770 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
1771 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1772 
1773 	PORT_START
1774 	PORT_DIPNAME( 0x01, 0x01, "Foo")
1775 	PORT_DIPSETTING(    0x00, "Foo")
1776 	PORT_DIPSETTING(    0x01, "Bar")
1777 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
1778 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
1779 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1780 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
1781 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1782 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1783 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
1784 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1785 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1786 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
1787 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1788 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1789 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
1790 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
1791 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1792 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
1793 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
1794 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1795 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
1796 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
1797 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1798 
1799 	PORT_START	/* no gun */
1800 
1801 	PORT_START /* mask default type                     sens delta min max */
1802 	PORT_ANALOG( 0xff, 0x80, IPT_AD_STICK_X | IPF_CENTER, 35, 5, 0x38, 0xc8 )
1803 
1804 	PORT_START
1805 	PORT_ANALOGX( 0xff, 0x00, IPT_PEDAL, 35, 5, 0, 0x68, KEYCODE_LCONTROL, IP_JOY_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT )
1806 INPUT_PORTS_END
1807 
1808 INPUT_PORTS_START( le2 )
1809 	PORT_START
1810 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1811 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
1812 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1813 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1814 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
1815 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
1816 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1817 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1818 
1819 	PORT_START
1820 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
1821 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1822 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )	/* for gun games */
1823 	PORT_BITX(0x08, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
1824 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1825 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1826 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1827 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1828 
1829 	PORT_START
1830 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER1 )
1831 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
1832 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER1 )
1833 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER1 )
1834 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
1835 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
1836 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
1837 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
1838 
1839 	PORT_START
1840 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
1841 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
1842 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
1843 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
1844 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
1845 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
1846 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
1847 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
1848 
1849 	PORT_START
1850 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER3 )
1851 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER3 )
1852 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER3 )
1853 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER3 )
1854 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )
1855 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )
1856 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER3 )
1857 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )
1858 
1859 	PORT_START
1860 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER4 )
1861 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER4 )
1862 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER4 )
1863 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER4 )
1864 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER4 )
1865 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER4 )
1866 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER4 )
1867 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
1868 
1869 	PORT_START
1870 	PORT_DIPNAME( 0x01, 0x01, "Stereo")
1871 	PORT_DIPSETTING(    0x01, "Stereo")
1872 	PORT_DIPSETTING(    0x00, "Mono")
1873 	PORT_DIPNAME( 0x02, 0x02, "Coin Mechanism")
1874 	PORT_DIPSETTING(    0x02, "Common")
1875 	PORT_DIPSETTING(    0x00, "Independant")
1876 	PORT_DIPNAME( 0x04, 0x04, "Stage Select" )
1877 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1878 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1879 	PORT_DIPNAME( 0x08, 0x00, "Mirror" )
1880 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
1881 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
1882 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) )
1883 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1884 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1885 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
1886 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
1887 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1888 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
1889 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
1890 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1891 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
1892 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
1893 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1894 
1895 	PORT_START
1896 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
1897 
1898 	PORT_START
1899 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
1900 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1901 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )	/* for gun games */
1902 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1903 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1904 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1905 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1906 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1907 
1908 	PORT_START /* mask default type                     sens delta min max */
1909 	PORT_ANALOG( 0xff, 0x00, IPT_LIGHTGUN_X | IPF_PLAYER1, 35, 15, 0, 0xff )
1910 
1911 	PORT_START
1912 	PORT_ANALOG( 0xff, 0x00, IPT_LIGHTGUN_Y | IPF_PLAYER1, 35, 15, 0, 0xff )
1913 
1914 	PORT_START
1915 	PORT_ANALOG( 0xff, 0x00, IPT_LIGHTGUN_X | IPF_PLAYER2, 35, 15, 0, 0xff )
1916 
1917 	PORT_START
1918 	PORT_ANALOG( 0xff, 0x00, IPT_LIGHTGUN_Y | IPF_PLAYER2, 35, 15, 0, 0xff )
1919 INPUT_PORTS_END
1920 
1921 
1922 INPUT_PORTS_START( gokuparo )
1923 	PORT_START
1924 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1925 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
1926 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1927 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1928 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
1929 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
1930 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1931 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1932 
1933 	PORT_START
1934 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
1935 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1936 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1937 	PORT_BITX(0x08, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
1938 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1939 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1940 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1941 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1942 
1943 	PORT_START
1944 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER1 )
1945 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
1946 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER1 )
1947 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER1 )
1948 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
1949 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
1950 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
1951 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
1952 
1953 	PORT_START
1954 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
1955 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
1956 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
1957 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
1958 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
1959 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
1960 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
1961 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
1962 
1963 	PORT_START
1964 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER3 )
1965 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER3 )
1966 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER3 )
1967 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER3 )
1968 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )
1969 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )
1970 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER3 )
1971 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )
1972 
1973 	PORT_START
1974 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER4 )
1975 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER4 )
1976 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER4 )
1977 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER4 )
1978 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER4 )
1979 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER4 )
1980 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER4 )
1981 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
1982 
1983 	PORT_START
1984 	PORT_DIPNAME( 0x01, 0x00, "Stereo")
1985 	PORT_DIPSETTING(    0x00, "Stereo")
1986 	PORT_DIPSETTING(    0x01, "Mono")
1987 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
1988 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
1989 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1990 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
1991 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1992 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1993 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
1994 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1995 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1996 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
1997 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1998 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1999 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
2000 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
2001 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2002 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
2003 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
2004 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2005 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
2006 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
2007 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2008 INPUT_PORTS_END
2009 
2010 INPUT_PORTS_START( puzldama )
2011 	PORT_START
2012 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
2013 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
2014 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
2015 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
2016 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
2017 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
2018 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
2019 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
2020 
2021 	PORT_START
2022 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
2023 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
2024 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
2025 	PORT_BITX(0x08, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
2026 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
2027 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
2028 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
2029 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
2030 
2031 	PORT_START
2032 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER1 )
2033 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
2034 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER1 )
2035 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER1 )
2036 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
2037 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
2038 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
2039 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
2040 
2041 	PORT_START
2042 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
2043 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
2044 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
2045 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
2046 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
2047 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
2048 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
2049 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
2050 
2051 	PORT_START
2052 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER3 )
2053 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER3 )
2054 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER3 )
2055 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER3 )
2056 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )
2057 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )
2058 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER3 )
2059 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )
2060 
2061 	PORT_START
2062 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER4 )
2063 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER4 )
2064 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER4 )
2065 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER4 )
2066 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER4 )
2067 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER4 )
2068 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER4 )
2069 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
2070 
2071 	PORT_START
2072 	PORT_DIPNAME( 0x01, 0x00, "Stereo")
2073 	PORT_DIPSETTING(    0x00, "Stereo")
2074 	PORT_DIPSETTING(    0x01, "Mono")
2075 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
2076 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
2077 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2078 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Flip_Screen ) )
2079 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
2080 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2081 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Cabinet ) )
2082 	PORT_DIPSETTING(    0x08, DEF_STR( Upright ) )
2083 	PORT_DIPSETTING(    0x00, "Vs. cabinet" )
2084 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
2085 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
2086 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2087 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
2088 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
2089 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2090 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
2091 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
2092 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2093 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
2094 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
2095 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2096 	PORT_DIPSETTING(    0x02, "High" )
2097 INPUT_PORTS_END
2098 
2099 INPUT_PORTS_START( dragoonj )
2100 	PORT_START
2101 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
2102 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
2103 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
2104 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
2105 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
2106 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
2107 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
2108 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
2109 
2110 	PORT_START
2111 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
2112 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
2113 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
2114 	PORT_BITX(0x08, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
2115 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
2116 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
2117 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
2118 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
2119 
2120 	PORT_START
2121 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER1 )
2122 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
2123 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER1 )
2124 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER1 )
2125 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
2126 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
2127 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
2128 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
2129 
2130 	PORT_START
2131 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
2132 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
2133 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
2134 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
2135 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
2136 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
2137 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
2138 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
2139 
2140 	PORT_START
2141 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER1 )
2142 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 | IPF_PLAYER1 )
2143 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 | IPF_PLAYER1 )
2144 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
2145 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER2 )
2146 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 | IPF_PLAYER2 )
2147 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 | IPF_PLAYER2 )
2148 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
2149 
2150 	PORT_START
2151 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
2152 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
2153 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
2154 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
2155 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
2156 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
2157 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
2158 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
2159 
2160 	PORT_START
2161 	PORT_DIPNAME( 0x01, 0x00, "Stereo")
2162 	PORT_DIPSETTING(    0x00, "Stereo")
2163 	PORT_DIPSETTING(    0x01, "Mono")
2164 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
2165 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
2166 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2167 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Flip_Screen ) )
2168 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
2169 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2170 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Cabinet ) )
2171 	PORT_DIPSETTING(    0x08, DEF_STR( Upright ) )
2172 	PORT_DIPSETTING(    0x00, "Vs. cabinet" )
2173 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
2174 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
2175 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2176 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
2177 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
2178 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2179 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
2180 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
2181 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2182 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
2183 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
2184 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2185 	PORT_DIPSETTING(    0x02, "High" )
2186 INPUT_PORTS_END
2187 
2188 INPUT_PORTS_START( type3 )
2189 	PORT_START
2190 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
2191 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
2192 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
2193 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
2194 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
2195 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
2196 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
2197 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
2198 
2199 	PORT_START
2200 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
2201 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
2202 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
2203 	PORT_BITX(0x08, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
2204 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
2205 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
2206 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
2207 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
2208 
2209 	PORT_START
2210 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER1 )
2211 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
2212 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER1 )
2213 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER1 )
2214 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
2215 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
2216 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
2217 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
2218 
2219 	PORT_START
2220 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
2221 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
2222 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
2223 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
2224 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
2225 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
2226 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
2227 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
2228 
2229 	PORT_START
2230 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER3 )
2231 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER3 )
2232 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER3 )
2233 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER3 )
2234 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )
2235 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )
2236 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER3 )
2237 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )
2238 
2239 	PORT_START
2240 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER4 )
2241 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER4 )
2242 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER4 )
2243 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER4 )
2244 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER4 )
2245 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER4 )
2246 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER4 )
2247 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
2248 
2249 	PORT_START
2250 	PORT_DIPNAME( 0x01, 0x00, "Stereo")
2251 	PORT_DIPSETTING(    0x00, "Stereo")
2252 	PORT_DIPSETTING(    0x01, "Mono")
2253 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
2254 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
2255 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2256 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Flip_Screen ) )
2257 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
2258 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2259 	PORT_DIPNAME( 0x08, 0x08, "Screens" )
2260 	PORT_DIPSETTING(    0x08, "1" )
2261 	PORT_DIPSETTING(    0x00, "2" )
2262 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
2263 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
2264 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2265 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
2266 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
2267 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2268 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
2269 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
2270 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2271 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
2272 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
2273 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
2274 	PORT_DIPSETTING(    0x02, "High" )
2275 INPUT_PORTS_END
2276 
2277 
2278 /**********************************************************************************/
2279 /* BIOS and ROM maps */
2280 
2281 #define GX_BIOS ROM_LOAD("300a01.34k", 0x000000, 128*1024, CRC(d5fa95f5) SHA1(c483aa98ff8ef40cdac359c19ad23fea5ecc1906) )
2282 
2283 ROM_START(konamigx)
2284 	ROM_REGION( 0x10000, REGION_CPU1, 0)
2285 	GX_BIOS
2286 ROM_END
2287 
2288 #define SPR_WOR_DROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPSIZE(2) | ROM_SKIP(5))
2289 #define SPR_5TH_ROM_LOAD(name,offset,length,crc)	 ROMX_LOAD(name, offset, length, crc, ROM_GROUPSIZE(1) | ROM_SKIP(5))
2290 
2291 #define TILE_WORD_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPDWORD | ROM_SKIP(1))
2292 #define TILE_BYTE_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPBYTE | ROM_SKIP(4))
2293 
2294 #define TILE_WORDS2_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPDWORD | ROM_SKIP(2))
2295 #define TILE_BYTES2_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPWORD | ROM_SKIP(4))
2296 
2297 #define T1_PSAC6_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPBYTE | ROM_SKIP(2))
2298 #define T1_PSAC8_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPBYTE | ROM_SKIP(3))
2299 
2300 #define _48_WORD_ROM_LOAD(name,offset,length,crc)	ROMX_LOAD(name, offset, length, crc, ROM_GROUPWORD | ROM_SKIP(4))
2301 #define _64_WORD_ROM_LOAD(name,offset,length,crc)	ROMX_LOAD(name, offset, length, crc, ROM_GROUPWORD | ROM_SKIP(6))
2302 
2303 
2304 /* Gokujou Parodius */
2305 ROM_START( gokuparo )
2306 	/* main program */
2307 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2308 	GX_BIOS
2309 	ROM_LOAD32_WORD_SWAP( "321jad02.31b", 0x200002, 512*1024, CRC(c2e548c0) SHA1(48fbcc96d1f56bb3abb5098400536a18a676d934) )
2310 	ROM_LOAD32_WORD_SWAP( "321jad04.27b", 0x200000, 512*1024, CRC(916a7951) SHA1(d6f56ff5f6c6708939767e69a3ebc7c7eddb6003) )
2311 
2312 	/* sound program */
2313 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2314 	ROM_LOAD16_BYTE("321_b06.9c", 0x000000, 128*1024, CRC(da810554) SHA1(f253e1aa137eecf283d8b083ef2b3b049e8366f4) )
2315 	ROM_LOAD16_BYTE("321_b07.7c", 0x000001, 128*1024, CRC(c47634c0) SHA1(20e4105df5bbc33edd01894e78f74ed5f173576e) )
2316 
2317 	/* tiles */
2318 	ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_ERASE00 )
2319 	TILE_WORD_ROM_LOAD( "fj-jap.17h", 0x000000, 2*1024*1024, CRC(437d0057) SHA1(30c449200e0510dc664289b527bade6e10dbe57a) )
2320 	TILE_BYTE_ROM_LOAD( "321b12.13g", 0x000004, 512*1024, CRC(5f9edfa0) SHA1(36d54c5fe498a4d0fa64757cef11c56c67518258) )
2321 
2322 	/* sprites */
2323 	ROM_REGION( 0x500000, REGION_GFX2, ROMREGION_ERASE00 )
2324 	ROM_LOAD32_WORD( "fj-jap.25g", 0x000000, 2*1024*1024, CRC(c6e2e74d) SHA1(3875a50923e46e2986dbe2573453af5c7fa726f7) )
2325 	ROM_LOAD32_WORD( "fj-jap.28g", 0x000002, 2*1024*1024, CRC(ea9f8c48) SHA1(b5e880015887308a5f1c1c623011d9b0903e848f) )
2326 	ROM_LOAD( "321b09.30g", 0x400000, 1*1024*1024, CRC(94add237) SHA1(9a6d0a9727e7fa02d91ece220b145074a6741a95) )
2327 
2328 	/* sound data */
2329 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2330 	ROM_LOAD( "321b17.9g", 0x000000, 2*1024*1024, CRC(b3e8d5d8) SHA1(6644a414e7f0e69ded9aa1bf892566002cebae26) )
2331 	ROM_LOAD( "321b18.7g", 0x200000, 2*1024*1024, CRC(2c561ad0) SHA1(6265054072ba1c2837dd96e0259b20bc50457160) )
2332 ROM_END
2333 
2334 /* Fantastic Journey (US version) */
2335 ROM_START( fantjour )
2336 	/* main program */
2337 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2338 	GX_BIOS
2339 	ROM_LOAD32_WORD_SWAP( "fsus31b.bin", 0x200002, 512*1024, CRC(afaf9d17) SHA1(a12214c6e634862d6507f56719b55d4a23a0ef0f) )
2340 	ROM_LOAD32_WORD_SWAP( "fsus27b.bin", 0x200000, 512*1024, CRC(b2cfe225) SHA1(7fd43acb1dd853a7980e7fcf48971ae28175e421) )
2341 
2342 	/* sound program */
2343 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2344 	ROM_LOAD16_BYTE("321_b06.9c", 0x000000, 128*1024, CRC(da810554) SHA1(f253e1aa137eecf283d8b083ef2b3b049e8366f4) )
2345 	ROM_LOAD16_BYTE("321_b07.7c", 0x000001, 128*1024, CRC(c47634c0) SHA1(20e4105df5bbc33edd01894e78f74ed5f173576e) )
2346 
2347 	/* tiles */
2348 	ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_ERASE00 )
2349 	TILE_WORD_ROM_LOAD( "fj-jap.17h", 0x000000, 2*1024*1024, CRC(437d0057) SHA1(30c449200e0510dc664289b527bade6e10dbe57a) )
2350 	TILE_BYTE_ROM_LOAD( "321b12.13g", 0x000004, 512*1024, CRC(5f9edfa0) SHA1(36d54c5fe498a4d0fa64757cef11c56c67518258) )
2351 
2352 	/* sprites */
2353 	ROM_REGION( 0x500000, REGION_GFX2, ROMREGION_ERASE00 )
2354 	ROM_LOAD32_WORD( "fj-jap.25g", 0x000000, 2*1024*1024, CRC(c6e2e74d) SHA1(3875a50923e46e2986dbe2573453af5c7fa726f7) )
2355 	ROM_LOAD32_WORD( "fj-jap.28g", 0x000002, 2*1024*1024, CRC(ea9f8c48) SHA1(b5e880015887308a5f1c1c623011d9b0903e848f) )
2356 	ROM_LOAD( "321b09.30g", 0x400000, 1*1024*1024, CRC(94add237) SHA1(9a6d0a9727e7fa02d91ece220b145074a6741a95) )
2357 
2358 	/* sound data */
2359 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2360 	ROM_LOAD( "321b17.9g", 0x000000, 2*1024*1024, CRC(b3e8d5d8) SHA1(6644a414e7f0e69ded9aa1bf892566002cebae26) )
2361 	ROM_LOAD( "321b18.7g", 0x200000, 2*1024*1024, CRC(2c561ad0) SHA1(6265054072ba1c2837dd96e0259b20bc50457160) )
2362 ROM_END
2363 
2364 /* Salamander 2 */
2365 ROM_START( salmndr2 )
2366 	/* main program */
2367 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2368 	GX_BIOS
2369 	ROM_LOAD32_WORD_SWAP( "521jaa02.31b", 0x200002, 512*1024, CRC(f6c3a95b) SHA1(c4ef3631eca898e5787fb2d356355da7e5d475eb) )
2370 	ROM_LOAD32_WORD_SWAP( "521jaa03.27b", 0x200000, 512*1024, CRC(c3be5e0a) SHA1(13bbce62c4d04a657de4594cc4d258e2468a59a4) )
2371 
2372 	/* sound program */
2373 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2374 	ROM_LOAD16_BYTE("521-a04.9c", 0x000000, 64*1024, CRC(efddca7a) SHA1(ac6b45044b6abeb2455ec21a61322185bf1c7219) )
2375 	ROM_LOAD16_BYTE("521-a05.7c", 0x000001, 64*1024, CRC(51a3af2c) SHA1(94d220ae619d53747bd3e762000ed59cf1b4d305) )
2376 
2377 	/* tiles */
2378 	ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_ERASE00 )
2379 	TILE_WORDS2_ROM_LOAD("521-a09.17h", 0x000000, 2*1024*1024, CRC(fb9e2f5e) SHA1(acb41616625d6976ad50e184787ab74e29f86039) )
2380 	TILE_WORDS2_ROM_LOAD("521-a11.15h", 0x300000, 1*1024*1024, CRC(25e0a6e5) SHA1(592e9f183f077e9272a4f0ead441b5bfd8029816) )
2381 	TILE_BYTES2_ROM_LOAD("521-a13.13c", 0x000004, 2*1024*1024, CRC(3ed7441b) SHA1(57e3e8035c056cf46a383d228c76a7da7def134f) )
2382 
2383 	/* sprites */
2384 	ROM_REGION( 0x600000, REGION_GFX2, ROMREGION_ERASE00 )
2385 	_48_WORD_ROM_LOAD( "521-a08.25g", 0x000000, 2*1024*1024, CRC(f24f76bd) SHA1(823f614d436901241743c923206cb61d8bbb5c58) )
2386 	_48_WORD_ROM_LOAD( "521-a07.28g", 0x000002, 2*1024*1024, CRC(50ef9b7a) SHA1(104eac2bce43e99d4adc208145afe7be9156628e) )
2387 	_48_WORD_ROM_LOAD( "521-a06.30g", 0x000004, 2*1024*1024, CRC(cba5db2c) SHA1(505efdf8571ae28d8788dcafbfffcfb67e3189ce) )
2388 
2389 	/* sound data */
2390 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2391 	ROM_LOAD( "521-a12.9g", 0x000000, 2*1024*1024, CRC(66614d3b) SHA1(e1e5ebe546bced6ab74b0af500acf0f3308902a4) )
2392 	ROM_LOAD( "521-a13.7g", 0x200000, 1*1024*1024, CRC(c3322475) SHA1(1774524ff031e0c4a7f3432810e968d37f9c6331) )
2393 ROM_END
2394 
2395 /* Twinbee Yahoo! */
2396 ROM_START( tbyahhoo )
2397 	/* main program */
2398 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2399 	GX_BIOS
2400 	ROM_LOAD32_WORD_SWAP( "426jaa02.31b", 0x200002, 512*1024, CRC(0416ad78) SHA1(a94c37a95e431c8f8cc3db66713faed406ab27c4) )
2401 	ROM_LOAD32_WORD_SWAP( "424jaa04.27b", 0x200000, 512*1024, CRC(bcbe0e40) SHA1(715f72a172a0662e6e65a57baa1f5a18d6210389) )
2402 
2403 	/* sound program */
2404 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2405 	ROM_LOAD16_BYTE("424a06.9c", 0x000000, 128*1024, CRC(a4760e14) SHA1(78dbd309f3f7fa61e92c9554e594449a7d4eed5a) )
2406 	ROM_LOAD16_BYTE("424a07.7c", 0x000001, 128*1024, CRC(fa90d7e2) SHA1(6b6dee29643309005834416bdfdb18d74f34cb1b) )
2407 
2408 	/* tiles */
2409 	ROM_REGION( 0x500000, REGION_GFX1, ROMREGION_ERASE00 )
2410 	TILE_WORD_ROM_LOAD( "424a14.17h", 0x000000, 2*1024*1024, CRC(b1d9fce8) SHA1(143ed2f03ac10a0f18d878c0ee0509a5714e4664) )
2411 	TILE_BYTE_ROM_LOAD( "424a12.13g", 0x000004, 512*1024, CRC(7f9cb8b1) SHA1(f5e18d70fcb572bb85f9b064995fc0ab0bb581e8) )
2412 
2413 	/* sprites */
2414 	ROM_REGION( 0x500000, REGION_GFX2, ROMREGION_ERASE00 )
2415 	ROM_LOAD32_WORD( "424a11.25g", 0x000000, 2*1024*1024, CRC(29592688) SHA1(a4b44e9153988a510915af83116e3c18dd15642f) )
2416 	ROM_LOAD32_WORD( "424a10.28g", 0x000002, 2*1024*1024, CRC(cf24e5e3) SHA1(095bf2ae4f47c6e4768515ae5e22c982fbc660a5) )
2417 	ROM_LOAD( "424a09.30g", 0x400000, 1*1024*1024, CRC(daa07224) SHA1(198cafa3d0ead2aa2593be066c6f372e66c11c44) )
2418 
2419 	/* sound data */
2420 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2421 	ROM_LOAD( "424a17.9g", 0x000000, 2*1024*1024, CRC(e9dd9692) SHA1(c289019c8d1dd71b3cec26479c39b649de804707) )
2422 	ROM_LOAD( "424a18.7g", 0x200000, 2*1024*1024, CRC(0f0d9f3a) SHA1(57f6b113b80f06964b7e672ad517c1654c5569c5) )
2423 ROM_END
2424 
2425 /* Daisu-Kiss */
2426 ROM_START( daiskiss )
2427 	/* main program */
2428 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2429 	GX_BIOS
2430 	ROM_LOAD32_WORD_SWAP( "535jaa02.31b", 0x200002, 512*1024, CRC(e5b3e0e5) SHA1(94910d79299e99022a1759998304b87440694ca0) )
2431 	ROM_LOAD32_WORD_SWAP( "535jaa03.27b", 0x200000, 512*1024, CRC(9dc10140) SHA1(0c4cc20b2c8ff5080fbd4ceb9446e6940b12cc53) )
2432 
2433 	/* sound program */
2434 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2435 	ROM_LOAD16_BYTE("535a08.9c", 0x000000, 128*1024, CRC(449416a7) SHA1(c79bf0d68c8639f67eb17f24f1bc10dd867a4c37) )
2436 	ROM_LOAD16_BYTE("535a09.7c", 0x000001, 128*1024, CRC(8ec57ab4) SHA1(bd8e12c796d42d2cb27c1e47dc6253bfb74a2887) )
2437 
2438 	/* tiles */
2439 	ROM_REGION( 0x500000, REGION_GFX1, ROMREGION_ERASE00 )
2440 	TILE_WORD_ROM_LOAD( "535a19.17h", 0x000000, 2*1024*1024, CRC(fa1c59d1) SHA1(7344afab2b8101f979c35ff9ec8d9c18475bb821) )
2441 	TILE_BYTE_ROM_LOAD( "535a18.13g", 0x000004, 512*1024,    CRC(d02e5103) SHA1(43c63a718a034636bad29d2def054d8b48f071e3) )
2442 
2443 	/* sprites */
2444 	ROM_REGION( 0x500000, REGION_GFX2, ROMREGION_ERASE00 )
2445 	ROM_LOAD32_WORD( "535a17.25g", 0x000000, 1*1024*1024, CRC(b12070e2) SHA1(51a763bf0e2c1d5c2b9983fcd4304d74c7fe6dd1) )
2446 	ROM_LOAD32_WORD( "535a13.28g", 0x000002, 1*1024*1024, CRC(10cf9d05) SHA1(6c6e51082ce340643d381863fec9b220e3d0ac53) )
2447 	ROM_LOAD( "535a11.30g", 0x400000, 512*1024, CRC(2b176b0f) SHA1(ecf4114d95a308be8f96a5c602c0f5ed5ffc8f29) )
2448 
2449 	/* sound data */
2450 	ROM_REGION( 0x200000, REGION_SOUND1, 0 )
2451 	ROM_LOAD( "535a22.9g", 0x000000, 2*1024*1024, CRC(7ee59acb) SHA1(782bf15f205e9fe7bd069f6445eb8187837dee32) )
2452 ROM_END
2453 
2454 /* Sexy Parodius Japan */
2455 ROM_START( sexyparo )
2456 	/* main program */
2457 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2458 	GX_BIOS
2459 	ROM_LOAD32_WORD_SWAP( "533jaa02.31b", 0x200002, 512*1024, CRC(b8030abc) SHA1(ee0add1513f620e35583a6ec1e773f53ea27e455) )
2460 	ROM_LOAD32_WORD_SWAP( "533jaa03.27b", 0x200000, 512*1024, CRC(4a95e80d) SHA1(ff0aef613745c07b5891e66b6b1759e048599214) )
2461 
2462 	/* sound program */
2463 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2464 	ROM_LOAD16_BYTE("533a08.9c", 0x000000, 128*1024, CRC(06d14cff) SHA1(21c01a06eabfacc4ac1d83bfad389f3dfa41b95f) )
2465 	ROM_LOAD16_BYTE("533a09.7c", 0x000001, 128*1024, CRC(a93c6f0b) SHA1(bee1abab985c7163212cad1a4bc0a427804dfed3) )
2466 
2467 	/* tiles */
2468 	ROM_REGION( 0x500000, REGION_GFX1, ROMREGION_ERASE00 )
2469 	TILE_WORD_ROM_LOAD( "533a19.17h", 0x000000, 2*1024*1024, CRC(3ec1843e) SHA1(5d2c37f1eb299c846daa63f35ccd5334a516a1f5) )
2470 	TILE_BYTE_ROM_LOAD( "533-ja.13g", 0x000004, 512*1024,    CRC(d3e0d058) SHA1(c50bdb3493501bfbbe092d01f5d4c38bfa3412f8) )
2471 
2472 	/* sprites */
2473 	ROM_REGION( 0x600000, REGION_GFX2, ROMREGION_ERASE00 )
2474 	ROM_LOAD32_WORD( "533a17.25g", 0x000000, 2*1024*1024, CRC(9947af57) SHA1(a8f67cb49cf55e8402de352bb530c7c90c643144) )
2475 	ROM_LOAD32_WORD( "533a13.28g", 0x000002, 2*1024*1024, CRC(58f1fc38) SHA1(9662b4fb036ffe90f294ee36fa52a0c1e1dbd116) )
2476 	ROM_LOAD( "533a11.30g", 0x400000, 2*1024*1024, CRC(983105e1) SHA1(c688f6f73fab16107f01523081558a2e02a5311c) )
2477 
2478 	/* sound data */
2479 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2480 	ROM_LOAD( "533a22.9g", 0x000000, 2*1024*1024, CRC(97233814) SHA1(dba20a81517796b7baf7c82551bd7f1c1a8ecd7e) )
2481 	ROM_LOAD( "533a23.7g", 0x200000, 2*1024*1024, CRC(1bb7552b) SHA1(3c6f96b4ab97737c3634c08b94dd304d5517d88d) )
2482 ROM_END
2483 
2484 /* Sexy Parodius Asia */
2485 ROM_START( sexyparoa )
2486 	/* main program */
2487 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2488 	GX_BIOS
2489 	ROM_LOAD32_WORD_SWAP( "533aaa02.31b", 0x200002, 512*1024, CRC(4fdc4298) SHA1(6aa0d6d00dada9d1bfe2b29cd342b11e2d42bf5a) )
2490 	ROM_LOAD32_WORD_SWAP( "533aaa03.27b", 0x200000, 512*1024, CRC(9c5e07cb) SHA1(4d7dbd9b0e47d501ab3f22c48942bb9e54450d87) )
2491 
2492 	/* sound program */
2493 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2494 	ROM_LOAD16_BYTE("533aaa08.9c", 0x000000, 128*1024, CRC(f2e2c963) SHA1(5b4ac1df208467cfac2927ce0b340090d631f190) )
2495 	ROM_LOAD16_BYTE("533aaa09.7c", 0x000001, 128*1024, CRC(49086451) SHA1(8fdbeb5889e476dfd3f31619d5b5280a0494de69) )
2496 
2497 	/* tiles */
2498 	ROM_REGION( 0x500000, REGION_GFX1, ROMREGION_ERASE00 )
2499 	TILE_WORD_ROM_LOAD( "533a19.17h", 0x000000, 2*1024*1024, CRC(3ec1843e) SHA1(5d2c37f1eb299c846daa63f35ccd5334a516a1f5) )
2500 	TILE_BYTE_ROM_LOAD( "533-ja.13g", 0x000004, 512*1024,    CRC(d3e0d058) SHA1(c50bdb3493501bfbbe092d01f5d4c38bfa3412f8) )
2501 
2502 	/* sprites */
2503 	ROM_REGION( 0x600000, REGION_GFX2, ROMREGION_ERASE00 )
2504 	ROM_LOAD32_WORD( "533a17.25g", 0x000000, 2*1024*1024, CRC(9947af57) SHA1(a8f67cb49cf55e8402de352bb530c7c90c643144) )
2505 	ROM_LOAD32_WORD( "533a13.28g", 0x000002, 2*1024*1024, CRC(58f1fc38) SHA1(9662b4fb036ffe90f294ee36fa52a0c1e1dbd116) )
2506 	ROM_LOAD( "533a11.30g", 0x400000, 2*1024*1024, CRC(983105e1) SHA1(c688f6f73fab16107f01523081558a2e02a5311c) )
2507 
2508 	/* sound data */
2509 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2510 	ROM_LOAD( "533a22.9g", 0x000000, 2*1024*1024, CRC(97233814) SHA1(dba20a81517796b7baf7c82551bd7f1c1a8ecd7e) )
2511 	ROM_LOAD( "533a23.7g", 0x200000, 2*1024*1024, CRC(1bb7552b) SHA1(3c6f96b4ab97737c3634c08b94dd304d5517d88d) )
2512 ROM_END
2513 
2514 /* Run and Gun 2 */
2515 ROM_START( rungun2 )
2516 	/* main program */
2517 	ROM_REGION( 0x600000, REGION_CPU1, 0 )
2518 	GX_BIOS
2519 	ROM_LOAD32_WORD_SWAP( "505uaa02.31b", 0x200002, 512*1024, CRC(cfca23f7) SHA1(dfea871f0aaf6b2db6d924ddfd4174e7a14333e8))
2520 	ROM_LOAD32_WORD_SWAP( "505uaa03.27b", 0x200000, 512*1024, CRC(ad7f9ded) SHA1(824448daeb6109b822667e54baa1c73484642ac9))
2521 
2522 	/* data roms */
2523 	ROM_LOAD32_WORD_SWAP( "505a04.31r", 0x400000, 1024*1024, CRC(11a73f01) SHA1(0738f347f1b639130d512f31034888d2063767c0) )
2524 	ROM_LOAD32_WORD_SWAP( "505a05.29r", 0x400002, 1024*1024, CRC(5da5d695) SHA1(02bfbfa4ba0213a23819828a9be02923740dccd6) )
2525 
2526 	/* sound program */
2527 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2528 	ROM_LOAD16_BYTE("505a06.9m", 0x000000, 128*1024, CRC(920013f1) SHA1(6bd7f2bdeaa777412d12eeef4ba6c7f952805739) )
2529 	ROM_LOAD16_BYTE("505a07.7m", 0x000001, 128*1024, CRC(5641c603) SHA1(1af1f92032e7f870e1668e8d720742fb53c4d0e2) )
2530 
2531 	/* tiles */
2532 	ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_ERASE00 )
2533 	ROM_LOAD16_BYTE( "505a21.11r", 0x000000, 1024*1024, CRC(03fda175) SHA1(4fdf7cfaa0d4024a2c40bba1f229c41e0627b8c8) )
2534 	ROM_LOAD16_BYTE( "505a20.11m", 0x000001, 1024*1024, CRC(a6a300fb) SHA1(290d97c6ec36e3cab8e6fcd5310030e00fb0ce07) )
2535 
2536 	/* sprites */
2537 	ROM_REGION( 0x1800000, REGION_GFX2, ROMREGION_ERASE00 )
2538 	ROM_LOAD32_WORD( "505a19.14r", 0x0000000, 2*1024*1024, CRC(ffde4f17) SHA1(df93853f7bd3c775a15836b0ca9042f75eb65630) )
2539 	ROM_LOAD32_WORD( "505a15.18r", 0x0000002, 2*1024*1024, CRC(d9ab1e6c) SHA1(748a61d939bd335c1b50f440e819303552b3d5a1) )
2540 	ROM_LOAD32_WORD( "505a18.18m", 0x0400000, 2*1024*1024, CRC(c12bacfe) SHA1(5b5f4dd9a51c7a305dd4de1354cd1df2ce75c932) )
2541 	ROM_LOAD32_WORD( "505a14.14m", 0x0400002, 2*1024*1024, CRC(356a75b0) SHA1(5f8b7a9d06d4207f19ed0f7c89513226488afde1) )
2542 	ROM_LOAD32_WORD( "505a13.21r", 0x0800000, 2*1024*1024, CRC(e60c5191) SHA1(02a8af81682838800489aa1123a453045d70acd8) )
2543 	ROM_LOAD32_WORD( "505a17.16r", 0x0800002, 2*1024*1024, CRC(8176f2f5) SHA1(d7944314b35bcd5301bbfba8a5b1ed6b35b9b888) )
2544 	ROM_LOAD32_WORD( "505a12.21m", 0x0c00000, 2*1024*1024, CRC(421d5034) SHA1(f7a85b7e41f3ddf9ddbdc6f8b6d3dbf8ba40d61b) )
2545 	ROM_LOAD32_WORD( "505a16.16m", 0x0c00002, 2*1024*1024, CRC(ca9c2193) SHA1(cc3fb558b834e0b7914879ab47c3750170d257f4) )
2546 	ROM_LOAD32_WORD( "505a11.23r", 0x1000000, 2*1024*1024, CRC(75c13df0) SHA1(6680f75a67ca510fac29b65bce32fef64e844695) )
2547 	ROM_LOAD32_WORD( "505a10.23m", 0x1000002, 2*1024*1024, CRC(fc315ee0) SHA1(4dab661e0bd8e5386e52d514a1511ceba6e5b7bd) )
2548 	ROM_LOAD32_WORD( "505a09.25r", 0x1400000, 2*1024*1024, CRC(3e1d5a15) SHA1(ec4d46c2f2cc57e6193865357ffb3d62a9eecd4f) )
2549 	ROM_LOAD32_WORD( "505a08.25m", 0x1400002, 2*1024*1024, CRC(442ed3ec) SHA1(d44e1c4e9f8c63a8f754f8d20064cec15ae0b6d6) )
2550 
2551 	/* PSAC2 tiles */
2552 	ROM_REGION( 0x200000, REGION_GFX3, 0 )
2553 	ROM_LOAD("505a24.22h", 0x000000, 2*1024*1024, CRC(70e906da) SHA1(4b1a412a71910633f48c6a0b9fd6949dcc82e365) )
2554 
2555 	/* sound data */
2556 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2557 	ROM_LOAD( "505a23.7r", 0x000000, 2*1024*1024, CRC(67f03445) SHA1(9b5c1d1bb7b0ee275862d10effd9daed49568af4) )
2558 	ROM_LOAD( "505a22.9r", 0x200000, 2*1024*1024, CRC(c2b67a9d) SHA1(9ff091972d7fad50bf0df2b3d8b5ee989e3df27f) )
2559 ROM_END
2560 
2561 /* Slam Dunk 2 */
2562 ROM_START( slamdnk2 )
2563 	/* main program */
2564 	ROM_REGION( 0x600000, REGION_CPU1, 0 )
2565 	GX_BIOS
2566 	ROM_LOAD32_WORD_SWAP( "505jaa02.31m", 0x200002, 512*1024, CRC(9f72d48e) SHA1(6dd0520d0f0312e46f21ad4f6c41e47f3b5cb16b) )
2567 	ROM_LOAD32_WORD_SWAP( "505jaa03.29m", 0x200000, 512*1024, CRC(52513794) SHA1(8a8fadb0eb582db53163620982dd53d1e5f8ca4c) )
2568 
2569 	/* data roms */
2570 	ROM_LOAD32_WORD_SWAP( "505a04.31r", 0x400000, 1024*1024, CRC(11a73f01) SHA1(0738f347f1b639130d512f31034888d2063767c0) )
2571 	ROM_LOAD32_WORD_SWAP( "505a05.29r", 0x400002, 1024*1024, CRC(5da5d695) SHA1(02bfbfa4ba0213a23819828a9be02923740dccd6) )
2572 
2573 	/* sound program */
2574 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2575 	ROM_LOAD16_BYTE("505a06.9m", 0x000000, 128*1024, CRC(920013f1) SHA1(6bd7f2bdeaa777412d12eeef4ba6c7f952805739) )
2576 	ROM_LOAD16_BYTE("505a07.7m", 0x000001, 128*1024, CRC(5641c603) SHA1(1af1f92032e7f870e1668e8d720742fb53c4d0e2) )
2577 
2578 	/* tiles */
2579 	ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_ERASE00 )
2580 	ROM_LOAD16_BYTE( "505a21.11r", 0x000000, 1024*1024, CRC(03fda175) SHA1(4fdf7cfaa0d4024a2c40bba1f229c41e0627b8c8) )
2581 	ROM_LOAD16_BYTE( "505a20.11m", 0x000001, 1024*1024, CRC(a6a300fb) SHA1(290d97c6ec36e3cab8e6fcd5310030e00fb0ce07) )
2582 
2583 	/* sprites */
2584 	ROM_REGION( 0x1800000, REGION_GFX2, ROMREGION_ERASE00 )
2585 	ROM_LOAD32_WORD( "505a19.14r", 0x0000000, 2*1024*1024, CRC(ffde4f17) SHA1(df93853f7bd3c775a15836b0ca9042f75eb65630) )
2586 	ROM_LOAD32_WORD( "505a15.18r", 0x0000002, 2*1024*1024, CRC(d9ab1e6c) SHA1(748a61d939bd335c1b50f440e819303552b3d5a1) )
2587 	ROM_LOAD32_WORD( "505a18.18m", 0x0400000, 2*1024*1024, CRC(c12bacfe) SHA1(5b5f4dd9a51c7a305dd4de1354cd1df2ce75c932) )
2588 	ROM_LOAD32_WORD( "505a14.14m", 0x0400002, 2*1024*1024, CRC(356a75b0) SHA1(5f8b7a9d06d4207f19ed0f7c89513226488afde1) )
2589 	ROM_LOAD32_WORD( "505a13.21r", 0x0800000, 2*1024*1024, CRC(e60c5191) SHA1(02a8af81682838800489aa1123a453045d70acd8) )
2590 	ROM_LOAD32_WORD( "505a17.16r", 0x0800002, 2*1024*1024, CRC(8176f2f5) SHA1(d7944314b35bcd5301bbfba8a5b1ed6b35b9b888) )
2591 	ROM_LOAD32_WORD( "505a12.21m", 0x0c00000, 2*1024*1024, CRC(421d5034) SHA1(f7a85b7e41f3ddf9ddbdc6f8b6d3dbf8ba40d61b) )
2592 	ROM_LOAD32_WORD( "505a16.16m", 0x0c00002, 2*1024*1024, CRC(ca9c2193) SHA1(cc3fb558b834e0b7914879ab47c3750170d257f4) )
2593 	ROM_LOAD32_WORD( "505a11.23r", 0x1000000, 2*1024*1024, CRC(75c13df0) SHA1(6680f75a67ca510fac29b65bce32fef64e844695) )
2594 	ROM_LOAD32_WORD( "505a10.23m", 0x1000002, 2*1024*1024, CRC(fc315ee0) SHA1(4dab661e0bd8e5386e52d514a1511ceba6e5b7bd) )
2595 	ROM_LOAD32_WORD( "505a09.25r", 0x1400000, 2*1024*1024, CRC(3e1d5a15) SHA1(ec4d46c2f2cc57e6193865357ffb3d62a9eecd4f) )
2596 	ROM_LOAD32_WORD( "505a08.25m", 0x1400002, 2*1024*1024, CRC(442ed3ec) SHA1(d44e1c4e9f8c63a8f754f8d20064cec15ae0b6d6) )
2597 
2598 	/* PSAC2 tiles */
2599 	ROM_REGION( 0x200000, REGION_GFX3, 0 )
2600 	ROM_LOAD("505a24.22h", 0x000000, 2*1024*1024, CRC(70e906da) SHA1(4b1a412a71910633f48c6a0b9fd6949dcc82e365) )
2601 
2602 	/* sound data */
2603 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2604 	ROM_LOAD( "505a23.7r", 0x000000, 2*1024*1024, CRC(67f03445) SHA1(9b5c1d1bb7b0ee275862d10effd9daed49568af4) )
2605 	ROM_LOAD( "505a22.9r", 0x200000, 2*1024*1024, CRC(c2b67a9d) SHA1(9ff091972d7fad50bf0df2b3d8b5ee989e3df27f) )
2606 ROM_END
2607 
2608 /* Rushing Heroes */
2609 ROM_START( rushhero )
2610 	/* main program */
2611 	ROM_REGION( 0x600000, REGION_CPU1, 0 )
2612 	GX_BIOS
2613 	ROM_LOAD32_WORD_SWAP( "605b02.31m", 0x200002, 512*1024, CRC(94c3d835) SHA1(f48d34987fa6575a2c41d3ca3359e9e2cbc817e0) )
2614 	ROM_LOAD32_WORD_SWAP( "605b03.29m", 0x200000, 512*1024, CRC(c5b8d31d) SHA1(6c5b359e1fcf511c50d6a876946631fc38a6dade) )
2615 
2616 	/* data roms */
2617 	ROM_LOAD32_WORD_SWAP( "605a04.31r", 0x400000, 1024*1024, CRC(f6788154) SHA1(093c145d5348b4f10193acc258f5539bd59138a1))
2618 	ROM_LOAD32_WORD_SWAP( "605a05.29r", 0x400002, 1024*1024, CRC(9bca4297) SHA1(c20be1ffcee8bd56f69d4fcc19d0035b3f74b8f2))
2619 
2620 	/* sound program */
2621 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2622 	ROM_LOAD16_BYTE("605a06.9m", 0x000000, 128*1024, CRC(9ca03dce) SHA1(008106e864d8390d7ae8645a2fe06d0eaaa746e0))
2623 	ROM_LOAD16_BYTE("605a07.7m", 0x000001, 128*1024, CRC(3116a8b0) SHA1(f0899d7027464d9aad45ffa6a464288a51a80dc1))
2624 
2625 	/* tiles */
2626 	ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_ERASE00 )
2627 	ROM_LOAD16_BYTE( "605a21.11r", 0x000000, 1024*1024, CRC(0e5add29) SHA1(f80d81ff8110825ba19ebc3cf50480b8cf275571))
2628 	ROM_LOAD16_BYTE( "605a20.11m", 0x000001, 1024*1024, CRC(a8fb4288) SHA1(b0ee6c2add5a8063f771ac8bbdfd78c0382a5036))
2629 
2630 	/* sprites */
2631 	ROM_REGION( 0x3000000, REGION_GFX2, ROMREGION_ERASE00 )
2632 	ROM_LOAD32_WORD( "605a19.14r", 0x0000000, 4*1024*1024, CRC(293427d0) SHA1(c31f93797bda09ea7e990100a5556eb0fde64968) )
2633 	ROM_LOAD32_WORD( "605a15.18r", 0x0000002, 4*1024*1024, CRC(19e6e356) SHA1(b2568e14d6fb9a9792f95aafcf694dbf00c0d2c8) )
2634 	ROM_LOAD32_WORD( "605a18.18m", 0x0800000, 4*1024*1024, CRC(b5115d76) SHA1(48c3119afb649c58d4df36806fe5530ddd379782) )
2635 	ROM_LOAD32_WORD( "605a14.14m", 0x0800002, 4*1024*1024, CRC(4d4dbecb) SHA1(7c3cb2739d6b729d855d652b1991c7af6cd79d1c) )
2636 	ROM_LOAD32_WORD( "605a13.21r", 0x1000000, 4*1024*1024, CRC(08137923) SHA1(c1af6b55c1c08e16384d2660b2210ccf3b955be9) )
2637 	ROM_LOAD32_WORD( "605a17.16r", 0x1000002, 4*1024*1024, CRC(42e6dc6f) SHA1(8035b7160267a988a1aa2690423c68b6f1975f1a) )
2638 	ROM_LOAD32_WORD( "605a12.21m", 0x1800000, 4*1024*1024, CRC(194ffad0) SHA1(1c56f4e89bfe72b435793b907e7ca3e62ecddf4b) )
2639 	ROM_LOAD32_WORD( "605a16.16m", 0x1800002, 4*1024*1024, CRC(aab542ca) SHA1(9728b028f48768236f47a7a9bddb27944297b583) )
2640 	ROM_LOAD32_WORD( "605a11.23r", 0x2000000, 4*1024*1024, CRC(bc61339c) SHA1(77a5737501bf8ffd7ae4192a6e5924c479eb6655) )
2641 	ROM_LOAD32_WORD( "605a10.23m", 0x2000002, 4*1024*1024, CRC(4f47d434) SHA1(c4503993c738e1b8df6f045f5a82504363682db7) )
2642 	ROM_LOAD32_WORD( "605a09.25r", 0x2800000, 4*1024*1024, CRC(624fd486) SHA1(edd81d5487f8239ffa89b931430cf41f06a17cf6) )
2643 	ROM_LOAD32_WORD( "605a08.25m", 0x2800002, 4*1024*1024, CRC(ea80ddfd) SHA1(4be61af09bcc80c97505196a6f43797753d14f85) )
2644 
2645 	/* PSAC2 tiles */
2646 	ROM_REGION( 0x200000, REGION_GFX3, 0 )
2647 	ROM_LOAD("605a24.22h", 0x000000, 1024*1024, CRC(e5ba1bb7) SHA1(d677e03b418a8bde7a4e4932fd452924768e7d72))
2648 
2649 	/* sound data */
2650 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2651 	ROM_LOAD( "605a23.7r", 0x000000, 4*1024*1024, CRC(992c4751) SHA1(18ecfc21138f9dc62f0658750808bbef649510f7))
2652 ROM_END
2653 
2654 /* Taisen Tokkae-dama */
2655 ROM_START( tokkae )
2656 	/* main program */
2657 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2658 	GX_BIOS
2659 	ROM_LOAD32_WORD_SWAP( "615jaa02.31b", 0x200002, 512*1024, CRC(f66d6dbf) SHA1(16c4a84e37475d3773b505f33f8a0ee8168f282f) )
2660 	ROM_LOAD32_WORD_SWAP( "615jaa03.27b", 0x200000, 512*1024, CRC(b7760e2b) SHA1(7903d8c2d32ef7d324e965e52544a9a41abf62fd) )
2661 
2662 	/* sound program */
2663 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2664 	ROM_LOAD16_BYTE("615a08.9c", 0x000000, 128*1024, CRC(a5340de4) SHA1(96d74624f44423e57fe8fcecadecdd76d91c27bc) )
2665 	ROM_LOAD16_BYTE("615a09.7c", 0x000001, 128*1024, CRC(c61f954c) SHA1(5242a2872db1db9ab4edd9951c2ac2d872f06dc7) )
2666 
2667 	/* tiles */
2668 	ROM_REGION( 0x500000, REGION_GFX1, ROMREGION_ERASE00 )
2669 	TILE_WORDS2_ROM_LOAD( "615a19.17h", 0x000000, 1*1024*1024, CRC(07749e1e) SHA1(79a5f979b1dc7fa92ae37af03447edf4885ecdf8) )
2670 	TILE_BYTES2_ROM_LOAD( "615a20.13c", 0x000004, 512*1024,    CRC(9911b5a1) SHA1(7dc9348fd23331ca7614db27dc5f280610f87a20) )
2671 
2672 	/* sprites */
2673 	ROM_REGION( 0xa00000, REGION_GFX2, ROMREGION_ERASE00 )
2674 	ROM_LOAD32_WORD( "615a17.25g", 0x000000, 2*1024*1024, CRC(b864654b) SHA1(bbd74c992ba3c3c629520e68687d7c8f3c26d0b9) )
2675 	ROM_LOAD32_WORD( "615a13.28g", 0x000002, 2*1024*1024, CRC(4e8afa1a) SHA1(d980104ddf9670e689236f381db3345471aff6fd) )
2676 	ROM_LOAD32_WORD( "615a16.18h", 0x400000, 2*1024*1024, CRC(dfa0f0fe) SHA1(4f68767f8329f6348055a472d923557e7dec3154) )
2677 	ROM_LOAD32_WORD( "615a12.27g", 0x400002, 2*1024*1024, CRC(fbc563fd) SHA1(19a6544297e0eade09e69741b9e3d8b32c7e2794) )
2678 
2679 	ROM_LOAD( "615a11.30g", 0x800000, 2*1024*1024, CRC(f25946e4) SHA1(e7744cdbeccc7325fdb31e134fed71d4cf8f9b0a) )
2680 
2681 	/* sound data */
2682 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2683 	ROM_LOAD( "615a22.9g", 0x000000, 2*1024*1024, CRC(ea7e47dd) SHA1(5bf5bad9427b083757c400eaf58c63a6267c1caf) )
2684 	ROM_LOAD( "615a23.7g", 0x200000, 2*1024*1024, CRC(22d71f36) SHA1(3f24bb4cd8e1d693b42219e05960ad0c756b08cb) )
2685 ROM_END
2686 
2687 /* Tokimeki Memorial Taisen Puzzle-dama */
2688 ROM_START( tkmmpzdm )
2689 	/* main program */
2690 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2691 	GX_BIOS
2692 	ROM_LOAD32_WORD_SWAP( "515jab02.31b", 0x200002, 512*1024, CRC(60d4d577) SHA1(5320ce2e004f01ca73e2f2048a622f14ab7a053d) )
2693 	ROM_LOAD32_WORD_SWAP( "515jab03.27b", 0x200000, 512*1024, CRC(c383413d) SHA1(1227e4c8bfdb5149896da81efa0109a55ae62708) )
2694 
2695 	/* sound program */
2696 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2697 	ROM_LOAD16_BYTE("515a04.9c", 0x000000, 128*1024, CRC(a9b7bb45) SHA1(ad11a7b5c24a03658ff4309dbd8c7334f4adf7b4) )
2698 	ROM_LOAD16_BYTE("515a05.7c", 0x000001, 128*1024, CRC(dea4ca2f) SHA1(5d11469a93293381228233baad6896e098994d9b) )
2699 
2700 	/* tiles */
2701 	ROM_REGION( 0x500000, REGION_GFX1, ROMREGION_ERASE00 )
2702 	TILE_WORDS2_ROM_LOAD( "515a11.17h", 0x000000, 1024*1024, CRC(8689852d) SHA1(42ba16a9dfba47132fe07c6b1d044c5b32753220) )
2703 	TILE_BYTES2_ROM_LOAD( "515a12.13c", 0x000004, 512*1024, CRC(6936f94a) SHA1(e2c7fc327638ee39eef6109c4f164eaf98972f00) )
2704 
2705 	/* sprites */
2706 	ROM_REGION( 0xa00000, REGION_GFX2, ROMREGION_ERASE00 )
2707 	ROM_LOAD32_WORD( "515a10.25g", 0x000000, 2*1024*1024, CRC(e6e7ab7e) SHA1(3f7ddab4b814673264b542d2a8761c56f82f2180) )
2708 	ROM_LOAD32_WORD( "515a08.28g", 0x000002, 2*1024*1024, CRC(5613daea) SHA1(43480c8104582cc27d8ab6920ec113e660de5ae7) )
2709 	ROM_LOAD32_WORD( "515a09.18h", 0x400000, 2*1024*1024, CRC(28ffdb48) SHA1(8511def7bb151f912755c2bbcb0cae1a2e52f405) )
2710 	ROM_LOAD32_WORD( "515a07.27g", 0x400002, 2*1024*1024, CRC(246e6cb1) SHA1(a320e0820895717c765d07f80cf7983b502af8f0) )
2711 	ROM_LOAD( "515a06.30g", 0x800000, 2*1024*1024, CRC(13b7b953) SHA1(4393c5b3515f3ded9db3ac5d59308f99f40f2b76) )
2712 
2713 	/* sound data */
2714 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2715 	ROM_LOAD( "515a13.9g", 0x000000, 2*1024*1024, CRC(4b066b00) SHA1(874dd49847b10e6d9c39decb81557534baa36d79) )
2716 	ROM_LOAD( "515a14.7g", 0x200000, 2*1024*1024, CRC(128cc944) SHA1(b0cd2ec1b9a2ac936d57b6d6c2a70f9c13dc97a5) )
2717 ROM_END
2718 
2719 /* Winning Spike */
2720 ROM_START( winspike )
2721 	/* main program */
2722 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2723 	GX_BIOS
2724 	ROM_LOAD32_WORD_SWAP( "705jaa02.31b", 0x200002, 512*1024, CRC(85f11b03) SHA1(ab597d16df654179050cc029179aaf946f0426c5) )
2725 	ROM_LOAD32_WORD_SWAP( "705jaa03.27b", 0x200000, 512*1024, CRC(1d5e3922) SHA1(b5e1fd1ea4f872159522e64c2725bf8441a58ef9) )
2726 
2727 	/* sound program */
2728 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2729 	ROM_LOAD16_BYTE("705a08.9c", 0x000000, 128*1024, CRC(0d531639) SHA1(14a72925f75528e7b4d6b701b2b51f4557f031f0) )
2730 	ROM_LOAD16_BYTE("705a09.7c", 0x000001, 128*1024, CRC(24e58845) SHA1(a01caced5bad9d98a3f33d72ca5eb9096c45e4ba) )
2731 
2732 	/* tiles: length of 1 meg each is TRUSTED by the internal checksum code */
2733 	/* do NOT change these to the 4 meg dumps again, those are WRONG!!!!!!! */
2734 	ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_ERASE00 )
2735     ROM_LOAD16_BYTE( "705a19.17h", 0x000000, 0x100000, CRC(bab84b30) SHA1(8522a0dc5e37524f51d632e9d975e949a14c0dc3) )
2736 	ROM_LOAD16_BYTE( "705a18.22h", 0x000001, 0x100000, CRC(eb97fb5f) SHA1(13de0ad060fd6f1312fa10edde1fef6481e8df64) )
2737 
2738 	/* sprites */
2739 	ROM_REGION( 0x1000000, REGION_GFX2, ROMREGION_ERASE00 )
2740         _64_WORD_ROM_LOAD( "705a10.33g",   0x000000, 0x400000, CRC(fc4dc78b) SHA1(520cdcf9ca20ec1c84be734e06e183e7a871090b) )
2741         _64_WORD_ROM_LOAD( "705a11.30g",   0x000002, 0x400000, CRC(68542ce9) SHA1(a4294da1d1026e3a9d070575e5855935389a705f) )
2742         _64_WORD_ROM_LOAD( "705a13.28g",   0x000004, 0x400000, CRC(3b62584b) SHA1(69718f47ff1e8d65a11972af1ed5068db175f625) )
2743         _64_WORD_ROM_LOAD( "705a17.25g",   0x000006, 0x400000, CRC(971d2812) SHA1(ee0819faf6f6c8420d5d3742cb39dfb76b9ce7a4) )
2744 
2745 	/* sound data */
2746 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2747 	ROM_LOAD( "705a22.9g", 0x000000, 4*1024*1024, CRC(1a9246f6) SHA1(a40ff43310d035f7b88c4e397a4ee75151578c17) )
2748 ROM_END
2749 
2750 /* Taisen Puzzle-dama */
2751 ROM_START( puzldama )
2752 	/* main program */
2753 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2754 	GX_BIOS
2755 	ROM_LOAD32_WORD_SWAP( "315jaa02.31b", 0x200002, 512*1024, CRC(e0a35c7d) SHA1(6f35dc0c43fa331fc71968c67f111fb73e5add2f) )
2756 	ROM_LOAD32_WORD_SWAP( "315jaa04.27b", 0x200000, 512*1024, CRC(abe4f0e7) SHA1(ece76088c61eddcad2efb554937d24d642d38be6) )
2757 
2758 	/* sound program */
2759 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2760 	ROM_LOAD16_BYTE("315a06.9c", 0x000000, 128*1024, CRC(06580a9f) SHA1(75e13aa13e3c1060cdd630c101d6644b3904317f) )
2761 	ROM_LOAD16_BYTE("315a07.7c", 0x000001, 128*1024, CRC(431c58f3) SHA1(4888e305875d56cca5e1d792bdf27e57b3e42b03) )
2762 
2763 	/* tiles */
2764 	ROM_REGION( 0xa00000, REGION_GFX1, ROMREGION_ERASE00 )
2765 	TILE_WORD_ROM_LOAD( "315a14.17h", 0x000000, 512*1024, CRC(0ab731e0) SHA1(1f7d6ce40e689e1dddfee656bb46bd044012c2d6) )
2766 	TILE_BYTE_ROM_LOAD( "315a12.13g", 0x000004, 2*1024*1024, CRC(3047b8d2) SHA1(99fa4d20ee5aae89b9093ceb581f187bc9acc0ae) )
2767 
2768 	/* sprites */
2769 	ROM_REGION( 0x500000, REGION_GFX2, ROMREGION_ERASE00 )
2770 	ROM_LOAD32_WORD( "315a11.25g", 0x000000, 2*1024*1024, CRC(b8a99c29) SHA1(60086f663aa6cbfc3fb378caeb2509c65637564e) )
2771 	ROM_LOAD32_WORD( "315a10.28g", 0x000002, 2*1024*1024, CRC(77d175dc) SHA1(73506df30db5ce38a9a21a1dce3e8b4cc1dfa7be) )
2772 	ROM_LOAD( "315a09.30g", 0x400000, 1*1024*1024, CRC(82580329) SHA1(99749a67f1843dfd0fe93cc6bbcbc126b7bb7fb4) )
2773 
2774 	/* sound data */
2775 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2776 	ROM_LOAD( "315a17.9g", 0x000000, 2*1024*1024, CRC(ea763d61) SHA1(2a7dcb2a2a23c9fea62fb82ffc18949bf15b9f6f) )
2777 	ROM_LOAD( "315a18.7g", 0x200000, 2*1024*1024, CRC(6e416cee) SHA1(145a766ad2fa2b692692053dd36e0caf51d67a56) )
2778 ROM_END
2779 
2780 /* Dragoon Might */
2781 ROM_START( dragoonj )
2782 	/* main program */
2783 	ROM_REGION( 0x600000, REGION_CPU1, 0 )
2784 	GX_BIOS
2785 	ROM_LOAD32_WORD_SWAP( "417jaa02.31b", 0x200002, 512*1024, CRC(533cbbd5) SHA1(4b7a0345ce0e503c647c7cde6f284ad0ee10f0ff) )
2786 	ROM_LOAD32_WORD_SWAP( "417jaa03.27b", 0x200000, 512*1024, CRC(8e1f883f) SHA1(e9f25c0fae7491c55812fda336436a2884c4d417) )
2787 
2788 	/* data roms */
2789 	ROM_LOAD32_WORD_SWAP( "417a04.26c", 0x400002, 1024*1024, CRC(dc574747) SHA1(43cbb6a08c27bb96bb25568c3b636c44fff3e08e) )
2790 	ROM_LOAD32_WORD_SWAP( "417a05.23c", 0x400000, 1024*1024, CRC(2ee2c587) SHA1(a1b2b288c375a3406d4b12e66c973484c03fe26e) )
2791 
2792 	/* sound program */
2793 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2794 	ROM_LOAD16_BYTE("417a06.9c", 0x000000, 128*1024, CRC(8addbbee) SHA1(fdb38fab1fd65b7362578b108bf6128e926b5f13) )
2795 	ROM_LOAD16_BYTE("417a07.7c", 0x000001, 128*1024, CRC(c1fd7584) SHA1(1b204165ef07b6b53f47adc16eed69d11dab53b2) )
2796 
2797 	/* tiles */
2798 	ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_ERASE00 )
2799 	TILE_WORD_ROM_LOAD( "417a16.17h", 0x000000, 2*1024*1024, CRC(88b2213b) SHA1(ac4ac57618cf98d7486b147f5494e6943bff1a4d) )
2800 
2801 	/* sprites */
2802 	ROM_REGION( 0x1000000, REGION_GFX2, ROMREGION_ERASE00 )
2803 	ROM_LOAD32_WORD( "417a15.25g", 0x000000, 2*1024*1024, CRC(83bccd01) SHA1(c0e65c43115164c3f64ac14a449c65c4e3e3c4cf) )
2804 	ROM_LOAD32_WORD( "417a11.28g", 0x000002, 2*1024*1024, CRC(624a7c4c) SHA1(5fda37cd02b4dcb328b80b29041214c685c77a78) )
2805 	ROM_LOAD32_WORD( "417a14.18h", 0x400000, 2*1024*1024, CRC(fbf551f1) SHA1(871c5804aba9845aa04596db51def3ba3b8bae30) )
2806 	ROM_LOAD32_WORD( "417a10.27g", 0x400002, 2*1024*1024, CRC(18fde49f) SHA1(f85b2981172be2cddc5d691bb803f0133a36cb1a) )
2807 	ROM_LOAD32_WORD( "417a13.20h", 0x800000, 2*1024*1024, CRC(d2e3959d) SHA1(efe516e6b84c67c0a154726a0f7f7054ee866738) )
2808 	ROM_LOAD32_WORD( "417a09.30g", 0x800002, 2*1024*1024, CRC(b5653e24) SHA1(ffa44d6b65feef298fa4dcc064ebd173c7cc22aa) )
2809 	ROM_LOAD32_WORD( "417a12.23h", 0xc00000, 2*1024*1024, CRC(25496115) SHA1(e53164f8ad95187011059c465a67fff1d18ba888) )
2810 	ROM_LOAD32_WORD( "417a08.33g", 0xc00002, 2*1024*1024, CRC(801e9d93) SHA1(9364d802b4ca03e652b25304c8298be8de8936b4) )
2811 
2812 	/* sound data */
2813 	ROM_REGION( 0x200000, REGION_SOUND1, 0 )
2814 	ROM_LOAD( "417a17.9g", 0x000000, 2*1024*1024, CRC(88d47dfd) SHA1(b5d6dd7ee9ac0c427dc3e714a97945c954260913) )
2815 ROM_END
2816 
2817 /* Soccer Superstars */
2818 ROM_START( soccerss )
2819 	/* main program */
2820 	ROM_REGION( 0x600000, REGION_CPU1, 0 )
2821 	GX_BIOS
2822 	ROM_LOAD32_WORD_SWAP( "427jaa02.28m", 0x200000, 512*1024, CRC(210f9ba7) SHA1(766fc821d1c7aaf9e306c6e2379d85e7aa50738c) )
2823 	ROM_LOAD32_WORD_SWAP( "427jaa03.30m", 0x200002, 512*1024, CRC(f76add04) SHA1(755dff41ce3b0488ed8f9f5feebfe95a22b70d16) )
2824 
2825 	/* data roms */
2826 	ROM_LOAD32_WORD_SWAP( "427a04.28r",   0x400000, 0x080000, CRC(c7d3e1a2) SHA1(5e1e4f4c97def36902ad853248014a7af62e0c5e) )
2827 	ROM_LOAD32_WORD_SWAP( "427a05.30r",   0x400002, 0x080000, CRC(5372f0a5) SHA1(36e8d0a73918cbd018c1865d1a05445daba8997c) )
2828 
2829 	/* sound program */
2830 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2831 	ROM_LOAD16_BYTE("427a07.6m", 0x000000, 128*1024, CRC(8dbaf4c7) SHA1(cb69bf94090a4871b35e7ba1f58e3225077b82cd) )
2832 	ROM_LOAD16_BYTE("427a06.9m", 0x000001, 128*1024, CRC(979df65d) SHA1(7499e9a27aa562692bd3a296789696492a6254bc) )
2833 
2834 	/* tiles */
2835 	ROM_REGION( 0x500000, REGION_GFX1, ROMREGION_ERASE00 )
2836 	TILE_WORDS2_ROM_LOAD( "427a15.11r", 0x000000, 0x100000, CRC(33ce2b8e) SHA1(b0936386cdc7c41f33b1d7b4f5ce25fe618d1286) )
2837 	TILE_BYTES2_ROM_LOAD( "427a14.143", 0x000004, 0x080000, CRC(7575a0ed) SHA1(92fda2747ac090f93e60cff8478af6721b949dc2) )
2838 
2839 	/* sprites */
2840 	ROM_REGION( 0xc00000, REGION_GFX2, ROMREGION_ERASE00 )
2841 	ROM_LOAD32_WORD( "427a08.140", 0x000000, 2*1024*1024, CRC(221250af) SHA1(fd24e7f0e3024df5aa08506523953c5e35d2267b) )
2842 	ROM_LOAD32_WORD( "427a09.137", 0x000002, 2*1024*1024, CRC(56bdd480) SHA1(01d164aedc77f71f6310cfd739c00b33289a2e7e) )
2843 	ROM_LOAD32_WORD( "427a10.25r", 0x400000, 2*1024*1024, CRC(6b3ccb41) SHA1(b246ef350a430e60f0afd1b80ff48139c325e926) )
2844 	ROM_LOAD32_WORD( "427a11.23r", 0x400002, 2*1024*1024, CRC(c1ca74c1) SHA1(b7286df8e59f8f1939ebf17aaf9345a857b0b100) )
2845 	ROM_LOAD32_WORD( "427a12.21r", 0x800000, 2*1024*1024, CRC(97d6fd38) SHA1(8d2895850cafdea95db08c84e7eeea90a1921515) )
2846 	ROM_LOAD32_WORD( "427a13.18r", 0x800002, 2*1024*1024, CRC(815a9b87) SHA1(7d9d5932fff7dd7aa4cbccf0c8d3784dc8042e70) )
2847 
2848 	/* PSAC2 tiles */
2849 	ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_ERASE00 )
2850 	ROM_LOAD( "427a18.145", 0x000000, 0x100000, CRC(bb6e6ec6) SHA1(aa1365a4318866d9e7e74461a6e6c113f83b6771) )
2851 
2852 	/* PSAC2 map data */
2853 	ROM_REGION( 0x080000, REGION_GFX4, ROMREGION_ERASE00 )
2854 	ROM_LOAD( "427a17.24c", 0x000000, 0x080000, CRC(fb6eb01f) SHA1(28cdb30ff70ee5fc7624e18fe048dd85dfa49ace) )
2855 
2856 	/* sound data */
2857 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2858 	ROM_LOAD( "427a16.9r", 0x000000, 2*1024*1024,  CRC(39547265) SHA1(c0efd68c0c1ea59141045150842f36d43e1f01d8) )
2859 ROM_END
2860 
2861 /* Vs. Net Soccer */
2862 ROM_START(vsnetscr)
2863 	/* main program */
2864 	ROM_REGION( 0x600000, REGION_CPU1, 0 )
2865 	GX_BIOS
2866 	ROM_LOAD32_WORD_SWAP( "627uab03.29m", 0x200000, 512*1024, CRC(53ca7eec) SHA1(d2d5a491417849c31aaff61a93da4ab2e94495d4) )
2867 	ROM_LOAD32_WORD_SWAP( "627uab02.31m", 0x200002, 512*1024, CRC(c352cc6f) SHA1(d8d0d802eb6bd0910e35dcc6b81b7ac9036e32ea) )
2868 
2869 	/* data roms */
2870 	ROM_LOAD32_WORD_SWAP( "627a05.31r", 0x400000, 1024*1024, CRC(be4e7b3c) SHA1(f44e7b1913aa54f759bd31bb86fdedbb9747b2d5) )
2871 	ROM_LOAD32_WORD_SWAP( "627a04.29r", 0x400002, 1024*1024, CRC(17334e9a) SHA1(82cdba016c29160550c43feee7a4feff6e1184aa) )
2872 
2873 	/* sound program */
2874 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2875 	ROM_LOAD16_BYTE("627b06.9m", 0x000000, 128*1024, CRC(c8337b9d) SHA1(574c674676f493ca4b5a135728ce01e664d1293d) )
2876 	ROM_LOAD16_BYTE("627b07.7m", 0x000001, 128*1024, CRC(d7d92579) SHA1(929b8e90cfef2ef14d84173267b637e4efdb6867) )
2877 
2878 	/* tiles */
2879 	ROM_REGION( 0x500000, REGION_GFX1, ROMREGION_ERASE00 )
2880 	ROM_LOAD16_BYTE( "627a21.11r", 0x000000, 1024*1024, CRC(d0755fb8) SHA1(de37ea2a7969a97b6f2abccb7dc2a58950482bf0) )
2881 	ROM_LOAD16_BYTE( "627a20.11m", 0x000001, 1024*1024, CRC(f68b28f2) SHA1(1463717ed581494fcab77a80dc6ffd3ab82ab1fa) )
2882 
2883 	/* sprites */
2884 	ROM_REGION( 0xc00000, REGION_GFX2, ROMREGION_ERASE00 )
2885 	ROM_LOAD32_WORD( "627a19.14r", 0x000000, 2*1024*1024, CRC(5efaa3bc) SHA1(95314c1054ccf5b9626f0b06f9e1c857a127e2ca) )
2886 	ROM_LOAD32_WORD( "627a15.18r", 0x000002, 2*1024*1024, CRC(5180ca06) SHA1(d5569f6fc6b0374cd111f8313f635e4b7c49351f) )
2887 	ROM_LOAD32_WORD( "627a13.21r", 0x400000, 2*1024*1024, CRC(af48849d) SHA1(c43981883ef042968444b6d993a640edc429daae) )
2888 	ROM_LOAD32_WORD( "627a17.16r", 0x400002, 2*1024*1024, CRC(ca99d29c) SHA1(919dfb029dbc7d2c5e420d54df36eef3ec3bb1a2) )
2889 	ROM_LOAD32_WORD( "627a11.23r", 0x800000, 2*1024*1024, CRC(a2e507f2) SHA1(ceaaccbac22fecef32fa34f887568bb18464265d) )
2890 	ROM_LOAD32_WORD( "627a09.25r", 0x800002, 2*1024*1024, CRC(312cf8a4) SHA1(107456fc1a1906a60b5b50f4ca6b7e8cd258e6ee) )
2891 
2892 	/* PSAC2 tiles */
2893 	ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_ERASE00)
2894 	ROM_LOAD( "627a24.22h", 0x000000, 0x200000, CRC(2cd73305) SHA1(5a46148c08198499639adc4b6936af0b2b530bc9) )
2895 
2896 	/* sound data */
2897 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2898 	/* probably should be 4M byte mode like Rushing Heroes*/
2899 	ROM_LOAD( "627a23.7r", 0x000000, 0x200000, BAD_DUMP CRC(b0266eb6) SHA1(65fafcee4b8f9a6e9f05df6f1fb4db519e97f776) )
2900 ROM_END
2901 
2902 /* Lethal Enforcers II */
2903 ROM_START( le2 )
2904 	/* main program */
2905 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2906 	GX_BIOS
2907 	ROM_LOAD32_BYTE( "312eaa05.26b", 0x200000, 128*1024, CRC(875f6561) SHA1(8ede0697ff91134011f9fb5eb26e596cbc6e8f12) )
2908 	ROM_LOAD32_BYTE( "312eaa04.28b", 0x200001, 128*1024, CRC(d5fb8d30) SHA1(824d6a43bed5aff2f65096922620ff5bff3b29f9) )
2909 	ROM_LOAD32_BYTE( "312eaa03.30b", 0x200002, 128*1024, CRC(cfe07036) SHA1(cd7181ace76feb0e684a51db488b64b86ced5f55) )
2910 	ROM_LOAD32_BYTE( "312eaa02.33b", 0x200003, 128*1024, CRC(5094b965) SHA1(cb597b663c49d0f63af770fd6ce344e5df9a1ed9) )
2911 
2912 	/* sound program */
2913 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2914 	ROM_LOAD16_BYTE("312b06.9c", 0x000000, 128*1024, CRC(a6f62539) SHA1(b333e02c55237a0429d8c5386ec68b67797a1107) )
2915 	ROM_LOAD16_BYTE("312b07.7c", 0x000001, 128*1024, CRC(1aa19c41) SHA1(5b879fb17ac514f266e63db6af50f2f4af7da32c) )
2916 
2917 	/* tiles */
2918 	ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_ERASE00 )
2919 	ROM_LOAD16_BYTE( "312a14.17h", 0x000000, 2*1024*1024, CRC(dc862f19) SHA1(8ec9f8715b622462fb8c79a48162c161eb9fe13b) )
2920 	ROM_LOAD16_BYTE( "312a12.22h", 0x000001, 2*1024*1024, CRC(98c04ddd) SHA1(7bc7af21625466e75003da9fd950437249e75b78) )
2921 	ROM_LOAD16_BYTE( "312a15.15h", 0x400000, 2*1024*1024, CRC(516f2941) SHA1(07415fec2d96fe6b707f801a9e9e963186d83d6a) )
2922 	ROM_LOAD16_BYTE( "312a13.20h", 0x400001, 2*1024*1024, CRC(16e5fdaa) SHA1(f04e09ee4207eb2bd67533997d36f4b3cf42a439) )
2923 
2924 	/* sprites */
2925 	ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_ERASE00 )
2926 	_64_WORD_ROM_LOAD( "312a08.33g", 0x000000, 2*1024*1024, CRC(29015d56) SHA1(7273270804ecefd8f59469c2c2a8a89fb045a12b) )
2927 	_64_WORD_ROM_LOAD( "312a09.30g", 0x000002, 2*1024*1024, CRC(b2c5d6d5) SHA1(8248612275ca862c6688de5c6f24f37aeb3f9fe5) )
2928 	_64_WORD_ROM_LOAD( "312a10.28g", 0x000004, 2*1024*1024, CRC(3c570d04) SHA1(ebbf7d28726e98c8895c9bf901f8b2dd38018c77) )
2929 	_64_WORD_ROM_LOAD( "312a11.25g", 0x000006, 2*1024*1024, CRC(5f474357) SHA1(1f6d99f1ea69e07a65731ea4eae5917452cfcab6) )
2930 
2931 	/* sound data */
2932 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2933 	ROM_LOAD( "312a17.9g", 0x000000, 2*1024*1024, CRC(ed101448) SHA1(ef1342f37fbbb092eddee0c237b40989ad42cf26) )
2934 	ROM_LOAD( "312a18.7g", 0x200000, 1*1024*1024, CRC(5717abd7) SHA1(d304d733e7fca0363ea6b3872c2d3bbe4edf1179) )
2935 ROM_END
2936 
2937 /* Lethal Enforcers II (US Version) */
2938 ROM_START( le2u )
2939 	/* main program */
2940 	ROM_REGION( 0x300000, REGION_CPU1, 0 )
2941 	GX_BIOS
2942 	ROM_LOAD32_BYTE( "312uaa05.26b", 0x200000, 128*1024, CRC(973aa500) SHA1(ad834b0fed37502ff3e3fe7f608fd5dbe172f452) )
2943 	ROM_LOAD32_BYTE( "312uaa04.28b", 0x200001, 128*1024, CRC(cba39552) SHA1(243f2115047d9e646f69368d78b18be47b7eacc6) )
2944 	ROM_LOAD32_BYTE( "312uaa03.30b", 0x200002, 128*1024, CRC(20bc94e6) SHA1(652ca7b3b7ece9e702134691373e913ce3651401) )
2945 	ROM_LOAD32_BYTE( "312uaa02.33b", 0x200003, 128*1024, CRC(04f3bd9e) SHA1(0617fd065efeae8c5fa665a65ed69a246d7a8ed7) )
2946 
2947 	/* sound program */
2948 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2949 	ROM_LOAD16_BYTE("312a06.9c", 0x000000, 128*1024, CRC(ff6f2cd4) SHA1(a52cab6b64b54bd60e96437ed91277c76293af2d) )
2950 	ROM_LOAD16_BYTE("312a07.7c", 0x000001, 128*1024, CRC(3d31e989) SHA1(1fdf205b0f9c21093bc6147aaacdf178aa628508) )
2951 
2952 	/* tiles */
2953 	ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_ERASE00 )
2954 	ROM_LOAD16_BYTE( "312a14.17h", 0x000000, 2*1024*1024, CRC(dc862f19) SHA1(8ec9f8715b622462fb8c79a48162c161eb9fe13b) )
2955 	ROM_LOAD16_BYTE( "312a12.22h", 0x000001, 2*1024*1024, CRC(98c04ddd) SHA1(7bc7af21625466e75003da9fd950437249e75b78) )
2956 	ROM_LOAD16_BYTE( "312a15.15h", 0x400000, 2*1024*1024, CRC(516f2941) SHA1(07415fec2d96fe6b707f801a9e9e963186d83d6a) )
2957 	ROM_LOAD16_BYTE( "312a13.20h", 0x400001, 2*1024*1024, CRC(16e5fdaa) SHA1(f04e09ee4207eb2bd67533997d36f4b3cf42a439) )
2958 
2959 	/* sprites */
2960 	ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_ERASE00 )
2961 	_64_WORD_ROM_LOAD( "312a08.33g", 0x000000, 2*1024*1024, CRC(29015d56) SHA1(7273270804ecefd8f59469c2c2a8a89fb045a12b) )
2962 	_64_WORD_ROM_LOAD( "312a09.30g", 0x000002, 2*1024*1024, CRC(b2c5d6d5) SHA1(8248612275ca862c6688de5c6f24f37aeb3f9fe5) )
2963 	_64_WORD_ROM_LOAD( "312a10.28g", 0x000004, 2*1024*1024, CRC(3c570d04) SHA1(ebbf7d28726e98c8895c9bf901f8b2dd38018c77) )
2964 	_64_WORD_ROM_LOAD( "312a11.25g", 0x000006, 2*1024*1024, CRC(5f474357) SHA1(1f6d99f1ea69e07a65731ea4eae5917452cfcab6) )
2965 
2966 	/* sound data */
2967 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
2968 	ROM_LOAD( "312a17.9g", 0x000000, 2*1024*1024, CRC(ed101448) SHA1(ef1342f37fbbb092eddee0c237b40989ad42cf26) )
2969 	ROM_LOAD( "312a18.7g", 0x200000, 1*1024*1024, CRC(5717abd7) SHA1(d304d733e7fca0363ea6b3872c2d3bbe4edf1179) )
2970 ROM_END
2971 
2972 /* Racin' Force */
2973 ROM_START( racinfrc )
2974 	/* main program */
2975 	ROM_REGION( 0x800000, REGION_CPU1, 0 )
2976 	GX_BIOS
2977 	ROM_LOAD32_WORD_SWAP( "250uab02.34n", 0x200000, 512*1024, CRC(315040c6) SHA1(940d54c1eb898d9a44d823f9f5ae9e91a20f746f) )
2978 	ROM_LOAD32_WORD_SWAP( "250uab03.31n", 0x200002, 512*1024, CRC(171134ab) SHA1(308b7e76a80c3d860a15408a144b1e0f76fcee87) )
2979 
2980 	/* data roms */
2981 	ROM_LOAD32_WORD_SWAP( "250a04.34s", 0x400000, 2*1024*1024, CRC(45e4d43c) SHA1(a668431d53b50fd41e1fa3c8959c0dc96e50c52b) )
2982 	ROM_LOAD32_WORD_SWAP( "250a05.31s", 0x400002, 2*1024*1024, CRC(a235af3e) SHA1(381cd16552f007ccb508411a03fdfd18e32203d0) )
2983 
2984 	/* sound program */
2985 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
2986 	ROM_LOAD16_BYTE("250a06.8p", 0x000000, 128*1024, CRC(2d0a3ff1) SHA1(ce4261d5f86821e98e971a35403c793506d0566b) )
2987 	ROM_LOAD16_BYTE("250a07.6p", 0x000001, 128*1024, CRC(612b670a) SHA1(255515fa5096fcc4681b32defa0ae855286d8ed1) )
2988 
2989 	/* tiles */
2990 	ROM_REGION( 0x300000, REGION_GFX1, ROMREGION_ERASE00 )
2991 	TILE_WORDS2_ROM_LOAD( "250a15.19y", 0x000000, 0x100000, CRC(60abc472) SHA1(ff360d81222e2d8cd55b907ca5a9947f958aaaab) )
2992 	TILE_BYTES2_ROM_LOAD( "250a14.21y", 0x000004, 0x080000, CRC(d14abf98) SHA1(14827a01deb659c96fd38a5c76f1c9cead5f83c7) )
2993 
2994 	/* sprites */
2995 	ROM_REGION( 0xa00000, REGION_GFX2, ROMREGION_ERASE00 )
2996         ROM_LOAD32_WORD( "250a12.26y", 0x000000, 0x200000, CRC(e4ca3cff) SHA1(5dfddda4b5257e98a53fb8669714004ae3aeb3a7) )
2997 	ROM_LOAD32_WORD( "250a10.31y", 0x000002, 0x200000, CRC(75c02d12) SHA1(3ca471d887b92261b1c3f50777903df13f07b1a9) )
2998         ROM_LOAD32_WORD( "250a13.24y", 0x400000, 0x200000, CRC(7aeef929) SHA1(9f656e2ede27aea7d51f0f0a3a91a8f2c2d250c0) )
2999         ROM_LOAD32_WORD( "250a11.28y", 0x400002, 0x200000, CRC(dfbce309) SHA1(831444e7a7588833ffc9b712412f7aef34a7fa2e) )
3000 	ROM_LOAD( "250a08.36y", 0x800000, 0x200000, CRC(25ff6414) SHA1(0af4ef7fe00d7da5fcb5dd0770d470a556c62d61) )
3001 
3002 	/* K053936 tiles (CROM and HROM from the schematics) */
3003 	ROM_REGION( 0x300000, REGION_GFX3, ROMREGION_ERASE00 )
3004 	T1_PSAC6_ROM_LOAD( "250a20.10d", 0x000000, 0x100000, CRC(26a2fcaf) SHA1(d2e38dc0c61e6fed93441dfe2b811993ac9f0ad3) )
3005 	T1_PSAC6_ROM_LOAD( "250a21.7d",  0x000001, 0x100000, CRC(370d7771) SHA1(59ab52287d5aca37baa68d941db165d8da212c69) )
3006 	T1_PSAC6_ROM_LOAD( "250a22.5d",  0x000002, 0x100000, CRC(c66a7775) SHA1(80087b2a3a221f8b2d6c4d1c1c535602e611b561) )
3007 
3008 	ROM_REGION( 0x300000, REGION_GFX4, ROMREGION_ERASE00 )
3009 	T1_PSAC6_ROM_LOAD( "250a24.10h", 0x000000, 0x100000, CRC(a14547da) SHA1(a379ff2f62b340a6ea46c84878a865ccff0d132c) )
3010 	T1_PSAC6_ROM_LOAD( "250a25.7h",  0x000001, 0x100000, CRC(58310501) SHA1(e0be82f112fd86cdb448c9c8ceda0ad4cc03e3e4) )
3011 	T1_PSAC6_ROM_LOAD( "250a26.5h",  0x000002, 0x100000, CRC(f72e4cbe) SHA1(822895b42fe4dc8fc1c55501009b6d6e57ee46a1) )
3012 
3013 	/* sound data */
3014 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
3015 	ROM_LOAD( "250a17.14y", 0x000000, 2*1024*1024, CRC(adefa079) SHA1(d25911e3a02d92dc936c3d7e9d76fc270bd1a75a) )
3016 	ROM_LOAD( "250a18.12y", 0x200000, 2*1024*1024, CRC(8014a2eb) SHA1(d82f0a7d559340ae05a78ecc8bb69bb35b9c0658) )
3017 ROM_END
3018 
3019 /* Konami Open Golf Championship */
3020 ROM_START( opengolf )
3021 	/* main program */
3022 	ROM_REGION( 0x800000, REGION_CPU1, 0 )
3023 	GX_BIOS
3024 	ROM_LOAD32_WORD_SWAP( "218ead02.34n", 0x200000, 512*1024, CRC(eeb58816) SHA1(fe88a4515b552975f78897543bc564495b69dd68) )
3025 	ROM_LOAD32_WORD_SWAP( "218ead03.31n", 0x200002, 512*1024, CRC(5c36f84c) SHA1(8dcbc9e1a8857be9d407a9d0e962a62b963e7187) )
3026 
3027 	/* data roms */
3028 	ROM_LOAD32_WORD_SWAP( "218a04.34s", 0x400000, 512*1024, CRC(e50043a7) SHA1(d3a8e214362c34c4151408f422c9b1c723f7f01c) )
3029 	ROM_LOAD32_WORD_SWAP( "218a05.31s", 0x400002, 512*1024, CRC(46c6b5d3) SHA1(e59c6d2dac9db635589149e4b4852e5f6a9c3c4f) )
3030 
3031 	/* sound program */
3032 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
3033 	ROM_LOAD16_BYTE("218a06.8p", 0x000000, 128*1024, CRC(6755ccf9) SHA1(3bcb18302c385a937c748cf586970c12cef21b38) )
3034 	ROM_LOAD16_BYTE("218a07.6p", 0x000001, 128*1024, CRC(221e5293) SHA1(44b0b4fa37da4c19c29d4d2e5b93b94fbec03633) )
3035 
3036 	/* tiles */
3037 	ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_ERASE00 )
3038 	TILE_WORD_ROM_LOAD( "218a15.19y", 0x000000, 2*1024*1024, CRC(78ddc8af) SHA1(24313881dbf7e1b06da008080b0143c3ca5e15b1) )
3039 	TILE_WORD_ROM_LOAD( "218a16.16y", 0x280000, 512*1024,    CRC(a41a3ec8) SHA1(dfef4c3e4d6d4e453a4958f2bd52788497c64093) )
3040 	TILE_BYTE_ROM_LOAD( "218a14.22y", 0x000004, 1*1024*1024, CRC(508cd75e) SHA1(adfaac92bc55f60b178a5817c48774a664d8980d) )
3041 
3042 	/* sprites */
3043 	ROM_REGION( 0x900000, REGION_GFX2, ROMREGION_ERASE00 )
3044 	_48_WORD_ROM_LOAD( "218a12.26y", 0x000000, 2*1024*1024, CRC(83158653) SHA1(b7e43d63f12a793b18ce9fc9cc2c38352d211905) )
3045 	_48_WORD_ROM_LOAD( "218a10.31y", 0x000002, 2*1024*1024, CRC(059bfee3) SHA1(e7f4621313b7f9a6cad81d455700172654bc7404) )
3046 	_48_WORD_ROM_LOAD( "218a08.35y", 0x000004, 2*1024*1024, CRC(5b7098f3) SHA1(91bedf731e94d1554f9a8f86f79425a2c58bbaf9) )
3047 	_48_WORD_ROM_LOAD( "218a13.24y", 0x600000, 1*1024*1024, CRC(b9ffd12a) SHA1(f8a689957b8ff966a38f999a679cdbf18a6dfc77) )
3048 	_48_WORD_ROM_LOAD( "218a11.28y", 0x600002, 1*1024*1024, CRC(b57231e5) SHA1(e1cd1854e909ca53dc2c32b27e5f9bb2217b0e4c) )
3049 	_48_WORD_ROM_LOAD( "218a09.33y", 0x600004, 1*1024*1024, CRC(13627443) SHA1(b51758e19ed7d6bb1e313f7c8a509ad1aad8b22c) )
3050 
3051 	/* K053936 tiles (CROM and HROM from the schematics) */
3052 	ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 )
3053 	T1_PSAC8_ROM_LOAD( "218a20.10d", 0x000000, 0x200000, CRC(f0ac2d6f) SHA1(acae9e20d663932a9a44a2e1089546338442c71f) )
3054 	T1_PSAC8_ROM_LOAD( "218a21.7d",  0x000001, 0x200000, CRC(cb15122a) SHA1(2d159dcfbd4a7fc6e824c1be0cc5b81dee7ce8a3) )
3055 	T1_PSAC8_ROM_LOAD( "218a22.5d",  0x000002, 0x200000, CRC(1b08d7dc) SHA1(2b963dbc415a30d3545ea730e47a592798f30a45) )
3056 	T1_PSAC8_ROM_LOAD( "218a23.3d",  0x000003, 0x200000, CRC(1e4224b5) SHA1(f34849d500a35001944da6b8864c796e7a0a7224) )
3057 
3058 	ROM_REGION( 0x600000, REGION_GFX4, ROMREGION_ERASE00 )
3059 	T1_PSAC6_ROM_LOAD( "218a24.10h", 0x000000, 0x200000, CRC(e938d96a) SHA1(176a9bfd252f01bc034ca348d018705926a1a545) )
3060 	T1_PSAC6_ROM_LOAD( "218a25.7h",  0x000001, 0x200000, CRC(11600c2d) SHA1(721c9361761dd20810ff18c63543b222c98a47a4) )
3061 	T1_PSAC6_ROM_LOAD( "218a26.5h",  0x000002, 0x200000, CRC(b37e4b7a) SHA1(3d21e540a366f6ef8ba761855fceecd8591179d7) )
3062 
3063 	/* sound data */
3064 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
3065 	ROM_LOAD( "218a17.14y", 0x000000, 2*1024*1024, CRC(0b525127) SHA1(218b306c12e1094a676815b7dddaf13bf19be2d5) )
3066 	ROM_LOAD( "218a18.12y", 0x200000, 1*1024*1024, CRC(98ec4cfb) SHA1(638753f9d9269719a37133b9c39c242507fdd8ac) )
3067 ROM_END
3068 
3069 /* Golfing Greats 2 */
3070 ROM_START( ggreats2 )
3071 	/* main program */
3072 	ROM_REGION( 0x800000, REGION_CPU1, 0 )
3073 	GX_BIOS
3074         ROM_LOAD32_WORD_SWAP( "218jac02.34n", 0x200000, 0x080000, CRC(e4d47f92) SHA1(4761cf69670d97db548b146b127c9af04f8809d6) )
3075         ROM_LOAD32_WORD_SWAP( "218jac03.31n", 0x200002, 0x080000, CRC(ec10c0b2) SHA1(4084d8420c53e73630786adf1a4f0fde548fa212) )
3076 
3077 	/* data roms */
3078 	ROM_LOAD32_WORD_SWAP( "218a04.34s", 0x400000, 512*1024, CRC(e50043a7) SHA1(d3a8e214362c34c4151408f422c9b1c723f7f01c) )
3079 	ROM_LOAD32_WORD_SWAP( "218a05.31s", 0x400002, 512*1024, CRC(46c6b5d3) SHA1(e59c6d2dac9db635589149e4b4852e5f6a9c3c4f) )
3080 
3081 	/* sound program */
3082 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
3083 	ROM_LOAD16_BYTE("218a06.8p", 0x000000, 128*1024, CRC(6755ccf9) SHA1(3bcb18302c385a937c748cf586970c12cef21b38) )
3084 	ROM_LOAD16_BYTE("218a07.6p", 0x000001, 128*1024, CRC(221e5293) SHA1(44b0b4fa37da4c19c29d4d2e5b93b94fbec03633) )
3085 
3086 	/* tiles */
3087 	ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_ERASE00 )
3088 	TILE_WORD_ROM_LOAD( "218a15.19y", 0x000000, 2*1024*1024, CRC(78ddc8af) SHA1(24313881dbf7e1b06da008080b0143c3ca5e15b1) )
3089 	TILE_WORD_ROM_LOAD( "218a16.16y", 0x280000, 512*1024,    CRC(a41a3ec8) SHA1(dfef4c3e4d6d4e453a4958f2bd52788497c64093) )
3090 	TILE_BYTE_ROM_LOAD( "218a14.22y", 0x000004, 1*1024*1024, CRC(508cd75e) SHA1(adfaac92bc55f60b178a5817c48774a664d8980d) )
3091 
3092 	/* sprites */
3093 	ROM_REGION( 0x900000, REGION_GFX2, ROMREGION_ERASE00 )
3094 	_48_WORD_ROM_LOAD( "218a12.26y", 0x000000, 2*1024*1024, CRC(83158653) SHA1(b7e43d63f12a793b18ce9fc9cc2c38352d211905) )
3095 	_48_WORD_ROM_LOAD( "218a10.31y", 0x000002, 2*1024*1024, CRC(059bfee3) SHA1(e7f4621313b7f9a6cad81d455700172654bc7404) )
3096 	_48_WORD_ROM_LOAD( "218a08.35y", 0x000004, 2*1024*1024, CRC(5b7098f3) SHA1(91bedf731e94d1554f9a8f86f79425a2c58bbaf9) )
3097 	_48_WORD_ROM_LOAD( "218a13.24y", 0x600000, 1*1024*1024, CRC(b9ffd12a) SHA1(f8a689957b8ff966a38f999a679cdbf18a6dfc77) )
3098 	_48_WORD_ROM_LOAD( "218a11.28y", 0x600002, 1*1024*1024, CRC(b57231e5) SHA1(e1cd1854e909ca53dc2c32b27e5f9bb2217b0e4c) )
3099 	_48_WORD_ROM_LOAD( "218a09.33y", 0x600004, 1*1024*1024, CRC(13627443) SHA1(b51758e19ed7d6bb1e313f7c8a509ad1aad8b22c) )
3100 
3101 	/* K053936 tiles (CROM and HROM from the schematics) */
3102 	ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 )
3103 	T1_PSAC8_ROM_LOAD( "218a20.10d", 0x000000, 0x200000, CRC(f0ac2d6f) SHA1(acae9e20d663932a9a44a2e1089546338442c71f) )
3104 	T1_PSAC8_ROM_LOAD( "218a21.7d",  0x000001, 0x200000, CRC(cb15122a) SHA1(2d159dcfbd4a7fc6e824c1be0cc5b81dee7ce8a3) )
3105 	T1_PSAC8_ROM_LOAD( "218a22.5d",  0x000002, 0x200000, CRC(1b08d7dc) SHA1(2b963dbc415a30d3545ea730e47a592798f30a45) )
3106 	T1_PSAC8_ROM_LOAD( "218a23.3d",  0x000003, 0x200000, CRC(1e4224b5) SHA1(f34849d500a35001944da6b8864c796e7a0a7224) )
3107 
3108 	ROM_REGION( 0x600000, REGION_GFX4, ROMREGION_ERASE00 )
3109 	T1_PSAC6_ROM_LOAD( "218a24.10h", 0x000000, 0x200000, CRC(e938d96a) SHA1(176a9bfd252f01bc034ca348d018705926a1a545) )
3110 	T1_PSAC6_ROM_LOAD( "218a25.7h",  0x000001, 0x200000, CRC(11600c2d) SHA1(721c9361761dd20810ff18c63543b222c98a47a4) )
3111 	T1_PSAC6_ROM_LOAD( "218a26.5h",  0x000002, 0x200000, CRC(b37e4b7a) SHA1(3d21e540a366f6ef8ba761855fceecd8591179d7) )
3112 
3113 	/* sound data */
3114 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
3115 	ROM_LOAD( "218a17.14y", 0x000000, 2*1024*1024, CRC(0b525127) SHA1(218b306c12e1094a676815b7dddaf13bf19be2d5) )
3116 	ROM_LOAD( "218a18.12y", 0x200000, 1*1024*1024, CRC(98ec4cfb) SHA1(638753f9d9269719a37133b9c39c242507fdd8ac) )
3117 ROM_END
3118 
3119 /**********************************************************************************/
3120 /* initializers */
3121 
3122 MACHINE_INIT(konamigx)
3123 {
3124 	konamigx_wrport1_0 = konamigx_wrport1_1 = 0;
3125 	konamigx_wrport2 = 0;
3126 
3127 /*
3128 	bit0  : EEPROM data(don't care)
3129 	bit1  : DMA busy   (cleared)
3130 	bit2-7: IRQ ready  (all set)
3131 */
3132 	gx_rdport1_3 = 0xfc;
3133 	gx_syncen    = 0;
3134 	suspension_active = 0;
3135 
3136 	memset(sndto000, 0, 16);
3137 	memset(sndto020, 0, 16);
3138 
3139 	tms57002_init();
3140 
3141 	/* sound CPU initially disabled?*/
3142 	cpu_set_halt_line(1, ASSERT_LINE);
3143 }
3144 
DRIVER_INIT(konamigx)3145 static DRIVER_INIT(konamigx)
3146 {
3147 #define BPP5  1
3148 #define BPP6  2
3149 #define BPP66 3
3150 
3151 	int readback = 0;
3152 
3153 	konamigx_cfgport = -1;
3154 	last_prot_op = -1;
3155 	last_prot_clk = 0;
3156 
3157 	esc_cb = 0;
3158 	snd020_hack = 0;
3159 	resume_trigger = 0;
3160 
3161 	state_save_register_UINT8("KonamiGX", 0, "IRQ enable", &konamigx_wrport1_1, 1);
3162 	state_save_register_UINT8("KonamiGX", 0, "Sound comms 1", sndto020, 16);
3163 	state_save_register_UINT8("KonamiGX", 0, "Sound comms 2", sndto000, 16);
3164 
3165 	dmadelay_timer = timer_alloc(dmaend_callback);
3166 
3167 	/* running down the list is not a good idea but easier than maintaining individual drivers*/
3168 	if (!strcmp(Machine->gamedrv->name, "racinfrc"))
3169 	{
3170 		konamigx_cfgport = 11;
3171 	}
3172 
3173 	else if (!strcmp(Machine->gamedrv->name, "opengolf"))
3174 	{
3175 		konamigx_cfgport = 11;
3176 	}
3177 
3178 	else if (!strcmp(Machine->gamedrv->name, "le2") || !strcmp(Machine->gamedrv->name, "le2u"))
3179 	{
3180 		#if GX_SKIPIDLE
3181 			ADD_SKIPPER32(0x2010f0, 0xc00000, 0xfe, 0x13f, -1, 0xff)
3182 		#endif
3183 
3184 		install_mem_read32_handler(0, 0xd44000, 0xd44003,  le2_gun_H_r );
3185 		install_mem_read32_handler(0, 0xd44004, 0xd44007,  le2_gun_V_r );
3186 
3187 		snd020_hack = 1;
3188 		konamigx_cfgport = 13;
3189 	}
3190 
3191 	else if (!strcmp(Machine->gamedrv->name, "gokuparo") || !strcmp(Machine->gamedrv->name, "fantjour"))
3192 	{
3193 		#if GX_SKIPIDLE
3194 			ADD_SKIPPER32(0x2a0a66, 0xc00000, 0xd400, 0xd400, 0, 0xffff0000)
3195 		#endif
3196 
3197 		readback = BPP5;
3198 		konamigx_cfgport = 7;
3199 	}
3200 
3201 	else if (!strcmp(Machine->gamedrv->name, "puzldama"))
3202 	{
3203 		#if GX_SKIPIDLE
3204 		#endif
3205 			ADD_SKIPPER32(0x20d494, 0xc00000, 0x540, 0x6ff, -1, 0xffff)
3206 
3207 		readback = BPP5;
3208 		konamigx_cfgport = 7;
3209 	}
3210 
3211 	else if (!strcmp(Machine->gamedrv->name, "tbyahhoo"))
3212 	{
3213 		#if GX_SKIPIDLE
3214 			ADD_SKIPPER32(0x297b9a, 0xc00000, 0xf800, 0xf800, 0, 0xffff0000)
3215 		#endif
3216 
3217 		esc_cb = tbyahhoo_esc;
3218 		readback = BPP5;
3219 		konamigx_cfgport = 7;
3220 	}
3221 
3222 	else if (!strcmp(Machine->gamedrv->name, "tkmmpzdm"))
3223 	{
3224 		int i;
3225 		data32_t *rom = (data32_t*)memory_region(REGION_CPU1);
3226 
3227 		/* The display is initialized after POST but the copyright screen disabled*/
3228 		/* planes B,C,D and didn't bother restoring them. I've spent a good*/
3229 		/* amount of time chasing this bug but the cause remains inconclusive.*/
3230 		/* My guess is the CCU somehow masked or delayed vblank interrupts*/
3231 		/* during the copyright message.*/
3232 		rom[0x810f1] &= ~1;      /* fix checksum*/
3233 		rom[0x872ea] |= 0xe0000; /* enable plane B,C,D*/
3234 
3235 		#if GX_SKIPIDLE
3236 			ADD_SKIPPER32(0x2060d4, 0xc00000, 0x13e48, 0x14027, 0, -1)
3237 		#endif
3238 
3239 		esc_cb = tkmmpzdm_esc;
3240 		readback = BPP6;
3241 		konamigx_cfgport = 7;
3242 
3243 		/* boost voice(chip 1 channel 3-7)*/
3244 		for (i=3; i<=7; i++) K054539_set_gain(1, i, 2.0);
3245 	}
3246 
3247 	else if (!strcmp(Machine->gamedrv->name, "dragoonj"))
3248 	{
3249 		int i;
3250 		esc_cb = dragoonj_esc;
3251 		konamigx_cfgport = 7;
3252 
3253 		/* soften percussions(chip 1 channel 0-3), boost voice(chip 1 channel 4-7)*/
3254 		for (i=0; i<=3; i++)
3255 		{
3256 			K054539_set_gain(1, i, 0.8);
3257 			K054539_set_gain(1, i+4, 2.0);
3258 		}
3259 	}
3260 
3261 	else if (!strcmp(Machine->gamedrv->name, "sexyparo") || !strcmp(Machine->gamedrv->name, "sexyparoa"))
3262 	{
3263 		#if GX_SKIPIDLE
3264 			ADD_SKIPPER32(0x289baa, 0xc00000, 0x10204, 0x10204, 0, 0xffff0000)
3265 		#endif
3266 
3267 		esc_cb = sexyparo_esc;
3268 		readback = BPP5;
3269 		konamigx_cfgport = 7;
3270 	}
3271 
3272 	else if (!strcmp(Machine->gamedrv->name, "daiskiss"))
3273 	{
3274 		#if GX_SKIPIDLE
3275 			ADD_SKIPPER32(0x28707e, 0xc00000, 0x8400, 0x8400, 0, 0xffff0000)
3276 		#endif
3277 
3278 		esc_cb = daiskiss_esc;
3279 		readback = BPP5;
3280 		konamigx_cfgport = 7;
3281 	}
3282 
3283 	else if (!strcmp(Machine->gamedrv->name, "tokkae"))
3284 	{
3285 		#if GX_SKIPIDLE
3286 			ADD_SKIPPER32(0x206b94, 0xc00000, 0x142ac, 0x142ac, 0, 0xff000000)
3287 		#endif
3288 
3289 		readback = BPP5;
3290 		konamigx_cfgport = 7;
3291 	}
3292 
3293 	else if (!strcmp(Machine->gamedrv->name, "salmndr2"))
3294 	{
3295 		#if GX_SKIPIDLE
3296 			ADD_SKIPPER32(0x220070, 0xc00000, 0xbe8, 0xbe8, 0, 0x0000ffff)
3297 		#endif
3298 
3299 		esc_cb = sal2_esc;
3300 		readback = BPP66;
3301 		konamigx_cfgport = 7;
3302 	}
3303 
3304 	else if (!strcmp(Machine->gamedrv->name, "winspike"))
3305 	{
3306 		snd020_hack = 2;
3307 		konamigx_cfgport = 8;
3308 		/* Winning Spike uses the type 4 Xilinx protection*/
3309 		install_mem_write32_handler(0, 0xcc0000, 0xcc0007, type4_prot_w );
3310 	}
3311 
3312 	else if (!strcmp(Machine->gamedrv->name, "soccerss"))
3313 	{
3314 		konamigx_cfgport = 7;
3315 	}
3316 
3317 	else if (!strcmp(Machine->gamedrv->name, "vsnetscr"))
3318 	{
3319 		snd020_hack = 5;
3320 		konamigx_cfgport = 7;
3321 	}
3322 
3323 	else if (!strcmp(Machine->gamedrv->name, "rungun2"))
3324 	{
3325 		snd020_hack = 3;
3326 		konamigx_cfgport = 7;
3327 	}
3328 
3329 	else if (!strcmp(Machine->gamedrv->name, "slamdnk2"))
3330 	{
3331 		snd020_hack = 6;
3332 		konamigx_cfgport = 7;
3333 	}
3334 
3335 	else if (!strcmp(Machine->gamedrv->name, "rushhero"))
3336 	{
3337 		snd020_hack = 4;
3338 		konamigx_cfgport = 7;
3339 	}
3340 
3341 	switch (readback)
3342 	{
3343 		case BPP5:
3344 			install_mem_read32_handler(0, 0xd4a000, 0xd4a00f, gx5bppspr_r);
3345 		break;
3346 
3347 		case BPP66:
3348 			install_mem_read32_handler(0, 0xd00000, 0xd01fff, K056832_6bpp_rom_long_r);
3349 
3350 		case BPP6:
3351 			install_mem_read32_handler(0, 0xd4a000, 0xd4a00f, gx6bppspr_r);
3352 		break;
3353 	}
3354 
3355 #undef BPP5
3356 #undef BPP6
3357 #undef BPP66
3358 }
3359 
3360 /**********************************************************************************/
3361 /*     year  ROM       parent    machine   inp    	 init */
3362 
3363 /* dummy parent for the BIOS */
3364 GAMEX(1994, konamigx, 0, konamigx, konamigx, konamigx, ROT0, "Konami", "System GX", NOT_A_DRIVER )
3365 
3366 
3367 /* Type 1: standard with an add-on 53936 on the ROM board, analog inputs, and LAN (link) capability */
3368 /* needs the 53936 to be playable */
3369 GAMEX( 1994, racinfrc, konamigx, racinfrc, racinfrc, konamigx, ROT0, "Konami", "Racin' Force (ver UAB)", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING  )
3370 GAMEX( 1994, opengolf, konamigx, opengolf,  racinfrc, konamigx, ROT0, "Konami", "Konami's Open Golf Championship (ver EAD)", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING  )
3371 GAMEX( 1994, ggreats2, opengolf, opengolf,  racinfrc, konamigx, ROT0, "Konami", "Golfing Greats 2 (ver JAC)", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
3372 
3373 
3374 /* Type 2: totally stock, sometimes with funny protection chips on the ROM board */
3375 /* these games work and are playable with minor graphics glitches */
3376 GAMEX( 1994, le2,      konamigx, le2,      le2,      konamigx, ROT0, "Konami", "Lethal Enforcers II - Gun Fighters (ver EAA)", GAME_IMPERFECT_GRAPHICS )
3377 GAMEX( 1994, le2u,     le2,      le2,      le2,      konamigx, ROT0, "Konami", "Lethal Enforcers II - Gun Fighters (ver UAA)", GAME_IMPERFECT_GRAPHICS )
3378 GAMEX( 1994, gokuparo, konamigx, konamigx, gokuparo, konamigx, ROT0, "Konami", "Gokujyou Parodius (ver JAD)", GAME_IMPERFECT_GRAPHICS )
3379 GAMEX( 1994, puzldama, konamigx, konamigx, puzldama, konamigx, ROT0, "Konami", "Taisen Puzzle-dama (ver JAA)", GAME_IMPERFECT_GRAPHICS )
3380 GAMEX( 1995, tbyahhoo, konamigx, konamigx, gokuparo, konamigx, ROT0, "Konami", "Twin Bee Yahhoo! (ver JAA)", GAME_IMPERFECT_GRAPHICS )
3381 GAMEX( 1995, tkmmpzdm, konamigx, konamigx_6bpp, puzldama, konamigx, ROT0, "Konami", "Tokimeki Memorial Taisen Puzzle-dama (ver JAB)", GAME_IMPERFECT_GRAPHICS )
3382 GAMEX( 1995, dragoonj, konamigx, dragoonj, dragoonj, konamigx, ROT0, "Konami", "Dragoon Might (ver JAA)", GAME_IMPERFECT_GRAPHICS )
3383 GAMEX( 1996, sexyparo, konamigx, konamigx, gokuparo, konamigx, ROT0, "Konami", "Sexy Parodius (ver JAA)", GAME_IMPERFECT_GRAPHICS )
3384 GAMEX( 1996, sexyparoa,sexyparo, konamigx, gokuparo, konamigx, ROT0, "Konami", "Sexy Parodius (ver AAA)", GAME_IMPERFECT_GRAPHICS )
3385 GAMEX( 1996, daiskiss, konamigx, konamigx, gokuparo, konamigx, ROT0, "Konami", "Daisu-Kiss (ver JAA)", GAME_IMPERFECT_GRAPHICS )
3386 GAMEX( 1996, tokkae,   konamigx, konamigx_6bpp, puzldama, konamigx, ROT0, "Konami", "Taisen Tokkae-dama (ver JAA)", GAME_IMPERFECT_GRAPHICS )
3387 GAMEX( 1996, salmndr2, konamigx, konamigx_6bpp_2, gokuparo, konamigx, ROT0, "Konami", "Salamander 2 (ver JAA)", GAME_IMPERFECT_GRAPHICS|GAME_UNEMULATED_PROTECTION )
3388 
3389 /* these games are unplayable due to protection (winspike has the same FPGA protection as the type 4 games) */
3390 GAMEX( 1994, fantjour, gokuparo, konamigx, gokuparo, konamigx, ROT0, "Konami", "Fantastic Journey", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION )
3391 GAMEX( 1997, winspike, konamigx, winspike, konamigx, konamigx, ROT0, "Konami", "Winning Spike (ver JAA)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING  )
3392 
3393 
3394 /* Type 3: dual monitor output and 53936 on the ROM board, external palette RAM */
3395 GAMEX( 1994, soccerss, konamigx, gxtype3,  type3, konamigx, ROT0, "Konami", "Soccer Superstars (ver JAA)", GAME_NOT_WORKING )
3396 
3397 
3398 /* Type 4: dual monitor output and 53936 on the ROM board, external palette RAM, DMA protection */
3399 GAMEX( 1996, vsnetscr, konamigx, gxtype4, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver UAB)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION )
3400 GAMEX( 1996, rungun2,  konamigx, gxtype4, type3, konamigx, ROT0, "Konami", "Run and Gun 2 (ver UAA)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION )
3401 GAMEX( 1996, slamdnk2, rungun2,  gxtype4, type3, konamigx, ROT0, "Konami", "Slam Dunk 2 (ver JAA)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION )
3402 GAMEX( 1996, rushhero, konamigx, gxtype4, type3, konamigx, ROT0, "Konami", "Rushing Heroes (ver UAB)", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING  )
3403