home *** CD-ROM | disk | FTP | other *** search
- comment #
- /*****************************************************************************
- ATTENTION!
- this source is VOTEWARE,
- you may only use it to the conditions listed below:
-
- -You may modify it, or use parts of it in your own source as long as
- this header stays on top of all files containing this source.
- -You must give proper credit to the author, Niklas Beisert / pascal.
- -You may not use it in commercial productions without the written
- permission of the author.
- -AND MOST IMPORTANT: you have to buy an Assembly '94 CD-ROM
- by Sound Solutions (if you don't have it already) and vote for VEX-InTrO
- in the PC-64k-Intro-Compo! (if you have already sent your voting card,
- buy another one and fill it out CORRECTLY!!!)
- *****************************************************************************/
- #
-
-
-
- ;// fills one line for the polygon routine.
- ;// for x mode and horizontally
- ;// xfillliner reads before it writes => or-put
-
- .model large,c
- .386
- locals
-
- .data
-
- extrn poly_width:word
- extrn poly_scrseg:word
- extrn poly_col:byte
- extrn poly_x:word
- extrn poly_y:word
- extrn poly_len:word
-
- .code
-
- public xfillline
- public xfillliner
-
- blockbeg macro exp
- blocksize=(1 shl exp)
- xchg ax,dx
- mov ax,cx
- and ax,blocksize-1
- sub ax,blocksize
- neg ax
- sub di,ax
- mov ah,(@@blockend-@@block) shr exp
- mul ah
- add ax,offset @@block
- xchg ax,dx
- shr cx,exp
- inc cx
- jmp dx
- @@block:
- dioffs=0
- endm
-
- blockend macro
- @@blockend:
- add di,dioffs
- dec cx
- jnz @@block
- endm
-
- xfillline proc uses ds di
- mov ax,poly_y
- mul poly_width
- add ax,poly_x
- adc dx,0
- mov cl,al
- and cl,3
- shrd ax,dx,2
- add ax,poly_scrseg
- mov di,ax
- mov ax,1102h
- rol ah,cl
-
- mov bl,poly_col
- mov cx,poly_len
-
- mov dx,0a000h
- mov es,dx
-
- mov dx,3c4h
-
- cmp cx,4
- jl @@small
- cmp al,11h
- je @@ok3
- @@loop1:
- out dx,ax
- mov es:[di],bl
- dec cx
- rol ah,1
- jnc @@loop1
- inc di
- @@ok3:
- mov ah,0Fh
- out dx,ax
- push cx
- shr cx,2
- mov bh,bl
- mov ax,bx
- shl eax,16
- mov ax,bx
-
- cmp cx,4
- jl @@small2
-
- test di,3
- jz @@ok4
- @@loop2:
- stosb
- dec cx
- test di,3
- jnz @@loop2
- @@ok4:
-
- push cx
- shr cx,2
- rep stosd
- pop cx
- and cx,3
-
- @@small2:
- rep stosb
-
- pop cx
- and cx,3
- mov dx,3c4h
- mov ax,1102h
- @@small:
- jcxz @@done
- @@smallloop:
- out dx,ax
- mov es:[di],bl
- rol ah,1
- adc di,0
- loop @@smallloop
- @@done:
-
- ret
- endp
-
- xfillliner proc uses ds di
- mov ax,poly_y
- mul poly_width
- add ax,poly_x
- adc dx,0
- mov cl,al
- and cl,3
- shrd ax,dx,2
- add ax,poly_scrseg
- mov di,ax
- mov ax,1102h
- rol ah,cl
-
- mov cx,poly_len
- mov bl,poly_col
-
- mov dx,0a000h
- mov ds,dx
-
- mov dx,3c4h
-
- cmp cx,4
- jl @@small
- cmp al,11h
- je @@ok3
- @@loop1:
- out dx,ax
- mov bh,ds:[di]
- mov ds:[di],bl
- dec cx
- rol ah,1
- jnc @@loop1
- inc di
- @@ok3:
- mov ah,0Fh
- out dx,ax
- push cx
- shr cx,2
- mov al,bl
-
- blockbeg 5
- rept blocksize
- db 8ah, 65h, dioffs
- db 88h, 45h, dioffs
- dioffs=dioffs+1
- endm
- blockend
-
- pop cx
- and cx,3
- mov dx,3c4h
- mov ax,1102h
- @@small:
- jcxz @@done
- @@smallloop:
- out dx,ax
- mov bh,ds:[di]
- mov ds:[di],bl
- rol ah,1
- adc di,0
- loop @@smallloop
- @@done:
-
- ret
- endp
-
- end
-