``````{
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.

``````