Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PikAsm,Mon 1.1+ for the ZX Spectrum

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.

At a glance

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

Program overview

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.

Repository layout

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

Requirements

  • 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.txt

On Windows PowerShell:

.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt

Build

The portable build command is:

python tools/build.py

Or, on systems with make:

make build

The 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.

Verify the reconstruction

Run:

python tools/verify.py
# or
make verify

A successful verification proves:

  • every main-payload source component assembles to its exact preserved bytes;
  • loader.asm matches 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-check

It 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.

Running PikAsm,Mon

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.

Preservation and rights

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.

About

Historical assembler for ZX Spectrum

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages