Fixed checksum and CRC32 on add on ROMs.

This commit is contained in:
n-a-c-h
2004-01-04 20:24:46 +00:00
parent b5dd7e0ae7
commit 3f96861df9
2 changed files with 29 additions and 6 deletions

View File

@@ -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

View File

@@ -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;