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

📄 newgfx16.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    or [bgcmsung],ebx    mov [BGMS1+eax*2],ebx    cmp [BGMS1+eax*2-2],bx    je .nosbgms1    mov byte[bgallchange+eax],1.nosbgms1    ; if palette[0] = 0 and transparency is just add to back area,    ;   set ngmsdraw to 1    mov byte[clinemainsub],0    cmp word[cgram],0    jne .ngmsdraw0    mov bl,[scrnon]    and bl,1Fh    or bl,0E0h    and bl,[scaddtype]    cmp bl,20h    jne .ngmsdraw0    mov byte[ngmsdraw],1    mov byte[FillSubScr+eax],0    mov byte[clinemainsub],1.ngmsdraw0    ; Scroll Values    mov bx,[bg1scrolx]    mov [BG1SXl+eax*2],bx    cmp [BG1SXl+eax*2-2],bx    je .nosbgx1    mov byte[bg1change+eax],1.nosbgx1    mov bx,[bg2scrolx]    mov [BG2SXl+eax*2],bx    cmp [BG2SXl+eax*2-2],bx    je .nosbgx2    mov byte[bg2change+eax],1.nosbgx2    mov bx,[bg3scrolx]    mov [BG3SXl+eax*2],bx    cmp [BG3SXl+eax*2-2],bx    je .nosbgx3    mov byte[bg3change+eax],1.nosbgx3    mov bx,[bg4scrolx]    mov [BG4SXl+eax*2],bx    cmp [BG4SXl+eax*2-2],bx    je .nosbgx4    mov byte[bg4change+eax],1.nosbgx4    mov bx,[bg1scroly]    mov [BG1SYl+eax*2],bx    cmp [BG1SYl+eax*2-2],bx    je .nosbgy1    mov byte[bg1change+eax],1.nosbgy1    mov bx,[bg2scroly]    mov [BG2SYl+eax*2],bx    cmp [BG2SYl+eax*2-2],bx    je .nosbgy2    mov byte[bg2change+eax],1.nosbgy2    mov bx,[bg3scroly]    mov [BG3SYl+eax*2],bx    cmp [BG3SYl+eax*2-2],bx    je .nosbgy3    mov byte[bg3change+eax],1.nosbgy3    mov bx,[bg4scroly]    mov [BG4SYl+eax*2],bx    cmp [BG4SYl+eax*2-2],bx    je .nosbgy4    mov byte[bg1change+eax],1.nosbgy4    ; Background Mode    mov bl,[bgmode]    and bl,07h    mov [BGMA+eax],bl    cmp bl,4    je .changedmode4    cmp [BGMA+eax-1],bl    je .nobgma.changedmode4    mov byte[bgallchange+eax],1.nobgma    ; new graphics fix, thanks to TRAC    and ebx,07h    mov byte[modeused+ebx],1    ; Pointer to OBJ tile data    mov ebx,[bg1objptr]    mov [BGOPT1+eax*2],ebx    cmp [BGOPT1+eax*2-2],bx    je .nosbgo1    mov byte[bg1change+eax],1.nosbgo1    mov ebx,[bg2objptr]    mov [BGOPT2+eax*2],ebx    cmp [BGOPT2+eax*2-2],bx    je .nosbgo2    mov byte[bg2change+eax],1.nosbgo2    mov ebx,[bg3objptr]    mov [BGOPT3+eax*2],ebx    cmp [BGOPT3+eax*2-2],bx    je .nosbgo3    mov byte[bg3change+eax],1.nosbgo3    mov ebx,[bg4objptr]    mov [BGOPT4+eax*2],ebx    cmp [BGOPT4+eax*2-2],bx    je .nosbgo4    mov byte[bg4change+eax],1.nosbgo4    ; Pointer to tile status data    mov ebx,[bg1ptr]    mov [BGPT1+eax*2],ebx    cmp [BGPT1+eax*2-2],bx    je .nosbgp1    mov byte[bg1change+eax],1.nosbgp1    mov ebx,[bg2ptr]    mov [BGPT2+eax*2],ebx    cmp [BGPT2+eax*2-2],bx    je .nosbgp2    mov byte[bg2change+eax],1.nosbgp2    mov ebx,[bg3ptr]    mov [BGPT3+eax*2],ebx    cmp [BGPT3+eax*2-2],bx    je .nosbgp3    mov byte[bg3change+eax],1.nosbgp3    mov ebx,[bg4ptr]    mov [BGPT4+eax*2],ebx    cmp [BGPT4+eax*2-2],bx    je .nosbgp4    mov byte[bg4change+eax],1.nosbgp4    mov ebx,[bg1ptrx]    mov [BGPT1X+eax*2],ebx    cmp [BGPT1X+eax*2-2],bx    je .nosbgpx1    mov byte[bg1change+eax],1.nosbgpx1    mov ebx,[bg2ptrx]    mov [BGPT2X+eax*2],ebx    cmp [BGPT2X+eax*2-2],bx    je .nosbgpx2    mov byte[bg2change+eax],1.nosbgpx2    mov ebx,[bg3ptrx]    mov [BGPT3X+eax*2],ebx    cmp [BGPT3X+eax*2-2],bx    je .nosbgpx3    mov byte[bg3change+eax],1.nosbgpx3    mov ebx,[bg4ptrx]    mov [BGPT4X+eax*2],ebx    cmp [BGPT4X+eax*2-2],bx    je .nosbgpx4    mov byte[bg4change+eax],1.nosbgpx4    mov ebx,[bg1ptry]    mov [BGPT1Y+eax*2],ebx    cmp [BGPT1Y+eax*2-2],bx    je .nosbgpy1    mov byte[bg1change+eax],1.nosbgpy1    mov ebx,[bg2ptry]    mov [BGPT2Y+eax*2],ebx    cmp [BGPT2Y+eax*2-2],bx    je .nosbgpy2    mov byte[bg2change+eax],1.nosbgpy2    mov ebx,[bg3ptry]    mov [BGPT3Y+eax*2],ebx    cmp [BGPT3Y+eax*2-2],bx    je .nosbgpy3    mov byte[bg3change+eax],1.nosbgpy3    mov ebx,[bg4ptry]    mov [BGPT4Y+eax*2],ebx    cmp [BGPT4Y+eax*2-2],bx    je .nosbgpy4    mov byte[bg4change+eax],1.nosbgpy4    mov ebx,[forceblnk]    or bl,bl    jne .dontdraw    mov dword[scfbl],0.dontdraw    ; Variable size write error fix [TRAC]    mov [BGFB+eax],bl    cmp [BGFB+eax-1],bl    je .nosbgfb    mov byte[bgallchange+eax],1.nosbgfb    test byte[interlval],40h    jz .nointrl    mov byte[bgallchange+eax],1.nointrl    mov ebx,[mode7A]    mov [mode7ab+eax*4],ebx    mov ebx,[mode7C]    mov [mode7cd+eax*4],ebx    mov ebx,[mode7X0]    mov [mode7xy+eax*4],ebx    mov ebx,[mode7set]    mov [mode7st+eax],ebx    ; 16x16 tiles    mov ebx,[BG116x16t]    mov [t16x161+eax],ebx    cmp [t16x161+eax-1],bl    je .not16x161    mov byte[bg1change+eax],1.not16x161    mov ebx,[BG216x16t]    mov [t16x162+eax],ebx    cmp [t16x162+eax-1],bl    je .not16x162    mov byte[bg2change+eax],1.not16x162    mov ebx,[BG316x16t]    mov [t16x163+eax],ebx    cmp [t16x163+eax-1],bl    je .not16x163    mov byte[bg3change+eax],1.not16x163    mov ebx,[BG416x16t]    mov [t16x164+eax],ebx    cmp [t16x164+eax-1],bl    je .not16x164    mov byte[bg4change+eax],1.not16x164;    mov byte[mode7hr+eax],0    cmp byte[bgmode],7    jne .noextbg;    cmp byte[res640],0;    je .nomode7512;    mov byte[mode7hr+eax],1;.nomode7512    test byte[interlval],40h    jz .noextbg    mov byte[ngextbg],1.noextbg    ; mosaic    mov ebx,[mosaicon]    mov [mosenng+eax],ebx    mov ebx,[mosaicsz]    mov [mosszng+eax],ebx    ; Interlaced    mov ebx,[interlval]    mov [intrlng+eax],ebx    ; Set palette    call setpalette16bng    cmp dword[palchanged],1    jne .notpchanged    cmp eax,112    jae .endl    mov [startlinet],eax    jmp .notpchanged.endl    cmp dword[endlinet],255    jb .notpchanged    mov [endlinet],eax.notpchanged    mov ebx,[cpalptrng]    add ebx,[vbufdptr]    mov [cpalval+eax*4],ebx    ; Set Transparency    mov bl,[scaddtype]    mov [scadtng+eax],bl    cmp [scadtng+eax-1],bl    je .noscadt    mov byte[bgallchange+eax],1.noscadt    mov bl,[scaddset]    mov [scadsng+eax],bl    cmp [scadsng+eax-1],bl    je .noscads    mov byte[bgallchange+eax],1.noscads; Windowing Stuff;NEWSYM winl1,      0             ; window 1 left position;NEWSYM winr1,      0             ; window 1 right position;NEWSYM winl2,      0             ; window 2 left position;NEWSYM winr2,      0             ; window 2 right position;NEWSYM winbg1en,   0             ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on BG1;NEWSYM winbg2en,   0             ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on BG2;NEWSYM winbg3en,   0             ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on BG3;NEWSYM winbg4en,   0             ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on BG4;NEWSYM winobjen,   0             ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on sprites;NEWSYM wincolen,   0             ; Win1 on (IN/OUT) or Win2 on (IN/OUT) on backarea;NEWSYM winlogica,  0             ; Window logic type for BG1 to 4;NEWSYM winlogicb,  0             ; Window logic type for Sprites and Backarea;NEWSYM winenabm,   0             ; Window logic enable for main screen;NEWSYM winenabs,   0             ; Window logic enable for sub screen    mov byte[bgwinchange+eax],0    cmp byte[disableeffects],1    je near .finishwin    push ecx    push edx    WinBGCheck 0    WinBGCheck 1    WinBGCheck 2    WinBGCheck 3    WinBGCheck 4    WinBGCheck2 5    mov ebx,[winlogica]    mov [winlogicaval+eax*2],ebx    cmp [winlogicaval+eax*2-2],bx    je .winnchangedb    mov byte[bgwinchange+eax],1.winnchangedb    mov ebx,[winl1]    mov [winboundary+eax*4],ebx    cmp [winboundary+eax*4-4],ebx    je .winnchanged    mov byte[bgwinchange+eax],1.winnchanged    ; generate sprite window    cmp byte[winbg1enval+eax+4*256],0    je near .skipobjw    mov ebx,[winl1]    mov dl,[winobjen]    mov dh,[winlogicb]    and dh,03h    ; Same as previous line?    cmp dword[objwlrpos+eax*4-4],0FFFFFFFFh    je .changed    cmp [objwlrpos+eax*4-4],ebx    jne .changedb    cmp [objwen+eax*2-2],dx    je near .notchanged.changedb    cmp [objwlrpos+eax*4],ebx    jne .changed    cmp [objwen+eax*2],dx    jne .changed    mov ecx,[CSprWinPtr]    cmp [objclineptr+eax*4],ecx    ja near .usecurrent.changed    mov [objwlrpos+eax*4],ebx    mov [objwen+eax*2],dx    mov bl,[winlogicb]    and bl,03h    mov [nglogicval],bl    mov ebx,4*256    add ebx,eax    mov dword[ngwinen],0    call BuildWindow2    cmp dword[ngwinen],0    je near .disablesprwin    mov ecx,[CSprWinPtr]    add ecx,260    mov [CSprWinPtr],ecx    mov [objclineptr+eax*4],ecx    add ecx,[ngwinptr]    ; Construct Window in ecx    push eax    mov ebx,ngwintable    dec ecx    mov eax,256.procnotempty    mov edx,[ebx]    add ebx,4    or edx,edx    jz .procempty    dec edx.swloop    mov dword[ecx],0    add ecx,4    sub eax,4    jc .done    sub edx,4    jnc .swloop    sub eax,edx    add ecx,edx    dec eax    inc ecx.procempty    mov edx,[ebx]    dec edx    add ebx,4.swloop2    mov dword[ecx],01010101h    add ecx,4    sub eax,4    jc .done    sub edx,4    jnc .swloop2    sub eax,edx    add ecx,edx    dec eax    inc ecx    jmp .procnotempty.done    pop eax    jmp .skipobjw.usecurrent    mov ecx,[objclineptr+eax*4]    mov [CSprWinPtr],ecx    cmp ecx,0FFFFFFFFh    jnz .skipobjw    jmp .disablesprwin    ; copy over if it's the same.notchanged    mov [objwlrpos+eax*4],ebx    mov [objwen+eax*2],dx    mov ebx,[objclineptr+eax*4-4]    mov [objclineptr+eax*4],ebx    cmp ebx,0FFFFFFFFh    je .disablesprwin.skipobjw    pop edx    pop ecx    jmp .okaywin.disablesprwin    mov dword[objclineptr+eax*4],0FFFFFFFFh    mov byte[winbg1enval+eax+4*256],0    mov byte[winbg1envals+eax+4*256],0    mov byte[winbg1envalm+eax+4*256],0    pop edx    pop ecx    jmp .okaywin.finishwin    mov byte[winbg1enval+eax],0    mov byte[winbg2enval+eax],0    mov byte[winbg3enval+eax],0    mov byte[winbg4enval+eax],0    mov byte[winbgobjenval+eax],0.okaywin    xor ebx,ebx    mov ebx,[coladdr-1]    mov bl,[vidbright]    cmp [Prevcoladdr],ebx    je .samecolor    mov [Prevcoladdr],ebx    push ecx    push eax    mov al,[coladdr]    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 al,[coladdg]    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[nggposng]    shl ax,cl    add bx,ax    mov al,[coladdb]    mov cl,[vidbright]    mul cl    mov cl,15    div cl    xor ah,ah    mov cl,[ngbposng]    shl ax,cl    add bx,ax    mov [ColResult],bx    mov [ColResult+2],bx    pop eax    pop ecx.samecolor    cmp word[ColResult],0    je .black    cmp byte[FillSubScr+eax],0    je .notblack    or byte[FillSubScr+eax],2    jmp .notblack.black    cmp byte[scrnon+1],0    jne .notblack;    mov byte[clinemainsub],1    test byte[scadtng+eax],40h    jnz .notblack    xor byte[scadtng+eax],1;    mov byte[FillSubScr+eax],0.notblack    ; fill back area    ; get back window settings    mov dword[ngwinen],0    push ecx    push edx    cmp byte[winbg1enval+eax+5*256],0    je .nowindowb    mov bl,[winlogicb]    shr bl,2    and bl,03h    mov [nglogicval],bl    mov ebx,5*256    add ebx,eax    call BuildWindow2.nowindowb    mov dword[BackAreaAdd],0    cmp byte[clinemainsub],1    jne near .domainscreen    mov ebx,[ColResult]    or ebx,[UnusedBit]    mov edx,[UnusedBit]    mov cl,[scaddset].filledscreen    ; get sub-screen colors    test cl,10h    jnz .inside    test cl,20h    jnz .outside.insideb    mov [BackAreaUnFillCol],ebx    mov [BackAreaFillCol],ebx    jmp .donesubscreen.inside    test cl,20h    jnz .filled    mov [BackAreaUnFillCol],edx    mov [BackAreaFillCol],ebx    jmp .donesubscreen.outside    mov [BackAreaUnFillCol],ebx    mov [BackAreaFillCol],edx    jmp .donesubscreen.filled    xor ebx,ebx    mov [BackAreaUnFillCol],edx    mov [BackAreaFillCol],edx    jmp .donesubscreen.domainscreen    mov ebx,[vbufdptr]    add ebx,dword[cpalptrng]    xor edx,edx    mov cx,[ebx]    shl ecx,16    mov cx,[ebx]    mov ebx,ecx    mov cl,[scaddset]    shr cl,2    test byte[scaddtype],20h    jz .notaddbackub    or ebx,[UnusedBit]    mov edx,[UnusedBit].notaddbackub    jmp .filledscreen.donesubscreen    cmp dword[ngwinen],0    jne .nowinsc2    mov edx,[BackAreaUnFillCol]    mov [BackAreaFillCol],edx.nowinsc2    cmp byte[forceblnk],0    je .notforceblanked    mov dword[BackAreaUnFillCol],0    mov dword[BackAreaFillCol],0.notforceblanked    call BackAreaFill    test byte[FillSubScr+eax],1    jz near .nosubscreen2    mov dword[BackAreaAdd],75036*2    mov ebx,[ColResult]    mov edx,[UnusedBit]    test byte[scaddset],02h    jz .notbackfixed    or ebx,[UnusedBit].notbackfixed    mov cl,[scaddset]    ; get sub-screen colors    test cl,10h    jnz .inside2    test cl,20h    jnz .outside2.inside2b    mov [BackAreaUnFillCol],ebx    mov [BackAreaFillCol],ebx    jmp .donesubscreen2.inside2    test cl,20h    jnz .filled2    mov [BackAreaUnFillCol],edx    mov [BackAreaFillCol],ebx    jmp .donesubscreen2.outside2    mov [BackAreaUnFillCol],ebx    mov [BackAreaFillCol],edx    jmp .donesubscreen2.filled2    xor ebx,ebx

⌨️ 快捷键说明

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