[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]