new WORKING games

-----------------
Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006)


new clones
----------
This commit is contained in:
Angelo Salese 2010-09-04 12:23:58 +00:00
parent b43c05c970
commit da8511a089
3 changed files with 525 additions and 17 deletions

View File

@ -1032,27 +1032,13 @@ static void sound_w(running_machine *machine, UINT8 data)
}
}
static void system16b_generic_init(running_machine *machine, int _rom_board)
static void system16b_common_init(running_machine* machine, int _rom_board)
{
segas1x_state *state = machine->driver_data<segas1x_state>();
/* set the ROM board */
state->rom_board = _rom_board;
/* allocate memory for regions not autmatically assigned */
segaic16_spriteram_0 = auto_alloc_array(machine, UINT16, 0x00800 / 2);
segaic16_paletteram = auto_alloc_array(machine, UINT16, 0x01000 / 2);
segaic16_tileram_0 = auto_alloc_array(machine, UINT16, 0x10000 / 2);
segaic16_textram_0 = auto_alloc_array(machine, UINT16, 0x01000 / 2);
workram = auto_alloc_array(machine, UINT16, 0x04000 / 2);
/* init the memory mapper */
segaic16_memory_mapper_init(machine->device("maincpu"), region_info_list[state->rom_board], sound_w, NULL);
/* init the FD1094 */
fd1094_driver_init(machine, "maincpu", segaic16_memory_mapper_set_decrypted);
/* reset the custom handlers and other pointers */
state->custom_io_r = NULL;
state->custom_io_w = NULL;
@ -1073,6 +1059,29 @@ static void system16b_generic_init(running_machine *machine, int _rom_board)
state_save_register_global(machine, state->mj_last_val);
state_save_register_global(machine, state->hwc_input_value);
state_save_register_global(machine, state->atomicp_sound_divisor);
}
static void system16b_generic_init(running_machine *machine, int _rom_board)
{
segas1x_state *state = machine->driver_data<segas1x_state>();
system16b_common_init(machine, _rom_board);
/* allocate memory for regions not autmatically assigned */
segaic16_spriteram_0 = auto_alloc_array(machine, UINT16, 0x00800 / 2);
segaic16_paletteram = auto_alloc_array(machine, UINT16, 0x01000 / 2);
segaic16_tileram_0 = auto_alloc_array(machine, UINT16, 0x10000 / 2);
segaic16_textram_0 = auto_alloc_array(machine, UINT16, 0x01000 / 2);
workram = auto_alloc_array(machine, UINT16, 0x04000 / 2);
/* init the memory mapper */
segaic16_memory_mapper_init(machine->device("maincpu"), region_info_list[state->rom_board], sound_w, NULL);
/* init the FD1094 */
fd1094_driver_init(machine, "maincpu", segaic16_memory_mapper_set_decrypted);
state_save_register_global_pointer(machine, segaic16_spriteram_0, 0x00800/2);
state_save_register_global_pointer(machine, segaic16_paletteram, 0x01000/2);
state_save_register_global_pointer(machine, segaic16_tileram_0, 0x10000/2);
@ -6675,3 +6684,457 @@ GAME( 1989, wrestwar1, wrestwar, system16b, wrestwar, generic_5704,
/* Custom Korean Board - these probably belong with the bootlegs... */
GAME( 1990, atomicp, 0, atomicp, atomicp, atomicp, ROT0, "Philko", "Atomic Point (Korea)" , 0) // korean clone board..
GAME( 1990, snapper, 0, atomicp, snapper, snapper, ROT0, "Philko", "Snapper (Korea)" , 0) // korean clone board..
/* ISG 'Selection Master' Type 2006 hardware
This is a 'multi-game' cart system (only the operator can select the game, via a dipswitch exposed from the cartridge)
The system is designed to look like a PGM system (the ISG logo and fonts are ripped straight from original IGS material,
and the external casing of the unit is near identical) The system does NOT however run PGM games, the cartridges won't
fit, and the hardware is basically a bootleg of Sega System 16 instead of PGM! So far only one cartridge has been seen.
There are various levels of 'protection' on the system
- Address XOR + 16-bit bitswap on the BIOS rom and Cartridge ROMs
- A device which performs a 32-bit bitswap, used to produce decryption keys for the data compressed on the cartridges
- An alternate way of reading the cartridge data through a port, which causes an additional 8-bit data xor to be applied
- A simple hardware RLE decompression device used to decrypt data for the BIOS (the games use a stronger software
implementation instead)
The PCB is entirely custom SMT components, as you'd expect from a modern bootleg, all chips have had their surface details
removed.
*/
/* these should probably go in a driver state derived from the Sega one */
static UINT16 isgsm_cart_addrlatch;
static UINT32 isgsm_cart_addr;
static int isgsm_type = 0;
static UINT32 isgsm_addr;
static UINT8 isgsm_mode;
static UINT16 isgsm_addrlatch;
static UINT32 isgsm_security;
static UINT16 isgsm_securitylatch;
static UINT8 isgsm_rle_control_position = 8;
static UINT8 isgsm_rle_control_byte;
static int isgsm_rle_latched;
static UINT8 isgsm_rle_byte;
#define ISGSM_CART_BANK "gamecart"
#define ISGSM_MAIN_BANK "mainbank"
static WRITE16_HANDLER( isgsm_sound_w16 )
{
sound_w(space->machine, data);
}
static WRITE16_HANDLER( isgsm_cart_addr_high_w )
{
isgsm_cart_addrlatch = data;
}
static WRITE16_HANDLER( isgsm_cart_addr_low_w )
{
isgsm_cart_addr = data | isgsm_cart_addrlatch<<16;
}
// the cart can be read here 8-bits at a time.
// when reading from this port the data is xored by a fixed value (maybe other carts differ?)
static READ16_HANDLER( isgsm_cart_data_r )
{
int size = memory_region_length(space->machine,"gamecart_rgn");
UINT8* rgn = memory_region(space->machine,"gamecart_rgn");
isgsm_cart_addr++;
UINT8 data = rgn[(isgsm_cart_addr&(size-1))^1]^0x66;
return data;
}
static WRITE16_HANDLER( isgsm_data_w )
{
UINT8* dest = 0;
switch (isgsm_type)
{
case 0x20: dest = memory_region(space->machine,"gfx2");
break;
case 0x21: dest = memory_region(space->machine,"gfx1");
break;
case 0x22: dest = memory_region(space->machine,"soundcpu");
break;
case 0x23: dest = memory_region(space->machine,"maincpu");
break;
default: // no other cases?
break;
}
if (dest)
{
int bytes_to_write;
// mode register
// droo
// d = direction
// r = hardware rle (used by the bios only, games are using some kind of software compression/encryption
// oo = operator mode (0 = plain, 1 = xor, 2 = OR, 3 = AND)
// address can auto-increment or decrement, happens *before* data is written
bytes_to_write = 1;
if (isgsm_mode&0x4)
{
if (!isgsm_rle_latched)
{
if (isgsm_rle_control_position==8)
{
isgsm_rle_control_byte = data;
isgsm_rle_control_position = 0;
bytes_to_write = 0;
}
else
{
if (((isgsm_rle_control_byte<<isgsm_rle_control_position)&0x80) == 0) // RLE
{
isgsm_rle_byte = data;
isgsm_rle_latched = 1;
}
else
{
bytes_to_write = 1;
}
isgsm_rle_control_position++;
}
}
else
{
isgsm_rle_latched = 0;
bytes_to_write = data+2;
data = isgsm_rle_byte;
}
}
for (int i=0;i<bytes_to_write;i++)
{
if (isgsm_mode&0x8)
{
isgsm_addr++;
isgsm_addr&=0xfffffff;
}
else
{
isgsm_addr--;
isgsm_addr&=0xfffffff;
}
switch (isgsm_mode&0x3)
{
case 0: dest[isgsm_addr] = data; break;
case 1: dest[isgsm_addr] ^= data; break;
case 2: dest[isgsm_addr] |= data; break; // not used, based on real hw test
case 3: dest[isgsm_addr] &= data; break; // ^^
}
if (dest == memory_region(space->machine,"gfx1"))
{
// we need to re-decode the tiles if writing to this area to keep MAME happy
gfx_element_mark_dirty(space->machine->gfx[0], (isgsm_addr&0x1ffff)/8);
}
}
}
}
static WRITE16_HANDLER( isgsm_type_w )
{
//printf("type set to %04x %04x\n", data, mem_mask);
isgsm_type = data;
}
static WRITE16_HANDLER( isgsm_addr_high_w )
{
// this is latched, doesn't get applied until low part is written.
isgsm_addrlatch = data;
}
static WRITE16_HANDLER( isgsm_addr_low_w )
{
// update the address and mode
isgsm_mode = (isgsm_addrlatch & 0xf000)>>12;
isgsm_addr = data | ((isgsm_addrlatch&0x0fff)<<16);
// also resets the RLE
isgsm_rle_control_position = 8;
isgsm_rle_control_byte = 0;
isgsm_rle_latched = 0;
}
static WRITE16_HANDLER( isgsm_cart_security_high_w )
{
// this is latched, doesn't get applied until low part is written.
isgsm_securitylatch = data;
}
static WRITE16_HANDLER( isgsm_cart_security_low_w )
{
isgsm_security = data | isgsm_securitylatch << 16;
// come up with security answer
// -- this probably depends on the cart.
isgsm_security = BITSWAP32(isgsm_security, 19, 20, 25, 26, 15, 0, 16, 2, 8, 9, 13, 14, 31, 21, 7, 18, 11, 30, 22, 17, 3, 4, 12, 28, 29, 5, 27, 10, 23, 24, 1, 6);
}
static READ16_HANDLER( isgsm_cart_security_low_r )
{
return isgsm_security & 0xffff;
}
static READ16_HANDLER( isgsm_cart_security_high_r )
{
return (isgsm_security>>16) & 0xffff;
}
WRITE16_HANDLER( isgsm_sound_reset_w )
{
if (data==0)
{
devtag_reset( space->machine, "soundcpu" );
space->machine->device<cpu_device>( "soundcpu" )->resume(SUSPEND_REASON_HALT );
}
else if (data==1)
{
devtag_reset( space->machine, "soundcpu" );
space->machine->device<cpu_device>( "soundcpu" )->suspend(SUSPEND_REASON_HALT, 1 );
}
}
static WRITE16_HANDLER( isgsm_main_bank_change_w )
{
// other values on real hw have strange results, change memory mapping etc??
if (data==1)
{
memory_set_bankptr(space->machine,ISGSM_MAIN_BANK, memory_region(space->machine, "maincpu"));
}
}
static MACHINE_START( isgsm )
{
memory_set_bankptr(machine,ISGSM_CART_BANK, memory_region(machine, "gamecart_rgn"));
memory_set_bankptr(machine,ISGSM_MAIN_BANK, memory_region(machine, "bios"));
}
static ADDRESS_MAP_START( isgsm_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROMBANK(ISGSM_MAIN_BANK) // this area is ALWAYS read-only, even when the game is banked in
AM_RANGE(0x200000, 0x23ffff) AM_RAM // used during startup for decompression
AM_RANGE(0x3f0000, 0x3fffff) AM_WRITE( rom_5704_bank_w )
AM_RANGE(0x400000, 0x40ffff) AM_RAM_WRITE(segaic16_tileram_0_w) AM_BASE(&segaic16_tileram_0)
AM_RANGE(0x410000, 0x410fff) AM_RAM_WRITE(segaic16_textram_0_w) AM_BASE(&segaic16_textram_0)
AM_RANGE(0x440000, 0x4407ff) AM_RAM AM_BASE(&segaic16_spriteram_0)
AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(segaic16_paletteram_w) AM_BASE(&segaic16_paletteram)
AM_RANGE(0xC40000, 0xC43fff) AM_READWRITE(misc_io_r, misc_io_w)
AM_RANGE(0xe00000, 0xe00001) AM_WRITE( isgsm_data_w ) // writes decompressed data here (copied from RAM..)
AM_RANGE(0xe00002, 0xe00003) AM_WRITE( isgsm_type_w ) // selects which 'type' of data we're writing
AM_RANGE(0xe00004, 0xe00005) AM_WRITE( isgsm_addr_high_w ) // high address, and some mode bits
AM_RANGE(0xe00006, 0xe00007) AM_WRITE( isgsm_addr_low_w ) // low address
AM_RANGE(0xe80000, 0xe80001) AM_READ( isgsm_cart_data_r ) // 8-bit port that the entire cart can be read from
AM_RANGE(0xe80002, 0xe80003) AM_READ_PORT("CARDDSW")
AM_RANGE(0xe80004, 0xe80005) AM_WRITE( isgsm_cart_addr_high_w )
AM_RANGE(0xe80006, 0xe80007) AM_WRITE( isgsm_cart_addr_low_w )
AM_RANGE(0xe80008, 0xe80009) AM_READWRITE( isgsm_cart_security_high_r, isgsm_cart_security_high_w ) // 32-bit bitswap device..
AM_RANGE(0xe8000a, 0xe8000b) AM_READWRITE( isgsm_cart_security_low_r, isgsm_cart_security_low_w )
AM_RANGE(0xee0000, 0xefffff) AM_ROMBANK(ISGSM_CART_BANK) // only the first 0x20000 bytes of the cart are visible here..
AM_RANGE(0xfe0006, 0xfe0007) AM_WRITE( isgsm_sound_w16 )
AM_RANGE(0xfe0008, 0xfe0009) AM_WRITE( isgsm_sound_reset_w )
AM_RANGE(0xfe000a, 0xfe000b) AM_WRITE( isgsm_main_bank_change_w )
AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_BASE(&workram)
ADDRESS_MAP_END
static INPUT_PORTS_START( isgsm )
PORT_INCLUDE( system16b_generic )
PORT_MODIFY("DSW2")
PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0001, "SW2:1" )
PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0002, "SW2:2" )
PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW2:4" )
PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW2:5" )
PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW2:6" )
PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW2:7" )
PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW2:8" )
PORT_MODIFY("UNUSED")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_MODIFY("DSW1")
PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0001, "SW1:1" )
PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0002, "SW1:2" )
PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW1:3" )
PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW1:4" )
PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW1:5" )
PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW1:6" )
PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW1:7" )
PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW1:8" )
PORT_START("CARDDSW") // on the gamecard..
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( shinfz )
PORT_INCLUDE( system16b_generic )
PORT_MODIFY("DSW2")
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:1")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x00, "240 (Cheat)")
PORT_DIPNAME( 0x30, 0x30, "Extra Ship Cost" ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x30, "5000" )
PORT_DIPSETTING( 0x20, "10000" )
PORT_DIPSETTING( 0x10, "15000" )
PORT_DIPSETTING( 0x00, "20000" )
PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,8")
PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_MODIFY("UNUSED")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_MODIFY("DSW1")
PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0001, "SW1:1" )
PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0002, "SW1:2" )
PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW1:3" )
PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW1:4" )
PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW1:5" )
PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW1:6" )
PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW1:7" )
PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW1:8" )
PORT_START("CARDDSW") // on the gamecard..
PORT_DIPNAME( 0x0003, 0x0000, "Game Type" )
PORT_DIPSETTING( 0x0000, "Shinobi Ninja Game" )
PORT_DIPSETTING( 0x0001, "FZ-2006 Game I" )
PORT_DIPSETTING( 0x0002, "FZ-2006 Game II" )
PORT_DIPSETTING( 0x0003, "Invalid" ) // this (or higher) gives 'BAD SELECT - Check Switch' message.
PORT_BIT( 0xfffc, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static MACHINE_RESET( isgsm )
{
segaic16_tilemap_reset(machine, 0);
/* configure sprite banks */
for (int i = 0; i < 16; i++)
segaic16_sprites_set_bank(machine, 0, i, i);
memory_set_bankptr(machine,ISGSM_CART_BANK, memory_region(machine, "gamecart_rgn"));
memory_set_bankptr(machine,ISGSM_MAIN_BANK, memory_region(machine, "bios"));
devtag_reset( machine, "maincpu" );
}
static MACHINE_CONFIG_DERIVED( isgsm, system16b )
/* basic machine hardware */
MDRV_DEVICE_REMOVE("maincpu")
MDRV_CPU_ADD("maincpu", M68000, 16000000) // no obvious CPU, but seems to be clocked faster than an original system16 based on the boot times
MDRV_CPU_PROGRAM_MAP(isgsm_map)
MDRV_CPU_VBLANK_INT("screen", irq4_line_hold)
MDRV_MACHINE_START(isgsm)
MDRV_MACHINE_RESET(isgsm)
MACHINE_CONFIG_END
DRIVER_INIT( isgsm )
{
system16b_common_init(machine, ROM_BOARD_171_5521);
// decrypt the bios...
UINT16* temp = (UINT16*)malloc(0x20000);
UINT16* rom = (UINT16*)memory_region(machine, "bios");
int i;
for (i=0;i<0x10000;i++)
{
temp[i^0x4127] = BITSWAP16(rom[i], 6, 14, 4, 2, 12, 10, 8, 0, 1, 9, 11, 13, 3, 5, 7, 15);
}
memcpy(rom, temp, 0x20000);
free(temp);
}
DRIVER_INIT( shinfz )
{
DRIVER_INIT_CALL( isgsm );
UINT16* temp = (UINT16*)malloc(0x200000);
UINT16* rom = (UINT16*)memory_region(machine, "gamecart_rgn");
int i;
for (i=0;i<0x100000;i++)
{
temp[i^0x68956] = BITSWAP16(rom[i], 8, 4, 12, 3, 6, 7, 1, 0, 15, 11, 5, 14, 10, 2, 9, 13);
}
memcpy(rom, temp, 0x200000);
free(temp);
}
/* other regions are filled with data from the game cartridge at run-time via port accesses */
#define ISGSM_BIOS \
ROM_REGION16_BE( 0x100000, "bios", 0 ) \
ROM_LOAD16_WORD_SWAP("ism2006v00.u1",0x00000,0x20000, CRC(2292585c) SHA1(97ba0e0f0be832a5114d95151e519bc027f6675b) ) \
ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASE00 ) \
ROM_REGION( 0x60000, "gfx1", ROMREGION_ERASE00 ) \
ROM_REGION16_BE( 0x200000, "gfx2", ROMREGION_ERASE00 ) \
ROM_REGION( 0x40000, "soundcpu", ROMREGION_ERASE00 ) \
ROM_START( isgsm )
ISGSM_BIOS
ROM_REGION16_BE( 0x200000, "gamecart_rgn", ROMREGION_ERASE00 )
ROM_END
ROM_START( shinfz )
ISGSM_BIOS
ROM_REGION16_BE( 0x200000, "gamecart_rgn", 0 )
ROM_LOAD16_WORD_SWAP("shin06.u13",0x00000,0x200000, CRC(39d773e9) SHA1(5284f90cb5190128a17ebee8b539a39c8914c364) )
ROM_END
GAME( 2006, isgsm, 0, isgsm, isgsm, isgsm, ROT0, "ISG", "ISG Selection Master Type 2006 BIOS", GAME_IS_BIOS_ROOT )
GAME( 2006, shinfz, isgsm, isgsm, shinfz, shinfz, ROT0, "ISG", "Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006)", 0 )

View File

@ -706,6 +706,46 @@ ROM_START( vigilant )
ROM_LOAD( "pal16l8.1b", 0x0400, 0x0104, NO_DUMP ) /* PAL is read protected */
ROM_END
ROM_START( vigilant1 )
ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
ROM_LOAD( "vg_a-8h-c.rom", 0x00000, 0x10000, CRC(0f77aa7e) SHA1(fcf156ba7d164808e65b7e9a695a2639a19cfc2e) )
ROM_LOAD( "vg_a-8l-a.rom", 0x10000, 0x10000, CRC(690d812f) SHA1(60d6513f8b27411018cdca1b25f94bc281476ae7) )
/* 0x20000-0x2ffff empty */
ROM_REGION( 0x10000, "soundcpu", 0 ) /* 64k for sound */
ROM_LOAD( "g05_c02.bin", 0x00000, 0x10000, CRC(10582b2d) SHA1(6e7e5f07c49b347b427572efeb180c89f49bf2c7) )
ROM_REGION( 0x20000, "gfx1", 0 )
ROM_LOAD( "f05_c08.bin", 0x00000, 0x10000, CRC(01579d20) SHA1(e58d8ca0ea0ac9d77225bf55faa499d1565924f9) )
ROM_LOAD( "h05_c09.bin", 0x10000, 0x10000, CRC(4f5872f0) SHA1(6af21ba1c94097eecce30585983b4b07528c8635) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD( "n07_c12.bin", 0x00000, 0x10000, CRC(10af8eb2) SHA1(664b178b248babc43a9af0fe140fe57bc7367762) )
ROM_LOAD( "k07_c10.bin", 0x10000, 0x10000, CRC(9576f304) SHA1(0ec2a7d3d82208e2a9a4ef9ab2824e6fe26ebbe5) )
ROM_LOAD( "o07_c13.bin", 0x20000, 0x10000, CRC(b1d9d4dc) SHA1(1aacf6b0ff8d102880d3dce3b55cd1488edb90cf) )
ROM_LOAD( "l07_c11.bin", 0x30000, 0x10000, CRC(4598be4a) SHA1(6b68ec94bdee0e58133a8d3891054ef44a8ff0e5) )
ROM_LOAD( "t07_c16.bin", 0x40000, 0x10000, CRC(f5425e42) SHA1(c401263b6a266d3e9cd23133f1d823fb4b095e3d) )
ROM_LOAD( "p07_c14.bin", 0x50000, 0x10000, CRC(cb50a17c) SHA1(eb15704f715b6475ae7096f8d82f1b20f8277c71) )
ROM_LOAD( "v07_c17.bin", 0x60000, 0x10000, CRC(959ba3c7) SHA1(dcd2a885ae7b61210cbd55a38ccbe91c73d071b0) )
ROM_LOAD( "s07_c15.bin", 0x70000, 0x10000, CRC(7f2e91c5) SHA1(27dcc9b696834897c36c0b7a1c6202d93f41ad8d) )
ROM_REGION( 0x40000, "gfx3", 0 )
ROM_LOAD( "d01_c05.bin", 0x00000, 0x10000, CRC(81b1ee5c) SHA1(2014165ec71f089fecb5a3e60b939cc0f565d7f1) )
ROM_LOAD( "e01_c06.bin", 0x10000, 0x10000, CRC(d0d33673) SHA1(39761d97a71deaf7f17233d5bd5a55dbb1e6b30e) )
ROM_LOAD( "f01_c07.bin", 0x20000, 0x10000, CRC(aae81695) SHA1(ca8e136eca3543b27f3a61b105d4a280711cd6ea) )
ROM_REGION( 0x10000, "samples", 0 ) /* samples */
ROM_LOAD( "d04_c01.bin", 0x00000, 0x10000, CRC(9b85101d) SHA1(6b8a0f33b9b66bb968f7b61e49d19a6afad8db95) )
ROM_REGION( 0x0600, "plds", 0 )
ROM_LOAD( "pal16l8.8r", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */
ROM_LOAD( "pal16l8.4m", 0x0200, 0x0104, CRC(6c628a26) SHA1(65a45e762ce218e4552c30302c1ac4272c099fb5) )
ROM_LOAD( "pal16l8.1b", 0x0400, 0x0104, NO_DUMP ) /* PAL is read protected */
ROM_END
ROM_START( vigilantu )
ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
ROM_LOAD( "a-8h", 0x00000, 0x08000, CRC(8d15109e) SHA1(9ef57047a0b53cd0143a260193b33e3d5680ca71) )
@ -912,7 +952,8 @@ ROM_START( buccanrsa )
ROM_LOAD( "prom2.u99", 0x0300, 0x0100, CRC(e0aa8869) SHA1(ac8bdfeba69420ba56ec561bf3d0f1229d02cea2) )
ROM_END
GAME( 1988, vigilant, 0, vigilant, vigilant, 0, ROT0, "Irem", "Vigilante (World)", GAME_NO_COCKTAIL )
GAME( 1988, vigilant, 0, vigilant, vigilant, 0, ROT0, "Irem", "Vigilante (World, set 1)", GAME_NO_COCKTAIL )
GAME( 1988, vigilant1,vigilant, vigilant, vigilant, 0, ROT0, "Irem", "Vigilante (World, set 2)", GAME_NO_COCKTAIL )
GAME( 1988, vigilantu,vigilant, vigilant, vigilant, 0, ROT0, "Irem (Data East USA license)", "Vigilante (US)", GAME_NO_COCKTAIL )
GAME( 1988, vigilantj,vigilant, vigilant, vigilant, 0, ROT0, "Irem", "Vigilante (Japan)", GAME_NO_COCKTAIL )
GAME( 1988, kikcubic, 0, kikcubic, kikcubic, 0, ROT0, "Irem", "Meikyu Jima (Japan)", GAME_NO_COCKTAIL ) /* English title is Kickle Cubicle */

View File

@ -1567,6 +1567,7 @@ const game_driver * const drivers[] =
DRIVER( youjyudn ) /* (c) 1986 (Japan) */
DRIVER( vigilant ) /* (c) 1988 (World) */
DRIVER( vigilant1 ) /* (c) 1988 (World) */
DRIVER( vigilantu ) /* (c) 1988 (US) */
DRIVER( vigilantj ) /* (c) 1988 (Japan) */
DRIVER( kikcubic ) /* (c) 1988 (Japan) */
@ -4003,7 +4004,6 @@ DokiDoki Penguin Land *not confirmed
DRIVER( atomicp ) /* (c) 1990 Philko - korean clone board */
DRIVER( snapper ) /* (c) 1990 Philko - korean clone board */
/* S16 Bootlegs */
DRIVER( bayrouteb1 )/* (c) 1989 (protected) (bootleg) */
DRIVER( bayrouteb2 )/* (c) 1989 (protected) (bootleg) */
@ -4023,6 +4023,10 @@ DokiDoki Penguin Land *not confirmed
DRIVER( tturfbl ) /* (c) 1989 (Datsu bootleg) */
DRIVER( wb3bbl ) /* BOOTLEG */
/* ISG S16 bootleg system */
DRIVER( isgsm )
DRIVER( shinfz )
/* System 18 */
DRIVER( shdancer ) /* 1989.05 Shadow Dancer (US) */
DRIVER( shdancerj ) /* 1989.11 Shadow Dancer (Japan) */