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
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 implementationUSB-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:
USB-C VBUS
Slide power switch
Switched 5 V rail
AMS1117-3.3 linear regulator
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)×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-offsESP32 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 improvementsHighest priority
Replace the AMS1117 with a higher-efficiency buck regulator rated for ESP32 peak currents.
Clean redundant traces and resolve genuine placement/edge warnings.
Validate the complete board against the enclosure and connector openings.
Explicitly mark intentionally unused pins as no-connect.
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.
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.
The board boots from a FAT32-formatted microSD card.
Table
OS
Tool
Notes / Download
Windows
Built-in formatter, or SD Card Formatter
For cards larger than 32GB, use the official SD Memory Card Formatter to force a single FAT32 partition
macOS
Disk Utility
Built in — choose MS-DOS (FAT)
Linux
mkfs.fat
sudo 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
Tool
Best for
Download
OSFMount
Mounting HDD .img files (with partitions) as a drive letter, read/write
Built in: sudo mount -o loop,offset= file.img /mnt/point
mtools
Reading/writing FAT images without mounting
mcopy -i file.img game.exe ::/ — part of the mtools package
GNOME Disks
Graphical mounting and partition viewing
Usually preinstalled on desktop distros
Where to get operating systems & software
All legal and free.
Table
Source
What's there
FabGL download library
Ready-to-use OS images (FreeDOS, MS-DOS, Windows 3.0, GEM, GEOS, CP/M-86, ELKS) — downloaded automatically on first boot
FreeDOS
Free, open DOS — full OS plus bundled utilities and tools
SvarDOS
Lightweight free DOS distribution with an online package repository
Internet Archive — MS-DOS Software
Thousands of preserved DOS games and applications
Internet Archive — MS-DOS Games
Curated 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)