mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
parent
591442fb37
commit
cfff277906
@ -244,6 +244,25 @@ void neogeo_ms5plus_cart_device::device_add_mconfig(machine_config &config)
|
||||
}
|
||||
|
||||
|
||||
/*************************************************
|
||||
mslug5b
|
||||
**************************************************/
|
||||
|
||||
DEFINE_DEVICE_TYPE(NEOGEO_MSLUG5B_CART, neogeo_mslug5b_cart_device, "neocart_mslug5b", "Neo Geo Metal Slug 5 Bootleg Cart")
|
||||
|
||||
neogeo_mslug5b_cart_device::neogeo_mslug5b_cart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
neogeo_bootleg_cart_device(mconfig, NEOGEO_MSLUG5B_CART, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
void neogeo_mslug5b_cart_device::decrypt_all(DECRYPT_ALL_PARAMS)
|
||||
{
|
||||
m_prot->mslug5b_vx_decrypt(ym_region, ym_region_size);
|
||||
m_prot->sx_decrypt(fix_region, fix_region_size, 2);
|
||||
m_prot->mslug5b_cx_decrypt(spr_region, spr_region_size);
|
||||
}
|
||||
|
||||
|
||||
/*************************************************
|
||||
kog
|
||||
**************************************************/
|
||||
|
@ -161,6 +161,7 @@ private:
|
||||
|
||||
DECLARE_DEVICE_TYPE(NEOGEO_MSLUG3B6_CART, neogeo_mslug3b6_cart_device)
|
||||
|
||||
|
||||
/*************************************************
|
||||
ms5plus
|
||||
**************************************************/
|
||||
@ -186,6 +187,21 @@ private:
|
||||
DECLARE_DEVICE_TYPE(NEOGEO_MS5PLUS_CART, neogeo_ms5plus_cart_device)
|
||||
|
||||
|
||||
/*************************************************
|
||||
mslug5b
|
||||
**************************************************/
|
||||
|
||||
class neogeo_mslug5b_cart_device : public neogeo_bootleg_cart_device
|
||||
{
|
||||
public:
|
||||
neogeo_mslug5b_cart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
virtual void decrypt_all(DECRYPT_ALL_PARAMS) override;
|
||||
virtual int get_fixed_bank_type() override { return 0; }
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(NEOGEO_MSLUG5B_CART, neogeo_mslug5b_cart_device)
|
||||
|
||||
|
||||
/*************************************************
|
||||
kog
|
||||
**************************************************/
|
||||
|
@ -109,6 +109,7 @@ void neogeo_cart(device_slot_interface &device)
|
||||
device.option_add_internal("boot_samsho5b", NEOGEO_SAMSHO5B_CART);
|
||||
device.option_add_internal("boot_mslug3b6", NEOGEO_MSLUG3B6_CART); // this also uses a CMC42 for gfx
|
||||
device.option_add_internal("boot_ms5plus", NEOGEO_MS5PLUS_CART); // this also uses a CMC50 for gfx + audiocpu & NEOPCM2 for YM scramble
|
||||
device.option_add_internal("boot_mslug5b", NEOGEO_MSLUG5B_CART);
|
||||
device.option_add_internal("boot_kog", NEOGEO_KOG_CART);
|
||||
|
||||
device.option_add_internal("boot_kf10th", NEOGEO_KOF10TH_CART);
|
||||
|
@ -304,6 +304,34 @@ uint32_t neoboot_prot_device::mslug5p_bank_base(uint16_t sel)
|
||||
}
|
||||
|
||||
|
||||
/* Metal Slug 5 (bootleg) */
|
||||
|
||||
void neoboot_prot_device::mslug5b_vx_decrypt(uint8_t* ymsndrom, uint32_t ymsndrom_size)
|
||||
{
|
||||
// only odd bytes are scrambled
|
||||
int ym_size = ymsndrom_size;
|
||||
uint8_t *rom = ymsndrom;
|
||||
for (int i = 1; i < ym_size; i += 2)
|
||||
rom[i] = bitswap<8>(rom[i], 3, 2, 4, 1, 5, 0, 6, 7);
|
||||
}
|
||||
|
||||
void neoboot_prot_device::mslug5b_cx_decrypt(uint8_t* sprrom, uint32_t sprrom_size)
|
||||
{
|
||||
// rom a18/a19 lines are swapped
|
||||
int cx_size = sprrom_size;
|
||||
uint8_t *rom = sprrom;
|
||||
std::vector<uint8_t> buf(cx_size);
|
||||
|
||||
memcpy(&buf[0], rom, cx_size);
|
||||
|
||||
for (int i = 1; i < 128; i += 4)
|
||||
{
|
||||
memcpy(&rom[i * 0x80000], &buf[(i + 1) * 0x80000], 0x80000);
|
||||
memcpy(&rom[(i + 1) * 0x80000], &buf[i * 0x80000], 0x80000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* The King of Gladiator (The King of Fighters '97 bootleg) */
|
||||
|
||||
// The protection patching here may be incomplete - Thanks to Razoola for the info
|
||||
|
@ -37,11 +37,14 @@ public:
|
||||
DECLARE_READ16_MEMBER(mslug5p_prot_r);
|
||||
//DECLARE_WRITE16_MEMBER(ms5plus_bankswitch_w);
|
||||
uint32_t mslug5p_bank_base(uint16_t sel);
|
||||
|
||||
void mslug5b_vx_decrypt(uint8_t* ymsndrom, uint32_t ymsndrom_size);
|
||||
void mslug5b_cx_decrypt(uint8_t* sprrom, uint32_t sprrom_size);
|
||||
|
||||
void kog_px_decrypt(uint8_t* cpurom, uint32_t cpurom_size);
|
||||
|
||||
void svcboot_px_decrypt(uint8_t* cpurom, uint32_t cpurom_size);
|
||||
void svcboot_cx_decrypt(uint8_t*sprrom, uint32_t sprrom_size);
|
||||
void svcboot_cx_decrypt(uint8_t* sprrom, uint32_t sprrom_size);
|
||||
void svcplus_px_decrypt(uint8_t* cpurom, uint32_t cpurom_size);
|
||||
void svcplus_px_hack(uint8_t* cpurom, uint32_t cpurom_size);
|
||||
void svcplusa_px_decrypt(uint8_t* cpurom, uint32_t cpurom_size);
|
||||
|
@ -196,6 +196,7 @@ static const neogeo_slot slot_list[] =
|
||||
{ NEOGEO_SAMSHO5B, "boot_samsho5b" },
|
||||
{ NEOGEO_MSLUG3B6, "boot_mslug3b6" },
|
||||
{ NEOGEO_MSLUG5P, "boot_ms5plus" },
|
||||
{ NEOGEO_MSLUG5B, "boot_mslug5b" },
|
||||
{ NEOGEO_KOG, "boot_kog" },
|
||||
{ NEOGEO_SBP, "boot_sbp" },
|
||||
{ NEOGEO_KOF10TH, "boot_kf10th" },
|
||||
|
@ -68,6 +68,7 @@ enum
|
||||
NEOGEO_SAMSHO5B,
|
||||
NEOGEO_MSLUG3B6,
|
||||
NEOGEO_MSLUG5P,
|
||||
NEOGEO_MSLUG5B,
|
||||
NEOGEO_KOG,
|
||||
NEOGEO_SBP,
|
||||
NEOGEO_KOF10TH,
|
||||
|
@ -643,6 +643,7 @@ public:
|
||||
void kof2k4se(machine_config &config);
|
||||
void mslug5(machine_config &config);
|
||||
void ms5plus(machine_config &config);
|
||||
void mslug5b(machine_config &config);
|
||||
void svc(machine_config &config);
|
||||
void svcboot(machine_config &config);
|
||||
void svcplus(machine_config &config);
|
||||
@ -2654,6 +2655,12 @@ void mvs_led_state::ms5plus(machine_config &config)
|
||||
cartslot_fixed(config, "boot_ms5plus");
|
||||
}
|
||||
|
||||
void mvs_led_state::mslug5b(machine_config &config)
|
||||
{
|
||||
mv1_fixed(config);
|
||||
cartslot_fixed(config, "boot_mslug5b");
|
||||
}
|
||||
|
||||
void mvs_led_state::svc(machine_config &config)
|
||||
{
|
||||
mv1_fixed(config);
|
||||
@ -11010,7 +11017,7 @@ ROM_START( matrimbl )
|
||||
ROM_LOAD16_BYTE( "mart-c8.bin", 0x3000001, 0x800000, CRC(906cf267) SHA1(b0f2cf8887794d715f208751ddd1ed26b2c3ffdf) ) /* Plane 2,3 */
|
||||
ROM_END
|
||||
|
||||
/* Metal Slug 5 bootleg */
|
||||
/* Metal Slug 5 bootlegs */
|
||||
|
||||
ROM_START( ms5plus )
|
||||
ROM_REGION( 0x500000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT )
|
||||
@ -11045,6 +11052,41 @@ ROM_START( ms5plus )
|
||||
ROM_LOAD16_BYTE( "268-c8c.c8", 0x3000001, 0x800000, CRC(551d720e) SHA1(ebf69e334fcaba0fda6fd432fd0970283a365d12) ) /* Plane 2,3 */ /* mask rom TC5364205 */
|
||||
ROM_END
|
||||
|
||||
/* clear cart, orange pcbs
|
||||
prog board: no v encryption, uses a plcc epm7096lc84-15 for pcm, 16-bit v roms decoded by 2x 74hc245
|
||||
cha board: no c/m encryption, uses a soic palce16v8 for zmc, 5x 74hc273a for neo-273, 6x so44 m59pw064 64Mbit + 2x dip lh28f160 16MBit flash roms for gfx
|
||||
all roms are erasable flash chips, mixture of 5v and 3.3v
|
||||
produced sometime after early 2004 (going by youngest ic date code) */
|
||||
ROM_START( mslug5b )
|
||||
ROM_REGION( 0x500000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT )
|
||||
ROM_LOAD16_WORD_SWAP( "ms5b-p1.bin", 0x000000, 0x100000, CRC(1376f43c) SHA1(7ca4a8b11c7effda2603d04e793cf664e7aa39bf) ) /* MX29F1615PC-10 16Mbit 2nd half empty */
|
||||
ROM_LOAD16_WORD_SWAP( "ms5b-p2.bin", 0x100000, 0x400000, CRC(4becfba0) SHA1(fd3708f6c8fa26133b29b4b033148dff54dc1e7d) ) /* LH28F320BJD-TTL80 32Mbit 3.3v */
|
||||
|
||||
/* Scrambled */
|
||||
NEO_SFIX_128K( "ms5b-s1.bin", CRC(3a427c9f) SHA1(6c6050640adb7148d42d35e3017cc171e53ae957) ) /* W29C011A-15 1Mbit */
|
||||
|
||||
/* Not encrypted */
|
||||
NEO_BIOS_AUDIO_128K( "ms5b-m1.bin", CRC(bf1601bc) SHA1(5e285c98c65acefd77e893247482af0d09f3e1e4) ) /* W29EE011-15 1Mbit */
|
||||
|
||||
/* Not encrypted, odd bytes scrambled */
|
||||
ROM_REGION( 0x1000000, "cslot1:ymsnd", 0 )
|
||||
ROM_LOAD( "ms5b-v1.bin", 0x000000, 0x400000, CRC(e3f9fd75) SHA1(8772d0936c45623763b92c55816d0e56dd8d2ef2) ) /* LH28F320BJD-TTL80 32Mbit 3.3v 2 bytes diff vs decrypted */
|
||||
ROM_LOAD( "ms5b-v2.bin", 0x400000, 0x400000, CRC(a53618f6) SHA1(002e37f3d45aa6153593c7939902e1a022de14c7) ) /* LH28F320BJD-TTL80 32Mbit 3.3v */
|
||||
ROM_LOAD( "ms5b-v3.bin", 0x800000, 0x400000, CRC(14f000ee) SHA1(b30df60964cc8480b78a4bc2d323cad59e44a0ae) ) /* LH28F320BJD-TTL80 32Mbit 3.3v */
|
||||
ROM_LOAD( "ms5b-v4.bin", 0xc00000, 0x400000, CRC(0ccee813) SHA1(4bc034f7f37da956b4116a2dea8a856b96e43c18) ) /* LH28F320BJD-TTL80 32Mbit 3.3v */
|
||||
|
||||
/* Not encrypted, a18/a19 lines swapped */
|
||||
ROM_REGION( 0x4000000, "cslot1:sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "ms5b-c1.bin", 0x0000000, 0x800000, CRC(4b0e5998) SHA1(458486d579db118ec4ba4f9fce9d62fedfef949b) ) /* M59PW064 64Mbit 3.3v */
|
||||
ROM_LOAD16_BYTE( "ms5b-c2.bin", 0x0000001, 0x800000, CRC(022fc30b) SHA1(7178900acbb377c3de95338c8fae56e308327cab) ) /* M59PW064 64Mbit 3.3v */
|
||||
ROM_LOAD16_BYTE( "ms5b-c3.bin", 0x1000000, 0x800000, CRC(ead86d28) SHA1(e1db4f839972748f49dddfe3bd4b0cf2e0ddf074) ) /* M59PW064 64Mbit 3.3v */
|
||||
ROM_LOAD16_BYTE( "ms5b-c4.bin", 0x1000001, 0x800000, CRC(0be6be35) SHA1(34e20e55423cefd2b98c15061f86198b64727173) ) /* M59PW064 64Mbit 3.3v */
|
||||
ROM_LOAD16_BYTE( "ms5b-c5.bin", 0x2000000, 0x200000, CRC(2a23e569) SHA1(576370a24a8ef5ca0f8e7afa4ccdb0cb3ad9bdaa) ) /* LH28F160BJD-TTL80 16Mbit 3.3v */
|
||||
ROM_LOAD16_BYTE( "ms5b-c6.bin", 0x2000001, 0x200000, CRC(6eb6bc9e) SHA1(4e54d904b0ce34cca429b3c86ab8bf972c66336e) ) /* LH28F160BJD-TTL80 16Mbit 3.3v */
|
||||
ROM_LOAD16_BYTE( "ms5b-c7.bin", 0x3000000, 0x800000, CRC(57f4e53f) SHA1(813d98175288045c0750d45afe03c74973d70cee) ) /* M59PW064 64Mbit 3.3v */
|
||||
ROM_LOAD16_BYTE( "ms5b-c8.bin", 0x3000001, 0x800000, CRC(9d59ff7c) SHA1(ff90dc79598de0880df17624c76df81c92f267ce) ) /* M59PW064 64Mbit 3.3v */
|
||||
ROM_END
|
||||
|
||||
/* Puzzle Bobble / Bust-A-Move (Neo-Geo) bootleg */
|
||||
|
||||
ROM_START( pbobblenb )
|
||||
@ -11911,6 +11953,7 @@ GAME( 2004, kof2k4se, kof2002, kof2k4se, neogeo, mvs_led_state, empty_ini
|
||||
GAME( 2003, mslug5, neogeo, mslug5, neogeo, mvs_led_state, empty_init, ROT0, "SNK Playmore", "Metal Slug 5 (NGM-2680)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2003, mslug5h, mslug5, mslug5, neogeo, mvs_led_state, empty_init, ROT0, "SNK Playmore", "Metal Slug 5 (NGH-2680)", MACHINE_SUPPORTS_SAVE ) /* Also found in later MVS carts */
|
||||
GAME( 2003, ms5plus, mslug5, ms5plus, neogeo, mvs_led_state, empty_init, ROT0, "bootleg", "Metal Slug 5 Plus (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2003, mslug5b, mslug5, mslug5b, neogeo, mvs_led_state, empty_init, ROT0, "bootleg", "Metal Slug 5 (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2003, svc, neogeo, svc, neogeo, mvs_led_state, empty_init, ROT0, "Playmore / Capcom", "SNK vs. Capcom - SVC Chaos (NGM-2690 ~ NGH-2690)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2003, svcboot, svc, svcboot, neogeo, mvs_led_state, empty_init, ROT0, "bootleg", "SNK vs. Capcom - SVC Chaos (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2003, svcplus, svc, svcplus, neogeo, mvs_led_state, empty_init, ROT0, "bootleg", "SNK vs. Capcom - SVC Chaos Plus (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -31296,6 +31296,7 @@ mslug3h // 0256 (c) 2000 SNK
|
||||
mslug4 // 0263 (c) 2002 Mega Enterprise
|
||||
mslug4h // 0263 (c) 2002 Mega Enterprise
|
||||
mslug5 // 0268 (c) 2003 Playmore
|
||||
mslug5b // bootleg
|
||||
mslug5h // 0268 (c) 2003 Playmore
|
||||
mslugx // 0250 (c) 1999 SNK
|
||||
mutnat // 0014 (c) 1992 SNK
|
||||
|
Loading…
Reference in New Issue
Block a user