preliminary decryption of newly added igs_m027.c sets [iq_132]

This commit is contained in:
David Haywood 2015-09-11 03:56:59 +01:00
parent a54aaa2f84
commit de74ce25fe

View File

@ -1572,74 +1572,69 @@ void fruitpar_decrypt(running_machine &machine)
} }
} }
/*FIXME: This is incorrect. Was simply copied from fruitpar as an initial boilerplate code: */
static const UINT8 amazonia_tab[0x100] = { static UINT8 amazonia_tab[0x100] = { // seems to be correct
0xe9, 0x0b, 0x95, 0x7e, 0x0d, 0x7d, 0x5c, 0x1e, 0x81, 0x0e, 0xa6, 0xd4, 0x8e, 0x90, 0xd8, 0x54, 0x87, 0x01, 0xd3, 0x6b, 0x79, 0x00, 0xbd, 0x81, 0xc7, 0x8f, 0x9b, 0xd9, 0x3b, 0x53, 0x09, 0x15,
0x27, 0x65, 0x51, 0x08, 0x1c, 0xa0, 0x3b, 0x51, 0x83, 0x60, 0x93, 0x02, 0x64, 0x69, 0x77, 0x1a, 0x05, 0x57, 0x7b, 0x1f, 0x2f, 0x09, 0x47, 0xa1, 0x45, 0x00, 0xf7, 0xbf, 0x3d, 0x59, 0xd1, 0x19,
0xa4, 0x03, 0xb0, 0xc2, 0x34, 0x18, 0x80, 0x87, 0x7a, 0x88, 0xad, 0xd9, 0xff, 0xd0, 0xce, 0xc4, 0xad, 0xd5, 0xa1, 0x03, 0x2d, 0x35, 0xc7, 0x07, 0x09, 0x4f, 0x85, 0x95, 0x2b, 0x3f, 0x89, 0x09,
0x5b, 0xdc, 0xd5, 0xed, 0x5e, 0x29, 0xdd, 0xcf, 0x80, 0x1f, 0x36, 0x38, 0x8b, 0xae, 0xae, 0xfe, 0x49, 0x85, 0xb9, 0xe7, 0x4b, 0x53, 0x3f, 0x51, 0xff, 0x3b, 0xd5, 0xc9, 0xff, 0xfd, 0x53, 0x25,
0x87, 0x27, 0x22, 0x07, 0xe6, 0x5d, 0x46, 0x79, 0xf1, 0xfc, 0xb1, 0x3d, 0x72, 0x29, 0x2c, 0xba, 0xe3, 0xa9, 0x75, 0xd7, 0xa3, 0xfd, 0xf1, 0x5f, 0x51, 0xfb, 0xbb, 0x09, 0xf5, 0xc9, 0x91, 0xed,
0xa3, 0x5b, 0x3c, 0xcf, 0x57, 0x79, 0xed, 0x12, 0x67, 0x34, 0xe1, 0x48, 0x5f, 0xa7, 0x9a, 0x24, 0xc7, 0xcd, 0xc9, 0x25, 0x93, 0x07, 0x63, 0x51, 0x69, 0xb3, 0x4b, 0x47, 0x85, 0x19, 0xe7, 0x1f,
0x6a, 0x2e, 0x04, 0x44, 0x7b, 0x84, 0x46, 0x6a, 0xbd, 0x20, 0xca, 0xf7, 0x3e, 0xd1, 0x8b, 0xad, 0x7f, 0xb3, 0xe9, 0x5f, 0xb5, 0x8b, 0x57, 0x83, 0xf5, 0xcb, 0xd5, 0xb1, 0x6d, 0xa3, 0x37, 0xbb,
0xd7, 0x98, 0x9e, 0xa6, 0x5e, 0xc6, 0x04, 0x90, 0x0f, 0x57, 0xae, 0x2b, 0x38, 0x8d, 0xd2, 0x0c, 0xd7, 0x67, 0x45, 0x55, 0xe3, 0xdd, 0xcf, 0x97, 0xdd, 0xe9, 0xf1, 0xb5, 0xa7, 0x63, 0xa5, 0xfd,
0x25, 0xd1, 0x6d, 0x73, 0x4b, 0xc6, 0x19, 0xd3, 0xb8, 0xae, 0x11, 0x01, 0xba, 0x02, 0x82, 0x17, 0xdb, 0x2b, 0x93, 0x13, 0x37, 0x95, 0x0d, 0x69, 0x4d, 0xf7, 0x6d, 0x03, 0x6f, 0x8b, 0x95, 0x69,
0xcf, 0x4d, 0x14, 0x6a, 0xcd, 0x4a, 0xb9, 0xc1, 0x52, 0x3e, 0xb5, 0xd8, 0x6f, 0x98, 0xee, 0x16, 0xd5, 0x8b, 0xc3, 0xeb, 0x0f, 0x8b, 0x97, 0x1b, 0xb1, 0x19, 0x5f, 0x89, 0x3d, 0x95, 0xa9, 0xb9,
0x90, 0xc6, 0x76, 0x8a, 0xaf, 0x5a, 0x56, 0x2b, 0xb9, 0x5e, 0x9e, 0x51, 0x40, 0xf4, 0xaa, 0x6e, 0x4f, 0x4b, 0x0b, 0x6b, 0x05, 0xd5, 0x2d, 0x0b, 0xb5, 0xb7, 0x19, 0x75, 0xcf, 0x35, 0xc3, 0xef,
0x63, 0x32, 0xb6, 0x12, 0xfb, 0x3c, 0xa5, 0x1f, 0x07, 0xa3, 0x0d, 0x49, 0x5a, 0xfe, 0x88, 0xd1, 0x13, 0x71, 0xdb, 0x61, 0xf3, 0xcb, 0xd3, 0xd7, 0x3f, 0x79, 0x2d, 0x39, 0x21, 0x65, 0x07, 0x49,
0x83, 0xc7, 0x37, 0x82, 0xfd, 0x78, 0x97, 0xec, 0x98, 0xe6, 0x88, 0xe0, 0x27, 0xde, 0x9a, 0x2c, 0x31, 0x47, 0xe9, 0xdd, 0xf3, 0x03, 0xcf, 0x5f, 0x7f, 0x45, 0x71, 0x83, 0x69, 0x5b, 0xd9, 0x47,
0x6b, 0xfd, 0x9b, 0x98, 0x40, 0xd5, 0x5f, 0x20, 0x06, 0x3e, 0xcf, 0x74, 0x52, 0xf9, 0x35, 0xae, 0xef, 0x53, 0x27, 0x2f, 0x63, 0x55, 0x9f, 0xc1, 0xdf, 0x41, 0xf5, 0x41, 0x27, 0x8d, 0xdb, 0xa7,
0xd6, 0x8c, 0xc7, 0x53, 0x8e, 0x59, 0x71, 0x8c, 0x2d, 0x00, 0xe7, 0xa5, 0xc7, 0xf8, 0xeb, 0xc7, 0xd9, 0x5b, 0xc7, 0xe5, 0xdd, 0xd7, 0x09, 0x5f, 0x09, 0xd7, 0x0d, 0xa1, 0x13, 0xb3, 0xef, 0x67,
0xbf, 0x68, 0xdc, 0xf2, 0xf4, 0x4c, 0x80, 0x3e, 0x27, 0xc5, 0x13, 0x52, 0xb0, 0xc0, 0x90, 0x2d 0xbb, 0x65, 0x3d, 0xcd, 0x3b, 0xdf, 0x0f, 0xd3, 0xe7, 0xab, 0x4d, 0x15, 0x29, 0xc5, 0x39, 0xc9
}; };
void amazonia_decrypt(running_machine &machine) void amazonia_decrypt(running_machine &machine)
{ {
int i; int i;
UINT16 *src = (UINT16 *) machine.root_device().memregion("user1")->base(); UINT16 *src = (UINT16 *)machine.root_device().memregion("user1")->base();
int rom_size = 0x80000; int rom_size = 0x80000;
for (i = 0; i < rom_size / 2; i++) {
int x = amazonia_tab[(i / 2) & 0xff] << 8;
// not 100% verified if ((i & 0x040480) != 0x000080) x ^= 0x0001;
for(i=0; i<rom_size/2; i++) if ((i & 0x004008) == 0x004008) x ^= 0x0002;
{ if ((i & 0x080030) == 0x080010) x ^= 0x0004; // pin high??
UINT16 x = src[i]; if ((i & 0x000242) != 0x000042) x ^= 0x0008;
if ((i & 0x008100) == 0x008000) x ^= 0x0010;
if ((i & 0x022004) != 0x000004) x ^= 0x0020; // verified
if ((i & 0x011800) != 0x010000) x ^= 0x0040;
if ((i & 0x004820) == 0x004820) x ^= 0x0080; // verified
IGS27_CRYPT1 src[i] ^= x;
// IGS27_CRYPT2
// IGS27_CRYPT3
IGS27_CRYPT4_ALT
IGS27_CRYPT5
IGS27_CRYPT6_ALT
IGS27_CRYPT7
IGS27_CRYPT8
x ^= amazonia_tab[(i>> 1) & 0xff] << 8;
src[i] = x;
} }
} }
// not 100% verified
/*FIXME: This is incorrect. Was simply copied from fruitpar as an initial boilerplate code: */
static const UINT8 amazoni2_tab[0x100] = { static const UINT8 amazoni2_tab[0x100] = {
0xe9, 0x0b, 0x95, 0x7e, 0x0d, 0x7d, 0x5c, 0x1e, 0x81, 0x0e, 0xa6, 0xd4, 0x8e, 0x90, 0xd8, 0x54, 0x49, 0x47, 0x53, 0x30, 0x30, 0x37, 0x37, 0x52, 0x44, 0x34, 0x30, 0x32, 0x31, 0x30, 0x31, 0x36,
0x27, 0x65, 0x51, 0x08, 0x1c, 0xa0, 0x3b, 0x51, 0x83, 0x60, 0x93, 0x02, 0x64, 0x69, 0x77, 0x1a, 0xed, 0x3f, 0x77, 0xd0, 0xc4, 0x72, 0x77, 0xe1, 0x35, 0x15, 0x10, 0xc6, 0x1b, 0xee, 0x25, 0x4a,
0xa4, 0x03, 0xb0, 0xc2, 0x34, 0x18, 0x80, 0x87, 0x7a, 0x88, 0xad, 0xd9, 0xff, 0xd0, 0xce, 0xc4, 0x0d, 0x06, 0x37, 0x19, 0xfa, 0xf9, 0x29, 0xb0, 0x03, 0x7e, 0x32, 0x83, 0x99, 0x32, 0x23, 0x6e,
0x5b, 0xdc, 0xd5, 0xed, 0x5e, 0x29, 0xdd, 0xcf, 0x80, 0x1f, 0x36, 0x38, 0x8b, 0xae, 0xae, 0xfe, 0xd8, 0xa9, 0xdb, 0x5f, 0x23, 0xb7, 0x08, 0x41, 0x00, 0xfb, 0x20, 0x2b, 0x36, 0xae, 0x9f, 0xc9,
0x87, 0x27, 0x22, 0x07, 0xe6, 0x5d, 0x46, 0x79, 0xf1, 0xfc, 0xb1, 0x3d, 0x72, 0x29, 0x2c, 0xba, 0x24, 0xaa, 0x82, 0x0b, 0x64, 0xbe, 0x03, 0x0d, 0xa2, 0x31, 0x97, 0x47, 0xb6, 0x94, 0x26, 0xf6,
0xa3, 0x5b, 0x3c, 0xcf, 0x57, 0x79, 0xed, 0x12, 0x67, 0x34, 0xe1, 0x48, 0x5f, 0xa7, 0x9a, 0x24, 0x09, 0xcd, 0x8a, 0xca, 0x26, 0x61, 0x4a, 0xd1, 0x9f, 0x01, 0x98, 0xa3, 0x23, 0x58, 0x88, 0xcf,
0x6a, 0x2e, 0x04, 0x44, 0x7b, 0x84, 0x46, 0x6a, 0xbd, 0x20, 0xca, 0xf7, 0x3e, 0xd1, 0x8b, 0xad, 0xdd, 0x14, 0x93, 0x86, 0x0f, 0x33, 0x4c, 0x86, 0xef, 0x8f, 0x61, 0x4a, 0xc2, 0xad, 0xd5, 0x70,
0xd7, 0x98, 0x9e, 0xa6, 0x5e, 0xc6, 0x04, 0x90, 0x0f, 0x57, 0xae, 0x2b, 0x38, 0x8d, 0xd2, 0x0c, 0x37, 0xc2, 0x7b, 0x6a, 0x06, 0x07, 0xb7, 0x69, 0xc9, 0x3f, 0x71, 0x87, 0x1a, 0x85, 0x5a, 0x33,
0x25, 0xd1, 0x6d, 0x73, 0x4b, 0xc6, 0x19, 0xd3, 0xb8, 0xae, 0x11, 0x01, 0xba, 0x02, 0x82, 0x17, 0xee, 0x5b, 0x63, 0xe2, 0x32, 0xf0, 0x7a, 0xf4, 0xa4, 0xb2, 0x87, 0xe4, 0xf3, 0x14, 0xa7, 0xb4,
0xcf, 0x4d, 0x14, 0x6a, 0xcd, 0x4a, 0xb9, 0xc1, 0x52, 0x3e, 0xb5, 0xd8, 0x6f, 0x98, 0xee, 0x16, 0x1a, 0xa1, 0xa8, 0x98, 0xf9, 0x42, 0xc5, 0xe1, 0x36, 0xcc, 0xa3, 0x2d, 0x54, 0xcd, 0x8b, 0xcd,
0x90, 0xc6, 0x76, 0x8a, 0xaf, 0x5a, 0x56, 0x2b, 0xb9, 0x5e, 0x9e, 0x51, 0x40, 0xf4, 0xaa, 0x6e, 0x11, 0x98, 0xe9, 0x77, 0x05, 0x8e, 0x06, 0x2d, 0x78, 0xb0, 0x02, 0x6d, 0x83, 0x62, 0x15, 0x9a,
0x63, 0x32, 0xb6, 0x12, 0xfb, 0x3c, 0xa5, 0x1f, 0x07, 0xa3, 0x0d, 0x49, 0x5a, 0xfe, 0x88, 0xd1, 0x6b, 0x82, 0x07, 0xaa, 0x3a, 0xa9, 0xed, 0x12, 0x9f, 0xc0, 0x25, 0xee, 0x08, 0xc7, 0x94, 0x75,
0x83, 0xc7, 0x37, 0x82, 0xfd, 0x78, 0x97, 0xec, 0x98, 0xe6, 0x88, 0xe0, 0x27, 0xde, 0x9a, 0x2c, 0xfd, 0xe2, 0x1f, 0x9d, 0xc0, 0xa5, 0x68, 0x0a, 0x23, 0xa1, 0xca, 0x3d, 0xa9, 0x2f, 0x97, 0xfa,
0x6b, 0xfd, 0x9b, 0x98, 0x40, 0xd5, 0x5f, 0x20, 0x06, 0x3e, 0xcf, 0x74, 0x52, 0xf9, 0x35, 0xae, 0xe0, 0x7c, 0x91, 0xfa, 0xfe, 0xd5, 0xa6, 0xd2, 0xbb, 0x34, 0xf1, 0x23, 0x6e, 0x0c, 0xed, 0x03,
0xd6, 0x8c, 0xc7, 0x53, 0x8e, 0x59, 0x71, 0x8c, 0x2d, 0x00, 0xe7, 0xa5, 0xc7, 0xf8, 0xeb, 0xc7, 0x6b, 0x52, 0xfb, 0xac, 0x9c, 0xcc, 0x17, 0x64, 0x5d, 0x9e, 0xd7, 0xac, 0x9e, 0x12, 0xa5, 0xac,
0xbf, 0x68, 0xdc, 0xf2, 0xf4, 0x4c, 0x80, 0x3e, 0x27, 0xc5, 0x13, 0x52, 0xb0, 0xc0, 0x90, 0x2d 0x34, 0xa7, 0x3e, 0xde, 0x7f, 0x5d, 0x6a, 0xfa, 0x42, 0x40, 0xfd, 0x23, 0xbf, 0x33, 0x0e, 0x50
}; };
void amazoni2_decrypt(running_machine &machine) void amazoni2_decrypt(running_machine &machine)
{ {
int i; int i;
@ -1647,23 +1642,22 @@ void amazoni2_decrypt(running_machine &machine)
int rom_size = 0x80000; int rom_size = 0x80000;
// not 100% verified
for(i=0; i<rom_size/2; i++) for(i=0; i<rom_size/2; i++)
{ {
UINT16 x = src[i]; UINT16 x = src[i];
// should be correct
IGS27_CRYPT1 IGS27_CRYPT1
// IGS27_CRYPT2 IGS27_CRYPT2_ALT
// IGS27_CRYPT3 // IGS27_CRYPT3
IGS27_CRYPT4_ALT IGS27_CRYPT4
IGS27_CRYPT5 IGS27_CRYPT5
IGS27_CRYPT6_ALT IGS27_CRYPT6_ALT // second half is junk, not sure...
IGS27_CRYPT7 IGS27_CRYPT7
IGS27_CRYPT8 IGS27_CRYPT8
x ^= amazoni2_tab[(i>> 1) & 0xff] << 8; x ^= amazoni2_tab[(i >> 1) & 0xff] << 8;
src[i] = x; src[i] = x;
} }
} }