Обычно первым адресом ROM системы является FOOOOh, расположенный за 64 или 128 Кбайт от конца первого мегабайта. Поскольку емкость ROM обычно равна 128 Кбайт, то программы ROM полностью занимают последние 128 Кбайт первого мегабайта, включая критический адрес FFFFOh первой команды запуска. Емкость современных микросхем ROM может достигать 256 или 512 Кбайт. Такой увеличенный объем позволяет располагать драйверы интегрированных на системной плате устройств.
На следующем рисунке показана карта распределения первого мегабайта памяти.
Кажется странным, что персональный компьютер при запуске начинает выполнять команду, расположенную за 16 байт от конца ROM, но это сделано умышленно. Просто по этому адресу помещается команда перехода JMP, согласно которой процессор переходит к фактическому началу программы; в большинстве случаев оно близко к адресу FOOOOh, который расположен примерно на 64 Кбайт ранее в карте памяти. Это все равно что начинать чтение книги с 16-й страницы от конца; причем на ней должен быть указан номер страницы, с которой фактически начинается изложение. Зато подобное соглашение позволяет свободно изменять объем ROM.
Основной код BIOS содержится в микросхеме ROM на системной плате, но на платах адаптеров также имеются аналогичные микросхемы. Они содержат вспомогательные подпрограммы базовой системы ввода-вывода и драйверы, необходимые для конкретной платы, особенно для тех плат, которые должны быть активизированы на раннем этапе начальной загрузки, например видеоадаптер. Платы, не нуждающиеся в драйверах на раннем этапе начальной загрузки, обычно не имеют ROM, потому что их драйверы могут быть загружены с жесткого диска позже — в процессе начальной загрузки. В старых персональных компьютерах для BIOS на системной плате отводилось до шести микросхем, но теперь BIOS размещается, как правило, на одной микросхеме.
На платах адаптеров, для которых при запуске требуются драйверы, также размещены микросхемы ROM. Это видеоадаптеры, большинство плат SCSI (Small Computer Systems Interface), платы контроллеров Enhanced IDE и некоторые сетевые платы. Микросхема ROM на этих платах содержит драйверы и программы запуска, которые будут выполнены при начальной загрузке. Например, видеоадаптер может быть инициализирован, несмотря на то что ROM на системной плате не содержит драйверов для этого устройства. Нельзя загружать начальные драйверы режима VGA с диска, потому что экран будет оставаться темным (и вы не сможете управлять процессом загрузки), пока не загрузятся эти драйверы. Что же происходит при загрузке? Программа, хранящаяся в ROM системной платы, сканирует специальную область адаптера ROM оперативной памяти (адреса C0000-DFFFFh) в поисках пары байтов сигнатуры (55AAh), которая указывает на начало ROM. Базовая система ввода-вывода системной платы автоматически выполняет программы в ROM любого адаптера, который она находит в процессе сканирования. Процесс обнаружения и инициализации видеоадаптера можно наблюдать в большинстве компьютеров при включении питания и во время выполнения POST.