
Zapple Monitor

The Zapple Monitor was a firmware-based product developed by Roger Amidon at Technical Design Laboratories (also known as "TDL"). TDL was based in Princeton, New Jersey, USA in the 1970s and early 1980s.
The "Zapple" monitor was a primitive operating system which could be expanded and used as a Basic Input/Output Services (BIOS) 8080 and Z80 based computers. Much of the functionality of Zapple would find its way into applications like 'Debug' in MS-DOS.
Zapple commands would allow a user to examine and modify memory, I/O, execute software (Goto or Call) and had a variety of other commands. The program required little in the way of then expensive Read Only Memory or RAM. An experienced user could use Zapple to test and debug code, verify hardware function, test memory, and so on.
A typical command line would start with a letter such as 'X' (examine memory) followed by a hexadecimal word (the memory address 01AB) and [enter] or [space]. After this sequence the content of the memory location would be shown [FF] and the user could enter a hexadecimal byte [00] to replace the contents of the address, or hit [space] or [enter] to move to the next address [01AB]. An experienced user could enter a small program in this manner, entering machine language from memory.
Because of the simple structure of the program, consisting of a vector table (one for each letter) and a small number of subroutines, and because the source code was readily available, adding or modifying Zapple was straightforward. The dominant operating system of the era, CP/M, required the computer manufacturer or hobbyist to develop hardware specific BIOS. Many users tested their BIOS subroutines using Zapple to verify, for example, a floppy disk track seek command, or read sector command, etc., was functioning correctly by extending Zapple to accommodate these operations in the hardware environment.
The general structure of Zapple lives on in the code of many older programmers working on embedded systems as it provides a simple mechanism to test the hardware before moving to more advanced user interfaces.