Cleaned up Base+Add on code.
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user