📄 newgfx16.asm
字号:
pop ebx
pop esi
ret
.clearcsprmem
xor eax,eax
mov ecx,64
mov edi,sprpriodata+16
rep stosd
pop ebx
pop esi
ret
.drawsingle
push esi
push ebx
mov edi,esi
mov esi,[sprtbng+ebx*4]
mov edx,ecx
and edx,0FFh
shl edx,3
sub edx,8
add edx,esi
mov esi,edx
xor ebx,ebx
.loopobj2
test byte[esi+7],20h
jnz near .drawspriteflipx2
mov bx,[esi]
mov ch,[esi+6]
mov esi,[esi+2]
sprdrawa16b %2
sub edx,8
mov esi,edx
dec cl
jnz near .loopobj2
pop ebx
pop esi
ret
.drawspriteflipx2
mov bx,[esi]
mov ch,[esi+6]
mov esi,[esi+2]
sprdrawaf16b %2
sub edx,8
mov esi,edx
dec cl
jnz near .loopobj2
pop ebx
pop esi
ret
%endmacro
%macro normalwsprng16b 2
; cmp byte[winbg1enval+eax+4*256],0
; je near .skipobjw
;NEWSYM objclineptr, times 256 dd 0 ; l1,r1,l2,r2,en,log,ptr
xor eax,eax
mov [NGNumSpr],cl
mov ecx,[objclineptr+ebx*4]
add ecx,[ngwinptr]
test dword[sprleftpr+ebx*4],80000000h
jnz near .drawsingle
push esi
push ebx
add edi,esi
mov esi,[sprtbng+ebx*4]
mov edx,esi
xor ebx,ebx
.loopobj
test byte[esi+7],20h
jnz near .drawspriteflipx
mov bx,[esi]
push edx
mov dl,[esi+7]
and edx,03h
cmp edx,[csprival]
jne near .notprio
mov dh,[esi+6]
mov esi,[esi+2]
mov dl,[csprbit]
sprdrawa16b %1
pop edx
.nodrawspr
add edx,8
mov esi,edx
dec byte[NGNumSpr]
jnz near .loopobj
rol byte[csprbit],1
cmp byte[csprbit],1
je near .clearcsprmem
pop ebx
pop esi
xor ecx,ecx
ret
.notprio
mov esi,[esi+2]
mov dl,[csprbit]
sprdrawa sprdrawpra2
pop edx
add edx,8
mov esi,edx
dec byte[NGNumSpr]
jnz near .loopobj
rol byte[csprbit],1
cmp byte[csprbit],1
je near .clearcsprmem
pop ebx
pop esi
xor ecx,ecx
ret
.drawspriteflipx
mov bx,[esi]
push edx
mov dl,[esi+7]
and edx,03h
cmp edx,[csprival]
jne near .notpriof
mov dh,[esi+6]
mov esi,[esi+2]
mov dl,[csprbit]
sprdrawaf16b %1
pop edx
add edx,8
mov esi,edx
dec byte[NGNumSpr]
jnz near .loopobj
rol byte[csprbit],1
cmp byte[csprbit],1
je near .clearcsprmem
.endobj
pop ebx
pop esi
xor ecx,ecx
ret
.notpriof
mov esi,[esi+2]
mov dl,[csprbit]
sprdrawaf sprdrawpra2
pop edx
add edx,8
mov esi,edx
dec byte[NGNumSpr]
jnz near .loopobj
rol byte[csprbit],1
cmp byte[csprbit],1
je near .clearcsprmem
pop ebx
pop esi
xor ecx,ecx
xor ecx,ecx
ret
.clearcsprmem
xor eax,eax
mov ecx,64
mov edi,sprpriodata+16
rep stosd
pop ebx
pop esi
ret
.drawsingle
push esi
push ebx
mov edi,esi
mov esi,[sprtbng+ebx*4]
xor edx,edx
mov dl,[NGNumSpr]
and edx,0FFh
shl edx,3
sub edx,8
add edx,esi
mov esi,edx
xor ebx,ebx
.loopobj2
test byte[esi+7],20h
jnz near .drawspriteflipx2
push edx
mov bx,[esi]
mov dh,[esi+6]
mov esi,[esi+2]
sprdrawa16b %2
pop edx
sub edx,8
mov esi,edx
dec byte[NGNumSpr]
jnz near .loopobj2
pop ebx
pop esi
xor ecx,ecx
ret
.drawspriteflipx2
push edx
mov bx,[esi]
mov dh,[esi+6]
mov esi,[esi+2]
sprdrawaf16b %2
pop edx
sub edx,8
mov esi,edx
dec byte[NGNumSpr]
jnz near .loopobj2
pop ebx
pop esi
xor ecx,ecx
ret
%endmacro
; FillSubScr bit 0 sets to 1 if there is no subscreen present
; ms,wms,wm,ws
; FillSubScr scadtng
NEWSYM drawsprng16b
test byte[BGMS1+ebx*2],10h
jz .nosubmain
test byte[FillSubScr+ebx],1
jnz near drawsprng16bt
.nosubmain
mov ebp,[cpalval+ebx*4]
xor eax,eax
mov edi,[CMainWinScr]
test byte[FillSubScr+ebx],1
jz .main2
test byte[BGMS1+ebx*2],10h
jnz .main2
mov edi,[CSubWinScr]
.main2
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16b
test byte[FillSubScr+ebx],1
jz .main
test byte[BGMS1+ebx*2],10h
jnz .main
add esi,75036*2
.main
xor edi,edi
normalsprng16b sprdrawpra16bng,sprdrawprb16bng
NEWSYM drawsprngw16b
xor edi,edi
test byte[FillSubScr+ebx],1
jz .main
test byte[BGMS1+ebx*2],10h
jnz .main
add esi,75036*2
.main
normalwsprng16b sprdrawprawb16bng,sprdrawprbwb16bng
drawsprng16bt:
test byte[scadtng+ebx],10h
jz near drawsprng16bnt
mov ebp,[cpalval+ebx*4]
xor eax,eax
test byte[BGMS1+ebx*2+1],10h
jnz near drawsprng16bmst
mov edi,[CMainWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bt
xor edi,edi
normalsprng16b sprdrawpra16bngt,sprdrawprb16bngt
NEWSYM drawsprngw16bt
xor edi,edi
normalwsprng16b sprdrawprawb16bngt,sprdrawprbwb16bngt
drawsprng16bmst:
mov edi,[CMainWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bmt
mov edi,[CSubWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bst
xor edi,edi
normalsprng16b sprdrawpra16bngmst,sprdrawprb16bngmst
drawsprngw16bst:
xor edi,edi
normalwsprng16b sprdrawprawb16bngst,sprdrawprbwb16bngst
drawsprngw16bmt:
mov edi,[CSubWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bmst
xor edi,edi
normalwsprng16b sprdrawprawb16bngmt,sprdrawprbwb16bngmt
drawsprngw16bmst:
xor edi,edi
normalwsprng16b sprdrawprawb16bngmst,sprdrawprbwb16bngmst
drawsprng16bnt:
mov ebp,[cpalval+ebx*4]
xor eax,eax
test byte[BGMS1+ebx*2+1],10h
jnz near drawsprng16bmsnt
mov edi,[CMainWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16b
xor edi,edi
normalsprng16b sprdrawpra16bngnt,sprdrawprb16bngnt
drawsprngw16bnt
xor edi,edi
normalwsprng16b sprdrawprawb16bngnt,sprdrawprbwb16bngnt
drawsprng16bmsnt:
mov edi,[CMainWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bmnt
mov edi,[CSubWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bsnt
xor edi,edi
normalsprng16b sprdrawpra16bngmsnt,sprdrawprb16bngmsnt
drawsprngw16bsnt:
xor edi,edi
normalwsprng16b sprdrawprawb16bngsnt,sprdrawprbwb16bngsnt
drawsprngw16bmnt:
mov edi,[CSubWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bmsnt
xor edi,edi
normalwsprng16b sprdrawprawb16bngmnt,sprdrawprbwb16bngmnt
drawsprngw16bmsnt:
xor edi,edi
normalwsprng16b sprdrawprawb16bngmsnt,sprdrawprbwb16bngmsnt
NEWSYM drawsprng16bhr
test byte[BGMS1+ebx*2],10h
jz .nosubmain
test byte[FillSubScr+ebx],1
jnz near drawsprng16bthr
.nosubmain
mov ebp,[cpalval+ebx*4]
xor eax,eax
mov edi,[CMainWinScr]
test byte[FillSubScr+ebx],1
jz .main2
test byte[BGMS1+ebx*2],10h
jnz .main2
mov edi,[CSubWinScr]
.main2
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bhr
test byte[FillSubScr+ebx],1
jz .main
test byte[BGMS1+ebx*2],10h
jnz .main
add esi,75036*2
.main
xor edi,edi
normalsprng16b sprdrawpra16bnghr,sprdrawprb16bnghr
NEWSYM drawsprngw16bhr
xor edi,edi
test byte[FillSubScr+ebx],1
jz .main
test byte[BGMS1+ebx*2],10h
jnz .main
add esi,75036*2
.main
normalwsprng16b sprdrawprawb16bnghr,sprdrawprbwb16bnghr
drawsprng16bthr:
test byte[scadtng+ebx],10h
jz near drawsprng16bnthr
mov ebp,[cpalval+ebx*4]
xor eax,eax
test byte[BGMS1+ebx*2+1],10h
jnz near drawsprng16bmsthr
mov edi,[CMainWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bthr
xor edi,edi
normalsprng16b sprdrawpra16bngthr,sprdrawprb16bngthr
NEWSYM drawsprngw16bthr
xor edi,edi
normalwsprng16b sprdrawprawb16bngthr,sprdrawprbwb16bngthr
drawsprng16bmsthr:
mov edi,[CMainWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bmthr
mov edi,[CSubWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bsthr
xor edi,edi
normalsprng16b sprdrawpra16bngmsthr,sprdrawprb16bngmsthr
drawsprngw16bsthr:
xor edi,edi
normalwsprng16b sprdrawprawb16bngsthr,sprdrawprbwb16bngsthr
drawsprngw16bmthr:
mov edi,[CSubWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bmsthr
xor edi,edi
normalwsprng16b sprdrawprawb16bngmthr,sprdrawprbwb16bngmthr
drawsprngw16bmsthr:
xor edi,edi
normalwsprng16b sprdrawprawb16bngmsthr,sprdrawprbwb16bngmsthr
drawsprng16bnthr:
mov ebp,[cpalval+ebx*4]
xor eax,eax
test byte[BGMS1+ebx*2+1],10h
jnz near drawsprng16bmsnthr
mov edi,[CMainWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bhr
xor edi,edi
normalsprng16b sprdrawpra16bngnthr,sprdrawprb16bngnthr
drawsprngw16bnthr
xor edi,edi
normalwsprng16b sprdrawprawb16bngnthr,sprdrawprbwb16bngnthr
drawsprng16bmsnthr:
mov edi,[CMainWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bmnthr
mov edi,[CSubWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bsnthr
xor edi,edi
normalsprng16b sprdrawpra16bngmsnthr,sprdrawprb16bngmsnthr
drawsprngw16bsnthr:
xor edi,edi
normalwsprng16b sprdrawprawb16bngsnthr,sprdrawprbwb16bngsnthr
drawsprngw16bmnthr:
mov edi,[CSubWinScr]
cmp byte[edi+ebx+4*256],0
jne near drawsprngw16bmsnthr
xor edi,edi
normalwsprng16b sprdrawprawb16bngmnthr,sprdrawprbwb16bngmnthr
drawsprngw16bmsnthr:
xor edi,edi
normalwsprng16b sprdrawprawb16bngmsnthr,sprdrawprbwb16bngmsnthr
ProcessTransparencies:
cmp byte[NGNoTransp],0
je .yestransp
ret
.yestransp
cmp byte[FPUCopy],2
je near ProcessTransparenciesMMX
mov esi,[vidbuffer]
add esi,16*2+288*2
mov ebx,1
.nextline
test byte[FillSubScr+ebx],1
jz near .notransp
mov dword[HiResDone],0
.againtransp
test byte[scadtng+ebx],40h
jz near .fulltransp
test byte[scadtng+ebx],80h
jnz near .subtract
; Half Add
push esi
push ebx
; filter out all fixed color sub-screen
test byte[FillSubScr+ebx],2
jnz .halfaddcomb
mov ecx,256
mov ebx,[UnusedBit]
mov edi,[HalfTrans]
xor eax,eax
jmp .next2
.notranspha
add esi,2
dec ecx
jz .done
.next2
mov ax,[esi]
test ax,bx
jz .notranspha
mov dx,[esi+75036*2]
test dx,bx
jnz .notranspha
and eax,edi
and edx,edi
add eax,edx
shr eax,1
mov [esi],ax
add esi,2
loop .next2
.done
pop ebx
pop esi
jmp .donetransp
.halfaddcomb
mov ecx,256
mov ebx,[UnusedBit]
mov edi,[HalfTrans]
xor eax,eax
xor edx,edx
jmp .next2c
.notransphac
add esi,2
dec ecx
jz .donec
.next2c
mov ax,[esi]
test ax,bx
jz .notransphac
mov dx,[esi+75036*2]
test dx,bx
jnz .fulladdtranspc
and eax,edi
and edx,edi
add eax,edx
shr eax,1
mov [esi],ax
add esi,2
loop .next2c
.donec
pop ebx
pop esi
jmp .donetransp
.fulladdtranspc
and eax,edi
and edx,edi
add eax,edx
shr eax,1
mov ax,[fulladdtab+eax*2]
mov [esi],ax
add esi,2
loop .next2c
pop ebx
pop esi
jmp .donetransp
.subtract
push ebx
push esi
; half adder
mov ecx,256
mov ebp,[HalfTrans]
xor edx,edx
mov bx,[UnusedBit]
.nextfshs
mov ax,[esi]
test ax,bx
je .notranspfshs
mov dx,[esi+75036*2]
xor ax,0FFFFh
and edx,ebp
and eax,ebp
add edx,eax
shr edx,1
mov dx,[fulladdtab+edx*2]
xor dx,0FFFFh
test word[esi+75036*2],bx
jnz .nothalfhs
and edx,ebp
shr edx,1
.nothalfhs
mov [esi],dx
.notranspfshs
add esi,2
loop .nextfshs
pop esi
pop ebx
jmp .donetransp
.fulltransp
test byte[scadtng+ebx],80h
jnz near .fullsubtract
push ebx
push esi
mov ecx,256
mov ebp,[HalfTrans]
xor edx,edx
xor eax,eax
mov bx,[UnusedBit]
.nextfa
mov ax,[esi]
test ax,bx
jz .notranspfa
mov dx,[esi+75036*2]
and eax,ebp
and edx,ebp
add edx,eax
shr edx,1
mov dx,[fulladdtab+edx*2]
mov [esi],dx
.notranspfa
add esi,2
loop .nextfa
pop esi
pop ebx
jmp .donetransp
.fullsubtract
push ebx
push
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -