igs/igs_m027.cpp: Identified lhzb3 internal CPU ROM and removed tilemap ROM unscrambling for games that don't use it. (#12705)

* igs/igs_m027.cpp: Confirmed  lhzb3 uses the same IGS027A ROM as lhdmg.
* igs/igs_m027.cpp: Removed tilemap ROM unscrambling for zhongguo and related games.
* igs/igs017_igs031.cpp: Simplified graphics ROM address unscrambling for sdwx.
This commit is contained in:
XingXing 2024-08-31 01:15:33 +08:00 committed by GitHub
parent ae3bfa13f1
commit 88bd201514
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 15 additions and 33 deletions

View File

@ -509,15 +509,9 @@ void igs017_igs031_device::sdwx_gfx_decrypt()
std::vector<u8> result_data(rom_size);
for (int i = 0; i < rom_size; i++)
result_data[i] = src[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 8, 7, 6, 10, 9, 5, 4, 3, 2, 1, 0)];
result_data[i] = src[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 7, 8, 6, 10, 9, 5, 4, 3, 2, 1, 0)];
for (int i = 0; i < rom_size; i += 0x200)
{
memcpy(src + i + 0x000, &result_data[i + 0x000], 0x80);
memcpy(src + i + 0x080, &result_data[i + 0x100], 0x80);
memcpy(src + i + 0x100, &result_data[i + 0x080], 0x80);
memcpy(src + i + 0x180, &result_data[i + 0x180], 0x80);
}
memcpy(src, result_data.data(), rom_size);
}

View File

@ -23,9 +23,9 @@ public:
template <typename T> void set_i8255_tag(T &&tag) { m_i8255.set_tag(std::forward<T>(tag)); }
template <typename... T> void set_palette_scramble_cb(T &&... args) { m_palette_scramble_cb.set(std::forward<T>(args)...); }
void set_text_reverse_bits()
void set_text_reverse_bits(bool revbits)
{
m_revbits = true;
m_revbits = revbits;
}
u16 palette_callback_straight(u16 bgr) const;

View File

@ -55,7 +55,6 @@ public:
void init_sdwx();
void init_chessc2();
void init_lhzb4();
void init_lhzb3();
void init_gonefsh2();
void init_sddz();
void init_zhongguo();
@ -443,7 +442,7 @@ void igs_m027_state::igs_mahjong(machine_config &config)
IGS017_IGS031(config, m_igs017_igs031, 0);
m_igs017_igs031->set_text_reverse_bits();
m_igs017_igs031->set_text_reverse_bits(true);
m_igs017_igs031->set_i8255_tag("ppi8255");
// sound hardware
@ -810,7 +809,7 @@ ROM_END
ROM_START( lhzb3 )
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A ARM based MCU
ROM_LOAD( "lhzb3_igs027a", 0x00000, 0x4000, NO_DUMP ) // unknown sticker
ROM_LOAD( "b6_igs027a", 0x00000, 0x4000, CRC(75645f8c) SHA1(738fba64a906f4f10e78e332ad30b8da9dc86b21) )
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "lhzb3_104.u9", 0x000000, 0x80000, CRC(70d61846) SHA1(662b59702ef6f26129de6b16346786df92f99097) )
@ -1378,13 +1377,6 @@ void igs_m027_state::init_lhzb4()
pgm_create_dummy_internal_arm_region();
}
void igs_m027_state::init_lhzb3()
{
lhzb3_decrypt(machine());
//m_igs017_igs031->sdwx_gfx_decrypt();
pgm_create_dummy_internal_arm_region();
}
void igs_m027_state::init_sddz()
{
sddz_decrypt(machine());
@ -1402,15 +1394,13 @@ void igs_m027_state::init_gonefsh2()
void igs_m027_state::init_zhongguo()
{
zhongguo_decrypt(machine());
m_igs017_igs031->mgcs_decrypt_tiles(); // close, but wrong, see copyright date
// sprites aren't encrypted
m_igs017_igs031->set_text_reverse_bits(false);
}
void igs_m027_state::init_slqz3()
{
slqz3_decrypt(machine());
//m_igs017_igs031->slqz3_decrypt_tiles(); // none of the existing functions are correct for this
// sprite gfx not encrypted
m_igs017_igs031->set_text_reverse_bits(false);
}
void igs_m027_state::init_fruitpar()
@ -1451,6 +1441,7 @@ void igs_m027_state::init_qlgs()
void igs_m027_state::init_mgzz()
{
mgzz_decrypt(machine());
m_igs017_igs031->set_text_reverse_bits(false);
}
void igs_m027_state::init_mgcs3()
@ -1471,8 +1462,7 @@ void igs_m027_state::init_jking02()
void igs_m027_state::init_lthy()
{
lthy_decrypt(machine());
//m_igs017_igs031->sdwx_gfx_decrypt(); // wrong
//pgm_create_dummy_internal_arm_region();
m_igs017_igs031->set_text_reverse_bits(false);
}
void igs_m027_state::init_luckycrs()
@ -1492,16 +1482,14 @@ void igs_m027_state::init_olympic5()
void igs_m027_state::init_lhdmg()
{
lhdmg_decrypt(machine());
//qlgs_gfx_decrypt(machine());
//pgm_create_dummy_internal_arm_region();
m_igs017_igs031->set_text_reverse_bits(false);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000000c, 0x4000000f, read32smo_delegate(*this, FUNC(igs_m027_state::lhdmg_unk2_r)));
}
void igs_m027_state::init_lhdmgp()
{
lhdmgp_decrypt(machine());
//qlgs_gfx_decrypt(machine());
//pgm_create_dummy_internal_arm_region();
m_igs017_igs031->set_text_reverse_bits(false);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000000c, 0x4000000f, read32smo_delegate(*this, FUNC(igs_m027_state::lhdmg_unk2_r)));
}
@ -1521,6 +1509,7 @@ GAME( 1999, qlgs, 0, igs_mahjong, qlgs, igs_m027_state, init_qlg
GAME( 1999, fruitpar, 0, igs_mahjong, base, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V214)", MACHINE_IS_SKELETON )
GAME( 1999, lhdmg, 0, igs_mahjong, base, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Da Man Guan", MACHINE_IS_SKELETON )
GAME( 1999, lhdmgp, lhdmg, igs_mahjong, base, igs_m027_state, init_lhdmgp, ROT0, "IGS", "Long Hu Da Man Guan Plus", MACHINE_IS_SKELETON )
GAME( 1999, lhzb3, lhdmg, igs_mahjong, base, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Zhengba III", MACHINE_IS_SKELETON ) // 龙虎争霸Ⅲ
GAME( 1999, lthy, 0, igs_mahjong, base, igs_m027_state, init_lthy, ROT0, "IGS", "Long Teng Hu Yue", MACHINE_IS_SKELETON )
GAME( 2000, zhongguo, 0, igs_mahjong, base, igs_m027_state, init_zhongguo, ROT0, "IGS", "Zhong Guo Chu Da D", MACHINE_IS_SKELETON )
GAME( 200?, jking02, 0, igs_mahjong, jking02, igs_m027_state, init_jking02, ROT0, "IGS", "Jungle King 2002 (V209US)", MACHINE_IS_SKELETON )
@ -1539,7 +1528,6 @@ GAME( 2003, olympic5a, olympic5, igs_mahjong, base, igs_m027_state, init_oly
GAME( 2003, amazoni2, 0, igs_mahjong, base, igs_m027_state, init_amazoni2, ROT0, "IGS", "Amazonia King II (V202BR)", MACHINE_IS_SKELETON )
GAME( 2002, sdwx, 0, igs_mahjong, base, igs_m027_state, init_sdwx, ROT0, "IGS", "Sheng Dan Wu Xian", MACHINE_IS_SKELETON ) // aka Christmas 5 Line? (or Amazonia King II, shares roms at least?)
GAME( 200?, sddz, 0, igs_mahjong, base, igs_m027_state, init_sddz, ROT0, "IGS", "Super Dou Di Zhu", MACHINE_IS_SKELETON )
GAME( 200?, lhzb3, 0, igs_mahjong, base, igs_m027_state, init_lhzb3, ROT0, "IGS", "Long Hu Zhengba III", MACHINE_IS_SKELETON ) // 龙虎争霸Ⅲ
GAME( 2004, lhzb4, 0, igs_mahjong, base, igs_m027_state, init_lhzb4, ROT0, "IGS", "Long Hu Zhengba 4", MACHINE_IS_SKELETON ) // 龙虎争霸4
GAME( 200?, klxyj, 0, igs_mahjong, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji", MACHINE_IS_SKELETON )
GAME( 200?, extradrw, 0, igs_mahjong, base, igs_m027_state, init_qlgs, ROT0, "IGS", "Extra Draw", MACHINE_IS_SKELETON )

View File

@ -347,7 +347,7 @@ void extension_state::cjsll(machine_config &config)
I8255A(config, "ppi");
IGS017_IGS031(config, m_igs017_igs031, 0);
m_igs017_igs031->set_text_reverse_bits();
m_igs017_igs031->set_text_reverse_bits(true);
m_igs017_igs031->set_i8255_tag("ppi");
SPEAKER(config, "mono").front_center();

View File

@ -163,7 +163,7 @@ void igs_m027xa_state::igs_mahjong_xa(machine_config &config)
m_ppi->in_pc_callback().set_ioport("TEST2");
IGS017_IGS031(config, m_igs017_igs031, 0);
m_igs017_igs031->set_text_reverse_bits();
m_igs017_igs031->set_text_reverse_bits(true);
m_igs017_igs031->set_i8255_tag("ppi8255");
// sound hardware