Heath Company was established in 1911 as a producer of airplane kits. After WW2, they switched to producing electronic kits due to the large amount of military surplus electronic components available after the war. “Heathkit” soon became the leading name in electronic kits due to their quality, performance, price, and excellent manuals and documentation. They produced a wide range of products including radios, hi-fi stereo audio, ham radio gear, test equipment, and even color TVs.
The successful launch of the Altair 8800 microcomputer encouraged Heath to design a kit similar to the Altair, but addressing its many obvious shortcomings. This became the H8 microcomputer, announced in July 1977 at a price of $379 in kit form. Thousands were sold, leading many to successful careers in computer science and engineering.
Heath continued to expand and improve on the H8, leading to the H/Z89, H/Z100, and a series of PC-compatibles. Heath eventually went out of the kit business in 1992, when it was no longer less expensive to build your own than to buy cheap offshore products. But many still have a “soft spot” in their hearts for the H8, and they still sell for enormous prices on ebay. A very active user group, SEBHC (the Society of Eight-Bit Heath Computerists – see https://sebhc.github.io/sebhc) is still providing support, parts, boards and accessories for this pioneering microcomputer.
SEBHC members routinely display their Heath computers at Vintage Computer Festivals around the country. But an increasing number of people have never heard of Heathkits! They are completely unaware that it was ever possible to “build your own” radios, TVs, or computers.
So in May of 2026, we came up with the idea of making a NEW “Heathkit” computer. It would be a simplified and miniaturized version of the H8 to re-introduce people to the art of kit-building. It would have the same capabilities and run the same software as the original, with the same high quality parts and excellent “we won't let you fail” manuals that made Heathkits famous around the world.
Description
- 80C85 2 MHz 8-bit CPU
- 32k RAM
- 32k EPROM, or optional 512k flash ROM
- serial port using the 80C85's SID and SOD pins.
- 4x4 keypad using tactile switches
- nine 0.3" 7-segment LED displays
- a PCB styled like a half-size H8 front panel (about 6"w x 3"h)
- powered by USB-serial adapter, or battery operated with three AAA cells
- a manual to imitate the Heathkit manuals
- and, available in kit form NOW at an affordable price!
A goal is to include the H8's PAM8 monitor and BHBASIC. They will need to be patched to run in this minimalist environment, but Heath provided source code for their software to make this possible. An optional flash ROM can also function as a “disk” drive so the CP/M and HDOS operating systems should be able to run. That opens the door to a VAST amount of software as well (like the iconic "your H8 is up and running" demo).
Software
This is very much a work in progress. Our current code is at https://github.com/sebhc/MiniH8
We started with Jon Chapman's “Glitch Works” GWMOM serial monitor for his 8085 SBC mini rev.1, which also uses SID and SOD for serial I/O. That worked like a charm! We only had to patch the baud rate divisor for the H8 Mini's 4 MHz clock, and we had a monitor to read/write memory and I/O, load/save programs in Intel Hex format, and Go to programs in memory. That greatly speeded up development.
GW-MON-80 ROM Monitor
GW-MON-80 1.1 is programmed into the EPROM included in the H8 Mini proto-kit. It supports the following commands. Commands can be typed in upper or lower case. All numbers are hexadecimal. You must enter BOTH digits of the 2-digit data, and all FOUR digits of the 4-digit addresses. You do not need to type the spaces or <CR> at the end of each command.
- D xxxx yyyy Dump memory from xxxx to yyyy
- E xxxx Edit memory starting at xxxx (ctrl-C to end)
- G xxxx Go run program at xxxx
- I xx Input from I/O port xx
- O xx yy Output to I/O port xx data byte yy
- L Load an Intel HEX file into memory (ctrl-C to end)
Glenn Roberts <glenn.f.roberts@gmail.com> wrote on 9 Sep 2026:
All our work is mirrored in the GitHub repository:
minipam8.hex is the current monitor. It is a mix of PAM/8 and GWMON. It implements much of the PAM/8 interrupt handling, notably the front panel display and 2 msec refresh. I have set it up so that it comes up showing the address and low byte of TICCNT (the 2 msec tick counter) on the display so that you can see it doing something!
Set your Terminal for 2400 baud, 1 Start, 8 Data, no parity, and 1 Stop bit. LOAD may also require you to set Transmit Speed Limiting to 10 msec/char and 300 msec/line so it doesn't miss characters.
The keypad interface is working but not fully integrated, so the only way to start a program is via the console. The console is set up for 2400 baud. See my notes for more info on loading and executing programs. Once you load and run a program from the console you can then disconnect the serial port and the H8 Mini will keep running the program (on batteries).
You will find some programs you can run at https://github.com/sebhc/MiniH8/tree/main/Programs. led1.hex, led2.hex and led3.hex simply rotate through different displays on the LEDs. Testleds.hex is used to make sure all the segments light (it turns everything on). Music.hex plays four musical scales (from C4 to B7) and then resets. Minidemo.hex is the classic “your H8 is up” demo from the H8 manual. I have added the beep sounds. All of these programs (except music) require you to press the two-key RST/0 combination to reset and stop the program
I have begun to load some of these programs in high ROM (e.g. A000H and higher). That way there’s no need to load them, however until I get the keypad running that’s not of much use. Right now you’ll need to keep a laptop with TeraTerm (or similar) running and nearby to load and execute code.
Please try loading the minipam8 firmware and running some demos so that we know it works for you. I will keep working on putting some demos together so if you have a way to download to a laptop at VCFMW I might have something more for you by Saturday.
- Load MUSIC.HEX, then GO 2040. Plays rising scale, then returns to monitor.
- Load LED1.HEX, then GO 2040. Displays random patterns, same in all digits.
- Load LED2.HEX, then GO 2040. Also random patterns.
- Load LED3.HEX, then GO 2040. Another random pattern, pause, repeat.
- Load MINIDEMO.HEX, reset, then GO 2040. Displays "your H8 is up and running".
Theory of Operation
Y1 is a 4 MHz resonator with internal capacitors. The 80C85 has an internal inverter that forms a 4 MHz oscillator. This is divided by 2 to run programs. A 2 MHz clock is provided on U1 pin 37 (CLK0) if external circuits need it.
C1 and R1 provide a power-on Reset to U1 pin 37 (RIN). C1 is initially discharged (0 volts). When the SR or S0 keys are NOT pressed, R3B pulls the inputs of U8C low, so its output is high. R1 can then charge C1. After about 100 msec, the voltage on C1 is high enough to end the Reset and U1 starts executing programs. U1 pin 3 is an inverted version of this signal to U6 pin 35 (RESET).
There are two other ways to Reset U1. If power switch SW is switched to the OFF position, it grounds C1 to reset U1. Or, if BOTH the SR and S0 keys are pressed, both inputs of U8C go high, and the output of U8C goes low. This discharges C1 through R1 to cause a reset.
U2 is the low address latch. U1 (the 80C85) outputs the lower 8 address bits on its AD0-7 pins in the first half of a bus cycle. U1 pin 30 (ALE) latches these bits so they are available in the second half of the bus cycle.
U5 is the address decoder. U5 pin 7 is enabled when U1 pin 34 (IO/M) is "low" indicating that a memory cycle is occuring. U5 decodes address bits A13-A15 to decode eight 8k blocks (=64k). If a U5 input D0-D7 is "low", then pin 6 (W) will go "low" to chip-select U3 (ROM). If an input D0-D7 is "high", then pin 5 (Y) will go low to chip-select U4 (RAM). D0-D7 are thus wired high an low to put ROM at 0-8k (0-1FFF hex, 0-037.377 octal) and 32k-64k (8000-FFFF hex, 200.000-377.377 octal). RAM is at 8k-32k (2000-7FFF hex, 040.000-177.377 octal).
U5 pin 4 (D0) can actually be switched to put either RAM or ROM in the lowest 8k block with header P3 or U6 output bit PA4. But it is normally set "low" because you must have ROM in low memory to start up. This option is provided in case a program needs RAM at address 0 (like CP/M).
Once loaded, RAM contents are maintained by the batteries when SW is in the "off" position. Diode D2 lets the batteries ONLY power the RAM with SW "off". When VCC falls to 0v, everything in the circuit is at 0v. The positive end of the batteries will thus be 0v, so their negative end is at -4.5v, and RAM pin 14 (VSS) will be at -4.3v (due to the diode drop of D1). Thus the RAM is powered, and sees all its inputs "high" (i.e. the same as VCC). This holds its inputs inactive (especially the important /WR pin).
Diode D1 only allows the cells to discharge, so use non-rechargeable alkaline cells. They also provide a higher voltage; the mini H8 would quit before rechargeables were actually dead.
R4 provides pull-up resistors on /RD, /WR/ IO/M, and RAM and ROM chip-selects because the 80C85 tri-states these lines during Reset.
The Heath H8 generated an Interrupt to restart the Monitor if BOTH the SM and S0 keys were pressed at once. Q1 and R3I provide this function on the mini H8. If S0 is pressed, the emitter of Q1 is high. If SM is pressed, it grounds the base of Q1. If both happen at once, Q1 turns on, its collector goes high, and generates an RST5.5 interrupt to U1.
Diode D3 allows the S0 key to also be read by U6 pin 12 (KMATH). Software can detect that S0 is pressed if KMATH is low and NONE of the 7-sgment rows R1-R9 are low.
U8D, R2, and C5 provides the H8's 2 msec clock on U1 pin 7 (RST7.5 interrupt). U8D has Schmitt trigger inputs. The inputs must rise to about 2/3 of VCC for it output to go low, and must fall to about 1/3 of VCC for its output to go high. R2 and C5 cause the input to alternately charge and discharge to 1/3 and 2/3 VCC to produce a square wave output at about 500 Hz (2 msec per cycle).
The Heath H8 generated an Interrupt to restart the Monitor if BOTH the SM and S0 keys were pressed at once. Q1 and R3I provide this function on the H8 Mini. If S0 is pressed, the emitter of Q1 is high. If SM is pressed, it grounds the base of Q1. If both happen at once, Q1 turns on, its collector goes high, and generates an RST5.5 interrupt to U1.
Diode D3 allows the S0 key to also be read by U6 pin 12 (KMATH). Software can detect that S0 is pressed if KMATH is low and NONE of the 7-sgment rows R1-R9 are low.
U8D, R2, and C5 provides the H8's 2 msec clock on U1 pin 7 (RST7.5 interrupt). U8D has Schmitt trigger inputs. The inputs must rise to about 2/3 of VCC for it output to go low, and must fall to about 1/3 of VCC for its output to go high. R2 and C5 cause the input to alternately charge and discharge to 1/3 and 2/3 VCC to produce a square wave output at about 500 Hz (2 msec per cycle).
The RST7.5 input of U1 is edge-triggered. Thus only the rising edge on U8D pin 11 will cause an interrupt. The interrupt can be cleared by resetting the RST7.5 bit with the SIM instruction.
U6 (82C55A) provides three 8-bit I/O ports to handle all the onboard I/O. U8B chip-selects it when A7=1 so it responds to any port address from 80-FF hex (200-377 octal). Use ports F0-F3 hex (360-363 octal) to match the Heath H8 Front Panel. Configure U6 in Mode 0 by writing Control Word 88 hex (210 octal) to port F3 hex (363 octal). NOTE: This MUST be done by a program running from RAM or ROM at an address above 2000 hex (040.000 octal)! That's because configuring the 82C55 in mode 0 will also set PA4 low (ROM/RAM) which selects RAM from 0-1FFF hex (0-037.377 octal).
The 7-segment LED display is multiplexed almost exactly like the Heath H8. The lower 4 bits of output port F0 hex (360 octal) writes to U6 port PA0-3 to select the digits 0-9. U7 (74LS145) decodes the binary number 0-9 to set one of 10 rows R0-R9 "low". For example, write xxxx.0001 to set R1 low to enable digit 1.
Output port F1 hex (361 octal) writes to U6 port PB0-7 to select the segments. For example, light the A, B, and C segments to display a "7" by writing 00001110 binary, 0E hex (16 octal) to port F1 (361). The only difference is that the mini H8 lights the segments with a "high", while the Heath H8 lit them with a "low". (I didn't have room for an octal inverter!)
The upper 4 bits of output port F0 (360) provide control functions. U6 pin 40 (Port A bit 4) selects the memory map. At Reset, PA4 defaults to an input, so jumper P3 determines whether address 0 is RAM or ROM. When U6 is initialized to mode 0, the port registers are reset to 0, so PA4 will be "low" to put ROM at address 0. It should always be set to 0 each time you write to port A.
U6 pin 39 (PA5) controls the "MON" LED. "High" lights the LED. Software should set it high when the monitor is running.
U6 pins 37-38 (PA6-PA7) control piezoelectric speaker SP1. It makes no sound when these bits are not changing. To make sound, set one bit high and the other low, and invert the two at the desired rate.
The keyboard is a lot different from the Heath H8. The keys are read by U6 pins 10-13 (bits PC4-PC7) on input port F2 (362). Keys SR and S0 can be read directly on PC6 and PC7 respectively. PC6 and PC7 are normally "low". When SR or S0 is pressed, the corresponding bit goes "high".
The rest of the keys are multiplexed with the LED display. When a row R1-R9 is selected, the corresponding key S1-S9 can be read on U6 pin 13 (PC4 bit 4, KNUM) on input port F2 (362). "High" means the key is not pressed; "low" means it is pressed. Similarly, the SP, S*, S-, S+, and SM keys are read on U6 pin 12 (PC5, KMATH) when rows R0-R4 are selected. Note that key SM is special as it is read with ANY row selected; so select row R0 to read it.
Serial I/O uses U1's SID and SOD pins. Serial input comes in on RX from a TTL 5v USB-serial adapter at P1. "High" is the "idle" state, and "low" indicates a Start bit or data. R4A holds RX "high" if no adapter is connected. U8A inverts the signal, so the idle state is low, and connects it to U1 pin 5 (SID) and interrupt pin 8 (RST6.5). The software must "big-bang" the serial data stream to decode the characters. The software can also use the RST6.5 interrupt to quickly detect a Start bit so as not to miss characters. Serial output data is also "bit-banged" and directly output on U1 pin 4 (SOD).
POWER LED D4 is simply wired to be "on" whenever there is 5v power. Resistor R5 sets its brightness.
A 3D Printed Case
The present proto-kit comes with low-profile tactile switches with no provision for keycaps. Paul Schmidt has designed 3D printed keycaps and labels for taller switches (Digikey.com 450-1653-ND).
He has also designed a beautiful 3D printed case for the H8 Mini that closely matches the appearance of the original H8. You can download the .STL files and keycap label .PDF files to make your own case and keycaps at <www.serpentwebsite.com/fileshare.htm> under the “H8 Mini” heading. He has also made a video on making the case at <youtu.be/cnBoWw5bXjE>.
That's it for now. Let me know what you think, what I missed, and anything that should be added! :-)
Lee Hart