Mike Chambers
Well-known member
Hi all! This is something I did last year, but thought I'd finally share. I wrote a PC-based PC emulator some years ago, and later wanted to see how it worked on a microcontroller. So, I ripped the CPU core and a few other bits out, and got to work. I originally tried this with an Arduino Mega2560. It worked. Very, very slowly. Turns out AVRs don't make the best CPU emulators! Thanks to Paul for putting out these great little boards!
Like the title says, it's an 8086 (actually 80186) PC emulator based around a Teensy 3.6. It uses as much fast native RAM as it can, but then digs into SPI RAM to complete the 640 KB range you'd find in an old PC. It supports CGA graphics on an LCD screen and lets you plug in a PS2 keyboard. It uses raw access to an SD card as a hard disk.
It's no speed demon, but it runs well enough for MOST old programs you'd have come across in the 80's when overclocked to 240 MHz. Some other software is pretty painful, like Ultima 6. That was really aimed at 286+ anyway though. The main thing slowing it down is waiting for SPI communications with the RAM and LCD.
If anybody is interested in the code to create your own or hack it up a bit, I'll be sharing it probably tomorrow. I'll come back and edit the post. It's been a while since I wrote this, and want to make sure I remember all the different libraries used so I can link to them. I need to glance over the code again.
Here's a pic and some video. My soldering is terrible, and sorry for the shaky video.
Like the title says, it's an 8086 (actually 80186) PC emulator based around a Teensy 3.6. It uses as much fast native RAM as it can, but then digs into SPI RAM to complete the 640 KB range you'd find in an old PC. It supports CGA graphics on an LCD screen and lets you plug in a PS2 keyboard. It uses raw access to an SD card as a hard disk.
It's no speed demon, but it runs well enough for MOST old programs you'd have come across in the 80's when overclocked to 240 MHz. Some other software is pretty painful, like Ultima 6. That was really aimed at 286+ anyway though. The main thing slowing it down is waiting for SPI communications with the RAM and LCD.
If anybody is interested in the code to create your own or hack it up a bit, I'll be sharing it probably tomorrow. I'll come back and edit the post. It's been a while since I wrote this, and want to make sure I remember all the different libraries used so I can link to them. I need to glance over the code again.
Here's a pic and some video. My soldering is terrible, and sorry for the shaky video.