From 66fd3b6a6b90416f8f350fab2ea18e31882f9bff Mon Sep 17 00:00:00 2001 From: pagefault <> Date: Thu, 3 Apr 2003 14:31:52 +0000 Subject: [PATCH] Fixed interleaved rom loading code --- zsnes/src/init.asm | 195 ++++++++++++++++++++++----------------------- 1 file changed, 97 insertions(+), 98 deletions(-) diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index 627ea20c..c82edc86 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -6018,6 +6018,103 @@ NEWSYM CheckROMType call SetAddressingModes call GenerateBank0Table call headerhack2 + + mov byte[intldone],0 + xor eax,eax + xor ebx,ebx + xor edx,edx + mov eax,[NumofBanks] + imul eax,32768 + shr eax,1 + mov esi,[romdata] + add esi,7FC0h + add esi,eax + add esi,28 + mov ebx,[esi] + inc esi + mov edx,[esi] + shl edx,16 + add ebx,edx + inc esi + add ebx,[esi] + inc esi + mov edx,[esi] + shl edx,16 + add ebx,edx + cmp bx,0FFFFh + jne .interlcheck2 + mov esi,[romdata] + add esi,7FC0h + add esi,eax + add esi,25 + cmp byte[esi],14 + jae .interlcheck2 + mov esi,[romdata] + add esi,7FC0h + add esi,eax + add esi,21 + cmp byte[esi],32 + je near .interleaved + cmp byte[esi],35 + je near .interleaved + cmp byte[esi],48 + je near .interleaved + cmp byte[esi],50 + je near .interleaved + cmp byte[esi],83 + je near .interleaved + +.interlcheck2 + xor ebx,ebx + xor edx,edx + mov esi,[romdata] + add esi,7FC0h + add esi,28 + mov ebx,[esi] + inc esi + mov edx,[esi] + shl edx,16 + add ebx,edx + inc esi + add ebx,[esi] + inc esi + mov edx,[esi] + shl edx,16 + add ebx,edx + cmp bx,0FFFFh + jne near .nointerlcheck + mov esi,[romdata] + add esi,7FC0h + add esi,25 + cmp byte[esi],14 + jae .nointerlcheck + mov esi,[romdata] + add esi,7FC0h + add esi,21 + cmp byte[esi],33 + je .interleaved + cmp byte[esi],49 + je .interleaved + cmp byte[esi],53 + je .interleaved + cmp byte[esi],50 + je .interleaved + cmp byte[esi],58 + je .interleaved + jmp .nointerlcheck +.interleaved + cmp byte[finterleave],1 + je .doneinterl +.interleaved2 + mov byte[intldone],1 + call UnInterleave + mov byte[romtype],2 + jmp .doneinterl +.nointerlcheck + cmp byte[finterleave],1 + je .interleaved2 +.doneinterl + mov byte[ROMTypeNOTFound],0 ; check reset vectors ; RES Hardware 00FFFC.D 00FFFC,D 1 @@ -6175,106 +6272,8 @@ NEWSYM CheckROMType mov [romtype],al mov byte[forceromtype],0 mov byte[ROMTypeNOTFound],0 - jmp .doneinterl .noforce - mov byte[intldone],0 - cmp byte[romtype],1 - jne near .nointerlcheck - xor eax,eax - xor ebx,ebx - xor edx,edx - mov eax,[NumofBanks] - imul eax,32768 - shr eax,1 - mov esi,[romdata] - add esi,7FC0h - add esi,eax - add esi,28 - mov ebx,[esi] - inc esi - mov edx,[esi] - shl edx,16 - add ebx,edx - inc esi - add ebx,[esi] - inc esi - mov edx,[esi] - shl edx,16 - add ebx,edx - cmp bx,0FFFFh - jne .interlcheck2 - mov esi,[romdata] - add esi,7FC0h - add esi,eax - add esi,25 - cmp byte[esi],14 - jae .interlcheck2 - mov esi,[romdata] - add esi,7FC0h - add esi,eax - add esi,21 - cmp byte[esi],32 - je near .interleaved - cmp byte[esi],35 - je near .interleaved - cmp byte[esi],48 - je near .interleaved - cmp byte[esi],50 - je near .interleaved - cmp byte[esi],83 - je near .interleaved - -.interlcheck2 - xor ebx,ebx - xor edx,edx - mov esi,[romdata] - add esi,7FC0h - add esi,28 - mov ebx,[esi] - inc esi - mov edx,[esi] - shl edx,16 - add ebx,edx - inc esi - add ebx,[esi] - inc esi - mov edx,[esi] - shl edx,16 - add ebx,edx - cmp bx,0FFFFh - jne near .nointerlcheck - mov esi,[romdata] - add esi,7FC0h - add esi,25 - cmp byte[esi],14 - jae .nointerlcheck - mov esi,[romdata] - add esi,7FC0h - add esi,21 - cmp byte[esi],33 - je .interleaved - cmp byte[esi],49 - je .interleaved - cmp byte[esi],53 - je .interleaved - cmp byte[esi],50 - je .interleaved - cmp byte[esi],58 - je .interleaved - jmp .nointerlcheck -.interleaved - cmp byte[finterleave],1 - je .doneinterl -.interleaved2 - mov byte[intldone],1 - call UnInterleave - mov byte[romtype],2 - jmp .doneinterl -.nointerlcheck - cmp byte[finterleave],1 - je .interleaved2 -.doneinterl mov esi,[romdata] add esi,0FFC0h mov byte[disablespcclr],0