Game fixes

This commit is contained in:
pagefault
2001-06-25 18:21:51 +00:00
parent 1808b6e461
commit 144c5b7fee
7 changed files with 3194 additions and 2880 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -521,6 +521,7 @@ BRKemulmode
%endmacro %endmacro
%macro COPMacro 0 %macro COPMacro 0
int 3h
inc esi inc esi
test byte[xe],1 test byte[xe],1
jne near COPemulmode jne near COPemulmode
@@ -790,21 +791,25 @@ COPemulmode
sub ebx,[initaddrl] sub ebx,[initaddrl]
add bx,2 add bx,2
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
mov cl,[xpb] mov al,[xpb]
mov [eax+ebx],cl call membank0w8
dec bx
or bx,word[stackor] dec cx
mov cl,[xpc+1] or cx,word[stackor]
mov [eax+ebx],cl mov al,[xpc+1]
dec bx call membank0w8
or bx,word[stackor]
mov cl,[xpc] dec cx
mov [eax+ebx],cl or cx,word[stackor]
dec bx mov al,[xpc]
or bx,word[stackor] call membank0w8
mov [xs],bx
dec cx
or cx,word[stackor]
mov [xs],cx
xor eax,eax xor eax,eax
xor bh,bh xor bh,bh
mov ax,[esi] mov ax,[esi]
@@ -829,20 +834,25 @@ COPemulmode
sub ebx,[initaddrl] sub ebx,[initaddrl]
inc bx inc bx
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
mov cl,[xpc+1] mov al,[xpc+1]
mov [eax+ebx],cl call membank0w8
dec bx
or bx,word[stackor] dec cx
mov cl,[xpc] or cx,word[stackor]
mov [eax+ebx],cl mov al,[xpc]
dec bx call membank0w8
or bx,word[stackor]
dec cx
or cx,word[stackor]
xor eax,eax xor eax,eax
mov [xs],bx mov [xs],cx
mov ax,[esi] mov ax,[esi]
xor bh,bh xor bh,bh
mov [xpc],ax mov [xpc],ax
mov bl,[xpb] mov bl,[xpb]
test eax,8000h test eax,8000h
@@ -876,17 +886,23 @@ COPemulmode
sub ebx,[initaddrl] sub ebx,[initaddrl]
inc bx inc bx
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
mov cl,[xpc+1] mov al,[xpc+1]
mov [eax+ebx],cl call membank0w8
dec bx
or bx,word[stackor] dec cx
mov cl,[xpc] or cx,word[stackor]
mov [eax+ebx],cl mov al,[xpc]
dec bx call membank0w8
or bx,word[stackor]
mov [xs],bx dec cx
or cx,word[stackor]
xor eax,eax
mov [xs],cx
xor eax,eax xor eax,eax
xor bh,bh xor bh,bh
mov cx,[esi] mov cx,[esi]
@@ -1034,7 +1050,6 @@ COPemulmode
%endmacro %endmacro
%macro PUSHMacro8b 1 %macro PUSHMacro8b 1
mov eax,[wramdata]
mov cx,[xs] mov cx,[xs]
mov al,%1 mov al,%1
call membank0w8 call membank0w8
@@ -1045,7 +1060,6 @@ COPemulmode
%endmacro %endmacro
%macro PUSHMacro8bp 0 %macro PUSHMacro8bp 0
mov eax,[wramdata]
makedl makedl
mov cx,[xs] mov cx,[xs]
mov al,dl mov al,dl
@@ -1155,7 +1169,6 @@ COPemulmode
%endmacro %endmacro
%macro POPMacro8b 1 %macro POPMacro8b 1
mov eax,[wramdata]
mov cx,[xs] mov cx,[xs]
inc cx inc cx
and cx,word[stackand] and cx,word[stackand]
@@ -1167,7 +1180,6 @@ COPemulmode
%endmacro %endmacro
%macro POPMacro16b 2 %macro POPMacro16b 2
mov eax,[wramdata]
mov cx,[xs] mov cx,[xs]
inc cx inc cx
and cx,word[stackand] and cx,word[stackand]
@@ -1185,7 +1197,6 @@ COPemulmode
%endmacro %endmacro
%macro POPMacro16bd 2 %macro POPMacro16bd 2
mov eax,[wramdata]
mov cx,[xs] mov cx,[xs]
inc cx inc cx
and cx,word[stackand] and cx,word[stackand]
@@ -1204,14 +1215,15 @@ COPemulmode
%endmacro %endmacro
%macro POPMacroP 0 %macro POPMacroP 0
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov cl,[eax+ebx] call membank0r8
mov [xs],bx mov [xs],cx
xor bh,bh xor bh,bh
mov dl,cl mov dl,al
restoredl restoredl
test byte[xe],01h test byte[xe],01h
jnz .emul jnz .emul
@@ -1311,26 +1323,38 @@ COPemulmode
mov byte[curnmi],0 mov byte[curnmi],0
test byte[xe],1 test byte[xe],1
jne near emulRTI jne near emulRTI
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov dl,[eax+ebx] call membank0r8
mov [xs],cx
mov dl,al
restoredl restoredl
inc bx
and bx,word[stackand] mov cx,[xs]
mov cl,[eax+ebx] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] xor eax,eax
mov ch,[eax+ebx] call membank0r8
inc bx mov [xpc],al
and bx,word[stackand]
mov al,[eax+ebx] inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpc+1],al
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpb],al mov [xpb],al
mov [xs],bx mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
mov bl,dl mov bl,dl
mov edi,[tablead+ebx*4] mov edi,[tablead+ebx*4]
mov bl,[xpb] mov bl,[xpb]
@@ -1373,23 +1397,34 @@ COPemulmode
endloop endloop
emulRTI emulRTI
mov eax,[wramdata] mov cx,[xs]
mov bx,[xs] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] call membank0r8
mov dl,[eax+ebx] mov [xs],cx
mov dl,al
or dl,00110000b or dl,00110000b
restoredl restoredl
inc bx
and bx,word[stackand] mov cx,[xs]
mov cl,[eax+ebx] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] xor eax,eax
mov ch,[eax+ebx] call membank0r8
mov [xs],bx mov [xpc],al
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpc+1],al
mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
mov bl,dl mov bl,dl
mov edi,[tablead+ebx*4] mov edi,[tablead+ebx*4]
xor bl,bl xor bl,bl
@@ -1408,22 +1443,43 @@ emulRTI
%endmacro %endmacro
%macro RTLMacro 0 %macro RTLMacro 0
mov eax,[wramdata] mov cx,[xs]
mov bx,[xs] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] xor eax,eax
mov cl,[eax+ebx] call membank0r8
inc bx mov [xpc],al
and bx,word[stackand]
mov ch,[eax+ebx] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] xor eax,eax
mov al,[eax+ebx] call membank0r8
mov [xpc+1],al
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpb],al mov [xpb],al
mov [xs],bx
; inc bx
; and bx,word[stackand]
; mov cl,[eax+ebx]
; inc bx
; and bx,word[stackand]
; mov ch,[eax+ebx]
; inc bx
; and bx,word[stackand]
; mov al,[eax+ebx]
; mov [xpb],al
mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
inc ax inc ax
mov bl,[xpb] mov bl,[xpb]
mov [xpc],ax mov [xpc],ax
@@ -1441,18 +1497,22 @@ emulRTI
%endmacro %endmacro
%macro RTSMacro 0 %macro RTSMacro 0
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov cl,[eax+ebx] call membank0r8
inc bx mov [xpc],al
and bx,word[stackand]
mov ch,[eax+ebx] inc cx
mov [xs],bx and cx,word[stackand]
call membank0r8
mov [xpc+1],al
mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
inc ax inc ax
mov [xpc],ax mov [xpc],ax
mov bl,[xpb] mov bl,[xpb]

View File

@@ -519,6 +519,7 @@ BRKemulmode
%endmacro %endmacro
%macro COPMacro 0 %macro COPMacro 0
int 3h
inc esi inc esi
test byte[xe],1 test byte[xe],1
jne near COPemulmode jne near COPemulmode
@@ -789,21 +790,25 @@ COPemulmode
sub ebx,[initaddrl] sub ebx,[initaddrl]
add bx,2 add bx,2
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
mov cl,[xpb] mov al,[xpb]
mov [eax+ebx],cl call membank0w8
dec bx
or bx,word[stackor] dec cx
mov cl,[xpc+1] or cx,word[stackor]
mov [eax+ebx],cl mov al,[xpc+1]
dec bx call membank0w8
or bx,word[stackor]
mov cl,[xpc] dec cx
mov [eax+ebx],cl or cx,word[stackor]
dec bx mov al,[xpc]
or bx,word[stackor] call membank0w8
mov [xs],bx
dec cx
or cx,word[stackor]
mov [xs],cx
xor eax,eax xor eax,eax
xor bh,bh xor bh,bh
mov ax,[esi] mov ax,[esi]
@@ -828,20 +833,25 @@ COPemulmode
sub ebx,[initaddrl] sub ebx,[initaddrl]
inc bx inc bx
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
mov cl,[xpc+1] mov al,[xpc+1]
mov [eax+ebx],cl call membank0w8
dec bx
or bx,word[stackor] dec cx
mov cl,[xpc] or cx,word[stackor]
mov [eax+ebx],cl mov al,[xpc]
dec bx call membank0w8
or bx,word[stackor]
dec cx
or cx,word[stackor]
xor eax,eax xor eax,eax
mov [xs],bx mov [xs],cx
mov ax,[esi] mov ax,[esi]
xor bh,bh xor bh,bh
mov [xpc],ax mov [xpc],ax
mov bl,[xpb] mov bl,[xpb]
test eax,8000h test eax,8000h
@@ -875,17 +885,23 @@ COPemulmode
sub ebx,[initaddrl] sub ebx,[initaddrl]
inc bx inc bx
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
mov cl,[xpc+1] mov al,[xpc+1]
mov [eax+ebx],cl call membank0w8
dec bx
or bx,word[stackor] dec cx
mov cl,[xpc] or cx,word[stackor]
mov [eax+ebx],cl mov al,[xpc]
dec bx call membank0w8
or bx,word[stackor]
mov [xs],bx dec cx
or cx,word[stackor]
xor eax,eax
mov [xs],cx
xor eax,eax xor eax,eax
xor bh,bh xor bh,bh
mov cx,[esi] mov cx,[esi]
@@ -1033,7 +1049,6 @@ COPemulmode
%endmacro %endmacro
%macro PUSHMacro8b 1 %macro PUSHMacro8b 1
mov eax,[wramdata]
mov cx,[xs] mov cx,[xs]
mov al,%1 mov al,%1
call membank0w8 call membank0w8
@@ -1044,7 +1059,6 @@ COPemulmode
%endmacro %endmacro
%macro PUSHMacro8bp 0 %macro PUSHMacro8bp 0
mov eax,[wramdata]
makedl makedl
mov cx,[xs] mov cx,[xs]
mov al,dl mov al,dl
@@ -1154,7 +1168,6 @@ COPemulmode
%endmacro %endmacro
%macro POPMacro8b 1 %macro POPMacro8b 1
mov eax,[wramdata]
mov cx,[xs] mov cx,[xs]
inc cx inc cx
and cx,word[stackand] and cx,word[stackand]
@@ -1166,7 +1179,6 @@ COPemulmode
%endmacro %endmacro
%macro POPMacro16b 2 %macro POPMacro16b 2
mov eax,[wramdata]
mov cx,[xs] mov cx,[xs]
inc cx inc cx
and cx,word[stackand] and cx,word[stackand]
@@ -1184,7 +1196,6 @@ COPemulmode
%endmacro %endmacro
%macro POPMacro16bd 2 %macro POPMacro16bd 2
mov eax,[wramdata]
mov cx,[xs] mov cx,[xs]
inc cx inc cx
and cx,word[stackand] and cx,word[stackand]
@@ -1203,14 +1214,15 @@ COPemulmode
%endmacro %endmacro
%macro POPMacroP 0 %macro POPMacroP 0
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov cl,[eax+ebx] call membank0r8
mov [xs],bx mov [xs],cx
xor bh,bh xor bh,bh
mov dl,cl mov dl,al
restoredl restoredl
test byte[xe],01h test byte[xe],01h
jnz .emul jnz .emul
@@ -1294,6 +1306,7 @@ COPemulmode
%endmacro %endmacro
%macro RTIMacro 0 %macro RTIMacro 0
mov byte[doirqnext],0
cmp byte[nmistatus],3 cmp byte[nmistatus],3
jne .nodis658162 jne .nodis658162
test byte[curexecstate],01h test byte[curexecstate],01h
@@ -1309,26 +1322,39 @@ COPemulmode
mov byte[curnmi],0 mov byte[curnmi],0
test byte[xe],1 test byte[xe],1
jne near emulRTI jne near emulRTI
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov dl,[eax+ebx] call membank0r8
mov [xs],cx
mov dl,al
restoredl restoredl
inc bx
and bx,word[stackand] mov cx,[xs]
mov cl,[eax+ebx] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] xor eax,eax
mov ch,[eax+ebx] call membank0r8
inc bx mov [xpc],al
and bx,word[stackand]
mov al,[eax+ebx] inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpc+1],al
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpb],al mov [xpb],al
mov [xs],bx mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
mov bl,dl mov bl,dl
mov edi,[tableadb+ebx*4] mov edi,[tableadb+ebx*4]
mov bl,[xpb] mov bl,[xpb]
@@ -1371,23 +1397,34 @@ COPemulmode
endloop endloop
emulRTI emulRTI
mov eax,[wramdata] mov cx,[xs]
mov bx,[xs] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] call membank0r8
mov dl,[eax+ebx] mov [xs],cx
mov dl,al
or dl,00110000b or dl,00110000b
restoredl restoredl
inc bx
and bx,word[stackand] mov cx,[xs]
mov cl,[eax+ebx] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] xor eax,eax
mov ch,[eax+ebx] call membank0r8
mov [xs],bx mov [xpc],al
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpc+1],al
mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
mov bl,dl mov bl,dl
mov edi,[tableadb+ebx*4] mov edi,[tableadb+ebx*4]
xor bl,bl xor bl,bl
@@ -1406,22 +1443,44 @@ emulRTI
%endmacro %endmacro
%macro RTLMacro 0 %macro RTLMacro 0
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov cl,[eax+ebx] xor eax,eax
inc bx call membank0r8
and bx,word[stackand] mov [xpc],al
mov ch,[eax+ebx]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov al,[eax+ebx] xor eax,eax
call membank0r8
mov [xpc+1],al
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpb],al mov [xpb],al
mov [xs],bx
; inc bx
; and bx,word[stackand]
; mov cl,[eax+ebx]
; inc bx
; and bx,word[stackand]
; mov ch,[eax+ebx]
; inc bx
; and bx,word[stackand]
; mov al,[eax+ebx]
; mov [xpb],al
mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
inc ax inc ax
mov bl,[xpb] mov bl,[xpb]
mov [xpc],ax mov [xpc],ax
@@ -1439,18 +1498,22 @@ emulRTI
%endmacro %endmacro
%macro RTSMacro 0 %macro RTSMacro 0
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov cl,[eax+ebx] call membank0r8
inc bx mov [xpc],al
and bx,word[stackand]
mov ch,[eax+ebx] inc cx
mov [xs],bx and cx,word[stackand]
call membank0r8
mov [xpc+1],al
mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
inc ax inc ax
mov [xpc],ax mov [xpc],ax
mov bl,[xpb] mov bl,[xpb]

View File

@@ -52,21 +52,21 @@ EXTSYM dmadata
%macro restoredl 0 %macro restoredl 0
mov dword[flagnz],0 mov dword[flagnz],0
test dl,80h test dl,80h
jz %%noneg jz near %%noneg
or dword[flagnz],10000h or dword[flagnz],10000h
%%noneg %%noneg
test dl,2h test dl,2h
jnz %%zero jnz near %%zero
or dword[flagnz],1 or dword[flagnz],1
%%zero %%zero
mov dword[flagc],0 mov dword[flagc],0
test dl,01h test dl,01h
jz %%nocarry jz near %%nocarry
mov dword[flagc],0FFh mov dword[flagc],0FFh
%%nocarry %%nocarry
mov dword[flago],0 mov dword[flago],0
test dl,40h test dl,40h
jz %%nov jz near %%nov
mov dword[flago],0FFh mov dword[flago],0FFh
%%nov %%nov
%endmacro %endmacro
@@ -529,6 +529,7 @@ BRKemulmode
%endmacro %endmacro
%macro COPMacro 0 %macro COPMacro 0
int 3h
inc esi inc esi
test byte[xe],1 test byte[xe],1
jne near COPemulmode jne near COPemulmode
@@ -799,21 +800,25 @@ COPemulmode
sub ebx,[initaddrl] sub ebx,[initaddrl]
add bx,2 add bx,2
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
mov cl,[xpb] mov al,[xpb]
mov [eax+ebx],cl call membank0w8
dec bx
or bx,word[stackor] dec cx
mov cl,[xpc+1] or cx,word[stackor]
mov [eax+ebx],cl mov al,[xpc+1]
dec bx call membank0w8
or bx,word[stackor]
mov cl,[xpc] dec cx
mov [eax+ebx],cl or cx,word[stackor]
dec bx mov al,[xpc]
or bx,word[stackor] call membank0w8
mov [xs],bx
dec cx
or cx,word[stackor]
mov [xs],cx
xor eax,eax xor eax,eax
xor bh,bh xor bh,bh
mov ax,[esi] mov ax,[esi]
@@ -838,20 +843,25 @@ COPemulmode
sub ebx,[initaddrl] sub ebx,[initaddrl]
inc bx inc bx
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
mov cl,[xpc+1] mov al,[xpc+1]
mov [eax+ebx],cl call membank0w8
dec bx
or bx,word[stackor] dec cx
mov cl,[xpc] or cx,word[stackor]
mov [eax+ebx],cl mov al,[xpc]
dec bx call membank0w8
or bx,word[stackor]
dec cx
or cx,word[stackor]
xor eax,eax xor eax,eax
mov [xs],bx mov [xs],cx
mov ax,[esi] mov ax,[esi]
xor bh,bh xor bh,bh
mov [xpc],ax mov [xpc],ax
mov bl,[xpb] mov bl,[xpb]
test eax,8000h test eax,8000h
@@ -885,17 +895,23 @@ COPemulmode
sub ebx,[initaddrl] sub ebx,[initaddrl]
inc bx inc bx
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
mov cl,[xpc+1] mov al,[xpc+1]
mov [eax+ebx],cl call membank0w8
dec bx
or bx,word[stackor] dec cx
mov cl,[xpc] or cx,word[stackor]
mov [eax+ebx],cl mov al,[xpc]
dec bx call membank0w8
or bx,word[stackor]
mov [xs],bx dec cx
or cx,word[stackor]
xor eax,eax
mov [xs],cx
xor eax,eax xor eax,eax
xor bh,bh xor bh,bh
mov cx,[esi] mov cx,[esi]
@@ -1213,21 +1229,21 @@ COPemulmode
%endmacro %endmacro
%macro POPMacroP 0 %macro POPMacroP 0
mov eax,[wramdata] mov cx,[xs]
mov bx,[xs] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] call membank0r8
mov cl,[eax+ebx] mov [xs],cx
mov [xs],bx
xor bh,bh xor bh,bh
mov dl,cl mov dl,al
restoredl restoredl
test byte[xe],01h test byte[xe],01h
jnz near .emul jnz near .emul
mov bl,dl mov bl,dl
mov edi,[tableadc+ebx*4] mov edi,[tableadc+ebx*4]
test dl,00010000b test dl,00010000b
jnz .setx jnz near .setx
endloop endloop
.setx .setx
mov byte[xx+1],0 mov byte[xx+1],0
@@ -1304,41 +1320,55 @@ COPemulmode
%endmacro %endmacro
%macro RTIMacro 0 %macro RTIMacro 0
mov byte[doirqnext],0
cmp byte[nmistatus],3 cmp byte[nmistatus],3
jne .nodis658162 jne near .nodis658162
test byte[curexecstate],01h test byte[curexecstate],01h
jz .nodis65816 jz near .nodis65816
and byte[curexecstate],0FEh and byte[curexecstate],0FEh
call changeexecloop call changeexecloop
.nodis65816 .nodis65816
cmp byte[curexecstate],0 cmp byte[curexecstate],0
jne .nn jne near .nn
xor dh,dh xor dh,dh
.nn .nn
.nodis658162 .nodis658162
mov byte[curnmi],0 mov byte[curnmi],0
test byte[xe],1 test byte[xe],1
jne near emulRTI jne near emulRTI
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov dl,[eax+ebx] call membank0r8
mov [xs],cx
mov dl,al
restoredl restoredl
inc bx
and bx,word[stackand] mov cx,[xs]
mov cl,[eax+ebx] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] xor eax,eax
mov ch,[eax+ebx] call membank0r8
inc bx mov [xpc],al
and bx,word[stackand]
mov al,[eax+ebx] inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpc+1],al
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpb],al mov [xpb],al
mov [xs],bx mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
mov bl,dl mov bl,dl
mov edi,[tableadc+ebx*4] mov edi,[tableadc+ebx*4]
mov bl,[xpb] mov bl,[xpb]
@@ -1358,7 +1388,7 @@ COPemulmode
mov [initaddrl],esi mov [initaddrl],esi
add esi,eax add esi,eax
test dl,00010000b test dl,00010000b
jnz .setx jnz near .setx
endloop endloop
.setx .setx
mov byte[xx+1],0 mov byte[xx+1],0
@@ -1381,29 +1411,40 @@ COPemulmode
endloop endloop
emulRTI emulRTI
mov eax,[wramdata] mov cx,[xs]
mov bx,[xs] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] call membank0r8
mov dl,[eax+ebx] mov [xs],cx
mov dl,al
or dl,00110000b or dl,00110000b
restoredl restoredl
inc bx
and bx,word[stackand] mov cx,[xs]
mov cl,[eax+ebx] inc cx
inc bx and cx,word[stackand]
and bx,word[stackand] xor eax,eax
mov ch,[eax+ebx] call membank0r8
mov [xs],bx mov [xpc],al
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpc+1],al
mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
mov bl,dl mov bl,dl
mov edi,[tableadc+ebx*4] mov edi,[tableadc+ebx*4]
xor bl,bl xor bl,bl
mov [xpc],ax mov [xpc],ax
test eax,8000h test eax,8000h
jz .loweraddr jz near .loweraddr
mov esi,[snesmmap+ebx*4] mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi mov [initaddrl],esi
add esi,eax add esi,eax
@@ -1416,27 +1457,49 @@ emulRTI
%endmacro %endmacro
%macro RTLMacro 0 %macro RTLMacro 0
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov cl,[eax+ebx] xor eax,eax
inc bx call membank0r8
and bx,word[stackand] mov [xpc],al
mov ch,[eax+ebx]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov al,[eax+ebx] xor eax,eax
call membank0r8
mov [xpc+1],al
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpb],al mov [xpb],al
mov [xs],bx
; inc bx
; and bx,word[stackand]
; mov cl,[eax+ebx]
; inc bx
; and bx,word[stackand]
; mov ch,[eax+ebx]
; inc bx
; and bx,word[stackand]
; mov al,[eax+ebx]
; mov [xpb],al
mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
inc ax inc ax
mov bl,[xpb] mov bl,[xpb]
mov [xpc],ax mov [xpc],ax
test eax,8000h test eax,8000h
jz .loweraddr jz near .loweraddr
mov esi,[snesmmap+ebx*4] mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi mov [initaddrl],esi
add esi,eax add esi,eax
@@ -1449,23 +1512,27 @@ emulRTI
%endmacro %endmacro
%macro RTSMacro 0 %macro RTSMacro 0
mov eax,[wramdata]
mov bx,[xs] mov cx,[xs]
inc bx inc cx
and bx,word[stackand] and cx,word[stackand]
mov cl,[eax+ebx] call membank0r8
inc bx mov [xpc],al
and bx,word[stackand]
mov ch,[eax+ebx] inc cx
mov [xs],bx and cx,word[stackand]
call membank0r8
mov [xpc+1],al
mov [xs],cx
xor bh,bh xor bh,bh
xor eax,eax xor eax,eax
mov ax,cx mov ax,[xpc]
inc ax inc ax
mov [xpc],ax mov [xpc],ax
mov bl,[xpb] mov bl,[xpb]
test eax,8000h test eax,8000h
jz .loweraddr jz near .loweraddr
mov esi,[snesmmap+ebx*4] mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi mov [initaddrl],esi
add esi,eax add esi,eax

View File

@@ -66,6 +66,14 @@ NEWSYM initregr
setreg 2180h*4,reg2180r setreg 2180h*4,reg2180r
setreg 4016h*4,reg4016r setreg 4016h*4,reg4016r
setreg 4017h*4,reg4017r setreg 4017h*4,reg4017r
setreg 420Ah*4,reg420Ar
setreg 420Bh*4,reg420Br
setreg 420Ch*4,reg420Cr
setreg 420Dh*4,reg420Dr
setreg 420Eh*4,reg420Er
setreg 420Fh*4,reg420Fr
setreg 4210h*4,reg4210r setreg 4210h*4,reg4210r
setreg 4211h*4,reg4211r setreg 4211h*4,reg4211r
setreg 4212h*4,reg4212r setreg 4212h*4,reg4212r
@@ -888,6 +896,15 @@ reg4017r:
rol dword[JoyENow],1 rol dword[JoyENow],1
ret ret
reg420Ar:
reg420Br:
reg420Cr:
reg420Dr:
reg420Er:
reg420Fr:
xor al,al
ret
; NMI Check Register ; NMI Check Register
reg4210r: reg4210r:
mov al,[NMIEnab] mov al,[NMIEnab]
@@ -896,17 +913,12 @@ reg4210r:
mov byte[NMIEnab],01h mov byte[NMIEnab],01h
.nmi .nmi
mov byte[curnmi],0 mov byte[curnmi],0
ret ret
; Video IRQ Register ; Video IRQ Register
reg4211r: reg4211r:
mov al,[irqon] mov al,[irqon]
mov byte[irqon],0 mov byte[irqon],0
cmp dh,[cycphb]
jae .nohblank
or al,40h
.nohblank
ret ret
; H/V Blank Flag & Joystick Controller Enable Flag ; H/V Blank Flag & Joystick Controller Enable Flag

View File

@@ -534,29 +534,29 @@ BRKemulmode
mov ebx,esi mov ebx,esi
sub ebx,eax sub ebx,eax
mov [xpc],bx mov [xpc],bx
mov eax,[wramdata]
mov bx,[SA1xs] mov cx,[SA1xs]
mov cl,[SA1xpb] mov al,[SA1xpb]
mov [eax+ebx],cl call membank0w8
dec bx dec cx
and bx,word[stackand] mov al,[xpc+1]
or bx,word[stackor] call membank0w8
mov cl,[xpc+1] dec cx
mov [eax+ebx],cl or cx,word[stackor]
dec bx
and bx,word[stackand] mov al,[xpc]
or bx,word[stackor] call membank0w8
mov cl,[xpc] dec cx
mov [eax+ebx],cl or cx,word[stackor]
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl makedl
mov [eax+ebx],dl mov al,dl
dec bx call membank0w8
and bx,word[stackand] dec cx
or bx,word[stackor] or cx,word[stackor]
mov [SA1xs],bx
mov [SA1xs],cx
xor bh,bh xor bh,bh
mov bl,byte[xirqb] mov bl,byte[xirqb]
mov [SA1xpb],bl mov [SA1xpb],bl

View File

@@ -3922,11 +3922,7 @@ ZipDeleteRecurse:
SPC7110Allocated db 0 SPC7110Allocated db 0
SPC7110DIRA db 'FEOEZSP7',0 SPC7110DIRA db 'FEOEZSP7',0
SPC7110DIRB db 'SMHT-SP7',0 SPC7110DIRB db 'SMHT-SP7',0
%ifdef __LINUX__
SDD1DIRA db 'socnsdd1',0
%else
SDD1DIRA db 'SOCNSDD1',0 SDD1DIRA db 'SOCNSDD1',0
%endif
SDD1DIRB db 'SFA2SDD1',0 SDD1DIRB db 'SFA2SDD1',0
SPC7110IndexName db 'INDEX.BIN',0 SPC7110IndexName db 'INDEX.BIN',0
SPC7110DirEntry db '*.BIN',0 SPC7110DirEntry db '*.BIN',0
@@ -4494,6 +4490,90 @@ NEWSYM loadfileGUI
mov byte[lorommapmode2],1 mov byte[lorommapmode2],1
.nosoundnovel .nosoundnovel
cmp dword[esi+7FC0h],'HONK'
jne near .nothonk
cmp dword[esi+7FC4h],'AKUH'
jne near .nothonk
cmp dword[esi+7FC8h],'A IG'
jne near .nothonk
cmp dword[esi+7FCCh],'O GO'
jne near .nothonk
cmp dword[esi+7FD0h],'SEI '
jne near .nothonk
mov esi,.romtable
mov eax,16
mov ebx,16
.honkl1
mov [esi],bl
add esi,2
add ebx,1
sub eax,1
jne .honkl1
mov esi,.romtable
inc esi
mov eax,16
mov ebx,0
.honkl2
mov [esi],bl
add esi,2
add ebx,1
sub eax,1
jne .honkl2
mov esi,.romtableb
mov eax,32
mov ebx,0
.honkl3
mov [esi],bl
add esi,1
add ebx,1
sub eax,1
jne .honkl3
xor eax,eax
xor ebx,ebx
mov eax,0 ; current dest bank
.honkswapbanks
mov bl,[.romtable+eax] ; current source bank
xor ecx,ecx
.honkfindbank
inc ecx
cmp byte [.romtableb-1+ecx],bl
jne .honkfindbank
dec ecx
mov dl, [.romtableb+eax]
mov byte [.romtableb+ecx],dl
mov byte [.romtableb+eax],cl
mov esi,eax
shl esi,15
add esi,[romdata]
mov edi,ecx
shl edi,15
add edi,[romdata]
mov edx,0
.honkcopybank
mov bl,[esi+edx]
mov bh,[edi+edx]
mov [esi+edx],bh
mov [edi+edx],bl
inc edx
cmp edx,32768
jne .honkcopybank
inc eax
cmp eax,32
jne .honkswapbanks
.nothonk
cmp dword[esi+207FC0h],'WIZA' cmp dword[esi+207FC0h],'WIZA'
jne near .notwiz4 jne near .notwiz4
cmp dword[esi+207FC4h],'RDRY' cmp dword[esi+207FC4h],'RDRY'
@@ -4502,58 +4582,82 @@ NEWSYM loadfileGUI
jne near .notwiz4 jne near .notwiz4
cmp dword[esi+207FCDh],'EN 4' cmp dword[esi+207FCDh],'EN 4'
jne near .notwiz4 jne near .notwiz4
mov eax,100000h
.loopwiz4 .loopwiz4
mov bl,[esi] mov esi,.romtable
mov bh,[esi+200000h] mov eax,64
mov [esi+200000h],bl mov ebx,64
mov [esi],bh .wiz4l1
inc esi mov [esi],bl
dec eax add esi,2
jnz .loopwiz4 add ebx,1
jmp .notwiz4 sub eax,1
jne .wiz4l1
pushad mov esi,.romtable
mov edi,mode7tab+256 inc esi
mov ecx,256 mov eax,64
xor al,al mov ebx,0
.nextlb2 .wiz4l2
mov [edi],al mov [esi],bl
inc al add esi,2
inc edi add ebx,1
sub eax,1
jne .wiz4l2
mov esi,.romtableb
mov eax,128
mov ebx,0
.wiz4l3
mov [esi],bl
add esi,1
add ebx,1
sub eax,1
jne .wiz4l3
xor eax,eax
xor ebx,ebx
mov eax,0 ; current dest bank
.wiz4swapbanks
mov bl,[.romtable+eax] ; current source bank
xor ecx,ecx
.wiz4findbank
inc ecx
cmp byte [.romtableb-1+ecx],bl
jne .wiz4findbank
dec ecx dec ecx
jnz .nextlb2
mov edi,mode7tab+256 mov dl, [.romtableb+eax]
; 0,4,8,C mov byte [.romtableb+ecx],dl
; 0,64,1,65,2,... (1st 3MB, 1st 1MB) mov byte [.romtableb+eax],cl
; (2nd 4MB?, 2nd 2MB)
mov dl,4 mov esi,eax
.nextl2 shl esi,15
mov eax,4 add esi,[romdata]
sub al,dl
mov bl,[.table+eax*2] mov edi,ecx
mov bh,[.table+eax*2+1] shl edi,15
mov ecx,16 add edi,[romdata]
.nextl
mov [edi],bl mov edx,0
mov [edi+1],bh .wiz4copybank
inc bl mov bl,[esi+edx]
inc bh mov bh,[edi+edx]
add edi,2 mov [esi+edx],bh
dec ecx mov [edi+edx],bl
jnz .nextl inc edx
add bl,16 cmp edx,32768
add bh,16 jne .wiz4copybank
dec dl
jnz .nextl2 inc eax
jmp .skiptable cmp eax,128
; O O O O ? ? ? ? jne .wiz4swapbanks
.table db 0,64,96+16,32+16,32,96,0+16,64+16
.skiptable jmp near .notwiz4
mov dword[NumofBanks],20h*4
call SwapTable256 .romtable times 128 db 0
call UnInterleave .romtableb times 128 db 0
popad
.notwiz4 .notwiz4
jmp .skipall jmp .skipall