16X Z80 MultiProcessor Main Page

Project Photo This project consists of 16 identical Z80A microprocessors tied together with a D-Bus interface. The inspiration for this thing came to me during my unhealthy-obsession-with-Mandelbrots period. The MicroAngelo Clone Graphics Subsystem was finished, and was just begging for something neat to display. Mandelbrots were the obvious answer, but they took forever to generate on my 4 Mhz CP/M system, even with my finely tuned assembler Mandelbrot program. Then it occurred to me that generating Mandelbrots is a task ideally suited to multiprocessing. In fact, you could have 1 processor for every pixel on the screen; just pass the desired coordinates and zoom factors to each one and sit back and let the data flow in. Constructing 512 x 480 (245,760) processors seemed impractical, but maybe, say, 8 would be do-able.

I sat down and figured out how I could make a Z80 run with as few chips as possible with surplus parts I had on hand. I ended up with a 7-chip design. Using Augat pins in perf board and my wire wrap gun, I was able to fit all 8 processors plus the D-Bus interface neatly on a single board. After solving a problem with clock loading (all 8 Z80s run off the same 6 Mhz clock), the thing worked great. So great, in fact, I built another one and installed the whole mess into a case with LEDs on the front that indicated when data was being transferred to or from each processor.

Rather than putting application code in the EPROMs, (which would mean that I would have to burn & replace 16 EPROMs every time I changed the program) I put in just enough code to allow the application to be downloaded to RAM and started from the host computer via the D-Bus. It only took about 1 second to send the code down to all 16 slaves; negligible, compared to time it took to generate a Mandelbrot.

Once the code was downloaded and executing, all the host computer had to do was poll the slaves for the data. I had each slave processor doing calculations for every 16th pixel on the current scan line. The CP/M host would read the data bytes from each slave in sequence, and then either write them to disk, or send them directly to the graphics subsystem. It is interesting (to me, anyway) to note that when I had it set up to write directly to the graphics subsystem, there were 26 (count 'em!) Z80s all working together just so I could explore the Mandelbrot set.

Some friends of mine (who are also crazy) and I had established a Mandelbrot "Standard Picture", with a certain fixed resolution, coordinates, zoom factor, and max count, which we used to evaluate the speed of any given piece of hardware or software. My 16 Z80s were blowing the doors off the machines they were using at the time, 8 Mhz 8088 PCs with 8087 coprocessors. With all this raw processing power at my disposal, I could crank up the max count on my pictures, (all the cool stuff in the Mandelbrot set is out in the high max counts) which of course, extended my run times. I usually started one up before I went to bed, and hopefully it would be done when I got home from work the next day. But damn, they looked nice.

Board Front View Board Rear View
7-Chip Closeup Front 7-Chip Closeup Rear
With Case Open

Main Page Introduction D-Bus Interface EPROM Programmer MicroAngelo Clone 16x Z80 MultiProcessor
512K RAM Module Logic Analyzer Closed Caption Decoder Drill Table Controller Piano Roll Scanner