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 BankCheck
EXTSYM MirrorROM
EXTSYM SplittedROM
EXTSYM addOnStart
EXTSYM addOnSize
EXTSYM SetaCmdEnable,setaramdata
EXTSYM setaaccessbankr8,setaaccessbankw8,setaaccessbankr8a,setaaccessbankw8a
@@ -3755,12 +3759,19 @@ NEWSYM showinfogui
je .nointlv
mov dword[CSStatus2+12],'Yes '
.nointlv
; calculate CRC32
xor edx,edx
mov eax,0FFFFFFFFh
mov ecx,dword[NumofBytes]
mov esi,[romdata]
;Only calculate Add on ROM?
cmp byte[SplittedROM],1
jne .calcloop
mov ecx,dword[addOnSize]
add esi,dword[addOnStart]
.calcloop
mov dl,byte[esi]
mov ebx,eax ;ebx = CRC32
@@ -3805,6 +3816,11 @@ NEWSYM showinfogui
add esi,[infoloc]
add esi,1Eh
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]
jne .failed
.passed2

View File

@@ -61,6 +61,11 @@ unsigned int maxromspace;
unsigned int curromspace;
unsigned int infoloc;
bool SplittedROM;
unsigned int addOnStart;
unsigned int addOnSize;
//Deinterleave functions
bool validChecksum(unsigned char *ROM, int BankLoc)
{
@@ -314,7 +319,13 @@ extern unsigned short Checksumvalue;
void CalcChecksum()
{
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);
if (NumofBanks == 96)
@@ -598,10 +609,6 @@ void loadZipFile()
}
}
bool SplittedROM;
int addOnStart;
int addOnSize;
void SplitSetup(const char *basefile, unsigned int MirrorSystem)
{
unsigned char *ROM = (unsigned char *)romdata;