Home Computing Weekly
14th May 1985
Author: P.N.G.
Publisher: Hewson Consultants
Machine: Amstrad CPC464
Published in Home Computing Weekly #112
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...