📄 newgfx16.asm
字号:
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 + -