M.CU.M.E = Multi CompUter Machine Emulator esp32 , rpi pico, teensy
 
 
Go to file
jean-marcharvengt e40a4a32f2 add pictures 2019-08-21 16:49:51 +02:00
MCUME_esp32 extra sheets for ESP32 2019-08-21 11:52:26 +02:00
MCUME_teensy change default display to ILI 2019-08-21 16:42:06 +02:00
i2ckeyboard adding source code 2019-08-21 11:13:22 +02:00
images add pictures 2019-08-21 16:49:51 +02:00
README.md Update README.md 2019-08-21 16:30:49 +02:00
sd.zip adding source code 2019-08-21 11:13:22 +02:00

README.md

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

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 and 8086 Arduino projects! 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