During cold-boot (power-on start-up), after the POST and installation of
default interrupt handlers, BIOS makes a check for external ROMs found on
feature cards (boards installed in a PC slot).  This testing is informally
called ROM-scan.

Note: ROM-scan was NOT implemented in the earliest BIOS and the very
oldest PCs (those with a maximum of 64K on the motherboard) will
not have this feature unless a later version of the ROM-BIOS has
been installed.

External ROM modules may exist between addresses c000:0 and e000:0.  Each
2K block in this range is checked for a signature and is in this format:

RomScanHdrRec
Offset Size Contents
                                                                          
+0      2  wSignature   must be aa55H (55H followed by aaH; i.e. )
+2      1  bLenPgs      length of the ROM module in 512-byte pages
+3      ?  abCode       variable-length code and data of the ROM.  It
usually begins with a JMP to get the
initialization portion of the code.

When BIOS finds a ROM signature, it performs a checksum on the defined
module.  Each byte is summed modulo 100H and the sum must be exactly 0.
When a module is verified to be valid, BIOS performs a FAR CALL to offset
0003H of its segment and the ROM must eventually return to the BIOS via a
FAR RET.

Typically, the ROM module will perform any hardware initialization tasks
necessary and insert its own addresses into one or more interrupt vectors.

The ROM sockets U17 and U37 on the AT motherboard are addressed starting
at e000:0000.  A scan occurs in 64K blocks for a valid module.  If
present, a module will have the aa55H signature, an unused length byte,
executable code starting at xxxx:0003 and a checksum of 0 modulo 100H at
e000:ffff.

A MRCI hardware-assist adaptor could install data-compression support
via ROM-Scan, and thus be available immediately on power up.  See
INT 1aH b001H (query hardware-based MRCI support).

See Also: POST
- -

ROM-Scan