DESKTOP is a WYSIWYG word processor for the Sinclair ZX Spectrum and compatible computers (such as the Didaktik). It is a program of Czech origin, created by Tomáš Vilím, who wrote it under the pseudonym Universum. The program was published by Proxima – Software v. o. s. Unlike other text editors for the ZX Spectrum from that era, DESKTOP uses a proportional font; up to four fonts can be used in the text (however, it is not possible to use different styles for each font—a separate font must be used for each style). The program was bundled with three other programs:
- Convertor — for converting text from the programs Tasword, D-Text, R-Text, D-Writer, and Textmachine into Desktop,
- Fonteditor — for editing fonts, creating headings, and converting color images to grayscale,
- Screen Top — allows you to edit images up to 512 × 384 dots in size (2 × 2 ZX Spectrum screens).
This repository preserves the complete original DESKTOP distribution tape and provides a readable, fully named and heavily commented reconstruction of its installer, resident editor, output drivers, FONTEDITOR, CONVERTOR and SCREENTOP.
The source is a clean-room decompilation of preserved binaries, not the original
historical source code. Building the repository reproduces the protected
installer payload and the complete 43-file Desktop.tap byte for byte.
| Field | Value |
|---|---|
| Platform | ZX Spectrum 48K |
| Product | Proportional text editor and installation environment |
| Installer load address | 24200 ($5E88) |
| Installed editor entry | 48200 ($BC48) |
| Installed editor core | 34,784 bytes ($5E88-$E667) |
| Full runtime with four fonts | 41,336 bytes ($5E88-$FFFF) |
| Output configurations | 25 printer/plotter configurations plus reduced FONTEDITOR |
| Preserved media | 86 TAP blocks / 43 header-data pairs |
| Standalone tools | FONTEDITOR, CONVERTOR and SCREENTOP |
DESKTOP composes proportional text and embedded pictures in a two-ended memory arena, renders rows through a 12×97-byte canonical raster, and installs output front ends for Epson, K6304, BT100, Gamacentrum, XY 4150, Minigraf and Alfi hardware. The universal installer stores relocatable producer records and emits a complete resident image for the chosen language, interface and device.
The reconstruction is written as literate assembly. Module introductions,
routine contracts, pseudocode, memory-layout descriptions and selective
instruction comments live beside the exact Z80 source they explain. Twelve
source-local README files provide subsystem entry maps, memory models, reading
orders, build targets and change-safety rules. Start with
src/README.md and
documentation/SOURCE-TREE.md.
documentation/ stable architecture and subsystem guides
original/ frozen original Desktop.tap and extracted accession inventory
src/ authoritative assembler and immutable source assets
tools/ portable build, TAP reconstruction and verification tools
config/ complete-distribution source bindings and accession profile
Makefile convenience targets
NOTICE.md preservation and rights notice
requirements.txt
The publication repository deliberately omits the reconstruction project's iteration changelogs, temporary traces, review ledgers and generated build tree.
- Python 3.10 or newer;
- GNU Make, optionally;
- Pasmo 0.5.3 or a compatible Z80 assembler available as
pasmo.
No third-party Python package is required for normal build or verification.
On Debian-derived systems:
sudo apt install make python3 pasmoThe portable command is:
python3 tools/build.py --cleanor:
make buildThe main outputs are:
build/Desktop.tap
build/desktop-installer-loaded.bin
build/desktop-installer-decoded.bin
build/desktop-installer-menu.bin
build/desktop-editor-*.bin
build/fonteditor-packed.bin
build/fonteditor-unpacked.bin
build/convertor-protected-basic.bin
build/convertor-runtime.bin
build/screentop-unpacked.bin
build/SHA256SUMS
build/Desktop.tap retains every original BASIC loader, screen, font, sample
document and disk utility. Only the ins30lxtcd installer payload is replaced
by the freshly assembled source image; exact mode requires the result to equal
original/Desktop.tap byte for byte.
The historical tape expects installation before use. For emulator and hardware testing, the repository can also build 52 direct runtime tapes: every supported installed layout in Czech and Slovak forms.
python3 tools/build.py --clean --runnable
# or
make runnableThis creates build/desktop-runnable-taps.zip and its expanded directory.
These are derived convenience artifacts, not historical tape images.
python3 tools/verify.py
# or
make verifyA successful verification first audits the complete source README set, then proves that:
- the protected installer is exactly 27,793 bytes with SHA-256
4305701d2636681fa85317eb68ee30e03624a39f4851b27abcaacd9d83995a90; - the transient installer menu and primary Epson/Interface I editor match their independently captured 34,784-byte images;
- source-built FONTEDITOR and CONVERTOR match their historical TAP payloads;
- the unpacked FONTEDITOR, CONVERTOR and SCREENTOP images match their established post-decompression fingerprints;
- the rebuilt complete tape is byte-identical to
original/Desktop.tap, whose SHA-256 is29c5622d0a77fb15ef59f6f606452445d5e096359bd06418985ac6301864328c; - all generated direct runtime TAPs and their deterministic ZIP verify.
A faster documentation-only check is available when changing source guides:
python3 tools/verify_source_readmes.py
# or
make source-docs-checkIt verifies the 12 expected source README files, required architectural sections, minimum depth, publication-safe paths and every relative Markdown link.
A dependency-free preservation check is also available:
python3 tools/verify_preservation.py
# or
make preservation-checkIt validates the frozen accession, all 86 TAP block checksums, 43 header/data pairs, key component fingerprints and a complete TAP parse/encode round trip. It does not assemble the source; use the full verification for that proof.
The complete-distribution builder preserves pair order and untouched payloads while regenerating TAP lengths, checksums and physical offsets. A replacement may therefore grow or shrink without manually patching the tape container.
The canonical exact build is:
python3 tools/distribution_builder.py build original build/Desktop.tap \
--mode exact \
--bindings config/distribution-source-bindings.jsonFor an alternative build, supply the canonical binding followed by one or more binding files describing replacement payloads and header changes:
python3 tools/distribution_builder.py build original build/Desktop-alt.tap \
--mode alternative \
--bindings config/distribution-source-bindings.json \
--bindings path/to/your-overlay.jsonThe builder does not pretend that arbitrary machine code is relocatable. A resized component must first be rebuilt by its component-specific source path; the distribution tool then handles the TAP-level consequences safely.
Load original/Desktop.tap or build/Desktop.tap in a ZX Spectrum emulator or
from real tape. The first three pairs are the BASIC loader, loading screen and
protected universal installer. The following pairs contain CONVERTOR,
FONTEDITOR, SCREENTOP, fonts, sample documents and disk utilities.
For direct use without installation, load one of the tapes under
build/desktop-runnable-taps/tap/; its BASIC loader loads the full runtime and
enters DESKTOP at 48200.
The original binaries and data are included for software preservation and
research. Rights remain with the respective authors or rightsholders. See
NOTICE.md.
The Epson/strobed-A, Aritma Minigraf 0507 and Alfi comments were cross-checked
against complete reconstructions by Cygnus that
rebuild their preserved 1,680-byte binaries exactly. The integrated findings,
including the Alfi
quality-address and hardware-validation limits, are documented in
documentation/PRINTER-DRIVER-CROSSCHECK.md.