I just ported a routine to plot ellipses (the ks0108 library didn't have one) - maybe you could use, just changing the function Plot4EllipsePoints
void PlotEllipse(long CX, long CY, long XRadius,long YRadius, int color) {
// portted the algorithm found at
// http://homepage.smc.edu/kennedy_john/belipse.pdf
// by John Kennedy
long X, Y;
long XChange, YChange;
long EllipseError;
long TwoASquare,TwoBSquare;
long StoppingX, StoppingY;
TwoASquare = 2*XRadius*XRadius;
TwoBSquare = 2*YRadius*YRadius;
X = XRadius;
Y = 0;
XChange = YRadius*YRadius*(1-2*XRadius);
YChange = XRadius*XRadius;
EllipseError = 0;
StoppingX = TwoBSquare*XRadius;
StoppingY = 0;
while ( StoppingX >=StoppingY ) //first set of points,y'>-1
{
Plot4EllipsePoints(CX,CY,X,Y,color);
Y++;
StoppingY=StoppingY+ TwoASquare;
EllipseError = EllipseError+ YChange;
YChange=YChange+TwoASquare;
if ((2*EllipseError + XChange) > 0 ) {
X--;
StoppingX=StoppingX- TwoBSquare;
EllipseError=EllipseError+ XChange;
XChange=XChange+TwoBSquare;
}
}
//{ first point set is done; start the 2nd set of points }
Y = YRadius;
X = 0;
YChange = XRadius*XRadius*(1-2*YRadius);
XChange = YRadius*YRadius;
EllipseError = 0;
StoppingY = TwoASquare*YRadius;
StoppingX = 0;
while ( StoppingY >=StoppingX ) //{2nd set of points, y'< -1}
{
Plot4EllipsePoints(CX,CY,X,Y,color);
X++;
StoppingX=StoppingX + TwoBSquare;
EllipseError=EllipseError+ XChange;
XChange=XChange+TwoBSquare;
if ((2*EllipseError + YChange) > 0 ) {
Y--;
StoppingY=StoppingY- TwoASquare;
EllipseError=EllipseError+ YChange;
YChange=YChange+TwoASquare;
}
}
}; //{procedure PlotEllipse}
void Plot4EllipsePoints(long CX,long CY, long X, long Y, int color){
GLCD.SetDot(CX+X, CY+Y, color); //{point in quadrant 1}
GLCD.SetDot(CX-X, CY+Y, color); //{point in quadrant 2}
GLCD.SetDot(CX-X, CY-Y, color); //{point in quadrant 3}
GLCD.SetDot(CX+X, CY-Y, color); //{point in quadrant 4}
}