home *** CD-ROM | disk | FTP | other *** search
- ***********************************************************************************************
- ** Written by Dino Papararo 25-April-2001 *
- ** *
- ** FUNCTION *
- ** *
- ** Julia -- perform Z = Z^2 + C iteration. *
- ** *
- ** SYNOPSIS *
- ** *
- ** WORD Julia (WORD Iterations,double Cre,double Cim) *
- ** *
- ** *
- ** DESCRIPTION *
- ** *
- ** C equivalent function: *
- ** *
- ** ***************************************************************************************
- ** *WORD Julia (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