various PGM fixes and improvements [XingXing]

the descriptions given with the submission were misleading, in general it looks more like added sets, and an attempt to hook up the actual ARM on the other games where we have dumps.
This commit is contained in:
davidhay 2009-03-28 11:23:20 +00:00
parent f10746f4fa
commit 779c4d6d2d
3 changed files with 806 additions and 294 deletions

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,13 @@ void pgm_dw3_decrypt(running_machine *machine);
void pgm_killbld_decrypt(running_machine *machine);
void pgm_pstar_decrypt(running_machine *machine);
void pgm_puzzli2_decrypt(running_machine *machine);
void pgm_theglad_decrypt(running_machine *machine);
void pgm_ddp2_decrypt(running_machine *machine);
void pgm_dfront_decrypt(running_machine *machine);
void pgm_svg_decrypt(running_machine *machine);
void pgm_killbldp_decrypt(running_machine *machine);
void pgm_kovh_decrypt(running_machine *machine);
void pgm_oldss_decrypt(running_machine *machine);
/*----------- defined in machine/pgmprot.c -----------*/

View File

@ -321,7 +321,6 @@ void pgm_killbld_decrypt(running_machine *machine)
}
#ifdef UNUSED_FUNCTION
static const UINT8 dfront_tab[256] = {
0x51, 0xc4, 0xe3, 0x10, 0x1c, 0xad, 0x8a, 0x39, 0x8c, 0xe0, 0xa5, 0x04, 0x0f, 0xe4, 0x35, 0xc3,
0x2d, 0x6b, 0x32, 0xe2, 0x60, 0x54, 0x63, 0x06, 0xa3, 0xf1, 0x0b, 0x5f, 0x6c, 0x5c, 0xb3, 0xec,
@ -434,7 +433,6 @@ void pgm_ddp2_decrypt(running_machine *machine)
src[i] = x;
}
}
#endif
static const UINT8 mm_tab[256] = {
@ -670,3 +668,280 @@ void pgm_puzzli2_decrypt(running_machine *machine)
}
static const UINT8 theglad_tab[256] = {
0x49, 0x47, 0x53, 0x30, 0x30, 0x30, 0x35, 0x52, 0x44, 0x31, 0x30, 0x32, 0x31, 0x32, 0x30, 0x33,
0xC4, 0xA3, 0x46, 0x78, 0x30, 0xB3, 0x8B, 0xD5, 0x2F, 0xC4, 0x44, 0xBF, 0xDB, 0x76, 0xDB, 0xEA,
0xB4, 0xEB, 0x95, 0x4D, 0x15, 0x21, 0x99, 0xA1, 0xD7, 0x8C, 0x40, 0x1D, 0x43, 0xF3, 0x9F, 0x71,
0x3D, 0x8C, 0x52, 0x01, 0xAF, 0x5B, 0x8B, 0x63, 0x34, 0xC8, 0x5C, 0x1B, 0x06, 0x7F, 0x41, 0x96,
0x2A, 0x8D, 0xF1, 0x64, 0xDA, 0xB8, 0x67, 0xBA, 0x33, 0x1F, 0x2B, 0x28, 0x20, 0x13, 0xE6, 0x96,
0x86, 0x34, 0x25, 0x85, 0xB0, 0xD0, 0x6D, 0x85, 0xFE, 0x78, 0x81, 0xF1, 0xCA, 0xE4, 0xEF, 0xF2,
0x9B, 0x09, 0xE1, 0xB4, 0x8D, 0x79, 0x22, 0xE2, 0x00, 0xFB, 0x6F, 0x68, 0x80, 0x6A, 0x00, 0x69,
0xF5, 0xD3, 0x57, 0x7E, 0x0C, 0xCA, 0x48, 0x31, 0xE5, 0x0D, 0x4A, 0xB9, 0xFD, 0x5C, 0xFD, 0xF8,
0x5F, 0x98, 0xFB, 0xB3, 0x07, 0x1A, 0xE3, 0x10, 0x96, 0x56, 0xA3, 0x56, 0x3D, 0xB1, 0x07, 0xE0,
0xE3, 0x9F, 0x7F, 0x62, 0x99, 0x01, 0x35, 0x60, 0x40, 0xBE, 0x4F, 0xEB, 0x79, 0xA0, 0x82, 0x9F,
0xCD, 0x71, 0xD8, 0xDA, 0x1E, 0x56, 0xC2, 0x3E, 0x4E, 0x6B, 0x60, 0x69, 0x2D, 0x9F, 0x10, 0xF4,
0xA9, 0xD3, 0x36, 0xAA, 0x31, 0x2E, 0x4C, 0x0A, 0x69, 0xC3, 0x2A, 0xFF, 0x15, 0x67, 0x96, 0xDE,
0x3F, 0xCC, 0x0F, 0xA1, 0xAC, 0xE2, 0xD6, 0x62, 0x7E, 0x6F, 0x3E, 0x1B, 0x2A, 0xED, 0x36, 0x9C,
0x9D, 0xA4, 0x14, 0xCD, 0xAA, 0x08, 0xA4, 0x26, 0xB7, 0x55, 0x70, 0x6C, 0xA9, 0x69, 0x52, 0xAE,
0x0C, 0xE1, 0x38, 0x7F, 0x87, 0x78, 0x38, 0x75, 0x80, 0x9C, 0xD4, 0xE2, 0x0B, 0x52, 0x8F, 0xD2,
0x19, 0x4C, 0xB0, 0x45, 0xDE, 0x48, 0x55, 0xAE, 0x82, 0xAB, 0xBC, 0xAB, 0x0C, 0x5E, 0xCE, 0x07,
};
void pgm_theglad_decrypt(running_machine *machine)
{
int i;
UINT16 *src = (UINT16 *)(memory_region(machine, "user1"));
int rom_size = 0x800000;
for(i=0; i<rom_size/2; i++) {
UINT16 x = src[i];
if((i & 0x40080) != 0x00080)
x ^= 0x0001;
if((i & 0x104008) == 0x104008)
x ^= 0x0002;
if((i & 0x80030) == 0x80010)
x ^= 0x0004;
if((i & 0x000042) != 0x000042)
x ^= 0x0008;
if((i & 0x08100) == 0x08000)
x ^= 0x0010;
if((i & 0x022004) != 0x000004)
x ^= 0x0020;
if((i & 0x11800) != 0x10000)
x ^= 0x0040;
if((i & 0x00820) == 0x00820)
x ^= 0x0080;
x ^= theglad_tab[(i >> 1) & 0xff] << 8;
src[i] = x;
}
}
void pgm_svg_decrypt(running_machine *machine)
{
int i;
UINT16 *src = (UINT16 *)(memory_region(machine, "user1"));
int rom_size = 0x800000;
for(i=0; i<rom_size/2; i++) {
UINT16 x = src[i];
if((i & 0x040080) != 0x000080)
x ^= 0x0001;
if((i & 0x004008) == 0x004008)
x ^= 0x0002;
if((i & 0x080030) == 0x080010)
x ^= 0x0004;
if((i & 0x000042) != 0x000042)
x ^= 0x0008;
if((i & 0x048100) == 0x048000)
x ^= 0x0010;
if((i & 0x002004) != 0x000004)
x ^= 0x0020;
if((i & 0x011800) != 0x010000)
x ^= 0x0040;
if((i & 0x000820) == 0x000820)
x ^= 0x0080;
src[i] = x;
}
}
static const UINT8 killbldp_tab[256] = {
0x49,0x47,0x53,0x30,0x30,0x32,0x34,0x52,0x44,0x31,0x30,0x35,0x30,0x39,0x30,0x38,
0x12,0xA0,0xD1,0x9E,0xB1,0x8A,0xFB,0x1F,0x50,0x51,0x4B,0x81,0x28,0xDA,0x5F,0x41,
0x78,0x6C,0x7A,0xF0,0xCD,0x6B,0x69,0x14,0x94,0x55,0xB6,0x42,0xDF,0xFE,0x10,0x79,
0x74,0x08,0xFA,0xC0,0x1C,0xA5,0xB4,0x03,0x2A,0x91,0x67,0x2B,0x49,0x4A,0x94,0x7D,
0x8B,0x92,0xBE,0x35,0xAF,0x28,0x56,0x63,0xB3,0xC2,0xE8,0x06,0x9B,0x4E,0x85,0x66,
0x7F,0x6B,0x70,0xB7,0xDB,0x22,0x0C,0xEB,0x13,0xE9,0x06,0xD7,0x45,0xDA,0xBE,0x8B,
0x54,0x30,0xFC,0xEB,0x32,0x02,0xD0,0x92,0x6D,0x44,0xCA,0xE8,0xFD,0xFB,0x5B,0x81,
0x4C,0xC0,0x8B,0xB9,0x87,0x78,0xDD,0x8E,0x24,0x52,0x80,0xBE,0xB4,0x01,0xB7,0x21,
0xEB,0x3C,0x8A,0x49,0xED,0x73,0xAE,0x58,0xDB,0xD2,0xB2,0x21,0x9E,0x7C,0x6C,0x82,
0xF3,0x01,0xA3,0x00,0xB7,0x21,0xFE,0xA5,0x75,0xC4,0x2D,0x17,0x2D,0x39,0x56,0xF9,
0x67,0xAE,0xC2,0x87,0x79,0xF1,0xC8,0x6D,0x15,0x66,0xFA,0xE8,0x16,0x48,0x8F,0x1F,
0x8B,0x24,0x10,0xC4,0x04,0x93,0x47,0xE6,0x1D,0x37,0x65,0x1A,0x49,0xF8,0x72,0xCB,
0xE1,0x80,0xFA,0xDD,0x6D,0xF5,0xF6,0x89,0x32,0xF6,0xF8,0x75,0xFC,0xD8,0x9B,0x12,
0x2D,0x22,0x2A,0x3B,0x06,0x46,0x90,0x0C,0x35,0xA2,0x80,0xFF,0xA0,0xB7,0xE5,0x4D,
0x71,0xA9,0x8C,0x84,0x62,0xF7,0x10,0x65,0x4A,0x7B,0x06,0x00,0xE8,0xA4,0x6A,0x13,
0xF0,0xF3,0x4A,0x9F,0x54,0xB4,0xB1,0xCC,0xD4,0xFF,0xD6,0xFF,0xC9,0xEE,0x86,0x39,
};
void pgm_killbldp_decrypt(running_machine *machine)
{
int i;
UINT16 *src = (UINT16 *)(memory_region(machine, "user1"));
int rom_size = 0x800000;
for(i=0; i<rom_size/2; i++) {
UINT16 x = src[i];
if((i & 0x040480) != 0x000080)
x ^= 0x0001;
if((i & 0x104008) == 0x104008)
x ^= 0x0002;
if((i & 0x080030) == 0x080010)
x ^= 0x0004;
if((i & 0x000242) != 0x000042)
x ^= 0x0008;
if((i & 0x008100) == 0x008000)
x ^= 0x0010;
if((i & 0x002004) != 0x000004)
x ^= 0x0020;
if((i & 0x011800) != 0x010000)
x ^= 0x0040;
if((i & 0x000820) == 0x000820)
x ^= 0x0080;
x ^= killbldp_tab[(i >> 1) & 0xff] << 8;
src[i] = x;
}
}
static const UINT8 kovh_tab[256] = {
0x49,0x47,0x53,0x30,0x30,0x30,0x39,0x72,0x64,0x31,0x30,0x34,0x30,0x32,0x31,0x39,
0xF9,0x8C,0xBD,0x87,0x16,0x07,0x39,0xEB,0x29,0x9E,0x17,0xEF,0x4F,0x64,0x7C,0xE0,
0x5F,0x73,0x5B,0xA1,0x5E,0x95,0x0D,0xF1,0x40,0x36,0x2F,0x00,0xE2,0x8A,0xBC,0x32,
0x44,0xFA,0x6C,0x33,0x0B,0xD5,0x4C,0x3B,0x36,0x34,0x9E,0xA3,0x20,0x2E,0xF3,0xA9,
0xB7,0x3E,0x87,0x80,0xFB,0xF1,0xDD,0x9C,0xBA,0xD3,0x9B,0x3B,0x8A,0x9C,0xA8,0x37,
0x07,0x97,0x84,0x0C,0x4E,0x54,0xE7,0x25,0xBA,0x8E,0x9D,0x6B,0xDE,0x5F,0xA1,0x10,
0xC3,0xA2,0x79,0x99,0x63,0xA9,0xD1,0x2A,0x65,0x20,0x5B,0x16,0x1B,0x41,0xE6,0xA7,
0xBA,0x3A,0xBD,0x2A,0xD8,0xDB,0x43,0x3F,0x2B,0x85,0xCC,0x5F,0x80,0x4F,0xBE,0xAE,
0xFA,0x79,0xE8,0x03,0x8D,0x16,0x22,0x35,0xBB,0xF6,0x26,0xA9,0x8D,0xD2,0xAF,0x19,
0xD4,0xBB,0xD0,0xA6,0xA1,0xC4,0x96,0x21,0x02,0xEF,0xE1,0x96,0x00,0x56,0x80,0x1B,
0xD6,0x9A,0x8C,0xD7,0x73,0x91,0x07,0x55,0x32,0x2B,0xB5,0x0B,0xD8,0xA5,0x39,0x26,
0xCE,0xF2,0x74,0x98,0xA1,0x66,0x1A,0x64,0xB8,0xA5,0x96,0x29,0x54,0xCB,0x21,0xED,
0xCD,0xDD,0x1E,0x2C,0x0B,0x70,0xB8,0x22,0x43,0x98,0xBE,0x54,0xF3,0x14,0xBE,0x65,
0x21,0xB7,0x61,0x17,0xCF,0x19,0x07,0xA0,0xC2,0x7F,0xA3,0x30,0x75,0x08,0xD8,0xBF,
0x58,0x1A,0x55,0x1B,0x4E,0x0D,0x6D,0x32,0x65,0x15,0xFB,0x9E,0xD8,0x75,0x76,0x6F,
0x42,0xE2,0x4F,0x3C,0x25,0x35,0x93,0x6C,0x9B,0x56,0xBE,0xC1,0x5B,0x65,0xDE,0x27,
};
void pgm_kovh_decrypt(running_machine *machine)
{
int i;
unsigned short *src = (unsigned short *)(memory_region(machine, "maincpu")+0x100000);
int rom_size = 0x400000;
for(i=0; i<rom_size/2; i++) {
unsigned short x = src[i];
if((i & 0x040080) != 0x000080)
x ^= 0x0001;
if((i & 0x004008) == 0x004008 && (i & 0x180000) != 0x000000)
x ^= 0x0002;
if((i & 0x000030) == 0x000010)
x ^= 0x0004;
if((i & 0x000042) != 0x000042)
x ^= 0x0008;
if((i & 0x008100) == 0x008000)
x ^= 0x0010;
if((i & 0x022004) != 0x000004)
x ^= 0x0020;
if((i & 0x011800) != 0x010000)
x ^= 0x0040;
if((i & 0x000820) == 0x000820)
x ^= 0x0080;
x ^= kovh_tab[i & 0xff] << 8;
src[i] = x;
}
}
static const UINT8 oldss_tab[256] = {
0x49,0x47,0x53,0x30,0x30,0x31,0x33,0x52,0x44,0x31,0x30,0x34,0x30,0x37,0x32,0x37,
0xF5,0x79,0x6D,0xAB,0x04,0x22,0x51,0x96,0xF2,0x72,0xE8,0x3A,0x96,0xD2,0x9A,0xCC,
0x3F,0x47,0x3C,0x09,0xF2,0xD9,0x72,0x41,0xE6,0x44,0x43,0xA7,0x3E,0xE2,0xFD,0xD8,
0x06,0xD8,0x4C,0xA9,0x70,0x80,0x95,0x35,0x50,0x17,0x99,0x27,0xD5,0xA8,0x47,0x45,
0x89,0x38,0xE1,0x3D,0x8C,0x33,0x53,0xB4,0x0D,0x17,0xD1,0x8D,0x09,0x5F,0xAF,0x76,
0x48,0xB2,0x85,0xB9,0x95,0x4C,0x83,0x42,0x3D,0xAD,0x11,0xEC,0xCA,0x82,0xAC,0x10,
0x01,0xD0,0xFD,0x50,0x19,0x67,0x3B,0xA0,0x3E,0x86,0xC2,0x97,0x46,0xCB,0xF4,0xF5,
0xB3,0x5F,0x50,0x74,0xE9,0x5F,0xD2,0xD4,0xB0,0x8D,0x8A,0x21,0xED,0x37,0x80,0x47,
0x9D,0x68,0xC7,0xD9,0x12,0x4E,0xDF,0x1E,0x72,0xEB,0x50,0x5E,0x6D,0x00,0x85,0x6B,
0x3E,0x37,0xE6,0x72,0xE5,0x8F,0x3A,0x03,0xA3,0x0D,0x3B,0x5F,0xB6,0xA1,0x7B,0x02,
0x56,0x56,0x77,0x71,0xEF,0xBE,0xF9,0x46,0xA1,0x9D,0xB3,0x79,0xF6,0xD5,0x19,0xF0,
0xE2,0x91,0x7E,0x4A,0x01,0xB6,0x73,0xE8,0x0C,0x86,0x5D,0x3E,0x9C,0x97,0x55,0x58,
0x23,0xF4,0x45,0xB0,0x28,0x91,0x40,0x2F,0xC2,0xF4,0x21,0x81,0x58,0x22,0x68,0x9D,
0x97,0xC7,0x51,0x95,0xB4,0xAA,0x36,0x9B,0xE4,0x51,0x27,0x55,0x18,0xF0,0xC7,0x62,
0xFE,0x98,0x6A,0x2D,0x35,0x9D,0x6C,0xF1,0xCF,0x48,0xD4,0x0D,0x0C,0xBE,0x2A,0x8A,
0x55,0x31,0x96,0xEA,0x78,0x45,0x3A,0x33,0x23,0xC5,0xD1,0x3C,0xA3,0x86,0x88,0x38,
};
void pgm_oldss_decrypt(running_machine *machine)
{
int i;
unsigned short *src = (unsigned short *)(memory_region(machine, "maincpu")+0x100000);
int rom_size = 0x400000;
for(i=0; i<rom_size/2; i++) {
unsigned short x = src[i];
if((i & 0x040480) != 0x000080 )
x ^= 0x0001;
if((i & 0x004008) == 0x004008 )
x ^= 0x0002;
if((i & 0x000030) == 0x000010 )
x ^= 0x0004;
if((i & 0x000242) != 0x000042 )
x ^= 0x0008;
if((i & 0x048100) == 0x048000 )
x ^= 0x0010;
if((i & 0x002004) != 0x000004 )
x ^= 0x0020;
if((i & 0x011800) != 0x010000 )
x ^= 0x0040;
if((i & 0x000820) == 0x000820 )
x ^= 0x0080;
x ^= oldss_tab[i & 0xff] << 8;
src[i] = x;
}
}