Fixed checksum and CRC32 on add on ROMs.
This commit is contained in:
@@ -122,6 +122,10 @@ EXTSYM loadROM
|
|||||||
EXTSYM CalcChecksum
|
EXTSYM CalcChecksum
|
||||||
EXTSYM BankCheck
|
EXTSYM BankCheck
|
||||||
EXTSYM MirrorROM
|
EXTSYM MirrorROM
|
||||||
|
EXTSYM SplittedROM
|
||||||
|
EXTSYM addOnStart
|
||||||
|
EXTSYM addOnSize
|
||||||
|
|
||||||
|
|
||||||
EXTSYM SetaCmdEnable,setaramdata
|
EXTSYM SetaCmdEnable,setaramdata
|
||||||
EXTSYM setaaccessbankr8,setaaccessbankw8,setaaccessbankr8a,setaaccessbankw8a
|
EXTSYM setaaccessbankr8,setaaccessbankw8,setaaccessbankr8a,setaaccessbankw8a
|
||||||
@@ -3761,6 +3765,13 @@ NEWSYM showinfogui
|
|||||||
mov eax,0FFFFFFFFh
|
mov eax,0FFFFFFFFh
|
||||||
mov ecx,dword[NumofBytes]
|
mov ecx,dword[NumofBytes]
|
||||||
mov esi,[romdata]
|
mov esi,[romdata]
|
||||||
|
|
||||||
|
;Only calculate Add on ROM?
|
||||||
|
cmp byte[SplittedROM],1
|
||||||
|
jne .calcloop
|
||||||
|
mov ecx,dword[addOnSize]
|
||||||
|
add esi,dword[addOnStart]
|
||||||
|
|
||||||
.calcloop
|
.calcloop
|
||||||
mov dl,byte[esi]
|
mov dl,byte[esi]
|
||||||
mov ebx,eax ;ebx = CRC32
|
mov ebx,eax ;ebx = CRC32
|
||||||
@@ -3805,6 +3816,11 @@ NEWSYM showinfogui
|
|||||||
add esi,[infoloc]
|
add esi,[infoloc]
|
||||||
add esi,1Eh
|
add esi,1Eh
|
||||||
mov ax,[Checksumvalue]
|
mov ax,[Checksumvalue]
|
||||||
|
;On add on ROMs we check the add on
|
||||||
|
cmp byte[SplittedROM],1
|
||||||
|
jne .check
|
||||||
|
add esi,dword[addOnStart]
|
||||||
|
.check
|
||||||
cmp ax,[esi]
|
cmp ax,[esi]
|
||||||
jne .failed
|
jne .failed
|
||||||
.passed2
|
.passed2
|
||||||
|
|||||||
@@ -61,6 +61,11 @@ unsigned int maxromspace;
|
|||||||
unsigned int curromspace;
|
unsigned int curromspace;
|
||||||
unsigned int infoloc;
|
unsigned int infoloc;
|
||||||
|
|
||||||
|
bool SplittedROM;
|
||||||
|
unsigned int addOnStart;
|
||||||
|
unsigned int addOnSize;
|
||||||
|
|
||||||
|
|
||||||
//Deinterleave functions
|
//Deinterleave functions
|
||||||
bool validChecksum(unsigned char *ROM, int BankLoc)
|
bool validChecksum(unsigned char *ROM, int BankLoc)
|
||||||
{
|
{
|
||||||
@@ -314,7 +319,13 @@ extern unsigned short Checksumvalue;
|
|||||||
void CalcChecksum()
|
void CalcChecksum()
|
||||||
{
|
{
|
||||||
unsigned char *ROM = (unsigned char *)romdata;
|
unsigned char *ROM = (unsigned char *)romdata;
|
||||||
if (SPC7110Enable)
|
|
||||||
|
if (SplittedROM)
|
||||||
|
{
|
||||||
|
Checksumvalue = sum(ROM+addOnStart, addOnSize);
|
||||||
|
Checksumvalue -= sum(&ROM[infoloc+addOnStart - 16], 48);
|
||||||
|
}
|
||||||
|
else if (SPC7110Enable)
|
||||||
{
|
{
|
||||||
Checksumvalue = sum(ROM, NumofBytes);
|
Checksumvalue = sum(ROM, NumofBytes);
|
||||||
if (NumofBanks == 96)
|
if (NumofBanks == 96)
|
||||||
@@ -598,10 +609,6 @@ void loadZipFile()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SplittedROM;
|
|
||||||
int addOnStart;
|
|
||||||
int addOnSize;
|
|
||||||
|
|
||||||
void SplitSetup(const char *basefile, unsigned int MirrorSystem)
|
void SplitSetup(const char *basefile, unsigned int MirrorSystem)
|
||||||
{
|
{
|
||||||
unsigned char *ROM = (unsigned char *)romdata;
|
unsigned char *ROM = (unsigned char *)romdata;
|
||||||
|
|||||||
Reference in New Issue
Block a user