{ You asked for =F=A=S=T This line procedure is quite fast considering it is done in Pascal and not assembler. The Rectangle works well also. Sorry my Circle routine is rather Slow and Does not make a perfect (or fairly perfect) circle so I will not enclose it. Where is a word segment to a screen address. You can define the VGAScreen's address like this. Const VGASCREEN = $a000; } Procedure line(a,b,c,d,col:integer;Where:Word); { This draws a line from a,b to c,d of color col. } Function sgn(a:real):integer; BEGIN if a>0 then sgn:=+1; if a<0 then sgn:=-1; if a=0 then sgn:=0; END; var u,s,v,d1x,d1y,d2x,d2y,m,n:real; i:integer; BEGIN u:= c - a; v:= d - b; d1x:= SGN(u); d1y:= SGN(v); d2x:= SGN(u); d2y:= 0; m:= ABS(u); n := ABS(v); IF NOT (M>N) then BEGIN d2x := 0 ; d2y := SGN(v); m := ABS(v); n := ABS(u); END; s := INT(m / 2); FOR i := 0 TO round(m) DO BEGIN putpixel(a,b,col,where); s := s + n; IF not (s