QuarterArcade Coin-Op Tech Net

Quick Nav: # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Coin-Op : Arcade : Taisen Karate Dou : VM Driver Source

Source Listing


     1: /*----------------------------------------------------------------
     2:    Psikyo PS4 SH-2 Based Systems
     3:    driver by David Haywood (+ Paul Priest)
     4: ------------------------------------------------------------------
     5: 
     6: Moving on from the 68020 based system used for the first Strikers
     7: 1945 game Psikyo introduced a system using Hitachi's SH-2 CPU
     8: 
     9: This driver is for the dual-screen PS4 boards
    10: 
    11:  Board PS4 (Custom Chip PS6807)
    12:  ------------------------------
    13:  Taisen Hot Gimmick (c)1997
    14:  Taisen Hot Gimmick Kairakuten (c)1998
    15:  Taisen Hot Gimmick 3 Digital Surfing (c)1999
    16:  Taisen Hot Gimmick 4 Ever (c)2000 (confirmed by Japump)
    17:  Lode Runner - The Dig Fight (c)2000
    18:  Quiz de Idol! Hot Debut (c)2000
    19: 
    20:  The PS4 board appears to be a cheaper board than PS3/5/5v2, with only simple sprites, no bgs,
    21:  smaller palette etc, only 8bpp sprites too.
    22:  Supports dual-screen though.
    23: 
    24: All the boards have
    25: 
    26: YMF278B-F (80 pin PQFP) & YAC513 (16 pin SOIC)
    27: ( YMF278B-F is OPL4 == OPL3 plus a sample playback engine. )
    28: 
    29: 93C56 EEPROM
    30: ( 93c56 is a 93c46 with double the address space. )
    31: 
    32: To Do:
    33: 
    34:   Sprite List format not 100% understood.
    35:   Some of the games suffer from sound problems (wrong pitch / samples played)
    36: 
    37: 
    38: *-----------------------------------*
    39: |         Tips and Tricks           |
    40: *-----------------------------------*
    41: 
    42: Hold Button during booting to test roms (Checksum 16-bit) for:
    43: 
    44: Lode Runner - The Dig Fight:   PL1 Start (passes gfx, sample result:05A5, expects:0BB0 [both sets])
    45: Quiz de Idol! Hot Debut:       PL1 Start (passes)
    46: 
    47: --- Lode Runner: The Dig Fight ---
    48: 
    49: 5-0-8-2-0 Maintenance Mode
    50: 
    51: You can switch the game to English temporarily.
    52: 
    53: Or use these cheats:
    54: :loderndf:00000000:0600A533:00000001:FFFFFFFF:Language = English
    55: :loderdfa:00000000:0600A473:00000001:FFFFFFFF:Language = English
    56: 
    57: --- Quiz de Idol! Hot Debut ---
    58: 
    59: 9-2-3-0-1 Maintenance Mode
    60: 
    61: ----------------------------------------------------------------*/
    62: 
    63: #include "driver.h" 
    64: #include "state.h" 
    65: #include "cpuintrf.h" 
    66: 
    67: #include "vidhrdw/generic.h" 
    68: #include "cpu/sh2/sh2.h" 
    69: #include "machine/eeprom.h" 
    70: 
    71: #define DUAL_SCREEN 1 /* Display both screens simultaneously if 1, change in vidhrdw too */ 
    72: #define ROMTEST 0 /* Does necessary stuff to perform rom test, uses RAM as it doesn't dispose of GFX after decoding */
    73: 
    74: data32_t *psikyo4_vidregs, *ps4_ram, *ps4_io_select;
    75: data32_t *bgpen_1, *bgpen_2, *screen1_brt, *screen2_brt;
    76: 
    77: #define MASTER_CLOCK 57272700	// main oscillator frequency 
    78: 
    79: /* defined in vidhrdw/psikyo4.c */
    80: VIDEO_START( psikyo4 );
    81: VIDEO_UPDATE( psikyo4 );
    82: 
    83: static struct GfxLayout layout_16x16x8 =
    84: {
    85: 	16,16,
    86: 	RGN_FRAC(1,1),
    87: 	8,
    88: 	{STEP8(0,1)},
    89: 	{STEP16(0,8)},
    90: 	{STEP16(0,16*8)},
    91: 	16*16*8
    92: };
    93: 
    94: static struct GfxDecodeInfo gfxdecodeinfops4[] =
    95: {
    96: 	{ REGION_GFX1, 0, &layout_16x16x8, 0x000, 0x80 }, // 8bpp tiles
    97: 	{ -1 }
    98: };
    99: 
   100: static struct EEPROM_interface eeprom_interface_93C56 =
   101: {
   102: 	8,		// address bits	8
   103: 	8,		// data bits	8
   104: 	"*110x",	// read			110x aaaaaaaa
   105: 	"*101x",	// write		101x aaaaaaaa dddddddd
   106: 	"*111x",	// erase		111x aaaaaaaa
   107: 	"*10000xxxxxxx",// lock			100x 00xxxx
   108: 	"*10011xxxxxxx",// unlock		100x 11xxxx
   109: //	"*10001xxxx",	// write all	1 00 01xxxx dddddddddddddddd
   110: //	"*10010xxxx"	// erase all	1 00 10xxxx
   111: };
   112: 
   113: static NVRAM_HANDLER(93C56)
   114: {
   115: 	if (read_or_write)
   116: 	{
   117: 		EEPROM_save(file);
   118: 	}
   119: 	else
   120: 	{
   121: 		EEPROM_init(&eeprom_interface_93C56);
   122: 		if (file)
   123: 		{
   124: 			EEPROM_load(file);
   125: 		}
   126: 		else	// these games want the eeprom all zeros by default
   127: 		{
   128: 			int length;
   129: 			UINT8 *dat;
   130: 
   131: 			dat = EEPROM_get_data_pointer(&length);
   132: 			memset(dat, 0, length);
   133: 		}
   134: 	}
   135: }
   136: 
   137: static WRITE32_HANDLER( ps4_eeprom_w )
   138: {
   139: 	if (ACCESSING_MSW32)
   140: 	{
   141: 		EEPROM_write_bit((data & 0x00200000) ? 1 : 0);
   142: 		EEPROM_set_cs_line((data & 0x00800000) ? CLEAR_LINE : ASSERT_LINE);
   143: 		EEPROM_set_clock_line((data & 0x00400000) ? ASSERT_LINE : CLEAR_LINE);
   144: 
   145: 		return;
   146: 	}
   147: 
   148: 	logerror("Unk EEPROM write %x mask %x\n", data, mem_mask);
   149: }
   150: 
   151: static READ32_HANDLER( ps4_eeprom_r )
   152: {
   153: 	if (ACCESSING_MSW32)
   154: 	{
   155: 		return ((EEPROM_read_bit() << 20)); /* EEPROM */
   156: 	}
   157: 
   158: 	logerror("Unk EEPROM read mask %x\n", mem_mask);
   159: 
   160: 	return 0;
   161: }
   162: 
   163: static INTERRUPT_GEN(psikyosh_interrupt)
   164: {
   165: 	cpu_set_irq_line(0, 4, HOLD_LINE);
   166: }
   167: 
   168: static READ32_HANDLER(hotgmck_io32_r) /* used by hotgmck/hgkairak */
   169: {
   170: 	int ret = 0xff;
   171: 	int sel = (ps4_io_select[0] & 0x0000ff00) >> 8;
   172: 
   173: 	if (sel & 1) ret &= readinputport(0+4*offset);
   174: 	if (sel & 2) ret &= readinputport(1+4*offset);
   175: 	if (sel & 4) ret &= readinputport(2+4*offset);
   176: 	if (sel & 8) ret &= readinputport(3+4*offset);
   177: 
   178: 	return ret<<24 | readinputport(8);
   179: }
   180: 
   181: static READ32_HANDLER(ps4_io32_r) /* used by loderndf/hotdebut */
   182: {
   183: 	return ((readinputport(0+4*offset) << 24) | (readinputport(1+4*offset) << 16) | (readinputport(2+4*offset) << 8) | (readinputport(3+4*offset) << 0));
   184: }
   185: 
   186: static WRITE32_HANDLER( ps4_paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w )
   187: {
   188: 	int r,g,b;
   189: 	COMBINE_DATA(&paletteram32[offset]);
   190: 
   191: 	b = ((paletteram32[offset] & 0x0000ff00) >>8);
   192: 	g = ((paletteram32[offset] & 0x00ff0000) >>16);
   193: 	r = ((paletteram32[offset] & 0xff000000) >>24);
   194: 
   195: 	palette_set_color(offset,r,g,b);
   196: 	palette_set_color(offset+0x800,r,g,b); // For screen 2
   197: }
   198: 
   199: static WRITE32_HANDLER( ps4_bgpen_1_dword_w )
   200: {
   201: 	int r,g,b;
   202: 	COMBINE_DATA(&bgpen_1[0]);
   203: 
   204: 	b = ((bgpen_1[0] & 0x0000ff00) >>8);
   205: 	g = ((bgpen_1[0] & 0x00ff0000) >>16);
   206: 	r = ((bgpen_1[0] & 0xff000000) >>24);
   207: 
   208: 	palette_set_color(0x1000,r,g,b); // Clear colour for screen 1
   209: }
   210: 
   211: static WRITE32_HANDLER( ps4_bgpen_2_dword_w )
   212: {
   213: 	int r,g,b;
   214: 	COMBINE_DATA(&bgpen_2[0]);
   215: 
   216: 	b = ((bgpen_2[0] & 0x0000ff00) >>8);
   217: 	g = ((bgpen_2[0] & 0x00ff0000) >>16);
   218: 	r = ((bgpen_2[0] & 0xff000000) >>24);
   219: 
   220: 	palette_set_color(0x1001,r,g,b); // Clear colour for screen 2
   221: }
   222: 
   223: static WRITE32_HANDLER( ps4_screen1_brt_w )
   224: {
   225: 	if(ACCESSING_LSB32) {
   226: 		/* Need seperate brightness for both screens if displaying together */
   227: 		double brt1 = data & 0xff;
   228: 		static double oldbrt1;
   229: 
   230: 		if (brt1>0x7f) brt1 = 0x7f; /* I reckon values must be clamped to 0x7f */
   231: 
   232: 		brt1 = (0x7f - brt1) / 127.0;
   233: 		if (oldbrt1 != brt1)
   234: 		{
   235: 			int i;
   236: 
   237: 			for (i = 0; i < 0x800; i++)
   238: 				palette_set_brightness(i,brt1);
   239: 
   240: 			oldbrt1 = brt1;
   241: 		}
   242: 	} else {
   243: 		/* I believe this to be seperate rgb brightness due to strings in hotdebut, unused in 4 dumped games */
   244: 		if((data & ~mem_mask) != 0)
   245: 			logerror("Unk Scr 1 rgb? brt write %08x mask %08x\n", data, mem_mask);
   246: 	}
   247: }
   248: 
   249: static WRITE32_HANDLER( ps4_screen2_brt_w )
   250: {
   251: 	if(ACCESSING_LSB32) {
   252: 		/* Need seperate brightness for both screens if displaying together */
   253: 		double brt2 = data & 0xff;
   254: 		static double oldbrt2;
   255: 
   256: 		if (brt2>0x7f) brt2 = 0x7f; /* I reckon values must be clamped to 0x7f */
   257: 
   258: 		brt2 = (0x7f - brt2) / 127.0;
   259: 
   260: 		if (oldbrt2 != brt2)
   261: 		{
   262: 			int i;
   263: 
   264: 			for (i = 0x800; i < 0x1000; i++)
   265: 				palette_set_brightness(i,brt2);
   266: 
   267: 			oldbrt2 = brt2;
   268: 		}
   269: 	} else {
   270: 		/* I believe this to be seperate rgb brightness due to strings in hotdebut, unused in 4 dumped games */
   271: 		if((data & ~mem_mask) != 0)
   272: 			logerror("Unk Scr 2 rgb? brt write %08x mask %08x\n", data, mem_mask);
   273: 	}
   274: }
   275: 
   276: static WRITE32_HANDLER( ps4_vidregs_w )
   277: {
   278: 	COMBINE_DATA(&psikyo4_vidregs[offset]);
   279: 
   280: #if ROMTEST 
   281: 	if(offset==2) /* Configure bank for gfx test */
   282: 	{
   283: 		if (!(mem_mask & 0x000000ff) || !(mem_mask & 0x0000ff00))	// Bank
   284: 		{
   285: 			unsigned char *ROM = memory_region(REGION_GFX1);
   286: 			cpu_setbank(2,&ROM[0x2000 * (psikyo4_vidregs[offset]&0xfff)]); /* Bank comes from vidregs */
   287: 		}
   288: 	}
   289: #endif 
   290: }
   291: 
   292: #if ROMTEST 
   293: static UINT32 sample_offs = 0;
   294: 
   295: static READ32_HANDLER( ps4_sample_r ) /* Send sample data for test */
   296: {
   297: 	unsigned char *ROM = memory_region(REGION_SOUND1);
   298: 
   299: 	return ROM[sample_offs++]<<16;
   300: }
   301: #endif 
   302: 
   303: static READ32_HANDLER( psh_ymf_fm_r )
   304: {
   305: 	return YMF278B_status_port_0_r(0)<<24; /* Also, bit 0 being high indicates not ready to send sample data for test */
   306: }
   307: 
   308: static WRITE32_HANDLER( psh_ymf_fm_w )
   309: {
   310: 	if (!(mem_mask & 0xff000000))	// FM bank 1 address (OPL2/OPL3 compatible)
   311: 	{
   312: 		YMF278B_control_port_0_A_w(0, data>>24);
   313: 	}
   314: 
   315: 	if (!(mem_mask & 0x00ff0000))	// FM bank 1 data
   316: 	{
   317: 		YMF278B_data_port_0_A_w(0, data>>16);
   318: 	}
   319: 
   320: 	if (!(mem_mask & 0x0000ff00))	// FM bank 2 address (OPL3/YMF 262 extended)
   321: 	{
   322: 		YMF278B_control_port_0_B_w(0, data>>8);
   323: 	}
   324: 
   325: 	if (!(mem_mask & 0x000000ff))	// FM bank 2 data
   326: 	{
   327: 		YMF278B_data_port_0_B_w(0, data);
   328: 	}
   329: }
   330: 
   331: static WRITE32_HANDLER( psh_ymf_pcm_w )
   332: {
   333: 	if (!(mem_mask & 0xff000000))	// PCM address (OPL4/YMF 278B extended)
   334: 	{
   335: 		YMF278B_control_port_0_C_w(0, data>>24);
   336: 
   337: #if ROMTEST 
   338: 		if (data>>24 == 0x06)	// Reset Sample reading (They always write this code immediately before reading data)
   339: 		{
   340: 			sample_offs = 0;
   341: 		}
   342: #endif 
   343: 	}
   344: 
   345: 	if (!(mem_mask & 0x00ff0000))	// PCM data
   346: 	{
   347: 		YMF278B_data_port_0_C_w(0, data>>16);
   348: 	}
   349: }
   350: 
   351: static MEMORY_READ32_START( ps4_readmem )
   352: 	{ 0x00000000, 0x000fffff, MRA32_ROM },	// program ROM (1 meg)
   353: 	{ 0x02000000, 0x021fffff, MRA32_BANK1 }, // data ROM
   354: 	{ 0x03000000, 0x030037ff, MRA32_RAM },
   355: 	{ 0x03003fe0, 0x03003fe3, ps4_eeprom_r },
   356: 	{ 0x03003fe4, 0x03003fe7, MRA32_NOP }, // also writes to this address - might be vblank?
   357: //	{ 0x03003fe8, 0x03003fef, MRA32_RAM }, // vid regs?
   358: 	{ 0x03004000, 0x03005fff, MRA32_RAM },
   359: 	{ 0x05000000, 0x05000003, psh_ymf_fm_r }, // read YMF status
   360: 	{ 0x05800000, 0x05800007, ps4_io32_r }, // Screen 1+2's Controls
   361: 	{ 0x06000000, 0x060fffff, MRA32_RAM },	// main RAM (1 meg)
   362: 
   363: #if ROMTEST 
   364: 	{ 0x05000004, 0x05000007, ps4_sample_r }, // data for rom tests (Used to verify Sample rom)
   365: 	{ 0x03006000, 0x03007fff, MRA32_BANK2 }, // data for rom tests (gfx), data is controlled by vidreg
   366: #endif 
   367: MEMORY_END
   368: 
   369: static MEMORY_WRITE32_START( ps4_writemem )
   370: 	{ 0x00000000, 0x000fffff, MWA32_ROM },	// program ROM (1 meg)
   371: 	{ 0x03000000, 0x030037ff, MWA32_RAM, &spriteram32, &spriteram_size },
   372: 	{ 0x03003fe0, 0x03003fe3, ps4_eeprom_w },
   373: //	{ 0x03003fe4, 0x03003fe7, MWA32_NOP }, // might be vblank?
   374: 	{ 0x03003fe4, 0x03003fef, ps4_vidregs_w, &psikyo4_vidregs }, // vid regs?
   375: 	{ 0x03003ff0, 0x03003ff3, ps4_screen1_brt_w }, // screen 1 brightness
   376: 	{ 0x03003ff4, 0x03003ff7, ps4_bgpen_1_dword_w, &bgpen_1 }, // screen 1 clear colour
   377: 	{ 0x03003ff8, 0x03003ffb, ps4_screen2_brt_w }, // screen 2 brightness
   378: 	{ 0x03003ffc, 0x03003fff, ps4_bgpen_2_dword_w, &bgpen_2 }, // screen 2 clear colour
   379: 	{ 0x03004000, 0x03005fff, ps4_paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w, &paletteram32 }, // palette
   380: 	{ 0x05000000, 0x05000003, psh_ymf_fm_w }, // first 2 OPL4 register banks
   381: 	{ 0x05000004, 0x05000007, psh_ymf_pcm_w }, // third OPL4 register bank
   382: 	{ 0x05800008, 0x0580000b, MWA32_RAM, &ps4_io_select }, // Used by Mahjong games to choose input (also maps normal loderndf inputs to offsets)
   383: 	{ 0x06000000, 0x060fffff, MWA32_RAM, &ps4_ram },	// work RAM
   384: MEMORY_END
   385: 
   386: static void irqhandler(int linestate)
   387: {
   388: 	if (linestate)
   389: 		cpu_set_irq_line(0, 12, ASSERT_LINE);
   390: 	else
   391: 		cpu_set_irq_line(0, 12, CLEAR_LINE);
   392: }
   393: 
   394: static struct YMF278B_interface ymf278b_interface =
   395: {
   396: 	1,
   397: 	{ MASTER_CLOCK/2 },
   398: 	{ REGION_SOUND1 },
   399: 	{ YM3012_VOL(100, MIXER_PAN_CENTER, 100, MIXER_PAN_CENTER) },
   400: 	{ irqhandler }
   401: };
   402: 
   403: static MACHINE_DRIVER_START( ps4big )
   404: 	/* basic machine hardware */
   405: 	MDRV_CPU_ADD_TAG("main", SH2, MASTER_CLOCK/2)
   406: 	MDRV_CPU_MEMORY(ps4_readmem,ps4_writemem)
   407: 	MDRV_CPU_VBLANK_INT(psikyosh_interrupt,1)
   408: 
   409: 	MDRV_FRAMES_PER_SECOND(60)
   410: 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
   411: 
   412: 	MDRV_NVRAM_HANDLER(93C56)
   413: 
   414: 	/* video hardware */
   415: 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN | VIDEO_DUAL_MONITOR)
   416: #if DUAL_SCREEN 
   417: 	MDRV_ASPECT_RATIO(8,3)
   418: 	MDRV_SCREEN_SIZE(80*8, 32*8)
   419: 	MDRV_VISIBLE_AREA(0, 80*8-1, 0, 28*8-1)
   420: #else 
   421: 	MDRV_ASPECT_RATIO(4,3)
   422: 	MDRV_SCREEN_SIZE(64*8, 32*8)
   423: 	MDRV_VISIBLE_AREA(0, 40*8-1, 0, 28*8-1)
   424: #endif 
   425: 
   426: 	MDRV_GFXDECODE(gfxdecodeinfops4)
   427: 	MDRV_PALETTE_LENGTH((0x2000/4)*2 + 2) /* 0x2000/4 for each screen. 1 for each screen clear colour */
   428: 
   429: 	MDRV_VIDEO_START(psikyo4)
   430: 	MDRV_VIDEO_UPDATE(psikyo4)
   431: 
   432: 	/* sound hardware */
   433: 	MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
   434: 	MDRV_SOUND_ADD(YMF278B, ymf278b_interface)
   435: MACHINE_DRIVER_END
   436: 
   437: static MACHINE_DRIVER_START( ps4small )
   438: 	/* basic machine hardware */
   439: 	MDRV_IMPORT_FROM(ps4big)
   440: 
   441: #if DUAL_SCREEN 
   442: 	MDRV_VISIBLE_AREA(0, 80*8-1, 0, 30*8-1)
   443: #else 
   444: 	MDRV_VISIBLE_AREA(0, 40*8-1, 0, 30*8-1)
   445: #endif 
   446: MACHINE_DRIVER_END
   447: 
   448: 
   449: 
   450: #define UNUSED_PORT \ 
   451: 	PORT_START	/* not read? */ \
   452: 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
   453: 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
   454: 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
   455: 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
   456: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
   457: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
   458: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
   459: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   460: 
   461: INPUT_PORTS_START( hotgmck )
   462: 	PORT_START	/* IN0 fake player 1 controls 1st bank */
   463: 	PORT_BITX( 0x01, IP_ACTIVE_LOW, 0, "P1 A",     KEYCODE_A,        IP_JOY_NONE )
   464: 	PORT_BITX( 0x02, IP_ACTIVE_LOW, 0, "P1 E",     KEYCODE_E,        IP_JOY_NONE )
   465: 	PORT_BITX( 0x04, IP_ACTIVE_LOW, 0, "P1 I",     KEYCODE_I,        IP_JOY_NONE )
   466: 	PORT_BITX( 0x08, IP_ACTIVE_LOW, 0, "P1 M",     KEYCODE_M,        IP_JOY_NONE )
   467: 	PORT_BITX( 0x10, IP_ACTIVE_LOW, 0, "P1 Kan",   KEYCODE_LCONTROL, IP_JOY_NONE )
   468: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_START1 )
   469: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   470: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   471: 
   472: 	PORT_START	/* IN1 fake player 1 controls 2nd bank */
   473: 	PORT_BITX( 0x01, IP_ACTIVE_LOW, 0, "P1 B",     KEYCODE_B,        IP_JOY_NONE )
   474: 	PORT_BITX( 0x02, IP_ACTIVE_LOW, 0, "P1 F",     KEYCODE_F,        IP_JOY_NONE )
   475: 	PORT_BITX( 0x04, IP_ACTIVE_LOW, 0, "P1 J",     KEYCODE_J,        IP_JOY_NONE )
   476: 	PORT_BITX( 0x08, IP_ACTIVE_LOW, 0, "P1 N",     KEYCODE_N,        IP_JOY_NONE )
   477: 	PORT_BITX( 0x10, IP_ACTIVE_LOW, 0, "P1 Reach", KEYCODE_LSHIFT,   IP_JOY_NONE )
   478: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   479: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   480: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   481: 
   482: 	PORT_START	/* IN2 fake player 1 controls 3rd bank */
   483: 	PORT_BITX( 0x01, IP_ACTIVE_LOW, 0, "P1 C",     KEYCODE_C,        IP_JOY_NONE )
   484: 	PORT_BITX( 0x02, IP_ACTIVE_LOW, 0, "P1 G",     KEYCODE_G,        IP_JOY_NONE )
   485: 	PORT_BITX( 0x04, IP_ACTIVE_LOW, 0, "P1 K",     KEYCODE_K,        IP_JOY_NONE )
   486: 	PORT_BITX( 0x08, IP_ACTIVE_LOW, 0, "P1 Chi",   KEYCODE_SPACE,    IP_JOY_NONE )
   487: 	PORT_BITX( 0x10, IP_ACTIVE_LOW, 0, "P1 Ron",   KEYCODE_Z,        IP_JOY_NONE )
   488: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   489: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   490: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   491: 
   492: 	PORT_START	/* IN3 fake player 1 controls 4th bank */
   493: 	PORT_BITX( 0x01, IP_ACTIVE_LOW, 0, "P1 D",     KEYCODE_D,        IP_JOY_NONE )
   494: 	PORT_BITX( 0x02, IP_ACTIVE_LOW, 0, "P1 H",     KEYCODE_H,        IP_JOY_NONE )
   495: 	PORT_BITX( 0x04, IP_ACTIVE_LOW, 0, "P1 L",     KEYCODE_L,        IP_JOY_NONE )
   496: 	PORT_BITX( 0x08, IP_ACTIVE_LOW, 0, "P1 Pon",   KEYCODE_LALT,     IP_JOY_NONE )
   497: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
   498: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   499: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   500: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   501: 
   502: 	PORT_START	/* IN4 fake player 2 controls 1st bank */
   503: 	PORT_BITX( 0x01, IP_ACTIVE_LOW, 0, "P2 A",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   504: 	PORT_BITX( 0x02, IP_ACTIVE_LOW, 0, "P2 E",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   505: 	PORT_BITX( 0x04, IP_ACTIVE_LOW, 0, "P2 I",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   506: 	PORT_BITX( 0x08, IP_ACTIVE_LOW, 0, "P2 M",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   507: 	PORT_BITX( 0x10, IP_ACTIVE_LOW, 0, "P2 Kan",   IP_KEY_DEFAULT,   IP_JOY_NONE )
   508: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_START2 )
   509: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   510: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   511: 
   512: 	PORT_START	/* IN5 fake player 2 controls 2nd bank */
   513: 	PORT_BITX( 0x01, IP_ACTIVE_LOW, 0, "P2 B",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   514: 	PORT_BITX( 0x02, IP_ACTIVE_LOW, 0, "P2 F",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   515: 	PORT_BITX( 0x04, IP_ACTIVE_LOW, 0, "P2 J",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   516: 	PORT_BITX( 0x08, IP_ACTIVE_LOW, 0, "P2 N",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   517: 	PORT_BITX( 0x10, IP_ACTIVE_LOW, 0, "P2 Reach", IP_KEY_DEFAULT,   IP_JOY_NONE )
   518: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   519: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   520: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   521: 
   522: 	PORT_START	/* IN6 fake player 2 controls 3rd bank */
   523: 	PORT_BITX( 0x01, IP_ACTIVE_LOW, 0, "P2 C",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   524: 	PORT_BITX( 0x02, IP_ACTIVE_LOW, 0, "P2 G",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   525: 	PORT_BITX( 0x04, IP_ACTIVE_LOW, 0, "P2 K",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   526: 	PORT_BITX( 0x08, IP_ACTIVE_LOW, 0, "P2 Chi",   IP_KEY_DEFAULT,   IP_JOY_NONE )
   527: 	PORT_BITX( 0x10, IP_ACTIVE_LOW, 0, "P2 Ron",   IP_KEY_DEFAULT,   IP_JOY_NONE )
   528: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   529: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   530: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   531: 
   532: 	PORT_START	/* IN7 fake player 2 controls 4th bank */
   533: 	PORT_BITX( 0x01, IP_ACTIVE_LOW, 0, "P2 D",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   534: 	PORT_BITX( 0x02, IP_ACTIVE_LOW, 0, "P2 H",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   535: 	PORT_BITX( 0x04, IP_ACTIVE_LOW, 0, "P2 L",     IP_KEY_DEFAULT,   IP_JOY_NONE )
   536: 	PORT_BITX( 0x08, IP_ACTIVE_LOW, 0, "P2 Pon",   IP_KEY_DEFAULT,   IP_JOY_NONE )
   537: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
   538: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
   539: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
   540: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   541: 
   542: 	PORT_START /* IN8 system inputs */
   543: 	PORT_BIT(  0x01, IP_ACTIVE_LOW,  IPT_COIN1    ) // Screen 1
   544: 	PORT_BIT(  0x02, IP_ACTIVE_LOW,  IPT_UNKNOWN  )
   545: 	PORT_BIT(  0x04, IP_ACTIVE_LOW,  IPT_COIN2    ) // Screen 2
   546: 	PORT_BIT(  0x08, IP_ACTIVE_LOW,  IPT_UNKNOWN  )
   547: 	PORT_BIT(  0x10, IP_ACTIVE_LOW,  IPT_SERVICE1 ) // Screen 1
   548: 	PORT_BITX( 0x20, IP_ACTIVE_LOW,  IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
   549: #if ROMTEST 
   550: 	PORT_DIPNAME( 0x40, 0x40, "Debug" ) /* Unknown effects */
   551: 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
   552: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   553: #else 
   554: 	PORT_BIT(  0x40, IP_ACTIVE_LOW,  IPT_UNKNOWN )
   555: #endif 
   556: 	PORT_BIT(  0x80, IP_ACTIVE_LOW,  IPT_SERVICE2 ) // Screen 2
   557: 
   558: #if !DUAL_SCREEN 
   559: 	PORT_START /* IN9 fake port for screen switching */
   560: 	PORT_BITX(  0x01, IP_ACTIVE_HIGH, IPT_BUTTON2, "Select PL1 Screen", KEYCODE_MINUS, IP_JOY_NONE )
   561: 	PORT_BITX(  0x02, IP_ACTIVE_HIGH, IPT_BUTTON2, "Select PL2 Screen", KEYCODE_EQUALS, IP_JOY_NONE )
   562: 	PORT_BIT(   0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
   563: #endif 
   564: INPUT_PORTS_END
   565: 
   566: INPUT_PORTS_START( loderndf )
   567: 	PORT_START	/* IN0 player 1 controls */
   568: 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER1 )
   569: 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER1 )
   570: 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER1 )
   571: 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
   572: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER1 )
   573: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER1 )
   574: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_BUTTON3        | IPF_PLAYER1 ) // Can be used as Retry button
   575: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START1 )
   576: 
   577: 	PORT_START	/* IN1 player 2 controls */
   578: 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER2 )
   579: 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER2 )
   580: 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER2 )
   581: 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
   582: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER2 )
   583: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER2 )
   584: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_BUTTON3        | IPF_PLAYER2 ) // Can be used as Retry button
   585: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START2 )
   586: 
   587: 	UNUSED_PORT /* IN2 unused? */
   588: 
   589: 	PORT_START /* IN3 system inputs */
   590: 	PORT_BIT(  0x01, IP_ACTIVE_LOW,  IPT_COIN1    ) // Screen 1
   591: 	PORT_BIT(  0x02, IP_ACTIVE_LOW,  IPT_COIN2    ) // Screen 1 - 2nd slot
   592: 	PORT_BIT(  0x04, IP_ACTIVE_LOW,  IPT_COIN3    ) // Screen 2
   593: 	PORT_BIT(  0x08, IP_ACTIVE_LOW,  IPT_COIN4    ) // Screen 2 - 2nd slot
   594: 	PORT_BIT(  0x10, IP_ACTIVE_LOW,  IPT_SERVICE1 ) // Screen 1
   595: 	PORT_BITX( 0x20, IP_ACTIVE_LOW,  IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
   596: #if ROMTEST 
   597: 	PORT_DIPNAME( 0x40, 0x40, "Debug" ) /* Must be high for rom test, unknown other side-effects */
   598: 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
   599: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   600: #else 
   601: 	PORT_BIT(  0x40, IP_ACTIVE_LOW,  IPT_UNKNOWN )
   602: #endif 
   603: 	PORT_BIT(  0x80, IP_ACTIVE_LOW,  IPT_SERVICE2 ) // Screen 2
   604: 
   605: 	PORT_START	/* IN4 player 1 controls on second screen */
   606: 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER3 )
   607: 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER3 )
   608: 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER3 )
   609: 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER3 )
   610: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER3 )
   611: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER3 )
   612: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_BUTTON3        | IPF_PLAYER3 ) // Can be used as Retry button
   613: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START3 )
   614: 
   615: 	PORT_START	/* IN5 player 2 controls on second screen */
   616: 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_PLAYER4 )
   617: 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_PLAYER4 )
   618: 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_PLAYER4 )
   619: 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER4 )
   620: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON1        | IPF_PLAYER4 )
   621: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON2        | IPF_PLAYER4 )
   622: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_BUTTON3        | IPF_PLAYER4 ) // Can be used as Retry button
   623: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START4 )
   624: 
   625: 	UNUSED_PORT /* IN6 unused? */
   626: 
   627: 	UNUSED_PORT /* IN7 unused? */
   628: 
   629: #if !DUAL_SCREEN 
   630: 	UNUSED_PORT /* IN8 dummy, to pad below to IN9 */
   631: 	PORT_START /* IN9 fake port for screen switching */
   632: 	PORT_BITX(  0x01, IP_ACTIVE_HIGH, IPT_BUTTON2, "Select PL1+PL2 Screen", KEYCODE_MINUS, IP_JOY_NONE )
   633: 	PORT_BITX(  0x02, IP_ACTIVE_HIGH, IPT_BUTTON2, "Select PL3+PL4 Screen", KEYCODE_EQUALS, IP_JOY_NONE )
   634: 	PORT_BIT(   0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
   635: #endif 
   636: INPUT_PORTS_END
   637: 
   638: /* unused inputs also act as duplicate buttons */
   639: INPUT_PORTS_START( hotdebut )
   640: 	PORT_START	/* IN0 player 1 controls */
   641: 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
   642: 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
   643: 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
   644: 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER1 )
   645: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_UNUSED )
   646: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNUSED )
   647: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNUSED )
   648: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START1 )
   649: 
   650: 	PORT_START	/* IN1 player 2 controls */
   651: 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
   652: 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
   653: 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
   654: 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER2 )
   655: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_UNUSED )
   656: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNUSED )
   657: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNUSED )
   658: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START2 )
   659: 
   660: 	UNUSED_PORT /* IN2 unused? */
   661: 
   662: 	PORT_START /* IN3 system inputs */
   663: 	PORT_BIT( 0x01, IP_ACTIVE_LOW,  IPT_COIN1    ) // Screen 1
   664: 	PORT_BIT( 0x02, IP_ACTIVE_LOW,  IPT_COIN2    ) // Screen 1 - 2nd slot
   665: 	PORT_BIT( 0x04, IP_ACTIVE_LOW,  IPT_COIN3    ) // Screen 2
   666: 	PORT_BIT( 0x08, IP_ACTIVE_LOW,  IPT_COIN4    ) // Screen 2 - 2nd slot
   667: 	PORT_BIT( 0x10, IP_ACTIVE_LOW,  IPT_SERVICE1 ) // Screen 1
   668: 	PORT_BITX(0x20, IP_ACTIVE_LOW,  IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
   669: #if ROMTEST 
   670: 	PORT_DIPNAME( 0x40, 0x40, "Debug" ) /* Must be high for rom test, unknown other side-effects */
   671: 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
   672: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   673: #else 
   674: 	PORT_BIT( 0x40, IP_ACTIVE_LOW,  IPT_UNKNOWN )
   675: #endif 
   676: 	PORT_BIT( 0x80, IP_ACTIVE_LOW,  IPT_SERVICE2 ) // Screen 2
   677: 
   678: 	PORT_START	/* IN4 player 1 controls on second screen */
   679: 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )
   680: 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )
   681: 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER3 )
   682: 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER3 )
   683: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_UNUSED )
   684: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNUSED )
   685: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNUSED )
   686: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START3 )
   687: 
   688: 	PORT_START	/* IN5 player 2 controls on second screen */
   689: 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER4 )
   690: 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER4 )
   691: 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER4 )
   692: 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER4 )
   693: 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_UNUSED )
   694: 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_UNUSED )
   695: 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_UNUSED )
   696: 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START4 )
   697: 
   698: 	UNUSED_PORT /* IN6 unused? */
   699: 
   700: 	UNUSED_PORT /* IN7 unused? */
   701: 
   702: #if !DUAL_SCREEN 
   703: 	UNUSED_PORT /* IN8 dummy, to pad below to IN9 */
   704: 	PORT_START /* IN9 fake port for screen switching */
   705: 	PORT_BITX(  0x01, IP_ACTIVE_HIGH, IPT_BUTTON2, "Select PL1+PL2 Screen", KEYCODE_MINUS, IP_JOY_NONE )
   706: 	PORT_BITX(  0x02, IP_ACTIVE_HIGH, IPT_BUTTON2, "Select PL3+PL4 Screen", KEYCODE_EQUALS, IP_JOY_NONE )
   707: 	PORT_BIT(   0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
   708: #endif 
   709: INPUT_PORTS_END
   710: 
   711: #if ROMTEST 
   712: #define ROMTEST_GFX 0 
   713: #else 
   714: #define ROMTEST_GFX ROMREGION_DISPOSE 
   715: #endif 
   716: 
   717: ROM_START( hotgmck )
   718: 	/* main program */
   719: 	ROM_REGION( 0x300000, REGION_CPU1, 0)
   720: 	ROM_LOAD32_WORD_SWAP( "2-u23.bin", 0x000002, 0x080000, CRC(23ed4aa5) SHA1(bb4f57a6adffc6336fc572a4ff1f5dfc284ee4fb) )
   721: 	ROM_LOAD32_WORD_SWAP( "1-u22.bin", 0x000000, 0x080000, CRC(5db3649f) SHA1(6ea7bd18bcf6224ed9b0480bb59c684f13b71d8a) )
   722: 	ROM_LOAD16_WORD_SWAP( "prog.bin",  0x100000, 0x200000, CRC(500f6b1b) SHA1(4ce454e44da08e351a81ca4b670ff3e080dcb330) )
   723: 
   724: 	ROM_REGION( 0x2000000, REGION_GFX1, ROMTEST_GFX )
   725: 	ROM_LOAD32_WORD( "0l.bin", 0x0000000, 0x400000, CRC(91f9ba60) SHA1(968de0cd275784cf082df172b7f205861a8fbae4) )
   726: 	ROM_LOAD32_WORD( "0h.bin", 0x0000002, 0x400000, CRC(bfa800b7) SHA1(8e4a026f20b7ba035eb78713d64bfcb611c90640) )
   727: 	ROM_LOAD32_WORD( "1l.bin", 0x0800000, 0x400000, CRC(4b670809) SHA1(c0fe45d7618653b089ec293e7661da682b77534d) )
   728: 	ROM_LOAD32_WORD( "1h.bin", 0x0800002, 0x400000, CRC(ab513a4d) SHA1(4d589545765f55aaddb05f484fbf6248af3e237b) )
   729: 	ROM_LOAD32_WORD( "2l.bin", 0x1000000, 0x400000, CRC(1a7d51e9) SHA1(0722d89865cc2c9acda899bacb2787481c16c01a) )
   730: 	ROM_LOAD32_WORD( "2h.bin", 0x1000002, 0x400000, CRC(bf866222) SHA1(c70f4b0ff3997bf94a89cd613a2877f062014393) )
   731: 	ROM_LOAD32_WORD( "3l.bin", 0x1800000, 0x400000, CRC(a8a646f7) SHA1(be96626f3a4c8eb81f0bb7d8ac1c4e6619be50c8) )
   732: 	ROM_LOAD32_WORD( "3h.bin", 0x1800002, 0x400000, CRC(8c32becd) SHA1(9a8ddda4c6c007bb5cd4abb11859a4b7f1b1d578) )
   733: 
   734: 	ROM_REGION( 0x800000, REGION_SOUND1, 0 )
   735: 	ROM_LOAD( "snd0.bin", 0x000000, 0x400000, CRC(c090d51a) SHA1(d229753b536209fe0da1985ca694fd1a73bc0f39) )
   736: 	ROM_LOAD( "snd1.bin", 0x400000, 0x400000, CRC(c24243b5) SHA1(2100d5d7d2e4b9ed90bde38cb61a5da09f00ce21) )
   737: ROM_END
   738: 
   739: ROM_START( hgkairak )
   740: 	ROM_REGION( 0x300000, REGION_CPU1, 0)
   741: 	ROM_LOAD32_WORD_SWAP( "2.u23",   0x000002, 0x080000, CRC(1c1a034d) SHA1(1be7793b1f9a0a738519b4b4f663b247011870db) )
   742: 	ROM_LOAD32_WORD_SWAP( "1.u22",   0x000000, 0x080000, CRC(24b04aa2) SHA1(b63d02fc15f03b93a74f5549fad236939905e382) )
   743: 	ROM_LOAD16_WORD_SWAP( "prog.u1", 0x100000, 0x100000, CRC(83cff542) SHA1(0ea5717e0b9e6c27aaf61f7e4909ed9a353b4d3b) )
   744: 
   745: 	ROM_REGION( 0x3000000, REGION_GFX1, ROMTEST_GFX )	/* Sprites */
   746: 	ROM_LOAD32_WORD( "0l.u2",  0x0000000, 0x400000, CRC(f7472212) SHA1(6f6c1a75615f6a1df4d9bc97225b8e1422eb114a) )
   747: 	ROM_LOAD32_WORD( "0h.u11", 0x0000002, 0x400000, CRC(30019d0f) SHA1(1b6690ead9941171086afc89d95292c40348a15b) )
   748: 	ROM_LOAD32_WORD( "1l.u3",  0x0800000, 0x400000, CRC(f46d5002) SHA1(0ce47b1c6da1a8ec3fd341d903d6a3e0447529e2) )
   749: 	ROM_LOAD32_WORD( "1h.u12", 0x0800002, 0x400000, CRC(210592b6) SHA1(d98c3df589f5a707043979ede44c397705c13d11) )
   750: 	ROM_LOAD32_WORD( "2l.u4",  0x1000000, 0x400000, CRC(b98adf21) SHA1(592b609f665a8a6af169611d6dbe7580df22e0c8) )
   751: 	ROM_LOAD32_WORD( "2h.u13", 0x1000002, 0x400000, CRC(8e3da1e1) SHA1(9001d7484ad85d1febf9c1b925445246dfd66419) )
   752: 	ROM_LOAD32_WORD( "3l.u5",  0x1800000, 0x400000, CRC(fa7ba4ed) SHA1(cfe7651a48549a15f3fa81c744cf9204cd4f6f9a) )
   753: 	ROM_LOAD32_WORD( "3h.u14", 0x1800002, 0x400000, CRC(a5d400ea) SHA1(a550b30fa854bab11389a81fb73479bec0f4a5ff) )
   754: 	ROM_LOAD32_WORD( "4l.u6",  0x2000000, 0x400000, CRC(76c10026) SHA1(9cb2f29d123065d62a42743307db3f949432e2d5) )
   755: 	ROM_LOAD32_WORD( "4h.u15", 0x2000002, 0x400000, CRC(799f0889) SHA1(8495a15a2b2bd5d7324264b388f3b7e5a7d36cd6) )
   756: 	ROM_LOAD32_WORD( "5l.u7",  0x2800000, 0x400000, CRC(4639ef36) SHA1(324ffcfa1b1b9def00c15f628c59cea1d09b031d) )
   757: 	ROM_LOAD32_WORD( "5h.u16", 0x2800002, 0x400000, CRC(549e9e9e) SHA1(90c1695c89c059852f8b4f714b3dfee006839b44) )
   758: 
   759: 	ROM_REGION( 0x800000, REGION_SOUND1, 0 )
   760: 	ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(0e8e5fdf) SHA1(041e3118f7a838dcc9fb99a1028fb48a452ba1d9) )
   761: 	ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(d8057d2f) SHA1(51d96cc4e9da81cbd1e815c652707407e6c7c3ae) )
   762: ROM_END
   763: 
   764: ROM_START( hotgmck3 )
   765: 	/* main program */
   766: 	ROM_REGION( 0x300000, REGION_CPU1, 0)
   767: 	ROM_LOAD32_WORD_SWAP( "2.u22",   0x000000, 0x080000, CRC(3b06a4a3) SHA1(7363c2867367ca92a20fcb5ee1a5f1afbd785c63) )
   768: 	ROM_LOAD32_WORD_SWAP( "1.u23",   0x000002, 0x080000, CRC(7aad6b24) SHA1(160dfac94002766709369aad66d3b1b11d35ee63) )
   769: 	ROM_LOAD16_WORD_SWAP( "prog.u1", 0x100000, 0x100000, CRC(316c3356) SHA1(4664465c3f88d655379235881f1142a7954c80fc) )
   770: 
   771: 	ROM_REGION( 0x4000000, REGION_GFX1, ROMTEST_GFX )	/* Sprites */
   772: 	ROM_LOAD32_WORD( "0l.u2",  0x0000000, 0x400000, CRC(d4bbd035) SHA1(525739eafa4574541b217707514b256af588a996) )
   773: 	ROM_LOAD32_WORD( "0h.u11", 0x0000002, 0x400000, CRC(e8832b0b) SHA1(aa13c264964b1c48094a303b18407a7873c60267) )
   774: 	ROM_LOAD32_WORD( "1l.u3",  0x0800000, 0x400000, CRC(08426cb2) SHA1(a66463a93580fa7b730df7d0b72176daf6d0a6f2) )
   775: 	ROM_LOAD32_WORD( "1h.u12", 0x0800002, 0x400000, CRC(112c6eea) SHA1(45d00427cec4f8ba98dc2f5b1e0d13d0f7ef56d1) )
   776: 	ROM_LOAD32_WORD( "2l.u4",  0x1000000, 0x400000, CRC(0f197cd4) SHA1(ea1f20260470a5bee1076c3c243d7f57aabdaaba) )
   777: 	ROM_LOAD32_WORD( "2h.u13", 0x1000002, 0x400000, CRC(fc37808c) SHA1(c35c666aad123ea1a37a5b4d6d51e55204c18e02) )
   778: 	ROM_LOAD32_WORD( "3l.u5",  0x1800000, 0x400000, CRC(c4d094dc) SHA1(bce585e41c9892be84a9fbdbb6d0f6b9baecaccf) )
   779: 	ROM_LOAD32_WORD( "3h.u14", 0x1800002, 0x400000, CRC(ef0dad0a) SHA1(f98032a8b7c3e17b52761ba98e46bdc5e0fa032a) )
   780: 	ROM_LOAD32_WORD( "4l.u6",  0x2000000, 0x400000, CRC(5186790f) SHA1(e2e2beb0dee856ec089c6a380442b4a1f40901d9) )
   781: 	ROM_LOAD32_WORD( "4h.u15", 0x2000002, 0x400000, CRC(187a6f43) SHA1(eedcc58ba59ffb0ccd7925edeb4532f8de357ec1) )
   782: 	ROM_LOAD32_WORD( "5l.u7",  0x2800000, 0x400000, CRC(ecf151f3) SHA1(56277c5d675e579e2148961aadc06019a64f3367) )
   783: 	ROM_LOAD32_WORD( "5h.u16", 0x2800002, 0x400000, CRC(720bf4ec) SHA1(214fb544ddc229485ae2a5ec34f95af9fa423a80) )
   784: 	ROM_LOAD32_WORD( "6l.u8",  0x3000000, 0x400000, CRC(e490404d) SHA1(dc3429ed248e7954c27eb6f29b392a35131592ba) )
   785: 	ROM_LOAD32_WORD( "6h.u17", 0x3000002, 0x400000, CRC(7e8a141a) SHA1(3f53e422a3ad2f2a02d17b2368b2d455c614bc04) )
   786: 	ROM_LOAD32_WORD( "7l.u9",  0x3800000, 0x400000, CRC(2ec78fb2) SHA1(194e9833ab7057c2f83c581e722b41631d99fccc) )
   787: 	ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x400000, CRC(c1735612) SHA1(84e32d3249d57cdc8ea91780801eaa196c439895) )
   788: 
   789: 	ROM_REGION( 0x800000, REGION_SOUND1, 0 )
   790: 	ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(d62a0dba) SHA1(d81e2e1251b62eca8cd4d8eec2515b2cf7d7ff0a) )
   791: 	ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(1df91fb4) SHA1(f0f2d2d717fbd16a67da9f0e21f288ceedef839f) )
   792: ROM_END
   793: 
   794: ROM_START( loderndf )
   795: 	ROM_REGION( 0x100000, REGION_CPU1, 0)
   796: 	ROM_LOAD32_WORD_SWAP( "1b.u23", 0x000002, 0x080000, CRC(fae92286) SHA1(c3d3a50514fb9c0bbd3ffb5c4bfcc853dc1893d2) )
   797: 	ROM_LOAD32_WORD_SWAP( "2b.u22", 0x000000, 0x080000, CRC(fe2424c0) SHA1(48a329cfdf98da1a8701b430c159d470c0f5eca1) )
   798: 
   799: 	ROM_REGION( 0x2000000, REGION_GFX1, ROMTEST_GFX )
   800: 	ROM_LOAD32_WORD( "0l.u2",  0x0000000, 0x800000, CRC(ccae855d) SHA1(1fc44e2a9d2ce2bca0a57e96140fbc80a0943141) )
   801: 	ROM_LOAD32_WORD( "0h.u11", 0x0000002, 0x800000, CRC(7a146c59) SHA1(e4b30b5a826b8772d144d503e591d1d32783c016) )
   802: 	ROM_LOAD32_WORD( "1l.u3",  0x1000000, 0x800000, CRC(7a9cd21e) SHA1(dfb36625c2aae3e774ec2451051b7038e0767b6d) )
   803: 	ROM_LOAD32_WORD( "1h.u12", 0x1000002, 0x800000, CRC(78f40d0d) SHA1(243acb73a183a41a3e35a2c746ad31dd6fcd3ef4) )
   804: 
   805: 	ROM_REGION( 0x800000, REGION_SOUND1, 0 )
   806: 	ROM_LOAD( "snd0.u10", 0x000000, 0x800000, CRC(2da3788f) SHA1(199d4d750a107cbdf8c16cd5b097171743769d9c) ) // Fails hidden rom test
   807: ROM_END
   808: 
   809: ROM_START( loderdfa )
   810: 	ROM_REGION( 0x100000, REGION_CPU1, 0)
   811: 	ROM_LOAD32_WORD_SWAP( "12.u23", 0x000002, 0x080000, CRC(661d372e) SHA1(c509c3ad9ca01e0f58bfc319b2738ecc36865ffd) )
   812: 	ROM_LOAD32_WORD_SWAP( "3.u22", 0x000000, 0x080000, CRC(0a63529f) SHA1(05dd7877041b69d46e41c5bddb877c083620294b) )
   813: 
   814: 	ROM_REGION( 0x2000000, REGION_GFX1, ROMTEST_GFX )
   815: 	ROM_LOAD32_WORD( "0l.u2",  0x0000000, 0x800000, CRC(ccae855d) SHA1(1fc44e2a9d2ce2bca0a57e96140fbc80a0943141) )
   816: 	ROM_LOAD32_WORD( "0h.u11", 0x0000002, 0x800000, CRC(7a146c59) SHA1(e4b30b5a826b8772d144d503e591d1d32783c016) )
   817: 	ROM_LOAD32_WORD( "1l.u3",  0x1000000, 0x800000, CRC(7a9cd21e) SHA1(dfb36625c2aae3e774ec2451051b7038e0767b6d) )
   818: 	ROM_LOAD32_WORD( "1h.u12", 0x1000002, 0x800000, CRC(78f40d0d) SHA1(243acb73a183a41a3e35a2c746ad31dd6fcd3ef4) )
   819: 
   820: 	ROM_REGION( 0x800000, REGION_SOUND1, 0 )
   821: 	ROM_LOAD( "snd0.u10", 0x000000, 0x800000, CRC(2da3788f) SHA1(199d4d750a107cbdf8c16cd5b097171743769d9c) ) // Fails hidden rom test
   822: ROM_END
   823: 
   824: ROM_START( hotdebut )
   825: 	ROM_REGION( 0x100000, REGION_CPU1, 0)
   826: 	ROM_LOAD32_WORD_SWAP( "1.u23",   0x000002, 0x080000, CRC(0b0d0027) SHA1(f62c487a725439af035d2904d453d3c2f7a5649b) )
   827: 	ROM_LOAD32_WORD_SWAP( "2.u22",   0x000000, 0x080000, CRC(c3b5180b) SHA1(615cc1fd99a1e4634b04bb92a3c41f914644e903) )
   828: 
   829: 	ROM_REGION( 0x1800000, REGION_GFX1, ROMTEST_GFX )	/* Sprites */
   830: 	ROM_LOAD32_WORD( "0l.u2",  0x0000000, 0x400000, CRC(15da9983) SHA1(a96dd048080b5bb5ce903b5f72b3c24e89e1bee3) )
   831: 	ROM_LOAD32_WORD( "0h.u11", 0x0000002, 0x400000, CRC(76d7b73f) SHA1(0682d4155ad61cab958d55b85914c69120d7d6fc) )
   832: 	ROM_LOAD32_WORD( "1l.u3",  0x0800000, 0x400000, CRC(76ea3498) SHA1(ab2fb4008cf1e2b48a81306386cdc463b3bb4783) )
   833: 	ROM_LOAD32_WORD( "1h.u12", 0x0800002, 0x400000, CRC(a056859f) SHA1(5821cbb263059a32c5b599da666fb59929d6326a) )
   834: 	ROM_LOAD32_WORD( "2l.u4",  0x1000000, 0x400000, CRC(9d2d1bb1) SHA1(33b41aa50be3040871b6dc6faee0bd99c5e46cd3) )
   835: 	ROM_LOAD32_WORD( "2h.u13", 0x1000002, 0x400000, CRC(a7753c4d) SHA1(adb33de478064cc9255d1bb5c63acc5d8bfbb8eb) )
   836: 
   837: 	ROM_REGION( 0x400000, REGION_SOUND1, 0 )
   838: 	ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(eef28aa7) SHA1(d10d3f62a2e4c2a8e5fccece9c272f8ead50e5ed) )
   839: ROM_END
   840: 
   841: /* are these right? should i fake the counter return?
   842:    'speedups / idle skipping isn't needed for 'hotgmck, hgkairak'
   843:    as the core catches and skips the idle loops automatically'
   844: */
   845: 
   846: static READ32_HANDLER( loderndf_speedup_r )
   847: {
   848: /*
   849: PC  :00001B3C: MOV.L   @R14,R3  R14 = 0x6000020
   850: PC  :00001B3E: ADD     #$01,R3
   851: PC  :00001B40: MOV.L   R3,@R14
   852: PC  :00001B42: MOV.L   @($54,PC),R1
   853: PC  :00001B44: MOV.L   @R1,R2
   854: PC  :00001B46: TST     R2,R2
   855: PC  :00001B48: BT      $00001B3C
   856: */
   857: 
   858: 	if (activecpu_get_pc()==0x00001B3E) cpu_spinuntil_int();
   859: 	return ps4_ram[0x000020/4];
   860: }
   861: 
   862: static READ32_HANDLER( loderdfa_speedup_r )
   863: {
   864: /*
   865: PC  :00001B48: MOV.L   @R14,R3  R14 = 0x6000020
   866: PC  :00001B4A: ADD     #$01,R3
   867: PC  :00001B4C: MOV.L   R3,@R14
   868: PC  :00001B4E: MOV.L   @($54,PC),R1
   869: PC  :00001B50: MOV.L   @R1,R2
   870: PC  :00001B52: TST     R2,R2
   871: PC  :00001B54: BT      $00001B48
   872: */
   873: 
   874: 	if (activecpu_get_pc()==0x00001B4A) cpu_spinuntil_int();
   875: 	return ps4_ram[0x000020/4];
   876: }
   877: 
   878: static READ32_HANDLER( hotdebut_speedup_r )
   879: {
   880: /*
   881: PC  :000029EC: MOV.L   @R14,R2
   882: PC  :000029EE: ADD     #$01,R2
   883: PC  :000029F0: MOV.L   R2,@R14
   884: PC  :000029F2: MOV.L   @($64,PC),R1
   885: PC  :000029F4: MOV.L   @R1,R3
   886: PC  :000029F6: TST     R3,R3
   887: PC  :000029F8: BT      $000029EC
   888: */
   889: 
   890: 	if (activecpu_get_pc()==0x000029EE) cpu_spinuntil_int();
   891: 	return ps4_ram[0x00001c/4];
   892: }
   893: 
   894: static DRIVER_INIT( hotgmck )
   895: {
   896: 	unsigned char *RAM = memory_region(REGION_CPU1);
   897: 	cpu_setbank(1,&RAM[0x100000]);
   898: 	install_mem_read32_handler (0, 0x5800000, 0x5800007, hotgmck_io32_r ); // Different Inputs
   899: }
   900: 
   901: static DRIVER_INIT( loderndf )
   902: {
   903: 	install_mem_read32_handler(0, 0x6000020, 0x6000023, loderndf_speedup_r );
   904: }
   905: 
   906: static DRIVER_INIT( loderdfa )
   907: {
   908: 	install_mem_read32_handler(0, 0x6000020, 0x6000023, loderdfa_speedup_r );
   909: }
   910: 
   911: static DRIVER_INIT( hotdebut )
   912: {
   913: 	install_mem_read32_handler(0, 0x600001c, 0x600001f, hotdebut_speedup_r );
   914: }
   915: 
   916: 
   917: /*     YEAR  NAME      PARENT    MACHINE    INPUT     INIT      MONITOR COMPANY   FULLNAME FLAGS */
   918: 
   919: GAMEX( 1997, hotgmck,  0,        ps4big,    hotgmck,  hotgmck,  ROT0,   "Psikyo", "Taisen Hot Gimmick (Japan)", GAME_IMPERFECT_SOUND )
   920: GAMEX( 1998, hgkairak, 0,        ps4big,    hotgmck,  hotgmck,  ROT0,   "Psikyo", "Taisen Hot Gimmick Kairakuten (Japan)", GAME_IMPERFECT_SOUND )
   921: GAMEX( 1999, hotgmck3, 0,        ps4big,    hotgmck,  hotgmck,  ROT0,   "Psikyo", "Taisen Hot Gimmick 3 Digital Surfing (Japan)", GAME_IMPERFECT_SOUND )
   922: GAME ( 2000, loderndf, 0,        ps4small,  loderndf, loderndf, ROT0,   "Psikyo", "Lode Runner - The Dig Fight (ver. B) (Japan)" )
   923: GAME ( 2000, loderdfa, loderndf, ps4small,  loderndf, loderdfa, ROT0,   "Psikyo", "Lode Runner - The Dig Fight (ver. A) (Japan)" )
   924: GAME ( 2000, hotdebut, 0,        ps4small,  hotdebut, hotdebut, ROT0,   "Psikyo / Moss", "Quiz de Idol! Hot Debut (Japan)" )
   925: 




powered by ggdb.com this page took approx. 0.015s