The full extent of the BIOS does not need to be cast forever in the silicon of the single PROM chip holding the firmware.
The IBM BIOS can accept additional code as its own into one integrated whole. Hence additional PROM chips containing BIOS routines can be added to the PC. The BIOS will incorporate these new routines.
The key for making BIOS extendable is a firmware routine that enables the BIOS to look for add-in code.
(1) Search for Preamble Bytes
During POST after interrupt vectors have been loaded into RAM, the resident BIOS code instructs the computer to check its ROM memory for the occurrence of the special preamble bytes, that mark the beginning of add-in BIOS routines. The BIOS searches for these preamble bytes in the absolute address range 0C8000 - 0F4000.
The preamble bytes take a specific form:
(2) Verification for legitimate BIOS extension
If the special preamble bits are found, it verifies that the subsequent section of code is a legitimate BIOS extension by performing a form of cyclic redundancy check on the specified number of 512 byte blocks. The values of each byte in the block are totaled using modulo 0100 addition – the effect is the same as dividing the sum of all the bytes by 4096 (d). A remainder of 0 indicates that the extension of BIOS contains valid code.
(3) Installation of extension BIOS
After a valid section of code is identifies, system control (BIOS program execution) jumps to the 4th byte in the extension BIOS and performs any functions specified in the machine language. Typically these instructions tell the BIOS how to install the extra code.
(4) Return of control to Resident BIOS
Finally when the instructions in the extension BIOS are completed, control returns to the resident BIOS. The system then continues to search for blocks of additional BIOS. When it completes its search by reaching the absolute address 0F4000 it starts the process of booting the computer from the disk.
The ROM chips containing this extra BIOS code need not be present on the system board. The memory locations used are also accessible on the extension bus. The code required to control the extension accessory thus loads when the system boots. One complication is that no two sections of code can occupy the same memory area. Consequently most expansion board makers for the PC series incorporate jumpers on their products to allow reassigning of the addresses used by their BIOS extensions to avoid conflicts.
There are three standard BIOSes present in most systems and located pretty much at the same place: