// fixpoint arithmetic mandelbrot program
// using 16 bits: viiiffffffffffff
//                ||  |_ broken part
//                ||____ integer part
//                |_____ sign bit
//
// so fixedpoint(x) = x * 4096
//                  = x << 12
// and fixedpoint(x*y) = (x*y)>>12

#ifdef __FASTSPIN__
#define putchar  _tx
#else
#include <stdio.h>
#endif

#define XMIN (-8601)
#define XMAX ( 2867)
#define YMIN (-4915)
#define YMAX ( 4915)

#define MAXI (32)

#define DX   ((XMAX-XMIN)/78)
#define DY   ((YMAX-YMIN)/21)

int main(){
  int cx,cy,x,y,xn,yn,rsq,iter;

  for(cy=YMIN;cy<=YMAX;cy+=DY){
    for(cx=XMIN;cx<=XMAX;cx+=DX){
      x=y=rsq=0;
      for(iter=0;iter<MAXI && rsq<=16384;iter++){
        xn=((x*x-y*y)>>12)+cx;
        yn=((x*y)>>11)+cy;
        x=xn;
        y=yn;
        rsq=(x*x+y*y)>>12;
      }
      putchar('@'+(MAXI-iter));
    }
  putchar(13);
  putchar(10);
  }
}
