📄 65816dc.inc
字号:
dec cx
or cx,word[stackor]
xor eax,eax
mov [xs],cx
mov ax,[esi]
xor bh,bh
mov [xpc],ax
mov bl,[xpb]
test eax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
.loweraddr
mov esi,[snesmap2+ebx*4]
cmp eax,4300h
jae .upperlower
mov [initaddrl],esi
add esi,eax
endloop
.upperlower
cmp dword[memtabler8+ebx*4],regaccessbankr8
je .dma
mov [initaddrl],esi
add esi,eax
endloop
.dma
mov esi,dmadata-4300h
mov [initaddrl],esi
add esi,eax
endloop
%endmacro
%macro JSRMacroFC 0
mov ebx,esi
sub ebx,[initaddrl]
inc bx
mov [xpc],bx
mov cx,[xs]
mov al,[xpc+1]
call membank0w8
dec cx
or cx,word[stackor]
mov al,[xpc]
call membank0w8
dec cx
or cx,word[stackor]
xor eax,eax
mov [xs],cx
xor eax,eax
xor bh,bh
mov cx,[esi]
mov bl,[xpb]
add cx,[xx]
call dword near [memtabler16+ebx*4]
mov [xpc],ax
mov bl,[xpb]
test eax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
%endmacro
%macro LDAMacro8b 0
mov dword[flagnz],0
mov [xa],al
mov [flagnz+1],al
endloop
%endmacro
%macro LDAMacro16b 0
mov [xa],ax
flagsetnz16b
endloop
%endmacro
%macro LDXMacro8b 0
mov dword[flagnz],0
mov [xx],al
mov [flagnz+1],al
endloop
%endmacro
%macro LDXMacro16b 0
mov [xx],ax
flagsetnz16b
endloop
%endmacro
%macro LDYMacro8b 0
mov dword[flagnz],0
mov [xy],al
mov [flagnz+1],al
endloop
%endmacro
%macro LDYMacro16b 0
mov [xy],ax
flagsetnz16b
endloop
%endmacro
%macro LSRMacro8b 0
shr al,1
flagsetnzc8b
%endmacro
%macro LSRMacro16b 0
shr ax,1
flagsetnzc
%endmacro
%macro MVNMacro 0
mov ax,[esi]
mov [xdb],al
mov bl,ah
mov cx,[xx]
call dword near [memtabler8+ebx*4]
mov bl,[xdb]
mov cx,[xy]
call dword near [memtablew8+ebx*4]
test dl,10h
jnz near .pagezero
inc word[xx]
inc word[xy]
dec word[xa]
cmp word[xa],0FFFFh
je .endmove
dec esi
endloop
.endmove
add esi,2
endloop
.pagezero
inc byte[xx]
inc byte[xy]
dec word[xa]
cmp word[xa],0FFFFh
je .endmove
dec esi
endloop
%endmacro
%macro MVPMacro 0
mov ax,[esi]
mov [xdb],al
mov bl,ah
mov cx,[xx]
call dword near [memtabler8+ebx*4]
mov bl,[xdb]
mov cx,[xy]
call dword near [memtablew8+ebx*4]
test dl,10h
jnz near .pagezero
dec word[xx]
dec word[xy]
dec word[xa]
cmp word[xa],0FFFFh
je .endmove
dec esi
endloop
.endmove
add esi,2
endloop
.pagezero
dec byte[xx]
dec byte[xy]
dec word[xa]
cmp word[xa],0FFFFh
je .endmove
dec esi
endloop
%endmacro
%macro ORAMacro8b 0
or al,[xa]
mov dword[flagnz],0
mov [xa],al
mov [flagnz+1],al
endloop
%endmacro
%macro ORAMacro16b 0
or ax,[xa]
mov [xa],ax
flagsetnz16b
%endmacro
%macro PUSHMacro8b 1
mov eax,[wramdata]
mov cx,[xs]
mov al,%1
call membank0w8
dec cx
or cx,word[stackor]
mov [xs],cx
endloop
%endmacro
%macro PUSHMacro8bp 0
mov eax,[wramdata]
makedl
mov cx,[xs]
mov al,dl
call membank0w8
dec cx
or cx,word[stackor]
mov [xs],cx
endloop
%endmacro
%macro PUSHMacro16b 2
mov cx,[xs]
mov al,%2
call membank0w8
dec cx
or cx,word[stackor]
mov al,%1
call membank0w8
dec cx
or cx,word[stackor]
mov [xs],cx
endloop
%endmacro
%macro PEAMacro 0
mov cx,[xs]
mov al,[esi+1]
call membank0w8
dec cx
or cx,word[stackor]
mov al,[esi]
call membank0w8
dec cx
or cx,word[stackor]
mov [xs],cx
add esi,2
endloop
%endmacro
%macro PEIMacro 0
xor ah,ah
mov al,[esi]
mov cx,[xd]
inc esi
add cx,ax
call membank0r16
mov cx,[xs]
push eax
mov al,ah
call membank0w8
pop eax
dec cx
or cx,word[stackor]
call membank0w8
dec cx
or cx,word[stackor]
mov [xs],cx
endloop
%endmacro
%macro PERMacro 0
mov bl,[xpb]
mov ax,[xpc]
test eax,8000h
jz .loweraddr
mov eax,[snesmmap+ebx*4]
mov ebx,esi
sub ebx,eax
add bx,[esi]
mov ax,bx
add esi,2
add ax,2
mov cx,[xs]
push eax
mov al,ah
call membank0w8
pop eax
dec cx
or cx,word[stackor]
call membank0w8
dec cx
or cx,word[stackor]
mov [xs],cx
xor ebx,ebx
endloop
.loweraddr
mov eax,[snesmap2+ebx*4]
mov ebx,esi
sub ebx,eax
add bx,[esi]
mov ax,bx
add esi,2
add ax,2
mov cx,[xs]
push eax
mov al,ah
call membank0w8
pop eax
dec cx
or cx,word[stackor]
call membank0w8
dec cx
or cx,word[stackor]
mov [xs],cx
xor ebx,ebx
endloop
%endmacro
%macro POPMacro8b 1
mov eax,[wramdata]
mov cx,[xs]
inc cx
and cx,word[stackand]
call membank0r8
mov [xs],cx
mov %1,al
flagsetnz8b
endloop
%endmacro
%macro POPMacro16b 2
mov eax,[wramdata]
mov cx,[xs]
inc cx
and cx,word[stackand]
call membank0r8
mov %1,al
mov [xs],cx
inc cx
and cx,word[stackand]
call membank0r8
mov %2,al
mov [xs],cx
mov ah,al
mov al,%1
flagsetnz16b
%endmacro
%macro POPMacro16bd 2
mov eax,[wramdata]
mov cx,[xs]
inc cx
and cx,word[stackand]
call membank0r8
mov %1,al
mov [xs],cx
inc cx
and cx,word[stackand]
call membank0r8
mov %2,al
call UpdateDPage
mov [xs],cx
mov ah,al
mov al,%1
flagsetnz16b
%endmacro
%macro POPMacroP 0
mov cx,[xs]
inc cx
and cx,word[stackand]
call membank0r8
mov [xs],cx
xor bh,bh
mov dl,al
restoredl
test byte[xe],01h
jnz near .emul
mov bl,dl
mov edi,[tableadc+ebx*4]
test dl,00010000b
jnz near .setx
endloop
.setx
mov byte[xx+1],0
mov byte[xy+1],0
endloop
.emul
or dl,00110000b
mov bl,dl
mov edi,[tableadc+ebx*4]
endloop
%endmacro
%macro REPMacro 0
mov al,[esi]
inc esi
test al,11000011b
jnz near .extraflags
not al
and dl,al
test byte[xe],01h
jnz .emul
mov bl,dl
mov edi,[tableadc+ebx*4]
endloop
.emul
or dl,00110000b
mov bl,dl
mov edi,[tableadc+ebx*4]
endloop
.extraflags
not al
makedl
and dl,al
restoredl
test byte[xe],01h
jnz .emul2
mov bl,dl
mov edi,[tableadc+ebx*4]
endloop
.emul2
or dl,00110000b
mov bl,dl
mov edi,[tableadc+ebx*4]
endloop
%endmacro
%macro ROLMacro8b 0
mov cl,[flagc]
add cl,cl
rcl al,1
flagsetnzc8b
%endmacro
%macro ROLMacro16b 0
mov cl,[flagc]
add cl,cl
rcl ax,1
flagsetnzc
%endmacro
%macro RORMacro8b 0
mov cl,[flagc]
add cl,cl
rcr al,1
flagsetnzc8b
%endmacro
%macro RORMacro16b 0
mov cl,[flagc]
add cl,cl
rcr ax,1
flagsetnzc
%endmacro
%macro RTIMacro 0
mov byte[doirqnext],0
cmp byte[nmistatus],3
jne near .nodis658162
test byte[curexecstate],01h
jz near .nodis65816
and byte[curexecstate],0FEh
call changeexecloop
.nodis65816
cmp byte[curexecstate],0
jne near .nn
xor dh,dh
.nn
.nodis658162
mov byte[curnmi],0
test byte[xe],1
jne near emulRTI
mov cx,[xs]
inc cx
and cx,word[stackand]
call membank0r8
mov [xs],cx
mov dl,al
restoredl
mov cx,[xs]
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpc],al
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 [xs],cx
xor bh,bh
xor eax,eax
mov ax,[xpc]
mov bl,dl
mov edi,[tableadc+ebx*4]
mov bl,[xpb]
mov [xpc],ax
test eax,8000h
jz near .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
cmp byte[esi],0CBh
jne .notwai
mov byte[intrset],2
.notwai
test dl,00010000b
jnz near .setx
endloop
.loweraddr
mov esi,[snesmap2+ebx*4]
cmp eax,4300h
jae near .upperlower
mov [initaddrl],esi
add esi,eax
cmp byte[esi],0CBh
jne .notwai2
mov byte[intrset],2
.notwai2
test dl,00010000b
jnz near .setx
endloop
.setx
mov byte[xx+1],0
mov byte[xy+1],0
endloop
.upperlower
cmp dword[memtabler8+ebx*4],regaccessbankr8
je near .dma
mov [initaddrl],esi
add esi,eax
test dl,00010000b
jnz near .setx
endloop
.dma
mov esi,dmadata-4300h
mov [initaddrl],esi
add esi,eax
test dl,00010000b
jnz near .setx
endloop
emulRTI
mov cx,[xs]
inc cx
and cx,word[stackand]
call membank0r8
mov [xs],cx
mov dl,al
or dl,00110000b
restoredl
mov cx,[xs]
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
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 eax,eax
mov ax,[xpc]
mov bl,dl
mov edi,[tableadc+ebx*4]
xor bl,bl
mov [xpc],ax
test eax,8000h
jz near .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
%endmacro
%macro RTLMacro 0
mov cx,[xs]
inc cx
and cx,word[stackand]
xor eax,eax
call membank0r8
mov [xpc],al
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
; 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 eax,eax
mov ax,[xpc]
inc ax
mov bl,[xpb]
mov [xpc],ax
test eax,8000h
jz near .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
%endmacro
%macro RTSMacro 0
mov cx,[xs]
inc cx
and cx,word[stackand]
call membank0r8
mov [xpc],al
inc cx
and cx,word[stackand]
call membank0r8
mov [xpc+1],al
mov [xs],cx
xor bh,bh
xor eax,eax
mov ax,[xpc]
inc ax
mov [xpc],ax
mov bl,[xpb]
test eax,8000h
jz near .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
%endmacro
%macro SBCMacro8bnd 0
mov cl,[flagc]
sub cl,1
sbb [xa],al
flagsetnvzcs8b
endloop
%endmacro
%macro SBCMacro16bnd 0
mov cl,[flagc]
sub cl,1
sbb [xa],ax
flagsetnvzcs16b
endloop
%endmacro
%macro SBCMacro8bd 0
mov cl,[flagc]
sub cl,1
mov cl,al
mov al,[xa]
sbb al,cl
das
mov [xa],al
flagsetnvzcs8b
endloop
%endmacro
%macro SBCMacro16bd 0
mov cl,[flagc]
sub cl,1
mov cx,ax
mov al,[xa]
sbb al,cl
das
mov [xa],al
mov al,[xa+1]
sbb al,ch
das
mov [xa+1],al
cmc
flagsetnvzcd
endloop
%endmacro
%macro SEPMacro 0
mov al,[esi]
inc esi
test al,11000011b
jnz near .extraflags
or dl,al
mov bl,dl
mov edi,[tableadc+ebx*4]
test dl,00010000b
jnz .setx
endloop
.setx
mov byte[xx+1],0
mov byte[xy+1],0
endloop
.extraflags
makedl
or dl,al
restoredl
mov bl,dl
mov edi,[tableadc+ebx*4]
test dl,00010000b
jnz .setx2
endloop
.setx2
mov byte[xx+1],0
mov byte[xy+1],0
endloop
%endmacro
%macro STAMacro8b 0
mov al,[xa]
%endmacro
%macro STAMacro16b 0
mov eax,[xa]
%endmacro
%macro STXMacro8b 0
mov al,[xx]
%endmacro
%macro STXMacro16b 0
mov eax,[xx]
%endmacro
%macro STYMacro8b 0
mov al,[xy]
%endmacro
%macro STYMacro16b 0
mov eax,[xy]
%endmacro
%macro WAIMacro 0
cmp byte[intrset],1
jne .notws
dec esi
endloop
.notws
test byte[intrset],0FFh
jz .waitstate
cmp byte[intrset],2
je .stopint
dec esi
endloop
.waitstate
mov byte[intrset],1
dec esi
endloop
.stopint
mov byte[intrset],0
mov byte[doirqnext],0
endloop
%endmacro
%macro XCEMacro 0
mov al,[flagc]
mov dword[flagc],0
and al,00000001b
cmp [xe],al
jne .nochange
endloop
.nochange
test byte[xe],0FFh
jz .noemul
mov dword[flagc],0FFh
.noemul
mov [xe],al
test byte[xe],01h
jnz .emul
or dl,00100000b
mov word[stackand],0FFFFh
mov word[stackor],0000h
endloop
.emul
or dl,00110000b
mov bl,dl
mov edi,[tableadc+ebx*4]
mov byte[xx+1],0
mov byte[xy+1],0
mov byte[xs+1],1
mov word[stackand],01FFh
mov word[stackor],0100h
endloop
%endmacro
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -