ESP32 Retro Computer


Project overview
This project is a compact, self-contained ESP32-based retro computer. It recreates a classic PC-like experience—VGA monitor, PS/2 keyboard and mouse, removable storage, and a speaker—without using an actual x86 processor.
The ESP32 runs firmware that emulates or implements the computer environment while directly generating video, processing legacy peripherals, reading storage, and producing audio.

Diagram


"USB-C power and USB data" "ESD protection" "CH340C USB-to-UART" "5 V power path" "AMS1117 3.3 V regulator" "ESP32-WROVER-E" "VGA RGB and sync output" "PS/2 keyboard" "BSS138 level shifting" "PS/2 mouse" "microSD storage" "NS4150B Class-D amplifier" "Onboard speaker" "Boot, reset and mute controls"
1. Purpose and functionality
The board combines the peripherals needed for a small retro-style computer:
  • VGA video output
  • PS/2 keyboard and mouse inputs
  • microSD program and data storage
  • Onboard audio amplifier and speaker
  • USB-C power
  • USB-to-serial programming and debugging
  • Boot, reset, mute, and power controls
  • Wi-Fi and Bluetooth through the ESP32 module
Typical firmware could implement a BASIC computer, terminal, game console, DOS-style emulator, educational computer, or network-connected retro workstation.
Despite the project name, it is not electrically an x86 PC. Any x86 compatibility would come from software emulation, which carries a substantial performance cost.
2. Core processing platform
The central component is an ESP32-WROVER-E-N16R8 module. This version provides:
  • Dual-core ESP32 processor
  • 16 MB flash
  • 8 MB PSRAM
  • Integrated Wi-Fi and Bluetooth
  • Hardware peripherals including SPI, UART, DAC, timers, and GPIO
  • A pre-certified RF module with an integrated antenna
The extra PSRAM is important for video frame buffers, emulation state, audio buffering, and filesystem caching. Using a module instead of a bare ESP32 simplifies RF design and manufacturing, though it costs more and occupies more board area.
The ESP32’s GPIO allocation is relatively dense:
  • GPIO 4, 5, 18, 19, 21, and 22 contribute to VGA color generation.
  • GPIO 23 and 15 generate horizontal and vertical synchronization.
  • GPIO 25 supplies analog audio.
  • GPIO 12–14 and 35 support microSD communication.
  • GPIO 26, 27, 32, and 33 handle PS/2 mouse and keyboard interfaces.
  • UART0 connects to the USB programming interface.
That achieves a broad peripheral set without an FPGA, but leaves limited GPIO capacity for expansion.
3. Power and USB implementation USB-C input
The USB-C connector is used as a USB 2.0 device port and as the 5 V power input.
Two 5.1 kΩ CC resistors identify the board as a USB-C power sink. This is a fixed 5 V implementation; there is no USB Power Delivery controller.
The USB data lines pass through a Würth USB protection device before reaching the CH340C. This provides ESD protection for a user-accessible connector.
Power distribution
The main path is:
  1. USB-C VBUS
  2. Slide power switch
  3. Switched 5 V rail
  4. AMS1117-3.3 linear regulator
  5. 3.3 V logic rail
The 5 V rail also powers the PS/2 connectors and audio stage. Ferrite beads and local capacitors create cleaner local supplies, particularly around the audio and storage circuitry.
A power indicator LED provides immediate power-state feedback.
Power trade-off
The AMS1117 is inexpensive and simple, but inefficient:
PD=(5.0−3.3)×IP_D = (5.0-3.3)\times I
At 400 mA, it dissipates approximately 0.68 W. ESP32 radio activity, VGA generation, SD access, and peripherals can produce high and bursty current consumption, so regulator temperature and transient response are important concerns.
A modern switching regulator would reduce heat and give the design more current margin.
4. Programming and boot control
A CH340C USB-to-UART bridge connects USB D+/D− to the ESP32’s UART0.
Its modem-control outputs drive two BSS138 MOSFETs connected to ESP32 EN and GPIO0. This implements the familiar ESP32 automatic programming sequence:
  • EN resets the processor.
  • GPIO0 selects the serial bootloader when held low during reset.
  • DTR and RTS allow the host programming utility to perform this sequence automatically.
Manual RESET and BOOT buttons are also included. Test points expose:
  • 3.3 V
  • Ground
  • TX
  • RX
  • EN
  • GPIO0
These are valuable for manufacturing test, recovery, and debugging if USB programming fails.
5. VGA video generation
The board provides a conventional 15-pin VGA connector. The ESP32 directly generates:
  • Red
  • Green
  • Blue
  • Horizontal synchronization
  • Vertical synchronization
Multiple GPIO outputs feed resistor networks to produce several analog levels per color channel. The resistor values include 270 Ω, 430 Ω, and 820 Ω, forming a low-cost GPIO DAC.
This is a well-established ESP32 VGA technique. It avoids a video controller or FPGA, but has several trade-offs:
  • Video timing consumes significant processor and DMA resources.
  • Available color depth is limited by the number of GPIO bits.
  • Output accuracy depends on resistor tolerances and the VGA load.
  • Higher resolutions sharply reduce CPU time available for emulation.
  • Simultaneous Wi-Fi activity may introduce timing pressure or visible artifacts if firmware is not carefully designed.
Practical modes are likely to favor retro resolutions and modest color depth rather than modern desktop resolutions.
6. PS/2 keyboard and mouse
Two mini-DIN connectors provide separate PS/2 keyboard and mouse ports.
PS/2 devices run from 5 V, while the ESP32 uses 3.3 V logic. Four BSS138 MOSFET stages perform bidirectional level translation for:
  • Keyboard data
  • Keyboard clock
  • Mouse data
  • Mouse clock
Pull-up resistors on both sides support the open-collector behavior of PS/2 signaling.
This is a sensible and inexpensive implementation. It also fits PS/2 particularly well because PS/2 lines are bidirectional and normally released high.
Potential challenges include:
  • Hot-plug transients
  • Cable-borne ESD
  • Marginal pull-up timing with long cables
  • Variations among modern USB-to-PS/2 adapters, many of which are passive and require a truly dual-protocol keyboard or mouse
7. microSD storage
The push-push microSD socket connects to the ESP32 using an SPI-style interface:
  • Clock
  • Command/MOSI
  • Data/MISO
  • Chip select
  • Card-detection circuitry
Series 0 Ω resistors provide routing flexibility and convenient tuning or isolation points. ESD diodes protect exposed SD signals. A dedicated filtered 3.3 V rail and local bypass capacitors help contain SD-card current spikes and digital noise.
SPI mode uses fewer signals and is easier to implement than full four-bit SD mode, but has lower peak throughput. It should still be sufficient for ROM images, configuration files, retro software, and moderate audio streaming.
SD access must be coordinated with VGA and audio DMA activity to prevent frame or audio underruns.
8. Audio path
ESP32 GPIO25—one of the ESP32’s DAC-capable pins—provides the audio source.
The signal passes through input conditioning to an NS4150B Class-D amplifier, followed by ferrite filtering and an onboard FS-1540 speaker. The amplifier supports a hardware mute/control input and operates from the local 5 V audio supply.
The differential Class-D output improves efficiency and produces more speaker power than direct GPIO drive.
Important implications:
  • Neither speaker terminal should be treated as ground.
  • Class-D switching currents require short output paths and careful return-current control.
  • Audio quality is limited by the ESP32’s internal DAC, supply noise, and firmware sample rate.
  • VGA, SD, radio, and audio operation can interact through power and timing.
A physical mute switch provides a simple way to silence output without depending entirely on firmware.
9. PCB and mechanical design
The PCB is approximately 72 × 100 mm and uses four copper layers. It contains:
  • 102 physical components
  • 61 nets
  • 636 routed trace segments
  • 500 conventional vias
  • 69 smart vias
  • Four M2 mounting holes
All electrical connections are routed—there are currently zero airwires. Components are mostly placed on the top side, with test points on the bottom. Large connectors are distributed around the edges for enclosure access.
The project also contains three mechanical bodies:
  • Enclosure base
  • Enclosure lid
  • Power-indicator window
A four-layer stackup is a strong choice here because it supports cleaner ground references, improves VGA and USB return paths, reduces EMI, and makes routing this connector-heavy board practical.
The board is moderately dense by component area. Although routing is complete, routing-aware spacing is tight enough that future revisions may benefit from a slightly larger board or more deliberate use of the bottom side.
10. Key design choices and trade-offs ESP32 instead of FPGA or application processor
Advantages
  • Low component cost
  • Integrated wireless connectivity
  • Large software ecosystem
  • Straightforward programming
  • Enough performance for retro video and lightweight emulation
Trade-offs
  • Video generation consumes processor resources.
  • Accurate x86 emulation is limited.
  • Memory bandwidth is shared between application, video, storage, and networking.
  • Peripheral timing becomes firmware-sensitive.
Resistor DAC instead of a dedicated VGA converter
Advantages
  • Very low cost
  • Minimal circuitry
  • Direct control from firmware
Trade-offs
  • Limited color depth and analog precision
  • Heavy GPIO usage
  • Resolution and timing limitations
Linear regulator instead of a buck converter
Advantages
  • Cheap and simple
  • Low component count
  • Low switching noise
Trade-offs
  • Heat generation
  • Lower efficiency
  • Reduced current margin
PS/2 instead of USB host peripherals
Advantages
  • Simple protocol
  • Low firmware overhead
  • No USB host stack or 5 V host-power switching
Trade-offs
  • Legacy peripherals are becoming less common.
  • Passive USB adapters are not universally compatible.
  • Mini-DIN connectors consume substantial board and enclosure area.
11. Performance considerations
The most important system constraint is not raw CPU frequency alone—it is contention among real-time workloads.
The ESP32 may need to perform all of these concurrently:
  • Generate exact VGA timing
  • Execute the emulated or native application
  • Read the keyboard and mouse
  • Stream or synthesize audio
  • Access the SD card
  • Handle USB serial communication
  • Service Wi-Fi or Bluetooth
VGA timing and audio should therefore use DMA, hardware timers, and interrupt-minimal buffering wherever possible. PSRAM helps capacity, but internal SRAM is preferable for latency-sensitive DMA buffers.
Likely optimization strategies include:
  • Pinning time-critical video tasks to one core
  • Running emulation and storage on the other core
  • Double-buffering audio and selected video data
  • Using direct-to-screen or scanline rendering instead of a full high-resolution framebuffer
  • Batching SD reads
  • Disabling or reducing radio activity during timing-critical modes
  • Keeping interrupt handlers short
  • Using fixed-point arithmetic in emulation and audio paths
12. Current design concerns
The project checks identify several items that should be reviewed before manufacturing:
  • Some edge-mounted connectors report placement warnings, including USB-C, VGA, and the power switch.
  • Keyboard, mouse, and control-switch bodies extend beyond the nominal board boundary; some of this may be intentional mechanical overhang.
  • A logo object overlaps the BOOT switch region.
  • Several deliberately unused pins are reported as floating and should be explicitly marked no-connect.
  • The microSD DAT1, DAT2, and separate card-detect pin are unused.
  • USB-C SBU pins and unused ESP32 inputs are floating, which is normally acceptable but should be documented.
  • The routed board contains 43 redundant trace candidates. These are not airwires, but they should be cleaned and rechecked before fabrication.
  • The very high via count increases routing complexity and can slightly increase fabrication risk and cost.
  • Connector alignment should be checked against the enclosure, particularly VGA, USB-C, PS/2, slide switch, and pushbuttons.
13. Real-world applications
This architecture is suitable for:
  • A standalone BASIC computer
  • Retro game and home-computer emulation
  • A serial or network terminal
  • Educational computer architecture demonstrations
  • A programmable classroom computer
  • A lightweight text workstation
  • Digital signage with VGA output
  • Interactive museum or arcade exhibits
  • A self-contained embedded diagnostics terminal
  • A Wi-Fi-connected retro dashboard
14. Recommended improvements Highest priority
  1. Replace the AMS1117 with a higher-efficiency buck regulator rated for ESP32 peak currents.
  2. Clean redundant traces and resolve genuine placement/edge warnings.
  3. Validate the complete board against the enclosure and connector openings.
  4. Explicitly mark intentionally unused pins as no-connect.
  5. Perform worst-case power and thermal testing with VGA, speaker, SD, and Wi-Fi active simultaneously.
Signal and reliability improvements
  • Confirm USB D+/D− routing geometry and protection-device placement.
  • Add or verify PS/2 connector ESD protection.
  • Verify the ESP32 antenna keepout includes copper, components, fasteners, and enclosure material.
  • Review VGA resistor values against a 75 Ω monitor termination.
  • Validate SD signal integrity at the maximum firmware clock.
  • Minimize Class-D amplifier loops and keep them away from VGA and antenna areas.
  • Consider a resettable fuse or current-limited load switch on USB VBUS.
Functional enhancements
  • Add external stereo audio or a headphone output.
  • Use an I²S DAC for improved sound quality.
  • Add USB host support for modern keyboards and mice.
  • Add expansion headers for GPIO, I²C, or SPI.
  • Provide external power input if speaker volume or peripherals exceed normal USB power.
  • Add an RTC and backup supply.
  • Add hardware battery-backed settings or nonvolatile configuration storage.
  • Support HDMI through an external bridge in a future high-end revision.
  • Use an ESP32-S3 or a small FPGA if higher-resolution video, USB host, or more deterministic timing is required.
Overall, the project is an ambitious but coherent ESP32 computer platform. Its strongest design feature is the integration of all classic-PC-facing functions onto one compact four-layer board. Its main engineering risks are power dissipation, real-time firmware contention, mechanical connector alignment, and cleanup of the remaining PCB review findings.

Software & Tools
Everything you need to flash, run, and manage the ESP32 x86 PC Emulator, organized by purpose and operating system. Electronics design tooling is not listed here — that's Flux.ai, where you're already reading this.
Required — for flashing the firmware
These are needed to compile and upload the firmware to the board.

Table


ToolPurposeDownload
Arduino IDECompiles and uploads the firmwarearduino.cc/en/software
Arduino-ESP32 core 2.0.17ESP32 board support (install via Boards Manager — see Flashing guide)github.com/espressif/arduino-esp32
FabGL libraryThe emulator core (install via Library Manager)github.com/fdivitto/FabGL
USB-UART driver (CH340C)
The board uses a CH340C USB-to-serial chip. Most modern systems detect it automatically, but if no port appears, install the official driver from WCH:

Table


OSDownload
Windowswch.cn/downloads/CH341SER_EXE.html
macOSwch.cn/downloads/CH341SER_MAC_ZIP.html
LinuxBuilt into the kernel — no download needed
Required — for the SD card
The board boots from a FAT32-formatted microSD card.

Table


OSToolNotes / Download
WindowsBuilt-in formatter, or SD Card FormatterFor cards larger than 32GB, use the official SD Memory Card Formatter to force a single FAT32 partition
macOSDisk UtilityBuilt in — choose MS-DOS (FAT)
Linuxmkfs.fatsudo mkfs.fat -F 32 /dev/sdX (part of dosfstools)
Optional — disk image editors (add your own software to .img files)
To copy DOS programs and games into an existing floppy or hard disk image, mount the .img file on your computer, drag files in, then copy the image back to the SD card.
Windows

Table


ToolBest forDownload
OSFMountMounting HDD .img files (with partitions) as a drive letter, read/writeosforensics.com/tools/mount-disk-images.html
WinImageFloppy .img files — inject/extract files, create blank imageswinimage.com
AIM ToolkitMounting all image types as drives (successor to ImDisk Toolkit)sourceforge.net/projects/aim-toolkit
macOS

Table


ToolBest forNotes
hdiutilMounting raw .img filesBuilt into macOS: hdiutil attach -imagekey diskimage-class=CRawDiskImage file.img
FUSE for macOS + fuse-fatRead/write FAT access to mounted imagesmacfuse.github.io
Linux

Table


ToolBest forNotes
mount (loop device)Mounting .img files directlyBuilt in: sudo mount -o loop,offset= file.img /mnt/point
mtoolsReading/writing FAT images without mountingmcopy -i file.img game.exe ::/ — part of the mtools package
GNOME DisksGraphical mounting and partition viewingUsually preinstalled on desktop distros
Where to get operating systems & software
All legal and free.

Table


SourceWhat's there
FabGL download libraryReady-to-use OS images (FreeDOS, MS-DOS, Windows 3.0, GEM, GEOS, CP/M-86, ELKS) — downloaded automatically on first boot
FreeDOSFree, open DOS — full OS plus bundled utilities and tools
SvarDOSLightweight free DOS distribution with an online package repository
Internet Archive — MS-DOS SoftwareThousands of preserved DOS games and applications
Internet Archive — MS-DOS GamesCurated classic game collection
A note on compatibility
This is an XT-class machine (8086/8088 CPU, CGA/Hercules graphics, 640KB RAM). Stick to 1981–1991 era software for the best results. Programs requiring a 286/386+ CPU, EGA/VGA graphics, or more than 640KB of memory will not run.
A good first install: Norton Commander — a dual-pane file manager that makes navigating DOS far easier than typing commands.
  • Required — for flashing the firmware

  • USB-UART driver (CH340C)

  • Required — for the SD card

  • Optional — disk image editors (add your own software to `.img` files)

  • Windows

  • macOS

  • Linux

  • Where to get operating systems & software

  • A note on compatibility