[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{
One the effects from the Copper demo from S!P. Very old I know and very
simple, but still pretty, and not all new programmers know how control
the Vgacard yet.
}
Program floodfill;
uses crt;
Procedure SetGraphMode (Num:Byte);
begin
asm
mov al,Num
mov ah,0
int 10h
end;
end;
Procedure Hsinc;assembler; {waits for horizontal retrace} asm
mov dx,03dah
@lab1:in al,dx
test al,01
jnz @lab1
@lab2:in al,dx
test al,01
jz @lab2
end;
procedure Vsinc; assembler; {waits for vertical retrace} asm
push ax
push dx
mov dx, 03dah
@@11:
in al,dx
test al,08h
jnz @@11
@@22:
in al,dx
test al,08h
jz @@22
pop dx
pop ax
end;
PROCEDURE Setpalette(X,R,G,B : Byte);
BEGIN
Port[$3C8]:=X; Port[$3C9]:=R;
Port[$3C9]:=G; Port[$3C9]:=B;
END; { Setpalette }
var
y,x,a,b,c:word;
ch:char;
begin
setgraphmode($13);
setpalette(255,0,0,0);
for a:=1 to 127 do setpalette(a,0,0,a div 2);
for a:=0 to 127 do setpalette(a+127,0,0,127-a div 2);
{ this draws the circles. Put in a picture here instead }
for y:=1 to 420 do
for x:=1 {round(-sqrt(200*200 - y*y))} to round(sqrt(420*420 - y*y)) do
if (x<320) and (y<200) then mem[$a000:(y)*320+x]:=(X*X+Y*Y) div 64;
a:=399;
repeat
vsinc;
PORT[$3D4]:=$13; { normal screen}
PORT[$3D5]:=40;
for b:=1 to a do HSINC;{ waits until a certain scanline position on screen}
PORT[$3D4]:=$13; { floodfill screen screen}
PORT[$3D5]:=0;
dec(a,1); { change here for more speed }
until (keypressed) or (a<=0);
PORT[$3D4]:=$13;
PORT[$3D5]:=40;
setgraphmode($3);
end.
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]