System information

6.7 A Sample BIOS
The program shown in Appendix B can serve as a basis for your first BIOS. The simplest
functions are assumed in this BIOS, so that you can enter it through a front panel, if absolutely
necessary. You must alter and insert code into the subroutines for CONST, CONIN, CONOUT,
READ, WRITE, and WAITIO subroutines. Storage is reserved for user-supplied code in these
regions. The scratch area reserved in page zero (see Section 6.9) for the BIOS is used in this
program, so that it could be implemented in ROM, if desired.
Once operational, this skeletal version can be enhanced to print the initial sign-on message and
perform better error recovery. The subroutines for LIST, PUNCH, and READER can be filled
out and the IOBYTE function can be implemented.
6.8 A Sample Cold Start Loader
The program shown in Appendix E can serve as a basis for a cold start loader. The disk read
function must be supplied by the user, and the program must be loaded somehow starting at
location 0000. Space is reserved for the patch code so that the total amount of storage required
for the cold start loader is 128 bytes.
Eventually, you might want to get this loader onto the first disk sector (track 0, sector 1) and
cause the controller to load it into memory automatically upon system start up. Alternatively, the
cold start loader can be placed into ROM, and above the CP/M system. In this case, it is
necessary to originate the program at a higher address and key in a jump instruction at system
start up that branches to the loader. Subsequent warm starts do not require this key-in operation,
because the entry point WBOOT gets control, thus bringing the system in from disk
automatically. The skeletal cold start loader has minimal error recovery, which might be
enhanced in later versions.
6.6 BIOS Entry Points CP/M Operating System Manual
6-25