📄 65816d.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 .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 .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 cx,[xs] mov al,%1 call membank0w8 dec cx or cx,word[stackor] mov [xs],cx endloop%endmacro%macro PUSHMacro8bp 0 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 cx,[xs] inc cx and cx,word[stackand] call membank0r8 mov [xs],cx mov %1,al flagsetnz8b endloop%endmacro%macro POPMacro16b 2 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 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 .emul mov bl,dl mov edi,[tablead+ebx*4] test dl,00010000b jnz .setx endloop.setx mov byte[xx+1],0 mov byte[xy+1],0 endloop.emul or dl,00110000b mov bl,dl mov edi,[tablead+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,[tablead+ebx*4] endloop.emul or dl,00110000b mov bl,dl mov edi,[tablead+ebx*4] endloop.extraflags not al makedl and dl,al restoredl test byte[xe],01h jnz .emul2 mov bl,dl mov edi,[tablead+ebx*4] endloop.emul2 or dl,00110000b mov bl,dl mov edi,[tablead+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 cmp byte[nmistatus],3 jne .nodis658162 test byte[curexecstate],01h jz .nodis65816 and byte[curexecstate],0FEh.nodis65816 cmp byte[curexecstate],0 jne .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,[tablead+ebx*4] mov bl,[xpb] mov [xpc],ax 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 cmp byte[esi],0CBh jne .notwai mov byte[intrset],2.notwai test dl,00010000b jnz .setx endloop.setx mov byte[xx+1],0 mov byte[xy+1],0 endloop.upperlower cmp dword[memtabler8+ebx*4],regaccessbankr8 je .dma mov byte[doirqnext],0 mov [initaddrl],esi add esi,eax cmp byte[esi],0CBh jne .notwai2 mov byte[intrset],2.notwai2 test dl,00010000b jnz .setx endloop.dma mov esi,dmadata-4300h mov [initaddrl],esi add esi,eax test dl,00010000b jnz .setx endloopemulRTI 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,[tablead+ebx*4] xor bl,bl mov [xpc],ax 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 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 .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 .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 .extraflags or dl,al mov bl,dl mov edi,[tablead+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,[tablead+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,[tablead+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 + -