summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/hitme.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/hitme.c')
-rw-r--r--src/mame/drivers/hitme.c575
1 files changed, 575 insertions, 0 deletions
diff --git a/src/mame/drivers/hitme.c b/src/mame/drivers/hitme.c
new file mode 100644
index 00000000000..4b3d442e93e
--- /dev/null
+++ b/src/mame/drivers/hitme.c
@@ -0,0 +1,575 @@
+/* Hit Me driver by the EMUL8, led by Dan Boris */
+
+/*
+
+ Hit Me (c) Ramtek 1976
+---------------------------------------
+
+ Memory map
+
+ 0000-07ff r Rom
+ 0c00-0eff w Video Ram
+ 1000-13ff r/w Scratch Ram
+
+
+*/
+
+#include "driver.h"
+#include "hitme.h"
+#include "sound/discrete.h"
+
+static tilemap *hitme_tilemap;
+static attotime timeout_time;
+static UINT8 *hitme_vidram;
+
+
+
+/*************************************
+ *
+ * Video RAM access
+ *
+ *************************************/
+
+static TILE_GET_INFO( get_hitme_tile_info )
+{
+ /* the code is the low 6 bits */
+ UINT8 code = hitme_vidram[tile_index] & 0x3f;
+ SET_TILE_INFO(0, code, 0, 0);
+}
+
+
+static WRITE8_HANDLER( hitme_vidram_w )
+{
+ /* mark this tile dirty */
+ hitme_vidram[offset] = data;
+ tilemap_mark_tile_dirty(hitme_tilemap, offset);
+}
+
+
+
+/*************************************
+ *
+ * Video start/update
+ *
+ *************************************/
+
+static VIDEO_START(hitme)
+{
+ hitme_tilemap = tilemap_create(get_hitme_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN, 8,10, 40,19);
+}
+
+
+static VIDEO_START(barricad)
+{
+ hitme_tilemap = tilemap_create(get_hitme_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN, 8,8, 32,24);
+}
+
+
+static VIDEO_UPDATE(hitme)
+{
+ /* the card width resistor comes from an input port, scaled to the range 0-25 kOhms */
+ double width_resist = readinputport(7) * 25000 / 100;
+ /* this triggers a oneshot for the following length of time */
+ double width_duration = 0.45 * 1000e-12 * width_resist;
+ /* the dot clock runs at the standard horizontal frequency * 320+16 clocks per scanline */
+ double dot_freq = 15750 * 336;
+ /* the number of pixels is the duration times the frequency */
+ int width_pixels = width_duration * dot_freq;
+ int x, y, xx, inv;
+ offs_t offs = 0;
+
+ /* start by drawing the tilemap */
+ tilemap_draw(bitmap,cliprect,hitme_tilemap,0,0);
+
+ /* now loop over and invert anything */
+ for (y = 0; y < 19; y++)
+ {
+ int dy = bitmap->rowpixels;
+ for (inv = x = 0; x < 40; x++, offs++)
+ {
+ /* if the high bit is set, reset the oneshot */
+ if (hitme_vidram[y*40+x] & 0x80)
+ inv = width_pixels;
+
+ /* invert pixels until we run out */
+ for (xx = 0; xx < 8 && inv; xx++, inv--)
+ {
+ UINT16 *dest = BITMAP_ADDR16(bitmap, y*10, x*8 + xx);
+ dest[0*dy] ^= 1;
+ dest[1*dy] ^= 1;
+ dest[2*dy] ^= 1;
+ dest[3*dy] ^= 1;
+ dest[4*dy] ^= 1;
+ dest[5*dy] ^= 1;
+ dest[6*dy] ^= 1;
+ dest[7*dy] ^= 1;
+ dest[8*dy] ^= 1;
+ dest[9*dy] ^= 1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+static VIDEO_UPDATE(barricad)
+{
+ tilemap_draw(bitmap,cliprect,hitme_tilemap,0,0);
+ return 0;
+}
+
+
+
+/*************************************
+ *
+ * Input ports
+ *
+ *************************************/
+
+static UINT8 read_port_and_t0(int port)
+{
+ UINT8 val = readinputport(port);
+ if (attotime_compare(timer_get_time(), timeout_time) > 0)
+ val ^= 0x80;
+ return val;
+}
+
+
+static UINT8 read_port_and_t0_and_hblank(int port)
+{
+ UINT8 val = read_port_and_t0(port);
+ if (video_screen_get_hpos(0) < (Machine->screen[0].width * 9 / 10))
+ val ^= 0x04;
+ return val;
+}
+
+
+static READ8_HANDLER( hitme_port_0_r )
+{
+ return read_port_and_t0_and_hblank(0);
+}
+
+
+static READ8_HANDLER( hitme_port_1_r )
+{
+ return read_port_and_t0(1);
+}
+
+
+static READ8_HANDLER( hitme_port_2_r )
+{
+ return read_port_and_t0_and_hblank(2);
+}
+
+
+static READ8_HANDLER( hitme_port_3_r )
+{
+ return read_port_and_t0(3);
+}
+
+
+
+/*************************************
+ *
+ * Output ports
+ *
+ *************************************/
+
+static WRITE8_HANDLER( output_port_0_w )
+{
+ /*
+ Note: We compute the timeout time on a write here. Unfortunately, the situation is
+ kind of weird, because the discrete sound system is also affected by this timeout.
+ In fact, it is very important that our timing calculation timeout AFTER the sound
+ system's equivalent computation, or else we will hang notes.
+ */
+ UINT8 raw_game_speed = readinputport(6);
+ double resistance = raw_game_speed * 25000 / 100;
+ attotime duration = attotime_make(0, ATTOSECONDS_PER_SECOND * 0.45 * 6.8e-6 * resistance * (data+1));
+ timeout_time = attotime_add(timer_get_time(), duration);
+
+ discrete_sound_w(HITME_DOWNCOUNT_VAL, data);
+ discrete_sound_w(HITME_OUT0, 1);
+}
+
+
+static WRITE8_HANDLER( output_port_1_w )
+{
+ discrete_sound_w(HITME_ENABLE_VAL, data);
+ discrete_sound_w(HITME_OUT1, 1);
+}
+
+
+
+/*************************************
+ *
+ * Memory maps
+ *
+ *************************************/
+
+/*
+ Note: the 8080 puts I/O port addresses out on the upper 8 address bits and asserts
+ IORQ. Most systems decode IORQ, but hitme doesn't, which means that all the I/O
+ port accesses can also be made via memory mapped accesses with the port number in the
+ upper 8 bits.
+*/
+
+static ADDRESS_MAP_START( hitme_map, ADDRESS_SPACE_PROGRAM, 8 )
+ ADDRESS_MAP_FLAGS(AMEF_ABITS(13))
+ AM_RANGE(0x0000, 0x07ff) AM_ROM
+ AM_RANGE(0x0c00, 0x0eff) AM_READWRITE(MRA8_RAM, hitme_vidram_w) AM_BASE(&hitme_vidram)
+ AM_RANGE(0x1000, 0x10ff) AM_MIRROR(0x300) AM_RAM
+ AM_RANGE(0x1400, 0x14ff) AM_READ(hitme_port_0_r)
+ AM_RANGE(0x1500, 0x15ff) AM_READ(hitme_port_1_r)
+ AM_RANGE(0x1600, 0x16ff) AM_READ(hitme_port_2_r)
+ AM_RANGE(0x1700, 0x17ff) AM_READ(hitme_port_3_r)
+ AM_RANGE(0x1800, 0x18ff) AM_READ(input_port_4_r)
+ AM_RANGE(0x1900, 0x19ff) AM_READ(input_port_5_r)
+ AM_RANGE(0x1d00, 0x1dff) AM_WRITE(output_port_0_w)
+ AM_RANGE(0x1e00, 0x1fff) AM_WRITE(output_port_1_w)
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( hitme_portmap, ADDRESS_SPACE_IO, 8 )
+ AM_RANGE(0x14, 0x14) AM_READ(hitme_port_0_r)
+ AM_RANGE(0x15, 0x15) AM_READ(hitme_port_1_r)
+ AM_RANGE(0x16, 0x16) AM_READ(hitme_port_2_r)
+ AM_RANGE(0x17, 0x17) AM_READ(hitme_port_3_r)
+ AM_RANGE(0x18, 0x18) AM_READ(input_port_4_r)
+ AM_RANGE(0x19, 0x19) AM_READ(input_port_5_r)
+ AM_RANGE(0x1d, 0x1d) AM_WRITE(output_port_0_w)
+ AM_RANGE(0x1e, 0x1f) AM_WRITE(output_port_1_w)
+ADDRESS_MAP_END
+
+
+
+/*************************************
+ *
+ * Graphics layouts
+ *
+ *************************************/
+
+/*
+ Note: the hitme video generator adds two blank lines to the beginning of each
+ row. In order to simulate this, we decode an extra two lines at the top of each
+ character.
+*/
+
+static const gfx_layout hitme_charlayout =
+{
+ 8,10,
+ RGN_FRAC(1,2),
+ 1,
+ { 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0x200*8, 0x200*8, 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8
+};
+
+static GFXDECODE_START( hitme )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, hitme_charlayout, 0, 2 )
+GFXDECODE_END
+
+
+static const gfx_layout barricad_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( barricad )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, barricad_charlayout, 0, 1 )
+GFXDECODE_END
+
+
+
+
+/*************************************
+ *
+ * Machine drivers
+ *
+ *************************************/
+
+static MACHINE_DRIVER_START( hitme )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(8080, 8945000/16)
+ MDRV_CPU_PROGRAM_MAP(hitme_map,0)
+ MDRV_CPU_IO_MAP(hitme_portmap,0)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(40*8, 19*10)
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 19*10-1)
+ MDRV_GFXDECODE(hitme)
+ MDRV_PALETTE_LENGTH(2)
+
+ MDRV_PALETTE_INIT(black_and_white)
+ MDRV_VIDEO_START(hitme)
+ MDRV_VIDEO_UPDATE(hitme)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+ MDRV_SOUND_ADD_TAG("discrete", DISCRETE, 0)
+ MDRV_SOUND_CONFIG_DISCRETE(hitme)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_DRIVER_END
+
+
+
+/*
+ Note: The Barricade rom is using a resolution of 32x24 which suggests slightly
+ different hardware from HitMe (40x19) however the screenshot on the arcade
+ flyer is using a 40x19 resolution. So is this a different version of
+ Barricade or is the resolution set by a dip switch?
+*/
+
+static MACHINE_DRIVER_START( barricad )
+ MDRV_IMPORT_FROM(hitme)
+
+ /* video hardware */
+ MDRV_SCREEN_SIZE(32*8, 24*8)
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 24*8-1)
+ MDRV_GFXDECODE(barricad)
+
+ MDRV_VIDEO_START(barricad)
+ MDRV_VIDEO_UPDATE(barricad)
+MACHINE_DRIVER_END
+
+
+
+/*************************************
+ *
+ * Input ports
+ *
+ *************************************/
+
+static INPUT_PORTS_START( hitme )
+ PORT_START
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) /* Start button */
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Hblank */
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* P1 Stand button */
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* P1 Hit button */
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) /* P1 Bet button */
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Time out counter (*TO) */
+
+ PORT_START
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Aux 2 dipswitch - Unused */
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* P2 Stand button */
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* P2 Hit button */
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) /* P2 Bet button */
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Time out counter (*TO) */
+
+ PORT_START
+ PORT_DIPNAME( 0x01, 0x00, "Extra Hand On Natural" ) /* Aux 1 dipswitch */
+ PORT_DIPSETTING( 0x00, DEF_STR ( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR ( On ) )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Hblank */
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) /* P3 Stand button */
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) /* P3 Hit button */
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) /* P3 Bet button */
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Time out counter (*TO) */
+
+ PORT_START
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Time out counter (TOC1) */
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Aux 2 dipswitch - Unused*/
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) /* P4 Stand button */
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) /* P4 Hit button */
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) /* P4 Bet button */
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Time out counter (*TO) */
+
+ PORT_START
+ PORT_DIPNAME( 0x07, 0x07, "Number of Chips" )
+ PORT_DIPSETTING( 0x00, "5 Chips" )
+ PORT_DIPSETTING( 0x01, "10 Chips" )
+ PORT_DIPSETTING( 0x02, "15 Chips" )
+ PORT_DIPSETTING( 0x03, "20 Chips" )
+ PORT_DIPSETTING( 0x04, "25 Chips" )
+ PORT_DIPSETTING( 0x05, "30 Chips" )
+ PORT_DIPSETTING( 0x06, "35 Chips" )
+ PORT_DIPSETTING( 0x07, "40 Chips" )
+ PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START
+ PORT_DIPNAME( 0x07, 0x00, "Number of Hands" )
+ PORT_DIPSETTING( 0x00, "5 Hands" )
+ PORT_DIPSETTING( 0x01, "10 Hands" )
+ PORT_DIPSETTING( 0x02, "15 Hands" )
+ PORT_DIPSETTING( 0x03, "20 Hands" )
+ PORT_DIPSETTING( 0x04, "25 Hands" )
+ PORT_DIPSETTING( 0x05, "30 Hands" )
+ PORT_DIPSETTING( 0x06, "35 Hands" )
+ PORT_DIPSETTING( 0x07, "40 Hands" )
+ PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ /* this is actually a variable resistor */
+ PORT_START_TAG("R3")
+ PORT_ADJUSTER(30, "Game Speed")
+
+ /* this is actually a variable resistor */
+ PORT_START
+ PORT_ADJUSTER(50, "Card Width")
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( barricad )
+ PORT_START
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) /* Start button */
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Hblank */
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Time out counter (*TO) */
+
+ PORT_START
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Aux 2 dipswitch - Unused */
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Time out counter (*TO) */
+
+ PORT_START
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* ??? */
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Always high */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Hblank */
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Time out counter (*TO) */
+
+ PORT_START
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Time out counter (TOC1) */
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Always high */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Aux 2 dipswitch - Unused*/
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Time out counter (*TO) */
+
+ /* On the flyer it says that barricade has both user adjustable points per
+ game, and speed. From experimenting it looks like points per game is the
+ same dipswitch as hitme's chips, and speed is hitme's hands. The flyer
+ says 1-7 points per games, but it really can go to 8. */
+
+ PORT_START
+ PORT_DIPNAME( 0x07, 0x07, "Points Per Game" )
+ PORT_DIPSETTING( 0x00, "1 Point" )
+ PORT_DIPSETTING( 0x01, "2 Points" )
+ PORT_DIPSETTING( 0x02, "3 Points" )
+ PORT_DIPSETTING( 0x03, "4 Points" )
+ PORT_DIPSETTING( 0x04, "5 Points" )
+ PORT_DIPSETTING( 0x05, "6 Points" )
+ PORT_DIPSETTING( 0x06, "7 Points" )
+ PORT_DIPSETTING( 0x07, "8 Points" )
+
+ /* These are like lives, you lose a point if you crash. The last person with
+ points wins the game. */
+
+ PORT_START
+ PORT_DIPNAME( 0x07, 0x00, "Game Speed" )
+ PORT_DIPSETTING( 0x00, "Fast Fast" )
+ PORT_DIPSETTING( 0x01, "7" )
+ PORT_DIPSETTING( 0x02, "6" )
+ PORT_DIPSETTING( 0x03, "5" )
+ PORT_DIPSETTING( 0x04, "4" )
+ PORT_DIPSETTING( 0x05, "3" )
+ PORT_DIPSETTING( 0x06, "2" )
+ PORT_DIPSETTING( 0x07, "Slow Slow" )
+
+ /* this is actually a variable resistor */
+ PORT_START_TAG("R3")
+ PORT_ADJUSTER(30, "Tone")
+INPUT_PORTS_END
+
+
+
+/*************************************
+ *
+ * ROM definitions
+ *
+ *************************************/
+
+ROM_START( hitme )
+ ROM_REGION( 0x2000, REGION_CPU1, ROMREGION_INVERT )
+ ROM_LOAD( "hm0.b7", 0x0000, 0x0200, CRC(6c48c50f) SHA1(42dc7c3461687e5be4393cc21d695bc84ae4f5dc) )
+ ROM_LOAD( "hm2.c7", 0x0200, 0x0200, CRC(25d47ba4) SHA1(6f3bb4ca6918dc07f37d0c0c7fe5ec53aa7171a5) )
+ ROM_LOAD( "hm4.d7", 0x0400, 0x0200, CRC(f8bfda8d) SHA1(48bbc106f8d80d6c1ad1a2c1575ce7d6452fbe9d) )
+ ROM_LOAD( "hm6.e7", 0x0600, 0x0200, CRC(8aa87118) SHA1(aca395a4f6a1981cd89ca99e05935d72adcb69ca) )
+
+ ROM_REGION( 0x0400, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_ERASE00 )
+ ROM_LOAD( "hmcg.h7", 0x0000, 0x0200, CRC(818f5fbe) SHA1(e2b3349e51ba57d14f3388ba93891bc6274b7a14) )
+ROM_END
+
+
+ROM_START( mblkjack )
+ ROM_REGION( 0x2000, REGION_CPU1, ROMREGION_INVERT )
+ ROM_LOAD( "mirco1.bin", 0x0000, 0x0200, CRC(aa796ad7) SHA1(2908bdb4ab17a2f5bc4da2f957906bf2b57afa50) )
+ ROM_LOAD( "hm2.c7", 0x0200, 0x0200, CRC(25d47ba4) SHA1(6f3bb4ca6918dc07f37d0c0c7fe5ec53aa7171a5) )
+ ROM_LOAD( "hm4.d7", 0x0400, 0x0200, CRC(f8bfda8d) SHA1(48bbc106f8d80d6c1ad1a2c1575ce7d6452fbe9d) )
+ ROM_LOAD( "hm6.e7", 0x0600, 0x0200, CRC(8aa87118) SHA1(aca395a4f6a1981cd89ca99e05935d72adcb69ca) )
+
+ ROM_REGION( 0x0400, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_ERASE00 )
+ ROM_LOAD( "hmcg.h7", 0x0000, 0x0200, CRC(818f5fbe) SHA1(e2b3349e51ba57d14f3388ba93891bc6274b7a14) )
+ROM_END
+
+
+ROM_START( barricad )
+ ROM_REGION( 0x2000, REGION_CPU1, ROMREGION_INVERT )
+ ROM_LOAD( "550806.7b", 0x0000, 0x0200, CRC(ea7f5da7) SHA1(c0ad37a0ffdb0500e8adc8fb9c4369e461307f84) )
+ ROM_LOAD( "550807.7c", 0x0200, 0x0200, CRC(0afef174) SHA1(2a7be988262b855bc81a1b0036fa9f2481d4d53b) )
+ ROM_LOAD( "550808.7d", 0x0400, 0x0200, CRC(6e02d260) SHA1(8a1640a1d56cbc34f74f07bc15e77db63635e8f5) )
+ ROM_LOAD( "550809.7e", 0x0600, 0x0200, CRC(d834a63f) SHA1(ffb631cc4f51a670c7cd30df1c79bf51301d9e9a) )
+
+ ROM_REGION( 0x0400, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "550805.7h", 0x0000, 0x0200, CRC(35197599) SHA1(3c49af89b1bc1d495e1d6265ff3feaf33c56facb) )
+ROM_END
+
+
+ROM_START( brickyrd )
+ ROM_REGION( 0x2000, REGION_CPU1, ROMREGION_INVERT )
+ ROM_LOAD( "550806.7b", 0x0000, 0x0200, CRC(ea7f5da7) SHA1(c0ad37a0ffdb0500e8adc8fb9c4369e461307f84) )
+ ROM_LOAD( "barricad.7c", 0x0200, 0x0200, CRC(94e1d1c0) SHA1(f6e6f9a783867c3602ba8cff6a18c47c5df987a4) )
+ ROM_LOAD( "550808.7d", 0x0400, 0x0200, CRC(6e02d260) SHA1(8a1640a1d56cbc34f74f07bc15e77db63635e8f5) )
+ ROM_LOAD( "barricad.7e", 0x0600, 0x0200, CRC(2b1d914f) SHA1(f1a6631949a7c62f5de39d58821e1be36b98629e) )
+
+ ROM_REGION( 0x0400, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "barricad.7h", 0x0000, 0x0200, CRC(c676fd22) SHA1(c37bf92f5a146a93bd977b2a05485addc00ab066) )
+ROM_END
+
+
+
+/*************************************
+ *
+ * Game drivers
+ *
+ *************************************/
+
+GAME( 1976, hitme, 0, hitme, hitme, 0, ROT0, "RamTek", "Hit Me", 0 )
+GAME( 197?, mblkjack, hitme, hitme, hitme, 0, ROT0, "Mirco", "Black Jack (Mirco)", 0 )
+GAME( 1976, barricad, 0, barricad, barricad, 0, ROT0, "RamTek", "Barricade", GAME_IMPERFECT_SOUND )
+GAME( 1976, brickyrd, barricad, barricad, barricad, 0, ROT0, "RamTek", "Brickyard", GAME_IMPERFECT_SOUND )