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

📄 makev16t.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 cwinptr,dualstartprocess,dualwinbg,dualwinsp,dwinptrproc,pwinbgenabEXTSYM pwinbgtype,pwinspenab,pwinsptype,winbgdata,winlogicb,winonbtypeEXTSYM winonstype,winspdata,interlval,MMXSupport,bg1scrolx,bg1scroly,curmosaicszEXTSYM curypos,drawmode716t,makewindow,mode7set,mosaicon,mosaicsz,scrnonEXTSYM winbg1en,winenabm,drawmode716textbg,drawmode716textbg2,extbgdoneEXTSYM drawmode716tb,drawmode716b,drawmode716extbg,drawmode716extbg2,cursprlocEXTSYM drawsprites16b,scrndis,sprprifix,winonsp,bgfixer,bgfixer2,scaddtypeEXTSYM alreadydrawn,bg1cachloc,bg1tdabloc,bg1tdatloc,bg1vbufloc,bg1xposlocEXTSYM bg1yaddval,bgcoloradder,bgmode,bgtilesz,colormodeofs,curbgnumEXTSYM draw16x1616b,draw8x816b,drawn,winenabs,curbgpr,draw16x1616tms,ngptrdat2EXTSYM draw8x816tms,bg3high2,currentobjptr,curvidoffset,cwinenabm,makewindowspEXTSYM preparesprpr,procbackgrnd,setpalette16b,spritetablea,sprleftpr,sprlefttotEXTSYM numwin,scaddset,wincolen,windowdata,winl1,winl2,winon,winr1,winr2EXTSYM vidbuffer,coladdb,coladdg,coladdr,vesa2_bpos,vesa2_gpos,vesa2_rposEXTSYM vidbright,winptrref,fulladdtab,pal16b,vesa2_clbit,csprbit,sprclprioEXTSYM csprprlft,sprsingle,sprpriodata,pal16bcl,pal16bxcl,bgofwptr,bgsubbyEXTSYM bshifter,domosaic16b,temp,tempcach,temptile,tileleft16b,xtravbuf,yadderEXTSYM yrevadder,vcache2b,vcache4b,vcache8b,draw8x816boffset,osm2disEXTSYM hirestiledat,res512switch,bg1objptr,bg1ptr,bg3ptr,bg3scrolx,bg3scrolyEXTSYM vidmemch4,vram,ofsmcptr,ofsmady,ofsmadx,yposngom,flipyposngom,ofsmtptrEXTSYM ofsmmptr,ofsmcyps,bgtxadd,bg1ptrx,bg1ptry,a16x16xinc,a16x16yincEXTSYM bg1scrolx_m7,bg1scroly_m7,OMBGTestVal,Testval,cachesingle4bng,m7startyEXTSYM ofsmtptrs,ofsmcptr2,ofshvaladd%include "video/vidmacro.mac"; clearback16bts clearback16bdual;*******************************************************; DrawLine 16bit Transparent      Draws the current line;*******************************************************; use curypos+bg1scroly for y location and bg1scrolx for x location; use bg1ptr(b,c,d) for the pointer to the tile number contents; use bg1objptr for the pointer to the object tile contentsSECTION .textNEWSYM makedualwincol    mov dl,[winlogicb]    shr dl,2    and dl,03h    mov cl,dl    mov byte[winon],1    mov ebx,[winl1]    ; check if data matches previous sprite data    cmp cl,[dualwinsp]    jne .skipsprcheck    cmp al,[pwinspenab]    jne .skipsprcheck    cmp ebx,[pwinsptype]    jne .skipsprcheck    mov dword[cwinptr],winspdata+16    mov al,[winonstype]    mov [winon],al    ret.skipsprcheck    ; check if data matches previous data    cmp cl,[dualwinbg]    jne .skipenab3    cmp al,[pwinbgenab]    jne .skipenab    cmp ebx,[pwinbgtype]    jne .skipenab2    mov dword[cwinptr],winbgdata+16    mov al,[winonbtype]    mov [winon],al    ret.skipenab3    mov [dualwinbg],cl.skipenab    mov [pwinbgenab],al    mov ebx,[winl1].skipenab2    mov [pwinbgtype],ebx    mov dword[dwinptrproc],winbgdata+16    mov dword[cwinptr],winbgdata+16    mov byte[winon],1    mov byte[winonbtype],1    jmp dualstartprocessNEWSYM procmode716tsub    test word[scrnon+1],01h    jz near .noback1    test word[scrnon],01h    jnz near .noback1    mov byte[winon],0    test word[winenabm],0001h    jz near .nobackwin1    test word[winenabm],0100h    jnz near .nobackwin1;    procwindow [winbg1en]    mov al,[winbg1en]    mov ebp,0    call makewindow    cmp byte[winon],0FFh    je near .noback1.nobackwin1    xor eax,eax    xor edx,edx    mov ax,[curypos]    inc ax    test byte[mode7set],02h    jz .noflip    neg ax    add ax,255.noflip    mov byte[curmosaicsz],1    test byte[mosaicon],1    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl    xor bh,bh    div bx    xor edx,edx    mul bx.nomos    mov [m7starty],ax    mov ax,[bg1scroly_m7]    mov dx,[bg1scrolx_m7]    call drawmode716t.noback1    retNEWSYM procmode716tsubextbg    test word[scrnon+1],02h    jz near .noback1    test word[scrnon],02h    jnz near .noback1    mov byte[winon],0    test word[winenabm],0001h    jz near .nobackwin1    test word[winenabm],0100h    jnz near .nobackwin1;    procwindow [winbg1en]    mov al,[winbg1en]    mov ebp,0    call makewindow    cmp byte[winon],0FFh    je near .noback1.nobackwin1    xor eax,eax    xor edx,edx    mov ax,[curypos]    inc ax    test byte[mode7set],02h    jz .noflip    neg ax    add ax,255.noflip    mov byte[curmosaicsz],1    test byte[mosaicon],1    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl    xor bh,bh    div bx    xor edx,edx    mul bx.nomos    mov [m7starty],ax    mov ax,[bg1scroly_m7]    mov dx,[bg1scrolx_m7]    mov byte[extbgdone],1    call drawmode716extbg.noback1    retNEWSYM procmode716tsubextbgb    cmp byte[extbgdone],0    jne near .noback1    test word[scrnon+1],01h    jz near .noback1    test word[scrnon],01h    jnz near .noback1    mov byte[winon],0    test word[winenabm],0001h    jz near .nobackwin1    test word[winenabm],0100h    jnz near .nobackwin1;    procwindow [winbg1en]    mov al,[winbg1en]    mov ebp,0    call makewindow    cmp byte[winon],0FFh    je near .noback1.nobackwin1    xor eax,eax    xor edx,edx    mov ax,[curypos]    inc ax    test byte[mode7set],02h    jz .noflip    neg ax    add ax,255.noflip    mov byte[curmosaicsz],1    test byte[mosaicon],1    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl    xor bh,bh    div bx    xor edx,edx    mul bx.nomos    mov [m7starty],ax    mov ax,[bg1scroly_m7]    mov dx,[bg1scrolx_m7]    mov byte[extbgdone],1    call drawmode716textbg.noback1    retNEWSYM procmode716tsubextbg2    cmp byte[extbgdone],0    je near .noback1    mov byte[winon],0    test word[winenabm],0001h    jz near .nobackwin1    test word[winenabm],0100h    jnz near .nobackwin1    mov al,[winbg1en]    mov ebp,0    call makewindow    cmp byte[winon],0FFh    je near .noback1.nobackwin1    xor eax,eax    xor edx,edx    mov ax,[curypos]    mov byte[curmosaicsz],1    test byte[mosaicon],1    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl    xor bh,bh    div bx    xor edx,edx    mul bx.nomos    call drawmode716extbg2.noback1    retNEWSYM procmode716tmain    test word[scrnon],01h    jz near .noback1    mov byte[winon],0    test word[winenabm],0001h    jz near .nobackwin1    test word[winenabm],0100h    jnz near .nobackwin1;    procwindow [winbg1en]    mov al,[winbg1en]    mov ebp,0    call makewindow    cmp byte[winon],0FFh    je near .noback1.nobackwin1    xor eax,eax    xor edx,edx    mov ax,[curypos]    inc ax    test byte[mode7set],02h    jz .noflip    neg ax    add ax,255.noflip    mov byte[curmosaicsz],1    test byte[mosaicon],1    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl    xor bh,bh    div bx    xor edx,edx    mul bx.nomos    mov [m7starty],ax    mov ax,[bg1scroly_m7]    mov dx,[bg1scrolx_m7]    test byte[scaddset],02h    jz .noscrnadd    test word[scrnon+1],01h    jnz near .mode7b.noscrnadd    test byte[scaddtype],01h    jz .notransp    call drawmode716t.noback1    ret.notransp    call drawmode716b    ret.mode7b    call drawmode716tb    retNEWSYM procmode716tmainextbg    test word[scrnon],02h    jz near .noback1    mov byte[winon],0    test word[winenabm],0001h    jz near .nobackwin1    test word[winenabm],0100h    jnz near .nobackwin1;    procwindow [winbg1en]    mov al,[winbg1en]    mov ebp,0    call makewindow    cmp byte[winon],0FFh    je near .noback1.nobackwin1    xor eax,eax    xor edx,edx    mov ax,[curypos]    inc ax    test byte[mode7set],02h    jz .noflip    neg ax    add ax,255.noflip    mov byte[curmosaicsz],1    test byte[mosaicon],1    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl    xor bh,bh    div bx    xor edx,edx    mul bx.nomos    mov [m7starty],ax    mov ax,[bg1scroly_m7]    mov dx,[bg1scrolx_m7]    test byte[scaddtype],01h    jz .notransp    mov byte[extbgdone],1    call drawmode716textbg.noback1    ret.notransp    mov byte[extbgdone],1    call drawmode716extbg    retNEWSYM procmode716tmainextbgb    cmp byte[extbgdone],0    jne near .noback1    test word[scrnon],01h    jz near .noback1    mov byte[winon],0    test word[winenabm],0001h    jz near .nobackwin1    test word[winenabm],0100h    jnz near .nobackwin1;    procwindow [winbg1en]    mov al,[winbg1en]    mov ebp,0    call makewindow    cmp byte[winon],0FFh    je near .noback1.nobackwin1    xor eax,eax    xor edx,edx    mov ax,[curypos]    inc ax    test byte[mode7set],02h    jz .noflip    neg ax    add ax,255.noflip    mov byte[curmosaicsz],1    test byte[mosaicon],1    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl    xor bh,bh    div bx    xor edx,edx    mul bx.nomos    mov [m7starty],ax    mov ax,[bg1scroly_m7]    mov dx,[bg1scrolx_m7]    test byte[scaddtype],01h    jz .notransp    mov byte[extbgdone],1    call drawmode716textbg.noback1    ret.notransp    mov byte[extbgdone],1    call drawmode716extbg    retNEWSYM procmode716tmainextbg2    cmp byte[extbgdone],0    je near .noback1    mov byte[winon],0    test word[winenabm],0001h    jz near .nobackwin1    test word[winenabm],0100h    jnz near .nobackwin1;    procwindow [winbg1en]    mov al,[winbg1en]    mov ebp,0    call makewindow    cmp byte[winon],0FFh    je near .noback1.nobackwin1    xor eax,eax    xor edx,edx    mov ax,[curypos]    inc ax    test byte[mode7set],02h    jz .noflip    neg ax    add ax,255.noflip    mov byte[curmosaicsz],1    test byte[mosaicon],1    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl    xor bh,bh    div bx    xor edx,edx    mul bx.nomos    mov [m7starty],ax    mov ax,[bg1scroly_m7]    mov dx,[bg1scrolx_m7]    test byte[scaddtype],01h    jz .notransp    call drawmode716textbg2.noback1    ret.notransp    call drawmode716extbg2    retNEWSYM procspritessub16t    cmp byte[bgfixer],1    je near procspritessub16tfix    cmp byte[bgfixer2],1    je near procspritessub16tfix    test byte[scrndis],10h    jnz .nosprites    test byte[scrnon+1],10h    jz .nosprites    test byte[scrnon],10h    jnz .nosprites    cmp byte[winonsp],0FFh    je .nosprites    xor ebx,ebx    mov bl,[curypos]    add ebx,[cursprloc]    mov cl,[ebx]    cmp byte[sprprifix],0    jne .sprprio    add dword[cursprloc],256.sprprio    cmp cl,0    je .nosprites    call drawsprites16b.nosprites    retNEWSYM procspritesmain16t    cmp byte[bgfixer],1    je near procspritesmain16tfix    cmp byte[bgfixer2],1    je near procspritesmain16tfix    test byte[scrndis],10h    jnz .nosprites    test byte[scrnon],10h    jz .nosprites    cmp byte[winonsp],0FFh    je .nosprites    xor ebx,ebx    mov bl,[curypos]    add ebx,[cursprloc]    mov cl,[ebx]    cmp byte[sprprifix],0    jne .sprprio    add dword[cursprloc],256.sprprio    cmp cl,0    je .nosprites    test byte[scrnon+1],10h    jnz .spritesubmain    test byte[scaddtype],10h    jz .nospriteadd    call drawsprites16t.nosprites    ret.nospriteadd    call drawsprites16b    xor eax,eax    ret.spritesubmain    call drawsprites16bt    retNEWSYM drawbackgrndsub16t    cmp byte[bgfixer],1    je near drawbackgrndsub16tfix    cmp byte[bgfixer2],1    je near drawbackgrndsub16tfix    mov esi,[colormodeofs]    mov bl,[esi+ebp]    cmp bl,0    je near .noback    mov al,[curbgnum]    test byte[scrnon+1],al    jz near .noback    test byte[scrnon],al    jnz near .noback    test byte[alreadydrawn],al    jnz near .noback    test byte[scrndis],al    jnz near .noback    mov byte[winon],0    test byte[winenabs],al    jz near .nobackwin;    procwindow [winbg1en+ebp]    mov al,[winbg1en+ebp]    call makewindow    cmp byte[winon],0FFh    je near .noback.nobackwin    mov bl,[curbgnum]    mov byte[curmosaicsz],1    test byte[mosaicon],bl    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl.nomos    mov byte[bgcoloradder],0    cmp byte[bgmode],0    jne .nomode0    mov eax,ebp    mov bl,20h    mul bl    mov [bgcoloradder],al.nomode0    mov esi,[bg1vbufloc+ebp*4]    mov edi,[bg1tdatloc+ebp*4]    mov edx,[bg1tdabloc+ebp*4]    mov ebx,[bg1cachloc+ebp*4]    mov eax,[bg1xposloc+ebp*4]    mov cl,[curbgnum]    test byte[bgtilesz],cl    jnz .16x16    mov ecx,[bg1yaddval+ebp*4]    call draw8x816b    cmp byte[drawn],33    jne .notalldrawn    mov al,[curbgnum]    or [alreadydrawn],al.notalldrawn.noback    ret.16x16    mov ecx,[bg1yaddval+ebp*4]    call draw16x1616b    cmp byte[drawn],33    jne .notalldrawnb    mov al,[curbgnum]    or [alreadydrawn],al.notalldrawnb    retNEWSYM drawbackgrndmain16t    cmp byte[bgfixer],1    je near drawbackgrndmain16tfix    cmp byte[bgfixer2],1    je near drawbackgrndmain16tfix    mov esi,[colormodeofs]    mov bl,[esi+ebp]    cmp bl,0    je near .noback    mov al,[curbgnum]    test byte[scrnon],al    jz near .noback    test byte[alreadydrawn],al    jnz near .noback    test byte[scrndis],al    jnz near .noback    mov byte[winon],0    test byte[winenabm],al    jz near .nobackwin;    procwindow [winbg1en+ebp]    mov al,[winbg1en+ebp]    call makewindow    cmp byte[winon],0FFh    je near .noback.nobackwin    mov bl,[curbgnum]    mov byte[curmosaicsz],1    test byte[mosaicon],bl    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl.nomos    mov byte[bgcoloradder],0

⌨️ 快捷键说明

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