ZX ESPectrum IDF Versions Save

A ZX spectrum 48K, 128K and Pentagon 128 emulator running on the Espressif ESP32 SoC

v1.1

2 months ago

New features:

  • Several user-selectable ROMs have been added: 48k Spanish, 128k Spanish, +2 English and Spanish and ZX81+ IF2 ROM by Paul Farrow (thanks to Paul Farrow for giving permission).
  • .P file (ZX81) loading support integrated in the same snapshot loading dialog as SNA and Z80 files. 128K and Paul Farrow ROM is auto-selected and .P file loaded instantly.
  • Ability to choose the preferred architecture and ROM (including remembering the last one used). The emulator will start with the desired selection and will also use these preferences, appropriately, when loading .z80 files.
  • Added option to flash and use custom ROMs, one for 48k model and one for 128k model of 16 and 32kb size each one.
  • Expanded own snapshot space to 100 slots. In addition, the snapshots themselves will save (and load) info about the ROM used when it was taken, which allows you to also take snapshots of ZX81 games.
  • Added poke introduction dialog: CTRL-F9 or CS+SS+O on ZX keyboard.
  • Added shortcut to send NMI signal: CTRL + F10 or CS+SS+N on ZX keyboard.
  • Added tape player mode. If selected, ESPectrum will output only boosted EAR sound so you can use ESPectrum as .tap file player sending its audio to a real ZX Spectrum machine.
  • Added Rodolfo Guerra ROMs timing support to .tap loading routines: if you activate it and use some ROM from Rodolfo, ESPectrum will send .tap data at 4000bps speed (Thanks for the info about your great ROMs timings Rodolfo!).
  • Added "turbo" mode shortcut (CTRL + F2 or CS+SS+T on ZX keyboard). It makes ESPectrum run "without brake" and at the maximum possible speed. Audio is disabled and the stats OSD turns red when turbo mode is activated.

Changes:

  • Average emulator speed improved by 3.24%.
  • SRAM optimizations (about 6 kb saved).
  • Reduced interface click volume by about 66%.
  • Improved response time and accuracy of calculations in the CPU statistics OSD.
  • Stats OSD now can be cycled between tape loading (if there's some tape playing) and CPU stats using its keyboard shortcut.
  • It's no longer necessary to create the folders /.c and /.p on the SD card for screenshots and own snapshots respectively. The emulator will create them automatically if needed.
  • Help screen updated to reflect new shortcuts.
  • Updated About screen to thank new Patreons and contributors.

How to Flash:

[!NOTE] The current .bin file can be flashed in any of the three supported boards (Lilygo TTGO VGA32, Antonio Villena's ESPectrum board and Olimex ESP32-SBC-FabGL).

Flashing tutorial (in Spanish, auto translation supported)

https://youtu.be/fxzaKa-J6gk?si=uP7kxuqSSeoLM7vR

Windows:

Use Flash download tools from Espressif to flash it into your board:

Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

Once started:

Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

Finally:

Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!

Linux / Mac / Windows:

Use esptool.py from Espressif to flash it into your board:

esptool.py -p USB SERIAL DEVICE -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x0 ESPectrum1.1.bin

(Don't forget to change USB SERIAL DEVICE on -p parameter to reflect the serial port where your system has detected your board)

v1.0

4 months ago

New features:

  • Improved SD file system support:

    • Folder support with top status bar showing current folder.
    • Autoindexing of folders with process info through progress bars. No need of manual regeneration of folder indexes from now on.
    • 48 character long file names (plus 4 for extension).
    • Bigger snapshot and tape file open dialog.
    • Special ascii characters support: á,à,ä,â,é,è,ë,ê,í,ì,ï,î,ó,ò,ö,ô,ú,ù,ü,û,Ñ,ñ,Ç,ç,¿,¡,º and ª.
    • Positioning at item on file list starting with A-Z or a-z pressing corresponding letter on PS/2 or ZX Keyboard (SS + letter).
    • Case insensitive search option: press F3 on PS/2 keyboard or F, B on ZX Keyboard and input search text to realtime filter item list.
    • Status bar with total number of items and current item focused on folder.
    • Name autoscroll (keeping focus for more than two seconds) for items with name longer than dialog width.
  • New joystick system through ESPjoy DB9 to PS/2 converter (or DIY converter using ESPectrum joystick special scancodes):

    • Support of two up to 8 buttons joysticks.
    • Easy customization dialog: you can assign Spectrum keys, PS/2 special keys, Kempston actions or Fuller actions to any joystick input.

[!IMPORTANT] To be able to use new joystick system with ESPjoy, you have to use new firmware at: https://github.com/dacarsoft/DB9_2_Keyboard/tree/DB9_2_Keyboard_ESPectrum

  • Support of flashing new firmware through SD card: just put firmware file on SD root dir and select update option.

  • New interface elements (progress bars and confirmation dialogs).

  • Overwrite confirmation dialog added to snapshot save and SAVE command.

  • New screen centering system for CRT 15Khz 50hz modes: use CRTL F5-F8 or CS+SS Z,X,C,V in ZX Keyboard.

  • New hardware information dialog (CTRL-F1 or CS+SS+I on ZX kbd).

Changes:

  • Z80 Core: Add accurate emulation of WZ according to the latest discoveries as described in https://spectrumcomputing.co.uk/forums/viewtopic.php?t=10555 Thanks to @redcode !

  • Optimized video and port management routines (emulator is about 5% average faster than previous release).

  • PS/2 joystick emulation improved: added Sinclair and Fuller type joystick emulation.

  • Improved OSD: quicker response and more precise calcs.

  • 16:9 70hz (360x200) modeline adjusted to better comply with IBM 720x400 standard.

Bugfixes:

  • Solved rare sound mute bug after snapshot load.

How to Flash:

[!NOTE] The current .bin file can be flashed in any of the three supported boards (Lilygo TTGO VGA32, Antonio Villena's ESPectrum board and Olimex ESP32-SBC-FabGL).

Flashing tutorial (in Spanish, auto translation supported)

https://youtu.be/fxzaKa-J6gk?si=uP7kxuqSSeoLM7vR

Windows:

Use Flash download tools from Espressif to flash it into your board:

Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

Once started:

Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

Finally:

Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!

Linux / Mac / Windows:

Use esptool.py from Espressif to flash it into your board:

esptool.py -p USB SERIAL DEVICE -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x0 ESPectrum1.0rc3.bin

(Don't forget to change USB SERIAL DEVICE on -p parameter to reflect the serial port where your system has detected your board)

v1.0.rc3

6 months ago

New features:

  • New Spectrum model: Pentagon 128.
  • Betadisk emulation with read/write TRD & read only SCL support. Available in all Spectrum models.
  • Dual PS/2 keyboard support at both ports of Lilygo & Olimex board.
  • New option to tell emulator if there is a device connected to first PS/2 port on ESPectrum board or second PS/2 on Lilygo and Olimex board. This is useful to speed up boot process. Before this if you didn't have a device connected to the port, there was a delay while emulator tried to reset it.
  • New option to select if you want cursor keys act as Spectrum cursor keys or Joystick emulation. It can be selected in menu or switched using Scroll Lock key. Regardless of cursor keys mode selected, joystick emulation will be always available at keypad cursor keys.
  • Support for second fire button in Kempston emulation. It is binded to Slash key or Right Gui key.

Changes:

  • Boot speed optimizations: now emulator boots in less than two seconds.
  • Sna and z80 files load optimized.
  • Cursor joystick emulation now sends 5678 and 0 again.
  • Help screen now shows keys for ESPectrum board if emulator is running on it.
  • You can use CS+SS+P as pause on ZX Keyboard.
  • Pause message will not stay fixed on screen.

Bugfixes:

  • Solved some bugs in z80 load: wrong R register, writing in ROM pages and uncompressed block load in v2 y v3 not implemented. Now, many z80 that didn't work before now load perfectly.
  • Solved OSD bug after hard reset.

Known issues:

  • In rare cases, sound doesn't get initialized on emu start or gets corrupted or muted after sna, z80 or snapshot load. Restarting ESP32 (using F12 or powering off/on) solves it always.

How to Flash:

Windows:

Use Flash download tools from Espressif to flash it into your board:

Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

Once started:

Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

Finally:

Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!

Linux / Mac / Windows:

Use esptool.py from Espressif to flash it into your board:

esptool.py -p USB SERIAL DEVICE -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x0 ESPectrum1.0rc3.bin

(Don't forget to change USB SERIAL DEVICE on -p parameter to reflect the serial port where your system has detected your board)

v1.0.rc2

8 months ago

New features:

  • Fast TAP file load implemented and selectable through Options/Storage menu.

  • Ability to flash load or just insert tape from TAP file selector: use ENTER for flashload and SPACE for insert tape (ENTER and 0 in ZX keyboard).

  • New Tape Browser (F7) which allows to navigate the tape and (re)start loading from any point.

  • Tape status realtime OSD: if tape is loading OSD (F8) will change to reflect info about loading status.

  • SAVE command is now trapped: if you use the command, it will save a .tap file in the SD card with the name you put between quotes.

  • Emulation of "Early" and "Late" ULA timings. Now, with "Late timings" the "128k Spectrum Timing Test" works perfectly. (Thanks to @redcode AKA zJoyKiler for his help)

  • Spectrum 48K Issue 2 emulation is now selectable (Options/Other/48K Issue 2).

  • Detection of different supported boards in software. Now, there's only one binary for all supported boards: Lilygo TTGO VGA32, Antonio Villena's ESPectrum and ESP32-SBC FabGL from Olimex. (Thanks to David Carrion @dacarsoft for help with ESPectrum board)

Changes:

  • Video system and CPU cycle optimizations resulting in ~10.65% of emulation speed boost.

  • Changes to Z80 core to reflect block instructions behaviour as described in https://github.com/hoglet67/Z80Decoder/ ... nted-Flags (Thanks to José Luis Sánchez @jsanchezv for his help)

  • Added changes in HALT instruction emulation as described in https://github.com/jsanchezv/JSpeccy/co ... 0d1eb40cfd

  • Fixed screen bank switch timing. Now Patrik Rak's ptime.tap test works right. (We can also pass perfectly Weiv's ptime128.tap test, but it needs a more precise and slower drawing functions so we decided to leave faster drawing functions because it is a test not supported in most emulators and with no practical use. More info in https://softspectrum48.weebly.com/notes ... -challenge

  • The SPIFFS file system is no longer used. The SD card is the only storage option at this time and the settings are now stored in the NVS partition.

  • F7 key is no longer "Stop tape" and F6 key changes from "Play/Pause tape" to "Play/Stop tape".

  • F11 key is now a shortcut to "Hard reset" (CS + SS + Q in ZX keyboard).

  • BMP screen capture changes to CS + SS + S in ZX keyboard.

  • Reduced AY emulation RAM consumption in 6kb.

  • Improved Kempston joystick emulation for reading also port 0xDF. Joystick works now right in Nonamed and probably other games.

Known issues:

  • In rare cases, sound doesn't get initialized on emu start or gets corrupted or muted after sna, z80 or snapshot load. Restarting ESP32 (using F12 or powering off/on) solves it always.

How to Flash:

Windows:

Use Flash download tools from Espressif to flash it into your board:

Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

Once started:

Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

Finally:

Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!

Linux / Mac / Windows:

Use esptool.py from Espressif to flash it into your board:

esptool.py -p USB SERIAL DEVICE -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x0 ESPectrum1.0rc2.bin

(Don't forget to change USB SERIAL DEVICE on -p parameter to reflect the serial port where your system has detected your board)

v1.0.rc1.hotfix1

9 months ago

Bugfixes:

  • Fixed functions peek16 and poke16 to check if first and last byte of address are on different ram pages. This fixes problems detected on Cabal, 1k intros included in "Ahh... the tape loading era" and "Back to the gemba" demo speech samples.

How to Flash:

Windows:

Use Flash download tools from Espressif to flash it into your board:

Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

Once started:

Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

Finally:

Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!

Linux / Mac / Windows:

Use esptool.py from Espressif to flash it into your board:

esptool.py -p /dev/tty.usbserial-0001 -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x0 ESPectrum1.0rc1.bin

(Don't forget to change -p parameter to reflect the serial port where your system has detected your board)

v1.0.rc1

11 months ago

New features:

  • Support of real Spectrum 48k keyboard using Antonio Villena's new ESPectrum board. From now on, there will be two binaries: one for Lilygo VGA32 and similar boards and one for Villena's board.

  • Support for three video modes: VGA Standard (60 and 70hz), VGA 33-40k 50hz and CRT 15k 50hz modes. For VGA 50hz modes you only need a monitor that supports them. CRT 50hz mode is supported in ESPectrum board through Antonio Villena's VGA-Scart adapter (it also works in Lilygo board but a little hack, which we'll detail on ESPectrum website, is needed).

  • You can switch between modes using the following key combinations during emu boot sequence and check later current video mode on lower bar of Help screen:

    - 1 + Q -> VGA Standard 4:3 (60hz)
    - 1 + W -> VGA Standard 16:9 (70hz)
    - 2 + Q -> VGA 40khz 50hz 4:3
    - 2 + W -> VGA 33khz 50hz 16:9
    - 3 + Q -> CRT 15khz 50hz 4:3
    - 3 + W -> CRT 15khz 50hz 16:9
    
    (On PS/2 keyboards you should alternate between the two keys. On ZX Spectrum keyboard you can keep both keys pressed)
    

Changes:

  • More optimizations: improved emu speed.
  • Improved menu system: you can move forward and backward menu levels flawlessly.
  • Multicolor "ESPectrum" name on main menu.

Known issues:

  • In rare cases, sound doesn't get initialized on emu start or gets corrupted or muted after sna, z80 or snapshot load. Restarting ESP32 (using F12 or powering off/on) solves it always.

How to Flash:

Windows:

Use Flash download tools from Espressif to flash it into your board:

Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

Once started:

Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

Finally:

Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!

Linux / Mac / Windows:

Use esptool.py from Espressif to flash it into your board:

esptool.py -p /dev/tty.usbserial-0001 -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x0 ESPectrum1.0rc1.bin

(Don't forget to change -p parameter to reflect the serial port where your system has detected your board)

v1.0.beta.5.3

1 year ago

New features:

  • Added "Spectrum like" typematic rate delay and click sounds (48 and 128k versions) to menu and FKeys interactions.
  • Added Help Screen as suggested by azesmbog.

Changes:

  • Improved overall AY emulation quality and fixed AY chip detection (Now AY doesn't shows as YM) (Thanks Rampa!)
  • PS/2 keyboard revamped to meet Spectrum emulation standards: now both Shifts act as Spectrum Caps Shift and both Ctrls act as Spectrum Symbol Shift. The only "convenience" keys are now Backspace, comma and dot keys.
  • Cursor joystick emulation now generates Caps Shift+Cursor keys and 0 as fire.
  • Now, emu will not remember last snapshot loaded on restart. It will always boot to last used Spectrum ROM.

Bugfixes:

  • Fixed AY envelope emulation. The problem with sound in "The Addams Family", and probably other titles, is solved.

Known issues:

  • In rare cases, sound doesn't get initialized on emu start or after sna, z80 or snapshot load. Restarting ESP32 (using F12 or powering off/on) solves it always.

How to Flash:

  • Windows:

    Use Flash download tools from Espressif to flash it into your board:

    Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

    Once started:

    Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

    Finally:

    Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!

  • Linux / Mac / Windows:

    Use esptool.py from Espressif to flash it into your board:

    esptool.py -p /dev/tty.usbserial-0001 -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x0 ESPectrum1.0beta5.3.bin

    (Don't forget to change -p parameter to reflect the serial port where your system has detected your board)

v1.0.beta.5.2

1 year ago

Changes:

  • Updated pwm audio library to v1.1.1
  • Sound and video sync is perfect now. This results in totally clean audio output. No more clicks, artifacts or desync issues.
  • Better beeper emulation. Emulating EAR and MIC bits and output levels according to issue 2 ULA levels (Thanks zx81!)
  • Better AY emulation. AY audio buffer is now built during frame. This makes effects like voice in Robocop work like charm.
  • AY vs. Beeper output levels adjusted.

Bugfixes:

  • Sometimes, after emu start or after sna, z80 or snapshot load, sound isn't as clean as usual. This is fixed.

Known issues:

  • In rare cases, sound doesn't get initialized on emu start or after sna, z80 or snapshot load. Restarting ESP32 (using F12 or powering off/on) solves it always.

How to Flash:

Use Flash download tools from Espressif to flash it into your board:

Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

Once started:

Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

Finally:

Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!

v1.0.beta.5.1

1 year ago

Bugfixes:

  • AY envelope type register management was incorrect. It is now corrected and everything sounds ok.

How to Flash:

Use Flash download tools from Espressif to flash it into your board:

Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

Once started:

Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

Finally:

Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!

v1.0.beta.5

1 year ago

New features:

  • AY-3-8912 emulation complete!

Changes:

  • Sound quality improved a lot through better comprension and use of pwm_audio lib.
  • Improved border management in Ports::output. It solves a glitch in Escher2 48K and ULA128 Timing test which where driving me crazy ;D
  • More optimizations: emu is a little bit faster.
  • Optimized RAM memory consumption. Emu should be more stable now and now there's more RAM free for future improvements :)

Bugfixes:

  • Corrected a bug in delay calcs which produced hangs after more than about 1,19 hours with a menu opened.

How to Flash:

Use Flash download tools from Espressif to flash it into your board:

Open the ESP32 Flash Download Tool. Select "ESP32" as chipType. Select "Develop" as workMode.

Once started:

Select COM Port (whichever one your board has taken). Select Baud rate (460800 works fine for me).

Finally:

Load .bin file, set 0x0 as address, check it and press START. Wait until status panel shows "FINISH", power off and power on your board and ENJOY!