Description | Download | Changes | Home


(z81 screenshot)


z81 is a Sinclair ZX81 (aka TS1000) emulator. The ZX80 can also be emulated. There are actually two versions - z81 (for svgalib), and xz81 (for X). Also included are zx81get (a ZX81 tape reader), and saverom (a program to save the ROM from a ZX81).

The ROMs are not included, so you'll have to obtain those separately. From here, perhaps. :-)

z81 uses the Z80 emulator from Ian Collier's `xz80'.


The current version is 2.1, available from ibiblio.

If you're compiling on a non-Linux system you'll also need this patch, which fixes some errors when not compiling with OSS sound support. (Thanks to James Weatherley for reporting this.)


This excerpt from NEWS lists the changes from z81 2.0 onwards.

Changes in z81 2.1

Fixed several compilation warnings with gcc, as well as something gcc now likes to call an "error" which prevented compilation of z81 2.0 with current versions. Thanks to Adam J. Richter and Brian Schau for pointing out the problems.

Added a "saverom" program for the ZX81, which lets you save your own ZX81's ROM.

Changed ZX80 VSYNC behaviour slightly, the Space Invaders clone for it works now.

Various sound fixes - fixed post-death sound in QS Defender, fixed a slight `spike' problem on VSYNC tones, and removed AY tone/noise counter wraparound (which was mistaken).

Improved signal handling.

Changes in z81 2.0

Better display emulation, leading to better emulation all-round. This still isn't perfect, but it already seems to cope with everything z81 1.x did, plus a bit more. Notable additions are Rock Crush, Dan's Revenge, and QS Defender (though it's so overscanned it doesn't fit in the normal display). Also, high-score entry now works in ZX Galaxians, and the display no longer `goes weird' when updating on the ZX80. :-) Thanks to Wilf Rigter (and his zx81vid.txt) for the timing info and detailed description the new display stuff was based on.

Optional sound emulation. This comes in two forms - VSYNC-based (aka `turn up the volume on the TV' :-)), and AY-3-891x-based (sound addons). The sound addons currently supported are the Quicksilva sound board, and the Bi-Pak Zon X-81 (thanks to Andy Styles for info on this). The sound code was based on my work for Fuse, so Matan Ziv-Av and Philip Kendall also deserve some credit here.

Added ZX Printer support, which was an easy port from xz80. Thanks to Ian Collier for this, obviously. :-) The main difference in z81 is that it outputs (as a picture) to a PBM file rather than an X bitmap.

With `-l', you can now boot directly to the file selector (at least when emulating a 16k ZX81).

You can now enable display of the VSYNC signal with `-V'. This is useful if you want FAST mode to blank the screen, or want to see LOAD/SAVE signals onscreen when using `-L' or `-S' (see below), but tends to be an annoyance otherwise which is why it's not enabled by default.

The LOAD and SAVE hooks can now be disabled, with `-L' and `-S' respectively. This is mainly so there's something easy to get at which makes a noise :-) (i.e. use `-sS' then save something).

A keyboard port fix means that Namtir Raiders now works. Also fixed reversed key-reading when more than one bit was zero in the port's MSB - I don't think that affected much though.

You can now directly emulate a 1k machine, with `-u' (= unexpanded).

The new `-i' option inverts the screen, giving a white-on-black display.

Fixed some problems with signal blocking when exiting.

The X version previously ignored any `-r' setting - fixed.

Auto-load (loading from the command-line) is slightly better than before - it now starts up the program `instantly'. This is probably just as well, as the better display emulation means the emulator can't really `fast-boot' any more except when loading a program.

It didn't previously load programs from command-line which ended in `.P' (it tried to add a further `.p') - it does now.

Removed the old `-s' for normal (slow) booting, as the only fast-boot option now available is auto-loading (see above).

Removed z81txt (the Linux-console-specific text version). I thought about some way of making it work with the new display code by interpreting characters in the screen bitmap, but it was really just too nasty an idea to be worth bothering with.

Last updated 2004 Oct 14