Replacing the ZX81 ULA (Uncommitted Logic Array)
The Sinclair ZX81 was able to be manufactured at such as low cost largely due to the ULA - the "uncommitted logic array". This 40-pin integrated circuit, a Ferranti "ULA2C184E or "ULA2C210E", was described in the ZX81 manual as the machine's "dogsbody". What that means is that it is responsible for a host of tasks that would otherwise fall on a great number of other circuits or ICs to do, including:
- Synchronising the screen display;
- Generating a 6.5 MHz clock, from which a 3.25 MHz clock is derived for the processor;
- Outputting an audio signal to a cassette recorder in SAVE mode;
- Processing the incoming cassette audio signal in LOAD mode;
- Sensing keystrokes from the 5-way keyboard connector;
- Using memory addresses provided by the CPU to decide when ROM and RAM should be active;
- Controlling general system timing.
If you have a Sinclair ZX81 it is at least 30 years old now, and I would actually go as far as to say it's doing pretty well if it still works. Among all the components on the ZX81 circuit board, the ULA especially was known to run hot and is a common point of failure in these machines. Apparently, Ferranti designed the ULA to run at around 50% utilisation, but the ZX81 runs it at closer to 75%. If your ZX81 is displaying a dark grey screen with a dark blurry cursor, or is exhibiting other video display-related anomalies, it's likely the ULA is faulty.
What are the different versions of ULA found in the ZX81?
The various ULA versions have the same pinouts, but produce slightly different voltages and timings. The newer 210E supports a "back porch" in the video signal produced at pin 16. This was missing on the 184E which simply went back to white level directly after the end of synch pulse. The two versions are interchangeable. Since the ZX81 was designed to run on inexpensive black & white TVs which used only analogue circuitry. When colour TVs became more widespread, some of these actually performed worse with the ZX81. If you have great difficulty getting the TV to tune into the ZX81, try one of two composite mods here: ZX8-CCB and ZXVid,
Direct Replacement Part
Replacement ZX81 ULAs are becoming more difficult to source, as they've been out of production for 25 years. At the time of writing, you can still purchase NOS (New Old Stock) ULA chips from Ebay via a seller called 'Retro Computer Shack'. He sells brand new original ULAs for £8.49 and heatsinks for £3.99 which supposedly drop the typical operating temperature of the ULA from 63 degrees celcius down to 50 degress celcius. I would also recommend using some thermal paste to stick the heatsink onto the ULA. Their email address is email@example.com.
Another source of ULAs is here: http://www.mutant-caterpillar.co.uk/sho ... ts_id=2901
Creating Your Own Circuits to Replace the ULA
A number of technically-minded and very clever people out there have seen this coming, and have redesigned the ULA hardware using nothing but commonly found discrete components. In most cases these redesigns involve no modification to the ZX81 circuit board itself - the replacement is connected directly to the 40 pins of the original ULA socket.
Andy Rea, who is active on the http://www.sinclairzxworld.com forum, is one such enthusiast who has taken up this challenge. His work can be found here. He provides a breakdown of what the various ULA pins actually do, and then delves in the various functions, replacing each with its own discrete circuit.
Another example of replacing the ULA can be found here. This one effectively recreates the ULA functionality into a modern CPLD package (Complex Programmable Logic Device), which in this cases uses the Xilinx XC9572.
Thirdly, a design which uses A Bodo Wenzel's custom ULA design can be found here (Spanish). This one uses the Mach210 CPLD.