-
Notifications
You must be signed in to change notification settings - Fork 0
Emulator JtyOne
JtyOne (Simon Holdsworth) is a port of Mike Wynne's EightyOne. The ZX81 bundle is small and quiet — the smallest screen, the smallest emulator, the smallest games.
JtyOne is GPL-2.0. Pure JavaScript, no WASM, no build step. The runtime exports a global object and writes to an emulator canvas + status span.
play.html reads ?game=<key> from the URL, fetches games.json, gets a {rom, type} record per entry, and hands it off to JtyOne's loader. rom is the file path; type distinguishes .p files (snapshot, loads instantly) from .tap files (real tape image, real load time).
ZX81's native screen is 256×192 monochrome (one screen = 1 KB of character memory). JtyOne renders to a canvas that we constrain via standard genx-frame CSS:
#emulator_canvas {
box-shadow: 2px 2px 10px rgba(0, 0, 0, .7);
image-rendering: pixelated;
}Below the canvas, the upstream code expects an #emulator_status span for tape position / loader messages. We keep it (small, low-vis text) for tape-loading feedback.
ZX81 was keyboard-only — no joystick port on the original hardware. JtyOne maps the joystick directions to the period-correct ZX81 keys (Q/A/O/P for the four directions, on Sinclair games that use them) but most of our entries respond to direct key input from qaop + Enter for fire.
-
.p— ZX81 snapshot. Instant load. -
.p81— alternative snapshot format with a filename header. -
.tap— tape image. Real-time loading; the screen flickers for ~30 seconds while LOAD "" runs.
We default to .p where available.
emulators/jtyone/
├── play.html
├── zx81_emu.js ← JtyOne runtime
├── controls.html
├── games.json
├── roms/ ← system ROM
└── tapes/
└── *.p / *.tap
- Emulator-JSSpeccy — sibling Sinclair machine
- Emulators — index