***********************************************************************************************
**            Written by Dino Papararo            25-April-2001                               *
**                                                                                            *
**  FUNCTION                                                                                  *
**                                                                                            *
**    Julia68K -- perform Z = Z^2 + C iteration.                                              *
**                                                                                            *
**  SYNOPSIS                                                                                  *
**                                                                                            *
**    WORD Julia68K (WORD Iterations,double Cre,double Cim)                                   *
**                                                                                            *
**                                                                                            *
**  DESCRIPTION                                                                               *
**                                                                                            *
**  C equivalent function:                                                                    *
**                                                                                            *
**      ***************************************************************************************
**      *WORD Julia68K (WORD Iterazioni,double Cre,double Cim,const double Jim,const double Jre)
**      *{                                                                                  ***
**      *register double zr,zi,zi2,dist,maxdist;                                            ***
**      *                                                                                   ***
**      *  zi = Cim;                                                                        ***
**      *                                                                                   ***
**      *  zr = Cre;                                                                        ***
**      *                                                                                   ***
**      *  maxdist = 4;                                                                     ***
**      *                                                                                   ***
**      *  do {                                                                             ***
**      *       zi2 = zi;                                                                   ***
**      *                                                                                   ***
**      *       zi  *= zr;                                                                  ***
**      *                                                                                   ***
**      *       zr  *= zr;                                                                  ***
**      *                                                                                   ***
**      *       zi2 *= zi2;                                                                 ***
**      *                                                                                   ***
**      *       dist = zr;                                                                  ***
**      *                                                                                   ***
**      *       dist += zi2;                                                                ***
**      *                                                                                   ***
**      *       if (dist > maxdist) return Iterazioni;                                      ***
**      *                                                                                   ***
**      *       zi += zi;                                                                   ***
**      *                                                                                   ***
**      *       zr -= zi2;                                                                  ***
**      *                                                                                   ***
**      *       zi += Jim;                                                                  ***
**      *                                                                                   ***
**      *       zr += Jre;                                                                  ***
**      *                                                                                   ***
**      *     } while (-- Iterazioni);                                                      ***
**      *                                                                                   ***
**      *  return 0;                                                                        ***
**      *}                                                                                  ***
**      ***************************************************************************************
**                                                                                            *
**  This function tests if a point belongs or not at Julia set                                *
**                                                                                            *
**  Optimized for pipelines of 68882+ coprocessors                                            *
**                                                                                            *
**  NOTICE: ALL VARIABLES ARE INTO REGISTERS FOR FULL SPEEEED                                 *
**                                                                                            *
**  d0:Iterations                                                                             *
**                                                                                            *
**  fp0:Cre/Zr fp1:Cim/Zi fp2:JKre fp3:JKim fp4:Zi2 fp5:Zr2/Dist fp6:MaxDist fp7:NotUsed ;-)  *
***********************************************************************************************

*        MACHINE  68060        

        XDEF  _Julia68K

        section data

Radius  dc.x  4.0

        section code

_Julia68K:
                
        fmove.x Radius,fp6   * MaxDist = 4.0

Loop:
        fmove.x fp1,fp4      * zi2   =  zi
        fmul.x  fp0,fp1      * zi    =  zr * zi
        fmul.x  fp0,fp0      * zr    =  zr * zr
        fmul.x  fp4,fp4      * zi2  *=  zi2

        fmove.x fp0,fp5      * dist  =  zr2
        fadd.x  fp4,fp5      * dist +=  zi2
        fcmp.x  fp6,fp5      * Compare  MaxDist & Dist
        fbgt.w  Exit         * if Dist > MaxDist then goto exit

        fadd.x  fp1,fp1      * zi   += zi
        fsub.x  fp4,fp0      * zr   -= zi2

        fadd.x  fp3,fp1      * zi   += JKim
        fadd.x  fp2,fp0      * zr   += JKre

        dbra.w  d0,Loop      * if --Iterations != -1 go to Loop
        clr.w   d0           * Iterations = 0

Exit:

        rts                  * return Iterations

        end
