[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]

    {
    MIKE BURNS

    > does someone have a circle routine for the 320x200x256 mode. I need one
    > using the assembler...  (FAST) ( or isn't that possible) I doesn't need to
    > be very perfect, if it has the shape of a circle, I'm satisfied.
    }

    PROCEDURE SWAP(VAR A, B : Integer);
    Var
      X : Integer;
    Begin
      X := A;
      A := B;
      B := X;
    End;

    Var
      SCR : Array [0..199, 0..319] of Byte Absolute $A000 : $0000;

    PROCEDURE Circle(X, Y, Radius : Word; Color: Byte);
    VAR
      a, af, b, bf,
      target, r2   : Integer;
    Begin
      Target := 0;
      A  := Radius;
      B  := 0;
      R2 := Sqr(Radius);

      While a >= B DO
      Begin
        b:= Round(Sqrt(R2 - Sqr(A)));
        Swap(Target, B);
        While B < Target Do
        Begin
          Af := (120 * a) Div 100;
          Bf := (120 * b) Div 100;
          SCR[x + af, y + b] := color;
          SCR[x + bf, y + a] := color;
          SCR[x - af, y + b] := color;
          SCR[x - bf, y + a] := color;
          SCR[x - af, y - b] := color;
          SCR[x - bf, y - a] := color;
          SCR[x + af, y - b] := color;
          SCR[x + bf, y - a] := color;
          B := B + 1;
        End;
        A := A - 1;
      End;
    End;

    begin
      Asm
        Mov ax, $13
        Int $10;
      end;

      Circle(50, 50, 40, $32);
      Readln;

      Asm
        Mov ax, $03
        Int $10;
      end;
    end.

[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]