📄 s65816d.inc
字号:
mov al,[xpc+1]
call membank0w8
dec cx
or cx,word[stackor]
mov al,[xpc]
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],cx
xor eax,eax
xor bh,bh
mov ax,[esi]
mov bl,[esi+2]
mov [xpc],ax
mov [SA1xpb],bl
test eax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
.loweraddr
cmp ebx,0
jne .notupper
cmp eax,2000h
ja .upperbank
.notupper
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
endloop
.upperbank
mov esi,IRAM
sub esi,3000h
mov [initaddrl],esi
add esi,eax
endloop
%endmacro
%macro JSRMacro20 0
mov ebx,esi
sub ebx,[initaddrl]
inc bx
mov [xpc],bx
mov cx,[SA1xs]
mov al,[xpc+1]
call membank0w8
dec cx
or cx,word[stackor]
mov al,[xpc]
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],cx
xor eax,eax
mov ax,[esi]
xor bh,bh
mov [xpc],ax
mov bl,[SA1xpb]
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
mov [initaddrl],esi
add esi,eax
endloop
%endmacro
%macro JSRMacroFC 0
mov ebx,esi
sub ebx,[initaddrl]
inc bx
mov [xpc],bx
mov cx,[SA1xs]
mov al,[xpc+1]
call membank0w8
dec cx
or cx,word[stackor]
mov al,[xpc]
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],cx
xor eax,eax
xor bh,bh
mov cx,[esi]
mov bl,[SA1xpb]
add cx,[SA1xx]
call dword near [memtabler16+ebx*4]
mov [xpc],ax
mov bl,[SA1xpb]
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[Sflagnz],0
mov [SA1xa],al
mov [Sflagnz+1],al
endloop
%endmacro
%macro LDAMacro16b 0
mov [SA1xa],ax
flagsetnz16b
endloop
%endmacro
%macro LDXMacro8b 0
mov dword[Sflagnz],0
mov [SA1xx],al
mov [Sflagnz+1],al
endloop
%endmacro
%macro LDXMacro16b 0
mov [SA1xx],ax
flagsetnz16b
endloop
%endmacro
%macro LDYMacro8b 0
mov dword[Sflagnz],0
mov [SA1xy],al
mov [Sflagnz+1],al
endloop
%endmacro
%macro LDYMacro16b 0
mov [SA1xy],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 [SA1xdb],al
mov bl,ah
mov cx,[SA1xx]
call dword near [memtabler8+ebx*4]
mov bl,[SA1xdb]
mov cx,[SA1xy]
call dword near [memtablew8+ebx*4]
test dl,10h
jnz .pagezero
inc word[SA1xx]
inc word[SA1xy]
dec word[SA1xa]
cmp word[SA1xa],0FFFFh
je .endmove
dec esi
endloop
.endmove
add esi,2
endloop
.pagezero
inc byte[SA1xx]
inc byte[SA1xy]
dec word[SA1xa]
cmp word[SA1xa],0FFFFh
je .endmove
dec esi
endloop
%endmacro
%macro MVPMacro 0
mov ax,[esi]
mov [SA1xdb],al
mov bl,ah
mov cx,[SA1xx]
call dword near [memtabler8+ebx*4]
mov bl,[SA1xdb]
mov cx,[SA1xy]
call dword near [memtablew8+ebx*4]
test dl,10h
jnz .pagezero
dec word[SA1xx]
dec word[SA1xy]
dec word[SA1xa]
cmp word[SA1xa],0FFFFh
je .endmove
dec esi
endloop
.endmove
add esi,2
endloop
.pagezero
dec byte[SA1xx]
dec byte[SA1xy]
dec word[SA1xa]
cmp word[SA1xa],0FFFFh
je .endmove
dec esi
endloop
%endmacro
%macro ORAMacro8b 0
or al,[SA1xa]
mov dword[Sflagnz],0
mov [SA1xa],al
mov [Sflagnz+1],al
endloop
%endmacro
%macro ORAMacro16b 0
or ax,[SA1xa]
mov [SA1xa],ax
flagsetnz16b
%endmacro
%macro PUSHMacro8b 1
mov eax,[wramdata]
mov cx,[SA1xs]
mov al,%1
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],cx
endloop
%endmacro
%macro PUSHMacro8bp 0
mov eax,[wramdata]
makedl
mov cx,[SA1xs]
mov al,dl
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],cx
endloop
%endmacro
%macro PUSHMacro16b 2
mov cx,[SA1xs]
mov al,%2
call membank0w8
dec cx
or cx,word[stackor]
mov al,%1
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],cx
endloop
%endmacro
%macro PEAMacro 0
mov cx,[SA1xs]
mov al,[esi+1]
call membank0w8
dec cx
or cx,word[stackor]
mov al,[esi]
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],cx
add esi,2
endloop
%endmacro
%macro PEIMacro 0
xor ah,ah
mov al,[esi]
mov cx,[SA1xd]
inc esi
add cx,ax
call membank0r16
mov cx,[SA1xs]
push eax
mov al,ah
call membank0w8
pop eax
dec cx
or cx,word[stackor]
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],cx
endloop
%endmacro
%macro PERMacro 0
mov bl,[SA1xpb]
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,[SA1xs]
push eax
mov al,ah
call membank0w8
pop eax
dec cx
or cx,word[stackor]
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],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,[SA1xs]
push eax
mov al,ah
call membank0w8
pop eax
dec cx
or cx,word[stackor]
call membank0w8
dec cx
or cx,word[stackor]
mov [SA1xs],cx
xor ebx,ebx
endloop
%endmacro
%macro POPMacro8b 1
mov eax,[wramdata]
mov cx,[SA1xs]
inc cx
and cx,word[stackand]
call membank0r8
mov [SA1xs],cx
mov %1,al
flagsetnz8b
endloop
%endmacro
%macro POPMacro16b 2
mov eax,[wramdata]
mov cx,[SA1xs]
inc cx
and cx,word[stackand]
call membank0r8
mov %1,al
mov [SA1xs],cx
inc cx
and cx,word[stackand]
call membank0r8
mov %2,al
mov [SA1xs],cx
mov ah,al
mov al,%1
flagsetnz16b
%endmacro
%macro POPMacro16bd 2
mov eax,[wramdata]
mov cx,[SA1xs]
inc cx
and cx,word[stackand]
call membank0r8
mov %1,al
mov [SA1xs],cx
inc cx
and cx,word[stackand]
call membank0r8
mov %2,al
call SA1UpdateDPage
mov [SA1xs],cx
mov ah,al
mov al,%1
flagsetnz16b
%endmacro
%macro POPMacroP 0
mov cx,[SA1xs]
inc cx
and cx,word[stackand]
call membank0r8
mov [SA1xs],cx
mov dl,al
restoredl
test byte[xe],01h
jnz .emul
mov bl,dl
mov edi,[SA1tablead+ebx*4]
test dl,00010000b
jnz .setx
endloop
.setx
mov byte[SA1xx+1],0
mov byte[SA1xy+1],0
endloop
.emul
or dl,00110000b
mov bl,dl
mov edi,[SA1tablead+ebx*4]
endloop
%endmacro
%macro REPMacro 0
mov al,[esi]
inc esi
test al,11000011b
jnz .extraflags
not al
and dl,al
test byte[xe],01h
jnz .emul
mov bl,dl
mov edi,[SA1tablead+ebx*4]
endloop
.emul
or dl,00110000b
mov bl,dl
mov edi,[SA1tablead+ebx*4]
endloop
.extraflags
not al
makedl
and dl,al
restoredl
test byte[xe],01h
jnz .emul2
mov bl,dl
mov edi,[SA1tablead+ebx*4]
endloop
.emul2
or dl,00110000b
mov bl,dl
mov edi,[SA1tablead+ebx*4]
endloop
%endmacro
%macro ROLMacro8b 0
mov cl,[Sflagc]
add cl,cl
rcl al,1
flagsetnzc8b
%endmacro
%macro ROLMacro16b 0
mov cl,[Sflagc]
add cl,cl
rcl ax,1
flagsetnzc
%endmacro
%macro RORMacro8b 0
mov cl,[Sflagc]
add cl,cl
rcr al,1
flagsetnzc8b
%endmacro
%macro RORMacro16b 0
mov cl,[Sflagc]
add cl,cl
rcr ax,1
flagsetnzc
%endmacro
%macro RTIMacro 0
cmp byte[curexecstate],0
jne .nn
xor dh,dh
.nn
.nodis658162
mov byte[curnmi],0
mov cx,[SA1xs]
inc cx
and cx,word[stackand]
call membank0r8
mov dl,al
restoredl
inc cx
and cx,word[stackand]
call membank0r8
mov [xpc],al
inc cx
and cx,word[stackand]
call membank0r8
mov [xpc+1],al
inc cx
and cx,word[stackand]
call membank0r8
mov [SA1xpb],al
mov [SA1xs],cx
xor bh,bh
xor eax,eax
mov bl,dl
mov edi,[SA1tablead+ebx*4]
mov bl,[SA1xpb]
mov ax,[xpc]
test eax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
test dl,00010000b
jnz .setx
endloop
.loweraddr
mov esi,[snesmap2+ebx*4]
cmp eax,4300h
jae .upperlower
mov [initaddrl],esi
add esi,eax
test dl,00010000b
jnz .setx
endloop
.setx
mov byte[SA1xx+1],0
mov byte[SA1xy+1],0
endloop
.upperlower
cmp dword[memtabler8+ebx*4],regaccessbankr8
je .dma
mov [initaddrl],esi
add esi,eax
test dl,00010000b
jnz .setx
endloop
.dma
mov esi,dmadata-4300h
mov [initaddrl],esi
add esi,eax
test dl,00010000b
jnz .setx
endloop
%endmacro
%macro RTLMacro 0
mov cx,[SA1xs]
inc cx
and cx,word[stackand]
call membank0r8
mov [xpc],al
inc cx
and cx,word[stackand]
call membank0r8
mov [xpc+1],al
inc cx
and cx,word[stackand]
call membank0r8
mov [SA1xpb],al
mov [SA1xs],cx
xor bh,bh
xor eax,eax
inc word[xpc]
mov bl,[SA1xpb]
mov ax,[xpc]
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 RTSMacro 0
mov cx,[SA1xs]
inc cx
and cx,word[stackand]
call membank0r8
mov [xpc],al
inc cx
and cx,word[stackand]
call membank0r8
mov [xpc+1],al
mov [SA1xs],cx
xor bh,bh
inc word[xpc]
xor eax,eax
mov ax,[xpc]
mov bl,[SA1xpb]
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 SBCMacro8bnd 0
mov cl,[Sflagc]
sub cl,1
sbb [SA1xa],al
flagsetnvzcs8b
endloop
%endmacro
%macro SBCMacro16bnd 0
mov cl,[Sflagc]
sub cl,1
sbb [SA1xa],ax
flagsetnvzcs16b
endloop
%endmacro
%macro SBCMacro8bd 0
mov cl,[Sflagc]
sub cl,1
mov cl,al
mov al,[SA1xa]
sbb al,cl
das
mov [SA1xa],al
flagsetnvzcs8b
endloop
%endmacro
%macro SBCMacro16bd 0
mov cl,[Sflagc]
sub cl,1
mov cx,ax
mov al,[SA1xa]
sbb al,cl
das
mov [SA1xa],al
mov al,[SA1xa+1]
sbb al,ch
das
mov [SA1xa+1],al
cmc
flagsetnvzcd
endloop
%endmacro
%macro SEPMacro 0
mov al,[esi]
inc esi
test al,11000011b
jnz .extraflags
or dl,al
mov bl,dl
mov edi,[SA1tablead+ebx*4]
test dl,00010000b
jnz .setx
endloop
.setx
mov byte[SA1xx+1],0
mov byte[SA1xy+1],0
endloop
.extraflags
makedl
or dl,al
restoredl
mov bl,dl
mov edi,[SA1tablead+ebx*4]
test dl,00010000b
jnz .setx2
endloop
.setx2
mov byte[SA1xx+1],0
mov byte[SA1xy+1],0
endloop
%endmacro
%macro STAMacro8b 0
mov al,[SA1xa]
%endmacro
%macro STAMacro16b 0
mov eax,[SA1xa]
%endmacro
%macro STXMacro8b 0
mov al,[SA1xx]
%endmacro
%macro STXMacro16b 0
mov eax,[SA1xx]
%endmacro
%macro STYMacro8b 0
mov al,[SA1xy]
%endmacro
%macro STYMacro16b 0
mov eax,[SA1xy]
%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
endloop
%endmacro
%macro XCEMacro 0
mov al,[Sflagc]
mov dword[Sflagc],0
and al,00000001b
test byte[xe],0FFh
jz .noemul
mov dword[Sflagc],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,[SA1tablead+ebx*4]
mov byte[SA1xx+1],0
mov byte[SA1xy+1],0
mov byte[SA1xs+1],1
mov word[stackand],01FFh
mov word[stackor],0100h
endloop
%endmacro
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -