📄 newgfx16.asm
字号:
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 dword[BackAreaUnFillCol],ebx
mov dword[BackAreaFillCol],ebx
jmp .donesubscreen2
.inside2
test cl,20h
jnz .filled2
mov dword[BackAreaUnFillCol],edx
mov [BackAreaFillCol],ebx
jmp .donesubscreen2
.outside2
mov [BackAreaUnFillCol],ebx
mov dword[BackAreaFillCol],edx
jmp .donesubscreen2
.filled2
xor ebx,ebx
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
cmp byte[smallscreenon],1
je .nomode7hr
cmp byte[ScreenScale],1
je .nomode7hr
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,dword[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
ret
ALIGN32
NEWSYM ngwinenval, dd 0
NEWSYM cdrawbuffer, dd 0
NEWSYM draw16bnng, dd 0
NEWSYM scaddsngb, dd 0
NEWSYM scaddtngb, dd 0
NEWSYM scaddtngbx, dd 0
NEWSYM prevbcolng, dd 0
NEWSYM bcolvalng, dd 0
NEWSYM cebppos, dd 0
NEWSYM subscreenonng, dd 0
NEWSYM cdrawmeth, dd 0
NEWSYM cpalptrng, dd 0
NEWSYM prevcoladdrng, dd 0
NEWSYM prevcolvalng, dd 0
NEWSYM cbackofsaddr, dd 0
NEWSYM cbackofsaddrs, dd 0
NEWSYM cbackofsaddrm, dd 0
NEWSYM subscrng, dd 0
NEWSYM ngmsdraw, dd 0
NEWSYM CMainWinScr, dd 0
NEWSYM CSubWinScr, dd 0
NEWSYM Prevcoladdr, dd 0
NEWSYM ColResult, dd 0
NEWSYM CPalPtrng, dd 0
NEWSYM WindowRedraw, dd 0
NEWSYM mostranspval, dd 0
NEWSYM mosclineval, dd 0
NEWSYM startlinet, dd 0
NEWSYM endlinet, dd 0
NEWSYM palchanged, dd 0
NEWSYM ng16bbgval, dd 0 ; bg # (mov dword[ng16bbgval],%1)
NEWSYM ng16bprval, dd 0 ; 0 = pr0, 2000h = pr1
NEWSYM mosjmptab16b, times 15 dd 0
NEWSYM mosjmptab16bt, times 15 dd 0
NEWSYM mosjmptab16btms, times 15 dd 0
NEWSYM mosjmptab16bntms, times 15 dd 0
NEWSYM StartDrawNewGfx16b
push edx
push esi
push edi
push ebp
mov byte[WindowRedraw],1
sub dword[endlinet],8
; Clear video memory
; mov edi,[vidbuffer]
; xor eax,eax
; add edi,32
; mov dl,[resolutn]
;.loopa
; mov ecx,128
; rep stosd
; add edi,64
; dec dl
; jnz .loopa
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -