Removed SuperFX interleave support, Removed really old interleave code, Replaced 48Mb interleave asm monstrosity with much smaller C monster.
This commit is contained in:
@@ -33,7 +33,6 @@ EXTSYM cvidmode, newengen, cfgnewgfx, GUI16VID
|
|||||||
EXTSYM NewEngEnForce
|
EXTSYM NewEngEnForce
|
||||||
EXTSYM PrintChar
|
EXTSYM PrintChar
|
||||||
EXTSYM TextFile
|
EXTSYM TextFile
|
||||||
EXTSYM mode7tab
|
|
||||||
EXTSYM Setper2exec,per2exec
|
EXTSYM Setper2exec,per2exec
|
||||||
EXTSYM MovieCounter
|
EXTSYM MovieCounter
|
||||||
EXTSYM chaton
|
EXTSYM chaton
|
||||||
@@ -125,6 +124,7 @@ EXTSYM addOnSize
|
|||||||
EXTSYM SPC7PackIndexLoad,SPC7110IndexSize
|
EXTSYM SPC7PackIndexLoad,SPC7110IndexSize
|
||||||
EXTSYM DumpROMLoadInfo
|
EXTSYM DumpROMLoadInfo
|
||||||
EXTSYM SetupSramSize
|
EXTSYM SetupSramSize
|
||||||
|
EXTSYM IntlEHi
|
||||||
|
|
||||||
EXTSYM SetaCmdEnable,setaramdata
|
EXTSYM SetaCmdEnable,setaramdata
|
||||||
EXTSYM setaaccessbankr8,setaaccessbankw8,setaaccessbankr8a,setaaccessbankw8a
|
EXTSYM setaaccessbankr8,setaaccessbankw8,setaaccessbankr8a,setaaccessbankw8a
|
||||||
@@ -1956,7 +1956,9 @@ NEWSYM initsnes
|
|||||||
mov eax,[ram7f]
|
mov eax,[ram7f]
|
||||||
mov [snesmmap+7Fh*4],eax
|
mov [snesmmap+7Fh*4],eax
|
||||||
mov [snesmap2+7Fh*4],eax
|
mov [snesmap2+7Fh*4],eax
|
||||||
call prepare48mbit
|
pushad
|
||||||
|
call IntlEHi ;Interleave 48Mb ROM, because the map is broken
|
||||||
|
popad
|
||||||
ret
|
ret
|
||||||
.hirom
|
.hirom
|
||||||
; set addresses 8000-FFFF
|
; set addresses 8000-FFFF
|
||||||
@@ -2328,150 +2330,6 @@ SDD1memmap:
|
|||||||
mov [snesmap2+7Fh*4],eax
|
mov [snesmap2+7Fh*4],eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;*******************************************************
|
|
||||||
; Prepare 48mbit Moves blocks around for 48mbit
|
|
||||||
;*******************************************************
|
|
||||||
|
|
||||||
SECTION .data
|
|
||||||
NEWSYM memdest, dd 0
|
|
||||||
SECTION .text
|
|
||||||
|
|
||||||
NEWSYM prepare48mbit
|
|
||||||
mov dword[NumofBanks],192
|
|
||||||
; make table 2 (64,0,65,1,...)
|
|
||||||
mov edi,mode7tab+128
|
|
||||||
mov ecx,64
|
|
||||||
mov al,64
|
|
||||||
mov ah,0
|
|
||||||
.nextl2
|
|
||||||
mov [edi],al
|
|
||||||
mov [edi+1],ah
|
|
||||||
inc al
|
|
||||||
inc ah
|
|
||||||
add edi,2
|
|
||||||
dec ecx
|
|
||||||
jnz .nextl2
|
|
||||||
mov eax,[romdata]
|
|
||||||
add eax,200000h
|
|
||||||
mov [memdest],eax
|
|
||||||
call ProcessSwapTable
|
|
||||||
cmp byte[romtype],1
|
|
||||||
je .nothirom
|
|
||||||
call UnInterleave48mbit
|
|
||||||
.nothirom
|
|
||||||
ret
|
|
||||||
|
|
||||||
UnInterleave48mbit:
|
|
||||||
pushad
|
|
||||||
; make table 2 (0 .. 255)
|
|
||||||
mov edi,mode7tab+256
|
|
||||||
mov ecx,256
|
|
||||||
xor al,al
|
|
||||||
.nextlb2
|
|
||||||
mov [edi],al
|
|
||||||
inc al
|
|
||||||
inc edi
|
|
||||||
dec ecx
|
|
||||||
jnz .nextlb2
|
|
||||||
|
|
||||||
mov esi,mode7tab+256
|
|
||||||
mov ecx,40h
|
|
||||||
xor al,al
|
|
||||||
.loop
|
|
||||||
mov [esi+40h],al
|
|
||||||
inc al
|
|
||||||
inc esi
|
|
||||||
dec ecx
|
|
||||||
jnz .loop
|
|
||||||
mov esi,mode7tab+256
|
|
||||||
mov ecx,40h
|
|
||||||
mov al,40h+1
|
|
||||||
.loop2
|
|
||||||
mov [esi+80h],al
|
|
||||||
add al,2
|
|
||||||
inc esi
|
|
||||||
dec ecx
|
|
||||||
jnz .loop2
|
|
||||||
mov esi,mode7tab+256
|
|
||||||
mov ecx,20h
|
|
||||||
mov al,40h
|
|
||||||
.loop3
|
|
||||||
mov [esi+20h],al
|
|
||||||
add al,2
|
|
||||||
mov [esi],al
|
|
||||||
add al,2
|
|
||||||
inc esi
|
|
||||||
dec ecx
|
|
||||||
jnz .loop3
|
|
||||||
call SwapTable256
|
|
||||||
popad
|
|
||||||
ret
|
|
||||||
|
|
||||||
NEWSYM ProcessSwapTable
|
|
||||||
; make table 1 (0 .. 127)
|
|
||||||
mov edi,mode7tab
|
|
||||||
mov ecx,128
|
|
||||||
xor al,al
|
|
||||||
.nextl
|
|
||||||
mov [edi],al
|
|
||||||
inc al
|
|
||||||
inc edi
|
|
||||||
dec ecx
|
|
||||||
jnz .nextl
|
|
||||||
|
|
||||||
xor eax,eax
|
|
||||||
xor ebx,ebx
|
|
||||||
; sort memory
|
|
||||||
; start at first entry in table 2
|
|
||||||
mov esi,mode7tab+128
|
|
||||||
mov ecx,128
|
|
||||||
.nextentry
|
|
||||||
; find which blocks to swap
|
|
||||||
; search entry from table 2 in table 1
|
|
||||||
mov al,[esi]
|
|
||||||
mov edi,mode7tab
|
|
||||||
.findnext
|
|
||||||
mov bl,[edi]
|
|
||||||
cmp bl,al
|
|
||||||
je .foundit
|
|
||||||
inc edi
|
|
||||||
jmp .findnext
|
|
||||||
.foundit
|
|
||||||
mov bl,[esi-128]
|
|
||||||
mov [esi-128],al
|
|
||||||
mov [edi],bl
|
|
||||||
mov eax,esi
|
|
||||||
sub eax,mode7tab+128
|
|
||||||
mov ebx,edi
|
|
||||||
sub ebx,mode7tab
|
|
||||||
; swap blocks at memory location $200000+al*8000h with $200000+bl*8000h
|
|
||||||
shl eax,15
|
|
||||||
add eax,[memdest]
|
|
||||||
shl ebx,15
|
|
||||||
add ebx,[memdest]
|
|
||||||
push esi
|
|
||||||
mov esi,eax
|
|
||||||
mov edi,ebx
|
|
||||||
mov edx,2000h
|
|
||||||
.loopa
|
|
||||||
mov eax,[esi]
|
|
||||||
mov ebx,[edi]
|
|
||||||
mov [esi],ebx
|
|
||||||
mov [edi],eax
|
|
||||||
add esi,4
|
|
||||||
add edi,4
|
|
||||||
dec edx
|
|
||||||
jnz .loopa
|
|
||||||
pop esi
|
|
||||||
xor eax,eax
|
|
||||||
xor ebx,ebx
|
|
||||||
inc esi
|
|
||||||
dec ecx
|
|
||||||
jnz near .nextentry
|
|
||||||
|
|
||||||
call Makemode7Table
|
|
||||||
ret
|
|
||||||
|
|
||||||
SECTION .data
|
SECTION .data
|
||||||
NEWSYM SFXCounter, dd 0
|
NEWSYM SFXCounter, dd 0
|
||||||
|
|
||||||
@@ -2499,35 +2357,6 @@ NEWSYM preparesfx
|
|||||||
jne .noac
|
jne .noac
|
||||||
mov byte[SfxAC],1
|
mov byte[SfxAC],1
|
||||||
.noac
|
.noac
|
||||||
cmp dword[eax+0EFFBBh], 21066396h
|
|
||||||
je .yesinterleaved
|
|
||||||
cmp dword[eax+048000h],0E702E1F6h
|
|
||||||
je .yesinterleaved
|
|
||||||
jmp .noswapper
|
|
||||||
.yesinterleaved
|
|
||||||
mov edi,mode7tab+128
|
|
||||||
mov ecx,128
|
|
||||||
mov al,0
|
|
||||||
.nextl2
|
|
||||||
mov ah,al
|
|
||||||
and ah,11100001b
|
|
||||||
mov bl,al
|
|
||||||
and bl,00000110b
|
|
||||||
shl bl,2
|
|
||||||
or ah,bl
|
|
||||||
mov bl,al
|
|
||||||
and bl,00011000b
|
|
||||||
shr bl,2
|
|
||||||
or ah,bl
|
|
||||||
mov [edi],ah
|
|
||||||
inc al
|
|
||||||
inc edi
|
|
||||||
dec ecx
|
|
||||||
jnz .nextl2
|
|
||||||
mov eax,[romdata]
|
|
||||||
mov [memdest],eax
|
|
||||||
call ProcessSwapTable
|
|
||||||
.noswapper
|
|
||||||
; duplicate sfx data
|
; duplicate sfx data
|
||||||
mov esi,[romdata]
|
mov esi,[romdata]
|
||||||
mov edi,[romdata]
|
mov edi,[romdata]
|
||||||
@@ -2565,80 +2394,6 @@ NEWSYM preparesfx
|
|||||||
jnz .n
|
jnz .n
|
||||||
ret
|
ret
|
||||||
|
|
||||||
SwapTable256:
|
|
||||||
; make table 1 (0 .. 255)
|
|
||||||
mov edi,mode7tab
|
|
||||||
mov ecx,256
|
|
||||||
xor al,al
|
|
||||||
.nextlb
|
|
||||||
mov [edi],al
|
|
||||||
inc al
|
|
||||||
inc edi
|
|
||||||
dec ecx
|
|
||||||
jnz .nextlb
|
|
||||||
|
|
||||||
xor eax,eax
|
|
||||||
xor ebx,ebx
|
|
||||||
; sort memory
|
|
||||||
; start at first entry in table 2
|
|
||||||
mov esi,mode7tab+256
|
|
||||||
mov ecx,[NumofBanks]
|
|
||||||
shr ecx,1
|
|
||||||
add ecx,ecx
|
|
||||||
.nextentry
|
|
||||||
; find which blocks to swap
|
|
||||||
; search entry from table 2 in table 1
|
|
||||||
mov al,[esi]
|
|
||||||
mov edi,mode7tab
|
|
||||||
.findnext
|
|
||||||
mov bl,[edi]
|
|
||||||
cmp bl,al
|
|
||||||
je .foundit
|
|
||||||
inc edi
|
|
||||||
jmp .findnext
|
|
||||||
.foundit
|
|
||||||
mov bl,[esi-256]
|
|
||||||
mov [esi-256],al
|
|
||||||
mov [edi],bl
|
|
||||||
|
|
||||||
mov eax,edi
|
|
||||||
add eax,256
|
|
||||||
cmp eax,esi
|
|
||||||
je near .skipthis
|
|
||||||
|
|
||||||
mov eax,esi
|
|
||||||
sub eax,mode7tab+256
|
|
||||||
mov ebx,edi
|
|
||||||
sub ebx,mode7tab
|
|
||||||
; swap blocks at memory location $200000+al*8000h with $200000+bl*8000h
|
|
||||||
shl eax,15
|
|
||||||
add eax,[romdata]
|
|
||||||
shl ebx,15
|
|
||||||
add ebx,[romdata]
|
|
||||||
push esi
|
|
||||||
mov esi,eax
|
|
||||||
mov edi,ebx
|
|
||||||
mov edx,2000h
|
|
||||||
.loopa
|
|
||||||
mov eax,[esi]
|
|
||||||
mov ebx,[edi]
|
|
||||||
mov [esi],ebx
|
|
||||||
mov [edi],eax
|
|
||||||
add esi,4
|
|
||||||
add edi,4
|
|
||||||
dec edx
|
|
||||||
jnz .loopa
|
|
||||||
pop esi
|
|
||||||
.skipthis
|
|
||||||
xor eax,eax
|
|
||||||
xor ebx,ebx
|
|
||||||
inc esi
|
|
||||||
dec ecx
|
|
||||||
jnz near .nextentry
|
|
||||||
.endthis
|
|
||||||
call Makemode7Table
|
|
||||||
ret
|
|
||||||
|
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
; Copy execloop
|
; Copy execloop
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
|
|||||||
@@ -200,6 +200,46 @@ void CheckIntlEHi(unsigned char *ROM)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//These two functions interleave, yes interleave, because ZSNES has it's large ROM map backwards
|
||||||
|
void intlv1()
|
||||||
|
{
|
||||||
|
char blocks[256];
|
||||||
|
int i, numblocks = NumofBanks/2;
|
||||||
|
for (i = 0; i < numblocks; i++)
|
||||||
|
{
|
||||||
|
blocks[i + numblocks] = i * 2;
|
||||||
|
blocks[i] = i * 2 + 1;
|
||||||
|
}
|
||||||
|
swapBlocks(blocks);
|
||||||
|
}
|
||||||
|
|
||||||
|
//This is a mess, I wish we didn't need this, but it kicks the old asm code
|
||||||
|
void IntlEHi()
|
||||||
|
{
|
||||||
|
unsigned int temp, i,
|
||||||
|
*loc1 = romdata,
|
||||||
|
*loc2 = romdata + 0x100000;
|
||||||
|
|
||||||
|
for (i = 0; i < 0x80000; i++)
|
||||||
|
{
|
||||||
|
temp = loc1[i];
|
||||||
|
loc1[i] = loc2[i];
|
||||||
|
loc2[i] = temp;
|
||||||
|
}
|
||||||
|
loc1 = romdata + 0x80000;
|
||||||
|
loc2 = romdata + 0x100000;
|
||||||
|
for (i = 0; i < 0x80000; i++)
|
||||||
|
{
|
||||||
|
temp = loc1[i];
|
||||||
|
loc1[i] = loc2[i];
|
||||||
|
loc2[i] = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
NumofBanks = 64;
|
||||||
|
intlv1();
|
||||||
|
NumofBanks = 192;
|
||||||
|
}
|
||||||
|
|
||||||
//ROM loading functions, which some strangly enough were in guiload.inc
|
//ROM loading functions, which some strangly enough were in guiload.inc
|
||||||
bool AllASCII(unsigned char *b, int size)
|
bool AllASCII(unsigned char *b, int size)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user