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