Amstrad Computer User
1st September 1986Zapp
This is a very similar package to Adam in that it loads in one block which is about 10k long.
The manual is also 32 AS pages which is equal to sixteen pages of all the other packages documentation.
The tape system is in operation when you load the program, but you can return to Basic, type IDISC and return to it with a CALL.
Zapp doesn't support external commands, but does have a *CAT command which will work with disc or tape.
The editor, which is line number based, works in Mode 1 and numbers the text in steps of one. Unfortunately, each time you enter a line the text is renumbered to accommodate the new line, so this is not very useful in finding your way around the file.
You can use the cursor keys to move through the source listing by line or in whole screens. The search option lets you jump straight to an opcode or label.
Zapp is unusual in that it is a one pass assembler as opposed to a two byte assembler. Normally an assembler will go through the text checking all the labels and storing all label references in a table and matching up forward references with the actual label when it finds it.
On the second pass the object code is generated and all the label values are lifted from the symbol table and put into the code.
Zapp works by moving through the text, creating code as it goes and chaining together forward references to labels, which are then filled in from the end backwards when they are found.
The problem that occurs with Zapp is that only one byte is used to store forward jumps in the chaining process instead of two when it was necessary.
This means that if a jump instruction jumps more than 255 bytes away a chaining error occurs and a dummy jump must be put in, sometimes in the middle of a routine with another jump around the dummy jump. This could have been rectified and would have made things much easier for the first time programmer.
However, all is not gloomy. If you don't have a disc drive and you are assembling a big program from tape, [A sucker for punishment - Ed] then you only need to load it once for assembly.
Two-pass assemblers mean you have to rewind the tape for each file pass, or more sensibly save the program twice which obviously takes longer.
Object code can be disassembled to the screen or printer. Memory can be displayed as hex and Ascii dumps which can be altered.
The monitor allows singlestepping through code, and has the option to put a break after a call to a debugged subroutine but only four breakpoints may be set.
The front panel is fairly simple only displaying all register and flag contents - a little like Maxam's but slightly more useful as it is accessed horn setting proper breakpoints in object code, and gives register results while single stepping.
Not quite as simple to use as say. Adam, but if you have a limited system and need the options offered by a single pass package it may be what you need.