Как тебе такой алгоритм эллипса:
Код:
    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
Простая доработка не помогает, тут надо откладывать рисование на одну/две точки и сравнивать координаты...