Zapp, or Z80 Assembly Programming Package, is a RAM-based assembler, editor and monitor
for the Amstrad which is loaded from cassette. No command for changing filing systems is
included, but disc users can return to Basic and execute |DISC. Listing the one-line Basic
loader gives you the address to CALL to re-enter Zapp (not given in the manual). While
you're at it, put a ! in the LOAD"" instruction and re-save the loader at the start of the
tape: as supplied, you have to "Press any key" to load both the loader and the program,
which is silly.
The source text editor is rather unusual. It auto-renumbers lines, from one in steps of
one, as you add, delete or insert lines. So the numbers are effectively useless: if
they change as you develop the program you can't use them to find your way around. You
can use the cursor keys to move through the source listing by line or screenful, or by
using the search facility to locate a known label or op code.
Each line is checked on entry and rejected (for re-editing) if it contains an error.
Editing is similar to Locomotive Basic but I disliked the fact that pressing CLR erases
the whole line instead of one character: easy to do if you're used to Basic.
Another oddity is that most assemblers insist on spaces between labels, mnemonics and
comments: Zapp rejects the line if you enter it with a space between label and mnemonic.
The formatting of the listing is not as elegant as the manual world have you believe either.
And you can only use Mode 1.
Source may be assembled when complete, or line-by-line as you enter it: this is possible
because Zapp is a one-pass assembler. Forward references to labels are dealt with by building
them into a linked list: their actual values, once found, can then be inserted into the object
code directly, rather than making an entire second pass.
This makes assembly fast, blindingly so if the listing is turned off, but means that
forward references can't be used as part of an address expression. However, it saves you hours
when assembling a linked set of files from cassette. Error reporting is extensive and by
means of hex error numbers, Zapp won't save object code in an auto-run form, though - you
must note down the start, end and entry addresses, return to Basic and do it by hand.
Disassembly of object code may be made to screen or printer (Zapp won't disassemble itself,
though!). Memory may be displayed as hex and ASCII dumps, and edited directly from the keyboard.
The monitor gives some excellent debugging options: single-stepping, up to four breakpoints,
automatic CALL-and-break to skip through known debugged routines quickly, and warnings if your
code leaves the stack unbalanced on exit. All flags, registers and the top of stack, plus the
current address and op code, are displayed as the "front panel", and all registers and flags
may be preset with values before continuing with program execution.
Like its rivals, Zapp has good points and bad. You pays your money...