Comments by the author. This assembler started life as a public domain 8080 assembler program but I don't know the source. My thanks are due to the unknown (to me) author. The original version I couldn't make work so I don't know much about it but I did follow its general architecture. It has evolved over several re-writes and now bears very little resemblance to the original. This version has been in use for about two years and was written because the only assembler I had available was an elderly Cromemco one which was abysmally slow. "zasmb" assembles at something over 7,000 lines per minute when the source is read from a ram disc and the code is also written back to one. This is quite a reasonable speed and is quite a lot faster than the MicroSoft M80 although slower than the SLR Systems assembler. It is a classical two pass assembler with an indirectly hashed symbol table which accounts for much of its speed. It has one or two features which are not usually available. One is the facility to return to an editor with the cursor pointing to the error if one occurs. This is done by putting a command into the CCP buffer together with the row and column numbers. If the editor can pick these up it can start the edit with the cursor at the position of the error. This facility speeds up assembly program development considerably. My favourite editor is "WordMaster" a predecessor of "Wordstar". I disassembled it and then modified it to suit my H19 terminal and then again to make it postion the cursor at the row and column given in the command lin as arguments. This is not a task to be taken lightly! If you want to make the assembler communicate with your editor, and this is highly desirable, get one for which the source code is available. Communication between the editor and the assembler causes a dramatic increase in the speed of assembly language program development and a marked decrease in the frustration factor. The second feature is the provision of a pseudo-operator "forg" (false origin). This enables code to be assembled in line but executed at an origin different from that at which it is assembled. This facility was included so that a loader could be incorporated in a new version of the CP/M console command processor which has its origin at 100H and the loader then transferred to just below the BDOS section of CP/M. If a normal "org" statement were to be used the CCP file would be nearly 64K long. There are a number of improvements which might be made to "zasmb" which would be advantageous. These are: local labels, some control structures, "ne," to be equivalent to "nz," in jumps "eq," "z," more type (word/byte/string) checking in expressions. A much more fundamental fundamental change would be to alter the input routines to use a circular buffer with several sets of pointers so as to avoid the shift from the disc input buffer to the line buffer and then to the token buffer. This would probably speed the assembler up by 50 per cent or so and break the 10,000 line per minute barrier. I don't have a profiler so I can't find the critical routines although they are pretty certain to be in the character input. If anyone carries out any of these improvements they might send me a copy of the revised code.  .