From da8511a089937149494ce68815e4b4d4da2a6d69 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Sat, 4 Sep 2010 12:23:58 +0000 Subject: [PATCH] new WORKING games ----------------- Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006) new clones ---------- --- src/mame/drivers/segas16b.c | 493 ++++++++++++++++++++++++++++++++++-- src/mame/drivers/vigilant.c | 43 +++- src/mame/mamedriv.c | 6 +- 3 files changed, 525 insertions(+), 17 deletions(-) diff --git a/src/mame/drivers/segas16b.c b/src/mame/drivers/segas16b.c index 7bc834b7f8d..e7cd54fc41a 100644 --- a/src/mame/drivers/segas16b.c +++ b/src/mame/drivers/segas16b.c @@ -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(); /* 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(); + + 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<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( "soundcpu" )->resume(SUSPEND_REASON_HALT ); + } + else if (data==1) + { + devtag_reset( space->machine, "soundcpu" ); + space->machine->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 ) + + diff --git a/src/mame/drivers/vigilant.c b/src/mame/drivers/vigilant.c index 0c32ed57aed..1a629bb9dba 100644 --- a/src/mame/drivers/vigilant.c +++ b/src/mame/drivers/vigilant.c @@ -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 */ diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index a82d8ea73d5..cbda40d1a09 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -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) */