/* Hal21 ASO Alpha Mission Change Log ---------- AT08XX03: [Common] - cleaned and consolidated VIDEO_UPDATE() - added shadows and highlights * A.S.O and HAL21 do a lot of palette cycling therefore conversion to tilemaps may be disadvantageous. Cocktail mode involves changing tile offsets and sprite coordinates and is still unsupported. * Manuals show both boards have noise filters to smooth out rings and scratches which are especially audible in HAL21. [HAL21] - installed NMI scheduler to prevent music trashing [ASO] - fixed music and sound effects being cut short - fixed service mode(hold P1 start during ROM test) - improved scrolling and color * Stage 5 boss' sky and the first half of stage 6's background appear to have consistent color as shown in Beep! magazine: http://qtq.hp.infoseek.co.jp/kouryaku/aso/aso2.jpg http://qtq.hp.infoseek.co.jp/kouryaku/aso/aso3.png Compared to MAME these areas are blacked out under pens 0xf0-0xff. On the other hand pens 0x170-0x17f suit them perfectly but they are never used in the first two loops. (I played through the game and logged pen usage. Only four color codes have blue pen15 so it's not difficult to tell.) There are unknown bits embedded in RGB triplets and the whole upper half of the palette is simply unused. The fact that ASO's color PROMs are identical in every set dismissed bad dumps but increased the likelyhood of proprietary logic which is quite obvious in Touchdown Fever and HAL21. [TODO] - find out what "really" messes up ASO's scrolling - verify color effects in both games */ #include "driver.h" #include "cpu/z80/z80.h" #include "snk.h" #include "sound/ay8910.h" #include "sound/3812intf.h" static UINT8 *hal21_vreg, *hal21_sndfifo; static UINT8 *textram; static UINT8 *aso_scroll_sync; /**************************************************************************/ // Test Handlers static WRITE8_HANDLER( aso_scroll_sync_w ) { if (data == 0x7f && (program_read_byte(0xdcd2) & 1)) data++; aso_scroll_sync[offset] = data; } static void hal21_sound_scheduler(int mode, int data) { static int busy, hold, ffcount, ffhead, fftail; switch (mode) { case 0: // init fftail = ffhead = ffcount = hold = busy = 0; return; case 1: // cut-through or capture if (data & ~0x1f) busy = 1; else if (data && busy) { if (ffcount < 16) { ffcount++; hal21_sndfifo[ffhead] = data; ffhead = (ffhead + 1) & 15; } return; } break; case 2: // acknowledge if (busy) { busy = 0; hold = 4; } return; case 3: // release if (!busy) { if (hold) hold--; else if (ffcount) { ffcount--; data = hal21_sndfifo[fftail]; fftail = (fftail + 1) & 15; break; } } return; } snk_sound_busy_bit = 0x20; soundlatch_w(0, data); cpunum_set_input_line(2, INPUT_LINE_NMI, PULSE_LINE); } /**************************************************************************/ static WRITE8_HANDLER( hal21_vreg0_w ){ hal21_vreg[0] = data; } static WRITE8_HANDLER( hal21_vreg1_w ){ hal21_vreg[1] = data; } static WRITE8_HANDLER( hal21_vreg2_w ){ hal21_vreg[2] = data; } static WRITE8_HANDLER( hal21_vreg3_w ){ hal21_vreg[3] = data; } static WRITE8_HANDLER( hal21_vreg4_w ){ hal21_vreg[4] = data; } static WRITE8_HANDLER( hal21_vreg5_w ){ hal21_vreg[5] = data; } static WRITE8_HANDLER( hal21_vreg6_w ){ hal21_vreg[6] = data; } static WRITE8_HANDLER( hal21_vreg7_w ){ hal21_vreg[7] = data; } PALETTE_INIT( aso ) { int i; int num_colors = 1024; /* palette format is RRRG GGBB B??? the three unknown bits are used but I'm not sure how, I'm currently using them as least significant bit but that's most likely wrong. */ for( i=0; i> 2) & 0x01; bit1 = (color_prom[i] >> 1) & 0x01; bit2 = (color_prom[i] >> 2) & 0x01; bit3 = (color_prom[i] >> 3) & 0x01; r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; bit0 = (color_prom[i + 2*num_colors] >> 1) & 0x01; bit1 = (color_prom[i + num_colors] >> 2) & 0x01; bit2 = (color_prom[i + num_colors] >> 3) & 0x01; bit3 = (color_prom[i] >> 0) & 0x01; g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; bit0 = (color_prom[i + 2*num_colors] >> 0) & 0x01; bit1 = (color_prom[i + 2*num_colors] >> 3) & 0x01; bit2 = (color_prom[i + num_colors] >> 0) & 0x01; bit3 = (color_prom[i + num_colors] >> 1) & 0x01; b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; palette_set_color(machine,i,MAKE_RGB(r,g,b)); } /* prepare shadow draw table */ for (i=0; i<=5; i++) gfx_drawmode_table[i] = DRAWMODE_SOURCE; gfx_drawmode_table[6] = DRAWMODE_SHADOW; gfx_drawmode_table[7] = DRAWMODE_NONE; } static VIDEO_START( aso ) { snk_blink_parity = 0; } static void hal21_draw_background(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect, int scrollx, int scrolly, int attrs, const gfx_element *gfx ) { static int color[2] = {8, 8}; int bankbase, c, x, y, offsx, offsy, dx, dy, sx, sy, offs, tile_number; bankbase = attrs<<3 & 0x100; c = attrs & 0x0f; if (c > 11) { fillbitmap(bitmap,machine->pens[(c<<4)+8], cliprect); return; } if (c<8 || color[0]<14 || bankbase) { c ^= 0x08; color[0] = c; color[1] = (c & 0x08) ? c : 8; } offsx = ((scrollx>>3) + 0) & 0x3f; dx = -(scrollx & 7) + 0; offsy = ((scrolly>>3) + 0) & 0x3f; dy = -(scrolly & 7) + 0; for (x=2; x<35; x++) for (y=0; y<28; y++) { offs = (((offsx+x)&0x3f)<<6) + ((offsy+y)&0x3f); sx = (x<<3) + dx; sy = (y<<3) + dy; tile_number = bankbase + videoram[offs]; c = (tile_number & ~0x3f) ? color[0] : color[1]; drawgfx(bitmap, gfx, tile_number, c, 0, 0, sx, sy, cliprect, TRANSPARENCY_NONE, 0); } } static void hal21_draw_sprites(mame_bitmap *bitmap, const rectangle *cliprect, int scrollx, int scrolly, const gfx_element *gfx ) { UINT8 *sprptr, *endptr; int attrs, tile, x, y, color, fy; sprptr = spriteram; endptr = spriteram + 0x100; for (; sprptr 512-16) y -= 512; if (x > 512-16) x -= 512; drawgfx(bitmap, gfx, tile, color, 0, fy, x, y, cliprect, TRANSPARENCY_PEN, 7); } } static void aso_draw_background(mame_bitmap *bitmap, const rectangle *cliprect, int scrollx, int scrolly, int attrs, const gfx_element *gfx ) { int bankbase, c, x, y, offsx, offsy, dx, dy, sx, sy, offs, tile_number; bankbase = attrs<<4 & 0x300; c = attrs & 0x0f; if (c == 7) c = 15; offsx = ((scrollx>>3) + 0) & 0x3f; dx = -(scrollx & 7) + 0; offsy = ((scrolly>>3) + 0) & 0x3f; dy = -(scrolly & 7) + 0; for (x=2; x<35; x++) for (y=0; y<28; y++) { offs = (((offsx+x)&0x3f)<<6) + ((offsy+y)&0x3f); sx = (x<<3) + dx; sy = (y<<3) + dy; tile_number = bankbase + videoram[offs]; drawgfx(bitmap, gfx, tile_number, c, 0, 0, sx, sy, cliprect, TRANSPARENCY_NONE, 0); } } static void aso_draw_sprites(mame_bitmap *bitmap, const rectangle *cliprect, int scrollx, int scrolly, const gfx_element *gfx ) { UINT8 *sprptr, *endptr; int attrs, tile, x, y, color; sprptr = spriteram; endptr = spriteram + 0x100; for (; sprptr 512-16) y -= 512; if (x > 512-16) x -= 512; drawgfx(bitmap, gfx, tile, color, 0, 0, x, y, cliprect, TRANSPARENCY_PEN_TABLE, 7); } } static VIDEO_UPDATE( aso ) { int attr, msbs, spsy, spsx, bgsy, bgsx, bank, i; attr = (int)hal21_vreg[0]; msbs = (int)hal21_vreg[1]; spsy = (int)hal21_vreg[2] + (msbs<<5 & 0x100) + 9; spsx = (int)hal21_vreg[3] + (msbs<<8 & 0x100) + 30; bgsy = (int)hal21_vreg[4] + (msbs<<4 & 0x100) - 8; bgsx = (int)hal21_vreg[5] - 16; if (snk_gamegroup) { hal21_draw_background(machine, bitmap, cliprect, bgsx+(msbs<<7 & 0x100), bgsy, attr, machine->gfx[1]); attr = snk_blink_parity; snk_blink_parity ^= 0xdf; for (i=6; i<0x80; i+=8) { palette_set_color(machine, i, MAKE_RGB(attr, attr, attr)); } hal21_draw_sprites(bitmap, cliprect, spsx, spsy, machine->gfx[2]); } else { aso_draw_background(bitmap, cliprect, bgsx+(~msbs<<7 & 0x100), bgsy, attr, machine->gfx[1]); aso_draw_sprites(bitmap, cliprect, spsx, spsy, machine->gfx[2]); } bank = msbs>>6 & 1; tnk3_draw_text(machine, bitmap, cliprect, bank, &textram[0]); tnk3_draw_status(machine, bitmap, cliprect, bank, &textram[0x400]); return 0; } static INPUT_PORTS_START( hal21 ) PORT_START_TAG("IN0") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* sound CPU status */ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START_TAG("IN1") /* P1 controls */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START_TAG("IN2") /* P2 controls */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START_TAG("DSW1") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unused ) ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x04, 0x04, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x28, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) ) PORT_DIPSETTING( 0xc0, "20000 60000" ) PORT_DIPSETTING( 0x80, "40000 90000" ) PORT_DIPSETTING( 0x40, "50000 120000" ) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_START_TAG("DSW2") PORT_DIPNAME( 0x01, 0x01, "Bonus Type" ) PORT_DIPSETTING( 0x01, "Every Bonus Set" ) PORT_DIPSETTING( 0x00, "Second Bonus Set" ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x06, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x04, "2" ) PORT_DIPSETTING( 0x02, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x18, 0x18, "Special" ) PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Demo_Sounds) ) PORT_DIPSETTING( 0x08, "Infinite Lives" ) PORT_DIPSETTING( 0x00, "Freeze" ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) // 0x20 -> fe65 PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END /**************************************************************************/ static INPUT_PORTS_START( aso ) PORT_START_TAG("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* sound CPU status */ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START_TAG("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START_TAG("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START_TAG("DSW0") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Allow_Continue ) ) PORT_DIPSETTING( 0x01, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x02, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x04, 0x04, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C) ) PORT_DIPSETTING( 0x28, DEF_STR( 3C_1C) ) PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C) ) PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C) ) PORT_DIPSETTING( 0x18, DEF_STR( 1C_2C) ) PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_4C) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) ) PORT_DIPSETTING( 0xc0, "50k 100k" ) PORT_DIPSETTING( 0x80, "60k 120k" ) PORT_DIPSETTING( 0x40, "100k 200k" ) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_START_TAG("DSW1") PORT_DIPNAME( 0x01, 0x01, "Bonus Occurrence" ) PORT_DIPSETTING( 0x01, "1st & every 2nd" ) PORT_DIPSETTING( 0x00, "1st & 2nd only" ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x06, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Effect of some kind (Cheat)") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0xc0, 0xc0, "Start Area" ) PORT_DIPSETTING( 0xc0, "1" ) PORT_DIPSETTING( 0x80, "2" ) PORT_DIPSETTING( 0x40, "3" ) PORT_DIPSETTING( 0x00, "4" ) INPUT_PORTS_END /**************************************************************************/ static const gfx_layout char256 = { 8,8, 0x100, 4, { 0, 1, 2, 3 }, { 4, 0, 12, 8, 20, 16, 28, 24}, { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, 256 }; static const gfx_layout char1024 = { 8,8, 0x400, 4, { 0, 1, 2, 3 }, { 4, 0, 12, 8, 20, 16, 28, 24}, { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, 256 }; static const gfx_layout sprite1024 = { 16,16, 0x400, 3, { 2*1024*256,1*1024*256,0*1024*256 }, { 7,6,5,4,3,2,1,0, 15,14,13,12,11,10,9,8 }, { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, 256 }; static GFXDECODE_START( aso ) /* colors 512-1023 are currently unused, I think they are a second bank */ GFXDECODE_ENTRY( REGION_GFX1, 0, char256, 128*3, 8 ) /* colors 384..511 */ GFXDECODE_ENTRY( REGION_GFX2, 0, char1024, 128*1, 16 ) /* colors 128..383 */ GFXDECODE_ENTRY( REGION_GFX3, 0, sprite1024, 128*0, 16 ) /* colors 0..127 */ GFXDECODE_END /**************************************************************************/ static READ8_HANDLER( CPUC_ready_r ) { snk_sound_busy_bit = 0; return 0; } static READ8_HANDLER( hal21_input_port_0_r ) { return input_port_0_r(0) | snk_sound_busy_bit; } static WRITE8_HANDLER( hal21_soundcommand_w ) { hal21_sound_scheduler(1, data); } static WRITE8_HANDLER( hal21_soundack_w ) { hal21_sound_scheduler(2, data); } static READ8_HANDLER( hal21_soundcommand_r ) { int data = soundlatch_r(0); soundlatch_clear_w(0, 0); return data; } static WRITE8_HANDLER( aso_soundcommand_w ) { snk_sound_busy_bit = 0x20; soundlatch_w(0, data); cpunum_set_input_line( 2, 0, HOLD_LINE ); } static INTERRUPT_GEN( hal21_sound_interrupt ) { hal21_sound_scheduler(3, 0); } /**************************************************************************/ static ADDRESS_MAP_START( aso_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_RANGE(0xd000, 0xd000) AM_READ(hal21_soundcommand_r) AM_RANGE(0xe000, 0xe000) AM_READ(CPUC_ready_r) AM_RANGE(0xf000, 0xf000) AM_READWRITE(YM3526_status_port_0_r, YM3526_control_port_0_w) /* YM3526 #1 control port? */ AM_RANGE(0xf001, 0xf001) AM_WRITE(YM3526_write_port_0_w) /* YM3526 #1 write port? */ AM_RANGE(0xf002, 0xf002) AM_READNOP // unknown read AM_RANGE(0xf004, 0xf004) AM_READNOP // unknown read AM_RANGE(0xf006, 0xf006) AM_READNOP // unknown read ADDRESS_MAP_END /**************************************************************************/ static ADDRESS_MAP_START( hal21_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0xa000, 0xa000) AM_READ(hal21_soundcommand_r) AM_RANGE(0xc000, 0xc000) AM_READ(CPUC_ready_r) AM_RANGE(0xe000, 0xe000) AM_WRITE(AY8910_control_port_0_w) AM_RANGE(0xe001, 0xe001) AM_WRITE(AY8910_write_port_0_w) AM_RANGE(0xe002, 0xe002) AM_WRITE(hal21_soundack_w) // bitfielded(0-5) acknowledge write, details unknown AM_RANGE(0xe008, 0xe008) AM_WRITE(AY8910_control_port_1_w) AM_RANGE(0xe009, 0xe009) AM_WRITE(AY8910_write_port_1_w) ADDRESS_MAP_END static ADDRESS_MAP_START( hal21_sound_portmap, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) AM_RANGE(0x0000, 0x0000) AM_NOP // external sound ROM detection? ADDRESS_MAP_END /**************************** ASO/Alpha Mission *************************/ static ADDRESS_MAP_START( aso_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_READ(hal21_input_port_0_r) /* coin, start */ AM_RANGE(0xc100, 0xc100) AM_READ(input_port_1_r) /* P1 */ AM_RANGE(0xc200, 0xc200) AM_READ(input_port_2_r) /* P2 */ AM_RANGE(0xc400, 0xc400) AM_WRITE(aso_soundcommand_w) AM_RANGE(0xc500, 0xc500) AM_READ(input_port_3_r) /* DSW1 */ AM_RANGE(0xc600, 0xc600) AM_READ(input_port_4_r) /* DSW2 */ AM_RANGE(0xc700, 0xc700) AM_READWRITE(snk_cpuB_nmi_trigger_r, snk_cpuA_nmi_ack_w) AM_RANGE(0xc800, 0xc800) AM_WRITE(hal21_vreg1_w) AM_RANGE(0xc900, 0xc900) AM_WRITE(hal21_vreg2_w) AM_RANGE(0xca00, 0xca00) AM_WRITE(hal21_vreg3_w) AM_RANGE(0xcb00, 0xcb00) AM_WRITE(hal21_vreg4_w) AM_RANGE(0xcc00, 0xcc00) AM_WRITE(hal21_vreg5_w) AM_RANGE(0xcd00, 0xcd00) AM_WRITE(hal21_vreg6_w) AM_RANGE(0xce00, 0xce00) AM_WRITE(hal21_vreg7_w) AM_RANGE(0xcf00, 0xcf00) AM_WRITE(hal21_vreg0_w) AM_RANGE(0xdcf8, 0xdcf8) AM_WRITE(aso_scroll_sync_w) AM_BASE(&aso_scroll_sync) AM_RANGE(0xd800, 0xe7ff) AM_RAM AM_SHARE(2) AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE(&spriteram) AM_RANGE(0xe800, 0xf7ff) AM_RAM AM_SHARE(3) AM_BASE(&videoram) AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE(1) AM_BASE(&textram) ADDRESS_MAP_END static ADDRESS_MAP_START( aso_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) AM_RANGE(0xc800, 0xd7ff) AM_RAM AM_SHARE(2) AM_RANGE(0xd800, 0xe7ff) AM_RAM AM_SHARE(3) AM_RANGE(0xe800, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE(1) ADDRESS_MAP_END /**************************** HAL21 *************************/ static ADDRESS_MAP_START( hal21_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_READ(hal21_input_port_0_r) /* coin, start */ AM_RANGE(0xc100, 0xc100) AM_READ(input_port_1_r) /* P1 */ AM_RANGE(0xc200, 0xc200) AM_READ(input_port_2_r) /* P2 */ AM_RANGE(0xc300, 0xc300) AM_WRITE(hal21_soundcommand_w) AM_RANGE(0xc400, 0xc400) AM_READ(input_port_3_r) /* DSW1 */ AM_RANGE(0xc500, 0xc500) AM_READ(input_port_4_r) /* DSW2 */ AM_RANGE(0xc600, 0xc600) AM_WRITE(hal21_vreg0_w) AM_RANGE(0xc700, 0xc700) AM_READWRITE(snk_cpuB_nmi_trigger_r, snk_cpuA_nmi_ack_w) AM_RANGE(0xd300, 0xd300) AM_WRITE(hal21_vreg1_w) AM_RANGE(0xd400, 0xd400) AM_WRITE(hal21_vreg2_w) AM_RANGE(0xd500, 0xd500) AM_WRITE(hal21_vreg3_w) AM_RANGE(0xd600, 0xd600) AM_WRITE(hal21_vreg4_w) AM_RANGE(0xd700, 0xd700) AM_WRITE(hal21_vreg5_w) AM_RANGE(0xe000, 0xefff) AM_RAM AM_SHARE(2) AM_BASE(&spriteram) AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE(1) AM_RANGE(0xf800, 0xffff) AM_RAM AM_BASE(&textram) ADDRESS_MAP_END static ADDRESS_MAP_START( hal21_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x9fff) AM_ROM AM_RANGE(0xa000, 0xa000) AM_WRITE(snk_cpuB_nmi_ack_w) AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE(2) AM_RANGE(0xd000, 0xdfff) AM_RAM AM_BASE(&videoram) AM_RANGE(0xe000, 0xefff) AM_RAM AM_SHARE(1) ADDRESS_MAP_END /**************************************************************************/ static DRIVER_INIT( aso ) { hal21_vreg = auto_malloc(16); snk_gamegroup = 0; } static DRIVER_INIT( hal21 ) { hal21_vreg = auto_malloc(24); hal21_sndfifo = hal21_vreg + 8; snk_gamegroup = 1; } static MACHINE_RESET( aso ) { memset(hal21_vreg, 0, 8); hal21_sound_scheduler(0, 0); snk_sound_busy_bit = 0; } static MACHINE_DRIVER_START( aso ) /* basic machine hardware */ MDRV_CPU_ADD(Z80, 4000000) MDRV_CPU_PROGRAM_MAP(aso_cpuA_map,0) MDRV_CPU_VBLANK_INT(irq0_line_hold,1) MDRV_CPU_ADD(Z80, 4000000) MDRV_CPU_PROGRAM_MAP(aso_cpuB_map,0) MDRV_CPU_VBLANK_INT(irq0_line_hold,1) MDRV_CPU_ADD(Z80, 4000000) /* audio CPU */ MDRV_CPU_PROGRAM_MAP(aso_sound_map,0) MDRV_CPU_VBLANK_INT(irq0_line_hold,1) MDRV_SCREEN_REFRESH_RATE(60) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_INTERLEAVE(100) /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_SIZE(36*8, 28*8) MDRV_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 1*8, 28*8-1) MDRV_GFXDECODE(aso) MDRV_PALETTE_LENGTH(1024) MDRV_MACHINE_RESET(aso) MDRV_PALETTE_INIT(aso) MDRV_VIDEO_START(aso) MDRV_VIDEO_UPDATE(aso) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD(YM3526, 4000000) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_DRIVER_END static MACHINE_DRIVER_START( hal21 ) /* basic machine hardware */ MDRV_CPU_ADD(Z80, 4000000) MDRV_CPU_PROGRAM_MAP(hal21_cpuA_map,0) MDRV_CPU_VBLANK_INT(irq0_line_hold,1) MDRV_CPU_ADD(Z80, 4000000) MDRV_CPU_PROGRAM_MAP(hal21_cpuB_map,0) MDRV_CPU_VBLANK_INT(irq0_line_hold,1) MDRV_CPU_ADD(Z80, 4000000) /* audio CPU */ MDRV_CPU_PROGRAM_MAP(hal21_sound_map,0) MDRV_CPU_IO_MAP(hal21_sound_portmap,0) MDRV_CPU_VBLANK_INT(hal21_sound_interrupt,1) MDRV_CPU_PERIODIC_INT(irq0_line_hold, 220) // music tempo, hand tuned MDRV_SCREEN_REFRESH_RATE(60) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_INTERLEAVE(100) /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_HIGHLIGHTS) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_SIZE(36*8, 28*8) MDRV_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 1*8, 28*8-1) MDRV_GFXDECODE(aso) MDRV_PALETTE_LENGTH(1024) MDRV_MACHINE_RESET(aso) MDRV_PALETTE_INIT(aso) MDRV_VIDEO_START(aso) MDRV_VIDEO_UPDATE(aso) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD(AY8910, 1500000) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MDRV_SOUND_ADD(AY8910, 1500000) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MACHINE_DRIVER_END /**************************************************************************/ ROM_START( hal21 ) ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for CPUA code */ ROM_LOAD( "hal21p1.bin", 0x0000, 0x2000, CRC(9d193830) SHA1(8e4e9c8bc774d7c7c0b68a5fa5cabdc6b5cfa41b) ) ROM_LOAD( "hal21p2.bin", 0x2000, 0x2000, CRC(c1f00350) SHA1(8709455a980931565ccca60162a04c6c3133099b) ) ROM_LOAD( "hal21p3.bin", 0x4000, 0x2000, CRC(881d22a6) SHA1(4b2a65dc18620f7f77532f791212fccfe1f0b245) ) ROM_LOAD( "hal21p4.bin", 0x6000, 0x2000, CRC(ce692534) SHA1(e1d8e6948578ec9d0b6dc2aff17ad23b8ce46d6a) ) ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for CPUB code */ ROM_LOAD( "hal21p5.bin", 0x0000, 0x2000, CRC(3ce0684a) SHA1(5e76770a3252d5565a8f11a79ac3a9a6c31a43e2) ) ROM_LOAD( "hal21p6.bin", 0x2000, 0x2000, CRC(878ef798) SHA1(0aae152947c9c6733b77dd1ac14f2f6d6bfabeaa) ) ROM_LOAD( "hal21p7.bin", 0x4000, 0x2000, CRC(72ebbe95) SHA1(b1f7dc535e7670647500391d21dfa971d5e342a2) ) ROM_LOAD( "hal21p8.bin", 0x6000, 0x2000, CRC(17e22ad3) SHA1(0e10a3c0f2e2ec284f4e0f1055397a8ccd1ff0f7) ) ROM_LOAD( "hal21p9.bin", 0x8000, 0x2000, CRC(b146f891) SHA1(0b2db3e14b0401a7914002c6f7c26933a1cba162) ) ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for sound code */ ROM_LOAD( "hal21p10.bin", 0x0000, 0x4000, CRC(916f7ba0) SHA1(7b8bcd59d768c4cd226de96895d3b9755bb3ba79) ) ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) ) /* char */ ROM_REGION( 0x8000, REGION_GFX2, ROMREGION_DISPOSE ) /* background tiles */ ROM_LOAD( "hal21p11.bin", 0x0000, 0x4000, CRC(24abc57e) SHA1(1d7557a62adc059fb3fe20a09be18c2f40441581) ) ROM_REGION( 0x18000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16 sprites */ ROM_LOAD( "hal21p13.bin", 0x00000, 0x4000, CRC(052b4f4f) SHA1(032eb5771d33defce86e222f3e7aa22bc37db6db) ) ROM_RELOAD( 0x04000, 0x4000 ) ROM_LOAD( "hal21p14.bin", 0x08000, 0x4000, CRC(da0cb670) SHA1(1083bdd3488dfaa5094a2ef52cfc4206f35c9612) ) ROM_RELOAD( 0x0c000, 0x4000 ) ROM_LOAD( "hal21p15.bin", 0x10000, 0x4000, CRC(5c5ea945) SHA1(f9ce206cab4fad1f6478d731d4b096ec33e7b99f) ) ROM_RELOAD( 0x14000, 0x4000 ) ROM_REGION( 0x0c00, REGION_PROMS, 0 ) ROM_LOAD( "hal21_3.prm", 0x000, 0x400, CRC(605afff8) SHA1(94e80ebd574b1580dac4a2aebd57e3e767890c0d) ) ROM_LOAD( "hal21_2.prm", 0x400, 0x400, CRC(c5d84225) SHA1(cc2cd32f81ed7c1bcdd68e91d00f8081cb706ce7) ) ROM_LOAD( "hal21_1.prm", 0x800, 0x400, CRC(195768fc) SHA1(c88bc9552d57d52fb4b030d118f48fedccf563f4) ) ROM_END ROM_START( hal21j ) ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for CPUA code */ ROM_LOAD( "hal21p1.bin", 0x0000, 0x2000, CRC(9d193830) SHA1(8e4e9c8bc774d7c7c0b68a5fa5cabdc6b5cfa41b) ) ROM_LOAD( "hal21p2.bin", 0x2000, 0x2000, CRC(c1f00350) SHA1(8709455a980931565ccca60162a04c6c3133099b) ) ROM_LOAD( "hal21p3.bin", 0x4000, 0x2000, CRC(881d22a6) SHA1(4b2a65dc18620f7f77532f791212fccfe1f0b245) ) ROM_LOAD( "hal21p4.bin", 0x6000, 0x2000, CRC(ce692534) SHA1(e1d8e6948578ec9d0b6dc2aff17ad23b8ce46d6a) ) ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for CPUB code */ ROM_LOAD( "hal21p5.bin", 0x0000, 0x2000, CRC(3ce0684a) SHA1(5e76770a3252d5565a8f11a79ac3a9a6c31a43e2) ) ROM_LOAD( "hal21p6.bin", 0x2000, 0x2000, CRC(878ef798) SHA1(0aae152947c9c6733b77dd1ac14f2f6d6bfabeaa) ) ROM_LOAD( "hal21p7.bin", 0x4000, 0x2000, CRC(72ebbe95) SHA1(b1f7dc535e7670647500391d21dfa971d5e342a2) ) ROM_LOAD( "hal21p8.bin", 0x6000, 0x2000, CRC(17e22ad3) SHA1(0e10a3c0f2e2ec284f4e0f1055397a8ccd1ff0f7) ) ROM_LOAD( "hal21p9.bin", 0x8000, 0x2000, CRC(b146f891) SHA1(0b2db3e14b0401a7914002c6f7c26933a1cba162) ) ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for sound code */ ROM_LOAD( "hal21-10.bin", 0x0000, 0x4000, CRC(a182b3f0) SHA1(b76eff97a58a96467e9f3a74125a0a770e7678f8) ) ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) ) /* char */ ROM_REGION( 0x8000, REGION_GFX2, ROMREGION_DISPOSE ) /* background tiles */ ROM_LOAD( "hal21p11.bin", 0x0000, 0x4000, CRC(24abc57e) SHA1(1d7557a62adc059fb3fe20a09be18c2f40441581) ) ROM_REGION( 0x18000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16 sprites */ ROM_LOAD( "hal21p13.bin", 0x00000, 0x4000, CRC(052b4f4f) SHA1(032eb5771d33defce86e222f3e7aa22bc37db6db) ) ROM_RELOAD( 0x04000, 0x4000 ) ROM_LOAD( "hal21p14.bin", 0x08000, 0x4000, CRC(da0cb670) SHA1(1083bdd3488dfaa5094a2ef52cfc4206f35c9612) ) ROM_RELOAD( 0x0c000, 0x4000 ) ROM_LOAD( "hal21p15.bin", 0x10000, 0x4000, CRC(5c5ea945) SHA1(f9ce206cab4fad1f6478d731d4b096ec33e7b99f) ) ROM_RELOAD( 0x14000, 0x4000 ) ROM_REGION( 0x0c00, REGION_PROMS, 0 ) ROM_LOAD( "hal21_3.prm", 0x000, 0x400, CRC(605afff8) SHA1(94e80ebd574b1580dac4a2aebd57e3e767890c0d) ) ROM_LOAD( "hal21_2.prm", 0x400, 0x400, CRC(c5d84225) SHA1(cc2cd32f81ed7c1bcdd68e91d00f8081cb706ce7) ) ROM_LOAD( "hal21_1.prm", 0x800, 0x400, CRC(195768fc) SHA1(c88bc9552d57d52fb4b030d118f48fedccf563f4) ) ROM_END ROM_START( aso ) ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for cpuA code */ ROM_LOAD( "p1.bin", 0x0000, 0x8000, CRC(3fc9d5e4) SHA1(1318904d3d896affd5affd8e475ac9ee6929b955) ) ROM_LOAD( "p3.bin", 0x8000, 0x4000, CRC(39a666d2) SHA1(b5426520eb600d44bc5566d742d7b88194076494) ) ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for cpuB code */ ROM_LOAD( "p4.bin", 0x0000, 0x8000, CRC(2429792b) SHA1(674e81880f359f7e8d34d0ad9074267360afadbf) ) ROM_LOAD( "p6.bin", 0x8000, 0x4000, CRC(c0bfdf1f) SHA1(65b15ce9c2e78df79cb603c58639421d29701633) ) ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for sound code */ ROM_LOAD( "p7.bin", 0x0000, 0x8000, CRC(49258162) SHA1(c265b79d012be1e065389f910f7b4ce61f5b27ce) ) /* YM3526 */ ROM_LOAD( "p9.bin", 0x8000, 0x4000, CRC(aef5a4f4) SHA1(e908e79e27ff892fe75d1ba5cb0bc9dc6b7b4268) ) ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) /* characters */ ROM_LOAD( "p14.bin", 0x0000, 0x2000, CRC(8baa2253) SHA1(e6e4a5aa005e89744c4e2a19a080cf322edc6b52) ) ROM_REGION( 0x8000, REGION_GFX2, ROMREGION_DISPOSE ) /* background tiles */ ROM_LOAD( "p10.bin", 0x0000, 0x8000, CRC(00dff996) SHA1(4f6ce4c0f2da0d2a711bcbf9aa998b4e31d0d9bf) ) ROM_REGION( 0x18000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16 sprites */ ROM_LOAD( "p11.bin", 0x00000, 0x8000, CRC(7feac86c) SHA1(13b81f006ec587583416c1e7432da4c3f0375924) ) ROM_LOAD( "p12.bin", 0x08000, 0x8000, CRC(6895990b) SHA1(e84554cae9a768021c3dc7183bc3d28e2dd768ee) ) ROM_LOAD( "p13.bin", 0x10000, 0x8000, CRC(87a81ce1) SHA1(28c1069e6c08ecd579f99620c1cb6df01ad1aa74) ) ROM_REGION( 0x0c00, REGION_PROMS, 0 ) ROM_LOAD( "mb7122h.f12", 0x000, 0x00400, CRC(5b0a0059) SHA1(f61e17c8959f1cd6cc12b38f2fb7c6190ebd0e0c) ) ROM_LOAD( "mb7122h.f13", 0x400, 0x00400, CRC(37e28dd8) SHA1(681726e490872a574dd0295823a44d64ef3a7b45) ) ROM_LOAD( "mb7122h.f14", 0x800, 0x00400, CRC(c3fd1dd3) SHA1(c48030cc458f0bebea0ffccf3d3c43260da6a7fb) ) ROM_REGION( 0x0600, REGION_PLDS, ROMREGION_DISPOSE ) ROM_LOAD( "pal16l8a-1.bin", 0x0000, 0x0104, CRC(4e3f9e0d) SHA1(de448d50c0d1cdef159a8c4028846142210eba0b) ) ROM_LOAD( "pal16l8a-2.bin", 0x0200, 0x0104, CRC(2a681f9e) SHA1(b26eb631d3e4fa6850a109a9a63d377cf86923bc) ) ROM_LOAD( "pal16r6a.bin", 0x0400, 0x0104, CRC(59c03681) SHA1(d21090b35596c28d44862782386e84dfc1feff0c) ) ROM_END ROM_START( alphamis ) ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for cpuA code */ ROM_LOAD( "p1.rom", 0x0000, 0x4000, CRC(69af874b) SHA1(11a13574614e7e3b9e33c2b2827571946a805376) ) ROM_LOAD( "p2.rom", 0x4000, 0x4000, CRC(7707bfe3) SHA1(fb1f4ef862f6762d2479e537fc67a819d11ace76) ) ROM_LOAD( "p3.rom", 0x8000, 0x4000, CRC(b970d642) SHA1(d3a8045f05f001e5e2fae8ef7900cf87ab17fc74) ) ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for cpuB code */ ROM_LOAD( "p4.rom", 0x0000, 0x4000, CRC(91a89d3c) SHA1(46ef8718c81aac2f09dd1884538750edf9662760) ) ROM_LOAD( "p5.rom", 0x4000, 0x4000, CRC(9879e506) SHA1(0bce5fcb9d05ce77cd8e9ad1cac04ef617928db0) ) ROM_LOAD( "p6.bin", 0x8000, 0x4000, CRC(c0bfdf1f) SHA1(65b15ce9c2e78df79cb603c58639421d29701633) ) ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for sound code */ ROM_LOAD( "p7.rom", 0x0000, 0x4000, CRC(dbc19736) SHA1(fe365d70ead8243374979d2162c395fed9870405) ) /* YM3526 */ ROM_LOAD( "p8.rom", 0x4000, 0x4000, CRC(537726a9) SHA1(ddf66946be71d2e6ab2cc53150e3b36d45dde2eb) ) ROM_LOAD( "p9.bin", 0x8000, 0x4000, CRC(aef5a4f4) SHA1(e908e79e27ff892fe75d1ba5cb0bc9dc6b7b4268) ) ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) /* characters */ ROM_LOAD( "p14.rom", 0x0000, 0x2000, CRC(acbe29b2) SHA1(e304c6d30888fa7549d25e6329ba94d5088bd8b7) ) ROM_REGION( 0x8000, REGION_GFX2, ROMREGION_DISPOSE ) /* background tiles */ ROM_LOAD( "p10.bin", 0x0000, 0x8000, CRC(00dff996) SHA1(4f6ce4c0f2da0d2a711bcbf9aa998b4e31d0d9bf) ) ROM_REGION( 0x18000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16 sprites */ ROM_LOAD( "p11.bin", 0x00000, 0x8000, CRC(7feac86c) SHA1(13b81f006ec587583416c1e7432da4c3f0375924) ) ROM_LOAD( "p12.bin", 0x08000, 0x8000, CRC(6895990b) SHA1(e84554cae9a768021c3dc7183bc3d28e2dd768ee) ) ROM_LOAD( "p13.bin", 0x10000, 0x8000, CRC(87a81ce1) SHA1(28c1069e6c08ecd579f99620c1cb6df01ad1aa74) ) ROM_REGION( 0x0c00, REGION_PROMS, 0 ) ROM_LOAD( "mb7122h.f12", 0x000, 0x00400, CRC(5b0a0059) SHA1(f61e17c8959f1cd6cc12b38f2fb7c6190ebd0e0c) ) ROM_LOAD( "mb7122h.f13", 0x400, 0x00400, CRC(37e28dd8) SHA1(681726e490872a574dd0295823a44d64ef3a7b45) ) ROM_LOAD( "mb7122h.f14", 0x800, 0x00400, CRC(c3fd1dd3) SHA1(c48030cc458f0bebea0ffccf3d3c43260da6a7fb) ) ROM_REGION( 0x0600, REGION_PLDS, ROMREGION_DISPOSE ) ROM_LOAD( "pal16l8a-1.bin", 0x0000, 0x0104, CRC(4e3f9e0d) SHA1(de448d50c0d1cdef159a8c4028846142210eba0b) ) ROM_LOAD( "pal16l8a-2.bin", 0x0200, 0x0104, CRC(2a681f9e) SHA1(b26eb631d3e4fa6850a109a9a63d377cf86923bc) ) ROM_LOAD( "pal16r6a.bin", 0x0400, 0x0104, CRC(59c03681) SHA1(d21090b35596c28d44862782386e84dfc1feff0c) ) ROM_END ROM_START( arian ) ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for cpuA code */ ROM_LOAD( "p1.d8", 0x0000, 0x4000, CRC(0ca89307) SHA1(d0ecb97b1e147a4001a4383fd5709394e2358a45) ) /* roms that differ from above sets all had a red stripe on the label */ ROM_LOAD( "p2.d7", 0x4000, 0x4000, CRC(724518c3) SHA1(debbfe2a485af5f452d208a04705dbd48d47d90f) ) /* IE: P1 through P4 and P14 */ ROM_LOAD( "p3.d6", 0x8000, 0x4000, CRC(4d8db650) SHA1(184141847d38077737ee7140861d94832018e2e2) ) ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for cpuB code */ ROM_LOAD( "p4.d3", 0x0000, 0x4000, CRC(47baf1db) SHA1(3947a679745811e5499d690f2b73b4f28b1d47f9) ) ROM_LOAD( "p5.rom", 0x4000, 0x4000, CRC(9879e506) SHA1(0bce5fcb9d05ce77cd8e9ad1cac04ef617928db0) ) ROM_LOAD( "p6.bin", 0x8000, 0x4000, CRC(c0bfdf1f) SHA1(65b15ce9c2e78df79cb603c58639421d29701633) ) ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k for sound code */ ROM_LOAD( "p7.rom", 0x0000, 0x4000, CRC(dbc19736) SHA1(fe365d70ead8243374979d2162c395fed9870405) ) /* YM3526 */ ROM_LOAD( "p8.rom", 0x4000, 0x4000, CRC(537726a9) SHA1(ddf66946be71d2e6ab2cc53150e3b36d45dde2eb) ) ROM_LOAD( "p9.bin", 0x8000, 0x4000, CRC(aef5a4f4) SHA1(e908e79e27ff892fe75d1ba5cb0bc9dc6b7b4268) ) ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) /* characters */ ROM_LOAD( "p14.h1", 0x0000, 0x2000, CRC(e599bd30) SHA1(bf70aae9a15d548bb532ca1fc8d7220dfa150d6e) ) ROM_REGION( 0x8000, REGION_GFX2, ROMREGION_DISPOSE ) /* background tiles */ ROM_LOAD( "p10.bin", 0x0000, 0x8000, CRC(00dff996) SHA1(4f6ce4c0f2da0d2a711bcbf9aa998b4e31d0d9bf) ) ROM_REGION( 0x18000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16 sprites */ ROM_LOAD( "p11.bin", 0x00000, 0x8000, CRC(7feac86c) SHA1(13b81f006ec587583416c1e7432da4c3f0375924) ) ROM_LOAD( "p12.bin", 0x08000, 0x8000, CRC(6895990b) SHA1(e84554cae9a768021c3dc7183bc3d28e2dd768ee) ) ROM_LOAD( "p13.bin", 0x10000, 0x8000, CRC(87a81ce1) SHA1(28c1069e6c08ecd579f99620c1cb6df01ad1aa74) ) ROM_REGION( 0x0c00, REGION_PROMS, 0 ) ROM_LOAD( "mb7122h.f12", 0x000, 0x00400, CRC(5b0a0059) SHA1(f61e17c8959f1cd6cc12b38f2fb7c6190ebd0e0c) ) ROM_LOAD( "mb7122h.f13", 0x400, 0x00400, CRC(37e28dd8) SHA1(681726e490872a574dd0295823a44d64ef3a7b45) ) ROM_LOAD( "mb7122h.f14", 0x800, 0x00400, CRC(c3fd1dd3) SHA1(c48030cc458f0bebea0ffccf3d3c43260da6a7fb) ) ROM_REGION( 0x0600, REGION_PLDS, ROMREGION_DISPOSE ) ROM_LOAD( "pal16l8a-1.bin", 0x0000, 0x0104, CRC(4e3f9e0d) SHA1(de448d50c0d1cdef159a8c4028846142210eba0b) ) ROM_LOAD( "pal16l8a-2.bin", 0x0200, 0x0104, CRC(2a681f9e) SHA1(b26eb631d3e4fa6850a109a9a63d377cf86923bc) ) ROM_LOAD( "pal16r6a.bin", 0x0400, 0x0104, CRC(59c03681) SHA1(d21090b35596c28d44862782386e84dfc1feff0c) ) ROM_END GAME( 1985, aso, 0, aso, aso, aso, ROT270, "SNK", "ASO - Armored Scrum Object", GAME_NO_COCKTAIL ) GAME( 1985, alphamis, aso, aso, aso, aso, ROT270, "SNK", "Alpha Mission", GAME_NO_COCKTAIL ) GAME( 1985, arian, aso, aso, aso, aso, ROT270, "SNK", "Arian Mission", GAME_NO_COCKTAIL ) GAME( 1985, hal21, 0, hal21, hal21, hal21, ROT270, "SNK", "HAL21", GAME_IMPERFECT_COLORS | GAME_NO_COCKTAIL ) GAME( 1985, hal21j, hal21, hal21, hal21, hal21, ROT270, "SNK", "HAL21 (Japan)", GAME_IMPERFECT_COLORS | GAME_NO_COCKTAIL )