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

📄 mv16tms.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 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.%include "macros.mac"EXTSYM bgcoloradder,bgofwptr,bgsubby,bshifter,curbgpr,curmosaicsz,curvidoffsetEXTSYM cwinptr,domosaic16b,drawn,pal16b,scaddtype,scrnon,temp,tempcach,temptileEXTSYM tileleft16b,transpbuf,winon,winptrref,xtravbuf,yadd,yadder,yrevadderEXTSYM draw16x816t,bgmode,vcache2b,vcache4b,vcache8b,fulladdtab,pal16bclEXTSYM pal16bxcl,coadder16,a16x16xinc,a16x16yinc,curypos,yflipadd%include "video/vidmacro.mac";*******************************************************; Processes & Draws 8x8 tiles in 2, 4, & 8 bit mode;*******************************************************%macro draw8x816tams 2    mov al,[ebx+%1]    or al,al    jz %%loop    add al,dh    mov ecx,[ebp+%2]    mov eax,[pal16b+eax*4]    mov [ebp+%2],ax    test ecx,0FFFFh    je %%noadd    and eax,1111011111011110b  ; [vesa2_clbit]    and ecx,1111011111011110b  ; [vesa2_clbit]    add eax,ecx    shr eax,1%%noadd    mov [esi+%2],ax    xor eax,eax%%loop%endmacro%macro draw8x816tbms 2    mov al,[edi+%1]    or al,al    jz %%loop    add al,dh    mov ebx,[ebp+%2]    mov ecx,[pal16bcl+eax*4]    mov [ebp+%2],cx    and ebx,1111011111011110b  ; [vesa2_clbit]    add ecx,ebx    shr ecx,1    mov ecx,[fulladdtab+ecx*2]    mov [esi+%2],cx%%loop%endmacro%macro draw8x816tcms 2    mov al,[edi+%1]    or al,al    jz %%loop    add al,dh    mov ebx,[ebp+%2]    mov ecx,[pal16bxcl+eax*4]    mov [ebp+%2],cx    and ebx,1111011111011110b  ; [vesa2_clbit]    add ecx,ebx    shr ecx,1    mov ecx,[fulladdtab+ecx*2]    xor ecx,0FFFFh    mov [esi+%2],cx%%loop%endmacro%macro draw8x816tawinonms 2    mov al,[ebx+%1]    or al,al    jz %%loop    test byte[edx+%1],0FFh    jnz %%loop    add al,[coadder16]    mov ecx,[ebp+%2]    mov eax,[pal16b+eax*4]    mov [ebp+%2],ax    test ecx,0FFFFh    je %%noadd    and eax,1111011111011110b  ; [vesa2_clbit]    and ecx,1111011111011110b  ; [vesa2_clbit]    add eax,ecx    shr eax,1%%noadd    mov [esi+%2],ax    xor eax,eax%%loop%endmacro%macro draw8x816tbwinonms 2    mov al,[edi+%1]    or al,al    jz %%loop    test byte[edx+%1],0FFh    jnz %%loop    add al,[coadder16]    mov ebx,[ebp+%2]    mov ecx,[pal16bcl+eax*4]    mov [ebp+%2],cx    and ebx,1111011111011110b  ; [vesa2_clbit]    add ecx,ebx    shr ecx,1    mov ecx,[fulladdtab+ecx*2]    mov [esi+%2],cx%%loop%endmacro%macro draw8x816tcwinonms 2    mov al,[edi+%1]    or al,al    jz %%loop    test byte[edx+%1],0FFh    jnz %%loop    add al,[coadder16]    mov ebx,[ebp+%2]    mov ecx,[pal16bxcl+eax*4]    mov [ebp+%2],cx    and ebx,1111011111011110b  ; [vesa2_clbit]    add ecx,ebx    shr ecx,1    mov ecx,[fulladdtab+ecx*2]    xor ecx,0FFFFh    mov [esi+%2],cx%%loop%endmacro%macro draw8x816tawinonbms 2    mov al,[ebx+%1]    or al,al    jz %%loop    test byte[edx+7-%1],0FFh    jnz %%loop    add al,[coadder16]    mov ecx,[ebp+%2]    mov eax,[pal16b+eax*4]    mov [ebp+%2],ax    test ecx,0FFFFh    je %%noadd    and eax,1111011111011110b  ; [vesa2_clbit]    and ecx,1111011111011110b  ; [vesa2_clbit]    add eax,ecx    shr eax,1%%noadd    mov [esi+%2],ax    xor eax,eax%%loop%endmacro%macro draw8x816tbwinonbms 2    mov al,[edi+%1]    or al,al    jz %%loop    test byte[edx+7-%1],0FFh    jnz %%loop    add al,[coadder16]    mov ebx,[ebp+%2]    mov ecx,[pal16bcl+eax*4]    mov [ebp+%2],cx    and ebx,1111011111011110b  ; [vesa2_clbit]    add ecx,ebx    shr ecx,1    mov ecx,[fulladdtab+ecx*2]    mov [esi+%2],cx%%loop%endmacro%macro draw8x816tcwinonbms 2    mov al,[edi+%1]    or al,al    jz %%loop    test byte[edx+7-%1],0FFh    jnz %%loop    add al,[coadder16]    mov ebx,[ebp+%2]    mov ecx,[pal16bxcl+eax*4]    mov [ebp+%2],cx    and ebx,1111011111011110b  ; [vesa2_clbit]    add ecx,ebx    shr ecx,1    mov ecx,[fulladdtab+ecx*2]    xor ecx,0FFFFh    mov [esi+%2],cx%%loop%endmacroSECTION .textNEWSYM draw8x816tms    cmp byte[bgmode],5    je near draw16x816t    mov [temp],al    mov [bshifter],ah    mov eax,esi    mov [yadder],ecx    mov [tempcach],ebx    mov ebx,56    sub ebx,ecx    mov [yrevadder],ebx    ; esi = pointer to video buffer    mov esi,[cwinptr]    sub esi,eax    mov [winptrref],esi    mov esi,[curvidoffset]    sub esi,eax           ; esi = [vidbuffer] + curypos * 288 + 16 - HOfs    sub esi,eax    cmp byte[curmosaicsz],1    je .nomosaic    mov esi,xtravbuf+32    mov ecx,128.clearnext    mov dword[esi],0    add esi,4    dec ecx    jnz .clearnext    mov esi,xtravbuf+32    sub esi,eax    sub esi,eax.nomosaic    mov [temptile],edx    push ecx    mov dword[bgsubby],262144    mov ecx,[vcache2b]    add ecx,262144    mov [bgofwptr],ecx    cmp dword[tempcach],ecx    jb .nobit    mov dword[bgsubby],131072    mov ecx,[vcache4b]    add ecx,131072    mov [bgofwptr],ecx    cmp dword[tempcach],ecx    jb .nobit    mov ecx,[vcache8b]    add ecx,65536    mov [bgofwptr],ecx    mov dword[bgsubby],65536.nobit    pop ecx; tile value : bit 15 = flipy, bit 14 = flipx, bit 13 = priority value;              bit 10-12 = palette, 0-9=tile#    cmp byte[curmosaicsz],1    jne .domosaic    cmp byte[winon],0    jne near draw8x816twinonms.domosaic    mov ebp,transpbuf+32    sub ebp,eax    sub ebp,eax    test byte[scaddtype],80h    jnz near draw8x816tsms    test byte[scaddtype],40h    jz near draw8x8fulladdms    cmp byte[scrnon+1],0    jz near draw8x8fulladdms    mov byte[tileleft16b],33    mov byte[drawn],0    mov dl,[temp].loopa    mov ax,[edi]    mov dh,ah    add edi,2    xor dh,[curbgpr]    test dh,20h    jnz near .hprior    inc byte[drawn]    and eax,03FFh                ; filter out tile #    mov ebx,[tempcach]    shl eax,6    add ebx,eax    cmp ebx,[bgofwptr]    jb .noclip    sub ebx,[bgsubby].noclip    test dh,80h    jz .normadd    add ebx,[yrevadder]    jmp .skipadd.normadd    add ebx,[yadder].skipadd    test dh,40h    jnz near .rloop    ; Begin Normal Loop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrp draw8x816tams.hprior    add esi,16    add ebp,16    inc dl    cmp dl,20h    jne .loopc2    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    cmp byte[drawn],0    je .nodraw    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b.nodraw    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    xor ecx,ecx    drawtilegrpf draw8x816tams    add esi,16    add ebp,16    inc dl    cmp dl,20h    jne .loopc    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    cmp byte[drawn],0    je .nodraw2    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b.nodraw2    retNEWSYM draw8x8fulladdms    mov byte[tileleft16b],33    mov byte[drawn],0    mov dl,[temp].loopa    mov ax,[edi]    mov dh,ah    add edi,2    push edi    xor dh,[curbgpr]    test dh,20h    jnz near .hprior    inc byte[drawn]    and eax,03FFh                ; filter out tile #    mov edi,[tempcach]    shl eax,6    add edi,eax    cmp edi,[bgofwptr]    jb .noclip    sub edi,[bgsubby].noclip    test dh,80h    jz .normadd    add edi,[yrevadder]    jmp .skipadd.normadd    add edi,[yadder].skipadd    test dh,40h    jnz near .rloop    ; Begin Normal Loop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrpfull draw8x816tbms.hprior    pop edi    add esi,16    add ebp,16    inc dl    cmp dl,20h    jne .loopc2    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    cmp byte[drawn],0    je .nodraw    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b.nodraw    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    xor ecx,ecx    drawtilegrpfullf draw8x816tbms    pop edi    add esi,16    add ebp,16    inc dl    cmp dl,20h    jne .loopc    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    cmp byte[drawn],0    je .nodraw2    mov dh,[curmosaicsz]    cmp dh,1    jne near domosaic16b.nodraw2    retNEWSYM draw8x816tsms    mov byte[tileleft16b],33    mov byte[drawn],0    mov dl,[temp].loopa    mov ax,[edi]    mov dh,ah    add edi,2    push edi    xor dh,[curbgpr]    test dh,20h    jnz near .hprior    inc byte[drawn]    and eax,03FFh                ; filter out tile #    mov edi,[tempcach]    shl eax,6    add edi,eax    cmp edi,[bgofwptr]    jb .noclip    sub edi,[bgsubby].noclip    test dh,80h    jz .normadd    add edi,[yrevadder]    jmp .skipadd.normadd    add edi,[yadder].skipadd    test dh,40h    jnz near .rloop    ; Begin Normal Loop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrpfull draw8x816tcms.hprior    pop edi    add esi,16    add ebp,16    inc dl    cmp dl,20h    jne .loopc2    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    ret    ; reversed loop.rloop    mov cl,[bshifter]    and dh,1Ch    shl dh,cl                    ; process palette # (bits 10-12)    add dh,[bgcoloradder]    xor eax,eax    xor ecx,ecx    drawtilegrpfullf draw8x816tcms    pop edi    add esi,16    add ebp,16    inc dl    cmp dl,20h    jne .loopc    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    retNEWSYM draw8x816twinonms    mov ebp,transpbuf+32    sub ebp,eax    sub ebp,eax    test byte[scaddtype],80h    jnz near draw8x816tswinonms    test byte[scaddtype],40h    jz near draw8x8fulladdwinonms    cmp byte[scrnon+1],0    jz near draw8x8fulladdwinonms    mov byte[tileleft16b],33    mov edx,[winptrref]    mov byte[drawn],0.loopa    mov ax,[edi]    mov cl,ah    add edi,2    xor cl,[curbgpr]    test cl,20h    jnz near .hprior    inc byte[drawn]    and eax,03FFh                ; filter out tile #    mov ebx,[tempcach]    shl eax,6    add ebx,eax    cmp ebx,[bgofwptr]    jb .noclip    sub ebx,[bgsubby].noclip    test cl,80h    jz .normadd    add ebx,[yrevadder]    jmp .skipadd.normadd    add ebx,[yadder].skipadd    test cl,40h    jnz near .rloop    ; Begin Normal Loop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrp draw8x816tawinonms.hprior    add esi,16    add edx,8    add ebp,16    inc byte[temp]    cmp byte[temp],20h    jne .loopc2    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    ret    ; reversed loop.rloop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    drawtilegrpf draw8x816tawinonbms    add esi,16    add edx,8    add ebp,16    inc byte[temp]    cmp byte[temp],20h    jne .loopc    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    retNEWSYM draw8x8fulladdwinonms    mov byte[tileleft16b],33    mov edx,[winptrref]    mov byte[drawn],0.loopa    mov ax,[edi]    mov cl,ah    add edi,2    push edi    xor cl,[curbgpr]    test cl,20h    jnz near .hprior    inc byte[drawn]    and eax,03FFh                ; filter out tile #    mov edi,[tempcach]    shl eax,6    add edi,eax    cmp edi,[bgofwptr]    jb .noclip    sub edi,[bgsubby].noclip    test cl,80h    jz .normadd    add edi,[yrevadder]    jmp .skipadd.normadd    add edi,[yadder].skipadd    test cl,40h    jnz near .rloop    ; Begin Normal Loop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrpfull draw8x816tbwinonms.hprior    pop edi    add esi,16    add edx,8    add ebp,16    inc byte[temp]    cmp byte[temp],20h    jne .loopc2    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    ret    ; reversed loop.rloop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    drawtilegrpfullf draw8x816tbwinonbms    pop edi    add esi,16    add edx,8    add ebp,16    inc byte[temp]    cmp byte[temp],20h    jne .loopc    mov edi,[temptile].loopc    dec byte[tileleft16b]    jnz near .loopa    retNEWSYM draw8x816tswinonms    mov byte[tileleft16b],33    mov edx,[winptrref]    mov byte[drawn],0.loopa    mov ax,[edi]    mov cl,ah    add edi,2    push edi    xor cl,[curbgpr]    test cl,20h    jnz near .hprior    inc byte[drawn]    and eax,03FFh                ; filter out tile #    mov edi,[tempcach]    shl eax,6    add edi,eax    cmp edi,[bgofwptr]    jb .noclip    sub edi,[bgsubby].noclip    test cl,80h    jz .normadd    add edi,[yrevadder]    jmp .skipadd.normadd    add edi,[yadder].skipadd    test cl,40h    jnz near .rloop    ; Begin Normal Loop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    ; Start loop    drawtilegrpfull draw8x816tcwinonms.hprior    pop edi    add esi,16    add edx,8    add ebp,16    inc byte[temp]    cmp byte[temp],20h    jne .loopc2    mov edi,[temptile].loopc2    dec byte[tileleft16b]    jnz near .loopa    ret    ; reversed loop.rloop    mov al,cl    mov cl,[bshifter]    and al,1Ch    shl al,cl                    ; process palette # (bits 10-12)    add al,[bgcoloradder]    mov [coadder16],al    xor eax,eax    xor ecx,ecx    drawtilegrpfullf draw8x816tcwinonbms    pop edi    add esi,16    add edx,8    add ebp,16    inc byte[temp]    cmp byte[temp],20h    jne .loopc

⌨️ 快捷键说明

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