Как тебе такой алгоритм эллипса:
Код:
const ellibase = function(r,r2,swap) {
let t=r/2,t1=t,t2=0,x=r,y=0;
while(x>=0) {
if(swap) pset(y,x); else pset(x,y);
if(t1>=0) { if((t-=r2)<0) { t+=r; ++y; } ++t2; t1-=t2; }
if(t1<0) { --x; t1+=x; }
}
}
const ellipse = function(rx,ry) {
if(rx>ry)
ellibase(rx,ry,0);
else
ellibase(ry,rx,1);
}
Тут вообще нет умножения, все переменные, за исключением t1, могут быть 8-битными.
Его, конечно, нужно бы доработать (ставить точку только если было смещение по x или y), иначе эллипс слегка "толстоват" 
Потестировать можно тут.
- - - Добавлено - - -

Сообщение от
b2m
за исключением t1
А может и она влезает в 8 бит, всё равно крутится около ноля.
- - - Добавлено - - -

Сообщение от
b2m
ставить точку только если было смещение по x или y
Простая доработка не помогает, тут надо откладывать рисование на одну/две точки и сравнивать координаты...