New clones marked not working

-----------------------------
Kuai Le Xi You Ji (V102CN) [little0]
This commit is contained in:
Ivan Vangelista 2025-05-01 07:17:06 +02:00
parent c062435000
commit e9f0acb1fd
4 changed files with 48 additions and 138 deletions

View File

@ -80,7 +80,7 @@
* Communication for games that support linked mode
* IGS025 protection for Chess Challenge II
* Emulate necessary peripherals for Extra Draw (might not belong here)
* I/O for remaining games
* I/O for remaining games (klxyj102cn, klxyj104cn)
*/
#include "emu.h"
@ -180,7 +180,6 @@ public:
void init_mgzz() ATTR_COLD;
void init_mgcs3() ATTR_COLD;
void init_jking02() ATTR_COLD;
void init_lthyp() ATTR_COLD;
void init_luckycrs() ATTR_COLD;
void init_olympic5() ATTR_COLD;
void init_tripslot() ATTR_COLD;
@ -2531,10 +2530,10 @@ ROM_START( sdwx )
ROM_LOAD( "sp.u2", 0x00000, 0x80000, CRC(216b5418) SHA1(b7bc24ced0ccb5476c974420aa506c13b971fc9f) )
ROM_END
ROM_START( klxyj )
ROM_START( klxyj104cn )
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A ARM based MCU
ROM_LOAD( "klxyj_igs027a", 0x00000, 0x4000, NO_DUMP ) // unknown sticker
// Internal ROM of IGS027A ARM based MCU. Not dumped for this set, but it works.
ROM_LOAD( "klxyj_igs027a", 0x00000, 0x4000, CRC(19505c43) SHA1(a5141b5fa91e0061359d1159dadf236b255aabbc) ) // unknown sticker
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "klxyj_104.u16", 0x000000, 0x80000, CRC(8cb9bdc2) SHA1(5a13d0ff6488a938617a9ea89e7cf607539a1f49) )
@ -2549,6 +2548,24 @@ ROM_START( klxyj )
ROM_LOAD( "w4201.u2", 0x00000, 0x100000, CRC(464f11ab) SHA1(56e45bd31f667fc30387fcd4c940a94819b7ef0f) )
ROM_END
ROM_START( klxyj102cn ) // IGS PCB-0351-05-FM. 1 82C55, 3 banks of 8 DIP switches
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A ARM based MCU
ROM_LOAD( "igs027a.u28", 0x00000, 0x4000, CRC(19505c43) SHA1(a5141b5fa91e0061359d1159dadf236b255aabbc) ) // unknown sticker
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "u16", 0x000000, 0x80000, CRC(82699cd9) SHA1(b9b6d4b87063ccdd0504178854dc13324af131bb) ) // no sticker
ROM_REGION( 0x80000, "igs017_igs031:tilemaps", 0 )
ROM_LOAD16_WORD_SWAP( "u24", 0x000000, 0x80000, CRC(22dcebd0) SHA1(0383f017135230d020d12c8c6cc3aeb136fe9106) ) // no sticker
ROM_REGION( 0x400000, "igs017_igs031:sprites", 0 )
ROM_LOAD( "igs_a4202_acg_v100.u25", 0x000000, 0x400000, CRC(97a68f85) SHA1(177c8c23fd0d585b24a71359ede005ac9a2e4d4d) )
ROM_REGION( 0x200000, "oki", 0 )
ROM_LOAD( "igs_w4201_speech_v100.u2", 0x00000, 0x100000, CRC(b0fc9d5d) SHA1(18020bfd12f1f1a6a3a39c0ba2dd3b2161a64ada) )
ROM_END
// Games with prg at u9
// text at u17
@ -3568,9 +3585,9 @@ void igs_m027_state::init_sdwx()
void igs_m027_state::init_klxyj()
{
klxyj_decrypt(machine());
//m_igs017_igs031->sdwx_gfx_decrypt();
pgm_create_dummy_internal_arm_region();
slqz3_decrypt(machine());
m_igs017_igs031->sdwx_gfx_decrypt();
m_igs017_igs031->tarzan_decrypt_sprites(0, 0);
}
void igs_m027_state::init_lhzb4()
@ -3713,18 +3730,12 @@ void igs_m027_state::init_mgcs3()
void igs_m027_state::init_jking02()
{
jking02_decrypt(machine());
zhongguo_decrypt(machine());
m_igs017_igs031->sdwx_gfx_decrypt();
m_igs017_igs031->tarzan_decrypt_sprites(0x400000, 0x400000);
// the sprite ROM at 0x400000 doesn't require decryption
}
void igs_m027_state::init_lthyp()
{
lthyp_decrypt(machine());
m_igs017_igs031->set_text_reverse_bits(false);
}
void igs_m027_state::init_luckycrs()
{
luckycrs_decrypt(machine());
@ -3807,9 +3818,11 @@ GAME( 1999, lhzb3106c5m, lhzb3, lhzb3106c5m, lhzb3, igs_m027_stat
GAME( 1999, lhzb3sjb, 0, lhzb3sjb, lhzb3sjb, igs_m027_state, init_slqz3, ROT0, "IGS", "Long Hu Zhengba III Shengji Ban (V300C5)", 0 )
GAME( 2004, lhzb4, 0, lhzb4, lhzb4, igs_m027_state, init_lhzb4, ROT0, "IGS", "Long Hu Zhengba 4 (V104CN)", 0 )
GAME( 2004, lhzb4dhb, 0, lhzb4, lhzb4, igs_m027_state, init_lhzb4, ROT0, "IGS", "Long Hu Zhengba 4 Dui Hua Ban (V203CN)", 0 )
GAME( 1999, lthyp, 0, lthyp, lthyp, igs_m027_state, init_lthyp, ROT0, "IGS", "Long Teng Hu Yao Duizhan Jiaqiang Ban (S104CN)", MACHINE_NODEVICE_LAN )
GAME( 1999, lthyp, 0, lthyp, lthyp, igs_m027_state, init_slqz3, ROT0, "IGS", "Long Teng Hu Yao Duizhan Jiaqiang Ban (S104CN)", MACHINE_NODEVICE_LAN )
GAME( 2000, zhongguo, 0, zhongguo, zhongguo, igs_m027_state, init_zhongguo, ROT0, "IGS", "Zhongguo Chu Da D (V102C)", 0 )
GAMEL( 2001, jking02, 0, jking02, jking02, igs_m027_state, init_jking02, ROT0, "IGS", "Jungle King 2002 (V209US)", MACHINE_NODEVICE_LAN, layout_jking02 ) // shows V212US in bookkeeping menu
GAME( 2001, klxyj104cn, jking02, m027_1ppi<true>, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji (V104CN)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN )
GAME( 2001, klxyj102cn, jking02, m027_1ppi<true>, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji (V102CN)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN )
GAME( 2003, tct2p, 0, tct2p, tct2p, igs_m027_state, init_tct2p, ROT0, "IGS", "Tarzan Chuang Tianguan 2 Jiaqiang Ban (V306CN)", 0 )
GAME( 2003, mgzz, 0, mgzz, mgzz101cn, igs_m027_state, init_mgzz, ROT0, "IGS", "Manguan Zhizun (V101CN)", 0 )
GAME( 2003, mgzz100cn, mgzz, mgzz, mgzz100cn, igs_m027_state, init_mgzz, ROT0, "IGS", "Manguan Zhizun (V100CN)", 0 )
@ -3846,7 +3859,6 @@ GAME( 2003, olympic5107us, olympic5, m027_1ppi<false>, base, igs_m027_state
GAME( 200?, luckycrs, 0, m027_1ppi<false>, base, igs_m027_state, init_luckycrs, ROT0, "IGS", "Lucky Cross (V106SA)", MACHINE_NOT_WORKING )
GAME( 2003, amazoni2, 0, m027_1ppi<false>, base, igs_m027_state, init_amazoni2, ROT0, "IGS", "Amazonia King II (V202BR)", MACHINE_NOT_WORKING )
GAME( 2002, sdwx, 0, m027_1ppi<false>, base, igs_m027_state, init_sdwx, ROT0, "IGS", "Sheng Dan Wu Xian", MACHINE_NOT_WORKING ) // aka Christmas 5 Line? (or Amazonia King II, shares roms at least?)
GAME( 200?, klxyj, 0, m027_1ppi<false>, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji", MACHINE_NOT_WORKING )
GAME( 2001, cjdh6th, 0, m027_1ppi<false>, base, igs_m027_state, init_extradrw, ROT0, "IGS", "Chaoji Daheng 6th", MACHINE_NOT_WORKING )
// these have an IGS025 protection device instead of the 8255
GAME( 200?, gonefsh2, 0, m027_noppi<false>,base, igs_m027_state, init_gonefsh2, ROT0, "IGS", "Gone Fishing 2", MACHINE_NOT_WORKING )

View File

@ -966,7 +966,7 @@ void chessc2_decrypt(running_machine &machine)
// IGS27_CRYPT3
IGS27_CRYPT4
IGS27_CRYPT5
IGS27_CRYPT6 // correct??
IGS27_CRYPT6
IGS27_CRYPT7
IGS27_CRYPT8
@ -975,52 +975,6 @@ void chessc2_decrypt(running_machine &machine)
}
// IGS TARZAN CHINA ONLINE
//V104CN
static const uint8_t klxyj_tab[0x100] = {
0x49, 0x47, 0x53, 0x30, 0x30, 0x30, 0x38, 0x52, 0x44, 0x34, 0x30, 0x31, 0x30, 0x39, 0x32, 0x34, // IGS0008RD4010924
0x3f, 0x0f, 0x66, 0x9a, 0xbf, 0x0d, 0x06, 0x55, 0x09, 0x01, 0xeb, 0x72, 0xeb, 0x9b, 0x89, 0xfa,
0x24, 0xd1, 0x5d, 0xca, 0xe6, 0x8a, 0x8c, 0xe0, 0x92, 0x8d, 0xbf, 0xe4, 0xaf, 0xaa, 0x3e, 0xfa,
0x2b, 0x27, 0x4b, 0xc7, 0xd6, 0x6d, 0xc1, 0xc2, 0x1c, 0xf4, 0xed, 0xbd, 0x03, 0x6c, 0xad, 0xb3,
0x65, 0x2d, 0xc7, 0xd3, 0x6e, 0xe0, 0x8c, 0xce, 0x59, 0x6f, 0xae, 0x5e, 0x66, 0x2b, 0x5e, 0x17,
0x20, 0x3d, 0xa9, 0x72, 0xcd, 0x4f, 0x14, 0x17, 0x35, 0x7b, 0x77, 0x6b, 0x98, 0x73, 0x17, 0x5a,
0xea, 0xf2, 0x07, 0x66, 0x51, 0x64, 0xc1, 0xf0, 0xe2, 0xd1, 0x00, 0xc6, 0x97, 0x0f, 0xe0, 0xee,
0x94, 0x28, 0x39, 0xb2, 0x9b, 0x0a, 0x38, 0xed, 0xcc, 0x6e, 0x40, 0x94, 0xa2, 0x0a, 0x00, 0x88,
0x2b, 0xfa, 0xd5, 0x9a, 0x87, 0x6c, 0x62, 0xdf, 0xa4, 0x8b, 0x6d, 0x37, 0x38, 0xae, 0xfd, 0x18,
0xff, 0xc2, 0xb2, 0xa0, 0x37, 0xf5, 0x64, 0xdb, 0x59, 0xa5, 0x00, 0x51, 0x19, 0x88, 0x9f, 0xd4,
0xa0, 0x1c, 0xe7, 0x88, 0x08, 0x51, 0xa7, 0x33, 0x19, 0x75, 0xae, 0xc7, 0x42, 0x61, 0xec, 0x2d,
0xdb, 0xe2, 0xcc, 0x54, 0x9a, 0x6a, 0xd1, 0x7a, 0x53, 0xf8, 0x6f, 0xba, 0xf4, 0x45, 0x2c, 0xd7,
0xc0, 0x30, 0xf7, 0x47, 0xcc, 0x6b, 0xc8, 0x83, 0xb7, 0x67, 0x7a, 0x8e, 0xad, 0x7e, 0xe5, 0xc4,
0x9f, 0x60, 0x40, 0xe5, 0xbc, 0xc0, 0xb5, 0x61, 0x33, 0x3f, 0x46, 0xe6, 0x2d, 0x98, 0xdf, 0x28,
0x05, 0x0e, 0xbc, 0xf0, 0xca, 0x13, 0xfe, 0x68, 0xf7, 0x3a, 0x89, 0xa5, 0x71, 0x5f, 0x21, 0x76,
0xc2, 0x14, 0xc5, 0x6c, 0x95, 0x4f, 0x4a, 0x2a, 0x71, 0x52, 0x3c, 0xee, 0xba, 0xdb, 0xf1, 0x60
};
void klxyj_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x80000;
for (int i = 0; i < rom_size / 2; i++)
{
uint16_t x = src[i];
IGS27_CRYPT1
IGS27_CRYPT2_ALT
// IGS27_CRYPT3
IGS27_CRYPT4
IGS27_CRYPT5
IGS27_CRYPT6
IGS27_CRYPT7
IGS27_CRYPT8
x ^= klxyj_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
void zhongguo_decrypt(running_machine &machine)
{
memory_region *const region = machine.root_device().memregion("user1");
@ -1271,7 +1225,6 @@ void slqz3_decrypt(running_machine &machine)
{
uint16_t x = 0;
// not 100% verified
IGS27_CRYPT1
IGS27_CRYPT2_ALT
IGS27_CRYPT3
@ -1293,7 +1246,6 @@ void fruitpar_decrypt(running_machine &machine)
auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(region->base()));
auto const rom_size = region->bytes();
// not 100% verified
for (int i = 0; i < rom_size / 2; i++)
{
uint16_t x = 0;
@ -1317,7 +1269,6 @@ void oceanpar_decrypt(running_machine &machine)
auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(region->base()));
auto const rom_size = region->bytes();
// not 100% verified
for (int i = 0; i < rom_size / 2; i++)
{
uint16_t x = 0;
@ -1533,38 +1484,12 @@ void qlgs_decrypt(running_machine &machine)
{
uint16_t x = 0;
// may need corrected
IGS27_CRYPT1_ALT
IGS27_CRYPT2_ALT
IGS27_CRYPT3
IGS27_CRYPT4
IGS27_CRYPT5 // correct
IGS27_CRYPT6
IGS27_CRYPT7
IGS27_CRYPT8
src[i] ^= x;
}
}
// IGS0004RD4010921
void jking02_decrypt(running_machine &machine)
{
memory_region *const region = machine.root_device().memregion("user1");
auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(region->base()));
auto const rom_size = region->bytes();
for (int i = 0; i < rom_size / 2; i++)
{
uint16_t x = 0;
// probably needs work...
IGS27_CRYPT1
IGS27_CRYPT2_ALT
// IGS27_CRYPT3
IGS27_CRYPT4
IGS27_CRYPT5
IGS27_CRYPT6_ALT
IGS27_CRYPT6
IGS27_CRYPT7
IGS27_CRYPT8
@ -1745,10 +1670,10 @@ void icescape_decrypt(running_machine &machine)
uint16_t x = 0;
IGS27_CRYPT1
IGS27_CRYPT2_ALT // $18ed0
IGS27_CRYPT3_ALT // $1030
IGS27_CRYPT4 // $106d0
IGS27_CRYPT5_ALT // $10800
IGS27_CRYPT2_ALT
IGS27_CRYPT3_ALT
IGS27_CRYPT4
IGS27_CRYPT5_ALT
IGS27_CRYPT6
IGS27_CRYPT7_ALT
IGS27_CRYPT8
@ -1769,13 +1694,13 @@ void tripfev_decrypt(running_machine &machine)
uint16_t x = 0;
IGS27_CRYPT1
IGS27_CRYPT2 //
IGS27_CRYPT2
IGS27_CRYPT3
IGS27_CRYPT4_ALT // $2fc0
IGS27_CRYPT5_ALT // $35da0
IGS27_CRYPT4_ALT
IGS27_CRYPT5_ALT
IGS27_CRYPT6
IGS27_CRYPT7_ALT // $2b0
IGS27_CRYPT8 // $1100
IGS27_CRYPT7_ALT
IGS27_CRYPT8
src[i] ^= x;
}
@ -1827,31 +1752,6 @@ void wldfruit_decrypt(running_machine &machine)
}
// IGS MAHJONG CHINA S104CN
void lthyp_decrypt(running_machine &machine)
{
memory_region *const region = machine.root_device().memregion("user1");
auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(region->base()));
auto const rom_size = region->bytes();
for (int i = 0; i < rom_size / 2; i++)
{
uint16_t x = 0;
IGS27_CRYPT1
IGS27_CRYPT2_ALT // correct-85a8
IGS27_CRYPT3 // correct-85a8
IGS27_CRYPT4 // correct-85a8
IGS27_CRYPT5 // correct-125c0
IGS27_CRYPT6_ALT // correct
IGS27_CRYPT7 // ?
IGS27_CRYPT8 // correct 12c0
src[i] ^= x;
}
}
void tripslot_decrypt(running_machine &machine)
{
memory_region *const region = machine.root_device().memregion("user1");

View File

@ -31,7 +31,6 @@ void pgm_dwpc_decrypt(running_machine &machine) ATTR_COLD;
void sdwx_decrypt(running_machine &machine) ATTR_COLD;
void hauntedh_decrypt(running_machine &machine) ATTR_COLD;
void chessc2_decrypt(running_machine &machine) ATTR_COLD;
void klxyj_decrypt(running_machine &machine) ATTR_COLD;
void zhongguo_decrypt(running_machine &machine) ATTR_COLD;
void gonefsh2_decrypt(running_machine &machine) ATTR_COLD;
void cjddz_decrypt(running_machine &machine) ATTR_COLD;
@ -50,7 +49,6 @@ void mgcs3_decrypt(running_machine &machine) ATTR_COLD;
void crzybugs_decrypt(running_machine &machine) ATTR_COLD;
void crzybugsj_decrypt(running_machine &machine) ATTR_COLD;
void qlgs_decrypt(running_machine &machine) ATTR_COLD;
void jking02_decrypt(running_machine &machine) ATTR_COLD;
void tct2p_decrypt(running_machine &machine) ATTR_COLD;
void xypdk_decrypt(running_machine &machine) ATTR_COLD;
void luckycrs_decrypt(running_machine &machine) ATTR_COLD;
@ -58,7 +56,6 @@ void olympic5_decrypt(running_machine &machine) ATTR_COLD;
void icescape_decrypt(running_machine &machine) ATTR_COLD;
void tripfev_decrypt(running_machine &machine) ATTR_COLD;
void wldfruit_decrypt(running_machine &machine) ATTR_COLD;
void lthyp_decrypt(running_machine &machine) ATTR_COLD;
void tripslot_decrypt(running_machine &machine) ATTR_COLD;
void extradrw_decrypt(running_machine &machine) ATTR_COLD;
void cjddzlf_decrypt(running_machine &machine) ATTR_COLD;

View File

@ -20593,7 +20593,8 @@ fruitpar
fruitpar206us
gonefsh2
jking02
klxyj
klxyj102cn
klxyj104cn
lhdmg
lhdmgp
lhdmgp200c3m