summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/tattack.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/tattack.c')
-rw-r--r--src/mame/drivers/tattack.c264
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)