/*************************************************************************** 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.mikesarcade.com/cgi-bin/spies.cgi?action=url&type=info&page=segaxyfaq1.6.txt * 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 noticeable 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 "emu.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" #include "sound/samples.h" #include "audio/segasnd.h" #include "machine/segag80.h" #include "includes/segag80v.h" /************************************* * * Constants * *************************************/ #define CPU_CLOCK 8000000 #define VIDEO_CLOCK 15468480 /************************************* * * Machine setup and config * *************************************/ static INPUT_CHANGED( service_switch ) { /* pressing the service switch sends an NMI */ if (newval) cputag_set_input_line(field.machine(), "maincpu", INPUT_LINE_NMI, PULSE_LINE); } static MACHINE_START( g80v ) { segag80v_state *state = machine.driver_data(); /* register for save states */ state_save_register_global_array(machine, state->m_mult_data); state_save_register_global(machine, state->m_mult_result); state_save_register_global(machine, state->m_spinner_select); state_save_register_global(machine, state->m_spinner_sign); state_save_register_global(machine, state->m_spinner_count); } /************************************* * * RAM writes/decryption * *************************************/ static offs_t decrypt_offset(address_space *space, offs_t offset) { segag80v_state *state = space->machine().driver_data(); /* ignore anything but accesses via opcode $32 (LD $(XXYY),A) */ offs_t pc = cpu_get_previouspc(&space->device()); if ((UINT16)pc == 0xffff || space->read_byte(pc) != 0x32) return offset; /* fetch the low byte of the address and munge it */ return (offset & 0xff00) | (*state->m_decrypt)(pc, space->read_byte(pc + 1)); } static WRITE8_HANDLER( mainram_w ) { segag80v_state *state = space->machine().driver_data(); state->m_mainram[decrypt_offset(space, offset)] = data; } static WRITE8_DEVICE_HANDLER( usb_ram_w ) { sega_usb_ram_w(device, decrypt_offset(device->machine().device("maincpu")->memory().space(AS_PROGRAM), offset), data); } static WRITE8_HANDLER( vectorram_w ) { segag80v_state *state = space->machine().driver_data(); state->m_vectorram[decrypt_offset(space, 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 = input_port_read(space->machine(), "D7D6"); UINT8 d5d4 = input_port_read(space->machine(), "D5D4"); UINT8 d3d2 = input_port_read(space->machine(), "D3D2"); UINT8 d1d0 = input_port_read(space->machine(), "D1D0"); int shift = offset & 3; return demangle(d7d6 >> shift, d5d4 >> shift, d3d2 >> shift, d1d0 >> shift); } /************************************* * * Spinner control emulation * *************************************/ static WRITE8_HANDLER( spinner_select_w ) { segag80v_state *state = space->machine().driver_data(); state->m_spinner_select = data; } static READ8_HANDLER( spinner_input_r ) { segag80v_state *state = space->machine().driver_data(); INT8 delta; if (state->m_spinner_select & 1) return input_port_read(space->machine(), "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 = input_port_read(space->machine(), "SPINNER"); if (delta != 0) { state->m_spinner_sign = (delta >> 7) & 1; state->m_spinner_count += abs(delta); } return ~((state->m_spinner_count << 1) | state->m_spinner_sign); } /************************************* * * Eliminator 4-player controls * *************************************/ static CUSTOM_INPUT( elim4_joint_coin_r ) { return (input_port_read(field.machine(), "COINS") & 0xf) != 0xf; } static READ8_HANDLER( elim4_input_r ) { segag80v_state *state = space->machine().driver_data(); UINT8 result = 0; /* bit 3 enables demux */ if (state->m_spinner_select & 8) { /* Demux bit 0-2. Only 6 and 7 are connected */ switch (state->m_spinner_select & 7) { case 6: /* player 3 & 4 controls */ result = input_port_read(space->machine(), "FC"); break; case 7: /* the 4 coin inputs */ result = input_port_read(space->machine(), "COINS"); break; } } /* LS240 has inverting outputs */ return (result ^ 0xff); } /************************************* * * Multiplier * *************************************/ static WRITE8_HANDLER( multiply_w ) { segag80v_state *state = space->machine().driver_data(); state->m_mult_data[offset] = data; if (offset == 1) state->m_mult_result = state->m_mult_data[0] * state->m_mult_data[1]; } static READ8_HANDLER( multiply_r ) { segag80v_state *state = space->machine().driver_data(); UINT8 result = state->m_mult_result; state->m_mult_result >>= 8; return result; } /************************************* * * Misc other I/O * *************************************/ static WRITE8_HANDLER( coin_count_w ) { coin_counter_w(space->machine(), 0, (data >> 7) & 1); coin_counter_w(space->machine(), 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", cpu_get_pc(&space->device()), data); } /************************************* * * Main CPU memory handlers * *************************************/ /* complete memory map derived from schematics */ static ADDRESS_MAP_START( main_map, AS_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_RAM_WRITE(mainram_w) AM_BASE_MEMBER(segag80v_state, m_mainram) AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(vectorram_w) AM_BASE_MEMBER(segag80v_state, m_vectorram) AM_SIZE_MEMBER(segag80v_state, m_vectorram_size) ADDRESS_MAP_END /* complete memory map derived from schematics */ static ADDRESS_MAP_START( main_portmap, AS_IO, 8 ) ADDRESS_MAP_GLOBAL_MASK(0xff) 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("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("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("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("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("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("SERVICESW") PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_HIGH ) PORT_CHANGED(service_switch, 0) 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, NULL) /* 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("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("D5D4") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.15 */ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.19 */ 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("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("D5D4") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.15 */ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.19 */ 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("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("D5D4") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.15 */ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) /* P1.19 */ 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("SPINNER") PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_RESET INPUT_PORTS_END /************************************* * * Eliminator sound interfaces * *************************************/ static const char *const 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 const samples_interface elim2_samples_interface = { 8, /* 8 channels */ elim_sample_names }; /************************************* * * Space Fury sound interfaces * *************************************/ static const char *const 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 const samples_interface spacfury_samples_interface = { 8, /* 8 channels */ spacfury_sample_names }; /************************************* * * Zektor sound interfaces * *************************************/ static const char *const 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 const samples_interface zektor_samples_interface = { 8, zektor_sample_names }; /************************************* * * Machine drivers * *************************************/ static MACHINE_CONFIG_START( g80v_base, segag80v_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK/2) MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_IO_MAP(main_portmap) MCFG_CPU_VBLANK_INT("screen", irq0_line_hold) MCFG_MACHINE_START(g80v) /* video hardware */ MCFG_SCREEN_ADD("screen", VECTOR) MCFG_SCREEN_REFRESH_RATE(40) MCFG_SCREEN_SIZE(400, 300) MCFG_SCREEN_VISIBLE_AREA(512, 1536, 640-32, 1408+32) MCFG_SCREEN_UPDATE(segag80v) MCFG_VIDEO_START(segag80v) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( elim2, g80v_base ) /* custom sound board */ MCFG_SOUND_ADD("samples", SAMPLES, 0) MCFG_SOUND_CONFIG(elim2_samples_interface) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( spacfury, g80v_base ) /* custom sound board */ MCFG_SOUND_ADD("samples", SAMPLES, 0) MCFG_SOUND_CONFIG(spacfury_samples_interface) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10) /* speech board */ MCFG_FRAGMENT_ADD(sega_speech_board) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( zektor, g80v_base ) /* custom sound board */ MCFG_SOUND_ADD("samples", SAMPLES, 0) MCFG_SOUND_CONFIG(zektor_samples_interface) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10) MCFG_SOUND_ADD("aysnd", AY8910, CPU_CLOCK/2/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33) /* speech board */ MCFG_FRAGMENT_ADD(sega_speech_board) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( tacscan, g80v_base ) /* universal sound board */ MCFG_FRAGMENT_ADD(sega_universal_sound_board) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( startrek, g80v_base ) /* speech board */ MCFG_FRAGMENT_ADD(sega_speech_board) /* universal sound board */ MCFG_FRAGMENT_ADD(sega_universal_sound_board) MACHINE_CONFIG_END /************************************* * * ROM definitions * *************************************/ ROM_START( elim2 ) ROM_REGION( 0xc000, "maincpu", 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, "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, "maincpu", 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, "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, "maincpu", 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, "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, "maincpu", 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, "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, "maincpu", 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, "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, "maincpu", 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, "audiocpu", 0 ) ROM_LOAD( "808c.speech-u7", 0x0000, 0x0800, CRC(b779884b) SHA1(ac07e99717a1f51b79f3e43a5d873ebfa0559320) ) ROM_REGION( 0x4000, "speech", 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, "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( spacfurya ) /* Revision A */ ROM_REGION( 0xc000, "maincpu", 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, "audiocpu", 0 ) ROM_LOAD( "808a.speech-u7", 0x0000, 0x0800, CRC(5988c767) SHA1(3b91a8cd46aa7e714028cc40f700fea32287afb1) ) ROM_REGION( 0x4000, "speech", 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, "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( spacfuryb ) /* Revision B */ ROM_REGION( 0xc000, "maincpu", 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, "audiocpu", 0 ) ROM_LOAD( "808a.speech-u7", 0x0000, 0x0800, CRC(5988c767) SHA1(3b91a8cd46aa7e714028cc40f700fea32287afb1) ) ROM_REGION( 0x4000, "speech", 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, "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, "maincpu", 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, "audiocpu", 0 ) ROM_LOAD( "1607.speech-u7", 0x0000, 0x0800, CRC(b779884b) SHA1(ac07e99717a1f51b79f3e43a5d873ebfa0559320) ) ROM_REGION( 0x4000, "speech", 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, "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, "maincpu", 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, "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, "maincpu", 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, "audiocpu", 0 ) ROM_LOAD( "1670.speech-u7", 0x0000, 0x0800, CRC(b779884b) SHA1(ac07e99717a1f51b79f3e43a5d873ebfa0559320) ) ROM_REGION( 0x4000, "speech", 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, "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 ) { segag80v_state *state = machine.driver_data(); address_space *iospace = machine.device("maincpu")->memory().space(AS_IO); /* configure security */ state->m_decrypt = segag80_security(70); /* configure sound */ state->m_usb = NULL; iospace->install_legacy_write_handler(0x3e, 0x3e, FUNC(elim1_sh_w)); iospace->install_legacy_write_handler(0x3f, 0x3f, FUNC(elim2_sh_w)); } static DRIVER_INIT( elim4 ) { segag80v_state *state = machine.driver_data(); address_space *iospace = machine.device("maincpu")->memory().space(AS_IO); /* configure security */ state->m_decrypt = segag80_security(76); /* configure sound */ state->m_usb = NULL; iospace->install_legacy_write_handler(0x3e, 0x3e, FUNC(elim1_sh_w)); iospace->install_legacy_write_handler(0x3f, 0x3f, FUNC(elim2_sh_w)); /* configure inputs */ iospace->install_legacy_write_handler(0xf8, 0xf8, FUNC(spinner_select_w)); iospace->install_legacy_read_handler(0xfc, 0xfc, FUNC(elim4_input_r)); } static DRIVER_INIT( spacfury ) { segag80v_state *state = machine.driver_data(); address_space *iospace = machine.device("maincpu")->memory().space(AS_IO); /* configure security */ state->m_decrypt = segag80_security(64); /* configure sound */ state->m_usb = NULL; iospace->install_legacy_write_handler(*machine.device("segaspeech"), 0x38, 0x38, FUNC(sega_speech_data_w)); iospace->install_legacy_write_handler(*machine.device("segaspeech"), 0x3b, 0x3b, FUNC(sega_speech_control_w)); iospace->install_legacy_write_handler(0x3e, 0x3e, FUNC(spacfury1_sh_w)); iospace->install_legacy_write_handler(0x3f, 0x3f, FUNC(spacfury2_sh_w)); } static DRIVER_INIT( zektor ) { segag80v_state *state = machine.driver_data(); address_space *iospace = machine.device("maincpu")->memory().space(AS_IO); device_t *ay = machine.device("aysnd"); /* configure security */ state->m_decrypt = segag80_security(82); /* configure sound */ state->m_usb = NULL; iospace->install_legacy_write_handler(*machine.device("segaspeech"), 0x38, 0x38, FUNC(sega_speech_data_w)); iospace->install_legacy_write_handler(*machine.device("segaspeech"), 0x3b, 0x3b, FUNC(sega_speech_control_w)); iospace->install_legacy_write_handler(*ay, 0x3c, 0x3d, FUNC(ay8910_address_data_w)); iospace->install_legacy_write_handler(0x3e, 0x3e, FUNC(zektor1_sh_w)); iospace->install_legacy_write_handler(0x3f, 0x3f, FUNC(zektor2_sh_w)); /* configure inputs */ iospace->install_legacy_write_handler(0xf8, 0xf8, FUNC(spinner_select_w)); iospace->install_legacy_read_handler(0xfc, 0xfc, FUNC(spinner_input_r)); } static DRIVER_INIT( tacscan ) { segag80v_state *state = machine.driver_data(); address_space *pgmspace = machine.device("maincpu")->memory().space(AS_PROGRAM); address_space *iospace = machine.device("maincpu")->memory().space(AS_IO); /* configure security */ state->m_decrypt = segag80_security(76); /* configure sound */ state->m_usb = machine.device("usbsnd"); iospace->install_legacy_readwrite_handler(*state->m_usb, 0x3f, 0x3f, FUNC(sega_usb_status_r), FUNC(sega_usb_data_w)); pgmspace->install_legacy_readwrite_handler(*state->m_usb, 0xd000, 0xdfff, FUNC(sega_usb_ram_r), FUNC(usb_ram_w)); /* configure inputs */ iospace->install_legacy_write_handler(0xf8, 0xf8, FUNC(spinner_select_w)); iospace->install_legacy_read_handler(0xfc, 0xfc, FUNC(spinner_input_r)); } static DRIVER_INIT( startrek ) { segag80v_state *state = machine.driver_data(); address_space *pgmspace = machine.device("maincpu")->memory().space(AS_PROGRAM); address_space *iospace = machine.device("maincpu")->memory().space(AS_IO); /* configure security */ state->m_decrypt = segag80_security(64); /* configure sound */ state->m_usb = machine.device("usbsnd"); iospace->install_legacy_write_handler(*machine.device("segaspeech"), 0x38, 0x38, FUNC(sega_speech_data_w)); iospace->install_legacy_write_handler(*machine.device("segaspeech"), 0x3b, 0x3b, FUNC(sega_speech_control_w)); iospace->install_legacy_readwrite_handler(*state->m_usb, 0x3f, 0x3f, FUNC(sega_usb_status_r), FUNC(sega_usb_data_w)); pgmspace->install_legacy_readwrite_handler(*state->m_usb, 0xd000, 0xdfff, FUNC(sega_usb_ram_r), FUNC(usb_ram_w)); /* configure inputs */ iospace->install_legacy_write_handler(0xf8, 0xf8, FUNC(spinner_select_w)); iospace->install_legacy_read_handler(0xfc, 0xfc, FUNC(spinner_input_r)); } /************************************* * * Game drivers * *************************************/ GAME( 1981, elim2, 0, elim2, elim2, elim2, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (2 Players, set 1)", GAME_IMPERFECT_SOUND ) GAME( 1981, elim2a, elim2, elim2, elim2, elim2, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (2 Players, set 2)", GAME_IMPERFECT_SOUND ) GAME( 1981, elim2c, elim2, elim2, elim2c, elim2, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (2 Players, cocktail)", GAME_IMPERFECT_SOUND ) GAME( 1981, elim4, elim2, elim2, elim4, elim4, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (4 Players)", GAME_IMPERFECT_SOUND ) GAME( 1981, elim4p, elim2, elim2, elim4, elim4, ORIENTATION_FLIP_Y, "Gremlin", "Eliminator (4 Players, prototype)", GAME_IMPERFECT_SOUND ) GAME( 1981, spacfury, 0, spacfury, spacfury, spacfury, ORIENTATION_FLIP_Y, "Sega", "Space Fury (revision C)", GAME_IMPERFECT_SOUND ) GAME( 1981, spacfurya,spacfury, spacfury, spacfury, spacfury, ORIENTATION_FLIP_Y, "Sega", "Space Fury (revision A)", GAME_IMPERFECT_SOUND ) GAME( 1981, spacfuryb,spacfury, spacfury, spacfury, spacfury, ORIENTATION_FLIP_Y, "Sega", "Space Fury (revision B)", GAME_IMPERFECT_SOUND ) GAME( 1982, zektor, 0, zektor, zektor, zektor, ORIENTATION_FLIP_Y, "Sega", "Zektor (revision B)", GAME_IMPERFECT_SOUND ) 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 )