home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / PARADIS1 / FASTCIR2.PAS < prev    next >
Pascal/Delphi Source File  |  1992-03-28  |  2KB  |  110 lines

  1. (5731)  Mon 23 Mar 92 23:53
  2. By: Joy Mukherjee
  3. To: Dale Frakes
  4. Re: Integer Graphics      2/2
  5. St:
  6. ---------------------------------------------------------------------------
  7. @MSGID: 1:387/255 77b8a9be
  8. >>> Continued from previous message
  9.       SUB  DI,DI
  10.       ADD  DI,DX
  11.       MOV  AX,YXCp
  12.       XCHG AL,AH
  13.       ADD  DI,AX
  14.       SHR  AX,1
  15.       SHR  AX,1
  16.       ADD  DI,AX
  17.       MOV  AX,BX
  18.       STOSB              { Plot pixel }
  19.  
  20.       SUB  DI,DI
  21.       ADD  DI,DX
  22.       MOV  AX,YXCm
  23.       XCHG AL,AH
  24.       ADD  DI,AX
  25.       SHR  AX,1
  26.       SHR  AX,1
  27.       ADD  DI,AX
  28.       MOV  AX,BX
  29.       STOSB              { Plot pixel }
  30. End;
  31.  
  32. Procedure Circle(Xc,Yc,Radius,Color:Integer; Page:Pointer);
  33. Var X,Y,D:Integer;
  34. Begin
  35.    ASM
  36.      SUB  AX,AX         { X := 0; }
  37.      MOV  X,AX
  38.      MOV  AX,Radius     { Y := Radius }
  39.      MOV  Y,AX
  40.  
  41.      SHL  AX,1          { (2 * Radius) }
  42.      MOV  BX,03H
  43.      SUB  BX,AX         { D := 3 - (2 * Radius) }
  44.      MOV  D,BX
  45.    End;
  46.    While (X < Y) Do
  47.    Begin
  48.       CircPnt(X,Y,Xc,Yc,Color,Page);
  49.       If (D < 0) Then
  50.          ASM
  51.            MOV  AX,X  { 4 * X }
  52.            SHL  AX,1
  53.            SHL  AX,1
  54.            ADD  AX,6  { (4*X)+6 }
  55.            MOV  BX,D
  56.            ADD  BX,AX
  57.            MOV  D,BX
  58.          End
  59.          {D := D + (4 * X) + 6}
  60.         Else
  61.          Begin
  62.             ASM
  63.               MOV  AX,X    { (X-Y) }
  64.               MOV  BX,Y
  65.               SUB  AX,BX
  66.               SHL  AX,1    { 4*(X-Y) }
  67.               SHL  AX,1
  68.               ADD  AX,10
  69.               MOV  BX,D
  70.               ADD  BX,AX
  71.               MOV  D,BX
  72.               { D := D + 4*(X-Y) + 10; }
  73.               DEC  Y
  74.               { Dec(Y); }
  75.             End;
  76.          End;
  77.       Inc(X);
  78.    End;
  79.    If (X=Y) Then CircPnt(X,Y,Xc,Yc,Color,Page);
  80. End;
  81.  
  82. Procedure VidMode(Mode:Byte); Assembler;
  83. ASM
  84.    SUB  AH,AH
  85.    MOV  AL,Mode
  86.    INT  10H
  87. End;
  88.  
  89. Begin
  90.    VidMode($13);
  91.    Randomize;
  92.    For I := 100 To 200 Do
  93.        Circle(100,100,I-100,I,VidBase);
  94.  
  95.    ReadLn;
  96.    VidMode($13);
  97.    Repeat
  98.       Circle(Random(319),Random(199),Random(50),Random(256),VidBase);
  99.    Until KeyPressed;
  100.    VidMode($03);
  101. End.
  102.  
  103.  
  104.  * SLMR 2.1a # * I've seen the truth, and it makes no sense.
  105.  
  106. --- MsgToss 2.0c! (r)
  107.  * Origin: Nul 512-615-NUL1 HST/V32b,615-NUL2, NUL3, 1.2Gig (1:387/255)
  108.  
  109. @PATH: 387/255 823 170/400 512/0 1007 
  110.