Cleaned up Base+Add on code.

This commit is contained in:
n-a-c-h
2004-01-04 19:41:42 +00:00
parent 0c7631c0bd
commit b5dd7e0ae7

View File

@@ -598,49 +598,64 @@ void loadZipFile()
} }
} }
bool SplittedROM;
int addOnStart;
int addOnSize;
void SplitSetup(const char *basefile, unsigned int MirrorSystem)
{
unsigned char *ROM = (unsigned char *)romdata;
curromspace = 0;
if (maxromspace < addOnStart+addOnSize) { return; }
memcpy(ROM+addOnStart, ROM, addOnSize);
strcpy(ZOpenFileName, basefile);
loadZipFile();
if ((curromspace & 0x7FFF) == 512)
{
memmove(ROM, ROM+512, addOnStart);
curromspace -= 512;
}
if (!curromspace) { return; }
switch (MirrorSystem)
{
case 1:
memcpy(ROM+0x100000, ROM, 0x100000); //Mirror 8 to 16
break;
case 2:
memcpy(ROM+0x180000, ROM+0x100000, 0x80000); //Mirror 12 to 16
memcpy(ROM+0x200000, ROM, 0x200000); //Mirror 16 to 32
break;
}
curromspace = addOnStart+addOnSize;
SplittedROM = true;
}
void SplitSupport() void SplitSupport()
{ {
unsigned char *ROM = (unsigned char *)romdata; unsigned char *ROM = (unsigned char *)romdata;
SplittedROM = false;
//Same Game add on //Same Game add on
if (ROM[Hi+26] == 0x33 && curromspace == 0x80000 && if (ROM[Hi+26] == 0x33 && curromspace == 0x80000 &&
!ROM[Hi+21] && !ROM[Hi+22] && !ROM[Hi+23]) !ROM[Hi+21] && !ROM[Hi+22] && !ROM[Hi+23])
{ {
curromspace = 0; addOnStart = 0x200000;
if (maxromspace < 0x280000) { return; } addOnSize = 0x80000;
memcpy(ROM+0x200000, ROM, 0x80000); SplitSetup("SAMEGAME.ZIP", 1);
strcpy(ZOpenFileName, "SAMEGAME.ZIP");
loadZipFile();
if ((curromspace & 0x7FFF) == 512)
{
memmove(ROM, ROM+512, 0x200000);
curromspace -= 512;
}
if (!curromspace) { return; }
memcpy(ROM+0x100000, ROM, 0x100000); //Mirror 8 to 16
curromspace = 0x280000;
} }
//SD Gundam G-Next add on //SD Gundam G-Next add on
if (ROM[Lo+26] == 0x33 && curromspace == 0x80000 && if (ROM[Lo+26] == 0x33 && curromspace == 0x80000 &&
!ROM[Lo+21] && !ROM[Lo+22] && !ROM[Lo+23] && !strncmp(ROM+Lo, "GNEXT", 5)) !ROM[Lo+21] && !ROM[Lo+22] && !ROM[Lo+23] && !strncmp(ROM+Lo, "GNEXT", 5))
{ {
curromspace = 0; addOnStart = 0x400000;
if (maxromspace < 0x480000) { return; } addOnSize = 0x80000;
memcpy(ROM+0x400000, ROM, 0x80000); SplitSetup("G-NEXT.ZIP", 2);
strcpy(ZOpenFileName, "G-NEXT.ZIP");
loadZipFile();
if ((curromspace & 0x7FFF) == 512)
{
memmove(ROM, ROM+512, 0x400000);
curromspace -= 512;
} }
if (!curromspace) { return; }
memcpy(ROM+0x180000, ROM+0x100000, 0x80000); //Mirror 12 to 16
memcpy(ROM+0x200000, ROM, 0x200000); //Mirror 16 to 32
curromspace = 0x480000;
}
} }
extern bool Sup48mbit; extern bool Sup48mbit;