home *** CD-ROM | disk | FTP | other *** search
- .model tpascal
- .data
- pixeladdr13 macro
- ;Setzt einen Farbpixel an der aktuellen Position.
- ;Eingang:
- ; AX:=Y- Koordinate (0-199)
- ; BX:=X- Koordinate (0-319)
- ;Ausgang: ES:BX ->Byte;
-
- xchg ah,al
- add bx,ax
- shr ax,1
- shr ax,1
- add bx,ax
- mov ax,0a000h
- mov es,ax
- endm
-
- .code
- printpixelat proc far col:byte, x:word, y:word
- public printpixelat
- mov ax,y
- mov bx,x
- pixeladdr13
- mov al,col
- mov es:[bx],al
- ret
- printpixelat endp
-
- getpixelat proc far x:word, y:word returns result:byte
- public getpixelat
- mov ax,y
- mov bx,x
- pixeladdr13
- mov al,es:[bx]
- ret
- getpixelat endp
-
- clearscreen proc far
- public clearscreen
- mov cx,320*201
- mov ax,0a000h
- mov es,ax
- mov al,0
- mov bx,cx
- looping: mov es:[bx],al
- mov bx,cx
- loop looping
- ret
- clearscreen endp
-
- ;.model tpascal
- .data
- varincr1 dw ?
- varincr2 dw ?
- varroutine dw ?
-
- bytesperline equ 320
-
-
- .code
- line proc far argx1:word,argy1:word,argx2:word,argy2:word,argn:byte
- public line
-
- mov si,bytesperline
- mov cx,argx2
- sub cx,argx1
- jz vertline13
- jns l01
- neg cx
- mov bx,argx2
- xchg bx,argx1
- mov argx2,bx
- mov bx,argy2
- xchg bx,argy1
- mov argy2,bx
- l01: mov bx,argy2
- sub bx,argy1
- jz horizline13
- jns l03
- neg bx
- neg si
- l03: push si
- mov VARroutine,offset LoSlopeLine13
- cmp bx,cx
- jle l04
- mov VARroutine,offset HiSlopeLine13
- xchg bx,cx
- l04: shl bx,1
- mov varincr1,bx
- sub bx,cx
- mov si,bx
- sub bx,cx
- mov varincr2,bx
-
- ;Berechnen der Adresse des ersten Pixel
-
- push cx
- mov ax,argy1
- mov bx,argx1
- pixeladdr13
- mov di,bx
- pop cx
- inc cx
- pop bx
- jmp VARroutine
- vertline13: mov ax,argy1
- mov bx,argy2
- mov cx,bx
- sub cx,ax
- jge l31
- neg cx
- mov ax,bx
- l31: inc cx
- mov bx,argx1
- push cx
- pixeladdr13
- pop cx
- mov di,bx
- dec si
- mov al,argn
- l32: stosb
- add di,si
- loop l32
- jmp lexit
- horizline13: push cx
- mov ax,argy1
- mov bx,argx1
- pixeladdr13
- mov di,bx
- pop cx
- inc cx
- mov al,argn
- rep stosb
- jmp lexit
-
- ; Routine fuer dy<=dx (Steigung <=1)
- ; ES:DI ---> Video Buffer
- ; BX = Y-INC
- ; CX = # Pixel zu zeichnen
- ; SI = Entscheidungstraeger ob Y Koordinate erhoeht werden
- ; soll
-
- LoSlopeLine13: mov al,argn
- l11: stosb
- or si,si
- jns l12
- add si,varincr1
- loop l11
- jmp lexit
- l12: add si,varincr2
- add di,bx
- loop l11
- jmp lexit
-
- ; Routine fuer dy>=dx (Steigung >1)
- ; ES:DI ---> Video Buffer
- ; BX = Y-INC
- ; CX = # Pixel zu zeichnen
- ; SI = Entscheidungstraeger ob Y Koordinate erhoeht werden
- ; soll
-
- hislopeline13: mov al,argn
- l21: stosb
- add di,bx
- l22: or si,si
- jns l23
- add si,varincr1
- dec di
- loop l21
- jmp lexit
- l23: add si,varincr2
- loop l21
- lexit: ret
- line endp
- code ends
- end line
-
-
-
- code ends
- end
-
-
-
-