From 1f8306e853efcd2a27463a69f0de36a02c6877d3 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Sun, 6 Dec 2015 03:02:05 +0000 Subject: [PATCH] new NOT WORKING Mortal Kombat 3 (SNES bootleg) [Kevin Eshbach] technically it's fully playable, and only differs from the SNES ROM by 1 byte, however there's an MCU we're not emulating which presumably handles coinage / input lockouts or some kind of on-the-fly rom patching to make it run as a proper arcade game. The MCU was not read protected and has been dumped. --- src/mame/arcade.lst | 1 + src/mame/drivers/snesb.cpp | 42 +++++++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/mame/arcade.lst b/src/mame/arcade.lst index a4eb08ccb44..3a41c814068 100644 --- a/src/mame/arcade.lst +++ b/src/mame/arcade.lst @@ -1435,6 +1435,7 @@ pss64 // 199? Nintendo / Hudson Soft // SNES-based hacks kinstb // bootleg +mk3snes // bootleg ffight2b // bootleg sblast2b // bootleg iron // bootleg diff --git a/src/mame/drivers/snesb.cpp b/src/mame/drivers/snesb.cpp index 43c045b249d..b949bdde103 100644 --- a/src/mame/drivers/snesb.cpp +++ b/src/mame/drivers/snesb.cpp @@ -147,7 +147,7 @@ Iron PCB (same as Final Fight 2?) #include "emu.h" #include "includes/snes.h" - +#include "cpu/mcs51/mcs51.h" class snesb_state : public snes_state { @@ -179,6 +179,7 @@ public: DECLARE_DRIVER_INIT(sblast2b); DECLARE_DRIVER_INIT(ffight2b); DECLARE_DRIVER_INIT(endless); + DECLARE_DRIVER_INIT(mk3snes); DECLARE_MACHINE_RESET(ffight2b); }; @@ -709,6 +710,17 @@ static MACHINE_CONFIG_START( kinstb, snesb_state ) MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) MACHINE_CONFIG_END +static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, snesb_state ) +ADDRESS_MAP_END + + +static MACHINE_CONFIG_DERIVED( mk3snes, kinstb ) + + MCFG_CPU_ADD("mcu", I8751, XTAL_8MHz) + MCFG_CPU_IO_MAP(mcu_io_map) +MACHINE_CONFIG_END + + MACHINE_RESET_MEMBER( snesb_state, ffight2b ) { address_space &cpu0space = m_maincpu->space(AS_PROGRAM); @@ -743,6 +755,11 @@ DRIVER_INIT_MEMBER(snesb_state,kinstb) DRIVER_INIT_CALL(snes_hirom); } +DRIVER_INIT_MEMBER(snesb_state,mk3snes) +{ + DRIVER_INIT_CALL(snes_hirom); +} + DRIVER_INIT_MEMBER(snesb_state,ffight2b) { INT32 i; @@ -997,6 +1014,28 @@ ROM_START( kinstb ) ROM_REGION(0x800, "user6", ROMREGION_ERASEFF) ROM_END +ROM_START( mk3snes ) // this is identical to the SNES release apart from a single byte, the MCU (or some other device?) must be providing the 'arcade-side' of the hardware (or code patches?) + ROM_REGION( 0x400000, "user3", 0 ) + ROM_LOAD( "5.U5", 0x000000, 0x080000, CRC(c21ee1ac) SHA1(12fc526e39b0b998b39d558fbe5660e72c7fad14) ) + ROM_LOAD( "6.U6", 0x080000, 0x080000, CRC(0e064323) SHA1(a11175516892beb862c7cc1e186034ef1b55ee8f) ) + ROM_LOAD( "7.U7", 0x100000, 0x080000, CRC(7db6b7be) SHA1(a7653c04f5321fd83062425a492c7ed0a4f1fdb0) ) + ROM_LOAD( "8.U8", 0x180000, 0x080000, CRC(28771750) SHA1(d6c469ca2640935b6687f5bf5f6e85275157abb0) ) + ROM_LOAD( "1.U1", 0x200000, 0x080000, CRC(4cab6332) SHA1(3c417ba6d35532b4e2ca9ae4a3b730c589d26aee) ) + ROM_LOAD( "2.U2", 0x280000, 0x080000, CRC(0327999b) SHA1(dc6bb11a925e893453e0e5e5d88b8ace8d6cf859) ) + ROM_LOAD( "3.U3", 0x300000, 0x080000, CRC(229af2de) SHA1(1bbb02aec08afab979ffbe4b68a48dc4cc923f73) ) + ROM_LOAD( "4.U4", 0x380000, 0x080000, CRC(b51930d9) SHA1(220f00d64809a6218015a738e53f11d8dc81578f) ) // 4.U4 is a 99.999809% match for the last part of sns-a3me-0.u1 (mk3u in snes softlist - 1 byte changed?!) + + ROM_REGION( 0x1000, "mcu", 0 ) + ROM_LOAD( "D87C51.U9", 0x00000, 0x1000, CRC(f447620a) SHA1(ac0d78c7b339f13d5f96a6727a0f2147158697f9) ) + + ROM_REGION(0x100, "sound_ipl", 0) + ROM_LOAD("spc700.rom", 0, 0x40, CRC(44bb3a40) SHA1(97e352553e94242ae823547cd853eecda55c20f0) ) + + ROM_REGION(0x800, "user6", ROMREGION_ERASEFF) +ROM_END + + + ROM_START( ffight2b ) ROM_REGION( 0x400000, "user3", 0 ) ROM_LOAD( "ff2_3.u6", 0x000000, 0x008000, CRC(343bf582) SHA1(cc6b7219bb2fe61f0b377b606ad28b0e5a78be0b) ) @@ -1098,6 +1137,7 @@ ROM_END GAME( 199?, kinstb, 0, kinstb, kinstb, snesb_state, kinstb, ROT0, "bootleg", "Killer Instinct (SNES bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 199?, mk3snes, 0, mk3snes, kinstb, snesb_state, mk3snes, ROT0, "bootleg", "Mortal Kombat 3 (SNES bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1996, ffight2b, 0, ffight2b, ffight2b, snesb_state, ffight2b, ROT0, "bootleg", "Final Fight 2 (SNES bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1996, iron, 0, kinstb, iron, snesb_state, iron, ROT0, "bootleg", "Iron (SNES bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1996, denseib, 0, kinstb, denseib, snesb_state, denseib, ROT0, "bootleg", "Ghost Chaser Densei (SNES bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )