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()
{
unsigned char *ROM = (unsigned char *)romdata;
SplittedROM = false;
//Same Game add on
if (ROM[Hi+26] == 0x33 && curromspace == 0x80000 &&
!ROM[Hi+21] && !ROM[Hi+22] && !ROM[Hi+23])
{
curromspace = 0;
if (maxromspace < 0x280000) { return; }
memcpy(ROM+0x200000, ROM, 0x80000);
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;
addOnStart = 0x200000;
addOnSize = 0x80000;
SplitSetup("SAMEGAME.ZIP", 1);
}
//SD Gundam G-Next add on
if (ROM[Lo+26] == 0x33 && curromspace == 0x80000 &&
!ROM[Lo+21] && !ROM[Lo+22] && !ROM[Lo+23] && !strncmp(ROM+Lo, "GNEXT", 5))
{
curromspace = 0;
if (maxromspace < 0x480000) { return; }
memcpy(ROM+0x400000, ROM, 0x80000);
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;
addOnStart = 0x400000;
addOnSize = 0x80000;
SplitSetup("G-NEXT.ZIP", 2);
}
}
extern bool Sup48mbit;