⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s65816d.inc

📁 linux下的任天堂模拟器代码。供大家参考。
💻 INC
📖 第 1 页 / 共 2 页
字号:
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach );;http://www.zsnes.com;http://sourceforge.net/projects/zsnes;https://zsnes.bountysource.com;;This program is free software; you can redistribute it and/or;modify it under the terms of the GNU General Public License;version 2 as published by the Free Software Foundation.;;This program is distributed in the hope that it will be useful,;but WITHOUT ANY WARRANTY; without even the implied warranty of;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the;GNU General Public License for more details.;;You should have received a copy of the GNU General Public License;along with this program; if not, write to the Free Software;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.EXTSYM Sflagnz,Sflago,Sflagc,dmadata,IRAM%ifndef NO_DEBUGGEREXTSYM debuggeron%endif;*******************************************************; Flag Setting Macros;*******************************************************%macro endloop 0;    call sa1debug    mov bl,[esi]    inc esi    sub dh,[cpucycle+ebx]    jc %%cpuover    jmp dword near [edi+ebx*4]%%cpuover    ret%endmacro%macro restoredl 0   mov dword[Sflagnz],0   test dl,80h   jz %%noneg   or dword[Sflagnz],10000h%%noneg   test dl,2h   jnz %%zero   or dword[Sflagnz],1%%zero   mov dword[Sflagc],0   test dl,01h   jz %%nocarry   mov dword[Sflagc],0FFh%%nocarry   mov dword[Sflago],0   test dl,40h   jz %%nov   mov dword[Sflago],0FFh%%nov%endmacro%macro makedl 0   and dl,00111100b   test dword[Sflagnz],18000h   jz %%noneg   or dl,80h%%noneg   test dword[Sflagnz],0FFFFh   jnz %%nozero   or dl,02h%%nozero   test dword[Sflagc],0FFh   jz %%nocarry   or dl,01h%%nocarry   test dword[Sflago],0FFh   jz %%nov   or dl,40h%%nov%endmacroSECTION .textNEWSYM Ssplitflags   restoredl   retNEWSYM Sjoinflags   makedl   ret; Sets flags n and z according to al%macro flagsetnz8b 0    mov dword[Sflagnz],0    mov [Sflagnz+1],al    endloop%endmacro; Sets flags n and z according to ax%macro flagsetnz16b 0    mov cx,ax    mov [Sflagnz],ecx    endloop%endmacro; Sets flags n and z according to al%macro flagsetnz8bnel 0    mov dword[Sflagnz],0    mov [Sflagnz+1],al%endmacro; Sets flags n and z according to ax%macro flagsetnz16bnel 0    mov cx,ax    mov [Sflagnz],ecx%endmacro; Sets flags N V . . . . Z C according to flags%macro flagsetnvzc8b 0    mov dword[Sflagnz],0    mov al,[SA1xa]    seto byte[Sflago]    mov [Sflagnz+1],al    jc .carry    mov dword[Sflagc],0h    endloop.carry    mov dword[Sflagc],0FFh    endloop%endmacro%macro flagsetnvzc16b 0    mov cx,[SA1xa]    seto byte[Sflago]    mov [Sflagnz],ecx    jc .carry    mov dword[Sflagc],0h    endloop.carry    mov dword[Sflagc],0FFh    endloop%endmacro; Sets flags N V . . . . Z C according to flags%macro flagsetnvzcs8b 0    mov dword[Sflagnz],0    mov al,[SA1xa]    seto byte[Sflago]    mov [Sflagnz+1],al    jc .carry    mov dword[Sflagc],0FFh    endloop.carry    mov dword[Sflagc],0h    endloop%endmacro%macro flagsetnvzcs16b 0    mov cx,[SA1xa]    seto byte[Sflago]    mov [Sflagnz],ecx    jc .carry    mov dword[Sflagc],0FFh    endloop.carry    mov dword[Sflagc],0h    endloop%endmacro; Sets flags N V . . . . Z C for 16-bit decimal mode only%macro flagsetnvzcd 0    mov cx,[SA1xa]    seto byte[Sflago]    mov [Sflagnz],ecx    jc .carry    mov dword[Sflagc],0h    endloop.carry    mov dword[Sflagc],0FFh    endloop%endmacro; Sets flags N . . . . . Z C according to flags and don't jump to execloop%macro flagsetnzc8b 0    mov dword[Sflagnz],0    mov dword[Sflagc],0h    mov [Sflagnz+1],al    jnc .carry    mov dword[Sflagc],0FFh.carry%endmacro; Sets flags N . . . . . Z C according to flags and don't jump to execloop%macro flagsetnzc 0    mov cx,ax    mov dword[Sflagc],0h    mov [Sflagnz],ecx    jnc .carry    mov dword[Sflagc],0FFh.carry%endmacro; Sets flags N . . . . . Z C according to flags and jump to execloop%macro flagsetnzcel8b 0    mov dword[Sflagnz],0h    jc .carry    mov [Sflagnz+1],cl    mov dword[Sflagc],0FFh    endloop.carry    mov [Sflagnz+1],cl    mov dword[Sflagc],0h    endloop%endmacro%macro flagsetnzcel16b 0    jc .carry    mov [Sflagnz],ecx    mov dword[Sflagc],0FFh    endloop.carry    mov [Sflagnz],ecx    mov dword[Sflagc],0h    endloop%endmacro;*******************************************************; Opcode Instructions;*******************************************************%macro ADCMacro8bnd 0    mov cl,[Sflagc]    add cl,cl    adc [SA1xa],al    flagsetnvzc8b%endmacro%macro ADCMacro16bnd 0    mov cl,[Sflagc]    add cl,cl    adc [SA1xa],ax    flagsetnvzc16b%endmacro%macro ADCMacro8bd 0    mov cl,[Sflagc]    add cl,cl    mov cl,al    mov al,[SA1xa]    adc al,cl    daa    mov [SA1xa],al    flagsetnvzc8b    endloop%endmacro%macro ADCMacro16bd 0    mov cl,[Sflagc]    add cl,cl    mov cx,ax    mov al,[SA1xa]    adc al,cl    daa    mov [SA1xa],al    mov al,[SA1xa+1]    adc al,ch    daa    mov [SA1xa+1],al    flagsetnvzcd%endmacro%macro ANDMacro8b 0    and al,[SA1xa]    mov dword[Sflagnz],0    mov [SA1xa],al    mov [Sflagnz+1],al    endloop%endmacro%macro ANDMacro16b 0    and eax,[SA1xa]    mov [SA1xa],ax    flagsetnz16b%endmacro%macro ASLMacro8b 0    add al,al    flagsetnzc8b%endmacro%macro ASLMacro16b 0    add ax,ax    flagsetnzc%endmacro%macro JumpMacro 0    movsx eax,byte[esi]    add esi,eax.skip    inc esi    endloop%endmacro%macro BITMacroim8b 0    mov al,[esi]    test dword[Sflagnz],18000h    jz .notSflagnz    or dword[Sflagnz],10000h.notSflagnz    inc esi    test [SA1xa],al    jz .zero    mov word[Sflagnz],1    endloop.zero    mov word[Sflagnz],0    endloop%endmacro%macro BITMacroim16b 0    mov ax,[esi]    test dword[Sflagnz],18000h    jz .notSflagnz    or dword[Sflagnz],10000h.notSflagnz    add esi,2    test [SA1xa],ax    jz .zero    mov word[Sflagnz],1    endloop.zero    mov word[Sflagnz],0    endloop%endmacro%macro BITMacro8b 0    mov dword[Sflagnz],10000h    test al,80h    jnz .flagn    mov dword[Sflagnz],0.flagn    mov dword[Sflago],1    test al,40h    jnz .Sflago    mov dword[Sflago],0.Sflago    test [SA1xa],al    jz .zero    mov word[Sflagnz],1    endloop.zero    mov word[Sflagnz],0    endloop%endmacro%macro BITMacro16b 0    mov dword[Sflagnz],10000h    test ax,8000h    jnz .flagn    mov dword[Sflagnz],0.flagn    mov dword[Sflago],1    test ax,4000h    jnz .Sflago    mov dword[Sflago],0.Sflago    test [SA1xa],ax    jz .zero    mov word[Sflagnz],1    endloop.zero    mov word[Sflagnz],0    endloop%endmacro%macro BRKMacro 0    inc esi    test byte[xe],1    jne near BRKemulmode    mov bl,[SA1xpb]    mov ax,[xpc]    test eax,8000h    jz .loweraddr2    mov eax,[snesmmap+ebx*4]    jmp .nextaddr.loweraddr2    mov eax,[snesmap2+ebx*4].nextaddr    mov ebx,esi    sub ebx,eax    mov [xpc],bx    mov eax,[wramdata]    mov bx,[SA1xs]    mov cl,[SA1xpb]    mov [eax+ebx],cl    dec bx    and bx,word[stackand]    or bx,word[stackor]    mov cl,[xpc+1]    mov [eax+ebx],cl    dec bx    and bx,word[stackand]    or bx,word[stackor]    mov cl,[xpc]    mov [eax+ebx],cl    dec bx    and bx,word[stackand]    or bx,word[stackor]    makedl    mov [eax+ebx],dl    dec bx    and bx,word[stackand]    or bx,word[stackor]    mov [SA1xs],bx    xor bh,bh    mov bl,[xirqb]    mov [SA1xpb],bl    xor eax,eax    mov ax,[brkv]    mov [xpc],ax    and dl,11110011b    or dl,00000100b    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    endloopBRKemulmode    mov bl,[SA1xpb]    mov ax,[xpc]    test eax,8000h    jz .loweraddr2    mov eax,[snesmmap+ebx*4]    jmp .nextaddr.loweraddr2    mov eax,[snesmap2+ebx*4].nextaddr    mov ebx,esi    sub ebx,eax    mov [xpc],bx    mov eax,[wramdata]    mov bx,[SA1xs]    mov cl,[xpc+1]    mov [eax+ebx],cl    dec bx    and bx,word[stackand]    or bx,word[stackor]    mov cl,[xpc]    mov [eax+ebx],cl    dec bx    and bx,word[stackand]    or bx,word[stackor]    makedl    mov [eax+ebx],dl    dec bx    and bx,word[stackand]    or bx,word[stackor]    mov [SA1xs],bx    xor bh,bh    mov bl,[SA1xpb]    xor eax,eax    mov ax,[brkv8]    mov [xpc],ax    and dl,11110011b    or dl,00000100b    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 BRLMacro 0    mov ebx,esi    sub ebx,[initaddrl]    add bx,2    xor eax,eax    add bx,[esi]    mov ax,bx    xor ebx,ebx    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 CMPMacro8b 0    mov cl,[SA1xa]    sub cl,al    flagsetnzcel8b%endmacro%macro CMPMacro16b 0    mov cx,[SA1xa]    sub cx,ax    flagsetnzcel16b%endmacro%macro COPMacro 0    inc esi    test byte[xe],1    jne near COPemulmode    mov bl,[SA1xpb]    mov ax,[xpc]    test eax,8000h    jz .loweraddr2    mov eax,[snesmmap+ebx*4]    jmp .nextaddr.loweraddr2    mov eax,[snesmap2+ebx*4].nextaddr    mov ebx,esi    sub ebx,eax    mov [xpc],bx    mov cx,[SA1xs]    mov al,[SA1xpb]    call membank0w8    dec cx    mov al,[xpc+1]    call membank0w8    dec cx    or cx,word[stackor]    mov al,[xpc]    call membank0w8    dec cx    or cx,word[stackor]    makedl    mov al,dl    call membank0w8    dec cx    or cx,word[stackor]    mov [SA1xs],cx    xor bh,bh    mov bl,[xirqb]    mov [SA1xpb],bl    xor eax,eax    mov ax,[copv]    mov [xpc],ax    and dl,11110011b    or dl,00000100b    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    endloopCOPemulmode    mov bl,[SA1xpb]    mov ax,[xpc]    test eax,8000h    jz .loweraddr2    mov eax,[snesmmap+ebx*4]    jmp .nextaddr.loweraddr2    mov eax,[snesmap2+ebx*4].nextaddr    mov ebx,esi    sub ebx,eax    mov [xpc],bx    mov eax,[wramdata]    mov bx,[SA1xs]    mov cl,[xpc+1]    mov [eax+ebx],cl    dec bx    and bx,word[stackand]    or bx,word[stackor]    mov cl,[xpc]    mov [eax+ebx],cl    dec bx    and bx,word[stackand]    or bx,word[stackor]    makedl    mov [eax+ebx],dl    dec bx    and bx,word[stackand]    or bx,word[stackor]    mov [SA1xs],bx    xor bh,bh    mov bl,[SA1xpb]    xor eax,eax    mov ax,[copv8]    mov [xpc],ax    and dl,11110011b    or dl,00000100b    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 CPXMacro8b 0    mov cl,[SA1xx]    sub cl,al    flagsetnzcel8b%endmacro%macro CPXMacro16b 0    mov cx,[SA1xx]    sub cx,ax    flagsetnzcel16b%endmacro%macro CPYMacro8b 0    mov cl,[SA1xy]    sub cl,al    flagsetnzcel8b%endmacro%macro CPYMacro16b 0    mov cx,[SA1xy]    sub cx,ax    flagsetnzcel16b%endmacro%macro EORMacro8b 0    xor al,[SA1xa]    mov dword[Sflagnz],0    mov [SA1xa],al    mov [Sflagnz+1],al    endloop%endmacro%macro EORMacro16b 0    xor eax,[SA1xa]    mov [SA1xa],ax    flagsetnz16b%endmacro%macro JMLMacro 0    mov cx,[esi]    xor eax,eax    call membank0r16    add cx,2    push eax    call membank0r8    mov bl,al    pop eax    mov [xpc],ax    mov [SA1xpb],bl    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 JMPMacro4C 0    xor eax,eax    mov ax,[esi]    mov bl,[SA1xpb]    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    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 JMPMacro6C 0    mov cx,[esi]    xor eax,eax    call membank0r16    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 JMPMacro7C 0    mov cx,[esi]    xor eax,eax    add cx,[SA1xx]    mov bl,[SA1xpb]    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 JMPMacro5C 0    xor eax,eax    mov bl,[esi+2]    mov ax,[esi]    mov [SA1xpb],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 JSLMacro 0    mov ebx,esi    sub ebx,[initaddrl]    add bx,2    mov [xpc],bx    mov cx,[SA1xs]    mov al,[SA1xpb]    call membank0w8    dec cx

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -