From 51d46947372d0245b131b338732263b3b1099d63 Mon Sep 17 00:00:00 2001 From: MetalliC <0vetal0@gmail.com> Date: Thu, 25 Jan 2018 00:31:52 +0200 Subject: new WORKING clone ----------------- Knights of Valour 3 (V101, China, Hong Kong, Taiwan) [Peter Wilhelmsen, Morten Shearman Kirkegaard, David Haywood, MetalliC] --- src/mame/drivers/pgm2.cpp | 21 +++++++++++++++++++++ src/mame/includes/pgm2.h | 1 + src/mame/mame.lst | 1 + 3 files changed, 23 insertions(+) diff --git a/src/mame/drivers/pgm2.cpp b/src/mame/drivers/pgm2.cpp index d9fca33f3e8..de759b9b650 100644 --- a/src/mame/drivers/pgm2.cpp +++ b/src/mame/drivers/pgm2.cpp @@ -1148,6 +1148,15 @@ ROM_START( kov3_102 ) KOV3_VIDEO_SOUND_ROMS ROM_END +ROM_START( kov3_101 ) + KOV3_INTERNAL_CHINA + + ROM_REGION( 0x1000000, "user1", 0 ) + ROM_LOAD( "kov3_v101.bin", 0x00000000, 0x0800000, BAD_DUMP CRC(f156c62b) SHA1(bd39f4ba0862c9bd8178f6679b1af01a9f5dc162) ) // not raw but descrambled + + KOV3_VIDEO_SOUND_ROMS +ROM_END + ROM_START( kov3_100 ) KOV3_INTERNAL_CHINA @@ -1425,6 +1434,7 @@ DRIVER_INIT_MEMBER(pgm2_state,ddpdojt) // currently we don't know how to derive address/data xor values from real keys, so we need both static const kov3_module_key kov3_104_key = { { 0x40,0xac,0x30,0x00,0x47,0x49,0x00,0x00 } ,{ 0xeb,0x7d,0x8d,0x90,0x2c,0xf4,0x09,0x82 }, 0x18ec71, 0xb89d }; // fake zero-key static const kov3_module_key kov3_102_key = { { 0x49,0xac,0xb0,0xec,0x47,0x49,0x95,0x38 } ,{ 0x09,0xbd,0xf1,0x31,0xe6,0xf0,0x65,0x2b }, 0x021d37, 0x81d0 }; +static const kov3_module_key kov3_101_key = { { 0xc1,0x2c,0xc1,0xe5,0x3c,0xc1,0x59,0x9e } ,{ 0xf2,0xb2,0xf0,0x89,0x37,0xf2,0xc7,0x0b }, 0, 0 }; // xor values is unknown, 0 for not scrambled dump static const kov3_module_key kov3_100_key = { { 0x40,0xac,0x30,0x00,0x47,0x49,0x00,0x00 } ,{ 0x96,0xf0,0x91,0xe1,0xb3,0xf1,0xef,0x90 }, 0x3e8aa8, 0xc530 }; // fake zero-key DRIVER_INIT_MEMBER(pgm2_state,kov3) @@ -1460,6 +1470,16 @@ DRIVER_INIT_MEMBER(pgm2_state, kov3_102) DRIVER_INIT_CALL(kov3); } +DRIVER_INIT_MEMBER(pgm2_state, kov3_101) +{ + // patch data change check + uint32_t* rom = (uint32_t*)memregion("maincpu")->base(); + rom[0x1cfc / 4] = 0xe320f000; + + module_key = &kov3_101_key; + DRIVER_INIT_CALL(kov3); +} + DRIVER_INIT_MEMBER(pgm2_state, kov3_100) { module_key = &kov3_100_key; @@ -1507,6 +1527,7 @@ GAME( 2010, ddpdojt, 0, pgm2_ramrom, pgm2, pgm2_state, ddpdojt, // Knights of Valour 3 - should be a V103 and V101 too GAME( 2011, kov3, 0, pgm2_hires, pgm2, pgm2_state, kov3_104, ROT0, "IGS", "Knights of Valour 3 (V104, China, Hong Kong, Taiwan)", MACHINE_SUPPORTS_SAVE ) GAME( 2011, kov3_102, kov3, pgm2_hires, pgm2, pgm2_state, kov3_102, ROT0, "IGS", "Knights of Valour 3 (V102, China, Hong Kong, Taiwan)", MACHINE_SUPPORTS_SAVE ) +GAME( 2011, kov3_101, kov3, pgm2_hires, pgm2, pgm2_state, kov3_101, ROT0, "IGS", "Knights of Valour 3 (V101, China, Hong Kong, Taiwan)", MACHINE_SUPPORTS_SAVE ) GAME( 2011, kov3_100, kov3, pgm2_hires, pgm2, pgm2_state, kov3_100, ROT0, "IGS", "Knights of Valour 3 (V100, China, Hong Kong, Taiwan)", MACHINE_SUPPORTS_SAVE ) // King of Fighters '98: Ultimate Match Hero diff --git a/src/mame/includes/pgm2.h b/src/mame/includes/pgm2.h index 9486c408b14..9f4af7be13e 100644 --- a/src/mame/includes/pgm2.h +++ b/src/mame/includes/pgm2.h @@ -94,6 +94,7 @@ public: DECLARE_DRIVER_INIT(kov3); DECLARE_DRIVER_INIT(kov3_104); DECLARE_DRIVER_INIT(kov3_102); + DECLARE_DRIVER_INIT(kov3_101); DECLARE_DRIVER_INIT(kov3_100); DECLARE_DRIVER_INIT(kof98umh); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 1edab6c4c18..600c351c813 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -31419,6 +31419,7 @@ kov2nl_301cn // kov2nl_300cn // kov3 // (c) 2011 kov3_102 // +kov3_101 // kov3_100 // orleg2 // (c) 2007 orleg2_103 // -- cgit v1.2.3