Skip to content

HiSoft Devpac

An editor, an assembler and a way back from a crash

Devpac packaged the separate jobs of writing assembly, turning it into machine code and inspecting a running program. Its Spectrum GENS3/MONS3 manual makes those boundaries visible; later platform editions target different processors.

Writing an assembly-language program involves at least three jobs: edit the instructions, assemble them into bytes, and find out what those bytes do when executed. HiSoft Devpac packaged tools for those jobs. Its debugger matters as much as its assembler: a program that has assembled successfully may still jump to the wrong address or overwrite its own data.

The Spectrum Devpac manual names the two main tools GENS3 and MONS3. Later Devpac editions served other machines; the Amiga package’s GenAm and MonAm belong to a different processor and operating system.

Source text becomes object code

GENS3 includes an editor for the source listing. Labels let a programmer refer to places by name while the assembler works out their addresses. Directives control tasks such as where code is placed or how data is emitted. They are instructions to the assembler, rather than opcodes that the Z80 will execute.

The documented assembly process uses two passes. The first builds the symbol table and checks the source; the second generates object code. That allows a reference to a label whose definition appears later in the listing. Source text, symbols and output all need space in the host computer’s memory. (Spectrum manual, GENS3 sections 2–3.)

Inspect the program that runs

MONS3 displays and changes processor and memory state. Breakpoints let execution return to the monitor at a chosen point, so a programmer can inspect what has happened. Disassembly turns memory bytes back into an instruction listing for inspection; it does not recover all the labels, comments and intentions of the original source.

The manual also distinguishes ways of entering code with different register assumptions. That is a concrete example of why “run this address” is not a complete calling convention. The program must know which registers and memory locations it may rely on or change. (MONS3 command reference.)

One package name, different machines

An Amiga assembly listing uses 68000-family instructions and the Amiga’s interfaces. A Spectrum listing uses the Z80 and Spectrum conventions. A shared Devpac brand cannot make their generated code interchangeable.

The connection to BASIC to machine code is the working process: write a bounded routine, inspect its bytes and state, then connect it to the larger program. An integrated package makes those steps easier to reach, while leaving the programmer responsible for what each step means.

Sources

  • HiSoft, ZX Spectrum Programmer’s Manual: Devpac, 1985; identified 1998/1999 transcription. Manual.
  • HiSoft, Devpac for the Amiga, German edition: translator’s introduction and GenAm/MonAm descriptions. Preserved manual.

Checked. Verified against primary sources and signed off by a person.