zxwarp – ZX Spectrum emulator
A ZX Spectrum web emulator using Matt Westcott's superb JSSpeccy 3 engine, with a UI look & feel inspired by Jan Bobrowski’s excellent Qaop/JS, please show your support for that at https://torinak.com/qaop/donate.
zxwarp adds:
- Tipshop pokes, auto-matched — when a game is loaded then available pokes fuzzy-matched from all-tipshop-pokes can be enabled in the control panel.
- DualShock 4 / USB gamepad — plug in a PS4 pad (or any standard Gamepad API controller); map to Cursor, Sinclair, or QAOP + Space.
- Realtime zoomable memory map — scroll to zoom, drag to pan, hover for address / byte.
Keys
| Esc / click screen | Menu panels |
|---|---|
| Del | Restart current game |
| F1 | About |
| F2 | Remember state |
| F3 | Recall state |
| Pause | Pause |
| Insert | Games page |
| Ctrl+O | Open file (when paused) |
| Ctrl+S | Save state (when paused) |
| Host keys | Passed through to the Spectrum by JSSpeccy (Shift ≈ Caps Shift, etc.) |
URL parameters
Append a hash to the run page. Parameters may be concatenated.
#l=URL | Load a program (TAP, TZX, Z80, SNA, SZX, ZIP) |
|---|---|
#g=slug | Select a catalog game (from the library list) |
#48 | Spectrum 48K |
#128 | Spectrum 128K |
#pentagon | Pentagon 128 |
#autoload | Auto-load tapes (default on) |
#!autoload | Disable auto-load tapes |
#instant | Instant tape loading via ROM traps (default on) |
#!instant | Disable instant loading (real-time tape) |
#usr0 | Use usr0 tape auto-load mode (128K / Pentagon) |
#sandbox | Hide open-file affordances (showcase mode) |
#panels | Start with side panels open (bare root opens them; game links default to fullscreen) |
Example:
./index.html#48&g=bomb-jack&l=games/library/0000617-bomb-jack.tap.zip
Remote URLs must be CORS-enabled. Files placed in this project’s
games/ folder are copied into the static build and need no CORS.
Supported files
| Snapshots | SZX, Z80, SNA |
|---|---|
| Tapes | TZX, TAP (via traps / real-time loading in JSSpeccy) |
| Archives | ZIP containing any of the above |
Build
npm start # build + serve
npm run build # write static site to dist/
npm run serve # serve dist/ (wasm MIME configured)
Credits & licence
Emulation by Matt Westcott — JSSpeccy 3 (GPL-3.0). Original ZX Spectrum ROM © Amstrad PLC; Amstrad have kindly given permission for redistribution of their copyrighted material but retain that copyright.
The UI is inspired by Jan Bobrowski’s amazing Qaop/JS. Please show your support at https://torinak.com/qaop/donate.
Pokes come from the classic Your Sinclair Tipshop, collected as all-tipshop-pokes by Lady Eklipse.
Game metadata is provided by the ZXInfo API (zxinfo.dk) by Thomas Kolbeck, built on ZXDB by Einar Saukas.
Playable game files are mirrored from World of Spectrum Classic.
zxwarp itself is GPL-3.0-or-later because it redistributes JSSpeccy.