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