In this video, I build a memory/IO expansion for the vintage Heathkit ET-3400 trainer:
I’ve always wanted one of these Heathkit microprocessor trainers, and finally one caught my eye on eBay and I pulled the trigger. The basic interaction with the trainer is through the onboard keypad and LED displays, but Heathkit also made an accessory that added additional ROM, RAM, serial port, and a cassette interface.
This allowed you to use a machine monitor over the serial port, and even featured a Tiny Basic interpreter in ROM that allowed the trainer to be programmed in Basic.
The schematics for the ETA-3400 are well published on the web, and you can readily see exactly how Heathkit implemented the original accessory. One option would have been to faithfully reproduce the original, but that would have been a little inconvenient in comparison to some of the more modern ICs that are available now. Rather than using eight static RAMS and a pair of ROMs, we could simply use one larger RAM and one larger ROM. Rather than implementing address translation in a ROM, it could be done in programmable logic. A modern MAX202 could easily replace the handful of transistors and discrete components used in the original. While slightly newer, these choices are still in the vintage theme of the original.
Below is the schematic:
There’s a lot going on, so click the schematic to get a larger view, or download the PDF in my github repo.
The large 2×20 header is the ribbon cable from the ET-3400. It contains the data bus (D0-D7), the address bus (A0-A15), clock (02), power and ground, and several control lines. Noteworthy control lines include:
- vma.02, asserted when the CPU wants to access memory,
- R/W, asserts when the CPU wants to write (vma.02 and r/w together indicate a write; vma.o2 without r/w indicates a read)
RAM and ROM use a 62256 and 28C64 respectively. The RAM footprint I used was technically for a AS6C6246, and that *should* work, but in my prototype all I had as AS6C62256. If you’re ordering parts, I recommend the AS6C62256 just to be consistent and it’s a negligible cost difference for a more capable RAM.
The PIA, MC6821, is right out of the heathkit schematic. It’s a general-purpose peripheral interface and is used to interface to the serial port and cassette. The serial interface makes use of a MAX202 RS232 level converter, which is then plumbed out to a DB25 connector. The hex inverter interposed between the PIA and MAX202 is not needed, just leave it out and set the jumpers to bypass it.
The cassette circuitry is straight out of the heathkit schematics. It outputs audio via an RC network and voltage divider. It inputs the audio using a comparator. I have not tested the cassette interface yet, but I attempted to faithfully reproduce the heathkit circuit.
Address decoding makes use of a ATF16V8 programmable logic device. This take the upper address bits (A10..A15) and asserts the appropriate chip enable (RAMCS, ROMCS, or PIACS).
An optional feature is a raspberry pi header. A pi zero w can be added to the board and will be connected to the serial and cassette interfaces. This allows you to hide a pi inside the case and have remote SSH access to your trainer (or hook up the HDMI and USB to drive a display and keyboard). As I said, the pi is entirely optional.
A picture of the PCB is below:
Here’s an annotated picture:
3D printed case
I made a 3D printed case. It’s about an inch tall and sticks to the bottom of the ET-3400 with magnets: