*** Fractal Microscope *** Programmed by Terry Newton The Mandelbrot Set is a very complicated imaginary mathematical object located on the complex number plane, a two dimensional space of real and imaginary numbers. The Mandelbrot Set is a fractal object. Areas of interest can be magnified to produce images with just as much detail. With this program enlagements of over 100,000 times over the parent image are possible. Each point can also be expanded into a Julia Set, which itself can be magnified upon. The Mandelbrot Set represents a table of contents to an infinite variety of Julia Sets. Using this program you can explore this strange universe of fractals and possibly see images never seen before. For more information on the Mandelbrot set refer to Scientific American August 1985, February 1989 and many other articles published on the subject. Because of the intense mathematics required to compute the images, be prepared to wait some. Each image takes several hours of computation. I have made every effort to speed up the process including using fixed point math in machine code. This is probably the fastest version available for an 8 bit computer. Once an image is made, it becomes part of your collection to be enjoyed at any time, so the time is not that much compared with the results obtained. For convienience you may save an incomplete image and finish it later, in case you must use the computer for something else. SCOPE.COM must be loaded with basic disabled, hold down the option key when powering up the computer. After loading you will see the main menu with the following choices... N - New P - Plot D - Data V - View S - Save L - Load F - Files 1-8 - D1: C - Color X - Exit M - Magnify The default drive for saves, loads and files is selected by pressing a digit between 1 and 8. Files lists all the *.PIC files on the selected drive. Under SpartaDOS the Exit option allows you to go to DOS without disturbing the image, do DOS fuctions (except COPY!) then return with the RUN command. Under DOS 2.5 Exit functions the same as pressing the reset key and the image will be lost if not saved. The View option simply displays the image without the menu. The following variables are used by SCOPE to define the image... Real Center - Location on the 'X' axis Imag Center - Location on the 'Y' axis Plot Range - Length of each side CA - Real point for Julia CB - Imag point for Julia Band Factor - Determines range of bands Iter. Limit - Cutoff for iterations These variables and the current X and Y pixel numbers are shown by the Data option. New plot lets you manually enter or change variables. Press Return to keep old value. The variables are initially set to produce the overall image. The Plot option begins calculation from the last point. If it is a new plot you can select to estimate the plot time, produce a 1/16 size test plot or just begin plotting. Mini-plots can be saved and magnified from as with full size plots but require much less time to make and are helpful in getting an idea of what the area looks like before making the real thing. The time given is only approximate. Save and Load use a compression routine to store and retrieve image files with variables. The save option displays the last loaded file if the variables haven't changed. The default drive is selected from the main menu and a *.PIC extension is used if none specified. Magnify allows you to enlarge an area for closer inspection or convert a point into a Julia Set plot. When selected a cursor appears on the image. Move with the cursor keys and press Return to read out the point coordinates. Press F to find another point, I to count the iterations for that point, J to use the point for a new Julia plot, and M to enter a magnification factor to enlarge the area. Julia and Magnify prompt for additional variables, press Return to keep the old values or enter a new value. Begin plotting by selecting the Plot option. The Color option lets you change the color registers. C chooses the color register, H changes the hue and L changes the luminance. You can see the changes as you make them. S lets you save the colors internally as default colors when changing resolution. Restore recalls the default colors. The default colors can be permanently changed by using the BASIC program CHANGE.BAS. Before using have the color hue and luminosity numbers figured out from the Color option. CHANGE.BAS tries to read and display the old values, accepts new values for color and mono resolutions then writes out the new file. COL.OBJ must be appended to SCOPE.COM to effect the changes. Under DOS 2.5 use the copy option C then enter COL.OBJ,SCOPE.COM/A for source and destination. Under SpartaDOS enter COPY COL.OBJ SCOPE.COM/A to append the file. Do this to a working copy of the program and don't forget the /A. TECHNICAL DETAILS Image File Format... 1 Byte Graphics Mode 8 or 15 3 Bytes Color Registers CR0-CR2 1 Byte 254 to flag compression 1 Byte Color Resister CR4 2 Bytes Length of RL data Variable RL encoded bitmap Variable Plot Data in text form Run Length Encoding is used with the image scanned in byte columns (every 40th byte) for maximum compression effect. Runs of 3 or more bytes are replaced with the sequence 254,byte,length. Byte 254 is replaced with 254,254,1. Files are typically a third to half the size of normal bitmaps. This is a modified version of an old routine written by Cris Zamara and works very well for images. The routines will not work if BASIC is enabled. Because of the time consuming nature of making iterated fractal images (especially on an 8 bit system) every effort has been made to speed up the process. Machine code does the actual calculations using 24 bit fixed point numbers (5 bit whole, 19 bit fraction with an extra byte for sign). This number system allows for over 100,000 times enlargement with no noticable loss of resoulution and the code runs three times faster than floating point. Other methods help to increase the speed of plotting images containing substantial amounts of the set. Attractor detection is used in the iteration code to exit early if a repeating loop in the iterate is found. Most points within the set will go into a repeating loop at some point well before a high limit is reached. Attractor detection is turned on when a point goes to limit and turned off when the next non-set point is encountered to prevent the detection code from slowing down non-set plotting. Finally, whenever plotting set points, only every other point is checked to cut set time by half. When the next non-set point is encountered the last skipped point is checked to keep the edges sharp. The formula used to get the count value for each pixel is Z=Z^2+C until Z exceeds a size of 2. Z and C are complex numbers with real and imaginary components. To make a Mandelbrot plot Z starts at 0 and C sweeps through all pixels. To make a Julia plot C is held at some fixed value and the starting value of Z is varied. In either case each pixel's count value is used to determine the pixel's color. The following are psuedocode versions of the machine code routines... Iterate(AC,BC,LIMIT,AZ,BZ) AC,BC - Real,Imaginary point C Limit - Maximum Iterations AZ,BZ - Starting Value for Z AS,BS - Holds squares of AZ,BZ Count - Iteration Number Attflag - Attractor Detect on/off AA(1..Limit) - Holds values of AZ AB(1..Limit) - Holds values of BZ Begin Count=0 AS=AZ^2 BS=BZ^2 While AS+BS<4 and Count<Limit BZ=BZ*AZ*2+BC AZ=AS-BS+AC AS=AZ^2 BS=BZ^2 Count=Count+1 If Attflag=1 AA(Count)=AZ AB(Count)=BZ If AZ=AA(Count/2) and BZ=AB(Count/2) Count=Limit If Count=Limit Attrflag=1 Else Attrflag=0 Return Count Transform(Count,Bandf) Count - Iteration count Bandf - Banding Factor Color - Resulting color 1 to 3 Q - Internal counter variable Begin Q=0 Color=0 While Q<Count Q=1+Q+Q/Bandf Color=Color+1 Mod 3 Color=Color+1 Return Color The program colors points that reach the limit color 0 and those that don't with color 1 to 3 based on the transform function. When plotting in monochrome every other point that reaches the limit is turned on (to simulate gray) and the other points are plotted only if the transform color changes resulting in an outline view of the area. The code used to create SCOPE.COM consists of many files, some of which are common to other programs in this collection. Link file... SCOPE.CCC Main program body SCSUB.CCC Routines for SCOPE PLOTSUB.CCC General plot routines ACECIO.CCC ACE C Library ITER7000.OBJ Iteration Machine Code GR7P6F00.OBJ Code to simulate GR15 CMP6D40.OBJ Compression Code ENGINE.OBJ ACE C Runtime w/run adr COL.OBJ Default Colors (06F0) Source Files... SCOPE.C SCSUB.C PLOTSUB.C ITER.M65 CMP.M65 SCOPE.LNK Notes... 1. ENGINE.OBJ file is a debugged version and must be used (some integer conversion routines in the original did not work right). 2. Either the ACE C or the Lightspeed C compiler can be used to compile the C source code. The ACE C library and runtime was used because it is public domain and produces smaller program files, You must use the FASTC optimizer on the .CCC code (twice on SCOPE) or there will not be enough memory to link or it will run into the 6D40 ML code. 3. Graphics mode 15 is simulated by using graphics mode 8 and a neat relocatable routine called GR7PLUS located at 6D40 hex. This allows high resolution color graphics to be displayed on any Atari 8 bit computer. I'm not sure where the routine originally came from but thanks to whoever wrote it. All plotting is done with graphics mode 8 double pixels using the PLOTSUB.C routines.