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

📄 newgfx16.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;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 BG116x16t,BG1SXl,BG1SYl,BG216x16t,BG2SXl,BG2SYl,BG316x16t,BG3PRI,BG3SXlEXTSYM BG3SYl,BG416x16t,BG4SXl,BG4SYl,BGFB,BGMA,BGMS1,BGOPT1,BGOPT2,BGOPT3EXTSYM BGOPT4,BGPT1,BGPT1X,BGPT1Y,BGPT2,BGPT2X,BGPT2Y,BGPT3,BGPT3X,BGPT3Y,BGPT4EXTSYM BGPT4X,BGPT4Y,bg1drwng,bg1objptr,bg1ptr,bg1ptrx,bg1ptry,bg1scrolxEXTSYM bg1scroly,bg1totng,bg2drwng,bg2objptr,bg2ptr,bg2ptrx,bg2ptry,bg2scrolxEXTSYM bg2scroly,bg2totng,bg3drwng,bg3highst,bg3objptr,bg3ptr,bg3ptrx,bg3ptryEXTSYM bg3scrolx,bg3scroly,bg3totng,bg4drwng,bg4objptr,bg4ptr,bg4ptrx,bg4ptryEXTSYM bg4scrolx,bg4scroly,bg4totng,bgcmsung,bgmode,bgtxad,bgtxadd,ngextbgEXTSYM cachesingle2bng,cachesingle8bng,cfieldad,cgmod,cgram,coladdb,coladdgEXTSYM coladdr,colleft16b,colormodedef,cpalval,csprbit,csprival,curmosaicszEXTSYM curvidoffset,curypos,firstdrawn,flipyposng,forceblnk,interlval,intrlngEXTSYM mode0add,mode0ads,mode7A,mode7C,mode7X0,mode7ab,mode7cd,mode7set,mode7stEXTSYM mode7xy,modeused,mosaicon,mosaicsz,mosenng,mosszng,ngceax,ngcediEXTSYM ngpalcon2b,ngpalcon8b,ngptrdat,pesimpng,prdata,prdatb,prdatc,prevbrightEXTSYM reslbyl,resolutn,scaddset,scaddtype,scadsng,scadtng,scfbl,scrndis,scrnonEXTSYM spritetablea,sprleftpr,sprlefttot,sprprdrn,sprpriodata,sprtbng,sprtlngEXTSYM t16x161,t16x162,t16x163,t16x164,taddfy16x16,taddnfy16x16,ngptrdat2EXTSYM tleftn,tltype2b,tltype8b,vcache2b,vcache8b,vidbright,ofshvaladdEXTSYM vidbuffer,vidmemch2,vidmemch8,vrama,winon,xtravbuf,yposngEXTSYM vbufdptr,drawtileng2b16b,drawtileng4b16b,drawtileng8b16b,bgwinchangeEXTSYM drawtileng16x162b16b,drawtileng16x164b16b,drawtileng16x168b16b,winbg1enEXTSYM drawlineng2b16b,drawlineng4b16b,drawlineng8b16b,BuildWindow,winenabsEXTSYM drawlineng16x162b16b,drawlineng16x164b16b,drawlineng16x168b16b,winenabmEXTSYM disableeffects,winl1,winbg1enval,winbg1envalm,winlogica,winlogicavalEXTSYM winboundary,winobjen,winlogicb,nglogicval,ngwintable,winbg2enval,dovegEXTSYM winbg3enval,winbg4enval,winbgobjenval,Mode7HiRes16b,res640,hiresstuffEXTSYM Mode7BackA,Mode7BackC,Mode7BackX0,Mode7BackSet,drawmode7win16b,ngwinenEXTSYM drawlineng16x84b16b,drawlineng16x82b16b,ofsmcyps,vram,ofsmcptr,ofsmadyEXTSYM ofsmadx,ofsmtptr,yposngom,flipyposngom,ofsmmptr,ofsmval,ofsmvalh,V8ModeEXTSYM cbgval,drawlinengom4b16b,ignor512,winbg1envals,m7startyEXTSYM FillSubScr,scanlines,drawmode7win16bd,SpecialLine,vidmemch2s,dovegrestEXTSYM drawlinengom16x164b16b,bgallchangeEXTSYM bg1change,bg2change,bg3change,bg4change,ngwinptr,objwlrpos,objwenEXTSYM objclineptr,CSprWinPtr,BuildWindow2,NGNumSpr,fulladdtab,MMXSupportEXTSYM bgtxadd2,gammalevel16b,drawmode7ngextbg16b,processmode7hires16bEXTSYM processmode7hires16bd,drawmode7ngextbg216b,osm2dis,ofsmtptrs,ofsmcptr2%ifdef __MSDOS__EXTSYM smallscreenon,ScreenScale%endif%include "video/vidmacro.mac"%include "video/newgfx16.mac"%include "video/newg162.mac"; Different routines for:;   Normal (just one screen);   Transparency;   No Transparency; Sub+Main:; Different Window Modes for each:;   SubWin+MainWin;   Sub+MainWin;   SubWin+Main; cgfxmod :;   0 = No addition whatsoever;   1 = Addition in the back area only;   2 = All of subscreen added to all of mainscreen;   3 = All of subscreen added to specific mainscreens;   4 = Add+Sub enabledSECTION .textNEWSYM setpalallng    mov dword[palchanged],1    mov byte[cgmod],0    push esi    push eax    push edx    push ebp    mov esi,[cpalptrng]    mov byte[colleft16b],0    add esi,1024    xor ebp,ebp    and esi,255*1024    mov [cpalptrng],esi    add esi,[vbufdptr].loopa    mov dx,[cgram+ebp]    mov [prevpal2+ebp],dx    mov ax,dx    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .nogr    mov al,31.nogr    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[ngrposng]    xor ebx,ebx    shl ax,cl    add bx,ax    mov ax,dx    shr ax,5    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .nogg    mov al,31.nogg    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[nggposng]    shl ax,cl    add bx,ax    mov ax,dx    shr ax,10    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .nogb    mov al,31.nogb    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[ngbposng]    shl ax,cl    add bx,ax    mov ax,bx    mov [esi],bx     ; standard    or bx,[UnusedBit]    mov [esi+512],bx     ; standard    add esi,2    add ebp,2    inc byte[colleft16b]    jnz near .loopa    mov al,[vidbright]    mov [prevbright],al    pop ebp    pop edx    pop eax    pop esi    xor ecx,ecx    cmp byte[V8Mode],1    jne .noveg2    call dovegrest.noveg2    retNEWSYM setpalette16bng    cmp byte[V8Mode],1    jne .noveg    call doveg.noveg    mov bl,[vidbright]    cmp bl,[prevbright]    jne near setpalallng    cmp byte[cgmod],0    je near .skipall    push esi    push edi    push eax    push edx    push ebp    mov byte[cgmod],0    xor ebp,ebp    mov esi,[cpalptrng]    mov edi,esi    add esi,1024    and esi,255*1024    mov [cpalptrng],esi    add esi,[vbufdptr]    add edi,[vbufdptr]    mov byte[colleft16b],0    jmp .loopa.skipa    mov bx,[edi]    mov [esi],bx    mov bx,[edi+512]    mov [esi+512],bx    add edi,2    add esi,2    add ebp,2    inc byte[colleft16b]    jz near .endpal.loopa    mov dx,[cgram+ebp]    cmp [prevpal2+ebp],dx    je .skipa    mov [prevpal2+ebp],dx    cmp byte[colleft16b],0    je .notchanged    mov dword[palchanged],1.notchanged    mov ax,dx    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .norr    mov al,31.norr    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[ngrposng]    xor ebx,ebx    shl ax,cl    add bx,ax    mov ax,dx    shr ax,5    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .norg    mov al,31.norg    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[nggposng]    shl ax,cl    add bx,ax    mov ax,dx    shr ax,10    and al,01Fh    add al,[gammalevel16b]    cmp al,31    jbe .norb    mov al,31.norb    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[ngbposng]    shl ax,cl    add bx,ax    mov [esi],bx     ; standard    or bx,[UnusedBit]    mov [esi+512],bx     ; standard    add edi,2    add esi,2    add ebp,2    inc byte[colleft16b]    jnz near .loopa.endpal    pop ebp    pop edx    pop eax    pop edi    pop esi    xor ecx,ecx.skipall    cmp byte[V8Mode],1    jne .noveg2    call dovegrest.noveg2    retsection .dataprevpal2 times 256 dw 0F00Fhsection .text%macro WinBGCheck 1    mov bl,[winbg1en+%1]    mov bh,bl    test bl,0Ah    jz %%disable    test byte[scrnon],1 << %1    jz %%nomainbg    test byte[scrnon+1],1 << %1    jnz %%bg    xor bh,bh    jmp %%bg%%nomainbg    xor bl,bl    test byte[scrnon+1],1 << %1    jnz %%bg    xor bh,bh    jmp %%skip%%disable    xor bl,bl    xor bh,bh    jmp %%skip%%bg    test byte[winenabs],1 << %1    jnz %%nbgs    xor bh,bh%%nbgs    test byte[winenabm],1 << %1    jnz %%nbgm    xor bl,bl%%nbgm    jmp %%skip    mov cl,bl    or cl,bh    and cl,0Ah    cmp cl,0Ah    je %%skip    mov ch,bl    or ch,bh    mov edx,[winl1]    cmp cl,02h    je %%bg1    shr ch,2    shr edx,16%%bg1    test ch,01h    jnz %%outside    cmp dl,dh    jbe %%skip    xor bl,bl    xor bh,bh    jmp %%skip%%outside    cmp dl,0    ja %%skip    cmp dh,255    jb %%skip    xor bl,bl    xor bh,bh%%skip    mov [winbg1envalm+eax+%1*256],bl    mov [winbg1envals+eax+%1*256],bh    or bl,bh    mov [winbg1enval+eax+%1*256],bl%endmacro%macro WinBGCheckb 1    mov bl,[winbg1en+%1]    test bl,0Ah    jz %%disable    test byte[scrnon],1 << %1    jnz %%nbgen    test byte[winenabs],1 << %1    jnz %%bg    jmp %%disable%%nbgen    test byte[winenabm],1 << %1    jnz %%bg%%disable    xor bl,bl    jmp %%skip%%bg    mov cl,bl    and cl,0Ah    cmp cl,0Ah    je %%skip;    jne %%notskip;    and bl,03h;    and cl,03h;%%notskip    mov ch,bl    mov edx,[winl1]    cmp cl,02h    je %%bg1    shr ch,2    shr edx,16%%bg1    test ch,01h    jnz %%outside    cmp dl,dh    jbe %%skip    xor bl,bl    jmp %%skip%%outside    cmp dl,0    ja %%skip    cmp dh,255    jb %%skip    xor bl,bl%%skip    mov [winbg1enval+eax+%1*256],bl    mov [winbg1envalm+eax+%1*256],bl    mov [winbg1envals+eax+%1*256],bl%endmacro%macro WinBGCheck2 1    mov bl,[winbg1en+%1]    test bl,0Ah    jnz %%nodisable    xor bl,bl    jmp %%skip%%nodisable    mov cl,bl    or cl,bh    and cl,0Ah    cmp cl,0Ah    je %%skip    mov ch,bl    or ch,bh    mov edx,[winl1]    cmp cl,02h    je %%bg1    shr ch,2    shr edx,16%%bg1    test ch,01h    jnz %%outside    cmp dl,dh    jbe %%skip    xor bl,bl    jmp %%skip%%outside    cmp dl,0    ja %%skip    cmp dh,255    jb %%skip    xor bl,bl%%skip    mov [winbg1enval+eax+%1*256],bl%endmacrosection .dataBackAreaAdd dd 0BackAreaUnFillCol dd 0BackAreaFillCol dd 0clinemainsub    dd 0section .textBackAreaFill:    cmp byte[winbg1enval+eax+5*256],0    je near .nowindowb    mov ebx,[BackAreaFillCol]    cmp ebx,[BackAreaUnFillCol]    je near .nowindowb    push ecx    push edx    push eax    push edi    mov ebx,eax    mov ecx,[vidbuffer]    add ecx,16*2    shl eax,9    add ecx,eax    mov eax,ebx    shl eax,6    add ecx,eax    add ecx,[BackAreaAdd]    ; Construct Window in ecx    mov edi,ngwintable    sub ecx,2    mov eax,256.procnotemptyb    mov edx,[edi]    add edi,4    or edx,edx    jz .procemptyb    dec edx    mov ebx,[BackAreaUnFillCol].swloopb    mov [ecx],ebx    mov [ecx+4],ebx    add ecx,8    sub eax,4    jc .doneb    sub edx,4    jnc .swloopb    sub eax,edx    add ecx,edx    add ecx,edx    dec eax    add ecx,2.procemptyb    mov edx,[edi]    dec edx    add edi,4    mov ebx,[BackAreaFillCol].swloop2b    mov [ecx],ebx    mov [ecx+4],ebx    add ecx,8    sub eax,4    jc .doneb    sub edx,4    jnc .swloop2b    sub eax,edx    add ecx,edx    add ecx,edx    dec eax    add ecx,2    jmp .procnotemptyb.doneb    pop edi    pop eax    pop edx    pop ecx    jmp .yeswindowb.nowindowb    push eax    push ecx    mov ebx,eax    mov ecx,[vidbuffer]    mov eax,ebx    add ecx,16*2    shl eax,9    add ecx,eax    mov eax,ebx    shl eax,6    add ecx,eax    add ecx,[BackAreaAdd]    mov ebx,[BackAreaUnFillCol]    mov eax,64.nowinloop    mov [ecx],ebx    mov [ecx+4],ebx    add ecx,8    dec eax    jnz .nowinloop    pop ecx    pop eax.yeswindowb    retNEWSYM newengine16b    ; store line by line data    ; BGMode, BGxScrollX, BGxScrollY, both BGPtrs    mov eax,[curypos]    and eax,0FFh    cmp eax,1    jne .noclearcache    push eax    push ecx    mov ebx,vidmemch2s    mov ecx,1024+512+256    mov eax,0FFFFFFFFh.loopcc    mov [ebx],eax    add ebx,4    dec ecx    jnz .loopcc    pop ecx    pop eax    mov dword[startlinet],0    mov dword[endlinet],255    xor ebx,ebx.noclearcache    mov byte[bgallchange+eax],0    mov byte[bgallchange+eax+1],0FFh    mov byte[bg1change+eax],0    mov byte[bg2change+eax],0    mov byte[bg3change+eax],0    mov byte[bg4change+eax],0    mov dword[palchanged],0    ; BG3 Priority    test byte[scaddset],2    jz .noscaddset    or [bgcmsung],ebx.noscaddset    mov bl,[bg3highst]    ;cmp byte[bgmode],7    ;mov bl,1    ;je .notmode7;.notmode7    mov [BG3PRI+eax],bl    cmp [BG3PRI+eax-1],bl    je .nosbg3pr    mov byte[bgallchange+eax],1.nosbg3pr    mov ebx,[scrnon]    ; clear    push ecx    mov cl,[scrnon]    and cl,1Fh    or cl,20h    and cl,[scaddtype]    and cl,3Fh    mov byte[FillSubScr+eax],1    or cl,cl    jnz .yessub    xor bh,bh    mov byte[FillSubScr+eax],0.yessub    pop ecx    test byte[scaddset],2    jnz .subscrnon    xor bh,bh.subscrnon

⌨️ 快捷键说明

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