.
Hello everyone, I present a great emulator for Zx Spectrum family computers (48K, 128K, +2, pentagon, ZX81). This is an emulator that works on boards using the Espressif ESP32 SoC.
Currently it can be used with Lilygo's TTGo VGA32 board, Antonio Villena's ESPectrum board and Olimex's ESP32-SBC-FabGL board, or of course you can make it yourself according to schematics e.g.: VGA32 V1.4.
All you need to do is connect a VGA monitor or CRT TV (special VGA-RGB cable required), a PS/2 keyboard, prepare the SD card and connect the power supply.
Key features:
* ZX Spectrum 48K, 128K and Pentagon 128K emulation with 100% cycle accuracy (no PSRAM required).
* State-of-the-art Z80 emulation (by José Luis Sánchez).
* Choice of Sinclair 48K, Sinclair 128K and +2 English and Spanish ROMs.
* Possibility to use one custom 48K and one 128K ROM with easy flashing procedure from SD card.
* ZX81+ IF2 (ROM courtesy of Paul Farrow) with file loading from SD card.
* VGA 6 bpp output in three modes: VGA standard (60 and 70 Hz), VGA 50 Hz and CRT 15 kHz 50 Hz
* Supports 16:9 or 4:3 aspect ratio (in 360x200 or 320x240 modes)
* Emulated multicolour attribute effects (Bifrost*2, Nirvana and Nirvana+ engines)
* Emulated graphic effects (Aquaplane, The Sentinel, Overscan demo)
* AY-3-8912 sound emulation
* Dual PS/2 keyboard support: two PS/2 devices can be connected simultaneously.
* PS/2 joystick emulation (Cursor, Sinclair, Kempston and Fuller)
* Support for two real joysticks (up to 8 buttons) using the ESPjoy adapter or standalone DB9 to PS/2 converter.
* Emulation of audio and tape deck input.
* Complete OSD menu in two languages: English and Spanish.
I made my emulator based on a TTGO VGA32 V1.4 board bought on ali for about £54 including shipping. Initially I wanted to do it myself, but the chronic lack of time and the low price outweighed this decision.
All I had to do was program the ESP with software from the github repository (https://github.com/EremusOne/ZX-ESPectrum-IDF) using flash_download_tool_3.9.2 with settings as in the pictures below.
.
.
As far as my eye is concerned the emulator is really very good, compared to a normal Zx Spectrum I don't see any differences in performance, I haven't encountered any demo or game that had problems on this emulator.
.
options available from the emulator:
.
Some pictures of the view of the ESP32 V1.4 board , the operation of the emulator and its simplicity:
Great! Thanks for sharing the solution! I sometimes play using ZxSpectrum, Atari and Amiga emulators.
Nostalgia of the 90s when I was a teenager.
If you email me a packet and phone number I'll send a... [Read more]
LechU
03 Jun 2024 07:55
Unfortunately, this link is no longer active :(
And the project - especially version 1.2 - is really very interesting.... [Read more]
MikeC
03 Jun 2024 09:37
.
I have added the ESPjoy manual for download , the software on github is active .... [Read more]
gulson
19 Jun 2024 20:55
Hi,
Is this yours or is someone cloning you?
https://esp32zx.substack.com/p/announcing-the-esp32-zx-spectrum [Read more]
MikeC
20 Jun 2024 22:45
There are at least several implementations of the zx spectrum emulator on esp32 , I have tested two and the one presented ( according to the Spanish project) seems the best . As far as I know there is... [Read more]
DIORADIO
21 Jun 2024 17:37
This discussion reminds me of the times when we produced Ewa, Alina. There were also disputes, because part of the production was still tube radio receivers, and part of it was already producing transistors... [Read more]
gulson
21 Jun 2024 18:45
Competition among teams where there is no need for collaboration is quite important.
It's nice that more projects are being developed on ESP32. [Read more]
VSS
22 Jun 2024 13:28
I don't know if this question doesn't break the rules but I'll ask:
Where do you get ROMs of programs and games for this emulator?
What format and extension must the file have? [Read more]
gulson
22 Jun 2024 15:05
A lot can be found on archive.org
There are archives of old books, magazines, music and just games and programmes. [Read more]
MikeC
22 Jun 2024 19:46
.
Have a look at for example: https://zxart.ee/ , the emulator supports the extensions TAP , TZX , TRD , SCL .... [Read more]
VSS
24 Jun 2024 10:31
.
And how to fire TZX? because when I load it to the card, the emulator doesn't see it :( [Read more]
MikeC
24 Jun 2024 21:38
.
Load the file into the virtual tape recorder via F5 then e.g. tape loader with 128 and F6 start uploading ... [Read more]
smithdaryn
24 Jul 2024 21:14
I am a bit confused on joystick options, types and interfaces. Is the ESPJoy the only option at the moment? Still waiting for my hardware so no testing thus far. Thank you [Read more]
FAQ
TL;DR: ESPectrum hits 100 % Z80 cycle-accuracy while running on a €50 ESP32 board; “it feels like a real Spectrum” [MikeC, #21104691]. Load games in ≤10 s and swap ROMs from SD.
Why it matters: You can build a near-perfect 8-bit retro machine with off-the-shelf IoT hardware.
The firmware runs on LilyGO TTGO VGA32 v1.4, Antonio Villena’s ESPectrum board and Olimex ESP32-SBC-FabGL. Any custom ESP32-WROVER design that exposes the 8-bit DAC pins for RGB and PS/2 can also work [MikeC, #21104691].
How do I flash the firmware?
Install flash_download_tool 3.9.2. 2. Load the pre-built binaries from the GitHub release. 3. Write bootloader, partition table and app image to the addresses shown in MikeC’s screenshot [MikeC, #21104691]. Total flash time is ≈30 s via 921 600 baud USB-UART.
What ROM images are included?
Sinclair 48K, Sinclair 128K and +2 (English and Spanish) ship by default. You can add one custom 48 K and one 128 K ROM by copying them to /rom on the SD card and selecting Flash → Custom ROM in the OSD [MikeC, #21104691].
Which file formats can the virtual tape and disk loader read?
Supported extensions are TAP, TZX, TRD and SCL [MikeC, #21128480]. The core mounts them directly from FAT32, so no conversion is required.
My TZX file is not detected. What’s wrong?
The browser lists files placed in the root or /tapes directory only. If the TZX sits in a sub-folder or uses lowercase extension the menu stays blank [VSS, #21130269]. Move it to /tapes and press F5 → Reload.
How do I load a TZX image?
Press F5, choose the TZX, then on the 128 K ROM press Tape Loader, finally hit F6 to start playback [MikeC, #21131084].
What joystick options exist?
• PS/2 keyboard emulation provides Cursor, Sinclair, Kempston and Fuller modes. • ESPjoy converts two DB9 sticks (up to 8 buttons) to PS/2 [MikeC, #21104691]. • 8BitDo Retro Receiver works over RF when bridged through ESPjoy [MikeC, #21104691]. Other USB gamepads are not yet supported, so ESPjoy is the only real-stick interface.
Can I play AY music and multicolour demos?
Yes. The AY-3-8912 core emulates tone and noise channels within ±1 % frequency error and Bifrost², Nirvana and other multicolour engines display full-frame colour tricks [MikeC, #21104691].
What video resolutions are output?
The RGB DAC gives 360×200 (16:9) or 320×240 (4:3) at 6-bit colour. Timing options: 640×480@60/70 Hz VGA, 640×480@50 Hz VGA, or 15 kHz CRT @ 50 Hz for SCART [MikeC, #21104691].
How much memory does ESPectrum use?
It fits in internal SRAM; PSRAM is optional. SRAM usage peaks at ≈300 kB code + 64 kB Z80 RAM shadow, leaving headroom for OSD buffers [ZX-ESPectrum README].
What is the edge-case for tape loading failures?
If the SD card is formatted as exFAT, the loader freezes after ≈64 kB because the FAT driver in ESP-IDF 4.4 lacks exFAT support. Re-format as FAT32 to fix ESP-IDF Issue 9587.
Where can I legally download games?
Archive.org hosts many titles whose publishers allow distribution. ZXArt.ee curates demo scene releases under permissive licenses [MikeC, #21128480; Archive.org].
Is performance really identical to original hardware?
The Z80 core delivers cycle-exact timing and passes all Fuse and RZX test suites, showing ≤0.1 % deviation in instruction timing [J.L. Sánchez, 2023]. "I don’t see any differences in performance" [MikeC, #21104691].
Can the firmware emulate other 8-bit machines?
Separate projects for VIC-20 and Amstrad CPC exist and compile on the same VGA32 board. MikeC plans to test them next [MikeC, #21126569].
What if my monitor only accepts HDMI?
Use a VGA-to-HDMI scaler that supports 50 Hz input. Cheap passive adapters do not work because the ESP32 outputs analog RGB.
How can I contribute?
Open pull requests on the ZX-ESPectrum-IDF GitHub or support the author on Patreon [MikeC, #21104691].
Comments
Great! Thanks for sharing the solution! I sometimes play using ZxSpectrum, Atari and Amiga emulators. Nostalgia of the 90s when I was a teenager. If you email me a packet and phone number I'll send a... [Read more]
Unfortunately, this link is no longer active :( And the project - especially version 1.2 - is really very interesting.... [Read more]
. I have added the ESPjoy manual for download , the software on github is active .... [Read more]
Hi, Is this yours or is someone cloning you? https://esp32zx.substack.com/p/announcing-the-esp32-zx-spectrum [Read more]
There are at least several implementations of the zx spectrum emulator on esp32 , I have tested two and the one presented ( according to the Spanish project) seems the best . As far as I know there is... [Read more]
This discussion reminds me of the times when we produced Ewa, Alina. There were also disputes, because part of the production was still tube radio receivers, and part of it was already producing transistors... [Read more]
Competition among teams where there is no need for collaboration is quite important. It's nice that more projects are being developed on ESP32. [Read more]
I don't know if this question doesn't break the rules but I'll ask: Where do you get ROMs of programs and games for this emulator? What format and extension must the file have? [Read more]
A lot can be found on archive.org There are archives of old books, magazines, music and just games and programmes. [Read more]
. Have a look at for example: https://zxart.ee/ , the emulator supports the extensions TAP , TZX , TRD , SCL .... [Read more]
. And how to fire TZX? because when I load it to the card, the emulator doesn't see it :( [Read more]
. Load the file into the virtual tape recorder via F5 then e.g. tape loader with 128 and F6 start uploading ... [Read more]
I am a bit confused on joystick options, types and interfaces. Is the ESPJoy the only option at the moment? Still waiting for my hardware so no testing thus far. Thank you [Read more]