Hardware Reference
In-Depth Information
Figure 5.2. PC memory map showing ROM BIOS.
Some think it is strange that the PC would start executing BIOS instructions 16 bytes from the end of
the ROM, but this design is intentionally built in to Intel's x86 processors. All the ROM programmer
has to do is place a JMP (jump) instruction at that address that instructs the processor to jump to the
actual beginning of the ROM—in most cases, close to F0000h—which is about 64KB earlier in the
memory map. It's like deciding to read every book starting 16 pages from the end and then having all
book publishers agree to place an instruction there to jump back the necessary number of pages to get
to page 1. By setting the processor startup location in this way, Intel enabled the ROM to grow to be
any size, all the while keeping it at the upper end of addresses in the first megabyte of the memory
address space.
Adapter card ROMs are automatically scanned and read by the motherboard ROM during the early
part of the boot process—during the POST. The motherboard ROM scans a special area of RAM
reserved for adapter ROMs (addresses C0000-DFFFFh) looking for 55AAh signature bytes. This
area indicates the start of a ROM.
All adapter ROMs must start with 55AAh; otherwise, the motherboard won't recognize them. The
third byte indicates the size of the ROM in 512-byte units called paragraphs , and the fourth byte is
the actual start of the driver programs. The motherboard ROM uses the size byte for testing purposes.
The motherboard ROM adds all the bytes in the ROM and divides the sum by the number of bytes.
The result should produce a remainder of 100h. Thus, when creating a ROM for an adapter, the
programmer typically uses a “fill” byte at the end to get the checksum to come out right. Using this
 
Search WWH ::




Custom Search