orandy@amdahl.UUCP (05/20/87)
I've been working on a Mandelbrot program for the Amiga for a long time, and I've finally stopped development long enough to post a first revision. This is my first posting to the net, I hope you like it. The whole package consists of eight shar files. If you are reading this, you already got the first shar file. If you don't want the source, all you need to keep is parts 1 and 2. If you want the source, you must collect all eight parts to this posting. Here is a summary of the contents of each part of the posting: part summary 1 README MandelVroom.doc 2 MandelVroom.uue 3 MandelVroom source code 4 MandelVroom source code 5 MandelVroom source code 6 Charlie Heath's file name requester source and diffs 7 Some Amiga Developers disk IFF stuff 8 More Amiga Developers disk IFF stuff Please note that due to the brain-damaged nature of system five, MandelVroom.doc and MandelVroom.uue have been renamed MandVroom.doc and MandVroom.uue. This is so the #$%@! file names are fourteen characters long or less. Please rename them when you get them unshared. If you want to compile MandelVroom, you will need start with a blank floppy. You will then want to perform the following steps: 1. Format a floppy in df1: 2. change directory into df1: 3. make a directory called 'src' 4. change directory into 'src' 5. make a directory called 'MandelVroom' 6. make a directory called 'GetFile' 7. make a directory called 'IFF' 8. change directory into 'IFF' 9. make a directory called 'iff' Note: you are not required to use df1:, I just picked it as an example. Once you have prepared an empty file system, you need to copy the shar files into specific directories. The table below shows you which shar files go into which directories. part directory 1 df1: 2 df1: 3 df1:src/ManelVroom 4 df1:src/ManelVroom 5 df1:src/ManelVroom 6 df1:src/GetFile 7 df1:src/IFF 8 df1:src/IFF/iff You must then unshar each of the files, and read the README's in each directory. There are Makefiles for each of the source directories. You should make the IFF stuff first. Then you will need to make Charlie Heath's file name requester (remember to apply the diffs file) next. You need to make MandelVroom last, because MandelVroom's Makefile links all the objects together. The code will only work when compiled under Manx3.40a with patches. MandelVroom uses the new 1.2 function NewModifyProp. Manx 3.40a without patches, produces an executable that will crash the system. There is a fair amount of assembly code in here, so it would be difficult to port it to Lattice. Please observe the copyright notice in all the sources posted. I am using Charlie Heath's file name requester off the Fish Disks. I have reposted it with diffs, so as to comply with his posting restrictions. Please see his code in the GetFile directory for his copyright notice. The stuff in the IFF directory is from the Amiga Developer's IFF disk. These files contain copyright notices and restrictions. These files came from Fish Disk 64. All my code is Freely Redistributable in both source and executable form, as long as the copyright notices remain intact, and is not for for non-commercial use. That means you can give it away, but don't sell it. You are welcome to hack this code to death, but I'd like to be kept informed of any new ideas or hacks you put into it, and I'd like to know if you make major changes and repost it. I am: Kevin L. Clague 408 Tortolla Way San Jose, CA 95133 home phone: 408-258-9891 work phone: 408-737-5481 I am permanently borrowing an account with access to usenet. Please see my signature for my net address. To those who try to recreate this beast, good luck.... To those who use it, happy Mandelbrot hunting!!! # This is a shell archive. Remove anything before this line, then # unpack it by saving it in a file and typing "sh file". (Files # unpacked will be owned by you and have default permissions.) # # This archive contains: # README MandVroom.doc echo x - README cat > "README" << '//E*O*F README//' I have been working on this Mandlebrot for some months and have finally decided to give it away in the public domain. I hope you like it. It can only be compiled with Manx Aztec C, because some of the program is in Manx 68000 assembler format. The Mandelbrot picture generators are in assembly for speed. The program uses contour map making techniques that allow you direct control over coloration of your Mandelbrot pictures. Once you've generated a picture, you can recolor again in seconds. MandelVroom has a number of preset pictures that are examples of the kind of pretty pictures you can make. MandelVroom works best with more than 512K of ram, but I've tried to make some provisions for those of you without extra ram. The file named MandeVroom.doc contains a description of MandelVroom and how to use it. I recommend reading it. For those of you who want or need to rebuild MandelVroom, good luck. MandelVroom's code is located in three directories. The MandleVroom directory contains most of MandelVroom's code. The GetFile directory contains Charlie Heath's file name regiester from Fish Disk 41. It also contains some files with diff's in them. Charlie's file name requester doesn't work to well in custom screens without them. You will need to combine Charlies code with the diff's to produce the code I use. You will then need to perform a make in the GetFile directory. The IFF directory needs to contain a bunch of sources from the Amiga Developers IFF disk (Fish Disk 64). See the 'readme' in the IFF directory for information on the files required. Sorry you have to run all over to get the stuff to rebuild this code, but I don't want to redistribute the IFF sources. Good luck with the program. I hope you enjoy it. Kevin L. Clague 408 Tortolla Way San Jose, CA 95133 home 408-258-9891 work 408-737-5481 //E*O*F README// echo x - MandVroom.doc cat > "MandVroom.doc" << '//E*O*F MandVroom.doc//' PURPOSE This document introduces you to MandelVroom, outlines it's features, and tells you how to use it. READINGS For a good explanation of Mandlebrot calculations, I recommend you look up the Computer Recreations column in the August 1985 edition of Scientific American magazine. You may want to read a book written by Dr. Benoit Mandelbrot, called "The Fractal Geometry of Nature", published by W. H. Freeman and Company. Dr. Heinz-Otto Peitgen and Dr. Peter Richter have written a very nice book called "The Beauty of Fractals". It is published by Springer-Verlag. It has a some very nice pictures and is a good navigational guide. I recomend it. INTRODUCTION This program lets you navigate around the complex plane generating Mandelbrot pictures. Picture data is saved in RAM allowing you to quickly recolor pictures using a powerful coloration mechanism. Once you've generated and recolored a picture, you can save it on disk in one of two formats: ILBM and MAND. ILBM files are in IFF format. MAND files contain everything needed to recreate the picture. It can take a long time to calculate Mandelbrot pictures. MAND files allow you to save this precious data on disk. MandleVroom also has these features: - Assembly language 32 bit fixed point Mandlebrot picture generator - Assembly language Fast Floating Point Mandlebrot picture generator - Picture presets - Color palette - Contour palette - Mouse and graphics oriented user interface - High resolution, interlace and halfbrite graphics modes supported - Configurable number of bit planes - Source in public domain TERMINOLOGY You need to know the following concepts to use this program: - Generators and Generation - Navigation and Zooming - Aspect Ratios - Contours and Altitudes - Pens and Colors GENERATORS AND GENERATION The generators perform Mandelbrot calculations over regions of the complex plane. The generators produce a two dimesional array of iteration counts. MandelVroom treats these iteration counts as altitudes. You can use this program to navigate around the complex plane choosing regions to generate pictures over. Using preset locations as starting points, you can generate pictures. Once generated, you select a region within the picture that you want as the next picture. When you start the generator, you 'zoom into' the new location in the complex plane. ASPECT RATIOS An aspect ratio is the ratio between the width and height of a rectangle. A square is a rectangle with a one to one aspect ratio. The pixels on your screen have an aspect ratio that varies depending on graphics mode you are using. MandelVroom takes the aspect ratios of the pixels into account when calculating pictures. Some Mandelbrot programs allow you to strech either the X or the Y axis. In this case, a square picture window would not represent a square region in the complex plane. MandelVroom will not allow you to do this. CONTOURS AND ALTITUDES Map makers often use color to indicate altitude in when making contour maps. Contour maps usually have a 'key' indicating what colors relate to which altitude. MandelVroom treats iteration count as altitude. It has a programmable key allowing you to assign pen numbers to ranges of altitudes. MandlVroom's programmable key is called the Contour Palette. The Contour Palette contains thirty two contours. You can use the thirty two contours' heights and colors to control the distribution of colors in your picture. PENS AND COLORS MandelVroom supports low resolution, high resolution, non-interlace, interlace, and half brite graphics modes. In these graphics modes, the Amiga uses a hardware color indirection method for graphics display. The Amiga hardware contains thirty two pens that can be filled with one of 4096 colors. The following chart show how many pens the Amiga hardware supports for each graphics node. Graphics Mode Number of Pens ---------------- ----------------- High Resolution 16 Low Resolution 32 Half Brite 64 Please note that interlace does not affect the number of pens available to you. MandelVroom has a Color Palette that allows you to copy, blend and exchange colors in the Amiga's color registers. STARTING MANDELBROT This version of MandelVroom can only be run from the CLI. To start the program, type: MandelVroom When the program starts, it opens a custom screen and a Picture window. It then generates a picture of the main Mandelbrot set. It will take a minute or two it to calculate this picture. THE MAIN MANDELBROT SET The black region in the middle of the picture is the Mandelbrot set. The bright area surrounding the Mandelbrot set is the place to explore. The darker regions outside the bright areas are of little interest. They are dark so they don't distract you from the interesting areas. NAVIGATION The Mandelbrot set is inside a circle of radius two, ceneterd about the origin of the complex plane. The rectangular Picture window represents a rectangular region on the complex plane. The pictures that MandelVroom generates depend on the regions you pick in the complex plane. MandelVroom generates pictures in the Picture window. You can choose regions within the current picture to be the boundaries for the next picture. When you generate, you will produce a big picture of the new region. This is nicknamed 'zooming'. ZOOMING IN There are three steps to zooming in. 1. Select a region for the next picture 2. Resize the Picture window if you like 3. Generate a new picture You select a region of the current picture using the Zoom Box. The Zoom Box is a resizable and movable rectangle you use to box in a region for the next picture. THE ZOOM BOX You place, move, resize and close the Zoom Box using the mouse. The following steps will open the Zoom Box in the Picture window: 1. Pull down the Zoom Box item's Open sub-item 2. Place the mouse cursor in your Mandelbrot picture. 3. Depress and hold the left mouse button 4. Drag the mouse down and to the right 5. Release the left mouse button. The Zoom Box is a stick figure of an Intuition window. The Zoom Box has a drag bar, resize gadget, and a close gadget. The drag bar and close gadgets are at the top of the Zoom Box. The resize gadget is in the lower right hand corner of the Zoom Box. The Zoom Box looks like this: +--- Close Gadget +--- Drag Bar | | v v +-----+----------------------------------+ | | | | | | +-----+----------------------------------+ | | | | | | | | | | | | | | | +---+ | | |<---- Resize Gadget | | | +------------------------------------+---+ This is how you move the Zoom Box: 1. Place the mouse cursor in the Zoom Box's drag bar 2. Depress and hold the left mouse button 3. Drag the Zoom Box around with the mouse 4. Release the left mouse button This is how you resize the Zoom Box: 1. Place the mouse cursor in the Zoom Box's resize gadget. 2. Depress and hold the left mouse button 3. Resize the Zoom Box using the mouse 4. Release the left mouse button You can close the Zoom Box one of two ways: 1. Press the Zoom Box's close gadget 2. Pull down the Close subitem of the Zoom Box item If you place a Zoom Box, and then decide you don't want to zoom, you can close the Zoom Box. RESIZING THE PICTURE WINDOW Once you've placed and sized your Zoom Box, you will want to resize the Picture window to have the same aspect ratio as your Zoom Box. If you don't, when you generate you may get too little or too much of the area on the right side of the Zoom Box. GENERATING NEW PICTURES If you pull down the Generate item of the Project menu, MandelVroom will generate a new picture for you. Using the zoom box and the generator, you can repeatedly zoom in until you find things you think are interesting. STOPING THE GENERATORS Pictures take from minutes to hours to generate. You can stop the generator by pulling down the Stop item of the Project menu. Once stopped, the generators can not be restarted, except at the begining of the picture. Once the generator is stopped, you can proceed as though the whole picture was calculated. CHANGING MAGNIFICATIONS MandelVroom is like a microscope with variable magnification. Every time you zoom in and generate a new picture, you increase the magnification of your microscope. You can also change the magnification by changing the height of the picture window. Making the picture window taller increases the magnification. Making the picture window shorter decreases the magnification. If you make the picture window wider, while not changing it's height, you will not change magnification factor. You will get a picture covers a wider piece of the complex plane. If you want to make a large version of a small picture, all you need to do is resize the window and generate. You must take care to make sure the aspect ratio of the original window and the new window are the same. If you make the picture too narrow, some of the things you want in the picture may be cut off. If it is too wide, you may have extra things in your picture. The same is true for the relative aspect ratios of the zoom box and the picture window. GOOD NAVIGATING This program has nice facilities for zooming into the Mandelbrot set. It is severly lacking in methods for zooming out. It's saving grace is that you can save interesting pictures to disk. You can also reload these pictures and resume zooming. You can use use disk files to record your journey in search of the ultimate Mandelbrot picture. File access is discussed in the LOADING AND SAVING section. The best way to be a good navigator is to practice. Start by generating a picture of the main Mandelbrot set. Zoom in on the perimiter of the set. Try not to get too much Mandelbrot in the picture, it takes a long time to calculate. If you like the picture, you can save it on disk, and zoom somewhere into the picture. Keep doing this and you are bound to find something nice. Good navigating is an art. Good subject placement and framing can make a world of difference in a picture. Sometimes you want lot's of detailed real estate in the picture (like a picture of Yosemite Valley.) Other times you want to isolate and capture a small object (like a picture of a small flower.) WHAT'S NEXT Once you have a picture generated, you probably want to recolor it. The next section explains how to pick and choose colors for your picture. PICTURE RECOLORING You can use the Color Palette and the Contour Palette to recolor a MandelVroom picture. You can use the Color Palette to affect the colors in you pens. You can also use the Contour palette to change the distribution of pens and colors in your picture. The next section explains the use of the Color Palette. The Contour palette is discussed in the THE CONTOUR PALETTE section. THE COLOR PALETTE You can open the Color palette by pulling down the Color item of the Edit menu. The color palette looks like this: +---+-------------------------+---+---+ | . | Color | | | +---+-------------------------+---+---+ | | | ++ ++ ++ ++ R G B +---+ | | ++ ++ ++ ++ | | Copy | <-- copy a pen's color | ++ +---+ | | ++ ++ ++ ++ | | ++ ++ ++ ++ ++ +---+ | | | | Spread | <-- Spread from pen to pen | ++ ++ ++ ++ +---+ | | ++ ++ ++ ++ ++ | | +---+ | | ++ ++ ++ ++ | | Exchg | <-- Exchange two pens | ++ ++ ++ ++ +---+ | | | | ++ ++ ++ ++ | | ++ ++ ++ ++ | | | | ++ ++ ++ ++ | | ++ ++ ++ ++ | | | | ++ ++ ++ ++ | | ++ ++ ++ ++ | | | | ++ ++ ++ ++ | | ++ ++ ++ ++ | | | +-------------------------------------+ ^ ^ ^ ^ ^ | | | | | | | +--+--+-- RED/GREEN/BLUE potentiomenters | | +--------+- Pens ADJUSTING PEN COLORS You can use the Red, Green, and Blue potentiometer gadgets to adjust a pen's color components. The following steps show you how to change a pen's color: 1. Click the mouse on the pen you want to modify. 2. Adjust it's color using the R/G/B potentiometer gadgets. COPYING PEN COLORS You can copy one pen's color into another pen by performing the following steps: 1. Click the mouse on the pen you want to copy 2. Click the Copy gadget 3. Click the pen you want to change SPREADING PEN COLORS You can create a range of colors between pens (e.g. a range of pens from dark green to light green) using the Spread gadget. You use the spread gadget in the following way: 1. Click the mouse on a pen at one end of the range 2. Click the Spread gadget 3. Click the mouse on the pen at the other end of the range EXCHANGING PEN COLORS These steps will exchange two pen colors: 1. Click the mouse on one of the pens you want to exhange 2. Click the mouse on the Excg gadget 3. Click the mouse on the other pen NOTES ON CHANGING PEN COLORS Be very careful when changing the top four pens in the left most column of pens. These pens are used by the system to render windows and screens. If you make these pens the same color, you may have problems seeing MandelVroom's controls. The Amiga uses pens 17 through 19 when drawing the mouse cursor. If change these pens, the cursor may be hard to work with. The Zoom Box on the picture window is rendered using a drawing mode called complement. When the system is drawing a line in complement mode, it negates the pen number in each pixel in the line. If you have five bit planes, you have thirty two pens. The complement of pen 0 is pen 31. It you draw a line in complement mode, you can erase it by drawing the same line again in complement mode. If complementary pens have similar colors in them, then object drawn in complement mode is unnoticable. If you have problems finding your Zoom Box, check out your pen colors. THE CONTOUR PALETTE The Contour Palette is a powerful control mechanism for coloring your Mandelbrot pictures. It has thirty two contours. Each contour has a pen and a height. MandelVroom expects to find the contours' heights decreasing as you traverse the list of contours from 0 to 31. Given this, a contour actualy represents a range of heights. Here is an example description of the list of four contours: Contour Contour Contour Contour Number Height Pen Range ------- ------- ------- --------- 0 1023 0 1023-1023 1 500 10 1022-500 2 300 1 499-300 3 100 2 299-100 OPENING THE CONTOUR PALETTE You can open the Contour palette by pulling down the Contour item of the Edit menu. The Contour Palette looks like this: +---+-------------------------------------------+--+--+ status line -> | | C: 0 H: 1023 P: 0 | | | +---+-------------------------------------------+--+--+ | | set pen or --> | .. .. .. .. .. .. .. .. .. .. Set +---+ | height gadgets | .. .. .. .. .. .. .. .. .. .. .. | | ReColor| | +---+ | increment --> | .. .. .. .. .. .. .. .. .. .. + | height | .. .. .. .. .. .. .. .. .. .. | | +---+ | +-> | .. | | Smooth | | | .. +---+ | | | | | | .. | | | .. | height | | Alt. | potentiomenters | .. | | | .. | | | | | | .. .. .. .. .. .. .. | +-> | .. .. .. .. .. .. .. | | | | | decrement --> | .. .. .. .. .. .. .. .. .. .. - | height | .. .. .. .. .. .. .. .. .. .. | | | +-----------------------------------------------------+ ^ ^ ^ ^ | | | | +---------- Contours ---------+ | + Commands 0 1 2 ......... 30 31 | +-- Ceiling As the generator calculates pictures, it saves the data in RAM. Once the picture is generated, you can change the Contour Palette and recolor the picture. When you push the 'ReColor' gadget, MandelVroom traverses the Mandelbrot data, converting altitude to pen, and plotting pens in the picture window. This mechanism allows you to recolor the picture quickly and repeatedly until you are happy with the way it looks. Each contour has four gadgets: a set gadget, an increment height gadget, a height potentiometer, and a decrement height gadget. These are used to modify a given contour's height and/or pen. SETTING A CONTOUR'S PEN You can use any pen for any contour. To do this, you must have both the Contour and Color Palette windows open. To set a contour's pen, click it's Set gadget and the click a pen in the Color Palette. Notice there is no change in the Picture window? The change will not take place until you hit the ReColor gadget of the Contour window. SETTING A CONTOUR'S HEIGHT You can set a given contour's height, by adjusting it's potentiometer gadget. You can use the increment and decrement gadgets to fine tune contours' heights. You can also set a given contour's height by clicking it's Set gadget and clicking a point on the Picture window. The program will look up the height associated with the pixel you click and use that as the contour's new height. This is the most useful way of setting a contour's height. Height changes do not affect the picture until you press the ReColor gadget of the Contour window. NOTES ON CONTOURS MandelVroom expects contours' heights to decrease as you traverse the list of contours from 0 to 31. Any contour that does not meet this expectation is ignored. SMOOTHING CONTOURS You can evenly distribute a set of contours' heights by using the Smooth gadget. This is comparable to the Color palette's Spread gadget. Example: pull the far right contour's potentiometer gadget down to the bottom (e.g. set that contour's height to 0.) Pull the far left contour's potentiometer gadget all the way to the top. Click the smooth gadget. Click the right-most contour's set gadget. All the contours in the middle change. They are evenly distributed. Soothing of contours can be done between any two contours. The contour settings created by the above example do not lend themselves to very good pictures. You are in charge of deciding what heights and colors are appropriate for each picture. A RECOLORING METHOD The contour method is very powerful for recoloring Mandelbrot pictures. When starting in to color a new picture, I usually set contour two to a black pen with zero height. I then vary the height of contour one until I get the amount of color want. I then restore contour one's original height and pen. I then set contour thirty one's height to zero. Using the Smooth command, I evenly distribute all the contours between contour thirty one and contour one. I then recolor the picture using the Recolor gadget. Looking at the colors in the contours and the colors on the picture, I can find the lowest point in the picture. I set contour thirty one's height using the picture window. Again I smooth the points between contour one and contour thirty one, and recolor the picture. This gives me the height of the highest non-Mandelbrot point in the picture in contour one. I also have lowest point height in contour thirty one. This gives me a feel for the distribution of point's heights in the picture. THE CEILING GADGET The potentiometer gadgets serve a couple of purposes. They allow you to set a given contour's height. They also allow you to see (roughly) what the contour's height's are. In most Mandelbrot pictures, very few points fall in the top half of the possible iteration count range. Typically by the sixth contour, the remaining potentiometer's are at the same pixel height in the window (although they have different heights). The Ceiling gadget allows you to get a better look at the shorter contours. Move it around and watch what it does. The contour's potentiometers change, but the contour's height's don't. Comprende? I have very hard time explaining this one. Moving the ceiling gadget does not affect the picture. It only affects the display of the contour's potentiometer gadgets. I guess the best thing is to just set the ceiling to varous values until you see what it does. THE STATUS LINE There is a status line in the Drag bar of the Contour window. It shows you information about the current contour. When you select a contour's select gadget, the program will display the contour number, the contour's height range and pen in the status line. You can use this to find out what numbers are in which contours. SAVING AND LOADING You can save and load raw Mandlebrot data files on floppies. The program saves all the data necessary to generate and zoom new pictures. This can be very usefull for saving your place while you are navigating. If you zoom in, and don't like it, you can pull where you were off disk. You can load MAND files using the Project menu's Load item. The Save item, of the Project menu, has a MAND sub-item that is used to save MAND files on disk. SAVING ILBMS You can save pictures in ILBM format. This allows you to take pictures from this program and use them in slide shows or in DPaint. You can save ILBM files by using the ILBM sub-item of the Project menu's Save item. CONFIGURING AMIGA GRAPHICS The program allows you to use many of the Amiga's graphics modes. It supports: low and high resolutions, non-interlace and interlace, and halfbrite mode (yes, I have a half bright denice.) The program also allows you to chose the number of bit planes to use. The number of bit planes affects the number of pens you can have for coloring Mandelbrot. You can change the graphics modes of the program by pulling down the ViewModes item of the Edit menu. The ViewModes item has three sub-items: HIRES, INTERLACE, and HALFBRITE. These are used to configure ViewModes. Once you have ViewModes configured, pull down the NewScreen item of the Project menu. The program will close the old screen and open a new one with your new specifications. Beware: HALFBRITE and HIRES are mutually exclusive. The program will not allow you to configure ViewModes in ways that the Amiga hardware can't handle. You can change the number of bit planes using the list of depths available in the Depth item of the Edit menu. It allows you to use from 1 to 6 bit planes. Some combinations of Depths and ViewModes are illegal. HIRES screens can only have four bit planes. HALFBRITE screens require six bit planes. The program modifies the number of bit planes to a legal value where required. GENERATORS The Mandelbrot set has infinite detail. The Amiga has finite numerical precision. This precision limits how far down you can zoom into the Mandelbrot set. This program has two generators: a 32 bit fixed point generator, and a Motorola Fast Floating Point generator. They both perform the same Mandelbrot calculations, they just use different data formats. Both generators are finely tuned, had crafted assembly. Good performance was the goal. The 32 bit fixed point generator is considerably faster than the floating point generator. The fixed point generator can not zoom in as far as the floating point generator. I use the fixed point generator until the lack of precision becomes unbearable. I then switch to the floating point generator. You can switch between fixed point and floating point generators in the Generator item of the Edit menu. The floating point generator allows you to configure the number of iterations done in the Mandelbrot calculation. This is handy for quicker pictures at lower magnifications. The farther you zoom in, the higher the iteration count required (generally.) The fixed point generator always uses 1023 as the maximum iteration count. PRESET LOCATIONS This program has a number of preset pictures that I think are very pretty. The first preset generates a picture of the main Mandelbrot set. The presets are intended as examples of good navigation and coloration. I hope you like them. To generate a preset picture, pull down a preset item and release. The program prepares itself and generates the picture. All the presets produce small pictures. If you want to generate large versions of the presets, you can stop the generator, resize the picture window, an pull down the Generate item of the Project menu. SAVING TIME Mandelbrot calculations take a long time. One way to avoid long calculation times is to generate small pictures without many points in the Mandelbrot set. Use small Picture windows while zooming in on something, then make the Picture window large when you've found something you really like. Another interesting way to save time is to not watch the picture generate. If you are using 5 or more bit planes in low resolution graphics mode, the video hardware steals memory bus cycles from the 68000. Other graphic modes and bit plane combinations also degrade 68000 performance. When generating somethime, watch the speed of the generator. Pull the screen down three fourths of the way down the monitor. See the generator speed up? If you are in a real hurry, you can pull all the screens down. In this case, the video hardware hardly uses any memory bus cycles, the only problem is you can't see anything. MEMORY HOGGING This program can consume a lot of memory. It allocates a word of memory for each pixel in a picture. A 640 by 400 window requires 512K bytes of memory. If you have a 512K Amiga, you will not be able to generate full screen interlace or high resolution pictures. You can, however, generate smaller pictures in these graphic modes. ADVANCED TOPICS Mandlebrot calculations are CPU and memory intensive. You can do some things to reduce memory consumption (LORES, NONINTERLACE, 1 bit plane). It is hard to reduce the CPU usage. This program can multitask, but it will interfere with other programs running at the same priority. You can use the ChangeTaskPri function available under Workbench 1.2 to set Mandelbrot's priority lower than other programs you might want to run. You might also notice that not all Mandelbrot pixels take the same amount of time to calculate. I have a Mandelbrot detection algorithm in both the fast floating point and fixed point algorithms. It turns out that the points inside the Mandelbrot set cycle. My generators use a trace mechanism to detect these rings. If a ring is detected, then the pixel is Mandelbrot. It saves lots of time when calculating the main Mandelbrot set. It saves less as you zoom in. SOMEDAY I have tons of new ideas and feature that I would like to add. Some are: - Fixed point generator sensitive to Max Index - Double precision fixed point generator - IEEE floating point generator - Generator runs as seperate task - change task priority built into program - movable magnifying glass generator - other fractal generators (julia curves....) - key in generator's maximum iteration counts from the keyboard - Good zoom out controls - record a history of points you've been to. - key in complex plane locations from keyboard - a 'You are here --->' display feature - proportional zoom box and picture window controls - three dimensional rendering - Many more contours. - assign a range of colors to a range of contours - copy contour pen patters into other contours - Auto-contouring. - a histogram of altitudes in picture - Volume-Hue-Saturation controls in color palette - Color cycling - borderless picture window/screen - overscan graphics - define IFF file format for Raw Mandelbrot information - less ram usage - a 68881 (oops! I guess I'll need new hardware) APOLOGIES Sorry this document is so big, but I hope helps you understand how to use the program. I also apologize for any inacuracies in this document. Sorry for any bugs this program has. I know they can be annoying. Finally I apologize for all the Amiga CPU time this program will consume. AUTHOR Kevin L. Clague 408 Tortola Way San Jose, Ca 95133 Home 408-258-9891 Work 408-737-5481 //E*O*F MandVroom.doc// echo Possible errors detected by \'wc\' [hopefully none]: temp=/tmp/shar$$ trap "rm -f $temp; exit" 0 1 2 3 15 cat > $temp <<\!!! 59 316 1888 README 741 4825 31439 MandVroom.doc 800 5141 33327 total !!! wc README MandVroom.doc | sed 's=[^ ]*/==' | diff -b $temp - exit 0 -- UUCP: orandy@amdahl.amdahl.com or: {sun,decwrl,hplabs,pyramid,ihnp4,seismo,oliveb,cbosgd}!amdahl!orandy DDD: 408-737-5481 USPS: Amdahl Corp. M/S 249, 1250 E. Arques Av, Sunnyvale, CA 94086 [ Any thoughts or opinions which may or may not have been expressed ] [ herein are my own. They are not necessarily those of my employer. ]