Make SVGPCB work. rtw, haze, iq_132
This commit is contained in:
parent
832bf71c96
commit
a933eabb13
|
@ -3040,13 +3040,11 @@ static struct BurnRomInfo thegladRomDesc[] = {
|
||||||
STDROMPICKEXT(theglad, theglad, pgm)
|
STDROMPICKEXT(theglad, theglad, pgm)
|
||||||
STD_ROM_FN(theglad)
|
STD_ROM_FN(theglad)
|
||||||
|
|
||||||
static void thegladPatch()
|
static void pgm_create_theglad_E0_data()
|
||||||
{
|
{
|
||||||
pgm_decrypt_theglad();
|
|
||||||
|
|
||||||
// Replace undumpable area of the arm7 internal rom with a custom-built
|
// Replace undumpable area of the arm7 internal rom with a custom-built
|
||||||
// version created by David Haywood in order to make game playable
|
// version created by David Haywood in order to make game playable
|
||||||
static UINT16 thegladEOHackData[0x188/2] = {
|
static const UINT16 thegladEOHackData[0x188/2] = {
|
||||||
0x000a, 0xea00, 0xfffe, 0xeaff, 0xfffe, 0xeaff, 0xfffe, 0xeaff,
|
0x000a, 0xea00, 0xfffe, 0xeaff, 0xfffe, 0xeaff, 0xfffe, 0xeaff,
|
||||||
0xfffe, 0xeaff, 0xfffe, 0xeaff, 0xfffe, 0xeaff, 0xf000, 0xe59f,
|
0xfffe, 0xeaff, 0xfffe, 0xeaff, 0xfffe, 0xeaff, 0xf000, 0xe59f,
|
||||||
0x0010, 0x0800, 0x0010, 0x0800, 0xfffe, 0xeaff, 0xfffe, 0xeaff,
|
0x0010, 0x0800, 0x0010, 0x0800, 0xfffe, 0xeaff, 0xfffe, 0xeaff,
|
||||||
|
@ -3074,14 +3072,13 @@ static void thegladPatch()
|
||||||
0xfffe, 0xeaff, 0x105c, 0xe59f
|
0xfffe, 0xeaff, 0x105c, 0xe59f
|
||||||
};
|
};
|
||||||
|
|
||||||
// byte swap for Big Endian arch
|
memcpy (PGMARMROM, thegladEOHackData, 0x188);
|
||||||
for (int i = 0; i < 0x188/2; i++)
|
|
||||||
{
|
|
||||||
thegladEOHackData[i] = BURN_ENDIAN_SWAP_INT16(thegladEOHackData[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
memmove (PGMARMROM + 0x188, PGMARMROM, 0x4000-0x188);
|
static void thegladPatch()
|
||||||
memcpy (PGMARMROM, thegladEOHackData, 0x188);
|
{
|
||||||
|
pgm_decrypt_theglad();
|
||||||
|
pgm_create_theglad_E0_data();
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT32 thegladInit()
|
static INT32 thegladInit()
|
||||||
|
@ -3171,7 +3168,8 @@ STD_ROM_FN(theglad100)
|
||||||
|
|
||||||
static void theglad100Patch()
|
static void theglad100Patch()
|
||||||
{
|
{
|
||||||
thegladPatch();
|
pgm_decrypt_theglad();
|
||||||
|
pgm_create_theglad_E0_data();
|
||||||
|
|
||||||
// Hack the jump table in the external rom to work correctly with the internal rom we have...
|
// Hack the jump table in the external rom to work correctly with the internal rom we have...
|
||||||
static const UINT16 subroutine_addresses[] = {
|
static const UINT16 subroutine_addresses[] = {
|
||||||
|
@ -4199,29 +4197,43 @@ static struct BurnRomInfo svgpcbRomDesc[] = {
|
||||||
{ "w05601b064.bin", 0x800000, 0xbfe61a71, 5 | BRF_SND }, // 8 Samples
|
{ "w05601b064.bin", 0x800000, 0xbfe61a71, 5 | BRF_SND }, // 8 Samples
|
||||||
{ "w05602b032.bin", 0x400000, 0x0685166d, 5 | BRF_SND }, // 9
|
{ "w05602b032.bin", 0x400000, 0x0685166d, 5 | BRF_SND }, // 9
|
||||||
|
|
||||||
{ "svg_igs027a.bin", 0x004000, 0x00000000, 7 | BRF_PRG | BRF_ESS | BRF_NODUMP }, // 10 Internal ARM7 Rom
|
// { "svg_igs027a.bin", 0x004000, 0x00000000, 7 | BRF_PRG | BRF_ESS | BRF_NODUMP }, // 10 Internal ARM7 Rom
|
||||||
|
{ "svg_igs027a_execute_only_area", 0x000188, 0x00000000, 0 | BRF_OPT | BRF_NODUMP }, // 10 Internal ARM7 Rom
|
||||||
|
{ "svgcpb_igs027a_v100_japan.bin", 0x003e78, 0x7a59da5d, 7 | BRF_PRG | BRF_ESS }, // 11 Internal ARM7 Rom
|
||||||
|
|
||||||
{ "svg_v100jp.u64", 0x400000, 0x399d4a8b, 8 | BRF_PRG | BRF_ESS }, // 11 External ARM7 Rom
|
{ "svg_v100jp.u64", 0x400000, 0x399d4a8b, 8 | BRF_PRG | BRF_ESS }, // 12 External ARM7 Rom
|
||||||
{ "svg_v100jp.u65", 0x400000, 0x6e1c33b1, 8 | BRF_PRG | BRF_ESS }, // 12
|
{ "svg_v100jp.u65", 0x400000, 0x6e1c33b1, 8 | BRF_PRG | BRF_ESS }, // 13
|
||||||
};
|
};
|
||||||
|
|
||||||
STDROMPICKEXT(svgpcb, svgpcb, svgpcbBIOS) // custom bios
|
STDROMPICKEXT(svgpcb, svgpcb, svgpcbBIOS) // custom bios
|
||||||
STD_ROM_FN(svgpcb)
|
STD_ROM_FN(svgpcb)
|
||||||
|
|
||||||
|
static void svgpcbPatch()
|
||||||
|
{
|
||||||
|
pgm_decrypt_svgpcb();
|
||||||
|
pgm_create_theglad_E0_data();
|
||||||
|
}
|
||||||
|
|
||||||
static INT32 svgpcbInit()
|
static INT32 svgpcbInit()
|
||||||
{
|
{
|
||||||
pPgmInitCallback = pgm_decrypt_svgpcb;
|
pPgmInitCallback = svgpcbPatch;
|
||||||
// pPgmProtCallback = install_protection_asic27a_svg;
|
pPgmProtCallback = install_protection_asic27a_svg;
|
||||||
|
|
||||||
return pgmInit();
|
nPgmAsicRegionHackAddress = 0x3a8e;
|
||||||
|
|
||||||
|
INT32 nRet = pgmInit();
|
||||||
|
|
||||||
|
Arm7SetIdleLoopAddress(0x00009e0);
|
||||||
|
|
||||||
|
return nRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct BurnDriverD BurnDrvSvgpcb = {
|
struct BurnDriverD BurnDrvSvgpcb = {
|
||||||
"svgpcb", "svg", NULL, NULL, "2005",
|
"svgpcb", "svg", NULL, NULL, "2005",
|
||||||
"S.V.G. - Spectral vs Generation (V100, Japan, Single PCB Version)\0", "Incomplete Dump", "IGS", "PolyGameMaster",
|
"S.V.G. - Spectral vs Generation (V100, Japan, Single PCB Version)\0", "Incomplete Dump", "IGS", "PolyGameMaster",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
BDF_CLONE, 4, HARDWARE_IGS_PGM/* | HARDWARE_IGS_USE_ARM_CPU*/, GBF_SCRFIGHT, 0,
|
BDF_CLONE, 4, HARDWARE_IGS_PGM | HARDWARE_IGS_USE_ARM_CPU, GBF_SCRFIGHT, 0,
|
||||||
NULL, svgpcbRomInfo, svgpcbRomName, NULL, NULL, pgmInputInfo, jammaDIPInfo,
|
NULL, svgpcbRomInfo, svgpcbRomName, NULL, NULL, pgmInputInfo, thegladpcbDIPInfo,
|
||||||
svgpcbInit, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
|
svgpcbInit, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
|
||||||
448, 224, 4, 3
|
448, 224, 4, 3
|
||||||
};
|
};
|
||||||
|
|
|
@ -481,7 +481,7 @@ void pgm_decrypt_svg()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const UINT8 svgpcb_tab[0x100] = { // not checked
|
static const UINT8 svgpcb_tab[0x100] = {
|
||||||
0x49, 0x47, 0x53, 0x30, 0x30, 0x31, 0x37, 0x52, 0x44, 0x31, 0x30, 0x35, 0x30, 0x35, 0x30, 0x34,
|
0x49, 0x47, 0x53, 0x30, 0x30, 0x31, 0x37, 0x52, 0x44, 0x31, 0x30, 0x35, 0x30, 0x35, 0x30, 0x34,
|
||||||
0x75, 0x0B, 0xF1, 0x6B, 0x6D, 0xD7, 0xA8, 0xE7, 0x0C, 0xC5, 0x28, 0x81, 0x1F, 0xCF, 0x30, 0x15,
|
0x75, 0x0B, 0xF1, 0x6B, 0x6D, 0xD7, 0xA8, 0xE7, 0x0C, 0xC5, 0x28, 0x81, 0x1F, 0xCF, 0x30, 0x15,
|
||||||
0xA8, 0x0D, 0xDA, 0x76, 0xF8, 0x7D, 0xD6, 0xE1, 0x0A, 0x11, 0xE3, 0xA4, 0x23, 0xFF, 0x8E, 0x0B,
|
0xA8, 0x0D, 0xDA, 0x76, 0xF8, 0x7D, 0xD6, 0xE1, 0x0A, 0x11, 0xE3, 0xA4, 0x23, 0xFF, 0x8E, 0x0B,
|
||||||
|
@ -507,12 +507,11 @@ void pgm_decrypt_svgpcb()
|
||||||
for (INT32 i = 0; i < nPGMExternalARMLen/2; i++) {
|
for (INT32 i = 0; i < nPGMExternalARMLen/2; i++) {
|
||||||
UINT16 x = BURN_ENDIAN_SWAP_INT16(src[i]);
|
UINT16 x = BURN_ENDIAN_SWAP_INT16(src[i]);
|
||||||
|
|
||||||
// preliminary!
|
|
||||||
if ((i & 0x040080) != 0x000080) x ^= 0x0001;
|
if ((i & 0x040080) != 0x000080) x ^= 0x0001;
|
||||||
if ((i & 0x084008) == 0x084008) x ^= 0x0002;
|
if ((i & 0x104008) == 0x104008) x ^= 0x0002;
|
||||||
if ((i & 0x080030) == 0x080010) x ^= 0x0004;
|
if ((i & 0x080030) == 0x080010) x ^= 0x0004;
|
||||||
if ((i & 0x000242) != 0x000042) x ^= 0x0008;
|
if ((i & 0x000242) != 0x000042) x ^= 0x0008;
|
||||||
if ((i & 0x048100) == 0x048000) x ^= 0x0010;
|
if ((i & 0x008100) == 0x008000) x ^= 0x0010;
|
||||||
if ((i & 0x022004) != 0x000004) x ^= 0x0020;
|
if ((i & 0x022004) != 0x000004) x ^= 0x0020;
|
||||||
if ((i & 0x011800) != 0x010000) x ^= 0x0040;
|
if ((i & 0x011800) != 0x010000) x ^= 0x0040;
|
||||||
if ((i & 0x000820) == 0x000820) x ^= 0x0080;
|
if ((i & 0x000820) == 0x000820) x ^= 0x0080;
|
||||||
|
|
|
@ -118,6 +118,7 @@ static INT32 pgmGetRoms(bool bLoad)
|
||||||
UINT8 *PGMTileROMLoad = PGMTileROM + 0x180000;
|
UINT8 *PGMTileROMLoad = PGMTileROM + 0x180000;
|
||||||
UINT8 *PGMSPRMaskROMLoad = PGMSPRMaskROM;
|
UINT8 *PGMSPRMaskROMLoad = PGMSPRMaskROM;
|
||||||
UINT8 *PGMSNDROMLoad = ICSSNDROM + 0x400000;
|
UINT8 *PGMSNDROMLoad = ICSSNDROM + 0x400000;
|
||||||
|
UINT8 *PGMARMROMLoad = PGMARMROM;
|
||||||
|
|
||||||
if (kov2 && bLoad) {
|
if (kov2 && bLoad) {
|
||||||
PGMSNDROMLoad += 0x400000;
|
PGMSNDROMLoad += 0x400000;
|
||||||
|
@ -200,7 +201,8 @@ static INT32 pgmGetRoms(bool bLoad)
|
||||||
{
|
{
|
||||||
if (bLoad) {
|
if (bLoad) {
|
||||||
if (BurnDrvGetHardwareCode() & HARDWARE_IGS_USE_ARM_CPU) {
|
if (BurnDrvGetHardwareCode() & HARDWARE_IGS_USE_ARM_CPU) {
|
||||||
BurnLoadRom(PGMARMROM, i, 1);
|
if (ri.nLen == 0x3e78) PGMARMROMLoad += 0x188;
|
||||||
|
BurnLoadRom(PGMARMROMLoad, i, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -210,7 +212,7 @@ static INT32 pgmGetRoms(bool bLoad)
|
||||||
{
|
{
|
||||||
if (BurnDrvGetHardwareCode() & HARDWARE_IGS_USE_ARM_CPU) {
|
if (BurnDrvGetHardwareCode() & HARDWARE_IGS_USE_ARM_CPU) {
|
||||||
if (bLoad) {
|
if (bLoad) {
|
||||||
BurnLoadRom(PGMUSER0, i, 1);
|
BurnLoadRom(PGMUSER0Load, i, 1);
|
||||||
PGMUSER0Load += ri.nLen;
|
PGMUSER0Load += ri.nLen;
|
||||||
} else {
|
} else {
|
||||||
nPGMExternalARMLen += ri.nLen;
|
nPGMExternalARMLen += ri.nLen;
|
||||||
|
|
Loading…
Reference in New Issue