summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mcr68.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mcr68.c')
-rw-r--r--src/mame/drivers/mcr68.c1428
1 files changed, 1428 insertions, 0 deletions
diff --git a/src/mame/drivers/mcr68.c b/src/mame/drivers/mcr68.c
new file mode 100644
index 00000000000..d0c4421d5a8
--- /dev/null
+++ b/src/mame/drivers/mcr68.c
@@ -0,0 +1,1428 @@
+/***************************************************************************
+
+ Midway MCR-68k system
+
+ driver by Bryan McPhail, Aaron Giles
+
+ Games supported:
+ * Zwackery (Chip Squeak Deluxe)
+ * Xenopohobe (Sounds Good)
+ * Spy Hunter 2 (Sounds Good/Turbo Chip Squeak)
+ * Blasted (Sounds Good)
+ * Arch Rivals
+ * Tri-Sports
+ * Pigskin 621AD
+
+ Known bugs:
+ * none at this time
+
+****************************************************************************
+
+ Memory map
+
+****************************************************************************
+
+ ========================================================================
+ CPU #1
+ ========================================================================
+ 000000-03FFFF R xxxxxxxx xxxxxxxx Program ROM
+ 060000-063FFF R/W xxxxxxxx xxxxxxxx Program RAM
+ 070000-070FFF R/W xxxxxxxx xxxxxxxx Background video RAM
+ 071000-071FFF R/W xxxxxxxx xxxxxxxx Additional RAM
+ 080000-080FFF R/W xxxxxxxx xxxxxxxx Sprite RAM
+ 090000-0900FF W xxxxxxxx xxxxxxxx Palette RAM
+ 0A0000-0A000F R/W xxxxxxxx -------- M6840 I/O
+ 0B0000-0B0001 W -------- -------- Watchdog
+ 0C0000-0C0001 W -------- xxxxxxxx Sound I/O
+ 0D0000-0D0001 R xxxxxxxx xxxxxxxx External inputs
+ 0E0000-0E0001 R xxxxxxxx xxxxxxxx External inputs
+ 0F0000-0F0001 R xxxxxxxx xxxxxxxx External inputs
+ ========================================================================
+ Interrupts:
+ NMI ???
+ INT generated by CTC
+ ========================================================================
+ NOTE: Pigskin and Tri-Sports have similar memory maps; the addresses
+ are simply shuffled around
+ ========================================================================
+
+***************************************************************************/
+
+#include "driver.h"
+#include "audio/mcr.h"
+#include "audio/williams.h"
+#include "mcr.h"
+
+
+
+/*************************************
+ *
+ * Statics
+ *
+ *************************************/
+
+static UINT16 control_word;
+static UINT8 protection_data[5];
+
+
+
+/*************************************
+ *
+ * Zwackery-specific handlers
+ *
+ *************************************/
+
+READ8_HANDLER( zwackery_port_2_r )
+{
+ int result = readinputport(2);
+ int wheel = readinputport(5);
+
+ return result | ((wheel >> 2) & 0x3e);
+}
+
+
+static READ16_HANDLER( zwackery_6840_r )
+{
+ /* Zwackery does a timer test: */
+ /* It loads $1388 into one of the timers clocked by E */
+ /* Then it sits in a tight loop counting down from $4E4 */
+ /* BTST #$1,($2,A0) */
+ /* DBNE D1,*-6 */
+ /* It expects D1 to end up between 0 and 5; in order to */
+ /* make this happen, we must assume that reads from the */
+ /* 6840 take 14 additional cycles */
+ activecpu_adjust_icount(-14);
+ return mcr68_6840_upper_r(offset,0);
+}
+
+
+
+/*************************************
+ *
+ * Xenophobe-specific handlers
+ *
+ *************************************/
+
+static WRITE16_HANDLER( xenophobe_control_w )
+{
+ COMBINE_DATA(&control_word);
+/* soundsgood_reset_w(~control_word & 0x0020);*/
+ soundsgood_data_w(offset, ((control_word & 0x000f) << 1) | ((control_word & 0x0010) >> 4));
+}
+
+
+
+/*************************************
+ *
+ * Blasted-specific handlers
+ *
+ *************************************/
+
+static WRITE16_HANDLER( blasted_control_w )
+{
+ COMBINE_DATA(&control_word);
+/* soundsgood_reset_w(~control_word & 0x0020);*/
+ soundsgood_data_w(offset, (control_word >> 8) & 0x1f);
+}
+
+
+
+/*************************************
+ *
+ * Spy Hunter 2-specific handlers
+ *
+ *************************************/
+
+static READ16_HANDLER( spyhunt2_port_0_r )
+{
+ int result = readinputportbytag("IN0");
+ int which = (control_word >> 3) & 3;
+ int analog = readinputport(3 + which);
+ return result | ((soundsgood_status_r(0) & 1) << 5) | (analog << 8);
+}
+
+
+static READ16_HANDLER( spyhunt2_port_1_r )
+{
+ int result = readinputportbytag("IN1");
+ return result | ((turbocs_status_r(0) & 1) << 7);
+}
+
+
+static WRITE16_HANDLER( spyhunt2_control_w )
+{
+ COMBINE_DATA(&control_word);
+
+/* turbocs_reset_w(~control_word & 0x0080);*/
+ turbocs_data_w(offset, (control_word >> 8) & 0x001f);
+
+ soundsgood_reset_w(~control_word & 0x2000);
+ soundsgood_data_w(offset, (control_word >> 8) & 0x001f);
+}
+
+
+
+/*************************************
+ *
+ * Arch Rivals-specific handlers
+ *
+ *************************************/
+
+/*
+ * Williams 49-way joystick
+ *
+ * The joystick works on a 7x7 grid system:
+ *
+ * + + + | + + +
+ * + + + | + + +
+ * + + + | + + +
+ * ------+------
+ * + + + | + + +
+ * + + + | + + +
+ * + + + | + + +
+ *
+ * Each axis has 7 positions, reported as follows
+ * in 4 bits/axis:
+ *
+ * 0111 = left/up full
+ * 0011 = left/up 2/3
+ * 0001 = left/up 1/3
+ * 0000 = center
+ * 1100 = right/down 1/3
+ * 1110 = right/down 2/3
+ * 1111 = right/down full
+ */
+
+static const UINT8 translate49[7] = { 0x7, 0x3, 0x1, 0x0, 0xc, 0xe, 0xf };
+
+static READ16_HANDLER( archrivl_port_1_r )
+{
+ return (translate49[readinputportbytag("49WAYY2") >> 4] << 12) |
+ (translate49[readinputportbytag("49WAYX2") >> 4] << 8) |
+ (translate49[readinputportbytag("49WAYY1") >> 4] << 4) |
+ (translate49[readinputportbytag("49WAYX1") >> 4] << 0);
+}
+
+
+static WRITE16_HANDLER( archrivl_control_w )
+{
+ COMBINE_DATA(&control_word);
+ williams_cvsd_reset_w(~control_word & 0x0400);
+ williams_cvsd_data_w(control_word & 0x3ff);
+}
+
+
+
+/*************************************
+ *
+ * Pigskin-specific handlers
+ *
+ *************************************/
+
+static WRITE16_HANDLER( pigskin_protection_w )
+{
+ /* ignore upper-byte only */
+ if (ACCESSING_LSB)
+ {
+ /* track the last 5 bytes */
+ protection_data[0] = protection_data[1];
+ protection_data[1] = protection_data[2];
+ protection_data[2] = protection_data[3];
+ protection_data[3] = protection_data[4];
+ protection_data[4] = data & 0xff;
+
+ logerror("%06X:protection_w=%02X\n", activecpu_get_previouspc(), data & 0xff);
+ }
+}
+
+
+static READ16_HANDLER( pigskin_protection_r )
+{
+ /* based on the last 5 bytes return a value */
+ if (protection_data[4] == 0xe3 && protection_data[3] == 0x94)
+ return 0x00; /* must be <= 1 */
+ if (protection_data[4] == 0xc7 && protection_data[3] == 0x7b && protection_data[2] == 0x36)
+ return 0x00; /* must be <= 1 */
+ if (protection_data[4] == 0xc7 && protection_data[3] == 0x7b)
+ return 0x07; /* must be > 5 */
+ if (protection_data[4] == 0xc7 && protection_data[3] == 0x1f && protection_data[2] == 0x03 &&
+ protection_data[1] == 0x25 && protection_data[0] == 0x36)
+ return 0x00; /* must be < 3 */
+
+ logerror("Protection read after unrecognized sequence: %02X %02X %02X %02X %02X\n",
+ protection_data[0], protection_data[1], protection_data[2], protection_data[3], protection_data[4]);
+
+ return 0x00;
+}
+
+
+static READ16_HANDLER( pigskin_port_1_r )
+{
+ /* see archrivl_port_1_r for 49-way joystick description */
+ return readinputportbytag("IN1") |
+ (translate49[readinputportbytag("49WAYX1") >> 4] << 12) |
+ (translate49[readinputportbytag("49WAYY1") >> 4] << 8);
+}
+
+
+static READ16_HANDLER( pigskin_port_2_r )
+{
+ /* see archrivl_port_1_r for 49-way joystick description */
+ return readinputportbytag("DSW") |
+ (translate49[readinputportbytag("49WAYX2") >> 4] << 12) |
+ (translate49[readinputportbytag("49WAYY2") >> 4] << 8);
+}
+
+
+
+/*************************************
+ *
+ * Tri-Sports-specific handlers
+ *
+ *************************************/
+
+static READ16_HANDLER( trisport_port_1_r )
+{
+ int xaxis = (INT8)readinputportbytag("AN1");
+ int yaxis = (INT8)readinputportbytag("AN2");
+ int result = readinputportbytag("IN1");
+
+ result |= (xaxis & 0x3c) << 6;
+ result |= (yaxis & 0x3c) << 10;
+
+ return result;
+}
+
+
+
+/*************************************
+ *
+ * Main CPU memory handlers
+ *
+ *************************************/
+
+static ADDRESS_MAP_START( mcr68_map, ADDRESS_SPACE_PROGRAM, 16 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(21) | AMEF_UNMAP(1) )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x060000, 0x063fff) AM_RAM
+ AM_RANGE(0x070000, 0x070fff) AM_READWRITE(MRA16_RAM, mcr68_videoram_w) AM_BASE(&videoram16) AM_SIZE(&videoram_size)
+ AM_RANGE(0x071000, 0x071fff) AM_RAM
+ AM_RANGE(0x080000, 0x080fff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ AM_RANGE(0x090000, 0x09007f) AM_WRITE(mcr68_paletteram_w) AM_BASE(&paletteram16)
+ AM_RANGE(0x0a0000, 0x0a000f) AM_READWRITE(mcr68_6840_upper_r, mcr68_6840_upper_w)
+ AM_RANGE(0x0b0000, 0x0bffff) AM_WRITE(watchdog_reset16_w)
+ AM_RANGE(0x0d0000, 0x0dffff) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x0e0000, 0x0effff) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x0f0000, 0x0fffff) AM_READ(input_port_2_word_r)
+ADDRESS_MAP_END
+
+
+
+/*************************************
+ *
+ * Zwackery main CPU memory handlers
+ *
+ *************************************/
+
+static ADDRESS_MAP_START( zwackery_map, ADDRESS_SPACE_PROGRAM, 16 )
+ ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
+ AM_RANGE(0x000000, 0x037fff) AM_ROM
+ AM_RANGE(0x080000, 0x080fff) AM_RAM
+ AM_RANGE(0x084000, 0x084fff) AM_RAM
+ AM_RANGE(0x100000, 0x10000f) AM_READWRITE(zwackery_6840_r, mcr68_6840_upper_w)
+ AM_RANGE(0x104000, 0x104007) AM_READWRITE(pia_2_msb_r, pia_2_msb_w)
+ AM_RANGE(0x108000, 0x108007) AM_READWRITE(pia_3_lsb_r, pia_3_lsb_w)
+ AM_RANGE(0x10c000, 0x10c007) AM_READWRITE(pia_4_lsb_r, pia_4_lsb_w)
+ AM_RANGE(0x800000, 0x800fff) AM_READWRITE(MRA16_RAM, zwackery_videoram_w) AM_BASE(&videoram16) AM_SIZE(&videoram_size)
+ AM_RANGE(0x802000, 0x803fff) AM_READWRITE(MRA16_RAM, zwackery_paletteram_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xc00000, 0xc00fff) AM_READWRITE(MRA16_RAM, zwackery_spriteram_w) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ADDRESS_MAP_END
+
+
+
+/*************************************
+ *
+ * Pigskin CPU memory handlers
+ *
+ *************************************/
+
+static ADDRESS_MAP_START( pigskin_map, ADDRESS_SPACE_PROGRAM, 16 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(21) | AMEF_UNMAP(1) )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x080000, 0x08ffff) AM_READ(pigskin_port_1_r)
+ AM_RANGE(0x0a0000, 0x0affff) AM_READ(pigskin_port_2_r)
+ AM_RANGE(0x0c0000, 0x0c007f) AM_WRITE(mcr68_paletteram_w) AM_BASE(&paletteram16)
+ AM_RANGE(0x0e0000, 0x0effff) AM_WRITE(watchdog_reset16_w)
+ AM_RANGE(0x100000, 0x100fff) AM_READWRITE(MRA16_RAM, mcr68_videoram_w) AM_BASE(&videoram16) AM_SIZE(&videoram_size)
+ AM_RANGE(0x120000, 0x120001) AM_READWRITE(pigskin_protection_r, pigskin_protection_w)
+ AM_RANGE(0x140000, 0x143fff) AM_RAM
+ AM_RANGE(0x160000, 0x1607ff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ AM_RANGE(0x180000, 0x18000f) AM_READWRITE(mcr68_6840_upper_r, mcr68_6840_upper_w)
+ AM_RANGE(0x1a0000, 0x1affff) AM_WRITE(archrivl_control_w)
+ AM_RANGE(0x1e0000, 0x1effff) AM_READ(input_port_0_word_r)
+ADDRESS_MAP_END
+
+
+
+/*************************************
+ *
+ * Tri-Sports CPU memory handlers
+ *
+ *************************************/
+
+static ADDRESS_MAP_START( trisport_map, ADDRESS_SPACE_PROGRAM, 16 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(21) | AMEF_UNMAP(1) )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x080000, 0x08ffff) AM_READ(trisport_port_1_r)
+ AM_RANGE(0x0a0000, 0x0affff) AM_READ(input_port_2_word_r)
+ AM_RANGE(0x100000, 0x103fff) AM_RAM AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x120000, 0x12007f) AM_WRITE(mcr68_paletteram_w) AM_BASE(&paletteram16)
+ AM_RANGE(0x140000, 0x1407ff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
+ AM_RANGE(0x160000, 0x160fff) AM_READWRITE(MRA16_RAM, mcr68_videoram_w) AM_BASE(&videoram16) AM_SIZE(&videoram_size)
+ AM_RANGE(0x180000, 0x18000f) AM_READWRITE(mcr68_6840_upper_r, mcr68_6840_upper_w)
+ AM_RANGE(0x1a0000, 0x1affff) AM_WRITE(archrivl_control_w)
+ AM_RANGE(0x1c0000, 0x1cffff) AM_WRITE(watchdog_reset16_w)
+ AM_RANGE(0x1e0000, 0x1effff) AM_READ(input_port_0_word_r)
+ADDRESS_MAP_END
+
+
+
+/*************************************
+ *
+ * Port definitions
+ *
+ *************************************/
+
+static INPUT_PORTS_START( zwackery )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_SERVICE( 0x0010, IP_ACTIVE_LOW )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* sword */
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_SPECIAL ) /* sound communications */
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* spell up */
+ PORT_BIT( 0x3e, IP_ACTIVE_HIGH, IPT_UNUSED ) /* encoder wheel */
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* shield */
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) /* spell down */
+
+ PORT_START_TAG("IN3")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x07, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x38, 0x00, "Buy-in" )
+ PORT_DIPSETTING( 0x00, "1 coin" )
+ PORT_DIPSETTING( 0x08, "2 coins" )
+ PORT_DIPSETTING( 0x10, "3 coins" )
+ PORT_DIPSETTING( 0x18, "4 coins" )
+ PORT_DIPSETTING( 0x20, "5 coins" )
+ PORT_DIPSETTING( 0x28, "6 coins" )
+ PORT_DIPSETTING( 0x30, "7 coins" )
+ PORT_DIPSETTING( 0x38, DEF_STR( None ) )
+ PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( Easier ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Harder ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Hardest ) )
+
+ PORT_START_TAG("IN5")
+ PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_REVERSE
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( xenophob )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0018, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("DSW")
+ PORT_BIT( 0x0003, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Free_Play ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Coins per Life Unit" )
+ PORT_DIPSETTING( 0x0008, "1" )
+ PORT_DIPSETTING( 0x0000, "2" )
+ PORT_DIPNAME( 0x0010, 0x0010, "Life Unit" )
+ PORT_DIPSETTING( 0x0010, "1000" )
+ PORT_DIPSETTING( 0x0000, "2000" )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( On ) )
+ PORT_DIPNAME( 0x00c0, 0x0000, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Hard ) )
+/* PORT_DIPSETTING( 0x00c0, DEF_STR( Medium ) )*/
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( spyhunt2 )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* SG status */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Oddly enough, if you assign this control to a key, it makes both player wheels go left to fifteen */
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME ("P2 1st Gear")/* 1st gear */
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) PORT_NAME ("P2 2nd Gear")/* 2nd gear */
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(2) PORT_NAME ("P2 3rd Gear")/* 3rd gear */
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME ("P1 1st Gear")/* 1st gear */
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_NAME ("P1 2nd Gear")/* 2nd gear */
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(1) PORT_NAME ("P1 3rd Gear")/* 3rd gear */
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* TCS status */
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME ("P2 L Trigger")/* Left Trigger */
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME ("P2 L Button")/* Left Button */
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME ("P2 R Trigger")/* Right Trigger */
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME ("P2 R Button")/* Right Button */
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME ("P1 L Trigger")/* Left Trigger */
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME ("P1 L Button")/* Left Button */
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME ("P1 R Trigger")/* Right Trigger */
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME ("P1 R Button")/* Right Button */
+
+ PORT_START_TAG("IN3") /* dipswitches */
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( 1C_2C ) )
+ /*PORT_DIPSETTING( 0x0000, DEF_STR( 1C_2C ) )*/
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Free_Play ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0018, 0x0008, "Point Threshholds" )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0060, 0x0060, "Free Timer After" )
+ PORT_DIPSETTING( 0x0000, "30 sec" )
+ PORT_DIPSETTING( 0x0040, "45 sec" )
+ PORT_DIPSETTING( 0x0060, "60 sec" )
+ PORT_DIPSETTING( 0x0020, "90 sec" )
+ PORT_BIT( 0x0080, 0x0080, IPT_DIPSWITCH_NAME ) PORT_NAME("Rack Advance (Cheat)") PORT_CODE(KEYCODE_F1)
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("AN1") /* analog ports for steering and pedals */
+ PORT_BIT( 0xff, 0x30, IPT_PEDAL ) PORT_MINMAX(0x30,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(2)
+
+ PORT_START_TAG("AN2")
+ PORT_BIT( 0xff, 0x30, IPT_PEDAL ) PORT_MINMAX(0x30,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(1)
+
+ PORT_START_TAG("AN3")
+ PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(80) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(2)
+
+ PORT_START_TAG("AN4")
+ PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(80) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(1)
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( blasted )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED/* credit w/bill */ )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED/* credit 1 w/bill */ )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED/* credit 2 w/bill */ )
+ PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN2")
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( 1C_2C ) )
+ /*PORT_DIPSETTING( 0x0000, DEF_STR( 1C_2C ) )*/
+ PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) )
+/* PORT_DIPSETTING( 0x000c, DEF_STR( Medium ) )*/
+ PORT_DIPNAME( 0x0020, 0x0020, "Dollar Receptor" )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_BIT( 0x0080, 0x0080, IPT_DIPSWITCH_NAME ) PORT_NAME("Rack Advance (Cheat)") PORT_CODE(KEYCODE_F1)
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( archrivl )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x000c, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0c00, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) /* player 1/2 joysticks go here */
+
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Game_Time ) )
+ PORT_DIPSETTING( 0x0003, "Preset Time" )
+ PORT_DIPSETTING( 0x0002, "Preset + 10sec" )
+ PORT_DIPSETTING( 0x0001, "Preset + 20sec" )
+ PORT_DIPSETTING( 0x0000, "Preset + 30sec" )
+ PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x0014, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x001c, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x0020, 0x0020, "Team Names" )
+ PORT_DIPSETTING( 0x0020, "Default" )
+ PORT_DIPSETTING( 0x0000, "Hometown Heroes" )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("49WAYX1") /* converted to standard 49-way inputs */
+ PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_PLAYER(1) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
+
+ PORT_START_TAG("49WAYY1") /* converted to standard 49-way inputs */
+ PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_PLAYER(1) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
+
+ PORT_START_TAG("49WAYX2") /* converted to standard 49-way inputs */
+ PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_PLAYER(2) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
+
+ PORT_START_TAG("49WAYY2") /* converted to standard 49-way inputs */
+ PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_PLAYER(2) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( pigskin )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_SERVICE( 0x0020, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) /* player 1 joystick goes here */
+
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Game_Time ) )
+ PORT_DIPSETTING( 0x0000, "Shortest" )
+ PORT_DIPSETTING( 0x0002, "Short" )
+ PORT_DIPSETTING( 0x0003, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x0001, "Long" )
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ PORT_DIPSETTING( 0x0004, "Set Your Own" )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, "Test Switch" )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, "Coin Chutes" )
+ PORT_DIPSETTING( 0x0000, "Individual" )
+ PORT_DIPSETTING( 0x0040, "Common" )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Joystick ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Standard ) )
+ PORT_DIPSETTING( 0x0000, "Rotated" )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) /* player 2 joystick goes here */
+
+ PORT_START_TAG("49WAYX1") /* converted to standard 49-way inputs */
+ PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_PLAYER(1) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE
+
+ PORT_START_TAG("49WAYY1") /* converted to standard 49-way inputs */
+ PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_PLAYER(1) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
+
+ PORT_START_TAG("49WAYX2") /* converted to standard 49-way inputs */
+ PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_PLAYER(2) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE
+
+ PORT_START_TAG("49WAYY2") /* converted to standard 49-way inputs */
+ PORT_BIT( 0xff, 0x38, IPT_AD_STICK_Y ) PORT_PLAYER(2) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( trisport )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x000c, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_SERVICE( 0x0020, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0xc000, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) /* analog controls go here */
+
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0005, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Free_Play ) )
+ PORT_DIPSETTING( 0x0000, "Battery Options" )
+ PORT_DIPNAME( 0x0018, 0x0018, "Pool Turns" )
+ PORT_DIPSETTING( 0x0010, "5" )
+ PORT_DIPSETTING( 0x0008, "6" )
+ PORT_DIPSETTING( 0x0018, "7" )
+ PORT_DIPSETTING( 0x0000, "8" )
+ PORT_DIPNAME( 0x0020, 0x0020, "Bowling Difficulty" )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Standard ) )
+ PORT_DIPSETTING( 0x0000, "Advanced" )
+ PORT_DIPNAME( 0x0040, 0x0040, "Shot Timer" )
+ PORT_DIPSETTING( 0x0000, "Slower" )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Standard ) )
+ PORT_DIPNAME( 0x0080, 0x0080, "Golf Holes" )
+ PORT_DIPSETTING( 0x0080, "3" )
+ PORT_DIPSETTING( 0x0000, "4" )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START_TAG("AN1")
+ PORT_BIT( 0xff, 0, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(1)
+
+ PORT_START_TAG("AN2")
+ PORT_BIT( 0xff, 0, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_REVERSE PORT_PLAYER(1)
+INPUT_PORTS_END
+
+
+
+/*************************************
+ *
+ * Graphics definitions
+ *
+ *************************************/
+
+static const gfx_layout zwackery_layout =
+{
+ 16,16,
+ RGN_FRAC(1,2),
+ 8,
+ { 0, 0, 0, 0, 0, 0, 0, 0 },
+ { STEP4(3,-1), STEP4(11,-1), STEP4(19,-1), STEP4(27,-1) },
+ { 4, RGN_FRAC(1,2)+4, 0, RGN_FRAC(1,2)+0, 36, RGN_FRAC(1,2)+36, 32, RGN_FRAC(1,2)+32,
+ 68, RGN_FRAC(1,2)+68, 64, RGN_FRAC(1,2)+64, 100, RGN_FRAC(1,2)+100, 96, RGN_FRAC(1,2)+96 },
+ 128
+};
+
+static GFXDECODE_START( mcr68 )
+ GFXDECODE_SCALE( REGION_GFX1, 0, mcr_bg_layout, 0, 4, 2, 2 )
+ GFXDECODE_ENTRY( REGION_GFX2, 0, mcr_sprite_layout, 0, 4 )
+GFXDECODE_END
+
+static GFXDECODE_START( zwackery )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, zwackery_layout, 0, 16 )
+ GFXDECODE_ENTRY( REGION_GFX2, 0, mcr_sprite_layout, 0x800, 32 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, zwackery_layout, 0, 16 ) /* yes, an extra copy */
+GFXDECODE_END
+
+
+
+/*************************************
+ *
+ * Machine drivers
+ *
+ *************************************/
+
+/*=================================================================
+
+ Timing for these games is crucial. They all use the 6840 timer
+ to preemptively multitask during each frame. The clock on the
+ 6840 timer is taken from the 68000's E clock, which runs at
+ 1/10th the speed of the 68000 itself.
+
+ All the games run in a sequence of six steps per frame, using
+ counter 1 on the 6840 to time each step. The sum total of the
+ 6 programmed steps for each game determines how many E clocks
+ should be generated per frame, which in turn determines the
+ clock we should expect the CPU to have.
+
+ Ideal CPU timings, based on counter usage:
+
+ Zwackery: 7652400
+ Xenophobe: 7723800
+ Spy Hunter 2: 7723800
+ Blasted: 7798800
+ Arch Rivals: 7799100
+ Pigskin: 9211200
+ Tri-Sports: 9211200
+
+ Currently, we are using the Xenophobe CPU for the first four
+ until we spot problems.
+
+=================================================================*/
+
+static MACHINE_DRIVER_START( zwackery )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(M68000, 7652400)
+ MDRV_CPU_PROGRAM_MAP(zwackery_map,0)
+ MDRV_CPU_VBLANK_INT(mcr68_interrupt,1)
+
+ MDRV_SCREEN_REFRESH_RATE(30)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_30HZ_VBLANK_DURATION)
+// MDRV_WATCHDOG_VBLANK_INIT(8)
+ MDRV_MACHINE_START(zwackery)
+ MDRV_MACHINE_RESET(zwackery)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(32*16, 30*16)
+ MDRV_SCREEN_VISIBLE_AREA(0, 32*16-1, 0, 30*16-1)
+ MDRV_GFXDECODE(zwackery)
+ MDRV_PALETTE_LENGTH(4096)
+
+ MDRV_VIDEO_START(zwackery)
+ MDRV_VIDEO_UPDATE(zwackery)
+
+ /* sound hardware */
+ MDRV_IMPORT_FROM(chip_squeak_deluxe)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( mcr68 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD_TAG("main", M68000, 7723800)
+ MDRV_CPU_PROGRAM_MAP(mcr68_map,0)
+ MDRV_CPU_VBLANK_INT(mcr68_interrupt,1)
+
+ MDRV_SCREEN_REFRESH_RATE(30)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_30HZ_VBLANK_DURATION)
+ MDRV_WATCHDOG_VBLANK_INIT(8)
+ MDRV_MACHINE_START(mcr68)
+ MDRV_MACHINE_RESET(mcr68)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(32*16, 30*16)
+ MDRV_SCREEN_VISIBLE_AREA(0, 32*16-1, 0, 30*16-1)
+ MDRV_GFXDECODE(mcr68)
+ MDRV_PALETTE_LENGTH(64)
+
+ MDRV_VIDEO_START(mcr68)
+ MDRV_VIDEO_UPDATE(mcr68)
+
+ /* sound hardware -- determined by specific machine */
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( xenophob )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mcr68)
+ MDRV_IMPORT_FROM(sounds_good)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( spyhunt2 )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mcr68)
+ MDRV_IMPORT_FROM(turbo_chip_squeak_plus_sounds_good)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( archrivl )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mcr68)
+ MDRV_IMPORT_FROM(williams_cvsd_sound)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( pigskin )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mcr68)
+ MDRV_IMPORT_FROM(williams_cvsd_sound)
+
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(pigskin_map,0)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( trisport )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(mcr68)
+ MDRV_IMPORT_FROM(williams_cvsd_sound)
+
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(trisport_map,0)
+
+ MDRV_NVRAM_HANDLER(generic_0fill)
+MACHINE_DRIVER_END
+
+
+
+/*************************************
+ *
+ * ROM definitions
+ *
+ *************************************/
+
+ROM_START( zwackery )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "pro0.bin", 0x00000, 0x4000, CRC(6fb9731c) SHA1(ee5b297ef2b4cf20df5e776f1c585b51f174bfa7) )
+ ROM_LOAD16_BYTE( "pro1.bin", 0x00001, 0x4000, CRC(84b92555) SHA1(9b4af81374828c1742c1e13fc425eea2973b0867) )
+ ROM_LOAD16_BYTE( "pro2.bin", 0x08000, 0x4000, CRC(e6977a2a) SHA1(602bf3f7e0f4080cb5b72d8fd3ee9fd11f27c558) )
+ ROM_LOAD16_BYTE( "pro3.bin", 0x08001, 0x4000, CRC(f5d0a60e) SHA1(7e0e4936cb37ac16d6db5533ae4aecdfb07ead93) )
+ ROM_LOAD16_BYTE( "pro4.bin", 0x10000, 0x4000, CRC(ec5841d9) SHA1(4bafe614e8993994b0ea9aedc8dc2474361e4594) )
+ ROM_LOAD16_BYTE( "pro5.bin", 0x10001, 0x4000, CRC(d7d99ce0) SHA1(fdf428ab9c96dae555d49bac47495613ba265452) )
+ ROM_LOAD16_BYTE( "pro6.bin", 0x18000, 0x4000, CRC(b9fe7bf5) SHA1(a94f80f49b4520a2c1098eee8983560b4ecdf3d5) )
+ ROM_LOAD16_BYTE( "pro7.bin", 0x18001, 0x4000, CRC(5e261b3b) SHA1(dcf99f528c9e3b4f8b52d413c088559bfb37d733) )
+ ROM_LOAD16_BYTE( "pro8.bin", 0x20000, 0x4000, CRC(55e380a5) SHA1(e3fef8486858cd714086449327a93b4a70ae73ff) )
+ ROM_LOAD16_BYTE( "pro9.bin", 0x20001, 0x4000, CRC(12249dca) SHA1(154170286047ea78645d45dfdd895a597dad17da) )
+ ROM_LOAD16_BYTE( "pro10.bin", 0x28000, 0x4000, CRC(6a39a8ca) SHA1(8ac9c3e60dc6f1918bfb95acf3ee170cedfb20ea) )
+ ROM_LOAD16_BYTE( "pro11.bin", 0x28001, 0x4000, CRC(ad6b45bc) SHA1(118496e898654b028f008a3d493e693ba000ef38) )
+ ROM_LOAD16_BYTE( "pro12.bin", 0x30000, 0x4000, CRC(e2d25e1f) SHA1(5d8ff303441eccf431422b453a173983a4513630) )
+ ROM_LOAD16_BYTE( "pro13.bin", 0x30001, 0x4000, CRC(e131f9b8) SHA1(08b131f2acc84d4c2c931bfd24e7de3d92a8a817) )
+
+ ROM_REGION( 0x20000, REGION_CPU2, 0 )
+ ROM_LOAD16_BYTE( "csd7.bin", 0x00000, 0x2000, CRC(5501f54b) SHA1(84c0851fb868e81400cfe3ebfd7b91fe98a47bac) )
+ ROM_LOAD16_BYTE( "csd17.bin", 0x00001, 0x2000, CRC(2e482580) SHA1(92bd3e64ff580800ee16579d97bcb8b3bd9f755c) )
+ ROM_LOAD16_BYTE( "csd8.bin", 0x04000, 0x2000, CRC(13366575) SHA1(bcf25a7d4c6b2ccd7cd9978edafc66ef0cadfe72) )
+ ROM_LOAD16_BYTE( "csd18.bin", 0x04001, 0x2000, CRC(bcfe5820) SHA1(ca32daa645851a2373b3cdb8a5e63ebda84aa762) )
+
+ ROM_REGION( 0x8000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "tileh.bin", 0x00000, 0x4000, CRC(a7237eb1) SHA1(197e5838ac2bc732ae9eb33a9257b9391d50abf8) )
+ ROM_LOAD( "tileg.bin", 0x04000, 0x4000, CRC(626cc69b) SHA1(86142bafa78f45d1a0bed0b83f3558b21384fa1a) )
+
+ ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "spr6h.bin", 0x00000, 0x4000, CRC(a51158dc) SHA1(8d3b0054950443fdf57f83dcb973d05f6c7ad9c8) )
+ ROM_LOAD( "spr7h.bin", 0x04000, 0x4000, CRC(941feecf) SHA1(8e88c956332e78dc7e55139879f2272116415714) )
+ ROM_LOAD( "spr6j.bin", 0x08000, 0x4000, CRC(f3eef316) SHA1(026e18bdfdda8cc9d0774e6d9d758686bf16992c) )
+ ROM_LOAD( "spr7j.bin", 0x0c000, 0x4000, CRC(a8a34033) SHA1(abd9fde84bb079c84126ad04d584ec03b44b60cd) )
+ ROM_LOAD( "spr10h.bin", 0x10000, 0x4000, CRC(a99daea6) SHA1(c323e05f398b7e9e04b75fd8ac5e8ab675236d66) )
+ ROM_LOAD( "spr11h.bin", 0x14000, 0x4000, CRC(c1a767fb) SHA1(c16e09b39b09d409b534ce4c53366e43237a3759) )
+ ROM_LOAD( "spr10j.bin", 0x18000, 0x4000, CRC(4dd04376) SHA1(069b64397e7a961c1fc246671472f759bd9f6c03) )
+ ROM_LOAD( "spr11j.bin", 0x1c000, 0x4000, CRC(e8c6a880) SHA1(dd3d52ddbc36e244b96cfb87e6a80adb94626407) )
+
+ ROM_REGION( 0x8000, REGION_GFX3, ROMREGION_DISPOSE ) /* bg color maps */
+ ROM_LOAD16_BYTE( "tilef.bin", 0x0000, 0x4000, CRC(a0dfcd7e) SHA1(0fc6723eddef2a96de9bf1f48006dd067c148540) )
+ ROM_LOAD16_BYTE( "tilee.bin", 0x0001, 0x4000, CRC(ab504dc8) SHA1(4ebdcd42624e94c29ccdb8247bfff2d8e936ddd7) )
+ROM_END
+
+
+ROM_START( xenophob )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "xeno_pro.3c", 0x00000, 0x10000, CRC(f44c2e60) SHA1(9130b26eb1e0e0a75f9fdec898e1f0976de8a766) )
+ ROM_LOAD16_BYTE( "xeno_pro.3b", 0x00001, 0x10000, CRC(01609a3b) SHA1(9e065bc72f56439a885bfdfc8eb60df666df7c37) )
+ ROM_LOAD16_BYTE( "xeno_pro.2c", 0x20000, 0x10000, CRC(e45bf669) SHA1(52b0ffd2311e4d300410de57fbddacab4b9857a1) )
+ ROM_LOAD16_BYTE( "xeno_pro.2b", 0x20001, 0x10000, CRC(da5d39d5) SHA1(f61b239eb3108faec2f3dbb8139c8d01b0e29873) )
+
+ ROM_REGION( 0x40000, REGION_CPU2, 0 ) /* Sounds Good board */
+ ROM_LOAD16_BYTE( "xeno_snd.u7", 0x00000, 0x10000, CRC(77561d15) SHA1(8c23a9270d54be6380f2d23939b6c6d8c31e334b) )
+ ROM_LOAD16_BYTE( "xeno_snd.u17", 0x00001, 0x10000, CRC(837a1a71) SHA1(d7d60ef1fd11e5e84dd1ffb9a077686bd2fb452e) )
+ ROM_LOAD16_BYTE( "xeno_snd.u8", 0x20000, 0x10000, CRC(6e2915c7) SHA1(df1f35f6b743afbab0a3a29adce3639a8c9dc66f) )
+ ROM_LOAD16_BYTE( "xeno_snd.u18", 0x20001, 0x10000, CRC(12492145) SHA1(c891e86750e51d3b7b93fc96a9f5173fd7869756) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "xeno_bg.11d", 0x00000, 0x08000, CRC(3d2cf284) SHA1(39a666197584f24d19d43634b8e2f3923081a336) )
+ ROM_LOAD( "xeno_bg.12d", 0x08000, 0x08000, CRC(c32288b1) SHA1(a9f9f61c4287cb1e5490b4b7ad4fd94bba1c8fac) )
+
+ ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "xeno_fg.7j", 0x00000, 0x10000, CRC(b12eddb2) SHA1(a10df077d60cd821acbdbd32abe6dafd1217737c) )
+ ROM_LOAD( "xeno_fg.8j", 0x10000, 0x10000, CRC(20e682f5) SHA1(1009f7ec56998df8a1d5ecd724d0523c435c9ee0) )
+ ROM_LOAD( "xeno_fg.9j", 0x20000, 0x10000, CRC(82fb3e09) SHA1(f06e9df20044244a6c174f4876e615ccc18e1cba) )
+ ROM_LOAD( "xeno_fg.10j", 0x30000, 0x10000, CRC(6a7a3516) SHA1(1def9c134220eac9ba5e46d38282ff18f51b6398) )
+ROM_END
+
+
+ROM_START( spyhunt2 )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "sh23c.bin", 0x00000, 0x10000, CRC(30b91c90) SHA1(5b76f4e512b17ee80de2694807aa4e2499c2ef8b) )
+ ROM_LOAD16_BYTE( "sh23b.bin", 0x00001, 0x10000, CRC(f64513c6) SHA1(e42cab599e489a0ba422b28c5cfda0f9c3a60601) )
+ ROM_LOAD16_BYTE( "sh22c.bin", 0x20000, 0x10000, CRC(8ee65009) SHA1(6adb00888f739b59e3ace1a6eaf1c58c4583d7fd) )
+ ROM_LOAD16_BYTE( "sh22b.bin", 0x20001, 0x10000, CRC(850c21ad) SHA1(3b944545cb469e2c53166a91eb2834c5f3891ddf) )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the Turbo Cheap Squeak */
+ ROM_LOAD( "turbo-cs.u5", 0x08000, 0x4000, CRC(4b1d8a66) SHA1(a1a2f9fe3fc42b668ec97ad6c6ea6032f1dc0695) )
+ ROM_LOAD( "turbo-cs.u4", 0x0c000, 0x4000, CRC(3722ce48) SHA1(ae064be590c067bda66ca7a72c212ad47f3eb1c5) )
+
+ ROM_REGION( 0x40000, REGION_CPU3, 0 ) /* Sounds Good board */
+ ROM_LOAD16_BYTE( "sh2u7.bin", 0x00000, 0x10000, CRC(02362ea4) SHA1(2d37f06c9156554b8140ed565f6fdd1ef67bb54f) )
+ ROM_LOAD16_BYTE( "sh2u17.bin", 0x00001, 0x10000, CRC(e29a2c37) SHA1(e0d4df90b533d3325c905d42ddc6876667f32c82) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "sh2bg0.bin", 0x00000, 0x08000, CRC(cb3c3d8e) SHA1(5135eefd311e21b62628a6b6dc483ff80e5594fd) )
+ ROM_LOAD( "sh2bg1.bin", 0x08000, 0x08000, CRC(029d4af1) SHA1(9c2afa7b48f27d09d0e5487ec2a54f903e83c91c) )
+
+ ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "fg0.7j", 0x00000, 0x20000, CRC(55ce12ea) SHA1(db8677e05009db6c79a727f42f35d60f4a716fc2) )
+ ROM_LOAD( "fg1.8j", 0x20000, 0x20000, CRC(692afb67) SHA1(5669298a646deb2f82e438ae52de03f81a9e11a7) )
+ ROM_LOAD( "fg2.9j", 0x40000, 0x20000, CRC(f1aba383) SHA1(56d1f7e9eb430671076415dd87fe77a38fadad84) )
+ ROM_LOAD( "fg3.10j", 0x60000, 0x20000, CRC(d3475ff8) SHA1(aa7a283a190a6c43e365fcd9242c5d0b920dbf32) )
+ROM_END
+
+
+ROM_START( spyhnt2a )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "3c", 0x00000, 0x10000, CRC(5b92aadf) SHA1(0d0e2606fc5346e396f0a7b8ceb190ee42e485c3) )
+ ROM_LOAD16_BYTE( "3b", 0x00001, 0x10000, CRC(6ed0a25f) SHA1(542f77889b0cfdfeeff47e5beaef97c7516b77e1) )
+ ROM_LOAD16_BYTE( "2c", 0x20000, 0x10000, CRC(bc834f3f) SHA1(05f6ab508ce2ebe55665e97114070e9d81db48c8) )
+ ROM_LOAD16_BYTE( "2b", 0x20001, 0x10000, CRC(8a9f7ef3) SHA1(353ebb0a3782c183cc9be800584903e23ca507d9) )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the Turbo Cheap Squeak */
+ ROM_LOAD( "turbo-cs.u5", 0x08000, 0x4000, CRC(4b1d8a66) SHA1(a1a2f9fe3fc42b668ec97ad6c6ea6032f1dc0695) )
+ ROM_LOAD( "turbo-cs.u4", 0x0c000, 0x4000, CRC(3722ce48) SHA1(ae064be590c067bda66ca7a72c212ad47f3eb1c5) )
+
+ ROM_REGION( 0x40000, REGION_CPU3, 0 ) /* Sounds Good board */
+ ROM_LOAD16_BYTE( "sh2u7.bin", 0x00000, 0x10000, CRC(02362ea4) SHA1(2d37f06c9156554b8140ed565f6fdd1ef67bb54f) )
+ ROM_LOAD16_BYTE( "sh2u17.bin", 0x00001, 0x10000, CRC(e29a2c37) SHA1(e0d4df90b533d3325c905d42ddc6876667f32c82) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "bg0.11d", 0x00000, 0x08000, CRC(81efef7a) SHA1(74a6757b374b9f1e0c5a33a13fa492ae2e4347a0) )
+ ROM_LOAD( "bg1.12d", 0x08000, 0x08000, CRC(6a902e4d) SHA1(0c7f1bcd63f48cf1ad58f8abdcfe9fe9bc25acbc) )
+
+ ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "fg0.7j", 0x00000, 0x20000, CRC(55ce12ea) SHA1(db8677e05009db6c79a727f42f35d60f4a716fc2) )
+ ROM_LOAD( "fg1.8j", 0x20000, 0x20000, CRC(692afb67) SHA1(5669298a646deb2f82e438ae52de03f81a9e11a7) )
+ ROM_LOAD( "fg2.9j", 0x40000, 0x20000, CRC(f1aba383) SHA1(56d1f7e9eb430671076415dd87fe77a38fadad84) )
+ ROM_LOAD( "fg3.10j", 0x60000, 0x20000, CRC(d3475ff8) SHA1(aa7a283a190a6c43e365fcd9242c5d0b920dbf32) )
+ROM_END
+
+
+ROM_START( blasted )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "3c", 0x00000, 0x10000, CRC(b243b7df) SHA1(b44179c30e5286362b0be4e2e9b0742e7e27f7c9) )
+ ROM_LOAD16_BYTE( "3b", 0x00001, 0x10000, CRC(627e30d3) SHA1(c430191dd539a22603e49df4c4cb697747a0cd02) )
+ ROM_LOAD16_BYTE( "2c", 0x20000, 0x10000, CRC(026f30bf) SHA1(de327ab5bd4dc9456fa5a91f3ccd293b3ab8c5c2) )
+ ROM_LOAD16_BYTE( "2b", 0x20001, 0x10000, CRC(8e0e91a9) SHA1(2dc2927a1fd552ead446606a902a2ba0c4595798) )
+
+ ROM_REGION( 0x40000, REGION_CPU2, 0 ) /* Sounds Good board */
+ ROM_LOAD16_BYTE( "blasted.u7", 0x00000, 0x10000, CRC(8d7c8ef6) SHA1(a414e91c20202f800f3e01e4c430e3f99e3df5bb) )
+ ROM_LOAD16_BYTE( "blasted.u17", 0x00001, 0x10000, CRC(c79040b9) SHA1(e6fa173ff5fb681ddfef831f1ef237a7c4303f32) )
+ ROM_LOAD16_BYTE( "blasted.u8", 0x20000, 0x10000, CRC(c53094c0) SHA1(8c54cefe8030bf18b9585008a4a6cf8a7dc23f71) )
+ ROM_LOAD16_BYTE( "blasted.u18", 0x20001, 0x10000, CRC(85688160) SHA1(de0494f3d457ba81d03700ca569fe3fe4f10a8a1) )
+
+ ROM_REGION( 0x10000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "11d", 0x00000, 0x08000, CRC(d8ed5cbc) SHA1(0ad8b894f40892c734fdda056fefe0aac44f9a82) )
+ ROM_LOAD( "12d", 0x08000, 0x08000, CRC(60d00c69) SHA1(900d5915a1369c2fc8305c2baeafede5ca627a6b) )
+
+ ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "fg0", 0x00000, 0x20000, CRC(5034ae8a) SHA1(45bee41af64fd52311cb470332de4b1caa0f9c9d) )
+ ROM_LOAD( "fg1", 0x20000, 0x20000, CRC(4fbdba58) SHA1(5dfaca5447e96d904028a14ef01ab6bd972011e6) )
+ ROM_LOAD( "fg2", 0x40000, 0x20000, CRC(8891f6f8) SHA1(af07aa290eff3b9632b238d8b5a37280961f63f7) )
+ ROM_LOAD( "fg3", 0x60000, 0x20000, CRC(18e4a130) SHA1(2412b45ca58b36515c80b0888a5d35303a5ce5a2) )
+ROM_END
+
+
+ROM_START( archrivl )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "3c-rev2", 0x00000, 0x10000, CRC(60d4b760) SHA1(9c24c72f62310475b0dade85299cb661904f8f41) )
+ ROM_LOAD16_BYTE( "3b-rev2", 0x00001, 0x10000, CRC(e0c07a8d) SHA1(ace5b480d4c2cd3d78dff0e284cf13a8d28c40b7) )
+ ROM_LOAD16_BYTE( "2c-rev2", 0x20000, 0x10000, CRC(cc2893f7) SHA1(44931299cb98e27ac2f11b3922da76895fbfe0a7) )
+ ROM_LOAD16_BYTE( "2b-rev2", 0x20001, 0x10000, CRC(fa977050) SHA1(67c66995da755401162f7e668b97eb42ac769ec0) )
+
+ ROM_REGION( 0x90000, REGION_CPU2, 0 ) /* Audio System board */
+ ROM_LOAD( "u4.snd", 0x10000, 0x08000, CRC(96b3c652) SHA1(1bb576d0bf6b6b8df24e7b9352a33e97dd8ebdcb) )
+ ROM_RELOAD( 0x18000, 0x08000 )
+ ROM_RELOAD( 0x20000, 0x08000 )
+ ROM_RELOAD( 0x28000, 0x08000 )
+ ROM_LOAD( "u19.snd", 0x30000, 0x08000, CRC(c4b3dc23) SHA1(87e6eaec82d749ad28e0fa3d0efecd8a4aaf5cd7) )
+ ROM_RELOAD( 0x38000, 0x08000 )
+ ROM_RELOAD( 0x40000, 0x08000 )
+ ROM_RELOAD( 0x48000, 0x08000 )
+ ROM_LOAD( "u20.snd", 0x50000, 0x08000, CRC(f7907a02) SHA1(3fabb2b7fd82e773d7b6db53c5328b5866d70617) )
+ ROM_RELOAD( 0x58000, 0x08000 )
+ ROM_RELOAD( 0x60000, 0x08000 )
+ ROM_RELOAD( 0x68000, 0x08000 )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "11d-rev1", 0x00000, 0x10000, CRC(7eb3d7c6) SHA1(8544d04929cdb36fa7f0dcb67e0b7fd8c7b0fc2b) )
+ ROM_LOAD( "12d-rev1", 0x10000, 0x10000, CRC(31e68050) SHA1(e25871beb08a8706af70d277fa7305a1f4d7d3e2) )
+
+ ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "7j-rev1", 0x00000, 0x20000, CRC(148ce28c) SHA1(d7dc59d9ae8dc61ecc58a6172fd40aa3926b1f6f) )
+ ROM_LOAD( "8j-rev1", 0x20000, 0x20000, CRC(58187ac2) SHA1(0bd58598720c41b3c393d47b3b1d6b30696b3a6f) )
+ ROM_LOAD( "9j-rev1", 0x40000, 0x20000, CRC(0dd1204e) SHA1(bdc9b74e7ae8f071d2eb3ce957eec484f02ef876) )
+ ROM_LOAD( "10j-rev1", 0x60000, 0x20000, CRC(eb3d0344) SHA1(9db7c7bca45f56550c9a9623f96565901968d0c3) )
+
+ ROM_REGION( 0x1200, REGION_PLDS, ROMREGION_DISPOSE )
+ ROM_LOAD( "pls153.11j", 0x0000, 0x00eb, CRC(761c3b56) SHA1(06c1717face55cc5b05ec45be9525a3d25419b85) )
+ ROM_LOAD( "pls153.12j", 0x0100, 0x00eb, CRC(48eed036) SHA1(146b47ecb341b074acad0e4da2d81ff921bbaf7a) )
+ ROM_LOAD( "pls153.14h", 0x0200, 0x00eb, CRC(d4203273) SHA1(59fde5850ad55e257f10db857dfb9a1e929fc1ec) )
+ ROM_LOAD( "pal12h6.14e", 0x0300, 0x0034, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16r4a.14k", 0x0400, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16r4a.2k", 0x0600, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16r6a.15e", 0x0800, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16l8a.1j", 0x0a00, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16l8a.2j", 0x0c00, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal20l8a.9b", 0x0e00, 0x0144, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pl20x10a.14f", 0x1000, 0x00cc, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pl20x10a.15f", 0x1100, 0x00cc, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+
+ROM_START( archriv2 )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "archrivl.4", 0x00000, 0x10000, CRC(3c545740) SHA1(84a467756c959385a3ec3b97026823470bbab7ab) )
+ ROM_LOAD16_BYTE( "archrivl.2", 0x00001, 0x10000, CRC(bc4df2b9) SHA1(7314d03d4cf7e8a83135fa67969dda3088e212fb) )
+ ROM_LOAD16_BYTE( "archrivl.3", 0x20000, 0x10000, CRC(d6d08ff7) SHA1(bbbd4b5c3218c9bb461b17e536191d40ab39f67c) )
+ ROM_LOAD16_BYTE( "archrivl.1", 0x20001, 0x10000, CRC(92f3a43d) SHA1(45fdcbacd65f5898d54cc2ac95639b7ee2c097e6) )
+
+ ROM_REGION( 0x90000, REGION_CPU2, 0 ) /* Audio System board */
+ ROM_LOAD( "u4.snd", 0x10000, 0x08000, CRC(96b3c652) SHA1(1bb576d0bf6b6b8df24e7b9352a33e97dd8ebdcb) )
+ ROM_RELOAD( 0x18000, 0x08000 )
+ ROM_RELOAD( 0x20000, 0x08000 )
+ ROM_RELOAD( 0x28000, 0x08000 )
+ ROM_LOAD( "u19.snd", 0x30000, 0x08000, CRC(c4b3dc23) SHA1(87e6eaec82d749ad28e0fa3d0efecd8a4aaf5cd7) )
+ ROM_RELOAD( 0x38000, 0x08000 )
+ ROM_RELOAD( 0x40000, 0x08000 )
+ ROM_RELOAD( 0x48000, 0x08000 )
+ ROM_LOAD( "u20.snd", 0x50000, 0x08000, CRC(f7907a02) SHA1(3fabb2b7fd82e773d7b6db53c5328b5866d70617) )
+ ROM_RELOAD( 0x58000, 0x08000 )
+ ROM_RELOAD( 0x60000, 0x08000 )
+ ROM_RELOAD( 0x68000, 0x08000 )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "11d-rev1", 0x00000, 0x10000, CRC(7eb3d7c6) SHA1(8544d04929cdb36fa7f0dcb67e0b7fd8c7b0fc2b) )
+ ROM_LOAD( "12d-rev1", 0x10000, 0x10000, CRC(31e68050) SHA1(e25871beb08a8706af70d277fa7305a1f4d7d3e2) )
+
+ ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "7j-rev1", 0x00000, 0x20000, CRC(148ce28c) SHA1(d7dc59d9ae8dc61ecc58a6172fd40aa3926b1f6f) )
+ ROM_LOAD( "8j-rev1", 0x20000, 0x20000, CRC(58187ac2) SHA1(0bd58598720c41b3c393d47b3b1d6b30696b3a6f) )
+ ROM_LOAD( "9j-rev1", 0x40000, 0x20000, CRC(0dd1204e) SHA1(bdc9b74e7ae8f071d2eb3ce957eec484f02ef876) )
+ ROM_LOAD( "10j-rev1", 0x60000, 0x20000, CRC(eb3d0344) SHA1(9db7c7bca45f56550c9a9623f96565901968d0c3) )
+
+ ROM_REGION( 0x1200, REGION_PLDS, ROMREGION_DISPOSE )
+ ROM_LOAD( "pls153.11j", 0x0000, 0x00eb, CRC(761c3b56) SHA1(06c1717face55cc5b05ec45be9525a3d25419b85) )
+ ROM_LOAD( "pls153.12j", 0x0100, 0x00eb, CRC(48eed036) SHA1(146b47ecb341b074acad0e4da2d81ff921bbaf7a) )
+ ROM_LOAD( "pls153.14h", 0x0200, 0x00eb, CRC(d4203273) SHA1(59fde5850ad55e257f10db857dfb9a1e929fc1ec) )
+ ROM_LOAD( "pal12h6.14e", 0x0300, 0x0034, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16r4a.14k", 0x0400, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16r4a.2k", 0x0600, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16r6a.15e", 0x0800, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16l8a.1j", 0x0a00, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16l8a.2j", 0x0c00, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal20l8a.9b", 0x0e00, 0x0144, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pl20x10a.14f", 0x1000, 0x00cc, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pl20x10a.15f", 0x1100, 0x00cc, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+
+ROM_START( pigskin )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "pigskin.a5", 0x00000, 0x10000, CRC(ab61c29b) SHA1(01cf2d9b3f41442280e614541d5651c6e46b4a4b) )
+ ROM_LOAD16_BYTE( "pigskin.b5", 0x00001, 0x10000, CRC(55a802aa) SHA1(a75f54bce5aad3f7375ab15ad204744e2f6fdc92) )
+ ROM_LOAD16_BYTE( "pigskin.a6", 0x20000, 0x10000, CRC(4d8b7e50) SHA1(9e5d0edf1603e11f22d3129a2b8865ebcb5e27f9) )
+ ROM_LOAD16_BYTE( "pigskin.b6", 0x20001, 0x10000, CRC(1194f187) SHA1(e7cebe5322a5c8e382b6773939be5bc88492f289) )
+
+ ROM_REGION( 0x90000, REGION_CPU2, 0 ) /* Audio System board */
+ ROM_LOAD( "pigskin.u4", 0x10000, 0x10000, CRC(6daf2d37) SHA1(4c8098520fe44e36b01389bcfcfe3ad1d027cbde) )
+ ROM_RELOAD( 0x20000, 0x10000 )
+ ROM_LOAD( "pigskin.u19", 0x30000, 0x10000, CRC(56fd16a3) SHA1(b91aabdbd3185355f2b7177fc4d3a86fa110f51d) )
+ ROM_RELOAD( 0x40000, 0x10000 )
+ ROM_LOAD( "pigskin.u20", 0x50000, 0x10000, CRC(5d032fb8) SHA1(a236cdc64856637e560bec7119b051fac13efbe0) )
+ ROM_RELOAD( 0x60000, 0x10000 )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "pigskin.e2", 0x00000, 0x10000, CRC(12d5737b) SHA1(73040233bb86eaa42257112e2f0540de1206e310) )
+ ROM_LOAD( "pigskin.e1", 0x10000, 0x10000, CRC(460202a9) SHA1(8c2f7ae3615519e13e750c99b89ccb28e9946bb8) )
+
+ ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "pigskin.h15", 0x00000, 0x20000, CRC(2655d03f) SHA1(de2e2a7fb40844d921b6afaa724a7089a0397270) )
+ ROM_LOAD( "pigskin.h17", 0x20000, 0x20000, CRC(31c52ea7) SHA1(1fcb99a70494eecb970bc47bd47ef04a170fab5d) )
+ ROM_LOAD( "pigskin.h18", 0x40000, 0x20000, CRC(b36c4109) SHA1(4eeae5dfbbe061ea55d7429a7386ec75c734befb) )
+ ROM_LOAD( "pigskin.h14", 0x60000, 0x20000, CRC(09c87104) SHA1(34ac22bdcd8218b9d6a0b4219c67b9b0cc000375) )
+ROM_END
+
+
+ROM_START( trisport )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "la3.a5", 0x00000, 0x10000, CRC(fe1e9e37) SHA1(583f18531583e038ca57a592b6a6c305896bf2c5) )
+ ROM_LOAD16_BYTE( "la3.b5", 0x00001, 0x10000, CRC(f352ec81) SHA1(446a68f231ca57540a295742d67ce9f1a8364b15) )
+ ROM_LOAD16_BYTE( "la3.a6", 0x20000, 0x10000, CRC(9c6a1398) SHA1(ee115d9207f3a9034b7c9eccd2ff151d9c923c9a) )
+ ROM_LOAD16_BYTE( "la3.b6", 0x20001, 0x10000, CRC(597b564c) SHA1(090da3ec0c86035cc41a9caea182b8a5419c3be9) )
+
+ ROM_REGION( 0x90000, REGION_CPU2, 0 ) /* Audio System board */
+ ROM_LOAD( "sl1-snd.u4", 0x10000, 0x10000, CRC(0ed8c904) SHA1(21292a001c4c44f87b8782c706e5c346b767cd6b) )
+ ROM_RELOAD( 0x20000, 0x10000 )
+ ROM_LOAD( "sl1-snd.u19", 0x30000, 0x10000, CRC(b57d7d7e) SHA1(483f718f1cc4549baf5696935532d30803254a19) )
+ ROM_RELOAD( 0x40000, 0x10000 )
+ ROM_LOAD( "sl1-snd.u20", 0x50000, 0x08000, CRC(3ae15c08) SHA1(6b0fd09c39da08d1f67b6dd4287e8d2894522e1d) )
+ ROM_RELOAD( 0x58000, 0x08000 )
+ ROM_RELOAD( 0x60000, 0x08000 )
+ ROM_RELOAD( 0x68000, 0x08000 )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "la2.e2", 0x00000, 0x10000, CRC(f61149a0) SHA1(a43d184db23c7f194042709550e7bf36b838ee5c) )
+ ROM_LOAD( "la2.e1", 0x10000, 0x10000, CRC(cf753497) SHA1(e076093134f346e4cdb8d4a71fefef70f3fc1328) )
+
+ ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "la2.h15", 0x00000, 0x20000, CRC(18a44d43) SHA1(13ac27860b221b4ee950bc239ca941dadcb06832) )
+ ROM_LOAD( "la2.h17", 0x20000, 0x20000, CRC(874cd237) SHA1(32983b7fcac3b1a53da3529c5239a1131bb64d4f) )
+ ROM_LOAD( "la2.h18", 0x40000, 0x20000, CRC(f7637a18) SHA1(21dbe2bed406908f17f5860cd2ca502b8f481f51) )
+ ROM_LOAD( "la2.h14", 0x60000, 0x20000, CRC(403f9401) SHA1(6ff027943016d894b758dc8f189850bec1ee9360) )
+
+ ROM_REGION( 0x1400, REGION_PLDS, ROMREGION_DISPOSE )
+ ROM_LOAD( "pal20l8.g5", 0x0000, 0x0144, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal20x10.f7", 0x0200, 0x00cc, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal20x10.e9", 0x0300, 0x00cc, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal20l8.d4", 0x0400, 0x0144, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16l8.d6", 0x0600, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16r4a.c11", 0x0800, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16r4.e10", 0x0a00, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pls153a.f14", 0x0c00, 0x00eb, CRC(48eed036) SHA1(146b47ecb341b074acad0e4da2d81ff921bbaf7a) )
+ ROM_LOAD( "pls153a.f15", 0x0d00, 0x00eb, CRC(761c3b56) SHA1(06c1717face55cc5b05ec45be9525a3d25419b85) )
+ ROM_LOAD( "pls153a.e19", 0x0e00, 0x00eb, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16l8.f8", 0x1000, 0x0104, NO_DUMP ) /* PAL is read protected */
+ ROM_LOAD( "pal16r6a.e11", 0x1200, 0x0104, NO_DUMP ) /* PAL is read protected */
+ROM_END
+
+
+
+/*************************************
+ *
+ * Driver initialization
+ *
+ *************************************/
+
+static void mcr68_common_init(int sound_board, int clip, int xoffset)
+{
+ mcr_sound_init(sound_board);
+
+ mcr68_sprite_clip = clip;
+ mcr68_sprite_xoffset = xoffset;
+
+ state_save_register_global(control_word);
+}
+
+
+static DRIVER_INIT( zwackery )
+{
+ mcr68_common_init(MCR_CHIP_SQUEAK_DELUXE, 0, 0);
+
+ /* Zwackery doesn't care too much about this value; currently taken from Blasted */
+ mcr68_timing_factor = attotime_make(0, HZ_TO_ATTOSECONDS(machine->drv->cpu[0].clock / 10) * (256 + 16));
+}
+
+
+static DRIVER_INIT( xenophob )
+{
+ mcr68_common_init(MCR_SOUNDS_GOOD, 0, 0);
+
+ /* Xenophobe doesn't care too much about this value; currently taken from Blasted */
+ mcr68_timing_factor = attotime_make(0, HZ_TO_ATTOSECONDS(machine->drv->cpu[0].clock / 10) * (256 + 16));
+
+ /* install control port handler */
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0c0000, 0x0cffff, 0, 0, xenophobe_control_w);
+}
+
+
+static DRIVER_INIT( spyhunt2 )
+{
+ mcr68_common_init(MCR_TURBO_CHIP_SQUEAK | MCR_SOUNDS_GOOD, 0, -6);
+
+ /* Spy Hunter 2 doesn't care too much about this value; currently taken from Blasted */
+ mcr68_timing_factor = attotime_make(0, HZ_TO_ATTOSECONDS(machine->drv->cpu[0].clock / 10) * (256 + 16));
+
+ /* analog port handling is a bit tricky */
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0c0000, 0x0cffff, 0, 0, spyhunt2_control_w);
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0d0000, 0x0dffff, 0, 0, spyhunt2_port_0_r);
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0e0000, 0x0effff, 0, 0, spyhunt2_port_1_r);
+}
+
+
+static DRIVER_INIT( blasted )
+{
+ mcr68_common_init(MCR_SOUNDS_GOOD, 0, 0);
+
+ /* Blasted checks the timing of VBLANK relative to the 493 interrupt */
+ /* VBLANK is required to come within 220-256 E clocks (i.e., 2200-2560 CPU clocks) */
+ /* after the 493; we also allow 16 E clocks for latency */
+ mcr68_timing_factor = attotime_make(0, HZ_TO_ATTOSECONDS(machine->drv->cpu[0].clock / 10) * (256 + 16));
+
+ /* handle control writes */
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0c0000, 0x0cffff, 0, 0, blasted_control_w);
+
+ /* 6840 is mapped to the lower 8 bits */
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0a0000, 0x0a000f, 0, 0, mcr68_6840_lower_w);
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0a0000, 0x0a000f, 0, 0, mcr68_6840_lower_r);
+}
+
+
+static DRIVER_INIT( archrivl )
+{
+ mcr68_common_init(MCR_WILLIAMS_SOUND, 16, 0);
+
+ /* Arch Rivals doesn't care too much about this value; currently taken from Blasted */
+ mcr68_timing_factor = attotime_make(0, HZ_TO_ATTOSECONDS(machine->drv->cpu[0].clock / 10) * (256 + 16));
+
+ /* handle control writes */
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0c0000, 0x0cffff, 0, 0, archrivl_control_w);
+
+ /* 49-way joystick handling is a bit tricky */
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0e0000, 0x0effff, 0, 0, archrivl_port_1_r);
+
+ /* 6840 is mapped to the lower 8 bits */
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0a0000, 0x0a000f, 0, 0, mcr68_6840_lower_w);
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0a0000, 0x0a000f, 0, 0, mcr68_6840_lower_r);
+}
+
+
+static DRIVER_INIT( pigskin )
+{
+ mcr68_common_init(MCR_WILLIAMS_SOUND, 16, 0);
+
+ /* Pigskin doesn't care too much about this value; currently taken from Tri-Sports */
+ mcr68_timing_factor = attotime_make(0, HZ_TO_ATTOSECONDS(machine->drv->cpu[0].clock / 10) * 115);
+
+ state_save_register_global_array(protection_data);
+}
+
+
+static DRIVER_INIT( trisport )
+{
+ mcr68_common_init(MCR_WILLIAMS_SOUND, 0, 0);
+
+ /* Tri-Sports checks the timing of VBLANK relative to the 493 interrupt */
+ /* VBLANK is required to come within 87-119 E clocks (i.e., 870-1190 CPU clocks) */
+ /* after the 493 */
+ mcr68_timing_factor = attotime_make(0, HZ_TO_ATTOSECONDS(machine->drv->cpu[0].clock / 10) * 115);
+}
+
+
+
+/*************************************
+ *
+ * Game drivers
+ *
+ *************************************/
+
+GAME( 1984, zwackery, 0, zwackery, zwackery, zwackery, ROT0, "Bally Midway", "Zwackery", GAME_SUPPORTS_SAVE )
+GAME( 1987, xenophob, 0, xenophob, xenophob, xenophob, ROT0, "Bally Midway", "Xenophobe", GAME_SUPPORTS_SAVE )
+GAME( 1987, spyhunt2, 0, spyhunt2, spyhunt2, spyhunt2, ROT0, "Bally Midway", "Spy Hunter 2 (rev 2)", GAME_SUPPORTS_SAVE )
+GAME( 1987, spyhnt2a, spyhunt2, spyhunt2, spyhunt2, spyhunt2, ROT0, "Bally Midway", "Spy Hunter 2 (rev 1)", GAME_SUPPORTS_SAVE )
+GAME( 1988, blasted, 0, xenophob, blasted, blasted, ROT0, "Bally Midway", "Blasted", GAME_SUPPORTS_SAVE )
+GAME( 1989, archrivl, 0, archrivl, archrivl, archrivl, ROT0, "Bally Midway", "Arch Rivals (rev 4.0)", GAME_SUPPORTS_SAVE )
+GAME( 1989, archriv2, archrivl, archrivl, archrivl, archrivl, ROT0, "Bally Midway", "Arch Rivals (rev 2.0)", GAME_SUPPORTS_SAVE )
+GAME( 1989, trisport, 0, trisport, trisport, trisport, ROT270, "Bally Midway", "Tri-Sports", GAME_SUPPORTS_SAVE )
+GAME( 1990, pigskin, 0, pigskin, pigskin, pigskin, ROT0, "Midway", "Pigskin 621AD", GAME_SUPPORTS_SAVE )