From 3f96861df909c69f7e17447983b127379bc71f50 Mon Sep 17 00:00:00 2001 From: n-a-c-h <> Date: Sun, 4 Jan 2004 20:24:46 +0000 Subject: [PATCH] Fixed checksum and CRC32 on add on ROMs. --- zsnes/src/init.asm | 18 +++++++++++++++++- zsnes/src/initc.c | 17 ++++++++++++----- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index ac7511c8..f9735493 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -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 diff --git a/zsnes/src/initc.c b/zsnes/src/initc.c index 882c1401..4ad5bd4a 100755 --- a/zsnes/src/initc.c +++ b/zsnes/src/initc.c @@ -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;