mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
merged hal21.c into snk.c
removed hacks and kludges fixed colors (I think--though some sprites do look weird)
This commit is contained in:
parent
5bd3539147
commit
ceb28ace28
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1543,7 +1543,6 @@ src/mame/drivers/gundealr.c svneol=native#text/plain
|
||||
src/mame/drivers/gunpey.c svneol=native#text/plain
|
||||
src/mame/drivers/gunsmoke.c svneol=native#text/plain
|
||||
src/mame/drivers/gyruss.c svneol=native#text/plain
|
||||
src/mame/drivers/hal21.c svneol=native#text/plain
|
||||
src/mame/drivers/halleys.c svneol=native#text/plain
|
||||
src/mame/drivers/hanaawas.c svneol=native#text/plain
|
||||
src/mame/drivers/hanaroku.c svneol=native#text/plain
|
||||
|
@ -1,642 +0,0 @@
|
||||
/*
|
||||
Hal21
|
||||
|
||||
|
||||
Change Log
|
||||
----------
|
||||
|
||||
AT08XX03:
|
||||
|
||||
[Common]
|
||||
- added shadows and highlights
|
||||
|
||||
* 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
|
||||
|
||||
[TODO]
|
||||
- verify color effects
|
||||
*/
|
||||
|
||||
#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 int color[2];
|
||||
static int snk_blink_parity; // FIXME likely wrong
|
||||
static int snk_sound_busy_bit;
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
static void hal21_sound_scheduler(running_machine *machine, 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 = 0x01;
|
||||
soundlatch_w(machine, 0, data);
|
||||
cpunum_set_input_line(machine, 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; }
|
||||
|
||||
|
||||
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<num_colors; i++ )
|
||||
{
|
||||
int bit0=0,bit1,bit2,bit3,r,g,b;
|
||||
|
||||
bit0 = (color_prom[i + 2*num_colors] >> 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( hal21 )
|
||||
{
|
||||
snk_blink_parity = 0;
|
||||
}
|
||||
|
||||
|
||||
static VIDEO_RESET( aso )
|
||||
{
|
||||
color[0] = 8;
|
||||
color[1] = 8;
|
||||
}
|
||||
|
||||
|
||||
static void hal21_draw_background(running_machine *machine, bitmap_t *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<<3 & 0x100;
|
||||
c = attrs & 0x0f;
|
||||
if (c > 11) { fillbitmap(bitmap,(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(bitmap_t *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<endptr; sprptr+=4)
|
||||
{
|
||||
if (*(UINT32*)sprptr == 0 || *(UINT32*)sprptr == -1) continue;
|
||||
|
||||
attrs = sprptr[3];
|
||||
tile = sprptr[1] + (attrs<<2 & 0x100);
|
||||
color = attrs & 0x0f;
|
||||
fy = attrs & 0x20;
|
||||
y = (sprptr[0] + (attrs<<4 & 0x100) - scrolly) & 0x1ff;
|
||||
x = (0x100 - (sprptr[2] + (attrs<<1 & 0x100) - scrollx)) & 0x1ff;
|
||||
if (y > 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 tnk3_draw_text(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int bank, UINT8 *source )
|
||||
{
|
||||
const gfx_element *gfx = machine->gfx[0];
|
||||
|
||||
int tile_number, color, sx, sy;
|
||||
int x, y;
|
||||
|
||||
for(x=0; x<32; x++) for(y=0; y<32; y++)
|
||||
{
|
||||
tile_number = source[(x<<5)+y];
|
||||
|
||||
if(tile_number == 0x20 || tile_number == 0xff) continue;
|
||||
|
||||
if(bank == -1) color = 8;
|
||||
else
|
||||
{
|
||||
color = tile_number >> 5;
|
||||
tile_number |= bank << 8;
|
||||
}
|
||||
sx = (x+2) << 3;
|
||||
sy = (y+1) << 3;
|
||||
|
||||
drawgfx(bitmap,gfx,tile_number,color,0,0,sx,sy,cliprect,TRANSPARENCY_PEN,15);
|
||||
}
|
||||
}
|
||||
|
||||
static void tnk3_draw_status_main(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int bank, UINT8 *source, int start )
|
||||
{
|
||||
const gfx_element *gfx = machine->gfx[0];
|
||||
|
||||
int tile_number, color, sx, sy;
|
||||
int x, y;
|
||||
|
||||
for(x = start; x < start+2; x++) for(y = 0; y < 32; y++)
|
||||
{
|
||||
tile_number = source[(x<<5)+y];
|
||||
|
||||
if(bank == -1) color = 8;
|
||||
else
|
||||
{
|
||||
color = tile_number >> 5;
|
||||
tile_number |= (bank << 8);
|
||||
}
|
||||
sx = ((x+34)&0x3f) << 3;
|
||||
sy = (y+1) << 3;
|
||||
|
||||
drawgfx(bitmap,gfx,tile_number,color,0,0,sx,sy,cliprect,TRANSPARENCY_NONE,0);
|
||||
}
|
||||
}
|
||||
|
||||
static void tnk3_draw_status(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int bank, UINT8 *source )
|
||||
{
|
||||
tnk3_draw_status_main(machine,bitmap,cliprect,bank,source, 0);
|
||||
tnk3_draw_status_main(machine,bitmap,cliprect,bank,source,30);
|
||||
}
|
||||
|
||||
static VIDEO_UPDATE( hal21 )
|
||||
{
|
||||
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;
|
||||
|
||||
hal21_draw_background(screen->machine, bitmap, cliprect, bgsx+(msbs<<7 & 0x100), bgsy, attr, screen->machine->gfx[1]);
|
||||
|
||||
attr = snk_blink_parity;
|
||||
snk_blink_parity ^= 0xdf;
|
||||
for (i=6; i<0x80; i+=8) { palette_set_color(screen->machine, i, MAKE_RGB(attr, attr, attr)); }
|
||||
|
||||
hal21_draw_sprites(bitmap, cliprect, spsx, spsy, screen->machine->gfx[2]);
|
||||
|
||||
bank = msbs>>6 & 1;
|
||||
tnk3_draw_text(screen->machine, bitmap, cliprect, bank, &textram[0]);
|
||||
tnk3_draw_status(screen->machine, bitmap, cliprect, bank, &textram[0x400]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static CUSTOM_INPUT( sound_status_r )
|
||||
{
|
||||
return snk_sound_busy_bit;
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START( hal21 )
|
||||
PORT_START("SYSTEM")
|
||||
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_SPECIAL ) PORT_CUSTOM(sound_status_r, NULL) /* sound CPU status */
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("P1")
|
||||
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("P2")
|
||||
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("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("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 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( "gfx1", 0, char256, 128*3, 8 ) /* colors 384..511 */
|
||||
GFXDECODE_ENTRY( "gfx2", 0, char1024, 128*1, 16 ) /* colors 128..383 */
|
||||
GFXDECODE_ENTRY( "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 WRITE8_HANDLER( hal21_soundcommand_w ) { hal21_sound_scheduler(machine, 1, data); }
|
||||
static WRITE8_HANDLER( hal21_soundack_w ) { hal21_sound_scheduler(machine,2, data); }
|
||||
|
||||
static READ8_HANDLER( hal21_soundcommand_r )
|
||||
{
|
||||
int data = soundlatch_r(machine, 0);
|
||||
soundlatch_clear_w(machine, 0, 0);
|
||||
return data;
|
||||
}
|
||||
|
||||
static INTERRUPT_GEN( hal21_sound_interrupt )
|
||||
{
|
||||
hal21_sound_scheduler(machine, 3, 0);
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
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_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x0000, 0x0000) AM_NOP // external sound ROM detection?
|
||||
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_PORT("SYSTEM")
|
||||
AM_RANGE(0xc100, 0xc100) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xc200, 0xc200) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xc300, 0xc300) AM_WRITE(hal21_soundcommand_w)
|
||||
AM_RANGE(0xc400, 0xc400) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0xc500, 0xc500) AM_READ_PORT("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( hal21 )
|
||||
{
|
||||
hal21_vreg = auto_malloc(24);
|
||||
hal21_sndfifo = hal21_vreg + 8;
|
||||
}
|
||||
|
||||
static MACHINE_RESET( aso )
|
||||
{
|
||||
memset(hal21_vreg, 0, 8);
|
||||
hal21_sound_scheduler(machine, 0, 0);
|
||||
snk_sound_busy_bit = 0;
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( hal21 )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("main", Z80, 4000000)
|
||||
MDRV_CPU_PROGRAM_MAP(hal21_cpuA_map,0)
|
||||
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
|
||||
|
||||
MDRV_CPU_ADD("sub", Z80, 4000000)
|
||||
MDRV_CPU_PROGRAM_MAP(hal21_cpuB_map,0)
|
||||
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
|
||||
|
||||
MDRV_CPU_ADD("audio", Z80, 4000000)
|
||||
MDRV_CPU_PROGRAM_MAP(hal21_sound_map,0)
|
||||
MDRV_CPU_IO_MAP(hal21_sound_portmap,0)
|
||||
MDRV_CPU_VBLANK_INT("main", hal21_sound_interrupt)
|
||||
MDRV_CPU_PERIODIC_INT(irq0_line_hold, 220) // music tempo, hand tuned
|
||||
|
||||
MDRV_INTERLEAVE(100)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_HIGHLIGHTS)
|
||||
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
|
||||
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(hal21)
|
||||
MDRV_VIDEO_RESET(aso)
|
||||
MDRV_VIDEO_UPDATE(hal21)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MDRV_SOUND_ADD("ay1", AY8910, 1500000)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
MDRV_SOUND_ADD("ay2", AY8910, 1500000)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
ROM_START( hal21 )
|
||||
ROM_REGION( 0x10000, "main", 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, "sub", 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, "audio", 0 ) /* 64k for sound code */
|
||||
ROM_LOAD( "hal21p10.bin", 0x0000, 0x4000, CRC(916f7ba0) SHA1(7b8bcd59d768c4cd226de96895d3b9755bb3ba79) )
|
||||
|
||||
ROM_REGION( 0x2000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) ) /* char */
|
||||
|
||||
ROM_REGION( 0x8000, "gfx2", ROMREGION_DISPOSE ) /* background tiles */
|
||||
ROM_LOAD( "hal21p11.bin", 0x0000, 0x4000, CRC(24abc57e) SHA1(1d7557a62adc059fb3fe20a09be18c2f40441581) )
|
||||
|
||||
ROM_REGION( 0x18000, "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, "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, "main", 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, "sub", 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, "audio", 0 ) /* 64k for sound code */
|
||||
ROM_LOAD( "hal21-10.bin", 0x0000, 0x4000, CRC(a182b3f0) SHA1(b76eff97a58a96467e9f3a74125a0a770e7678f8) )
|
||||
|
||||
ROM_REGION( 0x2000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) ) /* char */
|
||||
|
||||
ROM_REGION( 0x8000, "gfx2", ROMREGION_DISPOSE ) /* background tiles */
|
||||
ROM_LOAD( "hal21p11.bin", 0x0000, 0x4000, CRC(24abc57e) SHA1(1d7557a62adc059fb3fe20a09be18c2f40441581) )
|
||||
|
||||
ROM_REGION( 0x18000, "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, "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
|
||||
|
||||
|
||||
|
||||
|
||||
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 )
|
@ -5,7 +5,7 @@ snk.c
|
||||
various SNK triple Z80 games
|
||||
|
||||
ay8910x2
|
||||
Jumping Cross, Gladiator 1984
|
||||
Jumping Cross, Gladiator 1984, HAL21
|
||||
|
||||
ym3526
|
||||
ASO, Tank
|
||||
@ -44,6 +44,7 @@ Notes:
|
||||
- How to enter test mode:
|
||||
1984 jcross: n/a
|
||||
1984 sgladiat: keep F2 pressed during boot
|
||||
1985 hal21: n/a
|
||||
1985 aso: keep 1 pressed during boot
|
||||
1985 tnk3: keep 1 pressed during boot
|
||||
1986 athena: keep 1 pressed during boot
|
||||
@ -174,6 +175,12 @@ TODO:
|
||||
|
||||
- one unknown dip switch in sgladiat.
|
||||
|
||||
- hal21: unknown sound writes to E002.
|
||||
|
||||
- hal21: when the flip screen dip switch is on, the game screen is correctly
|
||||
flipped, but the title screen remains upside down (and sprites are displayed
|
||||
in the wrong position). This looks like a bug in the game.
|
||||
|
||||
- ASO: unknown writes to CE00, probably video related. Always 05?
|
||||
Also unknown writes to F002 by the sound CPU, during reset.
|
||||
|
||||
@ -818,6 +825,35 @@ static ADDRESS_MAP_START( sgladiat_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( hal21_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0xc000, 0xc000) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0xc100, 0xc100) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0xc200, 0xc200) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0xc300, 0xc300) AM_WRITE(sgladiat_soundlatch_w)
|
||||
AM_RANGE(0xc400, 0xc400) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0xc500, 0xc500) AM_READ_PORT("DSW2")
|
||||
AM_RANGE(0xc600, 0xc600) AM_WRITE(hal21_flipscreen_w) // flip screen, bg tile and palette bank
|
||||
AM_RANGE(0xc700, 0xc700) AM_READWRITE(snk_cpuB_nmi_trigger_r, snk_cpuA_nmi_ack_w)
|
||||
AM_RANGE(0xd300, 0xd300) AM_WRITE(jcross_scroll_msb_w)
|
||||
AM_RANGE(0xd400, 0xd400) AM_WRITE(snk_sp16_scrolly_w)
|
||||
AM_RANGE(0xd500, 0xd500) AM_WRITE(snk_sp16_scrollx_w)
|
||||
AM_RANGE(0xd600, 0xd600) AM_WRITE(snk_bg_scrolly_w)
|
||||
AM_RANGE(0xd700, 0xd700) AM_WRITE(snk_bg_scrollx_w)
|
||||
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1)
|
||||
AM_RANGE(0xe800, 0xf7ff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram)
|
||||
AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3) AM_BASE(&snk_fg_videoram) // + work RAM
|
||||
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, 0xc7ff) AM_RAM AM_SHARE(1)
|
||||
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(2)
|
||||
AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( aso_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0xbfff) AM_ROM
|
||||
AM_RANGE(0xc000, 0xc000) AM_READ_PORT("IN0")
|
||||
@ -1137,6 +1173,25 @@ static ADDRESS_MAP_START( jcross_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x00, 0x00) AM_READ(sgladiat_sound_irq_ack_r)
|
||||
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(sgladiat_soundlatch_r)
|
||||
AM_RANGE(0xc000, 0xc000) AM_READ(sgladiat_sound_nmi_ack_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_WRITENOP // bitfielded(0-5) details unknown. Filter enable?
|
||||
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_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READNOP // ? only read on startup
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( tnk3_YM3526_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0x87ff) AM_RAM
|
||||
@ -1382,6 +1437,88 @@ static INPUT_PORTS_START( sgladiat )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( hal21 )
|
||||
PORT_START("IN0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
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_SPECIAL ) PORT_CUSTOM(snk_sound_busy, 0)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("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_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("DSW1")
|
||||
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1")
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("DSW1:2")
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( Upright ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:3")
|
||||
PORT_DIPSETTING( 0x04, "3" )
|
||||
PORT_DIPSETTING( 0x00, "5" )
|
||||
PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:4,5,6")
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) )
|
||||
PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) )
|
||||
PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) )
|
||||
// PORT_DIPSETTING( 0x10, DEF_STR( 1C_1C ) ) /* duplicate */
|
||||
// PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) ) /* duplicate */
|
||||
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_DIPLOCATION("DSW1:7,8")
|
||||
PORT_DIPSETTING( 0xc0, "20000 60000" )
|
||||
PORT_DIPSETTING( 0x80, "40000 90000" )
|
||||
PORT_DIPSETTING( 0x40, "50000 120000" )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
|
||||
|
||||
PORT_START("DSW2")
|
||||
PORT_DIPNAME( 0x01, 0x01, "Bonus Type" ) PORT_DIPLOCATION("DSW2:1")
|
||||
PORT_DIPSETTING( 0x01, "Every Bonus Set" )
|
||||
PORT_DIPSETTING( 0x00, "Second Bonus Set" )
|
||||
PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW2:2,3")
|
||||
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( 0x18, 0x10, "Game mode" ) PORT_DIPLOCATION("DSW2:4,5")
|
||||
PORT_DIPSETTING( 0x18, "Demo Sounds Off" )
|
||||
PORT_DIPSETTING( 0x10, "Demo Sounds On" )
|
||||
PORT_DIPSETTING( 0x00, "Freeze" )
|
||||
PORT_DIPSETTING( 0x08, "Infinite Lives (Cheat)" )
|
||||
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW2:6")
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:7")
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("DSW2:8")
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( No ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( aso )
|
||||
PORT_START("IN0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
@ -2987,6 +3124,27 @@ static MACHINE_DRIVER_START( sgladiat )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( hal21 )
|
||||
|
||||
MDRV_IMPORT_FROM(jcross)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(hal21_cpuA_map,0)
|
||||
|
||||
MDRV_CPU_MODIFY("sub")
|
||||
MDRV_CPU_PROGRAM_MAP(hal21_cpuB_map,0)
|
||||
|
||||
MDRV_CPU_MODIFY("audio")
|
||||
MDRV_CPU_PROGRAM_MAP(hal21_sound_map,0)
|
||||
MDRV_CPU_IO_MAP(hal21_sound_portmap,0)
|
||||
MDRV_CPU_PERIODIC_INT(irq0_line_hold, 220) // music tempo, hand tuned
|
||||
|
||||
/* video hardware */
|
||||
MDRV_VIDEO_START(hal21)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( tnk3 )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -3375,7 +3533,7 @@ ROM_START( sgladiat )
|
||||
ROM_LOAD( "glad.009", 0x2000, 0x2000, CRC(912a20e0) SHA1(9621b955bc00b7c52ed8363bb441b568efb55863) )
|
||||
ROM_LOAD( "glad.010", 0x4000, 0x2000, CRC(8b1db3a5) SHA1(5ca403d40071ab13deb7fdb04cb0e055e6b30b05) )
|
||||
|
||||
ROM_REGION( 0xc00, "proms", 0 )
|
||||
ROM_REGION( 0x0c00, "proms", 0 )
|
||||
ROM_LOAD( "82s137.001", 0x000, 0x400, CRC(d9184823) SHA1(455c6a437d54c29673dddb8248ca78d000c7f354) )
|
||||
ROM_LOAD( "82s137.002", 0x400, 0x400, CRC(1a6b0953) SHA1(552ac2897abe507f2fd9ca11c8128a0314af215c) )
|
||||
ROM_LOAD( "82s137.003", 0x800, 0x400, CRC(c0e70308) SHA1(d7dbc500bc9991c2d1b95850f3723a2a224fbfbb) )
|
||||
@ -3383,6 +3541,76 @@ ROM_END
|
||||
|
||||
/***********************************************************************/
|
||||
|
||||
ROM_START( hal21 )
|
||||
ROM_REGION( 0x10000, "main", 0 )
|
||||
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, "sub", 0 )
|
||||
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, "audio", 0 )
|
||||
ROM_LOAD( "hal21p10.bin", 0x0000, 0x4000, CRC(916f7ba0) SHA1(7b8bcd59d768c4cd226de96895d3b9755bb3ba79) )
|
||||
|
||||
ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) )
|
||||
|
||||
ROM_REGION( 0x4000, "bg_tiles", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "hal21p11.bin", 0x0000, 0x4000, CRC(24abc57e) SHA1(1d7557a62adc059fb3fe20a09be18c2f40441581) )
|
||||
|
||||
ROM_REGION( 0xc000, "sp16_tiles", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "hal21p13.bin", 0x00000, 0x4000, CRC(052b4f4f) SHA1(032eb5771d33defce86e222f3e7aa22bc37db6db) )
|
||||
ROM_LOAD( "hal21p14.bin", 0x04000, 0x4000, CRC(da0cb670) SHA1(1083bdd3488dfaa5094a2ef52cfc4206f35c9612) )
|
||||
ROM_LOAD( "hal21p15.bin", 0x08000, 0x4000, CRC(5c5ea945) SHA1(f9ce206cab4fad1f6478d731d4b096ec33e7b99f) )
|
||||
|
||||
ROM_REGION( 0x0c00, "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, "main", 0 )
|
||||
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, "sub", 0 )
|
||||
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, "audio", 0 )
|
||||
ROM_LOAD( "hal21-10.bin", 0x0000, 0x4000, CRC(a182b3f0) SHA1(b76eff97a58a96467e9f3a74125a0a770e7678f8) )
|
||||
|
||||
ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) )
|
||||
|
||||
ROM_REGION( 0x4000, "bg_tiles", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "hal21p11.bin", 0x0000, 0x4000, CRC(24abc57e) SHA1(1d7557a62adc059fb3fe20a09be18c2f40441581) )
|
||||
|
||||
ROM_REGION( 0xc000, "sp16_tiles", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "hal21p13.bin", 0x00000, 0x4000, CRC(052b4f4f) SHA1(032eb5771d33defce86e222f3e7aa22bc37db6db) )
|
||||
ROM_LOAD( "hal21p14.bin", 0x04000, 0x4000, CRC(da0cb670) SHA1(1083bdd3488dfaa5094a2ef52cfc4206f35c9612) )
|
||||
ROM_LOAD( "hal21p15.bin", 0x08000, 0x4000, CRC(5c5ea945) SHA1(f9ce206cab4fad1f6478d731d4b096ec33e7b99f) )
|
||||
|
||||
ROM_REGION( 0x0c00, "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, "main", 0 )
|
||||
ROM_LOAD( "aso_p1.d8", 0x0000, 0x4000, CRC(84981f3c) SHA1(5b6af7cf47f5f664df7ddc3615b4da0dea257a05) )
|
||||
@ -5252,8 +5480,11 @@ static DRIVER_INIT( countryc )
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xc300, 0xc300, 0, 0, countryc_trackball_w);
|
||||
}
|
||||
|
||||
|
||||
GAME( 1984, jcross, 0, jcross, jcross, 0, ROT270, "SNK", "Jumping Cross", 0 )
|
||||
GAME( 1984, sgladiat, 0, sgladiat, sgladiat, 0, ROT0, "SNK", "Gladiator 1984", 0 )
|
||||
GAME( 1985, hal21, 0, hal21, hal21, 0, ROT270, "SNK", "HAL21", 0 )
|
||||
GAME( 1985, hal21j, hal21, hal21, hal21, 0, ROT270, "SNK", "HAL21 (Japan)", 0 )
|
||||
|
||||
GAME( 1985, aso, 0, aso, aso, 0, ROT270, "SNK", "ASO - Armored Scrum Object", 0 )
|
||||
GAME( 1985, alphamis, aso, aso, alphamis, 0, ROT270, "SNK", "Alpha Mission", 0 )
|
||||
|
@ -21,8 +21,9 @@ extern PALETTE_INIT( tnk3 );
|
||||
|
||||
extern VIDEO_START( jcross );
|
||||
extern VIDEO_START( sgladiat );
|
||||
extern VIDEO_START( tnk3 );
|
||||
extern VIDEO_START( hal21 );
|
||||
extern VIDEO_START( aso );
|
||||
extern VIDEO_START( tnk3 );
|
||||
extern VIDEO_START( ikari );
|
||||
extern VIDEO_START( gwar );
|
||||
extern VIDEO_START( tdfever );
|
||||
@ -42,6 +43,7 @@ extern WRITE8_HANDLER( snk_sp32_scrolly_w );
|
||||
extern WRITE8_HANDLER( jcross_scroll_msb_w );
|
||||
extern WRITE8_HANDLER( sgladiat_scroll_msb_w );
|
||||
extern WRITE8_HANDLER( sgladiat_flipscreen_w );
|
||||
extern WRITE8_HANDLER( hal21_flipscreen_w );
|
||||
extern WRITE8_HANDLER( tnk3_videoattrs_w );
|
||||
extern WRITE8_HANDLER( aso_videoattrs_w );
|
||||
extern WRITE8_HANDLER( aso_bg_bank_w );
|
||||
|
@ -1263,7 +1263,6 @@ $(MAMEOBJ)/sigma.a: \
|
||||
$(MAMEOBJ)/snk.a: \
|
||||
$(DRIVERS)/bbusters.o $(VIDEO)/bbusters.o \
|
||||
$(DRIVERS)/dmndrby.o \
|
||||
$(DRIVERS)/hal21.o \
|
||||
$(DRIVERS)/hng64.o $(VIDEO)/hng64.o \
|
||||
$(DRIVERS)/lasso.o $(VIDEO)/lasso.o \
|
||||
$(DRIVERS)/mainsnk.o $(VIDEO)/mainsnk.o \
|
||||
|
@ -219,38 +219,33 @@ VIDEO_START( jcross )
|
||||
|
||||
VIDEO_START( sgladiat )
|
||||
{
|
||||
VIDEO_START_CALL(snk_3bpp_shadow);
|
||||
|
||||
fg_tilemap = tilemap_create(tnk3_get_fg_tile_info, tnk3_fg_scan_cols, 8, 8, 36, 28);
|
||||
bg_tilemap = tilemap_create(aso_get_bg_tile_info, tilemap_scan_cols, 8, 8, 64, 32);
|
||||
|
||||
tilemap_set_transparent_pen(fg_tilemap, 15);
|
||||
tilemap_set_scrolldy(fg_tilemap, 8, 8);
|
||||
|
||||
tilemap_set_scrolldx(bg_tilemap, 15, 24);
|
||||
tilemap_set_scrolldy(bg_tilemap, 8, -32);
|
||||
VIDEO_START_CALL(jcross);
|
||||
|
||||
num_sprites = 25;
|
||||
yscroll_mask = 0x0ff;
|
||||
}
|
||||
|
||||
VIDEO_START( aso )
|
||||
VIDEO_START( hal21 )
|
||||
{
|
||||
VIDEO_START_CALL(snk_3bpp_shadow);
|
||||
VIDEO_START_CALL(jcross);
|
||||
|
||||
fg_tilemap = tilemap_create(tnk3_get_fg_tile_info, tnk3_fg_scan_cols, 8, 8, 36, 28);
|
||||
bg_tilemap = tilemap_create(aso_get_bg_tile_info, tilemap_scan_cols, 8, 8, 64, 64);
|
||||
|
||||
tilemap_set_transparent_pen(fg_tilemap, 15);
|
||||
tilemap_set_scrolldy(fg_tilemap, 8, 8);
|
||||
|
||||
tilemap_set_scrolldx(bg_tilemap, 15+256, 24+256);
|
||||
tilemap_set_scrolldy(bg_tilemap, 8, -32);
|
||||
tilemap_set_scrolldy(bg_tilemap, 8, -32+256);
|
||||
|
||||
num_sprites = 50;
|
||||
yscroll_mask = 0x1ff;
|
||||
}
|
||||
|
||||
VIDEO_START( aso )
|
||||
{
|
||||
VIDEO_START_CALL(jcross);
|
||||
|
||||
tilemap_set_scrolldx(bg_tilemap, 15+256, 24+256);
|
||||
|
||||
num_sprites = 50;
|
||||
yscroll_mask = 0x1ff;
|
||||
}
|
||||
|
||||
|
||||
VIDEO_START( tnk3 )
|
||||
{
|
||||
VIDEO_START_CALL(snk_3bpp_shadow);
|
||||
@ -362,6 +357,16 @@ WRITE8_HANDLER( sgladiat_flipscreen_w )
|
||||
// other bits unknown
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( hal21_flipscreen_w )
|
||||
{
|
||||
flip_screen_set(data & 0x80);
|
||||
|
||||
tilemap_set_palette_offset(bg_tilemap, ((data & 0xf) ^ 8) << 4);
|
||||
tilemap_set_pen_data_offset(bg_tilemap, ((data & 0x20) << 3) * machine->gfx[1]->char_modulo);
|
||||
|
||||
// other bits unknown
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( jcross_scroll_msb_w )
|
||||
{
|
||||
bg_scrolly = (bg_scrolly & 0xff) | ((data & 0x10) << 4);
|
||||
|
Loading…
Reference in New Issue
Block a user