Commodore C64 Emulator

Frank Bösing has achieved the ambitious goal of emulating The Commodore C64 on a Teensy 3.6.

C64 Emulator for the IL9341 Display

Boulder Dash is being played on the emulator in this video.

There are 2 versions of the emulator – one for the ILI9341 display and the other for a VGA display.

C64 emulator for VGA

The list of working games is lengthy, including these favorites:

  • Boulder Dash
  • Galaxian
  • Dig Dug
  • Donkey Kong
  • Mario Bro
  • Paperboy
  • Zaxxon

The project stated a few years ago someone asked Frank if it was possible to emulate the C64’s Sound Interface Device (SID) chip on the Teensy 3.2.  He found a good reverse engineered SID (reSID) and ported it to the Teensy 3.2.  Unfortunately the current reSID versions require a lot of RAM, so he had to switch to an older version.  Then Teensy 3.6 was announced.  The 256KB of RAM, more than enough flash memory, SD slot, and 180 MHz speed made Frank think it was possible to emulate a complete Commodore C64.

In order to make the emulation happen, challenges with the display needed to be addressed.  With current libraries there was no way to control a display fast enough for the emulation.  Frank wrote a new display library for the well-known ILI9341 TFT display using DMA and overclocking the SPI interface to 60 MHz, to achieve full screen DMA-based refresh.

It’s been *a few* years since the Commodore C64 has been around (released in 1982, discontinued in 1994) and Frank had forgotten about it’s technical details.   Luckily the documentation is still around and he was able to read up on it.  He admits that he underestimated the video chip on the C64 (VIC-II), but that turned out to a good thing. Had he known what he was in for he might not have started the project.  In the meantime, he has rewritten the code for the VIC-II a few times.

The C64 emulator currently sports the following list of features

  • Supports Commodore Serial IEC Bus
  • For ILI9341 SPI Display
  • USB-Keyboards (wireless too)
  • 31kHz reSID Audio emulation
  • Audio Line-Out
  • Compatible to SD2IEC
  • Simple drive emulation included
  • Supports original joysticks
  • Small, compact size
  • Hotkeys (e.g. “LOAD “$”:LIST)

Most computer enthusiasts “of a certain age” probably have fond memories of the Commodore 64.  It’s pretty awesome that Frank has been able to bring back this piece of nostalgia.

There are more features planned.  Be sure to check out this thread on the forum for the history of the development and what features are planned for future.

The project is Open Source and code for it can be found on Git Hub.