Files
lba1-classic/LIB386/LIB_SVGA/TEXTURE.ASM
Gwen Gourevich c5f4f6ba25 Initial commit
2021-10-27 10:34:18 +02:00

2258 lines
35 KiB
NASM
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
; (c) Adeline 1993
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
.386P
jumps
.model SMALL, SYSCALL
.data
include \projet\lib386\lib_svga\svga.ash
extrn NoLanguage TabVerticG :WORD
extrn NoLanguage TabCoulG :WORD
extrn NoLanguage TabCoulD :WORD
extrn NoLanguage Ymin :WORD
extrn NoLanguage Ymax :WORD
EVEN
public NoLanguage TabText
TabText dw 32*3 dup(00)
boucle dw 00
loopy dw 00
darkdec dw 00
ALIGN 4
xstep dd 0000
ystep dd 0000
ptrlig dd 0000
ptrmap dd 0000
ptrtab dd 0000
public NoLanguage LYmin
public NoLanguage LYmax
LYmin dd 0000
LYmax dd 0000
extrn NoLanguage TabGauche:WORD
extrn NoLanguage TabDroite:WORD
extrn NoLanguage TabX0:WORD
extrn NoLanguage TabY0:WORD
extrn NoLanguage TabX1:WORD
extrn NoLanguage TabY1:WORD
extrn NoLanguage TabPoly:WORD
extrn NoLanguage P_SinTab:WORD
TAB_GAUCHE equ 960*0
TAB_DROITE equ 960*1
TAB_X0 equ 960*2
TAB_Y0 equ 960*3
TAB_X1 equ 960*4
TAB_Y1 equ 960*5
.code
public NoLanguage FillTextPoly
public NoLanguage FillTextPolyNoClip
; public NoLanguage M_FillTextPoly
public NoLanguage FillTextPolyShade
public NoLanguage AsmTexturedTriangleNoClip
public NoLanguage AsmGouraudTriangleNoClip
public NoLanguage AsmFillProp
public NoLanguage AsmFillPropNoClip
; public NoLanguage M_AsmFillProp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
; ÛßßßÛ ÛßßßÛ Û Û Üß ÛÛßßß
; ÛÛßßß ÛÛ Û ÛÛ ÛÛß ßßßßÛ
; ßß ßßßßß ßßßßß ßß ßßßßß
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
comment #
void FillProp( WORD *ptrdest, WORD x0, WORD y0, WORD x1, WORD y1 )
{
WORD y, t ;
if( y0 > y1 )
{
t=y0; y0=y1; y1=t;
t=x0; x0=x1; x1=t;
}
for( y=y0; y<=y1; y++ )
{
ptrdest[y] = RegleTrois32( x0, x1, y1-y0+1, y-y0 ) ;
}
}
#
AsmFillProp proc uses esi edi ebx ebp,\
ptrdest:DWORD, x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
mov edi, ptrdest
mov eax, y0
mov ecx, y1
mov ebx, x0
mov edx, x1
cmp eax, ecx ; y0 < y1
jle afp0
xchg eax, ecx ; y0 <> y1
xchg ebx, edx ; x0 <> x1
afp0:
cmp eax, [ClipYmax]
jg nofill
cmp ecx, [ClipYmin]
jl nofill
cmp eax, [ClipYmin]
jl clip_ymin
afp01: cmp ecx, [ClipYmax]
jle afp00
clip_ymax:
push edi
push eax
mov edi, ebx
sub edi, edx ; dx
mov esi, eax
sub esi, ecx ; dy
jz nofill2
mov ebp, edx
mov eax, ecx ; y1
sub eax, [ClipYmax] ; ymax - y1
neg eax
imul edi ; * dx
idiv esi ; / dy
add eax, ebp ; += x1
mov edx, eax
mov ecx, [ClipYmax] ; y1 = ymax
pop eax
pop edi
jmp afp00
clip_ymin:
push edi
push edx
mov edi, ebx
sub edi, edx ; dx
mov esi, eax
sub esi, ecx ; dy
jz nofill1
mov ebp, ebx
sub eax, [ClipYmin] ; ymin - y0
neg eax
imul edi ; * dx
idiv esi ; / dy
add eax, ebp ; += x0
mov ebx, eax
mov eax, [ClipYmin] ; y0 = ymin
pop edx
pop edi
jmp afp01
afp00: sub ecx, eax ; ecx deltay >= 0
jz nofill ; GASP mettre cas 1 ligne
shl eax, 1
add edi, eax ; (WORD*)ptrdest[y0]
cmp ebx, edx
jg afp1
; x0 < x1
mov ax, dx ; x0
sub ax, bx ; x1 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
xchg edx, eax
;' shr ax, 1
;' add ax, 7FFFh
rol edx, 16
shl eax, 16
clc
mov ax, bx
inc ecx
;' add ecx, 16
;' shr ecx, 4
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
lt0:
;' REPT 16
stosw
adc eax, edx
;' ENDM
;' loop lt0 ; pas touche C ?
dec ecx
jnz lt0
ret
afp1: ; x0 > x1
mov ax, bx ; x1
sub ax, dx ; x0 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
xchg edx, eax
;' shr ax, 1
;' add ax, 7FFFh
rol edx, 16
shl eax, 16
clc ; la 1ere valeur est bonne
mov ax, bx ; x0
inc ecx
;' add ecx, 16
;' shr ecx, 4
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
afp2:
;' REPT 16
stosw
sbb eax, edx
;' ENDM
;' loop afp2
dec ecx
jnz afp2
nofill: ret
nofill1: pop edx
pop edi
ret
nofill2: pop eax
pop edi
ret
AsmFillProp endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
AsmFillPropNoClip proc uses esi edi ebx ebp,\
ptrdest:DWORD, x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
mov edi, ptrdest
mov eax, y0
mov ecx, y1
mov ebx, x0
mov edx, x1
cmp eax, ecx ; y0 < y1
jle afp0
xchg eax, ecx ; y0 <> y1
xchg ebx, edx ; x0 <> x1
afp0: sub ecx, eax ; ecx deltay > 0
shl eax, 1
add edi, eax ; (WORD*)ptrdest[y0]
cmp ebx, edx
jg afp1
; x0 < x1
mov ax, dx ; x0
sub ax, bx ; x1 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
inc ecx
xchg edx, eax
shr ax, 1
add ax, 7FFFh
rol edx, 16
shl eax, 16
clc
mov ax, bx
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
lt0: stosw
adc eax, edx
dec ecx
jnz lt0
ret
afp1: ; x0 > x1
mov ax, bx ; x1
sub ax, dx ; x0 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
inc ecx
xchg edx, eax
shr ax, 1
add ax, 7FFFh
rol edx, 16
shl eax, 16
clc ; la 1ere valeur est bonne
mov ax, bx ; x0
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
afp2: stosw
sbb eax, edx
dec ecx
jnz afp2
ret
AsmFillPropNoClip endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
A_FillPropNoClip proc
; mov edi, ptrdest
; mov eax, y0
; mov ecx, y1
; mov ebx, x0
; mov edx, x1
cmp eax, ecx ; y0 < y1
jle afp0
xchg eax, ecx ; y0 <> y1
xchg ebx, edx ; x0 <> x1
afp0: sub ecx, eax ; ecx deltay > 0
shl eax, 1
add edi, eax ; (WORD*)ptrdest[y0]
cmp ebx, edx
jg afp1
; x0 < x1
mov ax, dx ; x0
sub ax, bx ; x1 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
inc ecx
xchg edx, eax
shr ax, 1
add ax, 7FFFh
rol edx, 16
shl eax, 16
clc
mov ax, bx
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
lt0: stosw
adc eax, edx
dec ecx
jnz lt0
ret
afp1: ; x0 > x1
mov ax, bx ; x1
sub ax, dx ; x0 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
inc ecx
xchg edx, eax
shr ax, 1
add ax, 7FFFh
rol edx, 16
shl eax, 16
clc ; la 1ere valeur est bonne
mov ax, bx ; x0
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
afp2: stosw
sbb eax, edx
dec ecx
jnz afp2
ret
A_FillPropNoClip endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
AsmTexturedTriangleNoClip proc uses esi edi ebx ebp
PX0 TEXTEQU <word ptr[ TabPoly + 1*2 ]>
PY0 TEXTEQU <word ptr[ TabPoly + 2*2 ]>
PX1 TEXTEQU <word ptr[ TabPoly + 4*2 ]>
PY1 TEXTEQU <word ptr[ TabPoly + 5*2 ]>
PX2 TEXTEQU <word ptr[ TabPoly + 7*2 ]>
PY2 TEXTEQU <word ptr[ TabPoly + 8*2 ]>
TX0 TEXTEQU <word ptr[ TabText + 1*2 ]>
TY0 TEXTEQU <word ptr[ TabText + 2*2 ]>
TX1 TEXTEQU <word ptr[ TabText + 4*2 ]>
TY1 TEXTEQU <word ptr[ TabText + 5*2 ]>
TX2 TEXTEQU <word ptr[ TabText + 7*2 ]>
TY2 TEXTEQU <word ptr[ TabText + 8*2 ]>
mov LYmin, 32000
mov LYmax, -32000
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jge ttnc0
cmp eax, LYmin
jg ttnc1
mov LYmin, eax
ttnc1:
cmp ecx, LYmax
jl ttnc2
mov LYmax, ecx
ttnc2:
mov edi, offset TabGauche
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabX0
movzx ebx, TX0
movzx eax, PY0
movzx edx, TX1
movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabY0
movzx ebx, TY0
movzx eax, PY0
movzx edx, TY1
movzx ecx, PY1
call A_FillPropNoClip
ttnc0:
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jle ttnc0a
cmp ecx, LYmin
jg ttnc1a
mov LYmin, ecx
ttnc1a:
cmp eax, LYmax
jl ttnc2a
mov LYmax, eax
ttnc2a:
mov edi, offset TabDroite
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabX1
movzx ebx, TX0
movzx eax, PY0
movzx edx, TX1
movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabY1
movzx ebx, TY0
movzx eax, PY0
movzx edx, TY1
movzx ecx, PY1
call A_FillPropNoClip
ttnc0a:
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jge ttnc0b
cmp eax, LYmin
jg ttnc1b
mov LYmin, eax
ttnc1b:
cmp ecx, LYmax
jl ttnc2b
mov LYmax, ecx
ttnc2b:
mov edi, offset TabGauche
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabX0
movzx ebx, TX1
movzx eax, PY1
movzx edx, TX2
movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabY0
movzx ebx, TY1
movzx eax, PY1
movzx edx, TY2
movzx ecx, PY2
call A_FillPropNoClip
ttnc0b:
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jle ttnc0c
cmp ecx, LYmin
jg ttnc1c
mov LYmin, ecx
ttnc1c:
cmp eax, LYmax
jl ttnc2c
mov LYmax, eax
ttnc2c:
mov edi, offset TabDroite
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabX1
movzx ebx, TX1
movzx eax, PY1
movzx edx, TX2
movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabY1
movzx ebx, TY1
movzx eax, PY1
movzx edx, TY2
movzx ecx, PY2
call A_FillPropNoClip
ttnc0c:
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jge ttnc0d
cmp eax, LYmin
jg ttnc1d
mov LYmin, eax
ttnc1d:
cmp ecx, LYmax
jl ttnc2d
mov LYmax, ecx
ttnc2d:
mov edi, offset TabGauche
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabX0
movzx ebx, TX2
movzx eax, PY2
movzx edx, TX0
movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabY0
movzx ebx, TY2
movzx eax, PY2
movzx edx, TY0
movzx ecx, PY0
call A_FillPropNoClip
ttnc0d:
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jle ttnc0e
cmp ecx, LYmin
jg ttnc1e
mov LYmin, ecx
ttnc1e:
cmp eax, LYmax
jl ttnc2e
mov LYmax, eax
ttnc2e:
mov edi, offset TabDroite
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabX1
movzx ebx, TX2
movzx eax, PY2
movzx edx, TX0
movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabY1
movzx ebx, TY2
movzx eax, PY2
movzx edx, TY0
movzx ecx, PY0
call A_FillPropNoClip
ttnc0e:
ret
AsmTexturedTriangleNoClip endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
AsmGouraudTriangleNoClip proc uses esi edi ebx ebp
PI0 TEXTEQU <word ptr[ TabPoly + 0*2 ]>
PX0 TEXTEQU <word ptr[ TabPoly + 1*2 ]>
PY0 TEXTEQU <word ptr[ TabPoly + 2*2 ]>
PI1 TEXTEQU <word ptr[ TabPoly + 3*2 ]>
PX1 TEXTEQU <word ptr[ TabPoly + 4*2 ]>
PY1 TEXTEQU <word ptr[ TabPoly + 5*2 ]>
PI2 TEXTEQU <word ptr[ TabPoly + 6*2 ]>
PX2 TEXTEQU <word ptr[ TabPoly + 7*2 ]>
PY2 TEXTEQU <word ptr[ TabPoly + 8*2 ]>
mov LYmin, 32000
mov LYmax, -32000
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jge ttnc0
cmp eax, LYmin
jg ttnc1
mov LYmin, eax
ttnc1:
cmp ecx, LYmax
jl ttnc2
mov LYmax, ecx
ttnc2:
mov edi, offset TabGauche
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabCoulG
movzx ebx, PI0
; shl ebx, 8
movzx eax, PY0
movzx edx, PI1
; shl edx, 8
movzx ecx, PY1
call A_FillPropNoClip
ttnc0:
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jle ttnc0a
cmp ecx, LYmin
jg ttnc1a
mov LYmin, ecx
ttnc1a:
cmp eax, LYmax
jl ttnc2a
mov LYmax, eax
ttnc2a:
mov edi, offset TabDroite
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabCoulD
movzx ebx, PI0
; shl ebx, 8
movzx eax, PY0
movzx edx, PI1
; shl edx, 8
movzx ecx, PY1
call A_FillPropNoClip
ttnc0a:
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jge ttnc0b
cmp eax, LYmin
jg ttnc1b
mov LYmin, eax
ttnc1b:
cmp ecx, LYmax
jl ttnc2b
mov LYmax, ecx
ttnc2b:
mov edi, offset TabGauche
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabCoulG
movzx ebx, PI1
; shl ebx, 8
movzx eax, PY1
movzx edx, PI2
; shl edx, 8
movzx ecx, PY2
call A_FillPropNoClip
ttnc0b:
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jle ttnc0c
cmp ecx, LYmin
jg ttnc1c
mov LYmin, ecx
ttnc1c:
cmp eax, LYmax
jl ttnc2c
mov LYmax, eax
ttnc2c:
mov edi, offset TabDroite
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabCoulD
movzx ebx, PI1
; shl ebx, 8
movzx eax, PY1
movzx edx, PI2
; shl edx, 8
movzx ecx, PY2
call A_FillPropNoClip
ttnc0c:
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jge ttnc0d
cmp eax, LYmin
jg ttnc1d
mov LYmin, eax
ttnc1d:
cmp ecx, LYmax
jl ttnc2d
mov LYmax, ecx
ttnc2d:
mov edi, offset TabGauche
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabCoulG
movzx ebx, PI2
; shl ebx, 8
movzx eax, PY2
movzx edx, PI0
; shl edx, 8
movzx ecx, PY0
call A_FillPropNoClip
ttnc0d:
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jle ttnc0e
cmp ecx, LYmin
jg ttnc1e
mov LYmin, ecx
ttnc1e:
cmp eax, LYmax
jl ttnc2e
mov LYmax, eax
ttnc2e:
mov edi, offset TabDroite
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabCoulD
movzx ebx, PI2
; shl ebx, 8
movzx eax, PY2
movzx edx, PI0
; shl edx, 8
movzx ecx, PY0
call A_FillPropNoClip
ttnc0e:
mov ax, word ptr[LYmin]
mov Ymin, ax
mov ax, word ptr[LYmax]
mov Ymax, ax
ret
AsmGouraudTriangleNoClip endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*
; ßßÛßß Ûßßßß ßÜ Üß ßßÛßß Û Û ÛßßßÛ Ûßßßß ÛÛßßß
; ÛÛ ÛÛßß ÜßÜ ÛÛ ÛÛ Û ÛÛßÛß ÛÛßß ßßßßÛ
; ßß ßßßßß ß ß ßß ßßßßß ßß ß ßßßßß ßßßßß
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
FillTextPolyShade proc uses esi edi ebx ebp,\
pymin:DWORD, pymax:DWORD, dark:DWORD, source:DWORD
mov eax, dark
mov [darkdec], ax
mov edi, [Log]
mov ebx, pymin
add edi, TabOffLine[ ebx*4 ]
mov [ptrlig], edi
mov eax, source
mov [ptrmap], eax
mov ecx, pymax
sub ecx, ebx
inc ecx
mov [loopy], cx
mov esi, offset TabGauche
shl ebx, 1 ; ymin * word
add esi, ebx
mov [ptrtab], esi
l3: mov edi, [ptrlig]
mov esi, [ptrtab]
movsx eax, word ptr[ esi + TAB_GAUCHE ]
; add edi, eax
movsx ecx, word ptr[ esi + TAB_DROITE ]
sub ecx, eax
jle l4 ; prevoir cas 1 point
movzx eax, word ptr[ esi + TAB_Y0 ]
movzx ebp, word ptr[ esi + TAB_Y1 ]
sub eax, ebp
neg eax ; -(y0-y1)
inc eax
cdq
idiv ecx
mov [ystep], eax ; step y source
movzx eax, word ptr[ esi + TAB_X1 ] ; delta x
movzx ebp, word ptr[ esi + TAB_X0 ]
sub eax, ebp
inc eax
cdq
idiv ecx
mov [xstep], eax ; step x source
xor eax, eax
mov ax, word ptr[ esi + TAB_GAUCHE ]
cmp ax, word ptr[ ClipXmin ]
jge noclpleft
; clip x min
sub ax, word ptr[ ClipXmin ]
mov bx, ax
imul word ptr[xstep]
sub word ptr[ esi + TAB_X0 ], ax
mov ax, bx
imul word ptr[ystep]
sub word ptr[ esi + TAB_Y0 ], ax
mov ax, word ptr[ ClipXmin ]
noclpleft: add edi, eax
mov cx, word ptr[ esi + TAB_DROITE ]
cmp cx, word ptr[ ClipXmax ]
jle noclpright
; clip x max
mov cx, word ptr[ ClipXmax ]
noclpright: sub cx, ax
inc cx
jle l4
mov [boucle], cx
mov ecx, [ptrmap]
mov dx, word ptr[ esi + TAB_X0 ]
xor ebx, ebx
mov bx, word ptr[ esi + TAB_Y0 ] ; precision ?
mov esi, [xstep]
mov ebp, [ystep]
ALIGN 4
l2: xchg bl,dh ; bl <- dh colonne
mov al,byte ptr[ecx+ebx] ; bh ligne * 256
xchg bl,dh
mov ah, al
and al, 15
sub al, byte ptr[darkdec]
jc ovfshd
and ah, 240
or al, ah
mov byte ptr[edi], al
inc edi
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
l4: add [ptrlig], 640
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
ovfshd:
and ah, 240
mov al, ah
mov byte ptr[edi], al
inc edi
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
add [ptrlig], 640
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
FillTextPolyShade endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
FillTextPoly proc uses esi edi ebx ebp,\
pymin:DWORD, pymax:DWORD, source:DWORD
mov edi, [Log]
mov ebx, pymin
add edi, TabOffLine[ ebx*4 ]
mov [ptrlig], edi
mov eax, source
mov [ptrmap], eax
mov ecx, pymax
sub ecx, ebx
inc ecx
mov [loopy], cx
mov esi, offset TabGauche
shl ebx, 1 ; ymin * word
add esi, ebx
mov [ptrtab], esi
l3: mov edi, [ptrlig]
mov esi, [ptrtab]
movsx eax, word ptr[ esi + TAB_GAUCHE ]
; add edi, eax
movsx ecx, word ptr[ esi + TAB_DROITE ]
sub ecx, eax
jle l4 ; prevoir cas 1 point
movzx eax, word ptr[ esi + TAB_Y0 ]
movzx ebp, word ptr[ esi + TAB_Y1 ]
sub eax, ebp
neg eax ; -(y0-y1)
inc eax
cdq
idiv ecx
mov [ystep], eax ; step y source
movzx eax, word ptr[ esi + TAB_X1 ] ; delta x
movzx ebp, word ptr[ esi + TAB_X0 ]
sub eax, ebp
inc eax
cdq
idiv ecx
mov [xstep], eax ; step x source
xor eax, eax
mov ax, word ptr[ esi + TAB_GAUCHE ]
cmp ax, word ptr[ ClipXmin ]
jge noclpleft
; clip x min
sub ax, word ptr[ ClipXmin ]
mov bx, ax
imul word ptr[xstep]
sub word ptr[ esi + TAB_X0 ], ax
mov ax, bx
imul word ptr[ystep]
sub word ptr[ esi + TAB_Y0 ], ax
mov ax, word ptr[ ClipXmin ]
noclpleft: add edi, eax
mov cx, word ptr[ esi + TAB_DROITE ]
cmp cx, word ptr[ ClipXmax ]
jle noclpright
; clip x max
mov cx, word ptr[ ClipXmax ]
noclpright: sub cx, ax
inc cx
jle l4
mov [boucle], cx
mov ecx, [ptrmap]
mov dx, word ptr[ esi + TAB_X0 ]
xor ebx, ebx
mov bx, word ptr[ esi + TAB_Y0 ] ; precision ?
mov esi, [xstep]
mov ebp, [ystep]
ALIGN 4
l2: xchg bl,dh ; bl <- dh colonne
mov al,byte ptr[ecx+ebx] ; bh ligne * 256
xchg bl,dh
mov byte ptr[edi], al
inc edi
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
l4: add [ptrlig], 640
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
FillTextPoly endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
FillTextPolyNoClip proc uses esi edi ebx ebp,\
pymin:DWORD, pymax:DWORD, source:DWORD
; for( y=ymin; y<=ymax; y++ )
; {
; xg = TabGauche[y] ;
; xd = TabDroite[y] ;
;
; x0 = TabX0[y] ;
; y0 = TabY0[y] ;
;
; x1 = TabX1[y] ;
; y1 = TabY1[y] ;
;
; CopyLine( xg, y, xd-xg+1, x0,y0, x1,y1, ptrmap ) ;
; }
mov edi, [Log]
mov ebx, pymin
add edi, TabOffLine[ ebx*4 ]
mov [ptrlig], edi
mov eax, source
mov [ptrmap], eax
mov ecx, pymax
sub ecx, ebx
inc ecx
mov [loopy], cx
mov esi, offset TabGauche
shl ebx, 1 ; ymin * word
add esi, ebx
mov [ptrtab], esi
l3:
;' mov ebx, [ptrmap]
mov edi, [ptrlig]
mov esi, [ptrtab]
movsx eax, word ptr[ esi + TAB_GAUCHE ]
add edi, eax
movsx ecx, word ptr[ esi + TAB_DROITE ]
sub ecx, eax
;' inc ecx
jle l4
movzx eax, word ptr[ esi + TAB_Y0 ]
;' mov edx, eax
;' and edx, 0FFFFFF00h
;' add ebx, edx ; + start buf
movzx ebp, word ptr[ esi + TAB_Y1 ]
sub eax, ebp
neg eax ; -(y0-y1)
inc eax
cdq
idiv ecx
mov [ystep], eax ; step y source
movzx eax, word ptr[ esi + TAB_X1 ] ; delta x
movzx ebp, word ptr[ esi + TAB_X0 ]
sub eax, ebp
inc eax
cdq
idiv ecx
mov [xstep], eax ; step x source
mov edx, ebp ; word ptr[ esi + TAB_X0 ]
mov [boucle], cx
;' mov ecx, ebx ; ecx ptr source
mov ecx, [ptrmap]
xor ebx, ebx
mov bx, word ptr[ esi + TAB_Y0 ] ; precision ?
;' and ebx, 0FFh
mov esi, [xstep]
mov ebp, [ystep]
ALIGN 4
l2: xchg bl,dh ; bl <- dh colonne
mov al,byte ptr[ecx+ebx] ; bh ligne * 256
xchg bl,dh
mov byte ptr[edi], al
inc edi
;' add edx, esi
;' add ebx, ebp
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
l4: add [ptrlig], 640
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
FillTextPolyNoClip endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
END
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
M_FillTextPoly proc uses esi esi ebx ebp,\
ymin:DWORD, ymax:DWORD, source:DWORD
mov edi, [M_Log]
mov ebx, ymin
mov eax, ebx
shr eax, 2
add edi, eax ; TabOffLine[ ebx*4 ]
add edi, 239*80 ; x = 0 = y = 239;
mov [ptrlig], edi
mov eax, ebx
and eax, 3
mov al, byte ptr[Mask_p+eax]
mov byte ptr[maskplane], al
mov eax, source
mov [ptrmap], eax
mov ecx, ymax
sub ecx, ebx
inc ecx
mov [loopy], cx
mov esi, offset TabGauche
shl ebx, 1 ; ymin * word
add esi, ebx
mov [ptrtab], esi
l3:
mov ah, byte ptr[maskplane]
mov dx,3C4h
mov al,02h ; slectionne MAP MASK REGISTER
out dx,ax
mov edi, [ptrlig]
mov esi, [ptrtab]
movsx eax, word ptr[ esi + TAB_GAUCHE ]
movsx ecx, word ptr[ esi + TAB_DROITE ]
sub ecx, eax
jle l4 ; prevoir cas 1 point
movzx eax, word ptr[ esi + TAB_Y0 ]
movzx ebp, word ptr[ esi + TAB_Y1 ]
sub eax, ebp
neg eax ; -(y0-y1)
inc eax
cdq
idiv ecx
mov [ystep], eax ; step y source
movzx eax, word ptr[ esi + TAB_X1 ] ; delta x
movzx ebp, word ptr[ esi + TAB_X0 ]
sub eax, ebp
inc eax
cdq
idiv ecx
mov [xstep], eax ; step x source
xor eax, eax
mov ax, word ptr[ esi + TAB_GAUCHE ]
mov bx, 239
sub bx, word ptr[ ClipYmax ]
cmp ax, bx
jge noclpleft
; clip x min
mov bx, 239
sub bx, word ptr[ ClipYmax ]
sub ax, bx
mov bx, ax
imul word ptr[xstep]
sub word ptr[ esi + TAB_X0 ], ax
mov ax, bx
imul word ptr[ystep]
sub word ptr[ esi + TAB_Y0 ], ax
mov ax, 239
sub ax, word ptr[ ClipYmax ]
noclpleft: mov ecx, eax
shl eax, 2
add eax, ecx
shl eax, 4 ; *80
sub edi, eax ; sur bonne ligne
mov eax, ecx
mov cx, word ptr[ esi + TAB_DROITE ]
mov dx, 239
sub dx, word ptr[ ClipYmin ]
cmp cx, dx
jle noclpright
; clip x max
mov cx, dx ; mov cx, word ptr[ ClipXmax ]
noclpright: sub cx, ax
inc cx
jle l4
mov [boucle], cx
mov ecx, [ptrmap]
mov dx, word ptr[ esi + TAB_X0 ]
xor ebx, ebx
mov bx, word ptr[ esi + TAB_Y0 ] ; precision ?
mov esi, [xstep]
mov ebp, [ystep]
ALIGN 4
l2: xchg bl,dh ; bl <- dh colonne
mov al,byte ptr[ecx+ebx] ; bh ligne * 256
xchg bl,dh
mov byte ptr[edi], al
sub edi, 80
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
l4:
shl byte ptr[maskplane], 1
cmp byte ptr[maskplane], 16
jnz l4a
mov byte ptr[maskplane], 1
add [ptrlig], 1
l4a:
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
M_FillTextPoly endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
M_AsmFillProp proc uses esi edi ebx ebp,\
ptrdest:DWORD, x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
mov edi, ptrdest
mov eax, y0
mov ecx, y1
mov ebx, x0
mov edx, x1
cmp eax, ecx ; y0 < y1
jle afp0
xchg eax, ecx ; y0 <> y1
xchg ebx, edx ; x0 <> x1
afp0:
cmp eax, [ClipXmax]
jg nofill
cmp ecx, [ClipXmin]
jl nofill
cmp eax, [ClipXmin]
jl clip_ymin
afp01: cmp ecx, [ClipXmax]
jle afp00
clip_ymax:
push edi
push eax
mov edi, ebx
sub edi, edx ; dx
mov esi, eax
sub esi, ecx ; dy
jz nofill2
mov ebp, edx
mov eax, ecx ; y1
sub eax, [ClipXmax] ; ymax - y1
neg eax
imul edi ; * dx
idiv esi ; / dy
add eax, ebp ; += x1
mov edx, eax
mov ecx, [ClipXmax] ; y1 = ymax
pop eax
pop edi
jmp afp00
clip_ymin:
push edi
push edx
mov edi, ebx
sub edi, edx ; dx
mov esi, eax
sub esi, ecx ; dy
jz nofill1
mov ebp, ebx
sub eax, [ClipXmin] ; ymin - y0
neg eax
imul edi ; * dx
idiv esi ; / dy
add eax, ebp ; += x0
mov ebx, eax
mov eax, [ClipXmin] ; y0 = ymin
pop edx
pop edi
jmp afp01
afp00: sub ecx, eax ; ecx deltay >= 0
jz nofill ; GASP mettre cas 1 ligne
shl eax, 1
add edi, eax ; (WORD*)ptrdest[y0]
cmp ebx, edx
jg afp1
; x0 < x1
mov ax, dx ; x0
sub ax, bx ; x1 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
xchg edx, eax
;' shr ax, 1
;' add ax, 7FFFh
rol edx, 16
shl eax, 16
clc
mov ax, bx
inc ecx
;' add ecx, 16
;' shr ecx, 4
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
lt0:
;' REPT 16
stosw
adc eax, edx
;' ENDM
dec ecx
jnz lt0 ; pas touche C ?
;' dec ecx
;' jnz lt0
ret
afp1: ; x0 > x1
mov ax, bx ; x1
sub ax, dx ; x0 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
xchg edx, eax
;' shr ax, 1
;' add ax, 7FFFh
rol edx, 16
shl eax, 16
clc ; la 1ere valeur est bonne
mov ax, bx ; x0
inc ecx
;' add ecx, 16
;' shr ecx, 4
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
afp2:
;' REPT 16
stosw
sbb eax, edx
;' ENDM
dec ecx
jnz afp2
;' dec ecx
;' jnz afp2
nofill: ret
nofill1: pop edx
pop edi
ret
nofill2: pop eax
pop edi
ret
M_AsmFillProp endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
; si = shape list
; bx = y list
; bp = x list
; ax = texture resource
;
disptexture proc
push ds
mov cx,dgroup
mov ds,cx
mov ax, es
mov fs, ax ; data texture
mov es, Log
add si,cl_miny
add bx,cl_leftx
add bp,cl_leftx
lodsw
mov di,ax
lodsw
sub ax,di
js #dispret
add si,2
mov boucle,ax
shl di,1
mov di,scantab[di]
blig:
lodsw ; xd1
mov cx, ax
lodsw ; xd2
sub ax, cx
inc ax
jle h1
mov cx, ax ; delta xd
mov ax, [bx+2] ; y2
sub ax, [bx] ; y1
cwd
idiv cx
mov stepy, ax
mov ax, ds:[bp+2] ; x2
sub ax, ds:[bp] ; x1
cwd
idiv cx
mov stepx, ax
mov dx, [bx]
mov ax, [si-4] ; xd1
cmp ax, minx1
jge l0
sub ax, minx1
push ax
imul stepx
sub ds:[bp], ax
pop ax
imul stepy
sub [bx], ax
mov ax, minx1
l0: mov cx, [si-2] ; xd2
cmp cx, maxx1
jle l1
mov cx, maxx1
l1: sub cx, ax
inc cx
jle h1
push di
push bx
push bp
push si
add di, ax
mov dx, ds:[bp]
mov bx, ds:[bx]
mov si, xdda
mov bp, ydda
bcol: xchg bl,dh
mov al,fs:sp_data[bx]
xchg bl,dh
stosb
add dx,si
add bx,bp
dec ecx
jnz bcol
pop si
pop bp
pop bx
pop di
h1: add bx,4 ; next xy
add bp,4 ; next xy
add di,640 ; next lig
dec boucle
jns #solidloop
#dispret: pop ds
ret
disptexture endp
;*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/
;*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
AsmTexturedTriangleNoClip proc uses esi edi ebx ebp
;' WORD x0, WORD y0, WORD x1, WORD y1, WORD x2, WORD y2,
;' LONG tx0, LONG ty0, LONG tx1, LONG ty1, LONG tx2, LONG ty2,
;' UBYTE *ptrmap )
;'{
;' LONG y, ymin, ymax, xd, xg ;
;' WORD tabpoly[3*4] ;
;' tabpoly[1] = x0 ;
;' tabpoly[2] = y0 ;
;' tabpoly[4] = x1 ;
;' tabpoly[5] = y1 ;
;' tabpoly[7] = x2 ;
;' tabpoly[8] = y2 ;
;'
;' if( !TestVuePoly( tabpoly ) ) return ;
PX0 = word ptr[ offset TabPoly + 1*2 ]
PY0 = word ptr[ offset TabPoly + 2*2 ]
PX1 = word ptr[ offset TabPoly + 4*2 ]
PY1 = word ptr[ offset TabPoly + 5*2 ]
PX2 = word ptr[ offset TabPoly + 7*2 ]
PY2 = word ptr[ offset TabPoly + 8*2 ]
TX0 = word ptr[ offset TabText + 1*2 ]
TY0 = word ptr[ offset TabText + 2*2 ]
TX1 = word ptr[ offset TabText + 4*2 ]
TY1 = word ptr[ offset TabText + 5*2 ]
TX2 = word ptr[ offset TabText + 7*2 ]
TY2 = word ptr[ offset TabText + 8*2 ]
;' ymin = 32000 ;
;' ymax = -32000 ;
mov LYmin, 32000
mov LYmax, -32000
;' if( y0 < y1 )
;' {
;' if( y0 < ymin ) ymin = y0 ;
;' if( y1 > ymax ) ymax = y1 ;
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jge ttnc0
cmp eax, LYmin
jg ttnc1
mov LYmin, eax
ttnc1:
cmp ecx, LYmax
jl ttnc2
mov LYmax, ecx
ttnc2:
;' AsmFillPropNoClip( TabGauche, x0, y0, x1, y1 ) ;
mov edi, offset TabGauche
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX0, tx0, y0, tx1, y1 ) ;
mov edi, offset TabX0
movzx ebx, TX0
movzx eax, PY0
movzx edx, TX1
movzx ecx, PY1
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY0, ty0, y0, ty1, y1 ) ;
mov edi, offset TabY0
movzx ebx, TY0
movzx eax, PY0
movzx edx, TY1
movzx ecx, PY1
call A_FillPropNoClip
;' }
ttnc0:
;' if( y0 > y1 )
;' {
;' if( y0 > ymax ) ymax = y0 ;
;' if( y1 < ymin ) ymin = y1 ;
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jle ttnc0a
cmp ecx, LYmin
jg ttnc1a
mov LYmin, ecx
ttnc1a:
cmp eax, LYmax
jl ttnc2a
mov LYmax, eax
ttnc2a:
;' AsmFillPropNoClip( TabDroite, x0,y0, x1,y1 ) ;
mov edi, offset TabDroite
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX1, tx0, y0, tx1, y1 ) ;
mov edi, offset TabX1
movzx ebx, TX0
movzx eax, PY0
movzx edx, TX1
movzx ecx, PY1
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY1, ty0, y0, ty1, y1 ) ;
mov edi, offset TabY1
movzx ebx, TY0
movzx eax, PY0
movzx edx, TY1
movzx ecx, PY1
call A_FillPropNoClip
;' }
ttnc0a:
;' if( y1 < y2 )
;' {
;' if( y1 < ymin ) ymin = y1 ;
;' if( y2 > ymax ) ymax = y2 ;
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jge ttnc0b
cmp eax, LYmin
jg ttnc1b
mov LYmin, eax
ttnc1b:
cmp ecx, LYmax
jl ttnc2b
mov LYmax, ecx
ttnc2b:
;' AsmFillPropNoClip( TabGauche, x1,y1, x2,y2 ) ;
mov edi, offset TabGauche
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX0, tx1, y1, tx2, y2 ) ;
mov edi, offset TabX0
movzx ebx, TX1
movzx eax, PY1
movzx edx, TX2
movzx ecx, PY2
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY0, ty1, y1, ty2, y2 ) ;
mov edi, offset TabY0
movzx ebx, TY1
movzx eax, PY1
movzx edx, TY2
movzx ecx, PY2
call A_FillPropNoClip
;' }
ttnc0b:
;' if( y1 > y2 )
;' {
;' if( y1 > ymax ) ymax = y1 ;
;' if( y2 < ymin ) ymin = y2 ;
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jle ttnc0c
cmp ecx, LYmin
jg ttnc1c
mov LYmin, ecx
ttnc1c:
cmp eax, LYmax
jl ttnc2c
mov LYmax, eax
ttnc2c:
;' AsmFillPropNoClip( TabDroite, x1,y1, x2,y2 ) ;
mov edi, offset TabDroite
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX1, tx1, y1, tx2, y2 ) ;
mov edi, offset TabX1
movzx ebx, TX1
movzx eax, PY1
movzx edx, TX2
movzx ecx, PY2
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY1, ty1, y1, ty2, y2 ) ;
mov edi, offset TabY1
movzx ebx, TY1
movzx eax, PY1
movzx edx, TY2
movzx ecx, PY2
call A_FillPropNoClip
;' }
ttnc0c:
;' if( y2 < y0 )
;' {
;' if( y2 < ymin ) ymin = y2 ;
;' if( y0 > ymax ) ymax = y0 ;
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jge ttnc0d
cmp eax, LYmin
jg ttnc1d
mov LYmin, eax
ttnc1d:
cmp ecx, LYmax
jl ttnc2d
mov LYmax, ecx
ttnc2d:
;' AsmFillPropNoClip( TabGauche, x2,y2, x0,y0 ) ;
mov edi, offset TabGauche
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX0, tx2, y2, tx0, y0 ) ;
mov edi, offset TabX0
movzx ebx, TX2
movzx eax, PY2
movzx edx, TX0
movzx ecx, PY0
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY0, ty2, y2, ty0, y0 ) ;
mov edi, offset TabY0
movzx ebx, TY2
movzx eax, PY2
movzx edx, TY0
movzx ecx, PY0
call A_FillPropNoClip
;' }
ttnc0d:
;' if( y2 > y0 )
;' {
;' if( y2 > ymax ) ymax = y2 ;
;' if( y0 < ymin ) ymin = y0 ;
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jle ttnc0e
cmp ecx, LYmin
jg ttnc1e
mov LYmin, ecx
ttnc1e:
cmp eax, LYmax
jl ttnc2e
mov LYmax, eax
ttnc2e:
;' AsmFillPropNoClip( TabDroite, x2,y2, x0,y0 ) ;
mov edi, offset TabDroite
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX1, tx2, y2, tx0, y0 ) ;
mov edi, offset TabX1
movzx ebx, TX2
movzx eax, PY2
movzx edx, TX0
movzx ecx, PY0
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY1, ty2, y2, ty0, y0 ) ;
mov edi, offset TabY1
movzx ebx, TY2
movzx eax, PY2
movzx edx, TY0
movzx ecx, PY0
call A_FillPropNoClip
;' }
ttnc0e:
;' if( ymin < ClipYmin ) ymin = ClipYmin ;
;' if( ymax > ClipYmax ) ymax = ClipYmax ;
;' if( ymin > ClipYmax ) return ;
;' if( ymax < ClipYmin ) return ;
;' FillTextPolyNoClip( ymin, ymax, ptrmap ) ;
;'}
ret
AsmTexturedTriangleNoClip endp
comment @
/*
void TexturedTriangleNoClip(
WORD x0, WORD y0, WORD x1, WORD y1, WORD x2, WORD y2,
LONG tx0, LONG ty0, LONG tx1, LONG ty1, LONG tx2, LONG ty2,
UBYTE *ptrmap )
{
LONG y, ymin, ymax, xd, xg ;
WORD tabpoly[3*4] ;
tabpoly[1] = x0 ;
tabpoly[2] = y0 ;
tabpoly[4] = x1 ;
tabpoly[5] = y1 ;
tabpoly[7] = x2 ;
tabpoly[8] = y2 ;
if( !TestVuePoly( tabpoly ) ) return ;
ymin = 32000 ;
ymax = -32000 ;
if( y0 < y1 )
{
if( y0 < ymin ) ymin = y0 ;
if( y1 > ymax ) ymax = y1 ;
AsmFillPropNoClip( TabGauche, x0, y0, x1, y1 ) ;
AsmFillPropNoClip( TabX0, tx0, y0, tx1, y1 ) ;
AsmFillPropNoClip( TabY0, ty0, y0, ty1, y1 ) ;
}
if( y0 > y1 )
{
if( y0 > ymax ) ymax = y0 ;
if( y1 < ymin ) ymin = y1 ;
AsmFillPropNoClip( TabDroite, x0,y0, x1,y1 ) ;
AsmFillPropNoClip( TabX1, tx0, y0, tx1, y1 ) ;
AsmFillPropNoClip( TabY1, ty0, y0, ty1, y1 ) ;
}
if( y1 < y2 )
{
if( y1 < ymin ) ymin = y1 ;
if( y2 > ymax ) ymax = y2 ;
AsmFillPropNoClip( TabGauche, x1,y1, x2,y2 ) ;
AsmFillPropNoClip( TabX0, tx1, y1, tx2, y2 ) ;
AsmFillPropNoClip( TabY0, ty1, y1, ty2, y2 ) ;
}
if( y1 > y2 )
{
if( y1 > ymax ) ymax = y1 ;
if( y2 < ymin ) ymin = y2 ;
AsmFillPropNoClip( TabDroite, x1,y1, x2,y2 ) ;
AsmFillPropNoClip( TabX1, tx1, y1, tx2, y2 ) ;
AsmFillPropNoClip( TabY1, ty1, y1, ty2, y2 ) ;
}
if( y2 < y0 )
{
if( y2 < ymin ) ymin = y2 ;
if( y0 > ymax ) ymax = y0 ;
AsmFillPropNoClip( TabGauche, x2,y2, x0,y0 ) ;
AsmFillPropNoClip( TabX0, tx2, y2, tx0, y0 ) ;
AsmFillPropNoClip( TabY0, ty2, y2, ty0, y0 ) ;
}
if( y2 > y0 )
{
if( y2 > ymax ) ymax = y2 ;
if( y0 < ymin ) ymin = y0 ;
AsmFillPropNoClip( TabDroite, x2,y2, x0,y0 ) ;
AsmFillPropNoClip( TabX1, tx2, y2, tx0, y0 ) ;
AsmFillPropNoClip( TabY1, ty2, y2, ty0, y0 ) ;
}
if( ymin < ClipYmin ) ymin = ClipYmin ;
if( ymax > ClipYmax ) ymax = ClipYmax ;
if( ymin > ClipYmax ) return ;
if( ymax < ClipYmin ) return ;
FillTextPolyNoClip( ymin, ymax, ptrmap ) ;
}
*/
@