/**************************************************************************** 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); } VIDEO_UPDATE( tattack ) { tilemap_mark_all_tiles_dirty(tmap); tilemap_draw(bitmap,cliprect,tmap, 0,0); return 0; } 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 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)