Close
0%
0%

Blinkencard - Pocket Altair 8800

'70s microcomputer meets '80s handheld game

Similar projects worth following
Here's my take on a hardware emulation of an Altair 8800 and other 8080 / Z80 hobby microcomputers. Rather than take up a shelf, it fits in your pocket and can use a smartphone as a terminal. It uses a PCB with reverse mount LEDs for that classic Altair front panel look, a Lattice FPGA running an 8080 emulation, an ESP32 running Micropython for IO and storage, and a LiPo to make it fully portable.

A bank of tiny switches would be irritating to flip with normal human fingers and not as clacky and satisfying as the real deal. Instead there are 4 buttons used to peek and poke memory and control the processor.

Features

  • Lattice ICE40UP5K FPGA to run the emulation and LEDs
  • Icestorm / Yosys / NextPNR toolchain
  • Based on the s100fpga project emulating Altair hardware
  • ESP32 module with 4MB flash running Micropython for I/O and storage
  • LED matrix homage to the Altair 8800 front panel with  O  C  T  A  L     G  R  O  U  P  I  N  G
  • 4 buttons instead of the front panel toggle switches with modal UI
  • LiPo battery and built-in charger

Status

Software / firmware still in progress after a year and a half of idling.

Done:

  • v2.0 hardware - four instances built
  • s100fpga project ported with front panel LED support
  • Micropython modules for bootstrapping the bitstream, telnet serial console, boot script
  • Altair / MS 8k BASIC and Altair Turnkey monitor runs from ROM

Todo:

  • SPI bus interface logic so the ESP32 can control the emulation
  • Replace the 8k of BRAM with the 128k of SPRAM to free up LUT resources
  • Disk emulation via SPI
  • CP/M port
  • Front panel button UI logic
  • Full virtual front panel web interface

  • 1 × Lattice ICE40UP5k FPGA
  • 1 × ESP32-WROOM module with 4MB flash
  • 1 × 200mAh LiPo cell with JST connector
  • 1 × PCB (see Github link) Electronic Components / Misc. Electronic Components
  • 1 × 40 red SMT reverse mount LEDs

View all 8 components

  • Series Recap

    ajlitt06/03/2021 at 16:42 0 comments

    It's been over a year that I've been procrastinating working on this project. Rather than make any real progress I thought I'd show off some dead-end hardware.

    Minitoy

    I created Minitoy during the great flood of Icestorm compatible boards of '18. All of the ICE40 FPGA boards were either disproportionately expensive, lacking in features I wanted, or vaporware, so I made my own. Minitoy has an ICE40UP5K bootstrapped by an ESP8266 running Micropython, which ended up being a testbed for the UP5K + ESP32 in Blinkencard. One feature I wanted was PMOD compatibility so I could use off-the-shelf FPGA I/O modules, so 16 FPGA I/Os are brought out to 2 PMOD headers.

    Prior to building this board, I did a proof-of-concept of the bootloader scheme with an off-the-shelf ESP8266 board and an Upduino 1.0. The Upduino 1.0 is a basic ICE40UP5K board that has little more than the FPGA and flash, so it was easy to disable the flash and use SPI from the ESP board to load the FPGA directly.

    However I got a few things wrong, hence the bodge wires and external USB-to-serial. I messed up the ESP8266 bootmode straps and reset circuit, necessitating the bodge wires. I also used the wrong footprint for the RGB LED and had to settle for individual red and green LEDs tacked on the board. Additionally the power supply section is needlessly complex and large, and ended up taking up half the board area.

    Still, I was able to assemble one prototype and get it working well enough to use. I played around with the icicle RISC-V port, and got a port of the Apple I emulator working (and contributed an ICE40UP5K target). Shortly after I started a new and demanding job and shelved all my projects.

    Blinkencard V1.0

    About a year later, I got the itch again to do a personal project. A coworker had purchased a blue powder coated sheet metal enclosure for a project that never happened, and a water cooler conversation about what to do with it inevitably turned to making an Altair clone. We never did anything with that case, and it's still sitting on top of a storage cabinet.

    But it did get me thinking about what made the Altair 8800 and the S100 hobbyist scene so appealing at the time. Certainly there's historical significance, and the visual and tactile experience of the LED and toggle switch front panel. Back in the day though, the idea of owning a computer that you made and can modify and extend to meet your own needs made them the popular precursor to the home computers of the late '70s and '80s. A bunch of projects over the last few years, namely RC2014, have tried to capture that sentiment using components that are still available and roughly period-correct. And while it would be easy and fun to throw money at a kit, I wanted to get deeper experience with FPGAs and use Verilog instead of chips and solder for that same sort of expandability.

    So I made Blinkencard 1.0.

    Originally I wanted to make it a business card to hand-out because it seemed like a thing that one does. I planned to use JLCPCB's assembly service since all those LEDs and discretes are a pain to solder. Everything in the design except the FPGA was in JLCPCB's library, leaving the FPGA which I could solder easily with hot air and paste. The front panel looks almost identical to the 2.0 design, and the primary mode of use would be through the front panel buttons and LEDs. My thought was that it could be like an early handheld video game, but instead of controlling an LED football you would control bits on the address and data buses.

    The nest of bodge wires and the hot glued header are for programming the flash. I though I could use the SiLabs CP2102 USB-to-serial I added for communication with a PC to program the SPI flash, but the bitbang mode I thought it was capable of doesn't exist. The USB port is useful only for serial console, while the header and an FTDI module are used for programming the bitstream to SPI.

    I was able to get the s100fpga project's Altair emulation...

    Read more »

  • BASIC casual

    ajlitt05/25/2021 at 17:08 0 comments

    I haven't shown the Blinkencard doing its thing, so here's a console session over WiFi:

    The initial '.' prompt is the Turnkey monitor - a CLI for peeking and poking at memory on Altair systems that don't have blinkenlights and switches. Here I'm running the BASIC ROM at address 0 (J000000) and entering a simple BASIC program.

    The 'Reloading config' line comes from my telnet server which catches [CTRL-A] + R causing the ESP32 to reload the FPGA image and reset the emulation.

  • Blinkin' LEDs and killin' bits

    ajlitt02/16/2020 at 22:55 0 comments

    I've been working on this project off and on for about four months now. Someday I'll get to posting stuff about the architecture, project direction, blah blah. But for now, here's the Blinkencard running the once-popular killbits program, but without switches with which to kill the bits:

View all 3 project logs

  • 1
    Install the IceStorm toolchain including nextpnr
  • 2
    Go to the Github link in the sidebar and download the 'blinkencard' project
  • 3
    Order PCBs, stencil, and components from the BOM from the 'kicad' directory

View all 10 instructions

Enjoy this project?

Share

Discussions

ATmel91 wrote 02/17/2020 at 21:42 point

Can you provide more information? Like project code, PCB/Schematics, for the FPGA and the ESP32? Thank you :) I absolutely LOVE this project!

  Are you sure? yes | no

ajlitt wrote 02/18/2020 at 02:17 point

Thank you! Check the GitHub links in the sidebar. PCB is finished and working, while ESP32 and FPGA code is a work in progress.

  Are you sure? yes | no

ATmel91 wrote 07/05/2020 at 22:49 point

Thank you so much!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates