igs/igs_m027.cpp, igs/pgmcrypt.cpp: Use uploaded XOR table for games with internal CPU ROM dumped.

* igs/igs_m027a.cpp, igs/pgmcrypt.cpp: Fixed a number of places interpreting ROM as non-native width.
* igs/pgmcrypt.cpp: Removed literal ROM region lengths.
This commit is contained in:
Vas Crabb 2024-09-04 01:14:28 +10:00
parent e8749d3e97
commit 8eae940bf5
2 changed files with 177 additions and 403 deletions

View File

@ -34,6 +34,11 @@
#include "screen.h"
#include "speaker.h"
#include "endianness.h"
#include <algorithm>
namespace {
class igs_m027_state : public driver_device
@ -41,6 +46,7 @@ class igs_m027_state : public driver_device
public:
igs_m027_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_external_rom(*this, "user1"),
m_igs_mainram(*this, "igs_mainram"),
m_maincpu(*this, "maincpu"),
m_ppi(*this, "ppi8255"),
@ -50,77 +56,89 @@ public:
m_dsw(*this, "DSW%u", 1U)
{ }
void igs_mahjong(machine_config &config);
void extradraw(machine_config &config);
void igs_mahjong(machine_config &config) ATTR_COLD;
void igs_mahjong_xor(machine_config &config) ATTR_COLD;
void extradraw(machine_config &config) ATTR_COLD;
void init_sdwx();
void init_chessc2();
void init_lhzb4();
void init_gonefsh2();
void init_sddz();
void init_zhongguo();
void init_klxyj();
void init_slqz3();
void init_fruitpar();
void init_oceanpar();
void init_amazonia();
void init_amazoni2();
void init_qlgs();
void init_mgzz();
void init_mgcs3();
void init_jking02();
void init_lhdmg();
void init_lhdmgp();
void init_lthy();
void init_luckycrs();
void init_olympic5();
void init_extradrw();
void init_sdwx() ATTR_COLD;
void init_chessc2() ATTR_COLD;
void init_lhzb4() ATTR_COLD;
void init_gonefsh2() ATTR_COLD;
void init_sddz() ATTR_COLD;
void init_zhongguo() ATTR_COLD;
void init_klxyj() ATTR_COLD;
void init_slqz3() ATTR_COLD;
void init_fruitpar() ATTR_COLD;
void init_oceanpar() ATTR_COLD;
void init_amazonia() ATTR_COLD;
void init_amazoni2() ATTR_COLD;
void init_qlgs() ATTR_COLD;
void init_mgzz() ATTR_COLD;
void init_mgcs3() ATTR_COLD;
void init_jking02() ATTR_COLD;
void init_lhdmg() ATTR_COLD;
void init_lhdmgp() ATTR_COLD;
void init_lthy() ATTR_COLD;
void init_luckycrs() ATTR_COLD;
void init_olympic5() ATTR_COLD;
void init_extradrw() ATTR_COLD;
protected:
virtual void machine_start() override;
virtual void video_start() override;
virtual void machine_start() override ATTR_COLD;
virtual void video_start() override ATTR_COLD;
private:
required_region_ptr<u32> m_external_rom;
optional_shared_ptr<u32> m_igs_mainram;
required_device<cpu_device> m_maincpu;
optional_device<i8255_device> m_ppi;
required_device<i8255_device> m_ppi;
required_device<igs017_igs031_device> m_igs017_igs031;
required_device<screen_device> m_screen;
required_device<okim6295_device> m_oki;
required_ioport_array<3> m_dsw;
u32 m_xor_table[0x100];
u32 m_dsw_io_select;
u32 m_unk2_write_count;
u8 ppi_porta_r();
void dsw_io_select_w(u32 data);
u32 external_rom_r(offs_t offset);
void xor_table_w(offs_t offset, u8 data);
u32 unk_r();
u32 unk2_r();
u32 lhdmg_unk2_r();
void unk2_w(u32 data);
void dsw_io_select_w(u32 data);
u8 ppi_porta_r();
TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
void pgm_create_dummy_internal_arm_region();
void igs_mahjong_map(address_map &map);
void extradraw_map(address_map &map);
void pgm_create_dummy_internal_arm_region() ATTR_COLD;
u32 m_dsw_io_select;
u32 m_unk2_write_count;
void igs_mahjong_map(address_map &map) ATTR_COLD;
void igs_mahjong_xor_map(address_map &map) ATTR_COLD;
void extradraw_map(address_map &map) ATTR_COLD;
};
void igs_m027_state::machine_start()
{
std::fill(std::begin(m_xor_table), std::end(m_xor_table), 0);
m_dsw_io_select = 7;
m_unk2_write_count = 0;
save_item(NAME(m_xor_table));
save_item(NAME(m_dsw_io_select));
save_item(NAME(m_unk2_write_count));
}
void igs_m027_state::video_start()
{
m_igs017_igs031->video_start();
}
void igs_m027_state::machine_start()
{
m_dsw_io_select = 7;
m_unk2_write_count = 0;
save_item(NAME(m_dsw_io_select));
save_item(NAME(m_unk2_write_count));
}
/***************************************************************************
@ -137,7 +155,7 @@ void igs_m027_state::igs_mahjong_map(address_map &map)
map(0x38000000, 0x38007fff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write));
map(0x38008000, 0x38008003).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)).umask32(0x000000ff);
map(0x38008000, 0x38008003).umask32(0x000000ff).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x38009000, 0x38009003).r(FUNC(igs_m027_state::unk_r));
@ -146,13 +164,22 @@ void igs_m027_state::igs_mahjong_map(address_map &map)
map(0x40000018, 0x4000001b).w(FUNC(igs_m027_state::dsw_io_select_w));
map(0x70000200, 0x70000203).ram(); // ??????????????
map(0x50000000, 0x500003ff).nopw(); // uploads XOR table to external ROM here
map(0xf0000000, 0xf000000f).nopw(); // magic registers
}
void igs_m027_state::igs_mahjong_xor_map(address_map &map)
{
igs_mahjong_map(map);
map(0x08000000, 0x0807ffff).r(FUNC(igs_m027_state::external_rom_r)); // Game ROM
map(0x50000000, 0x500003ff).umask32(0x000000ff).w(FUNC(igs_m027_state::xor_table_w)); // uploads XOR table to external ROM here
}
void igs_m027_state::extradraw_map(address_map &map)
{
igs_mahjong_map(map);
map(0x18088000, 0x1808ffff).ram(); // Extra Draw needs RAM here, maybe just a mirror, maybe due to PCB difference
}
@ -383,18 +410,33 @@ u8 igs_m027_state::ppi_porta_r()
return data;
}
void igs_m027_state::dsw_io_select_w(u32 data)
{
m_dsw_io_select = data;
}
u32 igs_m027_state::external_rom_r(offs_t offset)
{
return m_external_rom[offset] ^ m_xor_table[offset & 0x00ff];
}
void igs_m027_state::xor_table_w(offs_t offset, u8 data)
{
m_xor_table[offset] = (u32(data) << 24) | (u32(data) << 8);
}
// IO? maybe serial?
void igs_m027_state::unk2_w(u32 data)
u32 igs_m027_state::unk_r()
{
logerror("%s: unk2_w %08x\n", machine().describe_context(), data);
m_unk2_write_count++;
// this is accessed as a byte, lower 2 bytes are read?
// slqz3 reads test switch in here? writes to the address look like key matrix?
logerror("%s: unk_r\n", machine().describe_context());
return 0xffffffff;
}
u32 igs_m027_state::unk2_r()
@ -418,12 +460,10 @@ u32 igs_m027_state::lhdmg_unk2_r()
return 0xffffffff ^ 0x400000;
}
u32 igs_m027_state::unk_r()
void igs_m027_state::unk2_w(u32 data)
{
// this is accessed as a byte, lower 2 bytes are read?
// slqz3 reads test switch in here? writes to the address look like key matrix?
logerror("%s: unk_r\n", machine().describe_context());
return 0xffffffff;
logerror("%s: unk2_w %08x\n", machine().describe_context(), data);
m_unk2_write_count++;
}
@ -449,7 +489,6 @@ void igs_m027_state::igs_mahjong(machine_config &config)
m_ppi->in_pb_callback().set_ioport("PORTB");
m_ppi->in_pc_callback().set_ioport("PORTC");
IGS017_IGS031(config, m_igs017_igs031, 0);
m_igs017_igs031->set_text_reverse_bits(true);
m_igs017_igs031->set_i8255_tag("ppi8255");
@ -459,9 +498,17 @@ void igs_m027_state::igs_mahjong(machine_config &config)
OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.5);
}
void igs_m027_state::igs_mahjong_xor(machine_config &config)
{
igs_mahjong(config);
m_maincpu->set_addrmap(AS_PROGRAM, &igs_m027_state::igs_mahjong_xor_map);
}
void igs_m027_state::extradraw(machine_config &config)
{
igs_mahjong(config);
m_maincpu->set_addrmap(AS_PROGRAM, &igs_m027_state::extradraw_map);
}
@ -1361,13 +1408,13 @@ ROM_END
void igs_m027_state::pgm_create_dummy_internal_arm_region()
{
u16 *temp16 = (u16 *)memregion("maincpu")->base();
auto const temp16 = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(memregion("maincpu")->base()));
// fill with RX 14
for (int i = 0; i < 0x4000 / 2; i += 2)
{
temp16[i] = 0xff1e;
temp16[ i +1] = 0xe12f;
temp16[i + 1] = 0xe12f;
}
@ -1544,35 +1591,35 @@ void igs_m027_state::init_lhdmgp()
***************************************************************************/
// Complete dumps
GAME( 1999, slqz3, 0, igs_mahjong, base, igs_m027_state, init_slqz3, ROT0, "IGS", "Mahjong Shuang Long Qiang Zhu 3 (China, VS107C)", MACHINE_NOT_WORKING )
GAME( 1999, qlgs, 0, igs_mahjong, qlgs, igs_m027_state, init_qlgs, ROT0, "IGS", "Que Long Gao Shou", MACHINE_NOT_WORKING )
GAME( 1999, fruitpar, 0, igs_mahjong, base, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V214)", MACHINE_NOT_WORKING )
GAME( 1999, fruitpara, fruitpar, igs_mahjong, base, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V206US)", MACHINE_NOT_WORKING )
GAME( 1999, lhdmg, 0, igs_mahjong, base, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Da Man Guan", MACHINE_NOT_WORKING )
GAME( 1999, lhdmgp, lhdmg, igs_mahjong, base, igs_m027_state, init_lhdmgp, ROT0, "IGS", "Long Hu Da Man Guan Plus", MACHINE_NOT_WORKING )
GAME( 1999, lhzb3, 0, igs_mahjong, base, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Zhengba III", MACHINE_NOT_WORKING ) // 龙虎争霸Ⅲ
GAME( 2004, lhzb4, 0, igs_mahjong, base, igs_m027_state, init_lhzb4, ROT0, "IGS", "Long Hu Zhengba 4", MACHINE_NOT_WORKING ) // 龙虎争霸4
GAME( 1999, lthy, 0, igs_mahjong, base, igs_m027_state, init_lthy, ROT0, "IGS", "Long Teng Hu Yue", MACHINE_NOT_WORKING )
GAME( 2000, zhongguo, 0, igs_mahjong, base, igs_m027_state, init_zhongguo, ROT0, "IGS", "Zhong Guo Chu Da D", MACHINE_NOT_WORKING )
GAME( 200?, jking02, 0, igs_mahjong, jking02, igs_m027_state, init_jking02, ROT0, "IGS", "Jungle King 2002 (V209US)", MACHINE_NOT_WORKING )
GAME( 2003, mgzz, 0, igs_mahjong, base, igs_m027_state, init_mgzz, ROT0, "IGS", "Man Guan Zhi Zun (V101CN)", MACHINE_NOT_WORKING )
GAME( 2000, mgzza, mgzz, igs_mahjong, base, igs_m027_state, init_mgzz, ROT0, "IGS", "Man Guan Zhi Zun (V100CN)", MACHINE_NOT_WORKING )
GAME( 2007, mgcs3, 0, igs_mahjong, base, igs_m027_state, init_mgcs3, ROT0, "IGS", "Man Guan Caishen 3 (V101CN)", MACHINE_NOT_WORKING )
GAME( 1999, oceanpar, 0, igs_mahjong, base, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V105US)", MACHINE_NOT_WORKING ) // 1999 copyright in ROM
GAME( 1999, oceanpara, oceanpar, igs_mahjong, base, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V101US)", MACHINE_NOT_WORKING ) // 1999 copyright in ROM
GAME( 200?, extradrw, 0, extradraw, base, igs_m027_state, init_extradrw, ROT0, "IGS", "Extra Draw", MACHINE_NOT_WORKING )
GAME( 1999, slqz3, 0, igs_mahjong_xor, base, igs_m027_state, init_slqz3, ROT0, "IGS", "Mahjong Shuang Long Qiang Zhu 3 (China, VS107C)", MACHINE_NOT_WORKING )
GAME( 1999, qlgs, 0, igs_mahjong_xor, qlgs, igs_m027_state, init_qlgs, ROT0, "IGS", "Que Long Gao Shou", MACHINE_NOT_WORKING )
GAME( 1999, fruitpar, 0, igs_mahjong_xor, base, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V214)", MACHINE_NOT_WORKING )
GAME( 1999, fruitpara, fruitpar, igs_mahjong_xor, base, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V206US)", MACHINE_NOT_WORKING )
GAME( 1999, lhdmg, 0, igs_mahjong_xor, base, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Da Man Guan", MACHINE_NOT_WORKING )
GAME( 1999, lhdmgp, lhdmg, igs_mahjong_xor, base, igs_m027_state, init_lhdmgp, ROT0, "IGS", "Long Hu Da Man Guan Plus", MACHINE_NOT_WORKING )
GAME( 1999, lhzb3, 0, igs_mahjong_xor, base, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Zhengba III", MACHINE_NOT_WORKING ) // 龙虎争霸Ⅲ
GAME( 2004, lhzb4, 0, igs_mahjong_xor, base, igs_m027_state, init_lhzb4, ROT0, "IGS", "Long Hu Zhengba 4", MACHINE_NOT_WORKING ) // 龙虎争霸4
GAME( 1999, lthy, 0, igs_mahjong_xor, base, igs_m027_state, init_lthy, ROT0, "IGS", "Long Teng Hu Yue", MACHINE_NOT_WORKING )
GAME( 2000, zhongguo, 0, igs_mahjong_xor, base, igs_m027_state, init_zhongguo, ROT0, "IGS", "Zhong Guo Chu Da D", MACHINE_NOT_WORKING )
GAME( 200?, jking02, 0, igs_mahjong_xor, jking02, igs_m027_state, init_jking02, ROT0, "IGS", "Jungle King 2002 (V209US)", MACHINE_NOT_WORKING )
GAME( 2003, mgzz, 0, igs_mahjong_xor, base, igs_m027_state, init_mgzz, ROT0, "IGS", "Man Guan Zhi Zun (V101CN)", MACHINE_NOT_WORKING )
GAME( 2000, mgzza, mgzz, igs_mahjong_xor, base, igs_m027_state, init_mgzz, ROT0, "IGS", "Man Guan Zhi Zun (V100CN)", MACHINE_NOT_WORKING )
GAME( 2007, mgcs3, 0, igs_mahjong_xor, base, igs_m027_state, init_mgcs3, ROT0, "IGS", "Man Guan Caishen 3 (V101CN)", MACHINE_NOT_WORKING )
GAME( 1999, oceanpar, 0, igs_mahjong_xor, base, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V105US)", MACHINE_NOT_WORKING ) // 1999 copyright in ROM
GAME( 1999, oceanpara, oceanpar, igs_mahjong_xor, base, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V101US)", MACHINE_NOT_WORKING ) // 1999 copyright in ROM
GAME( 200?, extradrw, 0, extradraw, base, igs_m027_state, init_extradrw, ROT0, "IGS", "Extra Draw", MACHINE_NOT_WORKING )
// these have an IGS025 protection device instead of the 8255
GAME( 2002, chessc2, 0, igs_mahjong, base, igs_m027_state, init_chessc2, ROT0, "IGS", "Chess Challenge II", MACHINE_NOT_WORKING )
GAME( 2002, chessc2, 0, igs_mahjong_xor, base, igs_m027_state, init_chessc2, ROT0, "IGS", "Chess Challenge II", MACHINE_NOT_WORKING )
// Incomplete dumps
GAME( 1999, amazonia, 0, igs_mahjong, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King (V104BR)", MACHINE_NOT_WORKING )
GAME( 1999, amazonkp, amazonia, igs_mahjong, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King Plus (V204BR)", MACHINE_NOT_WORKING )
GAME( 2005, olympic5, 0, igs_mahjong, base, igs_m027_state, init_olympic5, ROT0, "IGS", "Olympic 5 (V112US)", MACHINE_NOT_WORKING ) // IGS FOR V112US 2005 02 14
GAME( 2003, olympic5a, olympic5, igs_mahjong, base, igs_m027_state, init_olympic5, ROT0, "IGS", "Olympic 5 (V107US)", MACHINE_NOT_WORKING ) // IGS FOR V107US 2003 10 2
GAME( 200?, luckycrs, 0, igs_mahjong, base, igs_m027_state, init_luckycrs, ROT0, "IGS", "Lucky Cross (V106SA)", MACHINE_NOT_WORKING )
GAME( 2003, amazoni2, 0, igs_mahjong, base, igs_m027_state, init_amazoni2, ROT0, "IGS", "Amazonia King II (V202BR)", MACHINE_NOT_WORKING )
GAME( 2002, sdwx, 0, igs_mahjong, 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?, sddz, 0, igs_mahjong, base, igs_m027_state, init_sddz, ROT0, "IGS", "Super Dou Di Zhu", MACHINE_NOT_WORKING )
GAME( 200?, klxyj, 0, igs_mahjong, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji", MACHINE_NOT_WORKING )
GAME( 1999, amazonia, 0, igs_mahjong, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King (V104BR)", MACHINE_NOT_WORKING )
GAME( 1999, amazonkp, amazonia, igs_mahjong, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King Plus (V204BR)", MACHINE_NOT_WORKING )
GAME( 2005, olympic5, 0, igs_mahjong, base, igs_m027_state, init_olympic5, ROT0, "IGS", "Olympic 5 (V112US)", MACHINE_NOT_WORKING ) // IGS FOR V112US 2005 02 14
GAME( 2003, olympic5a, olympic5, igs_mahjong, base, igs_m027_state, init_olympic5, ROT0, "IGS", "Olympic 5 (V107US)", MACHINE_NOT_WORKING ) // IGS FOR V107US 2003 10 2
GAME( 200?, luckycrs, 0, igs_mahjong, base, igs_m027_state, init_luckycrs, ROT0, "IGS", "Lucky Cross (V106SA)", MACHINE_NOT_WORKING )
GAME( 2003, amazoni2, 0, igs_mahjong, base, igs_m027_state, init_amazoni2, ROT0, "IGS", "Amazonia King II (V202BR)", MACHINE_NOT_WORKING )
GAME( 2002, sdwx, 0, igs_mahjong, 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?, sddz, 0, igs_mahjong, base, igs_m027_state, init_sddz, ROT0, "IGS", "Super Dou Di Zhu", MACHINE_NOT_WORKING )
GAME( 200?, klxyj, 0, igs_mahjong, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji", MACHINE_NOT_WORKING )
// these have an IGS025 protection device instead of the 8255
GAME( 200?, gonefsh2, 0, igs_mahjong, base, igs_m027_state, init_gonefsh2, ROT0, "IGS", "Gone Fishing 2", MACHINE_NOT_WORKING )
GAME( 200?, gonefsh2, 0, igs_mahjong, base, igs_m027_state, init_gonefsh2, ROT0, "IGS", "Gone Fishing 2", MACHINE_NOT_WORKING )

View File

@ -1034,30 +1034,11 @@ void hauntedh_decrypt(running_machine &machine)
}
static const uint8_t chessc2_tab[0x100] = {
0x49, 0x47, 0x53, 0x30, 0x30, 0x38, 0x32, 0x52, 0x44, 0x34, 0x30, 0x32, 0x31, 0x32, 0x31, 0x31,
0x28, 0xca, 0x9c, 0xad, 0xbb, 0x2d, 0xf0, 0x41, 0x6e, 0xce, 0xad, 0x73, 0xae, 0x1c, 0xd1, 0x14,
0x6f, 0x9a, 0x75, 0x18, 0xa8, 0x91, 0x68, 0xe4, 0x09, 0xf4, 0x0f, 0xd7, 0xff, 0x93, 0x7d, 0x1b,
0xeb, 0x84, 0xce, 0xad, 0x9e, 0xcf, 0xc9, 0xab, 0x18, 0x59, 0xb6, 0xde, 0x82, 0x13, 0x7c, 0x88,
0x69, 0x63, 0xff, 0x6f, 0x3c, 0xd2, 0xb9, 0x29, 0x09, 0xf8, 0x97, 0xaa, 0x74, 0xa5, 0x16, 0x0d,
0xf9, 0x51, 0x9e, 0x9f, 0x63, 0xc6, 0x1e, 0x32, 0x8c, 0x0c, 0xe9, 0xa0, 0x56, 0x95, 0xd1, 0x9d,
0xea, 0xa9, 0x82, 0xc3, 0x30, 0x15, 0x21, 0xd8, 0x8f, 0x10, 0x25, 0x61, 0xe6, 0x6d, 0x75, 0x6d,
0xcb, 0x08, 0xc3, 0x9b, 0x03, 0x6a, 0x28, 0x6d, 0x42, 0xbf, 0x00, 0xd2, 0x24, 0xfa, 0x08, 0xee,
0x6b, 0x46, 0xb7, 0x2c, 0x7b, 0xb0, 0xda, 0x86, 0x13, 0x14, 0x73, 0x14, 0x4d, 0x45, 0xd3, 0xd4,
0xd9, 0x80, 0xf5, 0xb8, 0x76, 0x13, 0x1e, 0xf6, 0xb1, 0x4a, 0xb3, 0x8b, 0xe2, 0x9a, 0x5a, 0x11,
0x64, 0x11, 0x55, 0xc3, 0x14, 0xfd, 0x1b, 0xce, 0x0c, 0xdc, 0x38, 0xda, 0xa1, 0x84, 0x66, 0xd9,
0x9b, 0x93, 0xed, 0x0f, 0xb4, 0x19, 0x38, 0x62, 0x53, 0x85, 0xb9, 0xe5, 0x89, 0xcd, 0xfe, 0x9e,
0x4d, 0xe2, 0x14, 0x9f, 0xf4, 0x53, 0x1c, 0x46, 0xf4, 0x40, 0x2c, 0xcc, 0xda, 0x82, 0x69, 0x15,
0x88, 0x18, 0x62, 0xb7, 0xb4, 0xd5, 0xaf, 0x4b, 0x9e, 0x48, 0xca, 0xf4, 0x11, 0xec, 0x2d, 0x2c,
0x9d, 0x91, 0xad, 0xda, 0x13, 0x0a, 0x16, 0x86, 0x41, 0x18, 0x08, 0x01, 0xef, 0x97, 0x11, 0x1f,
0x1a, 0xe7, 0x0c, 0xc9, 0x6d, 0x9d, 0xb9, 0x49, 0x0b, 0x6b, 0x9e, 0xd4, 0x72, 0x4d, 0x1d, 0x59
};
void chessc2_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x80000;
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++)
{
@ -1072,8 +1053,6 @@ void chessc2_decrypt(running_machine &machine)
IGS27_CRYPT7
IGS27_CRYPT8
x ^= chessc2_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
@ -1125,30 +1104,11 @@ void klxyj_decrypt(running_machine &machine)
}
}
static const uint8_t zhongguo_tab[0x100] = {
0x68, 0x56, 0xc2, 0x54, 0xa2, 0x8c, 0x7b, 0x4f, 0x37, 0xac, 0x60, 0xf8, 0x24, 0xdf, 0x3e, 0x6b,
0xe2, 0x89, 0x3d, 0xf3, 0x31, 0x83, 0x4a, 0x65, 0x27, 0x98, 0xc5, 0xbf, 0x78, 0x3e, 0x6c, 0x02,
0x07, 0x96, 0x88, 0x4d, 0xae, 0xa6, 0x56, 0x3a, 0x4a, 0xd5, 0xb8, 0x7e, 0x0b, 0xa7, 0x1d, 0xbc,
0xfa, 0xba, 0xad, 0xa9, 0xcb, 0x02, 0xba, 0x66, 0xe5, 0x41, 0x63, 0x1a, 0xb0, 0xca, 0x8a, 0xcf,
0x1e, 0x76, 0xf9, 0x8f, 0x7c, 0xe7, 0xd0, 0xc0, 0x7b, 0xfc, 0x32, 0xbc, 0x7a, 0x95, 0x2f, 0xb4,
0x16, 0x88, 0xf5, 0xc6, 0xf4, 0xe3, 0x33, 0x5d, 0xce, 0x65, 0xce, 0xca, 0xbc, 0x37, 0xc8, 0x20,
0xc5, 0xef, 0x6d, 0x55, 0xa6, 0xc7, 0xbf, 0x96, 0xe1, 0x1a, 0x24, 0xea, 0x09, 0x20, 0x4e, 0x0b,
0x4d, 0xeb, 0x6b, 0x82, 0x44, 0xa1, 0x8f, 0x01, 0xf8, 0xfb, 0x5e, 0x05, 0x35, 0xff, 0xfe, 0xac,
0x13, 0xf9, 0x3c, 0xd4, 0xc1, 0xc0, 0xfd, 0x76, 0x95, 0x27, 0xe7, 0x41, 0x52, 0xc1, 0x51, 0x7a,
0xb8, 0xda, 0x69, 0x13, 0x52, 0xb3, 0xa4, 0x0b, 0x7b, 0xfd, 0x6b, 0x05, 0xb2, 0x98, 0x04, 0x2c,
0x20, 0x8c, 0xbe, 0x46, 0x68, 0x48, 0x60, 0x17, 0xae, 0x1b, 0xd4, 0xf8, 0xea, 0xf1, 0x10, 0xb8,
0x6f, 0x4f, 0x45, 0xb3, 0xb6, 0x90, 0x4c, 0x31, 0x70, 0x61, 0x4d, 0x02, 0xcc, 0x7b, 0xb1, 0x57,
0x06, 0xa0, 0x4b, 0xe2, 0x31, 0xd9, 0xc2, 0x31, 0x45, 0xee, 0x42, 0x48, 0x6b, 0x26, 0x63, 0x7e,
0x89, 0x40, 0x59, 0x9a, 0x09, 0xb1, 0x5e, 0x2d, 0xef, 0x20, 0x5c, 0x32, 0x1b, 0x20, 0xdf, 0xe5,
0xda, 0x2d, 0x3b, 0xe1, 0xb4, 0xe9, 0xfa, 0x7d, 0x71, 0x97, 0x88, 0x68, 0x6d, 0xd8, 0x22, 0x82,
0x1e, 0xa6, 0xfc, 0xfe, 0xe3, 0x8e, 0xb1, 0xb7, 0x0f, 0x32, 0xf1, 0xcf, 0x36, 0xfe, 0x65, 0x8e
};
void zhongguo_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x80000;
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++)
{
@ -1163,8 +1123,6 @@ void zhongguo_decrypt(running_machine &machine)
IGS27_CRYPT7
IGS27_CRYPT8
x ^= zhongguo_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
@ -1307,31 +1265,11 @@ void lhzb3_decrypt(running_machine &machine)
// IGS FOR V000CN 2004 12 01
static const uint8_t lhzb4_tab[0x100] = {
0x49, 0x47, 0x53, 0x30, 0x31, 0x36, 0x39, 0x52, 0x44, 0x32, 0x30, 0x34, 0x30, 0x37, 0x33, 0x30,
0x87, 0xa5, 0x22, 0x6e, 0x2f, 0x89, 0xc6, 0x3b, 0xf3, 0x4d, 0x29, 0xd5, 0x46, 0x17, 0x9c, 0x38,
0xc2, 0xe4, 0x16, 0x4b, 0x36, 0xfd, 0xe0, 0x7f, 0xf2, 0xbe, 0x83, 0xa6, 0x52, 0x87, 0xf2, 0x11,
0x88, 0x03, 0xf4, 0xee, 0xaf, 0x98, 0xd5, 0xe0, 0x0e, 0x2f, 0x4d, 0xdf, 0xa9, 0x26, 0xb1, 0x53,
0x0e, 0x92, 0x58, 0x6c, 0x5e, 0xb9, 0x50, 0xc5, 0x99, 0xcf, 0x42, 0x39, 0x2f, 0xf1, 0xa3, 0x04,
0xc5, 0x60, 0x1d, 0x1e, 0x44, 0xff, 0x3d, 0xd5, 0x28, 0x0e, 0x5d, 0xa9, 0x08, 0x29, 0xd4, 0x6c,
0x61, 0x7c, 0x5d, 0x9b, 0xa7, 0x48, 0xc5, 0xf7, 0x8e, 0x9b, 0xd9, 0x67, 0x95, 0x4b, 0x8f, 0x12,
0xd4, 0x35, 0x74, 0xb8, 0x07, 0xb4, 0x55, 0x52, 0xdc, 0x64, 0x32, 0xea, 0x7a, 0x18, 0x5f, 0xbc,
0x52, 0x19, 0xfc, 0x8e, 0x2a, 0xa2, 0x98, 0x4d, 0x66, 0x99, 0x21, 0xe9, 0x9a, 0x8e, 0x0f, 0x72,
0x4d, 0xf9, 0xd1, 0x74, 0x10, 0xb0, 0x77, 0x8f, 0xc0, 0xa7, 0xa2, 0x5b, 0x17, 0xed, 0xa9, 0x7b,
0x7a, 0xe3, 0x0d, 0xff, 0xfe, 0xbe, 0x1f, 0xff, 0xbb, 0x40, 0xf0, 0x76, 0x56, 0xb2, 0x79, 0x5d,
0xc9, 0x26, 0x0c, 0x08, 0x76, 0xeb, 0xfa, 0xc5, 0x6c, 0x51, 0x86, 0xb2, 0xf9, 0x9e, 0x0a, 0xdf,
0x70, 0x50, 0x68, 0xa5, 0x3c, 0x96, 0xb4, 0x46, 0x25, 0x09, 0x1f, 0xc6, 0xe2, 0xaf, 0x26, 0x09,
0xe0, 0x32, 0xfd, 0x2e, 0x52, 0x5d, 0x36, 0x2b, 0x79, 0xd8, 0xb6, 0xa9, 0x35, 0x24, 0xda, 0x22,
0xcd, 0xda, 0xe5, 0x39, 0xfb, 0x20, 0xad, 0x59, 0x3c, 0x6c, 0x86, 0x92, 0x56, 0x7d, 0x6f, 0xb0,
0x29, 0x96, 0x7c, 0x9d, 0xbb, 0xfd, 0x83, 0xf9, 0x7f, 0xb5, 0x0a, 0xf8, 0xe6, 0x77, 0x71, 0x7b
};
void lhzb4_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x80000;
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++)
{
@ -1346,8 +1284,6 @@ void lhzb4_decrypt(running_machine &machine)
IGS27_CRYPT7
IGS27_CRYPT8_ALT
x ^= lhzb4_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
@ -1473,30 +1409,11 @@ void pgm_decrypt_pgm3in1(running_machine &machine)
// IGS MAHJONG CHINA VS107C
static const uint8_t slqz3_tab[0x100] = {
0xef, 0xdf, 0x90, 0x60, 0x46, 0x43, 0x33, 0x38, 0x92, 0x2d, 0x5a, 0x08, 0x0d, 0x2f, 0x05, 0x75,
0xa1, 0x42, 0x17, 0x12, 0xdb, 0xa2, 0xdd, 0x5d, 0x0c, 0xec, 0xdc, 0xf7, 0xc1, 0x76, 0xe0, 0x24,
0x65, 0xef, 0x41, 0x83, 0x35, 0x38, 0x78, 0x0e, 0x65, 0x82, 0xe3, 0x55, 0x90, 0xa8, 0xd5, 0xf7,
0x66, 0xcf, 0xe2, 0x61, 0x91, 0x3c, 0x69, 0xcb, 0xe7, 0x75, 0x62, 0x6f, 0xd7, 0x9b, 0x69, 0x0c,
0x0d, 0x07, 0x0c, 0x9c, 0x68, 0x24, 0x51, 0x51, 0x1f, 0x8d, 0x8b, 0xd6, 0x2e, 0x67, 0x5f, 0xc3,
0x13, 0x45, 0x21, 0xa1, 0x69, 0x9a, 0x05, 0xda, 0x7d, 0x10, 0xda, 0x7f, 0x34, 0x9f, 0xf3, 0x64,
0x35, 0xf9, 0x16, 0x1c, 0xd4, 0x60, 0x02, 0xf3, 0x42, 0xc7, 0x42, 0x29, 0xf3, 0x2c, 0x31, 0x71,
0x50, 0x35, 0x4e, 0xaa, 0x9f, 0x09, 0xc3, 0xdd, 0x2f, 0x72, 0x30, 0x77, 0xc7, 0x30, 0xbc, 0xc8,
0x51, 0xa0, 0x5e, 0xbb, 0xc3, 0x8e, 0x69, 0xd7, 0x4f, 0x57, 0x56, 0x77, 0xcb, 0x43, 0xd6, 0x46,
0x62, 0x21, 0x18, 0xfd, 0x7d, 0x24, 0x58, 0x61, 0xec, 0xfe, 0xa9, 0x77, 0x59, 0x3b, 0x03, 0x0a,
0x07, 0x00, 0x12, 0x61, 0x77, 0xa8, 0x15, 0xa1, 0xd6, 0xd0, 0xd3, 0x57, 0x73, 0x62, 0xb9, 0xbb,
0x3e, 0x60, 0x87, 0x22, 0xb7, 0xbf, 0xd6, 0xf9, 0x17, 0x86, 0xea, 0x02, 0xbe, 0x23, 0xba, 0xd3,
0xdd, 0x0d, 0x3e, 0x8c, 0x65, 0xa0, 0xf8, 0xd8, 0x2f, 0x35, 0xc6, 0x26, 0x6c, 0x81, 0xe6, 0x29,
0x50, 0x30, 0x4a, 0x8e, 0xfa, 0xc2, 0x1e, 0xfd, 0xa7, 0xa5, 0x98, 0x53, 0x18, 0x94, 0xff, 0x1d,
0x41, 0x2f, 0xff, 0x58, 0x33, 0xdc, 0x2b, 0x67, 0x4b, 0xdd, 0xd3, 0x56, 0x9c, 0xb2, 0x09, 0x4e,
0x9b, 0xb1, 0xee, 0x58, 0x0a, 0xe4, 0x42, 0x56, 0x26, 0x23, 0x2c, 0x3f, 0x14, 0x73, 0x46, 0x9a
};
void slqz3_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x200000;
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++)
{
@ -1512,38 +1429,17 @@ void slqz3_decrypt(running_machine &machine)
IGS27_CRYPT7
IGS27_CRYPT8
x ^= slqz3_tab[(i/2) & 0xff] << 8;
src[i] = x;
}
}
//IGS COPYRIGHT 1999.99.99
// V214US
static const uint8_t fruitpar_tab[0x100] = {
0xe9, 0x0b, 0x95, 0x7e, 0x0d, 0x7d, 0x5c, 0x1e, 0x81, 0x0e, 0xa6, 0xd4, 0x8e, 0x90, 0xd8, 0x54,
0x27, 0x65, 0x51, 0x08, 0x1c, 0xa0, 0x3b, 0x51, 0x83, 0x60, 0x93, 0x02, 0x64, 0x69, 0x77, 0x1a,
0xa4, 0x03, 0xb0, 0xc2, 0x34, 0x18, 0x80, 0x87, 0x7a, 0x88, 0xad, 0xd9, 0xff, 0xd0, 0xce, 0xc4,
0x5b, 0xdc, 0xd5, 0xed, 0x5e, 0x29, 0xdd, 0xcf, 0x80, 0x1f, 0x36, 0x38, 0x8b, 0xae, 0xae, 0xfe,
0x87, 0x27, 0x22, 0x07, 0xe6, 0x5d, 0x46, 0x79, 0xf1, 0xfc, 0xb1, 0x3d, 0x72, 0x29, 0x2c, 0xba,
0xa3, 0x5b, 0x3c, 0xcf, 0x57, 0x79, 0xed, 0x12, 0x67, 0x34, 0xe1, 0x48, 0x5f, 0xa7, 0x9a, 0x24,
0x6a, 0x2e, 0x04, 0x44, 0x7b, 0x84, 0x46, 0x6a, 0xbd, 0x20, 0xca, 0xf7, 0x3e, 0xd1, 0x8b, 0xad,
0xd7, 0x98, 0x9e, 0xa6, 0x5e, 0xc6, 0x04, 0x90, 0x0f, 0x57, 0xae, 0x2b, 0x38, 0x8d, 0xd2, 0x04,
0x25, 0xd1, 0x6d, 0x73, 0x4b, 0xc6, 0x19, 0xd3, 0xb8, 0xae, 0x11, 0x01, 0xba, 0x02, 0x82, 0x17,
0xcf, 0x4d, 0x14, 0x6a, 0xcd, 0x4a, 0xb9, 0xc1, 0x52, 0x3e, 0xb5, 0xd8, 0x6f, 0x98, 0xee, 0x16,
0x90, 0xc6, 0x76, 0x8a, 0xaf, 0x5a, 0x56, 0x2b, 0xb9, 0x5e, 0x9e, 0x51, 0x40, 0xf4, 0xaa, 0x6e,
0x63, 0x32, 0xb6, 0x12, 0xfb, 0x3c, 0xa5, 0x1f, 0x07, 0xa3, 0x0d, 0x49, 0x5a, 0xfe, 0x88, 0xd1,
0x83, 0xc7, 0x37, 0x82, 0xfd, 0x78, 0x97, 0xec, 0x98, 0xe6, 0x88, 0xe0, 0x27, 0xde, 0x9a, 0x2c,
0x6b, 0xfd, 0x9b, 0x98, 0x40, 0xd5, 0x5f, 0x20, 0x06, 0x3e, 0xcf, 0x74, 0x52, 0xf9, 0x35, 0xae,
0xd6, 0x8c, 0xc7, 0x53, 0x8e, 0x59, 0x71, 0x8c, 0x2d, 0x00, 0xe7, 0xa5, 0xc7, 0xf8, 0xeb, 0xc7,
0xbf, 0x68, 0xdc, 0xf2, 0xf4, 0x4c, 0x80, 0x3e, 0x27, 0xc5, 0x13, 0x52, 0xb0, 0xc0, 0x90, 0x25
};
void fruitpar_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x80000;
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();
// not 100% verified
for (int i = 0; i < rom_size / 2; i++)
@ -1559,36 +1455,15 @@ void fruitpar_decrypt(running_machine &machine)
IGS27_CRYPT7_ALT
IGS27_CRYPT8
x ^= fruitpar_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
static const uint8_t oceanpar_tab[0x100] = {
0xad, 0xe8, 0xf9, 0xf2, 0x2e, 0x20, 0x6c, 0x06, 0xfe, 0xed, 0x42, 0xaf, 0x60, 0x33, 0x7e, 0xa4,
0x6d, 0xac, 0x09, 0x5e, 0xc0, 0x8f, 0xfb, 0xd4, 0x61, 0x61, 0x29, 0x75, 0xf4, 0x1b, 0xef, 0x67,
0x23, 0x7d, 0x3f, 0xff, 0x48, 0xb2, 0xea, 0x81, 0x5f, 0x25, 0x2e, 0x19, 0x2c, 0xa3, 0x81, 0x19,
0xa8, 0xb2, 0x9d, 0x75, 0xb2, 0x30, 0xcc, 0x7c, 0xf4, 0x30, 0x76, 0xd9, 0x12, 0x11, 0xe8, 0xc9,
0x1a, 0xe0, 0x67, 0x9e, 0x28, 0xf0, 0x75, 0x75, 0x59, 0xb8, 0x62, 0x34, 0xf3, 0xed, 0x17, 0xc6,
0xd2, 0xe0, 0x1e, 0x9a, 0x15, 0x1a, 0xf6, 0x5a, 0x0a, 0x35, 0x96, 0xe9, 0x58, 0xfd, 0x40, 0xa0,
0x6b, 0xc8, 0x88, 0xc8, 0x25, 0x13, 0xa4, 0x5b, 0xc2, 0x5e, 0xf5, 0xf7, 0x0c, 0x49, 0xd7, 0x24,
0xc1, 0xf0, 0xa6, 0xc7, 0x42, 0x83, 0x11, 0xe6, 0x7d, 0x2a, 0xa2, 0x9e, 0x1c, 0x18, 0x8e, 0x62,
0xef, 0xee, 0xbb, 0x75, 0x97, 0x52, 0x10, 0xab, 0x74, 0xd0, 0x00, 0x5c, 0xd1, 0xf0, 0x59, 0xa9,
0x4f, 0x99, 0x4a, 0xf3, 0x8f, 0xa6, 0xb4, 0x98, 0x23, 0xc6, 0xb2, 0xf0, 0xb7, 0x99, 0x6b, 0x88,
0x7c, 0x08, 0x17, 0x9d, 0xd6, 0xe5, 0x50, 0xdc, 0x46, 0xc5, 0x9b, 0x59, 0x99, 0x19, 0x36, 0xcd,
0x52, 0x93, 0x24, 0x15, 0x55, 0xb8, 0x77, 0xe7, 0xd6, 0xc2, 0xde, 0xd6, 0x82, 0xb8, 0x6e, 0x89,
0xec, 0xd1, 0xb5, 0x38, 0x3a, 0x05, 0xfd, 0x68, 0x10, 0xf5, 0xdd, 0xe7, 0xbc, 0xfd, 0x06, 0x0a,
0xa4, 0x97, 0x4c, 0x26, 0xed, 0xf3, 0xf3, 0x4d, 0x6d, 0xd4, 0x3c, 0x4a, 0xd3, 0xae, 0x30, 0xdf,
0x15, 0xfe, 0xac, 0x3d, 0x1b, 0xe9, 0xae, 0xc5, 0xa9, 0x18, 0xdf, 0xfe, 0x92, 0xd3, 0x60, 0xd7,
0x1b, 0x5c, 0xd9, 0x1e, 0xad, 0x8e, 0xc0, 0x40, 0xc0, 0xb7, 0xe7, 0x42, 0x04, 0xb2, 0x49, 0x00
};
void oceanpar_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x80000;
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();
// not 100% verified
for (int i = 0; i < rom_size / 2; i++)
@ -1604,8 +1479,6 @@ void oceanpar_decrypt(running_machine &machine)
IGS27_CRYPT7_ALT
IGS27_CRYPT8
x ^= oceanpar_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
@ -1728,31 +1601,11 @@ void pgm_dwpc_decrypt(running_machine &machine)
}
// IGS FOR V100CN 2007 04 18 in the ROM
static const uint8_t mgcs3_tab[0x100] = {
0x49, 0x47, 0x53, 0x30, 0x32, 0x30, 0x37, 0x52, 0x44, 0x32, 0x30, 0x35, 0x30, 0x38, 0x30, 0x32, // IGS0207RD2050802
0x04, 0x12, 0x46, 0xbb, 0x23, 0x66, 0xae, 0x39, 0x71, 0x44, 0x17, 0xe1, 0x0b, 0xa7, 0x41, 0x7b,
0xb3, 0xa2, 0x38, 0xe9, 0xb7, 0x39, 0xe8, 0x2b, 0x22, 0x82, 0xe4, 0x93, 0x22, 0xfc, 0x73, 0x44,
0xb9, 0x30, 0xdc, 0xf1, 0xa8, 0x86, 0xf4, 0xd4, 0x98, 0x6a, 0xe5, 0xed, 0x8b, 0x9f, 0x40, 0x7d,
0x83, 0xe3, 0x46, 0xc2, 0x71, 0xc4, 0x73, 0xf4, 0x60, 0xc2, 0x4c, 0x80, 0xe2, 0xa6, 0x6b, 0x83,
0xbb, 0x22, 0xc8, 0x8a, 0xcd, 0xaa, 0x49, 0x89, 0x43, 0x92, 0x8d, 0x19, 0x02, 0x69, 0xf5, 0xf6,
0x4c, 0x94, 0xf5, 0xb8, 0xb7, 0x2f, 0x99, 0xd2, 0x4d, 0x20, 0x5b, 0xc8, 0x05, 0x7d, 0x23, 0xb5,
0x62, 0x21, 0x9f, 0xfc, 0x69, 0x89, 0xc6, 0x4e, 0xc9, 0xf4, 0xa8, 0xdd, 0x46, 0xbb, 0x78, 0xde,
0x67, 0xee, 0xdc, 0x45, 0x60, 0x30, 0x73, 0xbc, 0x42, 0xd5, 0xa8, 0xe5, 0x61, 0x3a, 0xb6, 0xd1,
0x06, 0x64, 0xfc, 0xc1, 0x56, 0xdc, 0x83, 0x1c, 0x82, 0xc9, 0xcd, 0xb0, 0x31, 0x4f, 0xe0, 0x2d,
0x2a, 0x28, 0x93, 0xdf, 0x46, 0x82, 0x19, 0xab, 0x96, 0x18, 0xcb, 0x4d, 0xd0, 0x93, 0x3a, 0xd1,
0xff, 0x23, 0x75, 0x4f, 0x6b, 0x59, 0x97, 0xea, 0xc6, 0x48, 0x95, 0x0b, 0x9a, 0xdd, 0x46, 0xdb,
0xef, 0x7b, 0xb4, 0xff, 0x40, 0xda, 0xa2, 0x98, 0xa0, 0x21, 0x5d, 0x79, 0x29, 0x42, 0xc8, 0xab,
0xa5, 0x97, 0xa2, 0x1f, 0x80, 0xba, 0x1b, 0xb2, 0xee, 0xaa, 0x97, 0x66, 0x58, 0x1b, 0xc2, 0xdf,
0x0d, 0x1d, 0xd4, 0x1d, 0x26, 0xf2, 0x26, 0x78, 0xba, 0x29, 0xf6, 0xe1, 0x43, 0xff, 0x77, 0x58,
0x50, 0xf6, 0x1c, 0xa8, 0x6d, 0xb7, 0x26, 0x6a, 0x50, 0x25, 0x6c, 0x39, 0x45, 0xc3, 0x6b, 0x32
};
void mgcs3_decrypt(running_machine &machine)
{
auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(machine.root_device().memregion("user1")->base()));
int const rom_size = 0x80000;
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++)
{
@ -1767,36 +1620,16 @@ void mgcs3_decrypt(running_machine &machine)
IGS27_CRYPT7_ALT
IGS27_CRYPT8
x ^= mgcs3_tab[(i >> 1) & 0xff] << 8;
src[i] = x;
}
}
static const uint8_t mgzz_tab[0x100] = {
0x49, 0x47, 0x53, 0x30, 0x30, 0x38, 0x33, 0x52, 0x44, 0x34, 0x30, 0x32, 0x31, 0x32, 0x31, 0x32, // IGS0083RD4021212
0x82, 0x6b, 0xca, 0xbe, 0x9b, 0x9f, 0xc3, 0xa5, 0x8f, 0x2a, 0x9f, 0x0e, 0x26, 0x28, 0x4a, 0x9d,
0xa2, 0x57, 0xfc, 0x43, 0xf3, 0x34, 0x05, 0x72, 0x1e, 0x59, 0xd9, 0xa0, 0xe7, 0x16, 0x5b, 0xff,
0xc6, 0x4f, 0x6e, 0x7a, 0x09, 0x96, 0xba, 0xf3, 0x46, 0x89, 0xbb, 0xbc, 0x04, 0x6d, 0x11, 0x54,
0xa9, 0x0b, 0x03, 0x63, 0xa6, 0xcb, 0x54, 0xf7, 0xe2, 0x0f, 0x4b, 0x01, 0x65, 0xd3, 0xfd, 0x0b,
0x46, 0x82, 0xde, 0x3c, 0xd7, 0x1b, 0x87, 0x8e, 0x0e, 0x84, 0xca, 0x4d, 0x37, 0x2e, 0xf4, 0xd4,
0xd8, 0xeb, 0x61, 0x84, 0xe5, 0x0c, 0x46, 0x05, 0x25, 0xbf, 0xbb, 0xc0, 0xe4, 0xa7, 0x07, 0x9d,
0xda, 0xbd, 0x31, 0xfa, 0x5b, 0x66, 0xc3, 0xec, 0xc1, 0xd5, 0xe1, 0xb9, 0x17, 0xa4, 0x8b, 0x96,
0x07, 0xae, 0x2f, 0x9d, 0x06, 0x30, 0x73, 0x12, 0xbe, 0x1f, 0x40, 0xd7, 0xbb, 0xcc, 0x12, 0x2d,
0x5a, 0xb6, 0x7f, 0xad, 0xef, 0xb0, 0x06, 0x86, 0x36, 0x34, 0x1a, 0xf8, 0xfc, 0x06, 0x6f, 0x11,
0x0e, 0x0c, 0x84, 0xa7, 0x62, 0x6d, 0x71, 0x97, 0x84, 0xe9, 0xf3, 0x3c, 0x44, 0x79, 0xb5, 0x32,
0x9e, 0x27, 0xe1, 0x4c, 0xea, 0x30, 0xe7, 0xd4, 0x45, 0x57, 0x8d, 0x02, 0x3e, 0x8c, 0x38, 0xbf,
0xc5, 0xbe, 0x79, 0x9b, 0x51, 0xfd, 0xdb, 0x0b, 0x51, 0xd5, 0xec, 0xe8, 0xd6, 0xe6, 0x89, 0x26,
0x7e, 0xc8, 0x6f, 0xd1, 0xa4, 0x1e, 0xff, 0x4d, 0xc5, 0xf8, 0x51, 0xce, 0x36, 0x6f, 0x7d, 0x16,
0x04, 0x7b, 0x26, 0x6f, 0x2c, 0x18, 0x47, 0xe8, 0xfc, 0x99, 0x42, 0xd3, 0xc9, 0x4c, 0x26, 0x7f,
0xd2, 0x4f, 0x40, 0x32, 0x74, 0xb2, 0xe6, 0x6b, 0x90, 0xcf, 0x7f, 0x56, 0x3a, 0xe5, 0xd7, 0x8f
};
// IGS0083RD4021212
void mgzz_decrypt(running_machine &machine)
{
auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(machine.root_device().memregion("user1")->base()));
int const rom_size = 0x80000;
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++)
{
@ -1811,8 +1644,6 @@ void mgzz_decrypt(running_machine &machine)
IGS27_CRYPT7
IGS27_CRYPT8
x ^= mgzz_tab[(i >> 1) & 0xff] << 8;
src[i] = x;
}
}
@ -1865,31 +1696,11 @@ void crzybugsj_decrypt(running_machine &machine)
}
// IGS MAHJONG S500CN
static const uint8_t qlgs_tab[0x100] = {
0x49, 0x47, 0x53, 0x30, 0x30, 0x39, 0x38, 0x52, 0x44, 0x34, 0x30, 0x36, 0x30, 0x38, 0x32, 0x38, // IGS0098RD4060828
0x64, 0x8d, 0x4a, 0x0c, 0xd4, 0x50, 0xd6, 0xea, 0x9e, 0x5a, 0xd6, 0x31, 0xef, 0x59, 0xbf, 0x13,
0x09, 0x4b, 0x27, 0x4e, 0x20, 0x0b, 0xbb, 0x5d, 0x79, 0x1b, 0x7e, 0xde, 0xc6, 0xb3, 0x44, 0x43,
0xbb, 0x0b, 0x6e, 0xbd, 0xf6, 0xe6, 0xe7, 0x65, 0x0e, 0x5f, 0x5f, 0xad, 0xf9, 0xf8, 0xc7, 0x06,
0xa3, 0xe0, 0x0d, 0xd3, 0xcc, 0x85, 0x19, 0x8e, 0x23, 0x5a, 0x08, 0x39, 0xa1, 0xea, 0xa8, 0x08,
0x27, 0x1e, 0x34, 0x4d, 0x5b, 0xcb, 0x51, 0xa3, 0xc0, 0x7f, 0x48, 0x5f, 0x14, 0x8d, 0x86, 0x33,
0xee, 0x56, 0x51, 0x24, 0x98, 0xdb, 0xcd, 0xaf, 0x2b, 0x80, 0x2e, 0x38, 0xe9, 0x23, 0x3f, 0xb3,
0xdf, 0x5d, 0x14, 0x95, 0xbc, 0x17, 0x0b, 0xfd, 0xec, 0x51, 0x0a, 0x1f, 0xf8, 0x2f, 0xf3, 0xf1,
0x22, 0x45, 0x6b, 0x1a, 0x3c, 0x24, 0xcd, 0x17, 0xc9, 0x25, 0x69, 0xb0, 0x57, 0x75, 0x01, 0x9a,
0x1c, 0x61, 0x86, 0x6e, 0xd0, 0xe3, 0x0f, 0xca, 0xca, 0x6e, 0x1a, 0xc5, 0x5e, 0xf7, 0x08, 0x98,
0x75, 0x44, 0xd3, 0x8b, 0x6e, 0x79, 0x11, 0x1e, 0x35, 0xe0, 0x2e, 0x7a, 0xa2, 0xf8, 0xe6, 0x17,
0x15, 0xc1, 0x01, 0xae, 0x4f, 0x47, 0x53, 0x61, 0x92, 0x6d, 0xf3, 0x29, 0xfc, 0xfc, 0xbb, 0x81,
0x21, 0xec, 0x00, 0x51, 0xe8, 0xf1, 0x93, 0x1d, 0xa8, 0x49, 0xf8, 0x6e, 0x83, 0xc5, 0xe5, 0x81,
0x02, 0x16, 0xff, 0x2e, 0xf1, 0x5a, 0xd0, 0x1c, 0x7d, 0xe7, 0x0c, 0x23, 0x8d, 0x57, 0x05, 0x02,
0x5e, 0xd4, 0x6b, 0x42, 0x61, 0xa5, 0x49, 0x6a, 0x59, 0xfa, 0x3d, 0x64, 0xb1, 0xf4, 0xf8, 0x2f,
0x1b, 0xf8, 0xf6, 0xc7, 0x6f, 0x35, 0x7e, 0x52, 0xc3, 0x74, 0xdc, 0x8c, 0xc6, 0x20, 0xde, 0x74
};
void qlgs_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x80000;
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++)
{
@ -1905,36 +1716,16 @@ void qlgs_decrypt(running_machine &machine)
IGS27_CRYPT7
IGS27_CRYPT8
x ^= qlgs_tab[(i >> 1) & 0xff] << 8;
src[i] = x;
}
}
static const uint8_t jking02_tab[0x100] = {
0x49, 0x47, 0x53, 0x30, 0x30, 0x30, 0x34, 0x52, 0x44, 0x34, 0x30, 0x31, 0x30, 0x39, 0x32, 0x31, // IGS0004RD4010921
0xa5, 0x04, 0x3d, 0x57, 0xe3, 0x8d, 0x44, 0xf3, 0x50, 0x21, 0x8a, 0xe5, 0x75, 0x22, 0x3a, 0xb3,
0xd5, 0x76, 0x66, 0x07, 0x89, 0xd4, 0xb8, 0x96, 0x20, 0x4e, 0x77, 0x53, 0xb5, 0x20, 0xbd, 0xd6,
0x52, 0xb8, 0xf7, 0x07, 0x85, 0x05, 0x9d, 0x0f, 0x41, 0x04, 0x33, 0x80, 0xf7, 0x89, 0x81, 0xc3,
0xf5, 0x4b, 0x0e, 0xc2, 0xfe, 0x33, 0xe3, 0xd7, 0x2b, 0xe6, 0x7e, 0xf5, 0x02, 0x91, 0x14, 0x15,
0xd4, 0xf4, 0x0c, 0xe4, 0x5c, 0xb2, 0xb8, 0xab, 0x95, 0xd7, 0x56, 0x7e, 0xdc, 0xaa, 0x47, 0xa9,
0x47, 0xb6, 0x8e, 0x57, 0x44, 0x13, 0x8c, 0x84, 0x76, 0xfa, 0xfa, 0x26, 0xcc, 0x89, 0x27, 0x97,
0xe3, 0xd2, 0x74, 0x46, 0x9f, 0x2b, 0x0d, 0x9f, 0x04, 0xb1, 0xe9, 0x37, 0x5a, 0x1e, 0x05, 0x3c,
0x82, 0xce, 0xdc, 0x1d, 0x92, 0x0c, 0x2a, 0x75, 0xb8, 0xa1, 0xe3, 0x3e, 0x4d, 0x9f, 0x6e, 0x33,
0x38, 0x6a, 0x26, 0x85, 0x86, 0x08, 0x13, 0xc3, 0x47, 0xab, 0xe5, 0x04, 0xab, 0x7d, 0x32, 0x56,
0x5e, 0xab, 0xf1, 0x6b, 0x21, 0xb4, 0x37, 0x82, 0xa9, 0xf4, 0x30, 0x94, 0xbc, 0x6c, 0x61, 0xc1,
0x8a, 0xd3, 0x1c, 0xfa, 0x49, 0xe3, 0x44, 0xef, 0x15, 0xdd, 0x42, 0x3b, 0x07, 0x5e, 0x48, 0xce,
0x94, 0x66, 0xc5, 0x9b, 0x27, 0xa6, 0x29, 0x84, 0x02, 0x0a, 0xdb, 0x82, 0x52, 0x87, 0x77, 0x19,
0x91, 0x26, 0x4c, 0xfb, 0x21, 0x51, 0x16, 0xfb, 0x26, 0x5e, 0xf8, 0x35, 0xa5, 0x5a, 0xbd, 0x7c,
0xda, 0x17, 0x50, 0x04, 0xde, 0x78, 0x79, 0x51, 0x7a, 0xfc, 0xda, 0x5f, 0x46, 0x89, 0x29, 0x13,
0x06, 0x7b, 0xaf, 0xe2, 0x46, 0xed, 0x02, 0xc0, 0x33, 0x46, 0xff, 0x4b, 0xbd, 0x08, 0x0a, 0x38
};
// IGS0004RD4010921
void jking02_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x80000;
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++)
{
@ -1950,8 +1741,6 @@ void jking02_decrypt(running_machine &machine)
IGS27_CRYPT7
IGS27_CRYPT8
x ^= jking02_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
@ -2228,30 +2017,12 @@ void wldfruit_decrypt(running_machine &machine)
}
static const uint8_t lthy_tab[0x100] = { // IGS MAHJONG CHINA S104CN
0x08, 0xb1, 0x64, 0x36, 0x90, 0xfa, 0x88, 0xbf, 0xca, 0xd6, 0xcf, 0x87, 0x5b, 0x88, 0xf7, 0xc6,
0x32, 0xfe, 0x7d, 0xcc, 0xc2, 0x3d, 0xfb, 0x0c, 0x81, 0x0c, 0xc2, 0x6c, 0xa0, 0xe0, 0xb3, 0xcc,
0x0d, 0x08, 0x63, 0xd5, 0xa7, 0x19, 0x6f, 0x03, 0xc1, 0x9c, 0x1c, 0xf6, 0xd9, 0xf7, 0x33, 0xf5,
0x9a, 0x99, 0x1c, 0xc3, 0x0f, 0x6a, 0x3a, 0xa7, 0x29, 0x71, 0x86, 0xb6, 0x75, 0xc8, 0x6e, 0x64,
0x16, 0xbd, 0xf0, 0x4a, 0x09, 0x4a, 0xf3, 0x39, 0x9a, 0xb7, 0xe5, 0x81, 0x21, 0x8e, 0x9b, 0x7b,
0x02, 0xbf, 0x65, 0x5d, 0xe4, 0x14, 0x71, 0x3f, 0x31, 0xd8, 0x62, 0x68, 0xcf, 0xc3, 0x31, 0xdf,
0x1c, 0x2a, 0x43, 0x2e, 0x2f, 0x64, 0xcc, 0x79, 0x4e, 0x7f, 0x63, 0xc0, 0xab, 0x24, 0xe6, 0x71,
0x64, 0xc8, 0x91, 0x31, 0xba, 0x15, 0x5a, 0xec, 0x90, 0x98, 0x8f, 0x1b, 0x26, 0xab, 0xb2, 0x55,
0x17, 0xa5, 0x95, 0x19, 0x91, 0x41, 0xb2, 0xda, 0xd5, 0x4d, 0xcd, 0x4c, 0xef, 0x94, 0xcd, 0xee,
0xb6, 0x0c, 0xd6, 0xd8, 0x06, 0x44, 0xac, 0xc7, 0x3d, 0x09, 0x44, 0x66, 0xf4, 0x58, 0xac, 0xdf,
0xff, 0x88, 0x1d, 0xa2, 0xa7, 0xb8, 0x5e, 0x75, 0x27, 0x77, 0x5b, 0xbd, 0x64, 0xb3, 0x06, 0x0b,
0xf1, 0xe4, 0x6f, 0xea, 0x43, 0x79, 0x1f, 0xe8, 0x31, 0x82, 0xb9, 0xe2, 0xaf, 0xa0, 0xd4, 0x95,
0xcc, 0x2a, 0x13, 0x62, 0xe9, 0xa1, 0x86, 0x61, 0x3b, 0x56, 0x46, 0xaa, 0x84, 0x5a, 0x4b, 0xe0,
0x0d, 0xa6, 0x91, 0xfe, 0xe8, 0x8c, 0x6b, 0x66, 0x64, 0x5d, 0x27, 0x27, 0xd0, 0x5c, 0xe4, 0x8e,
0x75, 0xe3, 0xaf, 0xf1, 0xce, 0xd4, 0xe5, 0xb7, 0x0a, 0x43, 0xc5, 0xac, 0xc5, 0x61, 0x54, 0x84,
0x02, 0xac, 0x76, 0xad, 0x6c, 0x55, 0x49, 0x59, 0xce, 0xf1, 0xc5, 0xcc, 0xd0, 0x64, 0x93, 0xe3
};
// IGS MAHJONG CHINA S104CN
void lthy_decrypt(running_machine &machine)
{
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
int const rom_size = 0x80000;
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++)
{
@ -2266,37 +2037,16 @@ void lthy_decrypt(running_machine &machine)
IGS27_CRYPT7 // ?
IGS27_CRYPT8 // correct 12c0
x ^= lthy_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
static const uint8_t lhdmg_tab[0x100] = {
0x13, 0x45, 0x21, 0xa1, 0x69, 0x9a, 0x05, 0xda, 0x7d, 0x10, 0xda, 0x7f, 0x34, 0x9f, 0xf3, 0x64,
0x35, 0xf9, 0x16, 0x1c, 0xd4, 0x60, 0x02, 0xf3, 0x42, 0xc7, 0x42, 0x29, 0xf3, 0x2c, 0x31, 0x71,
0x50, 0x35, 0x4e, 0xaa, 0x9f, 0x09, 0xc3, 0xdd, 0x2f, 0x72, 0x30, 0x77, 0xc7, 0x30, 0xbc, 0xc8,
0x51, 0xa0, 0x5e, 0xbb, 0xc3, 0x8e, 0x69, 0xd7, 0x4f, 0x57, 0x56, 0x77, 0xcb, 0x43, 0xd6, 0x46,
0x62, 0x21, 0x18, 0xfd, 0x7d, 0x24, 0x58, 0x61, 0xec, 0xfe, 0xa9, 0x77, 0x59, 0x3b, 0x03, 0x0a,
0xef, 0xdf, 0x90, 0x60, 0x46, 0x43, 0x33, 0x38, 0x92, 0x2d, 0x5a, 0x08, 0x0d, 0x2f, 0x05, 0x75,
0x3e, 0x60, 0x87, 0x22, 0xb7, 0xbf, 0xd6, 0xf9, 0x17, 0x86, 0xea, 0x02, 0xbe, 0x23, 0xba, 0xd3,
0xdd, 0x0d, 0x3e, 0x8c, 0x65, 0xa0, 0xf8, 0xd8, 0x2f, 0x35, 0xc6, 0x26, 0x6c, 0x81, 0xe6, 0x29,
0x50, 0x30, 0x4a, 0x8e, 0xfa, 0xc2, 0x1e, 0xfd, 0xa7, 0xa5, 0x98, 0x53, 0x18, 0x94, 0xff, 0x1d,
0x41, 0x2f, 0xff, 0x58, 0x33, 0xdc, 0x2b, 0x67, 0x4b, 0xdd, 0xd3, 0x56, 0x9c, 0xb2, 0x09, 0x4e,
0x9b, 0xb1, 0xee, 0x58, 0x0a, 0xe4, 0x42, 0x56, 0x26, 0x23, 0x2c, 0x3f, 0x14, 0x73, 0x46, 0x9a,
0xa1, 0x42, 0x17, 0x12, 0xdb, 0xa2, 0xdd, 0x5d, 0x0c, 0xec, 0xdc, 0xf7, 0xc1, 0x76, 0xe0, 0x24,
0x65, 0xef, 0x41, 0x83, 0x35, 0x38, 0x78, 0x0e, 0x65, 0x82, 0xe3, 0x55, 0x90, 0xa8, 0xd5, 0xf7,
0x66, 0xcf, 0xe2, 0x61, 0x91, 0x3c, 0x69, 0xcb, 0xe7, 0x75, 0x62, 0x6f, 0xd7, 0x9b, 0x69, 0x0c,
0x0d, 0x07, 0x0c, 0x9c, 0x68, 0x24, 0x51, 0x51, 0x1f, 0x8d, 0x8b, 0xd6, 0x2e, 0x67, 0x5f, 0xc3,
0x07, 0x00, 0x12, 0x61, 0x77, 0xa8, 0x15, 0xa1, 0xd6, 0xd0, 0xd3, 0x57, 0x73, 0x62, 0xb9, 0xbb
};
void lhdmg_decrypt(running_machine &machine)
{
auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(machine.root_device().memregion("user1")->base()));
int const rom_size = 0x80000;
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++)
{
@ -2311,37 +2061,16 @@ void lhdmg_decrypt(running_machine &machine)
IGS27_CRYPT7
IGS27_CRYPT8
x ^= lhdmg_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
static const uint8_t lhdmgp_tab[0x100] = {
0x49, 0x47, 0x53, 0x30, 0x30, 0x36, 0x34, 0x52, 0x44, 0x34, 0x30, 0x33, 0x30, 0x31, 0x30, 0x36,
0xc1, 0x2f, 0xac, 0x4b, 0xe1, 0x01, 0xd6, 0xfa, 0x77, 0x85, 0xbf, 0x2e, 0x33, 0xba, 0x1c, 0x4c,
0x93, 0x9c, 0xc2, 0x83, 0xdd, 0x50, 0xc7, 0x9c, 0x5e, 0x95, 0xdd, 0x01, 0xe1, 0x67, 0xea, 0x11,
0x72, 0xf5, 0xec, 0xa3, 0x54, 0xc5, 0x0d, 0xd8, 0x40, 0x25, 0x02, 0x26, 0xe0, 0xd6, 0xa9, 0xa2,
0x8c, 0xf4, 0xe3, 0x8e, 0x44, 0x29, 0xaf, 0x23, 0xee, 0x13, 0x87, 0x9f, 0xd1, 0xf2, 0xff, 0x92,
0x51, 0x96, 0x9c, 0x66, 0xec, 0x88, 0xf3, 0x2e, 0x75, 0x78, 0x03, 0xb0, 0x90, 0xe7, 0xd3, 0xb5,
0x6f, 0x15, 0x4f, 0x90, 0xcb, 0x2d, 0x60, 0xec, 0x26, 0xaf, 0x4b, 0xdb, 0x3f, 0x1f, 0x4d, 0x1c,
0xd6, 0xec, 0x73, 0xad, 0xa1, 0xa3, 0xbf, 0x92, 0x8e, 0x54, 0x78, 0xe3, 0x3b, 0x45, 0xd2, 0x1c,
0xb4, 0xd6, 0xbf, 0xa1, 0x6c, 0xb4, 0x15, 0x90, 0x7e, 0x42, 0xe1, 0xcc, 0x24, 0x44, 0x0a, 0x47,
0x78, 0xce, 0x2a, 0x8f, 0x6b, 0x6c, 0xa9, 0x9c, 0x03, 0x93, 0x1c, 0xd8, 0xd9, 0x48, 0xdc, 0x70,
0xd2, 0x0f, 0xea, 0xda, 0x1d, 0x16, 0x03, 0xa7, 0x6d, 0xa2, 0x00, 0x8b, 0x78, 0xbb, 0x70, 0xaa,
0xb0, 0x14, 0x78, 0x25, 0x41, 0x3d, 0xea, 0xe5, 0x4b, 0x0b, 0xa4, 0xa7, 0x61, 0x48, 0x2b, 0x48,
0x42, 0x97, 0x89, 0x53, 0xd7, 0xab, 0x64, 0xc8, 0x6d, 0xa9, 0x60, 0x2f, 0x33, 0xda, 0xb6, 0xde,
0xf6, 0x95, 0x15, 0x86, 0x1c, 0x6c, 0xb9, 0x05, 0xe0, 0x96, 0xca, 0x67, 0xcd, 0x9d, 0xf7, 0x3d,
0x7c, 0x48, 0x53, 0x23, 0x91, 0xcb, 0x6f, 0x8c, 0xf4, 0x2e, 0xb9, 0xd1, 0x4d, 0xfb, 0x15, 0x7a,
0xc2, 0x2b, 0xb9, 0xcb, 0xf5, 0x53, 0x4e, 0x93, 0x38, 0x0b, 0x45, 0x31, 0x13, 0x9f, 0x76, 0xe7
};
void lhdmgp_decrypt(running_machine &machine)
{
auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(machine.root_device().memregion("user1")->base()));
int const rom_size = 0x80000;
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++)
{
@ -2356,8 +2085,6 @@ void lhdmgp_decrypt(running_machine &machine)
IGS27_CRYPT7
IGS27_CRYPT8
x ^= lhdmgp_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
}
}
@ -2366,9 +2093,9 @@ void lhdmgp_decrypt(running_machine &machine)
void extradrw_decrypt(running_machine &machine)
{
auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(machine.root_device().memregion("user1")->base()));
int const rom_size = 0x80000;
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++)
{