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 : ASO II: Last Guardian : VM Driver Source

Source Listing


     1: /*
     2: 	Hal21
     3: 	ASO
     4: 	Alpha Mission ('p3.6d' is a bad dump)
     5: 
     6: 
     7: Change Log
     8: ----------
     9: 
    10: AT08XX03:
    11: 
    12: [Common]
    13:  - cleaned and consolidated VIDEO_UPDATE()
    14:  - added shadows and highlights
    15: 
    16:  * A.S.O and HAL21 do a lot of palette cycling therefore
    17:    conversion to tilemaps may be disadvantageous.
    18:    Cocktail mode involves changing tile offsets and sprite
    19:    coordinates and is still unsupported.
    20: 
    21:  * Manuals show both boards have noise filters to smooth out
    22:    rings and scratches which are especially audible in HAL21.
    23: 
    24: [HAL21]
    25:  - installed NMI scheduler to prevent music trashing
    26: 
    27: [ASO]
    28:  - fixed music and sound effects being cut short
    29:  - fixed service mode(hold P1 start during ROM test)
    30:  - improved scrolling and color
    31: 
    32:  * Stage 5 boss' sky and the first half of stage 6's background
    33:    appear to have consistent color as shown in Beep! magazine:
    34: 
    35:      http://qtq.hp.infoseek.co.jp/kouryaku/aso/aso2.jpg
    36:      http://qtq.hp.infoseek.co.jp/kouryaku/aso/aso3.png
    37: 
    38:    Compared to MAME these areas are blacked out under pens
    39:    0xf0-0xff. On the other hand pens 0x170-0x17f suit them
    40:    perfectly but they are never used in the first two loops.
    41:    (I played through the game and logged pen usage. Only four
    42:    color codes have blue pen15 so it's not difficult to tell.)
    43: 
    44:    There are unknown bits embedded in RGB triplets and the whole
    45:    upper half of the palette is simply unused. The fact that ASO's
    46:    color PROMs are identical in every set dismissed bad dumps but
    47:    increased the likelyhood of proprietary logic which is quite
    48:    obvious in Touchdown Fever and HAL21.
    49: 
    50: [TODO]
    51:  - find out what "really" messes up ASO's scrolling
    52:  - verify color effects in both games
    53: */
    54: 
    55: #include "driver.h" 
    56: #include "vidhrdw/generic.h" 
    57: #include "cpu/z80/z80.h" 
    58: #include "snk.h" 
    59: 
    60: static UINT8 *shared_ram, *shared_auxram;
    61: static UINT8 *hal21_vreg, *hal21_sndfifo;
    62: 
    63: /**************************************************************************/
    64: // Test Handlers
    65: 
    66: static WRITE_HANDLER( aso_scroll_sync_w )
    67: {
    68: 	if (data == 0x7f && shared_auxram[0x04d2] & 1) data++;
    69: 
    70: 	shared_auxram[0x04f8] = data;
    71: }
    72: 
    73: static void hal21_sound_scheduler(int mode, int data)
    74: {
    75: 	static int busy, hold, ffcount, ffhead, fftail;
    76: 
    77: 	switch (mode)
    78: 	{
    79: 		case 0: // init
    80: 			fftail = ffhead = ffcount = hold = busy = 0;
    81: 		return;
    82: 
    83: 		case 1: // cut-through or capture
    84: 			if (data & ~0x1f) busy = 1; else
    85: 			if (data && busy)
    86: 			{
    87: 				if (ffcount < 16)
    88: 				{
    89: 					ffcount++;
    90: 					hal21_sndfifo[ffhead] = data;
    91: 					ffhead = (ffhead + 1) & 15;
    92: 				}
    93: 				return;
    94: 			}
    95: 		break;
    96: 
    97: 		case 2: // acknowledge
    98: 			if (busy) { busy = 0; hold = 4; }
    99: 		return;
   100: 
   101: 		case 3: // release
   102: 			if (!busy)
   103: 			{
   104: 				if (hold) hold--; else
   105: 				if (ffcount)
   106: 				{
   107: 					ffcount--;
   108: 					data = hal21_sndfifo[fftail];
   109: 					fftail = (fftail + 1) & 15;
   110: 					break;
   111: 				}
   112: 			}
   113: 		return;
   114: 	}
   115: 
   116: 	snk_sound_busy_bit = 0x20;
   117: 	soundlatch_w(0, data);
   118: 	cpu_set_nmi_line(2, PULSE_LINE);
   119: }
   120: 
   121: /**************************************************************************/
   122: 
   123: static READ_HANDLER( hal21_videoram_r ){ return videoram[offset]; }
   124: static WRITE_HANDLER( hal21_videoram_w ){ videoram[offset] = data; }
   125: static READ_HANDLER( hal21_spriteram_r ){ return spriteram[offset]; }
   126: static WRITE_HANDLER( hal21_spriteram_w ){ spriteram[offset] = data; }
   127: 
   128: static WRITE_HANDLER( hal21_vreg0_w ){ hal21_vreg[0] = data; }
   129: static WRITE_HANDLER( hal21_vreg1_w ){ hal21_vreg[1] = data; }
   130: static WRITE_HANDLER( hal21_vreg2_w ){ hal21_vreg[2] = data; }
   131: static WRITE_HANDLER( hal21_vreg3_w ){ hal21_vreg[3] = data; }
   132: static WRITE_HANDLER( hal21_vreg4_w ){ hal21_vreg[4] = data; }
   133: static WRITE_HANDLER( hal21_vreg5_w ){ hal21_vreg[5] = data; }
   134: static WRITE_HANDLER( hal21_vreg6_w ){ hal21_vreg[6] = data; }
   135: static WRITE_HANDLER( hal21_vreg7_w ){ hal21_vreg[7] = data; }
   136: 
   137: 
   138: PALETTE_INIT( aso )
   139: {
   140: 	int i;
   141: 	int num_colors = 1024;
   142: 
   143: 	/*
   144: 		palette format is RRRG GGBB B??? the three unknown bits are used but
   145: 		I'm not sure how, I'm currently using them as least significant bit but
   146: 		that's most likely wrong.
   147: 	*/
   148: 	for( i=0; i<num_colors; i++ )
   149: 	{
   150: 		int bit0=0,bit1,bit2,bit3,r,g,b;
   151: 
   152: 		bit0 = (color_prom[i + 2*num_colors] >> 2) & 0x01;
   153: 		bit1 = (color_prom[i] >> 1) & 0x01;
   154: 		bit2 = (color_prom[i] >> 2) & 0x01;
   155: 		bit3 = (color_prom[i] >> 3) & 0x01;
   156: 		r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
   157: 
   158: 		bit0 = (color_prom[i + 2*num_colors] >> 1) & 0x01;
   159: 		bit1 = (color_prom[i + num_colors] >> 2) & 0x01;
   160: 		bit2 = (color_prom[i + num_colors] >> 3) & 0x01;
   161: 		bit3 = (color_prom[i] >> 0) & 0x01;
   162: 		g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
   163: 
   164: 		bit0 = (color_prom[i + 2*num_colors] >> 0) & 0x01;
   165: 		bit1 = (color_prom[i + 2*num_colors] >> 3) & 0x01;
   166: 		bit2 = (color_prom[i + num_colors] >> 0) & 0x01;
   167: 		bit3 = (color_prom[i + num_colors] >> 1) & 0x01;
   168: 		b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
   169: 
   170: 		palette_set_color(i,r,g,b);
   171: 	}
   172: 
   173: 	/* prepare shadow draw table */
   174: 	for (i=0; i<=5; i++) gfx_drawmode_table[i] = DRAWMODE_SOURCE;
   175: 
   176: 	gfx_drawmode_table[6] = DRAWMODE_SHADOW;
   177: 	gfx_drawmode_table[7] = DRAWMODE_NONE;
   178: }
   179: 
   180: VIDEO_START( aso )
   181: {
   182: 	snk_blink_parity = 0;
   183: 
   184: 	return 0;
   185: }
   186: 
   187: 
   188: static void hal21_draw_background( struct mame_bitmap *bitmap, int scrollx, int scrolly, int attrs,
   189: 								const struct GfxElement *gfx )
   190: {
   191: 	static int color[2] = {8, 8};
   192: 	struct rectangle *cliprect;
   193: 	int bankbase, c, x, y, offsx, offsy, dx, dy, sx, sy, offs, tile_number;
   194: 
   195: 	cliprect = &Machine->visible_area;
   196: 	bankbase = attrs<<3 & 0x100;
   197: 	c = attrs & 0x0f;
   198: 	if (c > 11) { fillbitmap(bitmap,Machine->pens[(c<<4)+8], cliprect); return; }
   199: 	if (c<8 || color[0]<14 || bankbase)
   200: 	{
   201: 		c ^= 0x08;
   202: 		color[0] = c;
   203: 		color[1] = (c & 0x08) ? c : 8;
   204: 	}
   205: 
   206: 	offsx = ((scrollx>>3) + 0) & 0x3f;
   207: 	dx = -(scrollx & 7) + 0;
   208: 	offsy = ((scrolly>>3) + 0) & 0x3f;
   209: 	dy = -(scrolly & 7) + 0;
   210: 
   211: 	for (x=2; x<35; x++)
   212: 		for (y=0; y<28; y++)
   213: 		{
   214: 			offs = (((offsx+x)&0x3f)<<6) + ((offsy+y)&0x3f);
   215: 			sx = (x<<3) + dx;
   216: 			sy = (y<<3) + dy;
   217: 			tile_number = bankbase + videoram[offs];
   218: 			c = (tile_number & ~0x3f) ? color[0] : color[1];
   219: 
   220: 			drawgfx(bitmap, gfx,
   221: 				tile_number, c,
   222: 				0, 0,
   223: 				sx, sy,
   224: 				cliprect, TRANSPARENCY_NONE, 0);
   225: 		}
   226: }
   227: 
   228: static void hal21_draw_sprites( struct mame_bitmap *bitmap, int scrollx, int scrolly,
   229: 								const struct GfxElement *gfx )
   230: {
   231: 	struct rectangle *cliprect;
   232: 	UINT8 *sprptr, *endptr;
   233: 	int attrs, tile, x, y, color, fy;
   234: 
   235: 	cliprect = &Machine->visible_area;
   236: 	sprptr = spriteram;
   237: 	endptr = spriteram + 0x100;
   238: 
   239: 	for (; sprptr<endptr; sprptr+=4)
   240: 	{
   241: 		if (*(UINT32*)sprptr == 0 || *(UINT32*)sprptr == -1) continue;
   242: 
   243: 		attrs = sprptr[3];
   244: 		tile  = sprptr[1] + (attrs<<2 & 0x100);
   245: 		color = attrs & 0x0f;
   246: 		fy    = attrs & 0x20;
   247: 		y     = (sprptr[0] + (attrs<<4 & 0x100) - scrolly) & 0x1ff;
   248: 		x     = (0x100 - (sprptr[2] + (attrs<<1 & 0x100) - scrollx)) & 0x1ff;
   249: 		if (y > 512-16) y -= 512;
   250: 		if (x > 512-16) x -= 512;
   251: 
   252: 		drawgfx(bitmap, gfx,
   253: 				tile, color,
   254: 				0, fy,
   255: 				x, y,
   256: 				cliprect, TRANSPARENCY_PEN, 7);
   257: 	}
   258: }
   259: 
   260: static void aso_draw_background( struct mame_bitmap *bitmap, int scrollx, int scrolly, int attrs,
   261: 								const struct GfxElement *gfx )
   262: {
   263: 	struct rectangle *cliprect;
   264: 	int bankbase, c, x, y, offsx, offsy, dx, dy, sx, sy, offs, tile_number;
   265: 
   266: 	cliprect = &Machine->visible_area;
   267: 	bankbase = attrs<<4 & 0x300;
   268: 	c = attrs & 0x0f;
   269: 	if (c == 7) c = 15;
   270: 
   271: 	offsx = ((scrollx>>3) + 0) & 0x3f;
   272: 	dx = -(scrollx & 7) + 0;
   273: 	offsy = ((scrolly>>3) + 0) & 0x3f;
   274: 	dy = -(scrolly & 7) + 0;
   275: 
   276: 	for (x=2; x<35; x++)
   277: 		for (y=0; y<28; y++)
   278: 		{
   279: 			offs = (((offsx+x)&0x3f)<<6) + ((offsy+y)&0x3f);
   280: 			sx = (x<<3) + dx;
   281: 			sy = (y<<3) + dy;
   282: 			tile_number = bankbase + videoram[offs];
   283: 
   284: 			drawgfx(bitmap, gfx,
   285: 				tile_number, c,
   286: 				0, 0,
   287: 				sx, sy,
   288: 				cliprect, TRANSPARENCY_NONE, 0);
   289: 		}
   290: }
   291: 
   292: static void aso_draw_sprites( struct mame_bitmap *bitmap, int scrollx, int scrolly,
   293: 								const struct GfxElement *gfx )
   294: {
   295: 	struct rectangle *cliprect;
   296: 	UINT8 *sprptr, *endptr;
   297: 	int attrs, tile, x, y, color;
   298: 
   299: 	cliprect = &Machine->visible_area;
   300: 	sprptr = spriteram;
   301: 	endptr = spriteram + 0x100;
   302: 
   303: 	for (; sprptr<endptr; sprptr+=4)
   304: 	{
   305: 		if (*(UINT32*)sprptr == 0 || *(UINT32*)sprptr == -1) continue;
   306: 
   307: 		attrs = sprptr[3]; /* YBBX.CCCC */
   308: 		tile  = sprptr[1] + (attrs<<2 & 0x100) + (~attrs<<4 & 0x200);
   309: 		color = attrs & 0x0f;
   310: 		y     = (sprptr[0] + (attrs<<4 & 0x100) - scrolly) & 0x1ff;
   311: 		x     = (0x100 - (sprptr[2] + (attrs<<1 & 0x100) - scrollx)) & 0x1ff;
   312: 		if (y > 512-16) y -= 512;
   313: 		if (x > 512-16) x -= 512;
   314: 
   315: 		drawgfx(bitmap, gfx,
   316: 				tile, color,
   317: 				0, 0,
   318: 				x, y,
   319: 				cliprect, TRANSPARENCY_PEN_TABLE, 7);
   320: 	}
   321: }
   322: 
   323: VIDEO_UPDATE( aso )
   324: {
   325: 	UINT8 *ram = memory_region(REGION_CPU1);
   326: 	int attr, msbs, spsy, spsx, bgsy, bgsx, bank, i;
   327: 
   328: 	attr = (int)hal21_vreg[0];
   329: 	msbs = (int)hal21_vreg[1];
   330: 	spsy = (int)hal21_vreg[2] + (msbs<<5 & 0x100) + 9;
   331: 	spsx = (int)hal21_vreg[3] + (msbs<<8 & 0x100) + 30;
   332: 	bgsy = (int)hal21_vreg[4] + (msbs<<4 & 0x100) - 8;
   333: 	bgsx = (int)hal21_vreg[5] - 16;
   334: 
   335: 	if (snk_gamegroup)
   336: 	{
   337: 		hal21_draw_background(bitmap, bgsx+(msbs<<7 & 0x100), bgsy, attr, Machine->gfx[1]);
   338: 
   339: 		attr = snk_blink_parity;
   340: 		snk_blink_parity ^= 0xdf;
   341: 		for (i=6; i<0x80; i+=8) { palette_set_color(i, attr, attr, attr); }
   342: 
   343: 		hal21_draw_sprites(bitmap, spsx, spsy, Machine->gfx[2]);
   344: 	}
   345: 	else
   346: 	{
   347: 		aso_draw_background(bitmap, bgsx+(~msbs<<7 & 0x100), bgsy, attr, Machine->gfx[1]);
   348: 		aso_draw_sprites(bitmap, spsx, spsy, Machine->gfx[2]);
   349: 	}
   350: 
   351: 	bank = msbs>>6 & 1;
   352: 	tnk3_draw_text(bitmap, bank, &ram[0xf800]);
   353: 	tnk3_draw_status(bitmap, bank, &ram[0xfc00]);
   354: }
   355: 
   356: 
   357: INPUT_PORTS_START( hal21 )
   358: 	PORT_START
   359: 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
   360: 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
   361: 	PORT_BIT( 0x04, IP_ACTIVE_LOW,  IPT_SERVICE1 )
   362: 	PORT_BIT( 0x08, IP_ACTIVE_LOW,  IPT_START1 )
   363: 	PORT_BIT( 0x10, IP_ACTIVE_LOW,  IPT_START2 )
   364: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* sound CPU status */
   365: 	PORT_BIT( 0x40, IP_ACTIVE_LOW,  IPT_UNKNOWN )
   366: 	PORT_BIT( 0x80, IP_ACTIVE_LOW,  IPT_UNKNOWN )
   367: 
   368: 	PORT_START /* P1 controls */
   369: 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
   370: 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
   371: 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
   372: 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
   373: 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
   374: 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
   375: 	PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
   376: 
   377: 	PORT_START /* P2 controls */
   378: 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
   379: 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
   380: 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
   381: 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
   382: 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
   383: 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
   384: 	PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
   385: 
   386: 	PORT_START  /* DSW1 */
   387: 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unused ) )
   388: 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
   389: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   390: 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) )
   391: 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
   392: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   393: 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Lives ) )
   394: 	PORT_DIPSETTING(    0x04, "3" )
   395: 	PORT_DIPSETTING(    0x00, "5" )
   396: 	PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) )
   397: 	PORT_DIPSETTING(    0x20, DEF_STR( 3C_1C ) )
   398: 	PORT_DIPSETTING(    0x18, DEF_STR( 2C_1C ) )
   399: 	PORT_DIPSETTING(    0x38, DEF_STR( 1C_1C ) )
   400: 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_2C ) )
   401: 	PORT_DIPSETTING(    0x28, DEF_STR( 1C_3C ) )
   402: 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
   403: 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) )
   404: 	PORT_DIPSETTING(    0xc0, "20000 60000" )
   405: 	PORT_DIPSETTING(    0x80, "40000 90000" )
   406: 	PORT_DIPSETTING(    0x40, "50000 120000" )
   407: 	PORT_DIPSETTING(    0x00, "None" )
   408: 
   409: 	PORT_START  /* DSW2 */
   410: 	PORT_DIPNAME( 0x01, 0x01, "Bonus Type" )
   411: 	PORT_DIPSETTING(    0x01, "Every Bonus Set" )
   412: 	PORT_DIPSETTING(    0x00, "Second Bonus Set" )
   413: 	PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) )
   414: 	PORT_DIPSETTING(    0x06, "Easy" )
   415: 	PORT_DIPSETTING(    0x04, "2" )
   416: 	PORT_DIPSETTING(    0x02, "3" )
   417: 	PORT_DIPSETTING(    0x00, "4" )
   418: 	PORT_DIPNAME( 0x18, 0x18, "Special" )
   419: 	PORT_DIPSETTING(    0x18, "Normal" )
   420: 	PORT_DIPSETTING(    0x10, DEF_STR( Demo_Sounds) )
   421: 	PORT_DIPSETTING(    0x08, "Infinite Lives" )
   422: 	PORT_DIPSETTING(    0x00, "Freeze" )
   423: 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) // 0x20 -> fe65
   424: 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
   425: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   426: 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
   427: 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
   428: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   429: 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
   430: 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
   431: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   432: INPUT_PORTS_END
   433: 
   434: /**************************************************************************/
   435: 
   436: INPUT_PORTS_START( aso )
   437: 	PORT_START
   438: 	PORT_BIT( 0x01, IP_ACTIVE_LOW,  IPT_COIN2 )
   439: 	PORT_BIT( 0x02, IP_ACTIVE_LOW,  IPT_SERVICE1 )
   440: 	PORT_BIT( 0x04, IP_ACTIVE_LOW,  IPT_COIN1 )
   441: 	PORT_BIT( 0x08, IP_ACTIVE_LOW,  IPT_START1 )
   442: 	PORT_BIT( 0x10, IP_ACTIVE_LOW,  IPT_START2 )
   443: 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* sound CPU status */
   444: 	PORT_BIT( 0x40, IP_ACTIVE_LOW,  IPT_UNKNOWN )
   445: 	PORT_BIT( 0x80, IP_ACTIVE_LOW,  IPT_UNKNOWN )
   446: 
   447: 	PORT_START
   448: 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
   449: 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
   450: 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
   451: 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
   452: 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 )
   453: 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
   454: 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
   455: 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   456: 
   457: 	PORT_START
   458: 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
   459: 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
   460: 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
   461: 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
   462: 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
   463: 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
   464: 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
   465: 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
   466: 
   467: 	PORT_START
   468: 	PORT_DIPNAME( 0x01, 0x01, "Allow Continue" )
   469: 	PORT_DIPSETTING(    0x01, DEF_STR( No ) )
   470: 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
   471: 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) )
   472: 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
   473: 	PORT_DIPSETTING(    0x02, DEF_STR( Cocktail ) )
   474: 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Lives ) )
   475: 	PORT_DIPSETTING(    0x04, "3" )
   476: 	PORT_DIPSETTING(    0x00, "5" )
   477: 	PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) )
   478: 	PORT_DIPSETTING(    0x20, DEF_STR( 4C_1C) )
   479: 	PORT_DIPSETTING(    0x28, DEF_STR( 3C_1C) )
   480: 	PORT_DIPSETTING(    0x30, DEF_STR( 2C_1C) )
   481: 	PORT_DIPSETTING(    0x38, DEF_STR( 1C_1C) )
   482: 	PORT_DIPSETTING(    0x18, DEF_STR( 1C_2C) )
   483: 	PORT_DIPSETTING(    0x10, DEF_STR( 1C_3C) )
   484: 	PORT_DIPSETTING(    0x08, DEF_STR( 1C_4C) )
   485: 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C) )
   486: 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) )
   487: 	PORT_DIPSETTING(    0xc0, "50k 100k" )
   488: 	PORT_DIPSETTING(    0x80, "60k 120k" )
   489: 	PORT_DIPSETTING(    0x40, "100k 200k" )
   490: 	PORT_DIPSETTING(    0x00, "None" )
   491: 
   492: 	PORT_START
   493: 	PORT_DIPNAME( 0x01, 0x01, "Bonus Occurrence" )
   494: 	PORT_DIPSETTING(    0x01, "1st & every 2nd" )
   495: 	PORT_DIPSETTING(    0x00, "1st & 2nd only" )
   496: 	PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) )
   497: 	PORT_DIPSETTING(    0x06, "Easy" )
   498: 	PORT_DIPSETTING(    0x04, "Normal" )
   499: 	PORT_DIPSETTING(    0x02, "Hard" )
   500: 	PORT_DIPSETTING(    0x00, "Hardest" )
   501: 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) )
   502: 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
   503: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   504: 	PORT_BITX( 0x10,    0x10, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Cheat of some kind", IP_KEY_NONE, IP_JOY_NONE )
   505: 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
   506: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   507: 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) )
   508: 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
   509: 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
   510: 	PORT_DIPNAME( 0xc0, 0xc0, "Start Area" )
   511: 	PORT_DIPSETTING(    0xc0, "1" )
   512: 	PORT_DIPSETTING(    0x80, "2" )
   513: 	PORT_DIPSETTING(    0x40, "3" )
   514: 	PORT_DIPSETTING(    0x00, "4" )
   515: INPUT_PORTS_END
   516: 
   517: 
   518: /**************************************************************************/
   519: 
   520: static struct GfxLayout char256 = {
   521: 	8,8,
   522: 	0x100,
   523: 	4,
   524: 	{ 0, 1, 2, 3 },
   525: 	{ 4, 0, 12, 8, 20, 16, 28, 24},
   526: 	{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
   527: 	256
   528: };
   529: 
   530: static struct GfxLayout char1024 = {
   531: 	8,8,
   532: 	0x400,
   533: 	4,
   534: 	{ 0, 1, 2, 3 },
   535: 	{ 4, 0, 12, 8, 20, 16, 28, 24},
   536: 	{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
   537: 	256
   538: };
   539: 
   540: static struct GfxLayout sprite1024 = {
   541: 	16,16,
   542: 	0x400,
   543: 	3,
   544: 	{ 2*1024*256,1*1024*256,0*1024*256 },
   545: 	{
   546: 		7,6,5,4,3,2,1,0,
   547: 		15,14,13,12,11,10,9,8
   548: 	},
   549: 	{
   550: 		0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
   551: 		8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16
   552: 	},
   553: 	256
   554: };
   555: 
   556: static struct GfxDecodeInfo aso_gfxdecodeinfo[] =
   557: {
   558: 	/* colors 512-1023 are currently unused, I think they are a second bank */
   559: 	{ REGION_GFX1, 0, &char256,    128*3,  8 }, /* colors 384..511 */
   560: 	{ REGION_GFX2, 0, &char1024,   128*1, 16 }, /* colors 128..383 */
   561: 	{ REGION_GFX3, 0, &sprite1024, 128*0, 16 }, /* colors   0..127 */
   562: 	{ -1 }
   563: };
   564: 
   565: /**************************************************************************/
   566: 
   567: static READ_HANDLER( shared_auxram_r ) { return shared_auxram[offset]; }
   568: static WRITE_HANDLER( shared_auxram_w ) { shared_auxram[offset] = data; }
   569: 
   570: static READ_HANDLER( shared_ram_r ) { return shared_ram[offset]; }
   571: static WRITE_HANDLER( shared_ram_w ) { shared_ram[offset] = data; }
   572: 
   573: static READ_HANDLER( CPUC_ready_r ) { snk_sound_busy_bit = 0; return 0; }
   574: 
   575: static READ_HANDLER( hal21_input_port_0_r ) { return input_port_0_r(0) | snk_sound_busy_bit; }
   576: 
   577: static WRITE_HANDLER( hal21_soundcommand_w ) { hal21_sound_scheduler(1, data); }
   578: static WRITE_HANDLER( hal21_soundack_w ) { hal21_sound_scheduler(2, data); }
   579: 
   580: static READ_HANDLER( hal21_soundcommand_r )
   581: {
   582: 	int data = soundlatch_r(0);
   583: 	soundlatch_clear_w(0, 0);
   584: 	return data;
   585: }
   586: 
   587: static WRITE_HANDLER( aso_soundcommand_w )
   588: {
   589: 	snk_sound_busy_bit = 0x20;
   590: 	soundlatch_w(0, data);
   591: 	cpu_set_irq_line( 2, 0, HOLD_LINE );
   592: }
   593: 
   594: static INTERRUPT_GEN( hal21_sound_interrupt )
   595: {
   596: 	hal21_sound_scheduler(3, 0);
   597: }
   598: 
   599: /**************************************************************************/
   600: 
   601: static struct YM3526interface ym3526_interface ={
   602: 	1,          /* number of chips */
   603: 	4000000,    /* 4 MHz? (hand tuned) */
   604: 	{ 100 }
   605: };
   606: 
   607: static MEMORY_READ_START( aso_readmem_sound )
   608: 	{ 0x0000, 0xbfff, MRA_ROM },
   609: 	{ 0xc000, 0xc7ff, MRA_RAM },
   610: 	{ 0xd000, 0xd000, hal21_soundcommand_r },
   611: 	{ 0xe000, 0xe000, CPUC_ready_r },
   612: 	{ 0xf000, 0xf000, YM3526_status_port_0_r },
   613: 	{ 0xf002, 0xf002, MRA_NOP }, // unknown read
   614: 	{ 0xf004, 0xf004, MRA_NOP }, // unknown read
   615: 	{ 0xf006, 0xf006, MRA_NOP }, // unknown read
   616: MEMORY_END
   617: 
   618: static MEMORY_WRITE_START( aso_writemem_sound )
   619: 	{ 0x0000, 0xbfff, MWA_ROM },
   620: 	{ 0xc000, 0xc7ff, MWA_RAM },
   621: 	{ 0xf000, 0xf000, YM3526_control_port_0_w }, /* YM3526 #1 control port? */
   622: 	{ 0xf001, 0xf001, YM3526_write_port_0_w },   /* YM3526 #1 write port?  */
   623: MEMORY_END
   624: 
   625: /**************************************************************************/
   626: 
   627: static struct AY8910interface ay8910_interface = {
   628: 	2, /* number of chips */
   629: 	1500000, // hand tuned
   630: 	{ 25,40 },
   631: 	{ 0 },
   632: 	{ 0 },
   633: 	{ 0 },
   634: 	{ 0 }
   635: };
   636: 
   637: static MEMORY_READ_START( hal21_readmem_sound )
   638: 	{ 0x0000, 0x3fff, MRA_ROM },
   639: 	{ 0x8000, 0x87ff, MRA_RAM },
   640: 	{ 0xa000, 0xa000, hal21_soundcommand_r },
   641: 	{ 0xc000, 0xc000, CPUC_ready_r },
   642: MEMORY_END
   643: 
   644: static MEMORY_WRITE_START( hal21_writemem_sound )
   645: 	{ 0x0000, 0x3fff, MWA_ROM },
   646: 	{ 0x8000, 0x87ff, MWA_RAM },
   647: 	{ 0xe000, 0xe000, AY8910_control_port_0_w },
   648: 	{ 0xe001, 0xe001, AY8910_write_port_0_w },
   649: 	{ 0xe002, 0xe002, hal21_soundack_w }, // bitfielded(0-5) acknowledge write, details unknown
   650: 	{ 0xe008, 0xe008, AY8910_control_port_1_w },
   651: 	{ 0xe009, 0xe009, AY8910_write_port_1_w },
   652: MEMORY_END
   653: 
   654: static PORT_READ_START( hal21_readport_sound )
   655: 	{ 0x0000, 0x0000, MRA_NOP }, // external sound ROM detection?
   656: PORT_END
   657: 
   658: static PORT_WRITE_START( hal21_writeport_sound )
   659: 	{ 0x0000, 0x0000, MWA_NOP }, // external sound ROM switch?
   660: PORT_END
   661: 
   662: /**************************** ASO/Alpha Mission *************************/
   663: 
   664: static MEMORY_READ_START( aso_readmem_cpuA )
   665: 	{ 0x0000, 0xbfff, MRA_ROM },
   666: 	{ 0xc000, 0xc000, hal21_input_port_0_r }, /* coin, start */
   667: 	{ 0xc100, 0xc100, input_port_1_r }, /* P1 */
   668: 	{ 0xc200, 0xc200, input_port_2_r }, /* P2 */
   669: 	{ 0xc500, 0xc500, input_port_3_r }, /* DSW1 */
   670: 	{ 0xc600, 0xc600, input_port_4_r }, /* DSW2 */
   671: 	{ 0xc700, 0xc700, snk_cpuB_nmi_trigger_r },
   672: 	{ 0xd800, 0xffff, MRA_RAM },
   673: MEMORY_END
   674: 
   675: static MEMORY_WRITE_START( aso_writemem_cpuA )
   676: 	{ 0x0000, 0xbfff, MWA_ROM },
   677: 	{ 0xc400, 0xc400, aso_soundcommand_w },
   678: 	{ 0xc700, 0xc700, snk_cpuA_nmi_ack_w },
   679: 	{ 0xc800, 0xc800, hal21_vreg1_w },
   680: 	{ 0xc900, 0xc900, hal21_vreg2_w },
   681: 	{ 0xca00, 0xca00, hal21_vreg3_w },
   682: 	{ 0xcb00, 0xcb00, hal21_vreg4_w },
   683: 	{ 0xcc00, 0xcc00, hal21_vreg5_w },
   684: 	{ 0xcd00, 0xcd00, hal21_vreg6_w },
   685: 	{ 0xce00, 0xce00, hal21_vreg7_w },
   686: 	{ 0xcf00, 0xcf00, hal21_vreg0_w },
   687: 	{ 0xdcf8, 0xdcf8, aso_scroll_sync_w },
   688: 	{ 0xd800, 0xdfff, MWA_RAM, &shared_auxram },
   689: 	{ 0xe000, 0xe7ff, MWA_RAM, &spriteram },
   690: 	{ 0xe800, 0xf7ff, MWA_RAM, &videoram },
   691: 	{ 0xf800, 0xffff, MWA_RAM, &shared_ram },
   692: MEMORY_END
   693: 
   694: static MEMORY_READ_START( aso_readmem_cpuB )
   695: 	{ 0x0000, 0xbfff, MRA_ROM },
   696: 	{ 0xc000, 0xc000, snk_cpuA_nmi_trigger_r },
   697: 	{ 0xc800, 0xe7ff, shared_auxram_r },
   698: 	{ 0xe800, 0xf7ff, MRA_RAM },
   699: 	{ 0xf800, 0xffff, shared_ram_r },
   700: MEMORY_END
   701: 
   702: static MEMORY_WRITE_START( aso_writemem_cpuB )
   703: 	{ 0x0000, 0xbfff, MWA_ROM },
   704: 	{ 0xc000, 0xc000, snk_cpuB_nmi_ack_w },
   705: 	{ 0xc800, 0xd7ff, shared_auxram_w },
   706: 	{ 0xd800, 0xe7ff, hal21_videoram_w },
   707: 	{ 0xe800, 0xf7ff, MWA_RAM },
   708: 	{ 0xf800, 0xffff, shared_ram_w },
   709: MEMORY_END
   710: 
   711: /**************************** HAL21 *************************/
   712: 
   713: static MEMORY_READ_START( hal21_readmem_CPUA )
   714: 	{ 0x0000, 0x7fff, MRA_ROM },
   715: 	{ 0xc000, 0xc000, hal21_input_port_0_r }, /* coin, start */
   716: 	{ 0xc100, 0xc100, input_port_1_r }, /* P1 */
   717: 	{ 0xc200, 0xc200, input_port_2_r }, /* P2 */
   718: 	{ 0xc400, 0xc400, input_port_3_r }, /* DSW1 */
   719: 	{ 0xc500, 0xc500, input_port_4_r }, /* DSW2 */
   720: 	{ 0xc700, 0xc700, snk_cpuB_nmi_trigger_r },
   721: 	{ 0xe000, 0xefff, MRA_RAM },
   722: 	{ 0xf000, 0xffff, MRA_RAM },
   723: MEMORY_END
   724: 
   725: static MEMORY_WRITE_START( hal21_writemem_CPUA )
   726: 	{ 0x0000, 0x7fff, MWA_ROM },
   727: 	{ 0xc300, 0xc300, hal21_soundcommand_w },
   728: 	{ 0xc600, 0xc600, hal21_vreg0_w },
   729: 	{ 0xc700, 0xc700, snk_cpuA_nmi_ack_w },
   730: 	{ 0xd300, 0xd300, hal21_vreg1_w },
   731: 	{ 0xd400, 0xd400, hal21_vreg2_w },
   732: 	{ 0xd500, 0xd500, hal21_vreg3_w },
   733: 	{ 0xd600, 0xd600, hal21_vreg4_w },
   734: 	{ 0xd700, 0xd700, hal21_vreg5_w },
   735: 	{ 0xe000, 0xefff, MWA_RAM, &spriteram },
   736: 	{ 0xf000, 0xffff, MWA_RAM, &shared_ram },
   737: MEMORY_END
   738: 
   739: static MEMORY_READ_START( hal21_readmem_CPUB )
   740: 	{ 0x0000, 0x9fff, MRA_ROM },
   741: 	{ 0xc000, 0xcfff, hal21_spriteram_r },
   742: 	{ 0xd000, 0xdfff, MRA_RAM },
   743: 	{ 0xe000, 0xefff, shared_ram_r },
   744: MEMORY_END
   745: 
   746: static MEMORY_WRITE_START( hal21_writemem_CPUB )
   747: 	{ 0x0000, 0x9fff, MWA_ROM },
   748: 	{ 0xa000, 0xa000, snk_cpuB_nmi_ack_w },
   749: 	{ 0xc000, 0xcfff, hal21_spriteram_w },
   750: 	{ 0xd000, 0xdfff, MWA_RAM, &videoram },
   751: 	{ 0xe000, 0xefff, shared_ram_w },
   752: MEMORY_END
   753: 
   754: /**************************************************************************/
   755: 
   756: DRIVER_INIT( aso )
   757: {
   758: 	hal21_vreg = auto_malloc(16);
   759: 	snk_gamegroup = 0;
   760: }
   761: 
   762: DRIVER_INIT( hal21 )
   763: {
   764: 	hal21_vreg = auto_malloc(24);
   765: 	hal21_sndfifo = hal21_vreg + 8;
   766: 	snk_gamegroup = 1;
   767: }
   768: 
   769: MACHINE_INIT( aso )
   770: {
   771: 	memset(hal21_vreg, 0, 8);
   772: 	hal21_sound_scheduler(0, 0);
   773: 	snk_sound_busy_bit = 0;
   774: }
   775: 
   776: static MACHINE_DRIVER_START( aso )
   777: 
   778: 	/* basic machine hardware */
   779: 	MDRV_CPU_ADD(Z80, 4000000)
   780: 	MDRV_CPU_MEMORY(aso_readmem_cpuA,aso_writemem_cpuA)
   781: 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
   782: 
   783: 	MDRV_CPU_ADD(Z80, 4000000)
   784: 	MDRV_CPU_MEMORY(aso_readmem_cpuB,aso_writemem_cpuB)
   785: 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
   786: 
   787: 	MDRV_CPU_ADD(Z80, 4000000)
   788: 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
   789: 	MDRV_CPU_MEMORY(aso_readmem_sound,aso_writemem_sound)
   790: 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
   791: 
   792: 	MDRV_FRAMES_PER_SECOND(60)
   793: 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
   794: 	MDRV_INTERLEAVE(100)
   795: 
   796: 	/* video hardware */
   797: 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS)
   798: 	MDRV_SCREEN_SIZE(36*8, 28*8)
   799: 	MDRV_VISIBLE_AREA(0*8, 36*8-1, 1*8, 28*8-1)
   800: 	MDRV_GFXDECODE(aso_gfxdecodeinfo)
   801: 	MDRV_PALETTE_LENGTH(1024)
   802: 
   803: 	MDRV_MACHINE_INIT(aso)
   804: 
   805: 	MDRV_PALETTE_INIT(aso)
   806: 	MDRV_VIDEO_START(aso)
   807: 	MDRV_VIDEO_UPDATE(aso)
   808: 
   809: 	/* sound hardware */
   810: 	MDRV_SOUND_ADD(YM3526, ym3526_interface)
   811: MACHINE_DRIVER_END
   812: 
   813: static MACHINE_DRIVER_START( hal21 )
   814: 
   815: 	/* basic machine hardware */
   816: 	MDRV_CPU_ADD(Z80, 4000000)
   817: 	MDRV_CPU_MEMORY(hal21_readmem_CPUA,hal21_writemem_CPUA)
   818: 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
   819: 
   820: 	MDRV_CPU_ADD(Z80, 4000000)
   821: 	MDRV_CPU_MEMORY(hal21_readmem_CPUB,hal21_writemem_CPUB)
   822: 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
   823: 
   824: 	MDRV_CPU_ADD(Z80, 4000000)
   825: 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
   826: 	MDRV_CPU_MEMORY(hal21_readmem_sound,hal21_writemem_sound)
   827: 	MDRV_CPU_PORTS(hal21_readport_sound,hal21_writeport_sound)
   828: 	MDRV_CPU_VBLANK_INT(hal21_sound_interrupt,1)
   829: 	MDRV_CPU_PERIODIC_INT(irq0_line_hold,220) // music tempo, hand tuned
   830: 
   831: 	MDRV_FRAMES_PER_SECOND(60)
   832: 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
   833: 	MDRV_INTERLEAVE(100)
   834: 
   835: 	/* video hardware */
   836: 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_HIGHLIGHTS)
   837: 	MDRV_SCREEN_SIZE(36*8, 28*8)
   838: 	MDRV_VISIBLE_AREA(0*8, 36*8-1, 1*8, 28*8-1)
   839: 	MDRV_GFXDECODE(aso_gfxdecodeinfo)
   840: 	MDRV_PALETTE_LENGTH(1024)
   841: 
   842: 	MDRV_MACHINE_INIT(aso)
   843: 
   844: 	MDRV_PALETTE_INIT(aso)
   845: 	MDRV_VIDEO_START(aso)
   846: 	MDRV_VIDEO_UPDATE(aso)
   847: 
   848: 	/* sound hardware */
   849: 	MDRV_SOUND_ADD(AY8910, ay8910_interface)
   850: MACHINE_DRIVER_END
   851: 
   852: /**************************************************************************/
   853: 
   854: ROM_START( hal21 )
   855: 	ROM_REGION( 0x10000, REGION_CPU1, 0 )   /* 64k for CPUA code */
   856: 	ROM_LOAD( "hal21p1.bin",    0x0000, 0x2000, CRC(9d193830) SHA1(8e4e9c8bc774d7c7c0b68a5fa5cabdc6b5cfa41b) )
   857: 	ROM_LOAD( "hal21p2.bin",    0x2000, 0x2000, CRC(c1f00350) SHA1(8709455a980931565ccca60162a04c6c3133099b) )
   858: 	ROM_LOAD( "hal21p3.bin",    0x4000, 0x2000, CRC(881d22a6) SHA1(4b2a65dc18620f7f77532f791212fccfe1f0b245) )
   859: 	ROM_LOAD( "hal21p4.bin",    0x6000, 0x2000, CRC(ce692534) SHA1(e1d8e6948578ec9d0b6dc2aff17ad23b8ce46d6a) )
   860: 
   861: 	ROM_REGION( 0x10000, REGION_CPU2, 0 )   /* 64k for CPUB code */
   862: 	ROM_LOAD( "hal21p5.bin",    0x0000, 0x2000, CRC(3ce0684a) SHA1(5e76770a3252d5565a8f11a79ac3a9a6c31a43e2) )
   863: 	ROM_LOAD( "hal21p6.bin",    0x2000, 0x2000, CRC(878ef798) SHA1(0aae152947c9c6733b77dd1ac14f2f6d6bfabeaa) )
   864: 	ROM_LOAD( "hal21p7.bin",    0x4000, 0x2000, CRC(72ebbe95) SHA1(b1f7dc535e7670647500391d21dfa971d5e342a2) )
   865: 	ROM_LOAD( "hal21p8.bin",    0x6000, 0x2000, CRC(17e22ad3) SHA1(0e10a3c0f2e2ec284f4e0f1055397a8ccd1ff0f7) )
   866: 	ROM_LOAD( "hal21p9.bin",    0x8000, 0x2000, CRC(b146f891) SHA1(0b2db3e14b0401a7914002c6f7c26933a1cba162) )
   867: 
   868: 	ROM_REGION( 0x10000, REGION_CPU3, 0 )   /* 64k for sound code */
   869: 	ROM_LOAD( "hal21p10.bin",   0x0000, 0x4000, CRC(916f7ba0) SHA1(7b8bcd59d768c4cd226de96895d3b9755bb3ba79) )
   870: 
   871: 	ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE )
   872: 	ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) ) /* char */
   873: 
   874: 	ROM_REGION( 0x8000, REGION_GFX2, ROMREGION_DISPOSE ) /* background tiles */
   875: 	ROM_LOAD( "hal21p11.bin", 0x0000, 0x4000, CRC(24abc57e) SHA1(1d7557a62adc059fb3fe20a09be18c2f40441581) )
   876: 
   877: 	ROM_REGION( 0x18000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16 sprites */
   878: 	ROM_LOAD( "hal21p13.bin", 0x00000, 0x4000, CRC(052b4f4f) SHA1(032eb5771d33defce86e222f3e7aa22bc37db6db) )
   879: 	ROM_RELOAD(               0x04000, 0x4000 )
   880: 	ROM_LOAD( "hal21p14.bin", 0x08000, 0x4000, CRC(da0cb670) SHA1(1083bdd3488dfaa5094a2ef52cfc4206f35c9612) )
   881: 	ROM_RELOAD(               0x0c000, 0x4000 )
   882: 	ROM_LOAD( "hal21p15.bin", 0x10000, 0x4000, CRC(5c5ea945) SHA1(f9ce206cab4fad1f6478d731d4b096ec33e7b99f) )
   883: 	ROM_RELOAD(               0x14000, 0x4000 )
   884: 
   885: 	ROM_REGION( 0x0c00, REGION_PROMS, 0 )
   886: 	ROM_LOAD( "hal21_3.prm",  0x000, 0x400, CRC(605afff8) SHA1(94e80ebd574b1580dac4a2aebd57e3e767890c0d) )
   887: 	ROM_LOAD( "hal21_2.prm",  0x400, 0x400, CRC(c5d84225) SHA1(cc2cd32f81ed7c1bcdd68e91d00f8081cb706ce7) )
   888: 	ROM_LOAD( "hal21_1.prm",  0x800, 0x400, CRC(195768fc) SHA1(c88bc9552d57d52fb4b030d118f48fedccf563f4) )
   889: ROM_END
   890: 
   891: ROM_START( hal21j )
   892: 	ROM_REGION( 0x10000, REGION_CPU1, 0 )   /* 64k for CPUA code */
   893: 	ROM_LOAD( "hal21p1.bin",    0x0000, 0x2000, CRC(9d193830) SHA1(8e4e9c8bc774d7c7c0b68a5fa5cabdc6b5cfa41b) )
   894: 	ROM_LOAD( "hal21p2.bin",    0x2000, 0x2000, CRC(c1f00350) SHA1(8709455a980931565ccca60162a04c6c3133099b) )
   895: 	ROM_LOAD( "hal21p3.bin",    0x4000, 0x2000, CRC(881d22a6) SHA1(4b2a65dc18620f7f77532f791212fccfe1f0b245) )
   896: 	ROM_LOAD( "hal21p4.bin",    0x6000, 0x2000, CRC(ce692534) SHA1(e1d8e6948578ec9d0b6dc2aff17ad23b8ce46d6a) )
   897: 
   898: 	ROM_REGION( 0x10000, REGION_CPU2, 0 )   /* 64k for CPUB code */
   899: 	ROM_LOAD( "hal21p5.bin",    0x0000, 0x2000, CRC(3ce0684a) SHA1(5e76770a3252d5565a8f11a79ac3a9a6c31a43e2) )
   900: 	ROM_LOAD( "hal21p6.bin",    0x2000, 0x2000, CRC(878ef798) SHA1(0aae152947c9c6733b77dd1ac14f2f6d6bfabeaa) )
   901: 	ROM_LOAD( "hal21p7.bin",    0x4000, 0x2000, CRC(72ebbe95) SHA1(b1f7dc535e7670647500391d21dfa971d5e342a2) )
   902: 	ROM_LOAD( "hal21p8.bin",    0x6000, 0x2000, CRC(17e22ad3) SHA1(0e10a3c0f2e2ec284f4e0f1055397a8ccd1ff0f7) )
   903: 	ROM_LOAD( "hal21p9.bin",    0x8000, 0x2000, CRC(b146f891) SHA1(0b2db3e14b0401a7914002c6f7c26933a1cba162) )
   904: 
   905: 	ROM_REGION( 0x10000, REGION_CPU3, 0 )   /* 64k for sound code */
   906: 	ROM_LOAD( "hal21-10.bin",   0x0000, 0x4000, CRC(a182b3f0) SHA1(b76eff97a58a96467e9f3a74125a0a770e7678f8) )
   907: 
   908: 	ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE )
   909: 	ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) ) /* char */
   910: 
   911: 	ROM_REGION( 0x8000, REGION_GFX2, ROMREGION_DISPOSE ) /* background tiles */
   912: 	ROM_LOAD( "hal21p11.bin", 0x0000, 0x4000, CRC(24abc57e) SHA1(1d7557a62adc059fb3fe20a09be18c2f40441581) )
   913: 
   914: 	ROM_REGION( 0x18000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16 sprites */
   915: 	ROM_LOAD( "hal21p13.bin", 0x00000, 0x4000, CRC(052b4f4f) SHA1(032eb5771d33defce86e222f3e7aa22bc37db6db) )
   916: 	ROM_RELOAD(               0x04000, 0x4000 )
   917: 	ROM_LOAD( "hal21p14.bin", 0x08000, 0x4000, CRC(da0cb670) SHA1(1083bdd3488dfaa5094a2ef52cfc4206f35c9612) )
   918: 	ROM_RELOAD(               0x0c000, 0x4000 )
   919: 	ROM_LOAD( "hal21p15.bin", 0x10000, 0x4000, CRC(5c5ea945) SHA1(f9ce206cab4fad1f6478d731d4b096ec33e7b99f) )
   920: 	ROM_RELOAD(               0x14000, 0x4000 )
   921: 
   922: 	ROM_REGION( 0x0c00, REGION_PROMS, 0 )
   923: 	ROM_LOAD( "hal21_3.prm",  0x000, 0x400, CRC(605afff8) SHA1(94e80ebd574b1580dac4a2aebd57e3e767890c0d) )
   924: 	ROM_LOAD( "hal21_2.prm",  0x400, 0x400, CRC(c5d84225) SHA1(cc2cd32f81ed7c1bcdd68e91d00f8081cb706ce7) )
   925: 	ROM_LOAD( "hal21_1.prm",  0x800, 0x400, CRC(195768fc) SHA1(c88bc9552d57d52fb4b030d118f48fedccf563f4) )
   926: ROM_END
   927: 
   928: ROM_START( aso )
   929: 	ROM_REGION( 0x10000, REGION_CPU1, 0 )   /* 64k for cpuA code */
   930: 	ROM_LOAD( "aso.1",    0x0000, 0x8000, CRC(3fc9d5e4) SHA1(1318904d3d896affd5affd8e475ac9ee6929b955) )
   931: 	ROM_LOAD( "aso.3",    0x8000, 0x4000, CRC(39a666d2) SHA1(b5426520eb600d44bc5566d742d7b88194076494) )
   932: 
   933: 	ROM_REGION( 0x10000, REGION_CPU2, 0 )   /* 64k for cpuB code */
   934: 	ROM_LOAD( "aso.4",    0x0000, 0x8000, CRC(2429792b) SHA1(674e81880f359f7e8d34d0ad9074267360afadbf) )
   935: 	ROM_LOAD( "aso.6",    0x8000, 0x4000, CRC(c0bfdf1f) SHA1(65b15ce9c2e78df79cb603c58639421d29701633) )
   936: 
   937: 	ROM_REGION( 0x10000, REGION_CPU3, 0 )   /* 64k for sound code */
   938: 	ROM_LOAD( "aso.7",    0x0000, 0x8000, CRC(49258162) SHA1(c265b79d012be1e065389f910f7b4ce61f5b27ce) )  /* YM3526 */
   939: 	ROM_LOAD( "aso.9",    0x8000, 0x4000, CRC(aef5a4f4) SHA1(e908e79e27ff892fe75d1ba5cb0bc9dc6b7b4268) )
   940: 
   941: 	ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) /* characters */
   942: 	ROM_LOAD( "aso.14",   0x0000, 0x2000, CRC(8baa2253) SHA1(e6e4a5aa005e89744c4e2a19a080cf322edc6b52) )
   943: 
   944: 	ROM_REGION( 0x8000, REGION_GFX2, ROMREGION_DISPOSE ) /* background tiles */
   945: 	ROM_LOAD( "aso.10",   0x0000, 0x8000, CRC(00dff996) SHA1(4f6ce4c0f2da0d2a711bcbf9aa998b4e31d0d9bf) )
   946: 
   947: 	ROM_REGION( 0x18000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16 sprites */
   948: 	ROM_LOAD( "aso.11",   0x00000, 0x8000, CRC(7feac86c) SHA1(13b81f006ec587583416c1e7432da4c3f0375924) )
   949: 	ROM_LOAD( "aso.12",   0x08000, 0x8000, CRC(6895990b) SHA1(e84554cae9a768021c3dc7183bc3d28e2dd768ee) )
   950: 	ROM_LOAD( "aso.13",   0x10000, 0x8000, CRC(87a81ce1) SHA1(28c1069e6c08ecd579f99620c1cb6df01ad1aa74) )
   951: 
   952: 	ROM_REGION( 0x0c00, REGION_PROMS, 0 )
   953: 	ROM_LOAD( "up02_f12.rom",  0x000, 0x00400, CRC(5b0a0059) SHA1(f61e17c8959f1cd6cc12b38f2fb7c6190ebd0e0c) )
   954: 	ROM_LOAD( "up02_f13.rom",  0x400, 0x00400, CRC(37e28dd8) SHA1(681726e490872a574dd0295823a44d64ef3a7b45) )
   955: 	ROM_LOAD( "up02_f14.rom",  0x800, 0x00400, CRC(c3fd1dd3) SHA1(c48030cc458f0bebea0ffccf3d3c43260da6a7fb) )
   956: ROM_END
   957: 
   958: GAMEX( 1985, aso,    0,     aso,   aso,   aso,   ROT270, "SNK", "ASO - Armored Scrum Object", GAME_NO_COCKTAIL )
   959: GAMEX( 1985, hal21,  0,     hal21, hal21, hal21, ROT270, "SNK", "HAL21", GAME_IMPERFECT_COLORS | GAME_NO_COCKTAIL )
   960: GAMEX( 1985, hal21j, hal21, hal21, hal21, hal21, ROT270, "SNK", "HAL21 (Japan)", GAME_IMPERFECT_COLORS | GAME_NO_COCKTAIL )
   961: 




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