This repository preserves the original tape image and provides a readable, fully named, heavily commented reconstruction of the integrated Pikasm 1.1+ assembler/editor and Pikomon monitor.
The reconstructed source covers the complete 16,845-byte machine-code payload
loaded at decimal address 25000 ($61A8) through $A374. Building the source
reproduces both that payload and the complete supplied 24,017-byte TAP image
byte for byte.
The surviving Czech manual attributes the underlying Pikasm 1.1 to T.R.C. and the 1.1+ block/search enhancements and PikAsm,Mon integration to Pevosoft. This repository does not claim that the historical authors' original source code was recovered: the assembly is an independent decompilation of the preserved binary.
| Field | Value |
|---|---|
| Program | PikAsm,Mon 1.1+ |
| Platform | ZX Spectrum 48K |
| Type | Integrated Z80 assembler/editor, monitor and BREAK diagnostic |
| Public entry | 25000 ($61A8) |
| Main payload | 16,845 bytes ($61A8-$A374) |
| Pikasm core | 10,467 bytes at $788A-$A16C |
| Pikomon image | 4,608 stored bytes, expanded into screen memory |
| Source format | Compact semantic line records |
| Assembler | Two pass; documented and undocumented Z80 forms |
| Preserved media | Five-block TAP with BASIC loader, main payload and devas companion |
| Exactness | Complete TAP rebuild is byte-identical |
The preserved distribution combines:
- a shell menu that switches between Pikasm and Pikomon;
- a 64-column editor with block operations and search;
- a compact-source, two-pass Z80 assembler;
- GENS source-tape conversion;
- expression evaluation, symbols, conditional assembly and pseudo-operations;
- a screen-resident monitor/disassembler with memory, search and tape commands;
- a one-instruction tracer with simulated JP/CALL/RET/RST behavior;
- an IM2 BREAK module that captures and displays register state.
The final tape pair named devas is a separate 6,912-byte screen/code companion.
The PikAsm,Mon BASIC bootstrap does not load it as part of the integrated main
payload, but it is retained unchanged in both the original and rebuilt TAP.
The source is written as a literate reconstruction: subsystem introductions,
routine contracts, data-layout explanations, semantic labels and selective
purpose-level instruction comments are kept next to the exact bytes they
explain. See src/README.md for the code-reading guide.
documentation/
PikAsm-CS.txt surviving Czech manual
PikAsm-manual-writer.tap Writer-format manual tape
PikAsm-info.txt distribution notes
PikAsm-mail.txt 1995 Usenet posting
README.md documentation provenance
original/
pikasm-mon_v1-1+.tap preserved original target tape
src/
README.md architecture and source-reading guide
memory-map.asm component and runtime address map
loader.asm BASIC-embedded machine-code loader
controller.asm shell and GENS converter
pikomon.asm integrated screen-resident monitor
pikasm.asm complete editor and assembler core
break-module.asm IM2 BREAK/register display module
padding.asm final preserved payload byte
tools/
assemble.py assemble all source components
rebuild_tap.py replace the main payload TAP block
build.py complete build driver
verify.py full source and byte-identity verification
verify_preservation.py dependency-free media/structure check
taplib.py ZX TAP parsing and checksum helpers
Makefile convenience build targets
requirements.txt pinned assembler dependency
NOTICE.md preservation and rights notice
- Python 3.10 or newer;
- pyz80 1.3.0.
Install the dependency in a virtual environment:
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txtOn Windows PowerShell:
.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txtThe portable build command is:
python tools/build.pyOr, on systems with make:
make buildThe build creates:
build/components/*.bin
build/maps/*.map
build/main-61A8-A374.bin
build/pikasm-mon_v1-1+.tap
The BASIC loader and trailing devas pair are retained from the preserved TAP.
The 16,845-byte main payload is regenerated entirely from the assembly sources.
Run:
python tools/verify.py
# or
make verifyA successful verification proves:
- every main-payload source component assembles to its exact preserved bytes;
loader.asmmatches the 70-byte routine embedded in the BASIC block;- the assembled main payload is exactly 16,845 bytes;
- the rebuilt complete TAP is byte-for-byte identical to the original;
- the complete TAP SHA-256 is
a57954be33d7dbe541cbc611660b6bce3c968e48b2e1cee50a01b551bbe26c4e.
A dependency-free preservation check is also available:
python tools/verify_preservation.py
# or
make preservation-checkIt verifies the original TAP fingerprint, block structure, XOR checksums, payload sizes, parser round-trip and presence of all authoritative sources. It does not assemble the source; use the full verification for that proof.
Load original/pikasm-mon_v1-1+.tap or the generated
build/pikasm-mon_v1-1+.tap in a ZX Spectrum emulator or on compatible real
hardware. The BASIC loader loads the headerless main payload, copies the BREAK
module to high RAM, and enters the shell at address 25000.
See documentation/PikAsm-CS.txt for operating instructions and assembler
syntax. See src/README.md for internal architecture.
The original binary and documentation are included for software-preservation and research purposes. Rights in the original program and documentation remain with their authors or rightsholders. No ownership of the original work is claimed here. The reconstructed comments, labels and tooling document the preserved binary and should not be read as a claim that the historical source code was obtained from its authors.