Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
183 lines (159 sloc) 6.76 KB

M.CU.M.E = Multi CompUter Machine Emulator

News

Teensy 4.0 now running Atari 520ST emulator (68k core based)!!!
https://youtu.be/UCOaOGmYYso
https://youtu.be/6rr2hMqprO0

A collection of 80th game Console and Computer emulators ported to Teensy and ESP32 MCUs.
Have a look at the video: https://youtu.be/jlqoWH2X6gk

This project is a spin-off of the TeensyCEC project https://github.com/Jean-MarcHarvengt/TeensyCEC
Now ported to much more MCUs!

Featuring

Computer systems supported and status on various MCU platforms

System Teensy3.6 Teensy 4.0 ESP32 ESP32-Wrover
Zx81 X X X X
Zx spectrum X X X X
Atari 800 X X X X
C64 X X X X
Atari 520ST - full speed! - slow
8086 XT PC - full speed! - slow

Please compile for smallest code on the Teensy4.0 else you will run out of memory

Game console systems supported and status on various MCU platforms

System Teensy3.6 Teensy 4.0 ESP32 ESP32-Wrover
Atari 2600 X X X X
Odyssey/Videopac X X X X
Colecovision X X X X
Atari 5200 X X X X
Nintendo NES X big roms! X X
Vectrex - full speed! - slow

Minimal requirements:

  • Teensy3.6/Teensy4.0 or ESP32 Node32S/Wrover SDK chip
  • ILI9341 (Teensy/ESP32) or ST7789 (Teensy only) SPI display
  • SD card (Teensy uses built-in uSD, ESP32 uses external one connected over SPI, e.g. ILI9341 integrated one)
  • Analog joypad (Arduino or PSP like)
  • 3 buttons (FIRE, USER1 and USER2)

Optional requirements:

  • I2C custom keyboard (for computers emulators)
  • Sound (DAC for ESP and Teensy3.6, MQS for Teensy4.0)
  • VGA output (Teensy 3.6 only)
  • 2 extra buttons (USER3 and USER4) mostly for NES emu

Wiring

  • see pinout.txt file in the respective project (ESP32 or Teensy)
  • Some KICAD image also available for ESP32

I2C keyboard (for computer emus)

  • see i2ckeyboard sub-directory
  • the I2C keyboard is using a separate atmega328p MCU handling the keys matrix
  • with 10x4 or 10x5 keys

Installation

  • Format the SD card as FAT32
  • extract the content of SD.zip in the root directory
  • there must be a sub-directorie for each emulator
    • "2600" => for atarivcs, put your Atari 2600 roms here (.bin), with sub-dirs or not
    • "5200" => for atari5200, put your Atari 5200 roms here (.bin)
    • "800" => for atari800, put your Atari 800 cartridges here (.rom)
    • 'c64" => for c64, put your C64 programs here (.prg), with sub-dirs or not
    • "o2em" => for odyssey/videopac, put your Videopac/Odysssey roms here (.bin)
    • "coleco" => for colem, put your Colecovision roms here (.rom, including coleco.rom)
    • "nes" => for nes/nofrendo, put your .nes files here (e.g. galaga,xevious,mario1...)
    • "spec" => for spectrum, put your ".z80" or ".sna" files here into sub-dirs or not ( max 48K )
    • "z81" => for zx81, put your ".p", ".81"(, ".56") ".80" or ".o" files here ( max 56K )
    • "st" => for AtariST, put your floppis ".st" files here
    • "pc" => for 8086, put your HDD image ".img"
    • "vectrex" => for Vectrex, put your ".gam" files here
  • insert the card into the SD slot

Compilation/flashing (Teensy)

  • open the respective ino file with Arduino SDK
  • select DISPLAY MODULE in tft_t_dma_config.h (ST7789 or ILI9341)!!!!
  • double check iopins.h for pins configuration!!!!
  • compile and install from there.

Compilation/flashing (ESP32)

  • go to espboot directory first:
  • make, make flash => this will install custom partition table, bootloader and app selector
  • go to any other directory (one by one!):
  • Adapt ./flashapp.sh according your OS (I use OSX)
  • make, ./flashapp.sh

Status and known issues

  • 64 (C64):
    • Full speed with sound
    • I2C custom keyboard support!
    • (only few games working)
  • colem (Colecovision):
    • Full speed with sound
  • vcs (Atari 2600):
    • no sound yet
    • limited cartridge size support (due to ram constraint)
  • o2em (Videopac/Odyssey):
    • no sound
    • only videopac G7000 games supported (due to ram constraint)
  • nofrendo (Nintendo NES):
    • Full speed with sound
    • 32k roms only supported except on Teensy 4.0
  • 5200 (Atari 5200):
    • Full speed with sound
    • 16 and 32k roms
  • speccy (Zx spectrum):
    • SNA support (Z80 to be fixed)
    • YM and preliminary buzz sound support
    • 48k games only supported
    • kempston joystick supported but on screen keyboard may not answer in some games
    • I2C custom keyboard support!
  • 81 (Zx81):
    • zx80 and zx81
    • .P, .81 and .80 format support (rename .56 for Zx81 hires game that requires 48k or more)
    • I2C custom keyboard support!
    • HIRES support for zx81
    • zx80 support
    • YM sound support for zx81
  • 800 (Atari 400/800/XE/XL):
    • .rom support (no floppy yet)
    • I2C custom keyboard support!
    • Full speed with sound
  • Castaway (AtariST):
    • floppy support
    • I2C custom keyboard support!
    • with sound
    • full speed on Teensy4.0 only!!
  • 8086 (XT PC):
    • HDD image support
    • I2C custom keyboard support!
    • no sound
    • full speed on Teensy4.0 only!!
  • Vectrex (MB Vectrex):
    • .gam roms support
    • no sound
    • full speed on Teensy4.0 only!!

Running

  • ESP32 only: Select the emulator from the app selector screen and press FIRE (wait a bit that the SD get mounted)
  • For the launched emulator you should see the roms of the SD card being listed
  • you can select the rom with up/down
  • you can start the game by pressing the FIRE key
  • while the game is running, you might have to press USER1 or USER2 keys to start the game
  • some emulators requires the I2Ckeyboard
  • You can then play the game with the analog joystick and the FIRE/USER1 keys
  • press the USER1+USER2 to reboot the emulator and load another ROM
  • USER2 can be used to swap joystick 1/2 in some emulators

Credits

I mostly ported the emulators from existing projects, all the credit goes to the authors of colem, o2em , x2600, moarnes, mc-4u, sz81, atari800, Vice, Nofrendo, jun52, dcastaway, vectrexemu (sorry if I don't mention their name) and Mike Chambers for his 8086 Arduino project! Thanks a lot also to Frank Boesing for his ILI DMA library from which I started from and his great Teensy64 project https://github.com/FrankBoesing/Teensy64

You can’t perform that action at this time.