Yet one of the most effective lifelines for 1980s and 1990s personal computers—including early IBM PCs running MS-DOS and Windows 3.0—is a microcontroller that costs less than a fast-food value meal. As highlighted in a recent feature by Andrew Heinzman at How-To Geek, the Espressif ESP32 microcontroller has become a cornerstone of vintage computer restoration and emulation. By combining dual-core processing, built-in Wi-Fi and Bluetooth, and flexible general-purpose input/output (GPIO) pins, the ESP32 is bridging the gap between obsolete hardware buses and modern digital infrastructure.
To understand what the ESP32 is actually doing for vintage computing, however, we have to separate three very different engineering approaches:
- Bridging legacy serial and peripheral ports to modern Wi-Fi networks.
- Emulating physical floppy and hard disk drives over original data buses.
- Emulating entire vintage PCs and consoles directly on the microcontroller's silicon.
The first two interventions keep original, aging machines alive and useful by replacing their most failure-prone mechanical and analog peripherals. The third approach abandons the original hardware altogether, preserving the software experience on cheap, modern silicon when the physical machines are too expensive, brittle, or bulky to maintain. Here is a closer look at the engineering behind all three methods, the exact projects leading the charge, and the practical hardware limits every tinkerer needs to know.
1. Bridging Legacy Buses and Serial Ports to Modern Wi-Fi
Classic computers from the 8-bit and 16-bit eras were designed long before IEEE 802.11 wireless networking existed, and their processors lack the memory and compute overhead required to handle modern TLS encryption or heavy HTML5 web pages. However, these machines are more than capable of handling lightweight networked data—provided something else translates the modern network layer into signals their vintage ports can understand.
Community developers have tackled this translation problem in two distinct ways: serial modem simulation and native peripheral-bus integration.
The Serial Modem Route: Zimodem and WiFiModem32
The most universal port on vintage computers—from early IBM PC compatibles to Commodore and Apple systems—is the RS-232 serial port (or platform-specific serial variants). Back in the day, connecting to the outside world meant plugging an external Hayes Smartmodem into that serial port and dialing into a Bulletin Board System (BBS) over copper telephone lines.
Today, hardware adapters like the WiFiModem32 and open-source firmware like Bo Zimmerman's Zimodem use an ESP32 (or its predecessor, the ESP8266) to sit between the vintage computer's serial port and a modern 2.4 GHz Wi-Fi router.
According to the official Zimodem project documentation, the firmware acts as a modem-to-internet simulator that speaks the classic Hayes "AT" command set. To the vintage computer and its original terminal software, the ESP32 looks, acts, and responds exactly like a physical dial-up modem:
- Authentic Command Handling: Users open their classic terminal program and type standard Hayes commands—such as
ATWto scan for wireless access points orATD"[HOSTNAME]:[PORT]"to "dial" a remote Telnet server or BBS over the internet instead of a phone line. - Protocol Support: Beyond raw Telnet and BBS connections (including automatic ASCII-to-PETSCII translation for Commodore machines via
ATDP), Zimodem includes built-in commands for Internet Relay Chat (AT+IRC), Point-to-Point Protocol (AT+PPP), network time synchronization via NTP (AT&T), and streaming files from HTTP, FTP, or Gopher servers (AT&G). - Network Printing: It can even redirect vintage print jobs to modern network printers using the
AT+PRINTcommand, sending ASCII, PETSCII, or raw data directly to a CUPS/IPP printer on the local network. - Timing Constraints: Because vintage serial buffers are tiny and older CPUs can easily be overwhelmed by modern data rates, Zimodem defaults to a classic 1200 baud rate (though it can be configured higher via
ATB) and even provides a register (ATS44) to inject millisecond delays after every byte written to the serial port for machines that cannot keep up with hardware or XON/XOFF flow control.
The Peripheral Bus Route: FujiNet and Expansion Cards
While serial modem emulators are great for terminal software, they are bottlenecked by serial port speeds and require software that expects a modem. A more deeply integrated approach attaches the ESP32 directly to a vintage computer's proprietary expansion slot or high-speed peripheral bus—such as the apple2idiot expansion card project for the Apple II or the multi-platform FujiNet project.
According to the FujiNet project documentation, FujiNet is an open-source hardware and firmware ecosystem built around the ESP32 that acts as a multifunction network adapter, virtual disk drive, and virtual printer. Rather than pretending to be a serial modem alone, FujiNet wires into the specific peripheral bus of the host computer:
- Atari 8-bit (400, 800, XL, XE, XEGS): Connects via the Atari SIO peripheral bus.
- Apple II (II, II+, IIe, IIc, IIgs) and Apple III: Connects via the SmartPort or Disk II bus.
- Commodore 8-bit (C64, C128, VIC-20): Plugs into the IEC serial bus.
- Coleco ADAM: Attaches to the AdamNet peripheral bus.
- Tandy Color Computer (CoCo 1, 2, 3): Connects via DriveWire or the bit-banger serial port.
Because FujiNet communicates over the system bus, its firmware can present an actual network device (N:) to the vintage operating system alongside a traditional Wi-Fi modem interface. On supported platforms like the Atari 8-bit line, programs can open direct TCP, UDP, and HTTP connections—allowing community-written software to stream data, fetch weather reports, play cross-platform multiplayer games, or load files over the internet without ever touching a dial-up terminal program.
Section Summary: Adding Wi-Fi via an ESP32 does not magically turn an 8-bit machine or a 286 PC into a modern web browser. Instead, projects like Zimodem and FujiNet translate modern 2.4 GHz WPA2 wireless networking and TCP/IP sockets into legacy serial streams or peripheral bus signals, allowing vintage machines to connect to Telnet BBS communities, Gopher servers, and custom network applications.
2. Emulating Physical Disk Drives and Obsolete Storage
If networking is a luxury for vintage computers, storage is an existential necessity. Physical 5.25-inch and 3.5-inch floppy disks suffer from magnetic degradation and binder breakdown (where the drive read head literally scrapes the magnetic coating off the Mylar platter). Meanwhile, early proprietary hard drives—like the stepper-motor units built for the Apple Lisa or early IBM XT/AT systems—are mechanical time bombs that are increasingly difficult and expensive to repair.
ESP32-based drive emulators solve this by substituting solid-state flash memory (typically a FAT32-formatted microSD card) or network-hosted disk images for spinning rust and magnetic film.
[Vintage Computer] <--- (Original Bus / Pin Signaling) ---> [ESP32 Drive Emulator]
|
+----------------------+----------------------+
| |
[Local microSD Card] [Remote TNFS Server]
(Read/Write Disk Images) (Read-Only Network Images)
How Bus-Level Storage Emulation Works
When an ESP32 acts as a drive emulator, the vintage computer has no idea it is talking to a microcontroller. As detailed in the FujiNet virtual disk drive documentation, the host computer sends standard sector read and write requests over its peripheral bus or drive ribbon connector exactly as it would to a physical floppy or hard drive. The ESP32 intercepts those electrical signals, locates the requested sector inside a disk image file, and sends the bytes back over the bus at the exact timing interval the vintage hardware expects.
For specialized, fragile hardware, dedicated ESP32 projects have emerged to replace nearly unobtainable drives. A prime example noted by How-To Geek is ESProFile, an open-source, ESP32-based hard drive emulator and diagnostic tool created for the Apple Lisa's proprietary ProFile and Widget parallel hard drives. While an Apple Lisa without a working ProFile drive is little more than a museum paperweight, an ESP32 board wired to emulate the ProFile protocol lets the machine boot directly from an SD card.
The FujiNet Storage Ecosystem
On broader consumer platforms, FujiNet's virtual disk implementation demonstrates just how versatile ESP32 storage emulation has become. Depending on the host computer, a single FujiNet unit can emulate multiple simultaneous disk drives—up to 8 drives (D1: through D8:) on Atari 8-bit machines, 4 drives on Apple II SmartPort or Tandy CoCo systems, and 3 drives (devices 8, 9, and 10) on Commodore 64 systems.
| Vintage Platform | FujiNet Connection Interface | Max Emulated Drives | Supported Disk / Tape Image Formats |
|---|---|---|---|
| Atari 8-bit | SIO Bus | 8 (D1:–D8:) | .ATR, .XFD, .ATX (copy-protected), .CAS, .COM/.XEX |
| Apple II / III | SmartPort / Disk II Bus | 4 (SmartPort) / 1–2 (Disk II) | .PO, .DO, .DSK, .2MG/.2IMG, .HDV |
| Commodore 64/128/VIC-20 | IEC Serial Bus | 3 (IDs 8, 9, 10) | .D64, .D71, .D81, .T64 |
| Coleco ADAM | AdamNet Bus | 4 (2 Tape + 2 Disk) | .ddp, .dsk |
| Tandy Color Computer | DriveWire / Serial | 4 | .DSK, .VHD |
Even more impressively, the disk images do not have to live on the local microSD card. FujiNet supports the Trivial Network File System (TNFS) protocol, allowing a vintage computer to mount and boot disk images hosted on remote internet servers in real time. To protect community archives from accidental corruption, network-mounted TNFS images are mounted as read-only, whereas images stored on the user's local microSD card can be mounted as full read-write volumes so users can save games, documents, and system configurations.
The Speed Myth: Why Solid-State Doesn't Mean Fast
One crucial technical caveat that often surprises newcomers is that replacing a mechanical floppy drive with an ESP32 and a fast microSD card does not give the vintage computer modern solid-state transfer speeds.
Whether an emulator connects via a standard 34-pin floppy ribbon, an Apple 19-pin DB-19 connector, or an Atari 13-pin SIO port, the bottleneck is not the flash media—it is the vintage computer's original bus architecture, I/O controller, and operating system timing routines. Because the ESP32 must faithfully mimic the electrical signaling and sector timing of the original drive to maintain software compatibility, data still trickles across the wire at historical floppy or early hard-disk speeds. The real victory here is reliability, convenience, and preservation: you get access to thousands of disk images without physical media swaps, and collectors can keep their original, irreplaceable floppy disks safely stored away from mechanical wear.
Section Summary: ESP32 storage emulators like FujiNet and ESProFile intercept native read/write requests and serve disk images from microSD cards or network servers. While transfer speeds remain locked to the limits of the vintage computer's original bus, drive emulation eliminates mechanical drive failures and magnetic media decay.
3. Emulating Entire Desktops—Including Early PCs and Windows 3.0
What if you don't own the original hardware, or don't have the desk space (or budget) to maintain a yellowing CRT monitor and a capacitor-leaking desktop tower? The third trend in the ESP32 community takes a radical shortcut: ditching the vintage hardware entirely and emulating the whole computer or console directly on the ESP32 module.
As Andrew Heinzman candidly points out, full-system emulation on a microcontroller doesn't technically "save" physical retro computers from failing, and purists might consider it a philosophical cop-out. However, from a Windows and PC history perspective, what developers have managed to squeeze into these tiny chips is an astonishing feat of low-level software engineering.
Running MS-DOS and Windows 3.0 on an ESP32 with FabGL
For WindowsForum readers, the standout project in this category is FabGL, an open-source ESP32 display controller, graphics library, and emulation engine created by Fabrizio Di Vittorio.
Using a development board equipped with an ESP32 module, external Pseudo-Static RAM (PSRAM), a microSD card slot, PS/2 keyboard and mouse ports, and a simple resistor-ladder DAC for VGA output (such as the TTGO VGA32 v1.4 or the Olimex ESP32-SBC-FabGL), FabGL can run a full Intel 8086-based IBM PC emulator.
According to the FabGL project documentation and PCEmulator.ino source code, this tiny bare-metal setup can boot and run:
- MS-DOS and FreeDOS
- Windows 3.0 (complete with GUI mouse support)
- CP/M-86
- Linux-ELK (Embeddable Linux Kernel Subset)
Furthermore, FabGL's PC emulator uses the ESP32's built-in Wi-Fi to synchronize the system clock via SNTP on startup and can automatically download pre-configured system boot disk images directly to the SD card over HTTP before rebooting into the emulated 8086 environment. Beyond the IBM PC, FabGL also includes example emulators for the Commodore VIC-20 and the Altair 8800.
The Harsh Reality of Microcontroller Memory Limits
Before you throw out your vintage 8086 box, it is important to understand the extreme resource constraints of running a full PC emulator on a microcontroller. An ESP32 is not a Raspberry Pi; it runs bare-metal firmware without a heavy host operating system, and every kilobyte of internal SRAM is precious.
In fact, FabGL's official GitHub repository carries a prominent warning that highlights the fragility of microcontroller emulation: FabGL cannot be compiled on the newest versions of the Espressif ESP32 Arduino library. Developers must downgrade their board manager to Espressif ESP32 library version 2.0.17 or earlier. Why? Because newer versions of Espressif's underlying SDK consume slightly more baseline internal memory, leaving too little free RAM for a massive application like FabGL to initialize and run. Even within the PCEmulator code itself, the developer has to disable the ESP32's hardware watchdogs, use the "Huge App" flash partition scheme, and manually initialize 2 MB of PSRAM at runtime just to prevent compiler cache-workaround slowdowns from crippling the emulated 8086 CPU.
The Next Generation: RetroESP32 and the RISC-V ESP32-P4
On the console and handheld gaming side of the retro scene, projects like RetroESP32—and unconventional form-factor builds like the e-paper Ink-Boy—have inspired a wave of DIY handhelds and pre-assembled boards sold across eBay, AliExpress, and Tindie.
Recently, the community has begun migrating toward Espressif's newer silicon, exemplified by the open-source RetroESP32-P4 project. Built for the ESP32-P4—a dual-core RISC-V microcontroller that still has no dedicated GPU and runs bare-metal without Linux—RetroESP32-P4 demonstrates how fast microcontroller emulation is evolving:
- 15 Emulated Systems: The platform covers 8-bit and 16-bit systems including the Atari 2600, 7800, Lynx, and 800XL/5200, Sinclair ZX, ColecoVision, NES, Game Boy/Color, Sega Master System/Game Gear, PC Engine, and heavier 16-bit consoles like the SNES, Sega Genesis/Mega Drive, and NeoGeo.
- Native PC-Era Ports from PSRAM: Because the P4 architecture can execute code effectively from PSRAM, the project also runs native bare-metal ports of classic 1990s PC titles including Doom, Quake, Duke Nukem 3D, and OpenTyrian.
- Dual Form Factors: A single firmware build supports either a 4.3-inch (480×800) touchscreen handheld module (such as the Guition ESP32-P4 board) or a living-room console setup using an Olimex LT8912 MIPI-DSI-to-HDMI bridge and auto-mapped USB gamepads.
Even on the newer ESP32-P4, developers have to use clever bare-metal tricks to survive without a GPU. According to the RetroESP32-P4 documentation, holding 60 frames per second on 16-bit systems like the SNES and Genesis requires hand-tuned assembly/core optimizations and a real-time frame pacer that keeps game logic and audio at full speed while occasionally dropping a handful of rendered frames under heavy load, while NeoGeo emulation relies on a custom sprite cache with batched bank prefetching.
Section Summary: Projects like FabGL and RetroESP32-P4 prove that an ESP32 can emulate an entire 8086 IBM PC running Windows 3.0 or a 16-bit console library. However, these bare-metal emulators operate on a razor's edge of memory and CPU constraints, often requiring specific board revisions, external PSRAM, and pinned legacy SDK versions (like Espressif library 2.0.17 for FabGL) to function.
Practical Guide: Choosing the Right ESP32 Path for Your Retro Setup
If you have a vintage computer on your workbench—or just an itch to revisit MS-DOS, Windows 3.0, or 8-bit classics—choosing the right ESP32 project comes down to what hardware you actually want to touch.
- If you have a working vintage PC or home computer with a serial port and want BBS/Telnet access:
Look for an ESP32 RS-232 serial adapter running Zimodem firmware (or a pre-made WiFiModem32). Make sure your adapter includes proper RS-232 voltage level shifting (such as a MAX3232 chip) before plugging it into a real vintage serial port; raw ESP32 GPIO pins operate at 3.3V logic and will be fried by standard ±12V RS-232 serial voltages. Keep your initial terminal baud rate at 1200 baud until you verify flow control (ATForAT&Kcommands) works reliably on your host system. - If you own an Atari 8-bit, Apple II, Commodore 64, Coleco ADAM, or Tandy CoCo and want to replace failing floppy drives and add networking at the same time:
Go straight to FujiNet. You will need the specific FujiNet hardware board built for your computer's peripheral port (SIO, SmartPort/Disk II, IEC, AdamNet, or DriveWire), a 2.4 GHz WPA2 Wi-Fi network, and a FAT32-formatted microSD card. Remember to copy disk images from read-only TNFS network servers onto your local SD card whenever you need read-write support for saving files or game progress. - If you want a tiny, silent desk toy that boots MS-DOS and Windows 3.0 on a VGA monitor:
Pick up a compatible ESP32 board with PSRAM, VGA output, and PS/2 ports (like the Olimex ESP32-SBC-FabGL or TTGO VGA32 v1.4) and flash the FabGLPCEmulatorsketch. If you are compiling the firmware yourself in the Arduino IDE, ensure you install Espressif ESP32 boards library version 2.0.17, select the Huge App partition scheme, and leave PSRAM disabled in the IDE tools menu so FabGL can manage PSRAM allocation manually at runtime.
The Bottom Line: A Ship of Theseus Built on $5 Silicon
Beyond retro computers, makers are using ESP32 variants like the ESP32-S3 to convert vintage wired controllers into Bluetooth gamepads via projects like BlueRetro and bt-gamepad, revive dead iPods, and add smart triggers to decades-old electronics.
It is easy to joke—as Heinzman does—that we are approaching a "Ship of Theseus" paradox where microcontroller boards eventually replace every individual subsystem inside an aging Atari, Amiga, or IBM PC. When an ESP32 is handling your disk controller, your network stack, your modem, and your keyboard/mouse translation, how much of the original machine is really left?
From an engineering standpoint, the answer is simple: the parts that matter most. By taking over the mechanical drives and obsolete analog communication layers that time has destroyed, the ESP32 allows original CPUs, custom video and sound chips, and classic operating systems to keep running on real hardware for another generation. And when that original silicon finally gives up the ghost, the same family of microcontrollers is already fast enough to carry the software torch forward in emulation.
References
- 3 clever ways the ESP32 is saving retro computers from extinction How-To Geek · 2026-10-17T12:30:16+00:00
- github.com github.com
- 5 ESP32 projects you can use to bring old hardware back to life this weekend (Sep 11 - 13) news.google.com