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

  1. (5730)  Mon 23 Mar 92 23:53
  2. By: Joy Mukherjee
  3. To: Dale Frakes
  4. Re: Integer Graphics      1/2
  5. St:
  6. ---------------------------------------------------------------------------
  7. @MSGID: 1:387/255 77b8a9be
  8. DF>Does anyone know of similar (no floating point math) algorythms for
  9. DF>drawind arcs and circles?
  10.  
  11. Circles, yes.  Posted by John Richardson.
  12.  
  13. {
  14. Bresenham's circle drawing algro doesn't use any trig functions -
  15. sin/cos/tan, etc.
  16.  
  17. Here is a Pascal 6.0 implementation of Bresenham's circle drawing algro
  18. that I wrote in lowlevel assembler.  (It's fast too!)
  19. }
  20.  
  21. { (C) Copyright 1991 by John Richardson }
  22. { Released into the public domain }
  23. { Fast circle drawing routine for Turbo Pascal v6.0. }
  24. { Several spots can still use optimizations. }
  25.  
  26. Program CircleDraw;
  27.  
  28. Uses Crt;
  29.  
  30. Const
  31.     VidBase:Pointer = Ptr($A000,0000);
  32.  
  33. Var I:Integer;
  34.  
  35. Procedure CircPnt(X,Y,Xc,Yc,Color:Integer; Page:Pointer); Assembler;
  36. Var XXCp,XXCm,XYCp,XYCm,YXCp,YXCm,YYCp,YYCm:Integer;
  37. ASM
  38.       MOV  CX,X    { store in registers for faster access }
  39.       MOV  DX,Y    { instead of accessing memory each time }
  40.  
  41.       MOV  BX,XC   { store XC in BX - cut down on mem access }
  42.  
  43.       MOV  AX,BX   { XXCp := XC+X; }
  44.       ADD  AX,CX
  45.       MOV  XXCp,AX
  46.  
  47.       MOV  AX,BX   { XXCm := XC-X; }
  48.       SUB  AX,CX
  49.       MOV  XXCm,AX
  50.  
  51.       MOV  AX,BX   { XYCp := XC+Y; }
  52.       ADD  AX,DX
  53.       MOV  XYCp,AX
  54.  
  55.       MOV  AX,BX   { XYCm := XC-Y; }
  56.       SUB  AX,DX
  57.       MOV  XYCm,AX
  58.  
  59.       MOV  BX,YC   { store YC in BX - cut down on mem access }
  60.  
  61.       MOV  AX,BX   { YXCp := YC+X; }
  62.       ADD  AX,CX
  63.       MOV  YXCp,AX
  64.  
  65.       MOV  AX,BX   { YXCm := YC-X; }
  66.       SUB  AX,CX
  67.       MOV  YXCm,AX
  68.  
  69.       MOV  AX,BX   { YYCp := YC+Y; }
  70.       ADD  AX,DX
  71.       MOV  YYCp,AX
  72.  
  73.       MOV  AX,BX   { YYCm := YC-Y; }
  74.       SUB  AX,DX
  75.       MOV  YYCm,AX
  76.  
  77.       MOV  BX,Color
  78.       MOV  DX,XXCp
  79.  
  80.       LES  DI,Page
  81.       ADD  DI,DX
  82.       MOV  AX,YYCp
  83.       XCHG AL,AH
  84.       ADD  DI,AX
  85.       SHR  AX,1
  86.       SHR  AX,1
  87.       ADD  DI,AX
  88.       MOV  AX,BX
  89.       STOSB
  90.  
  91.       SUB  DI,DI
  92.       ADD  DI,DX
  93.       MOV  AX,YYCm
  94.       XCHG AL,AH
  95.       ADD  DI,AX
  96.       SHR  AX,1
  97.       SHR  AX,1
  98.       ADD  DI,AX
  99.       MOV  AX,BX
  100.       STOSB
  101.  
  102.       MOV  DX,XXCm
  103.  
  104.       SUB  DI,DI
  105.       ADD  DI,DX
  106.       MOV  AX,YYCp
  107.       XCHG AL,AH
  108.       ADD  DI,AX
  109.       SHR  AX,1
  110.       SHR  AX,1
  111.       ADD  DI,AX
  112.       MOV  AX,BX
  113.       STOSB              { Plot pixel }
  114.  
  115.       SUB  DI,DI
  116.       ADD  DI,DX
  117.       MOV  AX,YYCm
  118.       XCHG AL,AH
  119.       ADD  DI,AX
  120.       SHR  AX,1
  121.       SHR  AX,1
  122.       ADD  DI,AX
  123.       MOV  AX,BX
  124.       STOSB              { Plot pixel }
  125.  
  126.       MOV  DX,XYCp
  127.  
  128.       SUB  DI,DI
  129.       ADD  DI,DX
  130.       MOV  AX,YXCp
  131.       XCHG AL,AH
  132.       ADD  DI,AX
  133.       SHR  AX,1
  134.       SHR  AX,1
  135.       ADD  DI,AX
  136.       MOV  AX,BX
  137.       STOSB              { Plot pixel }
  138.  
  139.       SUB  DI,DI
  140.       ADD  DI,DX
  141.       MOV  AX,YXCm
  142.       XCHG AL,AH
  143.       ADD  DI,AX
  144.       SHR  AX,1
  145.       SHR  AX,1
  146.       ADD  DI,AX
  147.       MOV  AX,BX
  148.       STOSB              { Plot pixel }
  149.  
  150.       MOV  DX,XYCm
  151. >>> Continued to next message
  152.  
  153.  * SLMR 2.1a # * I've seen the truth, and it makes no sense.
  154.  
  155. --- MsgToss 2.0c! (r)
  156.  * Origin: Nul 512-615-NUL1 HST/V32b,615-NUL2, NUL3, 1.2Gig (1:387/255)
  157.  
  158. @PATH: 387/255 823 170/400 512/0 1007 
  159.