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

    {
    >   Thanks for writing a working Pascal source.  Hopefully it will
    >   work with 640x480 resolution (320x200 is a bit grainy, specieally
    >   with the default palette.)

    I changed Norbert's source a little. Now it looks nicer, and I believe it's
    even a fraction faster (not sure, though, didn't time it):
    }

    {$G+,N+,E-} { if you have no CoPro, set E+ }

    { Reals   Complex
       -1        0
       -0.1      0.8
        0.3     -0.5
       -1.139    0.238
    }

    program Julia;
    const Gseg : word = $a000;
    Type real = double;
    var Cx,Cy,Xo,Yo,X1,Y1 : real; Mx,My,A,B,I,Orb : word;

    procedure Pset(X,Y : word; C : byte); assembler;
    asm
      mov es,Gseg
      mov ax,[Y]
      shl ax,6
      mov di,ax
      shl ax,2
      add di,ax
      add di,[X]
      mov al,[C]
      mov [es:di],al
    end;

    function keypressed : boolean; assembler; asm
      mov ah,0bh; int 21h; and al,0feh; end;

    procedure Setpalette;
    var I : byte;
    begin
      for I := 1 to 64 do begin
        port[$3c8] := I;
        port[$3c9] := 10+I div 3;
        port[$3c9] := 10+I div 3;
        port[$3c9] := 15+round(I/1.306122449);
      end;
    end;

    begin
      write('Real part: '); readln(Cx);
      write('Imaginary part: '); readln(Cy);
      asm mov ax,13h; int 10h; end;
      Setpalette;
      Mx := 319; My := 199;
      for A := 1 to Mx  do
        for B := 1 to My do begin
          Xo := -2+A/(Mx/4); { X complex plane coordinate }
          Yo :=  2-B/(My/4); { Y complex plane coordinate }
          Orb := 0; I := 0;
          repeat
            X1 := Xo*Xo-Yo*Yo+Cx;
            Y1 := 2*Xo*Yo+Cy;
            Xo := X1;
            Yo := Y1;
            inc(I);
          until (I = 64) or (X1*X1+Y1*Y1 > 4);
          if I <> 64 then Orb := I;
          Pset(A,B,Orb); { Plot orbit }
        end;
      while not keypressed do;
      asm mov ax,3; int 10h; end;
    end.

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