diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index 2ed9f80b..ac7511c8 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -3410,67 +3410,6 @@ NEWSYM loadfileGUI cmp dword[curromspace],0 je near .failed - - mov eax,dword[curromspace] - mov dword[.curfileofs],eax - - mov byte[lorommapmode2],0 - mov esi,[romdata] - cmp dword[esi+207FC0h],'DERB' - jne .noderby96 - cmp dword[esi+207FC4h],'Y ST' - jne .noderby96 - cmp dword[esi+207FC8h],'ALLI' - jne .noderby96 - cmp dword[esi+207FCDh],'N 96' - jne .noderby96 - mov byte[lorommapmode2],1 -.noderby96 - cmp dword[esi+7FC0h],'SOUN' - jne .nosoundnovel - cmp dword[esi+7FC4h],'D NO' - jne .nosoundnovel - cmp dword[esi+7FC8h],'VEL-' - jne .nosoundnovel - cmp dword[esi+7FCDh],'COOL' - jne .nosoundnovel - mov byte[lorommapmode2],1 -.nosoundnovel - - jmp .skipall - ; scan for branches - mov esi,06A5h - add esi,[romdata] - mov ecx,80h -.loopcheck - cmp byte[esi],48h - je .yes - cmp byte[esi],8Bh - je .yes - cmp byte[esi],0Bh - je .yes - cmp byte[esi],4Bh - je .yes - cmp byte[esi],08h - je .yes - cmp byte[esi],0DAh - je .yes - cmp byte[esi],5Ah - je .yes - jmp .no -.yes - pushad - mov al,byte[esi] - mov al,80h - sub al,cl - call printhex8 - popad -.no - add esi,8000h - dec ecx - jnz .loopcheck -.skipall - call convertsram mov byte[SramExists],0 @@ -3499,14 +3438,12 @@ NEWSYM loadfileGUI call Output_Text .inguib - mov eax,[.curfileofs] + mov eax,dword[curromspace] + mov dword[.curfileofs],eax mov [NumofBytes],eax shr eax,15 mov [NumofBanks],eax - mov eax,[.curfileofs] - shr eax,15 - mov [NumofBanks],eax cmp byte[.fail],0 je .notfailed mov byte[yesoutofmemory],1 @@ -4417,9 +4354,6 @@ NEWSYM SetupROM ret NEWSYM CheckROMType - call SetAddressingModes - call GenerateBank0Table - pushad call BankCheck popad @@ -4428,6 +4362,67 @@ NEWSYM CheckROMType call MirrorROM popad + + mov byte[lorommapmode2],0 + mov esi,[romdata] + cmp dword[esi+207FC0h],'DERB' + jne .noderby96 + cmp dword[esi+207FC4h],'Y ST' + jne .noderby96 + cmp dword[esi+207FC8h],'ALLI' + jne .noderby96 + cmp dword[esi+207FCDh],'N 96' + jne .noderby96 + mov byte[lorommapmode2],1 +.noderby96 + cmp dword[esi+7FC0h],'SOUN' + jne .nosoundnovel + cmp dword[esi+7FC4h],'D NO' + jne .nosoundnovel + cmp dword[esi+7FC8h],'VEL-' + jne .nosoundnovel + cmp dword[esi+7FCDh],'COOL' + jne .nosoundnovel + mov byte[lorommapmode2],1 +.nosoundnovel + + jmp .skipall + ; scan for branches + mov esi,06A5h + add esi,[romdata] + mov ecx,80h +.loopcheck + cmp byte[esi],48h + je .yes + cmp byte[esi],8Bh + je .yes + cmp byte[esi],0Bh + je .yes + cmp byte[esi],4Bh + je .yes + cmp byte[esi],08h + je .yes + cmp byte[esi],0DAh + je .yes + cmp byte[esi],5Ah + je .yes + jmp .no +.yes + pushad + mov al,byte[esi] + mov al,80h + sub al,cl + call printhex8 + popad +.no + add esi,8000h + dec ecx + jnz .loopcheck +.skipall + + call SetAddressingModes + call GenerateBank0Table + ; Chip Detection mov byte[SFXEnable],0 mov byte[C4Enable],0 diff --git a/zsnes/src/initc.c b/zsnes/src/initc.c index b09f3aba..ba9d7e62 100755 --- a/zsnes/src/initc.c +++ b/zsnes/src/initc.c @@ -362,6 +362,8 @@ void MirrorROM() { ROM[ROMSize++] = ROM[StartMirror++]; } + + NumofBanks = curromspace >> 15; } //File loading code @@ -605,22 +607,40 @@ void SplitSupport() !ROM[Hi+21] && !ROM[Hi+22] && !ROM[Hi+23]) { curromspace = 0; + if (maxromspace < 0x280000) { return; } memcpy(ROM+0x200000, ROM, 0x80000); strcpy(ZOpenFileName, "SAMEGAME.ZIP"); loadZipFile(); - if (curromspace == 0x100200) + if ((curromspace & 0x7FFF) == 512) { - memmove(ROM, ROM+512, 0x100000); + memmove(ROM, ROM+512, 0x200000); + curromspace -= 512; } - else if (curromspace != 0x100000) - { - curromspace = 0; - return; - } - memcpy(ROM+0x100000, ROM, 0x100000); + if (!curromspace) { return; } + memcpy(ROM+0x100000, ROM, 0x100000); //Mirror 8 to 16 curromspace = 0x280000; } + //SD Gundam G-Next add on + if (ROM[Lo+26] == 0x33 && curromspace == 0x80000 && + !ROM[Lo+21] && !ROM[Lo+22] && !ROM[Lo+23] && !strncmp(ROM+Lo, "GNEXT", 5)) + { + curromspace = 0; + if (maxromspace < 0x480000) { return; } + memcpy(ROM+0x400000, ROM, 0x80000); + strcpy(ZOpenFileName, "G-NEXT.ZIP"); + loadZipFile(); + if ((curromspace & 0x7FFF) == 512) + { + memmove(ROM, ROM+512, 0x400000); + curromspace -= 512; + } + if (!curromspace) { return; } + memcpy(ROM+0x180000, ROM+0x100000, 0x80000); //Mirror 12 to 16 + memcpy(ROM+0x200000, ROM, 0x200000); //Mirror 16 to 32 + curromspace = 0x480000; + } + } extern bool Sup48mbit;