summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/segag80v.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/segag80v.c')
-rw-r--r--src/mame/drivers/segag80v.c1435
1 files changed, 1435 insertions, 0 deletions
diff --git a/src/mame/drivers/segag80v.c b/src/mame/drivers/segag80v.c
new file mode 100644
index 00000000000..61d5fff24c1
--- /dev/null
+++ b/src/mame/drivers/segag80v.c
@@ -0,0 +1,1435 @@
+/***************************************************************************
+
+ Sega vector hardware
+
+ Games supported:
+ * Space Fury
+ * Zektor
+ * Tac/Scan
+ * Eliminator
+ * Star Trek
+
+ Known bugs:
+ * games run too fast
+
+****************************************************************************
+
+ 4/25/99 - Tac-Scan sound call for coins now works. (Jim Hernandez)
+ 2/5/98 - Added input ports support for Tac Scan. Bonus Ships now work.
+ Zektor now uses it's own input port section. (Jim Hernandez)
+
+ Sega Vector memory map (preliminary)
+
+ Most of the info here comes from the wiretap archive at:
+ http://www.spies.com/arcade/simulation/gameHardware/
+
+ * Sega G80 Vector Simulation
+
+ ROM Address Map
+ ---------------
+ Eliminator Elim4Player Space Fury Zektor TAC/SCAN Star Trk
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 0000 | 969 | 1390 | 969 | 1611 | 1711 | 1873 | CPU u25
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 0800 | 1333 | 1347 | 960 | 1586 | 1670 | 1848 | ROM u1
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 1000 | 1334 | 1348 | 961 | 1587 | 1671 | 1849 | ROM u2
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 1800 | 1335 | 1349 | 962 | 1588 | 1672 | 1850 | ROM u3
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 2000 | 1336 | 1350 | 963 | 1589 | 1673 | 1851 | ROM u4
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 2800 | 1337 | 1351 | 964 | 1590 | 1674 | 1852 | ROM u5
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 3000 | 1338 | 1352 | 965 | 1591 | 1675 | 1853 | ROM u6
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 3800 | 1339 | 1353 | 966 | 1592 | 1676 | 1854 | ROM u7
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 4000 | 1340 | 1354 | 967 | 1593 | 1677 | 1855 | ROM u8
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 4800 | 1341 | 1355 | 968 | 1594 | 1678 | 1856 | ROM u9
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 5000 | 1342 | 1356 | | 1595 | 1679 | 1857 | ROM u10
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 5800 | 1343 | 1357 | | 1596 | 1680 | 1858 | ROM u11
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 6000 | 1344 | 1358 | | 1597 | 1681 | 1859 | ROM u12
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 6800 | 1345 | 1359 | | 1598 | 1682 | 1860 | ROM u13
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 7000 | | 1360 | | 1599 | 1683 | 1861 | ROM u14
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 7800 | | 1600 | 1684 | 1862 | ROM u15
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 8000 | | 1601 | 1685 | 1863 | ROM u16
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 8800 | | 1602 | 1686 | 1864 | ROM u17
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 9000 | | 1603 | 1687 | 1865 | ROM u18
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ 9800 | | 1604 | 1688 | 1866 | ROM u19
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ A000 | | 1605 | 1709 | 1867 | ROM u20
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ A800 | | 1606 | 1710 | 1868 | ROM u21
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ B000 | | 1869 | ROM u22
+ -----+-----------+-----------+-----------+-------+---------+---------+
+ B800 | | 1870 | ROM u23
+ -----+-----------+-----------+-----------+-------+---------+---------+
+
+ I/O ports:
+ read:
+
+ write:
+
+ These games all have dipswitches, but they are mapped in such a way as to make
+ using them with MAME extremely difficult. I might try to implement them in the
+ future.
+
+ SWITCH MAPPINGS
+ ---------------
+
+ +------+------+------+------+------+------+------+------+
+ |SW1-8 |SW1-7 |SW1-6 |SW1-5 |SW1-4 |SW1-3 |SW1-2 |SW1-1 |
+ +------+------+------+------+------+------+------+------+
+ F8:08 |F9:08 |FA:08 |FB:08 |F8:04 |F9:04 FA:04 FB:04 Zektor &
+ | | | | | | Space Fury
+ | | | | | |
+ 1 -|------|------|------|------|------|--------------- upright
+ 0 -|------|------|------|------|------|--------------- cocktail
+ | | | | | |
+ | 1 -|------|------|------|------|--------------- voice
+ | 0 -|------|------|------|------|--------------- no voice
+ | | | | |
+ | 1 | 1 -|------|------|--------------- 5 ships
+ | 0 | 1 -|------|------|--------------- 4 ships
+ | 1 | 0 -|------|------|--------------- 3 ships
+ | 0 | 0 -|------|------|--------------- 2 ships
+ | | |
+ | 1 | 1 -|--------------- hardest
+ | 0 | 1 -|--------------- hard
+ 1 = Open | 1 | 0 -|--------------- medium
+ 0 = Closed | 0 | 0 -|--------------- easy
+
+ +------+------+------+------+------+------+------+------+
+ |SW2-8 |SW2-7 |SW2-6 |SW2-5 |SW2-4 |SW2-3 |SW2-2 |SW2-1 |
+ +------+------+------+------+------+------+------+------+
+ |F8:02 |F9:02 |FA:02 |FB:02 |F8:01 |F9:01 |FA:01 |FB:01 |
+ | | | | | | | | |
+ | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 coin/ 1 play
+ +------+------+------+------+------+------+------+------+
+
+ Known problems:
+
+ 1 The games seem to run too fast. This is most noticable
+ with the speech samples in Zektor - they don't match the mouth.
+ Slowing down the Z80 doesn't help and in fact hurts performance.
+
+ 2 Cocktail mode isn't implemented.
+
+ Is 1) still valid?
+
+***************************************************************************/
+
+#include "driver.h"
+#include "sound/ay8910.h"
+#include "sound/samples.h"
+#include "audio/segasnd.h"
+#include "video/vector.h"
+#include "includes/segag80r.h"
+#include "segag80v.h"
+
+
+/*************************************
+ *
+ * Constants
+ *
+ *************************************/
+
+#define CPU_CLOCK 8000000
+#define VIDEO_CLOCK 15468480
+
+
+
+/*************************************
+ *
+ * Global variables
+ *
+ *************************************/
+
+extern UINT8 (*sega_decrypt)(offs_t, UINT8);
+
+static UINT8 *mainram;
+static UINT8 has_usb;
+
+static UINT8 mult_data[2];
+static UINT16 mult_result;
+
+static UINT8 spinner_select;
+static UINT8 spinner_sign;
+static UINT8 spinner_count;
+
+
+
+/*************************************
+ *
+ * Machine setup and config
+ *
+ *************************************/
+
+static void service_switch(void *param, UINT32 oldval, UINT32 newval)
+{
+ /* pressing the service switch sends an NMI */
+ if (newval)
+ cpunum_set_input_line(0, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+
+static MACHINE_START( g80v )
+{
+ /* request a callback if the service switch is pressed */
+ input_port_set_changed_callback(port_tag_to_index("SERVICESW"), 0x01, service_switch, NULL);
+
+ /* register for save states */
+ state_save_register_global_array(mult_data);
+ state_save_register_global(mult_result);
+ state_save_register_global(spinner_select);
+ state_save_register_global(spinner_sign);
+ state_save_register_global(spinner_count);
+}
+
+
+static MACHINE_RESET( g80v )
+{
+ /* if we have a Universal Sound Board, reset it here */
+ if (has_usb)
+ sega_usb_reset(0x10);
+}
+
+
+
+/*************************************
+ *
+ * RAM writes/decryption
+ *
+ *************************************/
+
+static offs_t decrypt_offset(offs_t offset)
+{
+ offs_t pc;
+
+ /* if no active CPU, don't do anything */
+ if (cpu_getactivecpu() == -1)
+ return offset;
+
+ /* ignore anything but accesses via opcode $32 (LD $(XXYY),A) */
+ pc = activecpu_get_previouspc();
+ if ((UINT16)pc == 0xffff || program_read_byte(pc) != 0x32)
+ return offset;
+
+ /* fetch the low byte of the address and munge it */
+ return (offset & 0xff00) | (*sega_decrypt)(pc, program_read_byte(pc + 1));
+}
+
+static WRITE8_HANDLER( mainram_w ) { mainram[decrypt_offset(offset)] = data; }
+static WRITE8_HANDLER( usb_ram_w ) { sega_usb_ram_w(decrypt_offset(offset), data); }
+static WRITE8_HANDLER( vectorram_w ) { vectorram[decrypt_offset(offset)] = data; }
+
+
+
+/*************************************
+ *
+ * Input port access
+ *
+ *************************************/
+
+INLINE UINT8 demangle(UINT8 d7d6, UINT8 d5d4, UINT8 d3d2, UINT8 d1d0)
+{
+ return ((d7d6 << 7) & 0x80) | ((d7d6 << 2) & 0x40) |
+ ((d5d4 << 5) & 0x20) | ((d5d4 << 0) & 0x10) |
+ ((d3d2 << 3) & 0x08) | ((d3d2 >> 2) & 0x04) |
+ ((d1d0 << 1) & 0x02) | ((d1d0 >> 4) & 0x01);
+}
+
+
+static READ8_HANDLER( mangled_ports_r )
+{
+ /* The input ports are odd. Neighboring lines are read via a mux chip */
+ /* one bit at a time. This means that one bank of DIP switches will be */
+ /* read as two bits from each of 4 ports. For this reason, the input */
+ /* ports have been organized logically, and are demangled at runtime. */
+ /* 4 input ports each provide 8 bits of information. */
+ UINT8 d7d6 = readinputportbytag("D7D6");
+ UINT8 d5d4 = readinputportbytag("D5D4");
+ UINT8 d3d2 = readinputportbytag("D3D2");
+ UINT8 d1d0 = readinputportbytag("D1D0");
+ int shift = offset & 3;
+ return demangle(d7d6 >> shift, d5d4 >> shift, d3d2 >> shift, d1d0 >> shift);
+}
+
+
+
+/*************************************
+ *
+ * Spinner control emulation
+ *
+ *************************************/
+
+static WRITE8_HANDLER( spinner_select_w )
+{
+ spinner_select = data;
+}
+
+
+static READ8_HANDLER( spinner_input_r )
+{
+ INT8 delta;
+
+ if (spinner_select & 1)
+ return readinputportbytag("FC");
+
+/*
+ * The values returned are always increasing. That is, regardless of whether
+ * you turn the spinner left or right, the self-test should always show the
+ * number as increasing. The direction is only reflected in the least
+ * significant bit.
+ */
+
+ /* I'm sure this can be further simplified ;-) BW */
+ delta = readinputportbytag("SPINNER");
+ if (delta != 0)
+ {
+ spinner_sign = (delta >> 7) & 1;
+ spinner_count += abs(delta);
+ }
+ return ~((spinner_count << 1) | spinner_sign);
+}
+
+
+
+/*************************************
+ *
+ * Eliminator 4-player controls
+ *
+ *************************************/
+
+static UINT32 elim4_joint_coin_r(void *param)
+{
+ return (readinputportbytag("COINS") & 0xf) != 0xf;
+}
+
+
+static READ8_HANDLER( elim4_input_r )
+{
+ UINT8 result = 0;
+
+ /* bit 3 enables demux */
+ if (spinner_select & 8)
+ {
+ /* Demux bit 0-2. Only 6 and 7 are connected */
+ switch (spinner_select & 7)
+ {
+ case 6:
+ /* player 3 & 4 controls */
+ result = readinputportbytag("FC");
+ break;
+ case 7:
+ /* the 4 coin inputs */
+ result = readinputportbytag("COINS");
+ break;
+ }
+ }
+
+ /* LS240 has inverting outputs */
+ return (result ^ 0xff);
+}
+
+
+
+/*************************************
+ *
+ * Multiplier
+ *
+ *************************************/
+
+static WRITE8_HANDLER( multiply_w )
+{
+ mult_data[offset] = data;
+ if (offset == 1)
+ mult_result = mult_data[0] * mult_data[1];
+}
+
+
+static READ8_HANDLER( multiply_r )
+{
+ UINT8 result = mult_result;
+ mult_result >>= 8;
+ return result;
+}
+
+
+
+/*************************************
+ *
+ * Misc other I/O
+ *
+ *************************************/
+
+static WRITE8_HANDLER( coin_count_w )
+{
+ coin_counter_w(0, (data >> 7) & 1);
+ coin_counter_w(1, (data >> 6) & 1);
+}
+
+
+static WRITE8_HANDLER( unknown_w )
+{
+ /* writing an 0x04 here enables interrupts */
+ /* some games write 0x00/0x01 here as well */
+ if (data != 0x00 && data != 0x01 && data != 0x04)
+ mame_printf_debug("%04X:unknown_w = %02X\n", activecpu_get_pc(), data);
+}
+
+
+
+/*************************************
+ *
+ * Main CPU memory handlers
+ *
+ *************************************/
+
+/* complete memory map derived from schematics */
+static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x07ff) AM_ROM /* CPU board ROM */
+ AM_RANGE(0x0800, 0xbfff) AM_ROM /* PROM board ROM area */
+ AM_RANGE(0xc800, 0xcfff) AM_READWRITE(MRA8_RAM, mainram_w) AM_BASE(&mainram)
+ AM_RANGE(0xe000, 0xefff) AM_READWRITE(MRA8_RAM, vectorram_w) AM_BASE(&vectorram) AM_SIZE(&vectorram_size)
+ADDRESS_MAP_END
+
+
+/* complete memory map derived from schematics */
+static ADDRESS_MAP_START( main_portmap, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0xbc, 0xbc) /* AM_READ ??? */
+ AM_RANGE(0xbd, 0xbe) AM_WRITE(multiply_w)
+ AM_RANGE(0xbe, 0xbe) AM_READ(multiply_r)
+ AM_RANGE(0xbf, 0xbf) AM_WRITE(unknown_w)
+
+ AM_RANGE(0xf9, 0xf9) AM_MIRROR(0x04) AM_WRITE(coin_count_w)
+ AM_RANGE(0xf8, 0xfb) AM_READ(mangled_ports_r)
+ AM_RANGE(0xfc, 0xfc) AM_READ_PORT("FC")
+ADDRESS_MAP_END
+
+
+
+/*************************************
+ *
+ * Generic Port definitions
+ *
+ *************************************/
+
+static INPUT_PORTS_START( g80v_generic )
+ PORT_START_TAG("D7D6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) /* P1.5 */
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* n/c */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* n/c */
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) /* n/c */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(3) /* P1.8 */
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.13 */
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.14 */
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* n/c */
+
+ PORT_START_TAG("D5D4")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) /* P1.10 */
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) /* P1.15 */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.16 */
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.17 */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.18 */
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) /* P1.19 */
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.20 */
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.21 */
+
+ PORT_START_TAG("D3D2")
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW1:8" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x01, "SW1:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x02, "SW1:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x04, "SW1:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x08, "SW1:1" )
+
+ PORT_START_TAG("D1D0")
+ PORT_DIPNAME( 0x0f, 0x03, DEF_STR( Coin_A )) PORT_DIPLOCATION("SW2:8,7,6,5")
+ PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ))
+ PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ))
+ PORT_DIPSETTING( 0x09, "2 Coins/1 Credit 5/3 6/4" )
+ PORT_DIPSETTING( 0x0a, "2 Coins/1 Credit 4/3" )
+ PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ))
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ))
+ PORT_DIPSETTING( 0x0b, "1 Coin/1 Credit 5/6" )
+ PORT_DIPSETTING( 0x0c, "1 Coin/1 Credit 4/5" )
+ PORT_DIPSETTING( 0x0d, "1 Coin/1 Credit 2/3" )
+ PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ))
+ PORT_DIPSETTING( 0x0f, "1 Coin/2 Credits 4/9" )
+ PORT_DIPSETTING( 0x0e, "1 Coin/2 Credits 5/11" )
+ PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ))
+ PORT_DIPSETTING( 0x06, DEF_STR( 1C_4C ))
+ PORT_DIPSETTING( 0x07, DEF_STR( 1C_5C ))
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_6C ))
+ PORT_DIPNAME( 0xf0, 0x30, DEF_STR( Coin_B )) PORT_DIPLOCATION("SW2:4,3,2,1")
+ PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ))
+ PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ))
+ PORT_DIPSETTING( 0x90, "2 Coins/1 Credit 5/3 6/4" )
+ PORT_DIPSETTING( 0xa0, "2 Coins/1 Credit 4/3" )
+ PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ))
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ))
+ PORT_DIPSETTING( 0xb0, "1 Coin/1 Credit 5/6" )
+ PORT_DIPSETTING( 0xc0, "1 Coin/1 Credit 4/5" )
+ PORT_DIPSETTING( 0xd0, "1 Coin/1 Credit 2/3" )
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ))
+ PORT_DIPSETTING( 0xf0, "1 Coin/2 Credits 4/9" )
+ PORT_DIPSETTING( 0xe0, "1 Coin/2 Credits 5/11" )
+ PORT_DIPSETTING( 0x50, DEF_STR( 1C_3C ))
+ PORT_DIPSETTING( 0x60, DEF_STR( 1C_4C ))
+ PORT_DIPSETTING( 0x70, DEF_STR( 1C_5C ))
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_6C ))
+
+ PORT_START_TAG("FC")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) /* P1.23 */
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) /* P1.24 */
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) /* P1.25 */
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) /* P1.26 */
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) /* P1.27 */
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) /* P1.28 */
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) /* P1.29 */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* P1.30 */
+
+ PORT_START_TAG("SERVICESW")
+ PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_HIGH )
+INPUT_PORTS_END
+
+
+
+/*************************************
+ *
+ * Specific Port definitions
+ *
+ *************************************/
+
+static INPUT_PORTS_START( elim2 )
+ PORT_INCLUDE( g80v_generic )
+
+ PORT_MODIFY("D7D6")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+
+ PORT_MODIFY("D5D4")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+
+ PORT_MODIFY("D3D2")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet )) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Upright )) // This switch is not documented in the manual
+ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ))
+ PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW1:7" ) // Unused according to manual
+ PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Lives )) PORT_DIPLOCATION("SW1:6,5")
+ PORT_DIPSETTING( 0x04, "3" )
+ PORT_DIPSETTING( 0x08, "4" )
+ PORT_DIPSETTING( 0x0c, "5" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty )) PORT_DIPLOCATION("SW1:4,3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy )) // This option is not documented in the manual
+ PORT_DIPSETTING( 0x10, DEF_STR( Medium ))
+ PORT_DIPSETTING( 0x20, DEF_STR( Hard ))
+ PORT_DIPSETTING( 0x30, DEF_STR( Hardest ))
+ PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Bonus_Life )) PORT_DIPLOCATION("SW1:2,1")
+ PORT_DIPSETTING( 0xc0, DEF_STR( None ))
+ PORT_DIPSETTING( 0x80, "10000" )
+ PORT_DIPSETTING( 0x40, "20000" )
+ PORT_DIPSETTING( 0x00, "30000" )
+
+ PORT_MODIFY("FC")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( elim2c )
+ PORT_INCLUDE( elim2 )
+
+ PORT_MODIFY("D7D6")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_MODIFY("D5D4")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
+
+ PORT_MODIFY("FC")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( elim4 )
+ PORT_INCLUDE( g80v_generic )
+
+ PORT_MODIFY("D7D6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(elim4_joint_coin_r, 0) /* combination of all four coin inputs */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+
+ PORT_MODIFY("D5D4")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+
+ PORT_MODIFY("D3D2")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet )) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Upright )) // This switch is not documented in the manual
+ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ))
+ PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW1:7" ) // This switch is not documented in the manual
+ PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Lives )) PORT_DIPLOCATION("SW1:6,5")
+ PORT_DIPSETTING( 0x04, "3" )
+ PORT_DIPSETTING( 0x08, "4" )
+ PORT_DIPSETTING( 0x0c, "5" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty )) PORT_DIPLOCATION("SW1:4,3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy )) // This option is not documented in the manual
+ PORT_DIPSETTING( 0x10, DEF_STR( Medium ))
+ PORT_DIPSETTING( 0x20, DEF_STR( Hard ))
+ PORT_DIPSETTING( 0x30, DEF_STR( Hardest ))
+ PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Bonus_Life )) PORT_DIPLOCATION("SW1:2,1")
+ PORT_DIPSETTING( 0xc0, DEF_STR( None ))
+ PORT_DIPSETTING( 0x80, "10000" )
+ PORT_DIPSETTING( 0x40, "20000" )
+ PORT_DIPSETTING( 0x00, "30000" )
+
+ PORT_MODIFY("D1D0")
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW2:8" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW2:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW2:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW2:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW2:4" )
+ PORT_DIPNAME( 0xe0, 0x00, DEF_STR( Coin_A )) PORT_DIPLOCATION("SW2:3,2,1")
+ PORT_DIPSETTING( 0xe0, DEF_STR( 8C_1C ))
+ PORT_DIPSETTING( 0xc0, DEF_STR( 7C_1C ))
+ PORT_DIPSETTING( 0xa0, DEF_STR( 6C_1C ))
+ PORT_DIPSETTING( 0x80, DEF_STR( 5C_1C ))
+ PORT_DIPSETTING( 0x60, DEF_STR( 4C_1C ))
+ PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ))
+ PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ))
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ))
+
+ PORT_MODIFY("FC")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
+
+ PORT_START_TAG("COINS")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(1)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(1)
+ PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( spacfury )
+ PORT_INCLUDE( g80v_generic )
+
+ PORT_MODIFY("D5D4")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
+
+ PORT_MODIFY("D3D2")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet )) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Upright ))
+ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ))
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds )) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives )) PORT_DIPLOCATION("SW1:6,5")
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x04, "3" )
+ PORT_DIPSETTING( 0x08, "4" )
+ PORT_DIPSETTING( 0x0c, "5" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty )) PORT_DIPLOCATION("SW1:4,3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ))
+ PORT_DIPSETTING( 0x10, DEF_STR( Medium ))
+ PORT_DIPSETTING( 0x20, DEF_STR( Hard ))
+ PORT_DIPSETTING( 0x30, DEF_STR( Hardest ))
+ PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Bonus_Life )) PORT_DIPLOCATION("SW1:2,1")
+ PORT_DIPSETTING( 0x00, "10000" )
+ PORT_DIPSETTING( 0x40, "20000" )
+ PORT_DIPSETTING( 0x80, "30000" )
+ PORT_DIPSETTING( 0xc0, "40000" )
+
+ PORT_MODIFY("FC")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( zektor )
+ PORT_INCLUDE( g80v_generic )
+
+ PORT_MODIFY("D3D2")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet )) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Upright ))
+ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ))
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds )) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives )) PORT_DIPLOCATION("SW1:6,5")
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x04, "3" )
+ PORT_DIPSETTING( 0x08, "4" )
+ PORT_DIPSETTING( 0x0c, "5" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty )) PORT_DIPLOCATION("SW1:4,3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ))
+ PORT_DIPSETTING( 0x10, DEF_STR( Medium ))
+ PORT_DIPSETTING( 0x20, DEF_STR( Hard ))
+ PORT_DIPSETTING( 0x30, DEF_STR( Hardest ))
+ PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Bonus_Life )) PORT_DIPLOCATION("SW1:2,1")
+ PORT_DIPSETTING( 0x00, DEF_STR( None )) // These switches are not documented in the manual
+ PORT_DIPSETTING( 0xc0, "10000" )
+ PORT_DIPSETTING( 0x80, "20000" )
+ PORT_DIPSETTING( 0x40, "30000" )
+
+ PORT_MODIFY("FC")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 )
+
+ PORT_START_TAG("SPINNER")
+ PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(3) PORT_RESET
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( tacscan )
+ PORT_INCLUDE( g80v_generic )
+
+ PORT_MODIFY("D3D2")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet )) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Upright ))
+ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ))
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds )) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off )) // This switch isn't documented in the manual
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPNAME( 0x0c, 0x0c, "Number of Ships" ) PORT_DIPLOCATION("SW1:6,5")
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x04, "4" )
+ PORT_DIPSETTING( 0x08, "6" )
+ PORT_DIPSETTING( 0x0c, "8" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty )) PORT_DIPLOCATION("SW1:4,3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ))
+ PORT_DIPSETTING( 0x10, DEF_STR( Normal ))
+ PORT_DIPSETTING( 0x20, DEF_STR( Hard )) // This option isn't documented in the manual
+ PORT_DIPSETTING( 0x30, DEF_STR( Very_Hard ))
+ PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Bonus_Life )) PORT_DIPLOCATION("SW1:2,1")
+ PORT_DIPSETTING( 0x00, DEF_STR( None ))
+ PORT_DIPSETTING( 0xc0, "10000" )
+ PORT_DIPSETTING( 0x80, "20000" )
+ PORT_DIPSETTING( 0x40, "30000" )
+
+ PORT_MODIFY("FC")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 )
+
+ PORT_START_TAG("SPINNER")
+ PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_RESET
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( startrek )
+ PORT_INCLUDE( g80v_generic )
+
+ PORT_MODIFY("D3D2")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet )) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Upright )) // This switch isn't documented in the manual
+ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ))
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds )) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x00, DEF_STR( On ))
+ PORT_DIPNAME( 0x0c, 0x0c, "Photon Torpedoes" ) PORT_DIPLOCATION("SW1:6,5")
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x04, "2" )
+ PORT_DIPSETTING( 0x08, "3" )
+ PORT_DIPSETTING( 0x0c, "4" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty )) PORT_DIPLOCATION("SW1:4,3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ))
+ PORT_DIPSETTING( 0x10, DEF_STR( Medium ))
+ PORT_DIPSETTING( 0x20, DEF_STR( Hard ))
+ PORT_DIPSETTING( 0x30, "Tournament" )
+ PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Bonus_Life )) PORT_DIPLOCATION("SW1:2,1")
+ PORT_DIPSETTING( 0x00, "10000" )
+ PORT_DIPSETTING( 0x40, "20000" )
+ PORT_DIPSETTING( 0x80, "30000" )
+ PORT_DIPSETTING( 0xc0, "40000" )
+
+ PORT_MODIFY("FC")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON4 )
+
+ PORT_START_TAG("SPINNER")
+ PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_RESET
+INPUT_PORTS_END
+
+
+
+/*************************************
+ *
+ * Eliminator sound interfaces
+ *
+ *************************************/
+
+static const char *elim_sample_names[] =
+{
+ "*elim2",
+ "elim1.wav",
+ "elim2.wav",
+ "elim3.wav",
+ "elim4.wav",
+ "elim5.wav",
+ "elim6.wav",
+ "elim7.wav",
+ "elim8.wav",
+ "elim9.wav",
+ "elim10.wav",
+ "elim11.wav",
+ "elim12.wav",
+ 0 /* end of array */
+};
+
+static struct Samplesinterface elim2_samples_interface =
+{
+ 8, /* 8 channels */
+ elim_sample_names
+};
+
+
+
+/*************************************
+ *
+ * Space Fury sound interfaces
+ *
+ *************************************/
+
+static const char *spacfury_sample_names[] =
+{
+ "*spacfury",
+ /* Sound samples */
+ "sfury1.wav",
+ "sfury2.wav",
+ "sfury3.wav",
+ "sfury4.wav",
+ "sfury5.wav",
+ "sfury6.wav",
+ "sfury7.wav",
+ "sfury8.wav",
+ "sfury9.wav",
+ "sfury10.wav",
+ 0 /* end of array */
+};
+
+
+static struct Samplesinterface spacfury_samples_interface =
+{
+ 8, /* 8 channels */
+ spacfury_sample_names
+};
+
+
+/*************************************
+ *
+ * Zektor sound interfaces
+ *
+ *************************************/
+
+static const char *zektor_sample_names[] =
+{
+ "*zektor",
+ "elim1.wav", /* 0 fireball */
+ "elim2.wav", /* 1 bounce */
+ "elim3.wav", /* 2 Skitter */
+ "elim4.wav", /* 3 Eliminator */
+ "elim5.wav", /* 4 Electron */
+ "elim6.wav", /* 5 fire */
+ "elim7.wav", /* 6 thrust */
+ "elim8.wav", /* 7 Electron */
+ "elim9.wav", /* 8 small explosion */
+ "elim10.wav", /* 9 med explosion */
+ "elim11.wav", /* 10 big explosion */
+ 0
+};
+
+
+static struct Samplesinterface zektor_samples_interface =
+{
+ 8,
+ zektor_sample_names
+};
+
+
+
+/*************************************
+ *
+ * Machine drivers
+ *
+ *************************************/
+
+static MACHINE_DRIVER_START( g80v_base )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(Z80, CPU_CLOCK/2)
+ MDRV_CPU_PROGRAM_MAP(main_map,0)
+ MDRV_CPU_IO_MAP(main_portmap,0)
+ MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
+
+ MDRV_MACHINE_START(g80v)
+ MDRV_MACHINE_RESET(g80v)
+ MDRV_SCREEN_REFRESH_RATE(40)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_VECTOR )
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB15)
+ MDRV_SCREEN_SIZE(400, 300)
+ MDRV_SCREEN_VISIBLE_AREA(512, 1536, 640-32, 1408+32)
+ MDRV_PALETTE_LENGTH(256)
+
+ MDRV_VIDEO_START(sega)
+ MDRV_VIDEO_UPDATE(sega)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( elim2 )
+ MDRV_IMPORT_FROM(g80v_base)
+
+ /* custom sound board */
+ MDRV_SOUND_ADD(SAMPLES, 0)
+ MDRV_SOUND_CONFIG(elim2_samples_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( spacfury )
+ MDRV_IMPORT_FROM(g80v_base)
+
+ /* custom sound board */
+ MDRV_SOUND_ADD(SAMPLES, 0)
+ MDRV_SOUND_CONFIG(spacfury_samples_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
+
+ /* speech board */
+ MDRV_IMPORT_FROM(sega_speech_board)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( zektor )
+ MDRV_IMPORT_FROM(g80v_base)
+
+ /* custom sound board */
+ MDRV_SOUND_ADD(SAMPLES, 0)
+ MDRV_SOUND_CONFIG(zektor_samples_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
+
+ MDRV_SOUND_ADD(AY8910, CPU_CLOCK/2/2)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33)
+
+ /* speech board */
+ MDRV_IMPORT_FROM(sega_speech_board)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( tacscan )
+ MDRV_IMPORT_FROM(g80v_base)
+
+ /* universal sound board */
+ MDRV_IMPORT_FROM(sega_universal_sound_board)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( startrek )
+ MDRV_IMPORT_FROM(g80v_base)
+
+ /* speech board */
+ MDRV_IMPORT_FROM(sega_speech_board)
+
+ /* universal sound board */
+ MDRV_IMPORT_FROM(sega_universal_sound_board)
+MACHINE_DRIVER_END
+
+
+
+/*************************************
+ *
+ * ROM definitions
+ *
+ *************************************/
+
+ROM_START( elim2 )
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "969.cpu-u25", 0x0000, 0x0800, CRC(411207f2) SHA1(2a082be4052b5d8f365abd0a51ea805d270d1189) )
+ ROM_LOAD( "1333.prom-u1", 0x0800, 0x0800, CRC(fd2a2916) SHA1(431d340c0c9257d66f5851a591861bcefb600cec) )
+ ROM_LOAD( "1334.prom-u2", 0x1000, 0x0800, CRC(79eb5548) SHA1(d951de5c0ab94fdb6e58207ee9a147674dd74220) )
+ ROM_LOAD( "1335.prom-u3", 0x1800, 0x0800, CRC(3944972e) SHA1(59c84cf23898adb7e434c5802dbb821c79099890) )
+ ROM_LOAD( "1336.prom-u4", 0x2000, 0x0800, CRC(852f7b4d) SHA1(6db45b9d11374f4cadf185aec81f33c0040bc001) )
+ ROM_LOAD( "1337.prom-u5", 0x2800, 0x0800, CRC(cf932b08) SHA1(f0b61ca8266fd3de7522244c9b1587eecd24a4f1) )
+ ROM_LOAD( "1338.prom-u6", 0x3000, 0x0800, CRC(99a3f3c9) SHA1(aa7d4805c70311ebe24ff70fcc32c0e2a7c4488a) )
+ ROM_LOAD( "1339.prom-u7", 0x3800, 0x0800, CRC(d35f0fa3) SHA1(752f14b298604a9b91e94cd6d5d291ef33f27ec0) )
+ ROM_LOAD( "1340.prom-u8", 0x4000, 0x0800, CRC(8fd4da21) SHA1(f30627dd1fbcc12bb587742a9072bbf38ba48401) )
+ ROM_LOAD( "1341.prom-u9", 0x4800, 0x0800, CRC(629c9a28) SHA1(cb7df14ea1bb2d7997bfae1ca70b47763c73298a) )
+ ROM_LOAD( "1342.prom-u10", 0x5000, 0x0800, CRC(643df651) SHA1(80c5da44b5d2a7d97c7ba0067f773eb645a9d432) )
+ ROM_LOAD( "1343.prom-u11", 0x5800, 0x0800, CRC(d29d70d2) SHA1(ee2cd752b99ebd522eccf5e71d02c31479acfdf5) )
+ ROM_LOAD( "1344.prom-u12", 0x6000, 0x0800, CRC(c5e153a3) SHA1(7e805573aeed01e3d4ed477870800dd7ecad7a1b) )
+ ROM_LOAD( "1345.prom-u13", 0x6800, 0x0800, CRC(40597a92) SHA1(ee1ae2b424c38b40d2cbeda4aba3328e6d3f9c81) )
+
+ ROM_REGION( 0x0420, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ROM_END
+
+ROM_START( elim2a )
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "969.cpu-u25", 0x0000, 0x0800, CRC(411207f2) SHA1(2a082be4052b5d8f365abd0a51ea805d270d1189) )
+ ROM_LOAD( "1158.prom-u1", 0x0800, 0x0800, CRC(a40ac3a5) SHA1(9cf707e3439def17390ae16b49552fb1996a6335) )
+ ROM_LOAD( "1159.prom-u2", 0x1000, 0x0800, CRC(ff100604) SHA1(1636337c702473b5a567832a622b0c09bd1e2aba) )
+ ROM_LOAD( "1160a.prom-u3", 0x1800, 0x0800, CRC(ebfe33bd) SHA1(226da36becd278d34030f564fef61851819d2324) )
+ ROM_LOAD( "1161a.prom-u4", 0x2000, 0x0800, CRC(03d41db3) SHA1(da9e618314c01b56b9d66abd14f1e5bf928fff54) )
+ ROM_LOAD( "1162a.prom-u5", 0x2800, 0x0800, CRC(f2c7ece3) SHA1(86a9099ce97439cd849dc32ed2c164a1be14e4e7) )
+ ROM_LOAD( "1163a.prom-u6", 0x3000, 0x0800, CRC(1fc58b00) SHA1(732c57781cd45cd301b2337b6879ff811d9692f3) )
+ ROM_LOAD( "1164a.prom-u7", 0x3800, 0x0800, CRC(f37480d1) SHA1(3d7fac05d60083ddcd51c0190078c89a39f79a91) )
+ ROM_LOAD( "1165a.prom-u8", 0x4000, 0x0800, CRC(328819f8) SHA1(ed5e3488399b4481e69f623404a28515524af60a) )
+ ROM_LOAD( "1166a.prom-u9", 0x4800, 0x0800, CRC(1b8e8380) SHA1(d56ccc4fac9c8149ebef4939ba401372d69bf022) )
+ ROM_LOAD( "1167a.prom-u10", 0x5000, 0x0800, CRC(16aa3156) SHA1(652a547ff1cb4ede507418b392e28f30a3cc179c) )
+ ROM_LOAD( "1168a.prom-u11", 0x5800, 0x0800, CRC(3c7c893a) SHA1(73d2835833a6d40f6a9b0a87364af48a449d9674) )
+ ROM_LOAD( "1169a.prom-u12", 0x6000, 0x0800, CRC(5cee23b1) SHA1(66f6fc6163148608296e3d25abb194559a2f5179) )
+ ROM_LOAD( "1170a.prom-u13", 0x6800, 0x0800, CRC(8cdacd35) SHA1(f24f8a74cb4b8452ddbd42e61d3b0366bbee7f98) )
+
+ ROM_REGION( 0x0420, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ROM_END
+
+ROM_START( elim2c )
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "969t.cpu-u25", 0x0000, 0x0800, CRC(896a615c) SHA1(542386196eca9fd822e36508e173201ee8a962ed) )
+ ROM_LOAD( "1200.prom-u1", 0x0800, 0x0800, CRC(590beb6a) SHA1(307c33cbc0b90f290aac302366e3ce4f70e5265e) )
+ ROM_LOAD( "1201.prom-u2", 0x1000, 0x0800, CRC(fed32b30) SHA1(51fba99d3bf543318ebe70ee1aa91e3171767d6f) )
+ ROM_LOAD( "1202.prom-u3", 0x1800, 0x0800, CRC(0a2068d0) SHA1(90acf1e78f5c3266d1fbc31470ad4d6a8cb43fe8) )
+ ROM_LOAD( "1203.prom-u4", 0x2000, 0x0800, CRC(1f593aa2) SHA1(aaad927174fa806d2c602b5672b1396eb9ec50fa) )
+ ROM_LOAD( "1204.prom-u5", 0x2800, 0x0800, CRC(046f1030) SHA1(632ac37b84007f169ce72877d8089538413ba20b) )
+ ROM_LOAD( "1205.prom-u6", 0x3000, 0x0800, CRC(8d10b870) SHA1(cc91a06c6b0e1697c399700bc351384360ecd5a3) )
+ ROM_LOAD( "1206.prom-u7", 0x3800, 0x0800, CRC(7f6c5afa) SHA1(0e684c654cfe2365e7d21e7bccb25f1ddb883770) )
+ ROM_LOAD( "1207.prom-u8", 0x4000, 0x0800, CRC(6cc74d62) SHA1(3392e5cd177885be7391a2699164f39302554d26) )
+ ROM_LOAD( "1208.prom-u9", 0x4800, 0x0800, CRC(cc37a631) SHA1(084ecc6b0179fe4f984131d057d5de5382443911) )
+ ROM_LOAD( "1209.prom-u10", 0x5000, 0x0800, CRC(844922f8) SHA1(0ad201fce2eaa7dde77d8694d226aad8b9a46ea7) )
+ ROM_LOAD( "1210.prom-u11", 0x5800, 0x0800, CRC(7b289783) SHA1(5326ca94b5197ef99db4ea3b28051090f0d7a9ce) )
+ ROM_LOAD( "1211.prom-u12", 0x6000, 0x0800, CRC(17349db7) SHA1(8e7ee1fbf153a36a13f3252ca4c588df531b56ec) )
+ ROM_LOAD( "1212.prom-u13", 0x6800, 0x0800, CRC(152cf376) SHA1(56c3141598b8bac81e85b1fc7052fdd19cd95609) )
+
+ ROM_REGION( 0x0420, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ROM_END
+
+ROM_START( elim4 )
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "1390.cpu-u25", 0x0000, 0x0800, CRC(97010c3e) SHA1(b07db05abf48461b633bbabe359a973a5bc6da13) )
+ ROM_LOAD( "1347.prom-u1", 0x0800, 0x0800, CRC(657d7320) SHA1(ef8a637d94dfa8b9dfa600269d914d635e597a9c) )
+ ROM_LOAD( "1348.prom-u2", 0x1000, 0x0800, CRC(b15fe578) SHA1(d53773a5f7ec3c130d4ff75a5348a9f37c82c7c8) )
+ ROM_LOAD( "1349.prom-u3", 0x1800, 0x0800, CRC(0702b586) SHA1(9847172872419c475d474ff09612c38b867e15af) )
+ ROM_LOAD( "1350.prom-u4", 0x2000, 0x0800, CRC(4168dd3b) SHA1(1f26877c63cd7983dfa9a869e0442e8a213f382f) )
+ ROM_LOAD( "1351.prom-u5", 0x2800, 0x0800, CRC(c950f24c) SHA1(497a9aa7b9d040a4ff7b3f938093edec2218120d) )
+ ROM_LOAD( "1352.prom-u6", 0x3000, 0x0800, CRC(dc8c91cc) SHA1(c99224c7e57dfce9440771f78ce90ea576feed2a) )
+ ROM_LOAD( "1353.prom-u7", 0x3800, 0x0800, CRC(11eda631) SHA1(8ba926268762d491d28d5629d5a310b1accca47d) )
+ ROM_LOAD( "1354.prom-u8", 0x4000, 0x0800, CRC(b9dd6e7a) SHA1(ab6780f0abe99a5ef76746d45384e80399c6d611) )
+ ROM_LOAD( "1355.prom-u9", 0x4800, 0x0800, CRC(c92c7237) SHA1(18aad6618df51a1980775a3aaa4447205453a8af) )
+ ROM_LOAD( "1356.prom-u10", 0x5000, 0x0800, CRC(889b98e3) SHA1(23661149e7ffbdbc2c95920d13e9b8b24f86cd9a) )
+ ROM_LOAD( "1357.prom-u11", 0x5800, 0x0800, CRC(d79248a5) SHA1(e58062d5c4e5f6fe8d70dd9b55d46a57137c9a64) )
+ ROM_LOAD( "1358.prom-u12", 0x6000, 0x0800, CRC(c5dabc77) SHA1(2dc59e627f40fefefc206f2e9d070a62606e44fc) )
+ ROM_LOAD( "1359.prom-u13", 0x6800, 0x0800, CRC(24c8e5d8) SHA1(d0ae6e1dfd05d170c49837760369f04df4eaa14f) )
+ ROM_LOAD( "1360.prom-u14", 0x7000, 0x0800, CRC(96d48238) SHA1(76a7b49081cd2d0dd1976077aa66b6d5ae5b2b43) )
+
+ ROM_REGION( 0x0420, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ROM_END
+
+ROM_START( elim4p )
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "1390.cpu-u25", 0x0000, 0x0800, CRC(97010c3e) SHA1(b07db05abf48461b633bbabe359a973a5bc6da13) )
+ ROM_LOAD( "sw1.prom-u1", 0x0800, 0x0800, CRC(5350b8eb) SHA1(def9192971d1943e45cea1845b1d8c8e2a01bc38) )
+ ROM_LOAD( "sw2.prom-u2", 0x1000, 0x0800, CRC(44f45465) SHA1(e3139878602864509803dabc0f9c278e4b856431) )
+ ROM_LOAD( "sw3.prom-u3", 0x1800, 0x0800, CRC(5b692c3c) SHA1(6cd1361e9f063af1f175baed466cc2667b776a52) )
+ ROM_LOAD( "sw4.prom-u4", 0x2000, 0x0800, CRC(0b78dd00) SHA1(f48c4bdd5fc2e818107b036aa6eddebf46a0e964) )
+ ROM_LOAD( "sw5.prom-u5", 0x2800, 0x0800, CRC(8b3795f1) SHA1(1bcd12791e45dd14c7541e6fe3798a8159b6c11b) )
+ ROM_LOAD( "sw6.prom-u6", 0x3000, 0x0800, CRC(4304b503) SHA1(2bc7a702d43092818ecb713fa0bac476c272e3a0) )
+ ROM_LOAD( "sw7.prom-u7", 0x3800, 0x0800, CRC(3cb4a604) SHA1(868c3c1bead99c2e6857d1c2eef02d84e0e87f29) )
+ ROM_LOAD( "sw8.prom-u8", 0x4000, 0x0800, CRC(bdc55223) SHA1(47ca7485c9e2878cbcb92d93a022f7d74a6d13df) )
+ ROM_LOAD( "sw9.prom-u9", 0x4800, 0x0800, CRC(f6ca1bf1) SHA1(e4dc6bd6486dff2d0e8a93e5c7649093107cde46) )
+ ROM_LOAD( "swa.prom-u10", 0x5000, 0x0800, CRC(12373f7f) SHA1(685c1202345ae8ef53fa61b7254ce04efd94a12b) )
+ ROM_LOAD( "swb.prom-u11", 0x5800, 0x0800, CRC(d1effc6b) SHA1(b72cd14642f26ac50fbe6199d121b0278588ca22) )
+ ROM_LOAD( "swc.prom-u12", 0x6000, 0x0800, CRC(bf361ab3) SHA1(23e3396dc937c0a19d0d312d1de3443b43807d91) )
+ ROM_LOAD( "swd.prom-u13", 0x6800, 0x0800, CRC(ae2c88e5) SHA1(b0833051f543529502e05fb183effa9f817757fb) )
+ ROM_LOAD( "swe.prom-u14", 0x7000, 0x0800, CRC(ec4cc343) SHA1(00e107eaf530ce6bec2afffd7d7bedd7763cfb17) )
+
+ ROM_REGION( 0x0420, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ROM_END
+
+
+ROM_START( spacfury ) /* Revision C */
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "969c.cpu-u25", 0x0000, 0x0800, CRC(411207f2) SHA1(2a082be4052b5d8f365abd0a51ea805d270d1189) )
+ ROM_LOAD( "960c.prom-u1", 0x0800, 0x0800, CRC(d071ab7e) SHA1(c7d2429e4fa77988d7ac62bc68f876ffb7467838) )
+ ROM_LOAD( "961c.prom-u2", 0x1000, 0x0800, CRC(aebc7b97) SHA1(d0a0328ed34de9bd2c83da4ddc2d017e2b5a8bdc) )
+ ROM_LOAD( "962c.prom-u3", 0x1800, 0x0800, CRC(dbbba35e) SHA1(0400d1ba09199d19f5b8aa5bb1a85ed27930822d) )
+ ROM_LOAD( "963c.prom-u4", 0x2000, 0x0800, CRC(d9e9eadc) SHA1(1ad228d65dca48d084bbac358af80882886e7a40) )
+ ROM_LOAD( "964c.prom-u5", 0x2800, 0x0800, CRC(7ed947b6) SHA1(c0fd7ed74a87cc422a42e2a4f9eb947f5d5d9fed) )
+ ROM_LOAD( "965c.prom-u6", 0x3000, 0x0800, CRC(d2443a22) SHA1(45e5d43eae89e25370bb8e8db2b664642a238eb9) )
+ ROM_LOAD( "966c.prom-u7", 0x3800, 0x0800, CRC(1985ccfc) SHA1(8c5931519b976c82a94d17279cc919b4baad5bb7) )
+ ROM_LOAD( "967c.prom-u8", 0x4000, 0x0800, CRC(330f0751) SHA1(07ae52fdbfa2cc326f88dc76c3dc8e145b592863) )
+ ROM_LOAD( "968c.prom-u9", 0x4800, 0x0800, CRC(8366eadb) SHA1(8e4cb30a730237da2e933370faf5eaa1a41cacbf) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 )
+ ROM_LOAD( "808c.speech-u7", 0x0000, 0x0800, CRC(b779884b) SHA1(ac07e99717a1f51b79f3e43a5d873ebfa0559320) )
+
+ ROM_REGION( 0x4000, REGION_SOUND1, 0 )
+ ROM_LOAD( "970c.speech-u6", 0x0000, 0x1000, CRC(979d8535) SHA1(1ed097e563319ca6d2b7df9875ce7ee921eae468) )
+ ROM_LOAD( "971c.speech-u5", 0x1000, 0x1000, CRC(022dbd32) SHA1(4e0504b5ccc28094078912673c49571cf83804ab) )
+ ROM_LOAD( "972c.speech-u4", 0x2000, 0x1000, CRC(fad9346d) SHA1(784e5ab0fb00235cfd733c502baf23960923504f) )
+
+ ROM_REGION( 0x0440, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ ROM_LOAD( "6331.speech-u30", 0x0420, 0x0020, CRC(adcb81d0) SHA1(74b0efc7e8362b0c98e54a6107981cff656d87e1) ) /* speech board addressing */
+ROM_END
+
+ROM_START( spacfura ) /* Revision A */
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "969a.cpu-u25", 0x0000, 0x0800, CRC(896a615c) SHA1(542386196eca9fd822e36508e173201ee8a962ed) )
+ ROM_LOAD( "960a.prom-u1", 0x0800, 0x0800, CRC(e1ea7964) SHA1(9c84c525973fcf1437b062d98195272723249d02) )
+ ROM_LOAD( "961a.prom-u2", 0x1000, 0x0800, CRC(cdb04233) SHA1(6f8d2fe6d46d04ebe94b7943006d63b24c88ed5a) )
+ ROM_LOAD( "962a.prom-u3", 0x1800, 0x0800, CRC(5f03e632) SHA1(c6e8d72ba13ab05ec01a78502948a73c21e0fd69) )
+ ROM_LOAD( "963a.prom-u4", 0x2000, 0x0800, CRC(45a77b44) SHA1(91f4822b89ec9c16c67c781a11fabfa4b9914660) )
+ ROM_LOAD( "964a.prom-u5", 0x2800, 0x0800, CRC(ba008f8b) SHA1(24f5bef240ae2bcfd5b1d95f51b3599f79518b56) )
+ ROM_LOAD( "965a.prom-u6", 0x3000, 0x0800, CRC(78677d31) SHA1(ed5810aa4bddbfe36a6ff9992dd0cb58cce66836) )
+ ROM_LOAD( "966a.prom-u7", 0x3800, 0x0800, CRC(a8a51105) SHA1(f5e0fa662552f50fa6905f579d4c678b790ffa96) )
+ ROM_LOAD( "967a.prom-u8", 0x4000, 0x0800, CRC(d60f667d) SHA1(821271ec1918e22ed29a5b1f4b0182765ef5ba10) )
+ ROM_LOAD( "968a.prom-u9", 0x4800, 0x0800, CRC(aea85b6a) SHA1(8778ff0be34cd4fd5b8f6f76c64bfca68d4d240e) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 )
+ ROM_LOAD( "808a.speech-u7", 0x0000, 0x0800, CRC(5988c767) SHA1(3b91a8cd46aa7e714028cc40f700fea32287afb1) )
+
+ ROM_REGION( 0x4000, REGION_SOUND1, 0 )
+ ROM_LOAD( "970.speech-u6", 0x0000, 0x1000, CRC(f3b47b36) SHA1(6ae0b627349664140a7f70799645b368e452d69c) )
+ ROM_LOAD( "971.speech-u5", 0x1000, 0x1000, CRC(e72bbe88) SHA1(efadf8aa448c289cf4d0cf1831255b9ac60820f2) )
+ ROM_LOAD( "972.speech-u4", 0x2000, 0x1000, CRC(8b3da539) SHA1(3a0c4af96a2116fc668a340534582776b2018663) )
+
+ ROM_REGION( 0x0440, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ ROM_LOAD( "6331.speech-u30", 0x0420, 0x0020, CRC(adcb81d0) SHA1(74b0efc7e8362b0c98e54a6107981cff656d87e1) ) /* speech board addressing */
+ROM_END
+
+ROM_START( spacfurb ) /* Revision B */
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "969a.cpu-u25", 0x0000, 0x0800, CRC(896a615c) SHA1(542386196eca9fd822e36508e173201ee8a962ed) )
+ ROM_LOAD( "960b.prom-u1", 0x0800, 0x0800, CRC(8a99b63f) SHA1(4b9ec152e0fad50afeea11f5d61331f3211da606) )
+ ROM_LOAD( "961b.prom-u2", 0x1000, 0x0800, CRC(c72c1609) SHA1(b489423b52a15275b63f6b01b9aa75ad1ce777b5) )
+ ROM_LOAD( "962b.prom-u3", 0x1800, 0x0800, CRC(7ffc338d) SHA1(2c37049657305c465e3a5301e0be9f1afc9333c0) )
+ ROM_LOAD( "963b.prom-u4", 0x2000, 0x0800, CRC(4fe0bd88) SHA1(d1902c8b2c2577fb49894aeac4c9d6b8cf38f2f6) )
+ ROM_LOAD( "964b.prom-u5", 0x2800, 0x0800, CRC(09b359db) SHA1(e1d6af48680dc0f34068ee6e916650dac738e280) )
+ ROM_LOAD( "965b.prom-u6", 0x3000, 0x0800, CRC(7c1f9b71) SHA1(ebe29a558e7239b4f0bc49a1fe92e5f1903edce3) )
+ ROM_LOAD( "966b.prom-u7", 0x3800, 0x0800, CRC(8933b852) SHA1(dabb219195a668893c82ccc80ed09989f7fd83af) )
+ ROM_LOAD( "967b.prom-u8", 0x4000, 0x0800, CRC(82b5768d) SHA1(823d8c0a537bad62e8186f88f8d02a0f3dc6da0f) )
+ ROM_LOAD( "968b.prom-u9", 0x4800, 0x0800, CRC(fea68f02) SHA1(83bef40dfaac014b7929239d81075335ff8fd506) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 )
+ ROM_LOAD( "808a.speech-u7", 0x0000, 0x0800, CRC(5988c767) SHA1(3b91a8cd46aa7e714028cc40f700fea32287afb1) )
+
+ ROM_REGION( 0x4000, REGION_SOUND1, 0 )
+ ROM_LOAD( "970.speech-u6", 0x0000, 0x1000, CRC(f3b47b36) SHA1(6ae0b627349664140a7f70799645b368e452d69c) )
+ ROM_LOAD( "971.speech-u5", 0x1000, 0x1000, CRC(e72bbe88) SHA1(efadf8aa448c289cf4d0cf1831255b9ac60820f2) )
+ ROM_LOAD( "972.speech-u4", 0x2000, 0x1000, CRC(8b3da539) SHA1(3a0c4af96a2116fc668a340534582776b2018663) )
+
+ ROM_REGION( 0x0440, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ ROM_LOAD( "6331.speech-u30", 0x0420, 0x0020, CRC(adcb81d0) SHA1(74b0efc7e8362b0c98e54a6107981cff656d87e1) ) /* speech board addressing */
+ROM_END
+
+
+ROM_START( zektor )
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "1611.cpu-u25", 0x0000, 0x0800, CRC(6245aa23) SHA1(815f3c7edad9c290b719a60964085e90e7268112) )
+ ROM_LOAD( "1586.prom-u1", 0x0800, 0x0800, CRC(efeb4fb5) SHA1(b337179c01870c953b8d38c20263802e9a7936d3) )
+ ROM_LOAD( "1587.prom-u2", 0x1000, 0x0800, CRC(daa6c25c) SHA1(061e390775b6dd24f85d51951267bca4339a3845) )
+ ROM_LOAD( "1588.prom-u3", 0x1800, 0x0800, CRC(62b67dde) SHA1(831bad0f5a601d6859f69c70d0962c970d92db0e) )
+ ROM_LOAD( "1589.prom-u4", 0x2000, 0x0800, CRC(c2db0ba4) SHA1(658773f2b56ea805d7d678e300f9bbc896fbf176) )
+ ROM_LOAD( "1590.prom-u5", 0x2800, 0x0800, CRC(4d948414) SHA1(f60d295b0f8f798126dbfdc197943d8511238390) )
+ ROM_LOAD( "1591.prom-u6", 0x3000, 0x0800, CRC(b0556a6c) SHA1(84b481cc60dc3df3a1cf18b1ece4c70bcc7bb5a1) )
+ ROM_LOAD( "1592.prom-u7", 0x3800, 0x0800, CRC(750ecadf) SHA1(83ddd482230fbf6cf78a054fb4abd5bc8aec3ec8) )
+ ROM_LOAD( "1593.prom-u8", 0x4000, 0x0800, CRC(34f8850f) SHA1(d93594e529aca8d847c9f1e9055f1840f6069fb2) )
+ ROM_LOAD( "1594.prom-u9", 0x4800, 0x0800, CRC(52b22ab2) SHA1(c8f822a1a54081cfc88149c97b4dc19aa745a8d5) )
+ ROM_LOAD( "1595.prom-u10", 0x5000, 0x0800, CRC(a704d142) SHA1(95c1249a8efd1a69972ffd7a4da76a0bca5095d9) )
+ ROM_LOAD( "1596.prom-u11", 0x5800, 0x0800, CRC(6975e33d) SHA1(3f12037edd6f1b803b5f864789f4b88958ac9578) )
+ ROM_LOAD( "1597.prom-u12", 0x6000, 0x0800, CRC(d48ab5c2) SHA1(3f4faf4b131b120b30cd4e73ff34d5cd7ef6c47a) )
+ ROM_LOAD( "1598.prom-u13", 0x6800, 0x0800, CRC(ab54a94c) SHA1(9dd57b4b6e46d46922933128d9786df011c6133d) )
+ ROM_LOAD( "1599.prom-u14", 0x7000, 0x0800, CRC(c9d4f3a5) SHA1(8516914b49fad85222cbdd9a43609834f5d0f13d) )
+ ROM_LOAD( "1600.prom-u15", 0x7800, 0x0800, CRC(893b7dbc) SHA1(136135f0be2e8dddfa0d21a5f4119ee4685c4866) )
+ ROM_LOAD( "1601.prom-u16", 0x8000, 0x0800, CRC(867bdf4f) SHA1(5974d32d878206abd113f74ba20fa5276cf21a6f) )
+ ROM_LOAD( "1602.prom-u17", 0x8800, 0x0800, CRC(bd447623) SHA1(b8d255aeb32096891379330c5b8adf1d151d70c2) )
+ ROM_LOAD( "1603.prom-u18", 0x9000, 0x0800, CRC(9f8f10e8) SHA1(ffe9d872d9011b3233cb06d966852319f9e4cd01) )
+ ROM_LOAD( "1604.prom-u19", 0x9800, 0x0800, CRC(ad2f0f6c) SHA1(494a224905b1dac58b3b50f65a8be986b68b06f2) )
+ ROM_LOAD( "1605.prom-u20", 0xa000, 0x0800, CRC(e27d7144) SHA1(5b82fda797d86e11882d1f9738a59092c5e3e7d8) )
+ ROM_LOAD( "1606.prom-u21", 0xa800, 0x0800, CRC(7965f636) SHA1(5c8720beedab4979a813ce7f0e8961c863973ff7) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 )
+ ROM_LOAD( "1607.speech-u7", 0x0000, 0x0800, CRC(b779884b) SHA1(ac07e99717a1f51b79f3e43a5d873ebfa0559320) )
+
+ ROM_REGION( 0x4000, REGION_SOUND1, 0 )
+ ROM_LOAD( "1608.speech-u6", 0x0000, 0x1000, CRC(637e2b13) SHA1(8a470f9a8a722f7ced340c4d32b4cf6f05b3e848) )
+ ROM_LOAD( "1609.speech-u5", 0x1000, 0x1000, CRC(675ee8e5) SHA1(e314482028b8925ad02e833a1d22224533d0a683) )
+ ROM_LOAD( "1610.speech-u4", 0x2000, 0x1000, CRC(2915c7bd) SHA1(3ed98747b5237aa1b3bab6866292370dc2c7655a) )
+
+ ROM_REGION( 0x0440, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ ROM_LOAD( "6331.speech-u30", 0x0420, 0x0020, CRC(adcb81d0) SHA1(74b0efc7e8362b0c98e54a6107981cff656d87e1) ) /* speech board addressing */
+ROM_END
+
+
+ROM_START( tacscan )
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "1711a.cpu-u25", 0x0000, 0x0800, CRC(0da13158) SHA1(256c5441a4841441501c9b7bcf09e0e99e8dd671) )
+ ROM_LOAD( "1670c.prom-u1", 0x0800, 0x0800, CRC(98de6fd5) SHA1(f22c215d7558e00366fec5092abb51c670468f8c) )
+ ROM_LOAD( "1671a.prom-u2", 0x1000, 0x0800, CRC(dc400074) SHA1(70093ef56e0784173a06da1ac781bb9d8c4e7fc5) )
+ ROM_LOAD( "1672a.prom-u3", 0x1800, 0x0800, CRC(2caf6f7e) SHA1(200119260f78bb1c5389707b3ceedfbc1ae43549) )
+ ROM_LOAD( "1673a.prom-u4", 0x2000, 0x0800, CRC(1495ce3d) SHA1(3189f8061961d90a52339c855c06e81f4537fb2b) )
+ ROM_LOAD( "1674a.prom-u5", 0x2800, 0x0800, CRC(ab7fc5d9) SHA1(b2d9241d83d175ead4da36d7311a41a5f972e06a) )
+ ROM_LOAD( "1675a.prom-u6", 0x3000, 0x0800, CRC(cf5e5016) SHA1(78a3f1e4a905515330d4737ac38576ac6e0d8611) )
+ ROM_LOAD( "1676a.prom-u7", 0x3800, 0x0800, CRC(b61a3ab3) SHA1(0f4ef5c7fe299ad20fa4637260282a733f1cf461) )
+ ROM_LOAD( "1677a.prom-u8", 0x4000, 0x0800, CRC(bc0273b1) SHA1(8e8d8830f17b9fa6d45d98108ca02d90c29de574) )
+ ROM_LOAD( "1678b.prom-u9", 0x4800, 0x0800, CRC(7894da98) SHA1(2de7c121ad847e51a10cb1b81aec84cc44a3d04c) )
+ ROM_LOAD( "1679a.prom-u10", 0x5000, 0x0800, CRC(db865654) SHA1(db4d5675b53ff2bbaf70090fd064e98862f4ad33) )
+ ROM_LOAD( "1680a.prom-u11", 0x5800, 0x0800, CRC(2c2454de) SHA1(74101806439c9faeba88ffe573fa4f93ffa0ba3c) )
+ ROM_LOAD( "1681a.prom-u12", 0x6000, 0x0800, CRC(77028885) SHA1(bc981620ebbfbe4e32b3b4d00504475634454c57) )
+ ROM_LOAD( "1682a.prom-u13", 0x6800, 0x0800, CRC(babe5cf1) SHA1(26219b7a26f818fee2fe579ec6fb0b16c6bf056f) )
+ ROM_LOAD( "1683a.prom-u14", 0x7000, 0x0800, CRC(1b98b618) SHA1(19854cb2741ba37c11ae6d429fa6c17ff930f5e5) )
+ ROM_LOAD( "1684a.prom-u15", 0x7800, 0x0800, CRC(cb3ded3b) SHA1(f1e886f4f71b0f6f2c11fb8b4921c3452fc9b2c0) )
+ ROM_LOAD( "1685a.prom-u16", 0x8000, 0x0800, CRC(43016a79) SHA1(ee22c1fe0c8df90d9215175104f8a796c3d2aed3) )
+ ROM_LOAD( "1686a.prom-u17", 0x8800, 0x0800, CRC(a4397772) SHA1(cadc95b869f5bf5dba7f03dfe5ae64a50899cced) )
+ ROM_LOAD( "1687a.prom-u18", 0x9000, 0x0800, CRC(002f3bc4) SHA1(7f3795a05d5651c90cdcd4d00c46d05178b433ea) )
+ ROM_LOAD( "1688a.prom-u19", 0x9800, 0x0800, CRC(0326d87a) SHA1(3a5ea4526db417b9e00b24b019c1c6016773c9e7) )
+ ROM_LOAD( "1709a.prom-u20", 0xa000, 0x0800, CRC(f35ed1ec) SHA1(dce95a862af0c6b67fb76b99fee0523d53b7551c) )
+ ROM_LOAD( "1710a.prom-u21", 0xa800, 0x0800, CRC(6203be22) SHA1(89731c7c88d0125a11368d707f566eb53c783266) )
+
+ ROM_REGION( 0x0420, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ROM_END
+
+
+ROM_START( startrek )
+ ROM_REGION( 0xc000, REGION_CPU1, 0 )
+ ROM_LOAD( "1873.cpu-u25", 0x0000, 0x0800, CRC(be46f5d9) SHA1(fadf13042d31b0dacf02a3166545c946f6fd3f33) )
+ ROM_LOAD( "1848.prom-u1", 0x0800, 0x0800, CRC(65e3baf3) SHA1(0c081ed6c8be0bb5eb3d5769ac1f0b8fe4735d11) )
+ ROM_LOAD( "1849.prom-u2", 0x1000, 0x0800, CRC(8169fd3d) SHA1(439d4b857083ae40df7d7f53c36ec13b05d86a86) )
+ ROM_LOAD( "1850.prom-u3", 0x1800, 0x0800, CRC(78fd68dc) SHA1(fb56567458807d9becaacac11091931af9889620) )
+ ROM_LOAD( "1851.prom-u4", 0x2000, 0x0800, CRC(3f55ab86) SHA1(f75ce0c56e22e8758dd1f5ce9ac00f5f41b13465) )
+ ROM_LOAD( "1852.prom-u5", 0x2800, 0x0800, CRC(2542ecfb) SHA1(7cacee44670768e9fae1024f172b867193d2ea4a) )
+ ROM_LOAD( "1853.prom-u6", 0x3000, 0x0800, CRC(75c2526a) SHA1(6e86b30fcdbe7622ab873092e7a7a46d8bad790f) )
+ ROM_LOAD( "1854.prom-u7", 0x3800, 0x0800, CRC(096d75d0) SHA1(26e90c296b00239a6cde4ec5e80cccd7bb36bcbd) )
+ ROM_LOAD( "1855.prom-u8", 0x4000, 0x0800, CRC(bc7b9a12) SHA1(6dc60e380dc5790cd345b06c064ea7d69570aadb) )
+ ROM_LOAD( "1856.prom-u9", 0x4800, 0x0800, CRC(ed9fe2fb) SHA1(5d56e8499cb4f54c5e76a9231c53d95777777e05) )
+ ROM_LOAD( "1857.prom-u10", 0x5000, 0x0800, CRC(28699d45) SHA1(c133eb4fc13987e634d3789bfeaf9e03196f8fd3) )
+ ROM_LOAD( "1858.prom-u11", 0x5800, 0x0800, CRC(3a7593cb) SHA1(7504f960507579d043b7ee20fb8fd2610399ff4b) )
+ ROM_LOAD( "1859.prom-u12", 0x6000, 0x0800, CRC(5b11886b) SHA1(b0fb6e912953822242501943f7214e4af6ab7891) )
+ ROM_LOAD( "1860.prom-u13", 0x6800, 0x0800, CRC(62eb96e6) SHA1(51d1f5e48e3e21147584ace61b8832ad892cb6e2) )
+ ROM_LOAD( "1861.prom-u14", 0x7000, 0x0800, CRC(99852d1d) SHA1(eaea6a99f0a7f0292db3ea19649b5c1be45b9507) )
+ ROM_LOAD( "1862.prom-u15", 0x7800, 0x0800, CRC(76ce27b2) SHA1(8fa8d73aa4dcf3709ecd057bad3278fac605988c) )
+ ROM_LOAD( "1863.prom-u16", 0x8000, 0x0800, CRC(dd92d187) SHA1(5a11cdc91bb7b36ea98503892847d8dbcedfe95a) )
+ ROM_LOAD( "1864.prom-u17", 0x8800, 0x0800, CRC(e37d3a1e) SHA1(15d949989431dcf1e0406f1e3745f3ee91012ff5) )
+ ROM_LOAD( "1865.prom-u18", 0x9000, 0x0800, CRC(b2ec8125) SHA1(70982c614471614f6b490ae2d65faec0eff2ac37) )
+ ROM_LOAD( "1866.prom-u19", 0x9800, 0x0800, CRC(6f188354) SHA1(e99946467090b68559c2b54ad2e85204b71a459f) )
+ ROM_LOAD( "1867.prom-u20", 0xa000, 0x0800, CRC(b0a3eae8) SHA1(51a0855753dc2d4fe1a05bd54fa958beeab35299) )
+ ROM_LOAD( "1868.prom-u21", 0xa800, 0x0800, CRC(8b4e2e07) SHA1(11f7de6327abf88012854417224b38a2352a9dc7) )
+ ROM_LOAD( "1869.prom-u22", 0xb000, 0x0800, CRC(e5663070) SHA1(735944c2b924964f72f3bb3d251a35ea2aef3d15) )
+ ROM_LOAD( "1870.prom-u23", 0xb800, 0x0800, CRC(4340616d) SHA1(e93686a29377933332523425532d102e30211111) )
+
+ ROM_REGION( 0x0800, REGION_CPU2, 0 )
+ ROM_LOAD( "1670.speech-u7", 0x0000, 0x0800, CRC(b779884b) SHA1(ac07e99717a1f51b79f3e43a5d873ebfa0559320) )
+
+ ROM_REGION( 0x4000, REGION_SOUND1, 0 )
+ ROM_LOAD( "1871.speech-u6", 0x0000, 0x1000, CRC(03713920) SHA1(25a0158cab9983248e91133f96d1849c9e9bcbd2) )
+ ROM_LOAD( "1872.speech-u5", 0x1000, 0x1000, CRC(ebb5c3a9) SHA1(533b6f0499b311f561cf7aba14a7f48ca7c47321) )
+
+ ROM_REGION( 0x0440, REGION_PROMS, 0 )
+ ROM_LOAD( "s-c.xyt-u39", 0x0000, 0x0400, CRC(56484d19) SHA1(61f43126fdcfc230638ed47085ae037a098e6781) ) /* sine table */
+ ROM_LOAD( "pr-82.cpu-u15", 0x0400, 0x0020, CRC(c609b79e) SHA1(49dbcbb607079a182d7eb396c0da097166ea91c9) ) /* CPU board addressing */
+ ROM_LOAD( "6331.speech-u30", 0x0420, 0x0020, CRC(adcb81d0) SHA1(74b0efc7e8362b0c98e54a6107981cff656d87e1) ) /* speech board addressing */
+ROM_END
+
+
+
+/*************************************
+ *
+ * Driver initialization
+ *
+ *************************************/
+
+static DRIVER_INIT( elim2 )
+{
+ /* configure security */
+ sega_security(70);
+
+ /* configure sound */
+ has_usb = FALSE;
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3e, 0x3e, 0, 0, elim1_sh_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3f, 0x3f, 0, 0, elim2_sh_w);
+}
+
+
+static DRIVER_INIT( elim4 )
+{
+ /* configure security */
+ sega_security(76);
+
+ /* configure sound */
+ has_usb = FALSE;
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3e, 0x3e, 0, 0, elim1_sh_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3f, 0x3f, 0, 0, elim2_sh_w);
+
+ /* configure inputs */
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0xf8, 0xf8, 0, 0, spinner_select_w);
+ memory_install_read8_handler(0, ADDRESS_SPACE_IO, 0xfc, 0xfc, 0, 0, elim4_input_r);
+}
+
+
+static DRIVER_INIT( spacfury )
+{
+ /* configure security */
+ sega_security(64);
+
+ /* configure sound */
+ has_usb = FALSE;
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x38, 0x38, 0, 0, sega_speech_data_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3b, 0x3b, 0, 0, sega_speech_control_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3e, 0x3e, 0, 0, spacfury1_sh_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3f, 0x3f, 0, 0, spacfury2_sh_w);
+}
+
+
+static DRIVER_INIT( zektor )
+{
+ /* configure security */
+ sega_security(82);
+
+ /* configure sound */
+ has_usb = FALSE;
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x38, 0x38, 0, 0, sega_speech_data_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3b, 0x3b, 0, 0, sega_speech_control_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3c, 0x3c, 0, 0, AY8910_control_port_0_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3d, 0x3d, 0, 0, AY8910_write_port_0_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3e, 0x3e, 0, 0, zektor1_sh_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3f, 0x3f, 0, 0, zektor2_sh_w);
+
+ /* configure inputs */
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0xf8, 0xf8, 0, 0, spinner_select_w);
+ memory_install_read8_handler(0, ADDRESS_SPACE_IO, 0xfc, 0xfc, 0, 0, spinner_input_r);
+}
+
+
+static DRIVER_INIT( tacscan )
+{
+ /* configure security */
+ sega_security(76);
+
+ /* configure sound */
+ has_usb = TRUE;
+ memory_install_read8_handler(0, ADDRESS_SPACE_IO, 0x3f, 0x3f, 0, 0, sega_usb_status_r);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3f, 0x3f, 0, 0, sega_usb_data_w);
+ memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, sega_usb_ram_r);
+ memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, usb_ram_w);
+
+ /* configure inputs */
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0xf8, 0xf8, 0, 0, spinner_select_w);
+ memory_install_read8_handler(0, ADDRESS_SPACE_IO, 0xfc, 0xfc, 0, 0, spinner_input_r);
+}
+
+
+static DRIVER_INIT( startrek )
+{
+ /* configure security */
+ sega_security(64);
+
+ /* configure sound */
+ has_usb = TRUE;
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x38, 0x38, 0, 0, sega_speech_data_w);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3b, 0x3b, 0, 0, sega_speech_control_w);
+
+ memory_install_read8_handler(0, ADDRESS_SPACE_IO, 0x3f, 0x3f, 0, 0, sega_usb_status_r);
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0x3f, 0x3f, 0, 0, sega_usb_data_w);
+ memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, sega_usb_ram_r);
+ memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, usb_ram_w);
+
+ /* configure inputs */
+ memory_install_write8_handler(0, ADDRESS_SPACE_IO, 0xf8, 0xf8, 0, 0, spinner_select_w);
+ memory_install_read8_handler(0, ADDRESS_SPACE_IO, 0xfc, 0xfc, 0, 0, spinner_input_r);
+}
+
+
+
+/*************************************
+ *
+ * Game drivers
+ *
+ *************************************/
+
+GAME( 1981, elim2, 0, elim2, elim2, elim2, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (2 Players, set 1)", 0 )
+GAME( 1981, elim2a, elim2, elim2, elim2, elim2, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (2 Players, set 2)", 0 )
+GAME( 1981, elim2c, elim2, elim2, elim2c, elim2, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (2 Players, cocktail)", 0 )
+GAME( 1981, elim4, elim2, elim2, elim4, elim4, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (4 Players)", 0 )
+GAME( 1981, elim4p, elim2, elim2, elim4, elim4, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (4 Players, prototype)", 0 )
+GAME( 1981, spacfury, 0, spacfury, spacfury, spacfury, ORIENTATION_FLIP_Y, "Sega", "Space Fury (revision C)", 0 )
+GAME( 1981, spacfura, spacfury, spacfury, spacfury, spacfury, ORIENTATION_FLIP_Y, "Sega", "Space Fury (revision A)", 0 )
+GAME( 1981, spacfurb, spacfury, spacfury, spacfury, spacfury, ORIENTATION_FLIP_Y, "Sega", "Space Fury (revision B)", 0 )
+GAME( 1982, zektor, 0, zektor, zektor, zektor, ORIENTATION_FLIP_Y, "Sega", "Zektor (revision B)", 0 )
+GAME( 1982, tacscan, 0, tacscan, tacscan, tacscan, ORIENTATION_FLIP_X ^ ROT270, "Sega", "Tac/Scan", GAME_IMPERFECT_SOUND )
+GAME( 1982, startrek, 0, startrek, startrek, startrek, ORIENTATION_FLIP_Y, "Sega", "Star Trek", GAME_IMPERFECT_SOUND )