1
2 /*
3 (partial) ASM ellipse drawing routine
4 By Waleed Hasan - 11Jan2002
5
6 This is not in full assembly, but calling the asm set_4_pix
7 saved some bytes & made the ellipse drawing faster
8
9 $Id: DsDisplayEllipse.c,v 1.3 2015-01-21 17:51:52 stefano Exp $
10 */
11
12 #asm
13 EXTERN ellset4pix
14
15 .DsDisplayEllipse
16 #endasm
17
DsDisplayEllipse(xc,yc,a0,b0)18 void DsDisplayEllipse(xc, yc, a0, b0)
19 int xc, yc, a0, b0;
20 {
21 long a=a0,b=b0;
22 int x=0,y=b0;
23 long asq=a*a,tasq=asq<<1;
24 long bsq=b*b,tbsq=bsq<<1;
25
26 long d=bsq-asq*b+asq>>2,dx=0,dy=tasq*b;
27
28 while(dx<dy)
29 {
30 #asm
31 call ellset4pix
32 #endasm
33 if(d>0L) {y--;dy-=tasq;d-=dy;}
34 x++;dx+=tbsq;d+=bsq+dx;
35 }
36 d+=(3L*(asq-bsq)>>1-(dx+dy))>>1;
37
38 while(y>=0)
39 {
40 #asm
41 call ellset4pix
42 #endasm
43 if(d<0L) {x++;dx+=tbsq;d+=dx;}
44 y--;dy-=tasq;d+=asq-dy;
45 }
46 }
47