TermDriver
My goal for this summer is to finish and ship several hardware projects. So far these have been:
- SPIDriver - the campaign is about to enter its last week on Crowd Supply
- The Gameduino 3 7" version - still available in the store
- TermDriver - today!

It's a terminal emulator for embedded systems. It outputs a crisp text display to a VGA monitor, and supports standard ANSI escape sequences. It has a single input, a 115200-baud serial line. So if your CPU can output serial, it can drive a standard VGA monitor.
The full product page is here, so I won't duplicate what's written there. Instead here I'll talk about TermDriver's internals.
Hardware
TermDriver is two parts:- a microcontroller, SiLabs EFM8 - as used in SPIDriver
- an EVE graphics controller, BT810 - as used in the Gameduino 3
The BT810 is normally used to drive LCD panels but it can generate an excellent VGA signal with an appropriate crystal and some external resistors. I worked out the video timings with Ken Boak (@monsonite) for the EVITA board in 2016. By using a 13 MHz crystal, the BT810 produces beautiful 1024x768 video at 60 Hz. The analog color output is generated by four resistors for each color channel.
Firmware
The firmware is a protocol converter. Its input is a stream of bytes on the serial line, and the output is a command stream for the EVE graphic controller. The functionality is very simple: reproduce the look and feel of text-mode PC, including all the ANSI.SYS escape codes.

The total code size is under 1600 bytes, so it fits on the 2K microcontroller with room to spare. The major parts are:
- EVE initialization. The EVE chip has quite a complex initialization sequence. After hardware initialization, the 1024x768 video mode is set up with a memory-mapped 80x25 text screen. The screen is a single hardware bitmap, scaled with bilinear filtering to 1024x768 pixels.
- Serial incoming FIFO. To make sure no characters are dropped, there is a 64-byte incoming FIFO for serial data. This uses a quarter of the EFM8's RAM.
- Character output. As characters arrive, they're copied into EVE's graphic memory. The scrolling logic also happens in this routine. (Code: 54 bytes)
- Escape code parser. The ANSI escape codes are interpreted and executed. (Code: 450 bytes)
- Cursor blink handler. This was surprisingly tricky. The cursor is drawn using its own bitmap, and blinks at 2 Hz. (Code: 150 bytes)

Production
The TermDriver PCBs are made by JLPCB, a Chinese manufacturer. We assemble and test each TermDriver here in California. There are a few new tricks we're using to make assembly go faster, and I'll talk about those in a future update.Thanks for reading! If you know anyone who might be interested, please encourage them to subscribe. And if there's something you want me to write about or feature, please let me know. Thanks again.