Skip to content

Commit db219fd

Browse files
committed
igs/igs_m027.cpp: added preliminary decryption for oceanpar and clone [IQ_132]
1 parent 1c3c97a commit db219fd

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

src/mame/igs/igs_m027.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class igs_m027_state : public driver_device
6464
void init_klxyj();
6565
void init_slqz3();
6666
void init_fruitpar();
67+
void init_oceanpar();
6768
void init_amazonia();
6869
void init_amazoni2();
6970
void init_qlgs();
@@ -1215,6 +1216,13 @@ void igs_m027_state::init_fruitpar()
12151216
pgm_create_dummy_internal_arm_region();
12161217
}
12171218

1219+
void igs_m027_state::init_oceanpar()
1220+
{
1221+
oceanpar_decrypt(machine());
1222+
//sdwx_gfx_decrypt(machine());
1223+
pgm_create_dummy_internal_arm_region();
1224+
}
1225+
12181226
void igs_m027_state::init_amazonia()
12191227
{
12201228
amazonia_decrypt(machine());
@@ -1271,8 +1279,8 @@ GAME( 1999, qlgs, 0, igs_mahjong, sdwx, igs_m027_state, init_qlg
12711279
GAME( 1999, amazonia, 0, igs_mahjong, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King (V104BR)", MACHINE_IS_SKELETON )
12721280
GAME( 1999, amazonkp, amazonia, igs_mahjong, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King Plus (V204BR)", MACHINE_IS_SKELETON )
12731281
GAME( 1999, fruitpar, 0, igs_mahjong, sdwx, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V214)", MACHINE_IS_SKELETON )
1274-
GAME( 199?, oceanpar, 0, igs_mahjong, sdwx, igs_m027_state, init_fruitpar, ROT0, "IGS", "Ocean Paradise (V105US)", MACHINE_IS_SKELETON )
1275-
GAME( 199?, oceanpara, oceanpar, igs_mahjong, sdwx, igs_m027_state, init_fruitpar, ROT0, "IGS", "Ocean Paradise (V101US)", MACHINE_IS_SKELETON )
1282+
GAME( 1999, oceanpar, 0, igs_mahjong, sdwx, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V105US)", MACHINE_IS_SKELETON ) // 1999 copyright in ROM
1283+
GAME( 1999, oceanpara, oceanpar, igs_mahjong, sdwx, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V101US)", MACHINE_IS_SKELETON ) // 1999 copyright in ROM
12761284
GAME( 2002, sdwx, 0, igs_mahjong, sdwx, 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?)
12771285
GAME( 2003, amazoni2, 0, igs_mahjong, sdwx, igs_m027_state, init_amazoni2, ROT0, "IGS", "Amazonia King II (V202BR)", MACHINE_IS_SKELETON )
12781286
GAME( 200?, sddz, 0, igs_mahjong, sdwx, igs_m027_state, init_sddz, ROT0, "IGS", "Super Dou Di Zhu", MACHINE_IS_SKELETON )

src/mame/igs/pgmcrypt.cpp

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1607,7 +1607,52 @@ void fruitpar_decrypt(running_machine &machine)
16071607
}
16081608
}
16091609

1610-
static uint8_t amazonia_tab[0x100] = {
1610+
static const uint8_t oceanpar_tab[0x100] = {
1611+
0xad, 0xe8, 0xf9, 0xf2, 0x2e, 0x20, 0x6c, 0x06, 0xfe, 0xed, 0x42, 0xaf, 0x60, 0x33, 0x7e, 0xa4,
1612+
0x6d, 0xac, 0x09, 0x5e, 0xc0, 0x8f, 0xfb, 0xd4, 0x61, 0x61, 0x29, 0x75, 0xf4, 0x1b, 0xef, 0x67,
1613+
0x23, 0x7d, 0x3f, 0xff, 0x48, 0xb2, 0xea, 0x81, 0x5f, 0x25, 0x2e, 0x19, 0x2c, 0xa3, 0x81, 0x19,
1614+
0xa8, 0xb2, 0x9d, 0x75, 0xb2, 0x30, 0xcc, 0x7c, 0xf4, 0x30, 0x76, 0xd9, 0x12, 0x11, 0xe8, 0xc9,
1615+
0x1a, 0xe0, 0x67, 0x9e, 0x28, 0xf0, 0x75, 0x75, 0x59, 0xb8, 0x62, 0x34, 0xf3, 0xed, 0x17, 0xc6,
1616+
0xd2, 0xe0, 0x1e, 0x9a, 0x15, 0x1a, 0xf6, 0x5a, 0x0a, 0x35, 0x96, 0xe9, 0x58, 0xfd, 0x40, 0xa0,
1617+
0x6b, 0xc8, 0x88, 0xc8, 0x25, 0x13, 0xa4, 0x5b, 0xc2, 0x5e, 0xf5, 0xf7, 0x0c, 0x49, 0xd7, 0x24,
1618+
0xc1, 0xf0, 0xa6, 0xc7, 0x42, 0x83, 0x11, 0xe6, 0x7d, 0x2a, 0xa2, 0x9e, 0x1c, 0x18, 0x8e, 0x62,
1619+
0xef, 0xee, 0xbb, 0x75, 0x97, 0x52, 0x10, 0xab, 0x74, 0xd0, 0x00, 0x5c, 0xd1, 0xf0, 0x59, 0xa9,
1620+
0x4f, 0x99, 0x4a, 0xf3, 0x8f, 0xa6, 0xb4, 0x98, 0x23, 0xc6, 0xb2, 0xf0, 0xb7, 0x99, 0x6b, 0x88,
1621+
0x7c, 0x08, 0x17, 0x9d, 0xd6, 0xe5, 0x50, 0xdc, 0x46, 0xc5, 0x9b, 0x59, 0x99, 0x19, 0x36, 0xcd,
1622+
0x52, 0x93, 0x24, 0x15, 0x55, 0xb8, 0x77, 0xe7, 0xd6, 0xc2, 0xde, 0xd6, 0x82, 0xb8, 0x6e, 0x89,
1623+
0xec, 0xd1, 0xb5, 0x38, 0x3a, 0x05, 0xfd, 0x68, 0x10, 0xf5, 0xdd, 0xe7, 0xbc, 0xfd, 0x06, 0x0a,
1624+
0xa4, 0x97, 0x4c, 0x26, 0xed, 0xf3, 0xf3, 0x4d, 0x6d, 0xd4, 0x3c, 0x4a, 0xd3, 0xae, 0x30, 0xdf,
1625+
0x15, 0xfe, 0xac, 0x3d, 0x1b, 0xe9, 0xae, 0xc5, 0xa9, 0x18, 0xdf, 0xfe, 0x92, 0xd3, 0x60, 0xd7,
1626+
0x1b, 0x5c, 0xd9, 0x1e, 0xad, 0x8e, 0xc0, 0x40, 0xc0, 0xb7, 0xe7, 0x42, 0x04, 0xb2, 0x49, 0x00
1627+
};
1628+
1629+
void oceanpar_decrypt(running_machine &machine)
1630+
{
1631+
auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
1632+
1633+
int const rom_size = 0x80000;
1634+
1635+
// not 100% verified
1636+
for (int i = 0; i < rom_size / 2; i++)
1637+
{
1638+
uint16_t x = src[i];
1639+
1640+
IGS27_CRYPT1_ALT
1641+
IGS27_CRYPT2_ALT
1642+
IGS27_CRYPT3_ALT2
1643+
IGS27_CRYPT4
1644+
IGS27_CRYPT5_ALT
1645+
IGS27_CRYPT6
1646+
IGS27_CRYPT7_ALT
1647+
IGS27_CRYPT8_ALT
1648+
1649+
x ^= oceanpar_tab[(i>> 1) & 0xff] << 8;
1650+
1651+
src[i] = x;
1652+
}
1653+
}
1654+
1655+
static const uint8_t amazonia_tab[0x100] = {
16111656
0x86, 0x00, 0xd2, 0x6b, 0x78, 0x79, 0xbc, 0x80, 0xc6, 0x8e, 0x9b, 0xd8, 0x3a, 0x52, 0x09, 0x15,
16121657
0x05, 0x57, 0x7a, 0x1f, 0x2f, 0x08, 0x47, 0xa0, 0x44, 0x4c, 0xf7, 0xbe, 0x3d, 0x59, 0xd1, 0x18,
16131658
0xac, 0xd5, 0xa0, 0x03, 0x2c, 0x34, 0xc6, 0x06, 0x08, 0x4e, 0x84, 0x94, 0x2b, 0x3f, 0x88, 0x08,

src/mame/igs/pgmcrypt.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ void superkds_decrypt(running_machine &machine);
3838
void pgm_decrypt_pgm3in1(running_machine &machine);
3939
void slqz3_decrypt(running_machine &machine);
4040
void fruitpar_decrypt(running_machine &machine);
41+
void oceanpar_decrypt(running_machine &machine);
4142
void amazonia_decrypt(running_machine &machine);
4243
void amazoni2_decrypt(running_machine &machine);
4344
void mgzz_decrypt(running_machine &machine);

0 commit comments

Comments
 (0)