Chip-8 games console


Both Luke and Adafruit tweeted about Paweł Marczewski’s Chip-8 games console, that runs on the BX, so I thought I would have a look at it and see if it would run on our Field Programmable Games Console hardware.

Chip-8 is an 8-bit assembler language from the 1970s that was designed to make it easy to create games, and there are implementations of classic games like Pong, Space Invaders and Tetris written in it.

It was originally designed for a 64 x 32 screen, but there is an enhancement called SCHIP that supports a 128 x 64 screen. It only supports monochrome games.

Pawel has a set of tools in an fpgatools project. He also has an FPGA tutorial.

The tools includes drivers from an SSD1306 128x64 monochrome OLED screen, an SSD1331 96x64 color OLED screen, a 16-character hex keypad and a uart.

The monochrome screen and keypad are used by his Chip-8 implementation.

I had what was claimed on ebay to be an SSD1306, but mine is actually an SH1106, which is similar but different enough not to work, so I have ordered a genuine SSD1306. I got one of his demo programs to run with the color SSD1331 screen, which I also had, but that does not work with Chip-8.

I will persevere and get his implementation working but monochrome games on a tiny 128x64 screen are a bit limited.

I am considering porting it to the FPGC. It should be quite straightforward. The 128x64 screen could be enlarged with bigger pixels to 256x128 or 256x192, and you could choose a color, or two colors if you emulate the version of the SSD1306 which uses a different color for the top few lines of the display. They are usually Yellow-Blue, and that is what Pawel is using.

Our console has 8-buttons, whereas CHIP-8 expects a hex keypad. But with multiple button presses, we could support up to 256 input values. So I would probably map the 8, 6, 4 and 2 keys onto the left direction arrows as those keys are often used for direction keys in CHIP-8 games, and the other keys could be emulated by two-button presses.

I am currently unsure about whether this is worth doing.


I got this going with a slightly cheaper version of the SSD1306 display from ebay, which has the connections in a different order.