diff options
Diffstat (limited to 'src/mame/drivers/tattack.c')
-rw-r--r-- | src/mame/drivers/tattack.c | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/src/mame/drivers/tattack.c b/src/mame/drivers/tattack.c new file mode 100644 index 00000000000..098727cc721 --- /dev/null +++ b/src/mame/drivers/tattack.c @@ -0,0 +1,264 @@ +/**************************************************************************** + Time Attacker + + driver by Tomasz Slanina analog[at]op.pl + + Z80A, + xtal 8MHz, + dipsw 8-position x2, + volume pots x6, + 2114 ram x5, + ne555 + 7910CG + no proms + + TODO: + - colors + - sound + - game logic + +****************************************************************************/ + +#include "driver.h" + + +static tilemap *tmap; + +static TILE_GET_INFO( get_tile_info ) +{ + int code = videoram[tile_index]; + int color=colorram[tile_index]; + + if((color&1 ) || (color>15) ) + logerror("COLOR %i\n",color); + + color>>=1; + + SET_TILE_INFO( + 0, + code, + color, + 0); +} + +static VIDEO_UPDATE( tattack ) +{ + tilemap_mark_all_tiles_dirty(tmap); + tilemap_draw(bitmap,cliprect,tmap, 0,0); + return 0; +} + +static VIDEO_START( tattack ) +{ + tmap = tilemap_create( get_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32,32 ); +} + +static ADDRESS_MAP_START( mem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_ROM +// AM_RANGE(0x4000, 0x4000) AM_READNOP $315 + AM_RANGE(0x5000, 0x53ff) AM_RAM AM_BASE(&videoram) + AM_RANGE(0x7000, 0x73ff) AM_RAM AM_BASE(&colorram) //color map ? something else .. only bits 1-3 are used + AM_RANGE(0x6000, 0x6000) AM_READ(input_port_2_r) + AM_RANGE(0xa000, 0xa000) AM_READ(input_port_1_r) //dsw ? something else ? + AM_RANGE(0xc000, 0xc000) AM_READ(input_port_0_r) AM_WRITENOP + AM_RANGE(0xc001, 0xc002) AM_WRITENOP //bit 7 = strobe ($302) + AM_RANGE(0xc005, 0xc007) AM_WRITENOP + AM_RANGE(0xe000, 0xe3ff) AM_RAM +ADDRESS_MAP_END + +static INPUT_PORTS_START( tattack ) +PORT_START + PORT_DIPNAME( 0x01, 0x00, "1-01" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, "1-02" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "1-03" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, "1-04" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) + +PORT_START + PORT_DIPNAME( 0x01, 0x00, "DSW1 1" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) + + PORT_DIPNAME( 0x02, 0x00, "DSW1 2" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Time" ) + PORT_DIPSETTING( 0x04, "112" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPNAME( 0x08, 0x00, "DSW1 4" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, "DSW1 5" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, "DSW1 6" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, "DSW1 7" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, "DSW1 8" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + +PORT_START + PORT_DIPNAME( 0x01, 0x00, "DSW2 1" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, "DSW2 2" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "DSW2 3" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, "DSW2 4" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, "DSW2 5" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, "DSW2 6" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, "DSW2 7" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, "DSW2 8" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + +INPUT_PORTS_END + + +static gfx_layout charlayout = +{ + 8,8, + RGN_FRAC(1,1), + 1, + { 0 }, + { 0, 1, 2, 3, 4, 5, 6, 7}, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 +}; + + + +static GFXDECODE_START( tattack ) + GFXDECODE_ENTRY( REGION_GFX1, 0 , charlayout, 0, 1 ) +GFXDECODE_END + +static PALETTE_INIT( tattack ) +{ + int i,r,g,b; + for(i=0;i<8;i++) + { + if(i) + { + r=(i&1)?0xff:0; + g=(i&2)?0xff:0; + b=(i&4)?0xff:0; + } + else + r=g=b=128; + + palette_set_color(machine,2*i,MAKE_RGB(0x00,0x00,0x00)); + palette_set_color(machine,2*i+1,MAKE_RGB(r,g,b)); + } +} + + +static MACHINE_DRIVER_START( tattack ) + + /* basic machine hardware */ + MDRV_CPU_ADD(Z80, 8000000 / 2) /* 4 MHz ? */ + MDRV_CPU_PROGRAM_MAP(mem, 0) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) + MDRV_CPU_VBLANK_INT(irq0_line_hold,1) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(32*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) + MDRV_GFXDECODE(tattack) + MDRV_PALETTE_LENGTH(16) + MDRV_PALETTE_INIT(tattack ) + + MDRV_VIDEO_UPDATE(tattack) + MDRV_VIDEO_START(tattack) + + /* sound hardware */ + /* Discrete ???? */ + +MACHINE_DRIVER_END + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +ROM_START( tattack ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "rom.9a", 0x0000, 0x1000, CRC(47120994) SHA1(b6e90abbc50cba77df4c0aaf50d1f97b99e33b6d) ) + + ROM_REGION( 0x1000, REGION_GFX1, 0 ) + ROM_LOAD( "rom.6c", 0x0000, 0x1000, CRC(88ce45cf) SHA1(c7a43bfc9e9c2aeb75a98f723558bc88e53401a7) ) + +ROM_END + +static DRIVER_INIT(tattack) +{ + + UINT8 *rom = memory_region(REGION_CPU1); + + rom[0x1b4]=0; + rom[0x1b5]=0; + + rom[0x262]=0; + rom[0x263]=0; + rom[0x264]=0; + + rom[0x32a]=0; + rom[0x32b]=0; + rom[0x32c]=0; + +/* + possible jumps to 0 (protection checks?) + + rom[0x8a]=0; + rom[0x8b]=0; + rom[0x8c]=0; + + rom[0x99]=0; + rom[0x9a]=0; + rom[0x9b]=0; + + rom[0xd5]=0; + rom[0xd6]=0; + rom[0xd7]=0; + + rom[0x65a]=0; + rom[0x65b]=0; + rom[0x65c]=0; +*/ + +} + +GAME( 198?, tattack, 0, tattack, tattack, tattack, ROT270, "Shonan", "Time Attacker", GAME_NO_SOUND | GAME_IMPERFECT_COLORS | GAME_NOT_WORKING) |