After many years of toying with the idea of building a Z80 computer, I finally decided on making a ZX81 clone.
The early Sinclair computer designs are characterized by the hack that is the video generator. An ingenious combination of software and a few common logic chips allows generating a 32x24 character in text mode, or 256x192 pixels in graphical mode. Other home computers of the same era used special video generator chips, e.g VIC-II (Commodore 64) or TMS9918 (TI-99/4), or lots of logic chips and ROMs (ABC80).
Video generation matters to me because:
- Including video output makes the computer more self-contained. Compare to the typical breadboard Z80 project, where the I/O is through a serial port and you’d need a modern computer by its side to interface it.
- Video generation takes a lot of logic gates, and easily becomes unwieldy if made with discrete logic chips. There’s the video RAM, character ROM, bus arbitration between CPU and video read-out, address, timing and sync generation. The integrated video controller chips used in 80’s computers, which contained all this logic, are since long out of production and are relatively hard to find. Thus, using a lean video generation circuit is essential to this project.
- Implementing video generation using some other means, like a FPGA or modern MCU alongside a retro CPU like the Z80 is an anachronism that undermines the retro experience. It’s a slippery slope towards softcores and emulation, which is an interesting but distictly separate topic.
While the ZX81 was a four chip design (CPU, RAM, ROM, and ULA), the last chip was just a gate array that contained the video and glue logic of the ZX80 with some improvements. Thus, it is possible to make a ZX81 clone with an acceptable amount of logic chips replacing the proprietary ULA, while retaining the improvements over the ZX80.
When I was looking for schematics and resources, I eventually found Tynesmouth Software, which provides kits and circuit boards for different retro computer clones and accessories. The web shop was closed at the time due to the COVID-19 lockdown (which coincidentally was the reason I had time on my hands to get started with this project), so I ended up drawing by own board based on their schematics and ordering from JLCPCB. I don’t want to undermine TS, so I don’t plan on opensourcing my hardware design in this case. TS have since reopened their shop.
My design is slightly different, because I don’t aim it to be mechanically compatible with existing ZX81 hardware. The board edge connector is replaced by a pinheader, so a custom daughterboard can be stacked on top. The keyboard connector is replaced by a boxed pinheader, to allow an IDC cable to connect to a separate keyboard PCB with mechanical switches. I’ve also changed the RAM and ROM footprints to support both 28 and 32 pin chips.
A few days ago the PCBs arrived from China, and components are on their way from Digikey. To be continued :)
Update: Part 2: Bringup