bank0 fix
This commit is contained in:
@@ -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
|
||||||
@@ -799,21 +799,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 +842,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 +894,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 +1228,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 +1319,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 +1387,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 +1410,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 +1456,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 +1511,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
|
||||||
|
|||||||
Reference in New Issue
Block a user