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

📄 newgfx16.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    mov [BackAreaUnFillCol],edx    mov [BackAreaFillCol],edx.donesubscreen2    cmp dword[ngwinen],0    jne .nowinsc    mov edx,[BackAreaUnFillCol]    mov [BackAreaFillCol],edx.nowinsc    call BackAreaFill.nosubscreen2    pop edx    pop ecx    mov byte[SpecialLine+eax],0%ifdef __MSDOS__    cmp byte[smallscreenon],1    je .nomode7hr    cmp byte[ScreenScale],1    je .nomode7hr%endif    cmp byte[scanlines],0    jne .nomode7hr    cmp byte[bgmode],7    jb .hrstuff    test byte[interlval],40h    jnz .nomode7hr    cmp byte[Mode7HiRes16b],1    jne .nomode7hr    jmp .hrstuff.nomode7hr    jmp .no512.hrstuff    cmp byte[res640],0    je near .no512    cmp byte[bgmode],5    jb .no512    mov byte[SpecialLine+eax],3    cmp byte[bgmode],7    je .hires    mov byte[SpecialLine+eax],2.hires    mov byte[hiresstuff],1    push edi    push esi    push eax    push ecx    push eax    mov ebx,eax    mov edi,[vidbuffer]    add edi,16*2    shl eax,9    add edi,eax    mov eax,ebx    shl eax,6    add edi,eax    mov esi,edi    add edi,75036*4    push esi    mov ecx,128    rep movsd    pop esi    pop eax    test byte[FillSubScr+eax],1    jz .nosubscreenhires    add esi,75036*2    mov edi,esi    add edi,75036*4    mov ecx,128    rep movsd.nosubscreenhires    pop ecx    pop eax    pop esi    pop edi.no512    cmp byte[scanlines],0    jne .notinterl    test byte[interlval],01h    jz .notinterl    or byte[SpecialLine+eax],4.notinterl    mov ebx,[sprleftpr+eax*4]    cmp ebx,00000001h    je .single    cmp ebx,00000100h    je .single    cmp ebx,00010000h    je .single    cmp ebx,01000000h    je .single    or [sprprdrn],ebx    xor ebx,ebx    ret.single    or [sprprdrn],ebx    or dword[sprleftpr+eax*4],80000000h    xor ebx,ebx    retsection .dataalign 32NEWSYM ngwinenval,  dd 0NEWSYM cdrawbuffer, dd 0NEWSYM draw16bnng,  dd 0NEWSYM scaddsngb,   dd 0NEWSYM scaddtngb,   dd 0NEWSYM scaddtngbx,  dd 0NEWSYM prevbcolng,  dd 0NEWSYM bcolvalng,   dd 0NEWSYM cebppos,     dd 0NEWSYM subscreenonng, dd 0NEWSYM cdrawmeth,   dd 0NEWSYM cpalptrng,   dd 0NEWSYM prevcoladdrng, dd 0NEWSYM prevcolvalng,  dd 0NEWSYM subscrng,      dd 0NEWSYM ngmsdraw,      dd 0NEWSYM CMainWinScr,   dd 0NEWSYM CSubWinScr,    dd 0NEWSYM Prevcoladdr,   dd 0NEWSYM ColResult,     dd 0NEWSYM CPalPtrng,     dd 0NEWSYM WindowRedraw,  dd 0NEWSYM mostranspval,  dd 0NEWSYM mosclineval,   dd 0NEWSYM startlinet,    dd 0NEWSYM endlinet,      dd 0NEWSYM palchanged,    dd 0NEWSYM ng16bbgval, dd 0         ; bg # (mov dword[ng16bbgval],%1)NEWSYM ng16bprval, dd 0         ; 0 = pr0, 2000h = pr1NEWSYM mosjmptab16b, times 15 dd 0NEWSYM mosjmptab16bt, times 15 dd 0NEWSYM mosjmptab16btms, times 15 dd 0NEWSYM mosjmptab16bntms, times 15 dd 0section .textNEWSYM StartDrawNewGfx16b    push edx    push esi    push edi    push ebp    mov byte[WindowRedraw],1    sub dword[endlinet],8    cmp dword[scfbl],0    jne near .dontdraw    ; Sprite Layering :    ; Mode 0/1 - BG4/BG3pr0 * BG4/BG3pr1 * BG2/BG1pr0 * BG2/BG1pr0 * BG3pr1    ; Mode 2-6 - BG2pr0 * BG1pr0 * BG2pr1 * BG1pr1 *    ; Mode 7 - * BG1pr0 * BG1pr1 * *    ; Copy data to sprite table    mov ecx,256    mov eax,[spritetablea]    mov ebx,sprlefttot    mov edi,sprtbng.loop    mov [edi],eax    add eax,512    inc ebx    add edi,4    dec ecx    jnz .loop    xor eax,eax    mov edi,sprtlng    mov ecx,64    rep stosd    mov byte[firstdrawn],1    mov dword[bg1totng],0    mov dword[bg2totng],0    mov dword[bg3totng],0    mov dword[bg4totng],0    mov dword[bg1drwng],0    mov dword[bg2drwng],0    mov dword[bg3drwng],0    mov dword[bg4drwng],0    cmp byte[ngmsdraw],0    je near .skipallsub    mov dword[CMainWinScr],winbg1envals    mov dword[CSubWinScr],winbg1envals    mov dword[subscrng],1    ; Draw SubScreens    test byte[scrndis],8h    jnz near .nodobg4s    test dword[bgcmsung],800h    jz near .nodobg4s    mov dword[mode0ads],60606060h    Procbgpr016b 3, drawbg4line16b, drawbg4tile16b, ngsub, 8h.nodobg4s    test byte[scrndis],4h    jnz near .nodobg3s    test dword[bgcmsung],400h    jz near .nodobg3s    mov dword[mode0ads],40404040h    Procbg3pr016b 2, drawbg3line16b, drawbg3tile16b, ngsub, 4h.nodobg3s    ; draw sprites mode 0-1    test byte[scrndis],10h    jnz near .nosprpra    test dword[modeused],00000101h    jz near .nosprpra    test dword[bgcmsung],1000h    jz near .nosprpra    Procsprng0116b ngsub, 10h.nosprpra    test byte[scrndis],8h    jnz near .nodobg4sb    test dword[bgcmsung],800h    jz near .nodobg4sb    mov eax,[bg4totng]    cmp eax,[bg4drwng]    je near .nodobg4sb    mov dword[mode0ads],60606060h    Procbgpr116b 3, drawbg4linepr116b, drawbg4tilepr116b, prdata, ngsub, 8h.nodobg4sb    test byte[scrndis],4h    jnz near .nodobg3sb    test dword[bgcmsung],400h    jz near .nodobg3sb    mov eax,[bg3totng]    cmp eax,[bg3drwng]    je near .nodobg3sb    mov dword[mode0ads],40404040h    Procbg3pr116b 2, drawbg3linepr116b, drawbg3tilepr116b, prdatc, ngsub, 4h.nodobg3sb    ; draw sprites mode 0-1    test byte[scrndis],10h    jnz near .nosprprb    test dword[modeused],00000101h    jz near .nosprprb    test dword[bgcmsung],1000h    jz near .nosprprb    Procsprng0116b ngsub, 10h.nosprprb    test byte[scrndis],2h    jnz near .nodobg2s    test dword[bgcmsung],200h    jz near .nodobg2s    mov dword[mode0ads],20202020h    Procbgpr016b 1, drawbg2line16b, drawbg2tile16b, ngsub, 2h.nodobg2s    ; draw mode 7 extbg pr 0    cmp byte[ngextbg],0    je near .noextbgsc    test dword[bgcmsung],300h    jz near .noextbgsc    ProcMode7ngextbg16b ngsub, 3h.noextbgsc    ; draw sprites mode 2-7    test byte[scrndis],10h    jnz near .nosprprc    test dword[modeused],01010000h    jnz near .yessprprc    test dword[modeused+4],01010101h    jz near .nosprprc.yessprprc    test dword[bgcmsung],1000h    jz near .nosprprc    Procsprng23456716b ngsub, 10h.nosprprc    test byte[scrndis],1h    jnz near .nodobg1s    test dword[bgcmsung],100h    jz near .nodobg1s    mov dword[mode0ads],00000000h    Procbgpr016b 0, drawbg1line16b, drawbg1tile16b, ngsub, 1h.nodobg1s    ; draw mode 7, priority 0    cmp byte[modeused+7],0    je near .nomode7    test dword[bgcmsung],300h    jz near .nomode7    ProcMode7ng16b ngsub, 1h.nomode7    ; draw sprites mode 0-7    test byte[scrndis],10h    jnz near .nosprprd    test dword[bgcmsung],1000h    jz near .nosprprd    Procsprng16b ngsub, 10h.nosprprd    test byte[scrndis],2h    jnz near .nodobg2sb    test dword[bgcmsung],200h    jz near .nodobg2sb    mov eax,[bg2totng]    cmp eax,[bg2drwng]    je near .nodobg2sb    mov dword[mode0ads],20202020h    Procbgpr116b 1, drawbg2linepr116b, drawbg2tilepr116b, prdata, ngsub, 2h.nodobg2sb    ; draw mode 7 extbg pr 1    cmp byte[ngextbg],0    je near .noextbgscb    test dword[bgcmsung],300h    jz near .noextbgscb    ProcMode7ngextbg216b ngsub, 2h.noextbgscb    ; draw sprites mode 2-7    test byte[scrndis],10h    jnz near .nosprpre    test dword[modeused],01010000h    jnz near .yessprpre    test dword[modeused+4],01010101h    jz near .nosprpre.yessprpre    test dword[bgcmsung],1000h    jz near .nosprpre    Procsprng23456716b ngsub, 10h.nosprpre    test byte[scrndis],1h    jnz near .nodobg1sb    test dword[bgcmsung],100h    jz near .nodobg1sb    mov eax,[bg1totng]    cmp eax,[bg1drwng]    je near .nodobg1sb    mov dword[mode0ads],00000000h    Procbgpr116b 0, drawbg1linepr116b, drawbg1tilepr116b, prdatb, ngsub, 1h.nodobg1sb    ; draw sprites mode 0-7    test byte[scrndis],10h    jnz near .nosprprf    test dword[bgcmsung],1000h    jz near .nosprprf    Procsprng16b ngsub, 10h.nosprprf    test byte[scrndis],4h    jnz near .nodobg3sb2    cmp byte[modeused+1],0    je near .nodobg3sb2    test dword[bgcmsung],400h    jz near .nodobg3sb2    mov eax,[bg3totng]    cmp eax,[bg3drwng]    je near .nodobg3sb2    mov dword[mode0ads],40404040h    Procbg3pr1b16b 2, drawbg3linepr116b, drawbg3tilepr116b, prdatc, ngsub, 4h.nodobg3sb2    mov dword[bg1totng],0    mov dword[bg2totng],0    mov dword[bg3totng],0    mov dword[bg4totng],0    mov dword[bg1drwng],0    mov dword[bg2drwng],0    mov dword[bg3drwng],0    mov dword[bg4drwng],0.skipallsub    mov dword[CMainWinScr],winbg1envalm    mov dword[CSubWinScr],winbg1envals    mov dword[subscrng],0    ; Draw MainScreens    test byte[scrndis],8h    jnz near .nodobg4m    test dword[bgcmsung],808h    jz near .nodobg4m    mov dword[mode0ads],60606060h    Procbgpr016b 3, drawbg4line16b, drawbg4tile16b, ngmain, 8h.nodobg4m    test byte[scrndis],4h    jnz near .nodobg3m    test dword[bgcmsung],404h    jz near .nodobg3m    mov dword[mode0ads],40404040h    Procbg3pr016b 2, drawbg3line16b, drawbg3tile16b, ngmain, 4h.nodobg3m    ; draw sprites mode 0-1    test byte[scrndis],10h    jnz near .nosprprma    test dword[modeused],00000101h    jz near .nosprprma    test dword[bgcmsung],1010h    jz near .nosprprma    Procsprng0116b ngmain, 10h.nosprprma    test byte[scrndis],8h    jnz near .nodobg4mb    test dword[bgcmsung],808h    jz near .nodobg4mb    mov eax,[bg4totng]    cmp eax,[bg4drwng]    je near .nodobg4mb    mov dword[mode0ads],60606060h    Procbgpr116b 3, drawbg4linepr116b, drawbg4tilepr116b, prdata, ngmain, 8h.nodobg4mb    test byte[scrndis],4h    jnz near .nodobg3mb    test dword[bgcmsung],4h    jz near .nodobg3mb    mov eax,[bg3totng]    cmp eax,[bg3drwng]    je near .nodobg3mb    mov dword[mode0ads],40404040h    Procbg3pr116b 2, drawbg3linepr116b, drawbg3tilepr116b, prdatc, ngmain, 4h.nodobg3mb    ; draw sprites mode 0-1    test byte[scrndis],10h    jnz near .nosprprmb    test dword[modeused],00000101h    jz near .nosprprmb    test dword[bgcmsung],1010h    jz near .nosprprmb    Procsprng0116b ngmain, 10h.nosprprmb    test byte[scrndis],2h    jnz near .nodobg2m    test dword[bgcmsung],202h    jz near .nodobg2m    mov dword[mode0ads],20202020h    Procbgpr016b 1, drawbg2line16b, drawbg2tile16b, ngmain, 2h.nodobg2m    ; draw mode 7 extbg pr 0    cmp byte[ngextbg],0    je near .noextbgmn    test dword[bgcmsung],303h    jz near .noextbgmn    ProcMode7ngextbg16b ngmain ,3h.noextbgmn    ; draw sprites mode 2-7    test byte[scrndis],10h    jnz near .nosprprmc    test dword[modeused],01010000h    jnz near .yessprprmc    test dword[modeused+4],01010101h    jz near .nosprprmc.yessprprmc    test dword[bgcmsung],1010h    jz near .nosprprmc    Procsprng23456716b ngmain ,10h.nosprprmc    test byte[scrndis],1h    jnz near .nodobg1m    test dword[bgcmsung],101h    jz near .nodobg1m    mov dword[mode0ads],00000000h    Procbgpr016b 0, drawbg1line16b, drawbg1tile16b, ngmain,  1h.nodobg1m    ; draw mode 7, priority 0    cmp byte[modeused+7],0    je near .nomode7m    test dword[bgcmsung],101h    jz near .nomode7m    ProcMode7ng16b ngmain ,1h.nomode7m    ; draw sprites mode 0-7    test byte[scrndis],10h    jnz near .nosprprmd    test dword[bgcmsung],1010h    jz near .nosprprmd    Procsprng16b ngmain ,10h.nosprprmd    ; draw mode 7 extbg pr 1    cmp byte[ngextbg],0    je near .noextbgmn2    test dword[bgcmsung],303h    jz near .noextbgmn2    ProcMode7ngextbg216b ngmain ,2h.noextbgmn2    test byte[scrndis],2h    jnz near .nodobg2mb    test dword[bgcmsung],202h    jz near .nodobg2mb    mov eax,[bg2totng]    cmp eax,[bg2drwng]    je near .nodobg2mb    mov dword[mode0ads],20202020h    Procbgpr116b 1, drawbg2linepr116b, drawbg2tilepr116b, prdata, ngmain, 2h.nodobg2mb    ; draw sprites mode 2-7    test byte[scrndis],10h    jnz near .nosprprme    test dword[modeused],01010000h    jnz near .yessprprme    test dword[modeused+4],01010101h    jz near .nosprprme.yessprprme    test dword[bgcmsung],1010h    jz near .nosprprme    Procsprng23456716b ngmain ,10h.nosprprme    test byte[scrndis],1h    jnz near .nodobg1mb    test dword[bgcmsung],101h    jz near .nodobg1mb    mov eax,[bg1totng]    cmp eax,[bg1drwng]    je near .nodobg1mb    mov dword[mode0ads],00000000h    Procbgpr116b 0, drawbg1linepr116b, drawbg1tilepr116b, prdatb, ngmain, 1h.nodobg1mb    ; draw sprites mode 0-7    test byte[scrndis],10h    jnz near .nosprprmf    test dword[bgcmsung],1010h    jz near .nosprprmf    Procsprng16b ngmain, 10h.nosprprmf    test byte[scrndis],4h    jnz near .nodobg3mb2    cmp byte[modeused+1],0    je near .nodobg3mb2    test dword[bgcmsung],404h    jz near .nodobg3mb2    mov eax,[bg3totng]    cmp eax,[bg3drwng]    je near .nodobg3mb2    mov dword[mode0ads],40404040h    Procbg3pr1b16b 2, drawbg3linepr116b, drawbg3tilepr116b, prdatc, ngmain, 4h.nodobg3mb2    call MainScreenClip    call ProcessTransparencies.dontdraw    xor ebx,ebx    xor ecx,ecx    xor eax,eax    pop ebp    pop edi    pop esi    pop edx    retNEWSYM domosaicng16b    mov esi,[pesimpng]    xor eax,eax    mov edi,xtravbuf+32    mov al,[curmosaicsz]    cmp al,16    ja .notokay    cmp al,1    jbe .notokay    push esi    push ebx    mov ebx,[mosclineval]    mov cl,[mostranspval]    cmp byte[BGMA+ebx],7    je .main    test byte[BGMS1+ebx*2],cl    jz .nosubmain    test byte[FillSubScr+ebx],1    jnz .transpstuff    jmp .main.nosubmain    test byte[FillSubScr+ebx],1    jz .main    add esi,75036*2.main    pop ebx    jmp [mosjmptab16b+eax*4-8]    pop esi.notokay    ret.transpstuff    test byte[BGMS1+ebx*2+1],cl    jnz near .mosaicms    test byte[scadtng+ebx],cl    jz near .main    pop ebx    jmp [mosjmptab16bt+eax*4-8]    pop esi    ret.mosaicms    test byte[scadtng+ebx],cl    jz near .mosaicmsnt    pop ebx    jmp [mosjmptab16btms+eax*4-8]    pop esi    ret.mosaicmsnt    pop ebx    jmp [mosjmptab16bntms+eax*4-8]    pop esi    ret%macro mosaic2 1    mov [esi+%1],ax    mov [esi+%1+2],ax%endmacro

⌨️ 快捷键说明

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