12.9.1. ROM BIOS карт ISA PnP
Для поддержки технологии PnP и расширения возможностей управления начальной загрузкой в спецификации PnP BIOS ввели дополнительный указатель на структуру расширенного заголовка (Expansion Header Structure). Расширенный заголовок имеет формат, приведенный в табл. 12.9. В одном ПЗУ может находиться несколько расширенных заголовков (это требуется для многофункциональных карт расширения), связанных в цепочку. В каждом расширенном заголовке может указываться смещение следующего заголовка относительно начала стандартного заголовка. Наличие и действительность расширенного заголовка проверяется по его сигнатуре и контрольной сумме. Сумма всех байтов расширенного заголовка, включая байт контрольной суммы, должна быть нулевой.
Таблица 12.9. Расширенный заголовок ROM BIOS карт ISA PnP
Смещение | Длина | Назначение |
---|---|---|
0h | 4 байта | Сигнатура, строка $PnP (символы ASCII) |
04h | байт | Версия структуры (01h) |
05h | байт | Длина (в параграфах по 16 байт) |
06h | слово | Смещение следующего заголовка (0000h, если нет больше) |
08h | байт | Резерв(0) |
09h | байт | Контрольная сумма |
0Ah | двойное слово | Идентификатор устройства PnP |
0Eh | слово | Указатель на строку идентификатора производителя (0, если нет) |
10h | слово | Указатель на строку названия продукта (0, если нет) |
12h | 3 байт | Код типа устройства |
15h | байт | Индикаторы устройства |
16h | слово | Вектор подключения BCV (Boot Connection Vector) — 0, если нет |
18h | слово | Вектор отключения (Disconnect Vector) — 0, если нет |
1Ah | слово | Точка входа для загрузки BEV (Bootstrap Entry Point) — 0, если нет |
1Ch | слово | Резерв (0) |
1Eh | слово | Вектор получения информации о статических ресурсах (Static Resource Information Vector) — Real/Protected mode (0 если нет) |
Расширенный заголовок позволяет определить идентификатор устройства PnP, его название и код производителя. Код типа состоит из байта общего типа, байта подтипа и байта идентификатора программного интерфейса, по которым система может узнать знакомые устройства.
Байт индикаторов устройства имеет следующее назначение битов:
♦ бит 7 — ПЗУ поддерживает модель инициализации устройства (Device Driver Initialization Model);
♦ бит 6 — ПЗУ может затеняться оперативной памятью;
♦ бит 5 — ПЗУ может кэшироваться по чтению;
♦ бит 4 — ПЗУ требуется лишь для загрузки с данного устройства;
♦ бит 3 — резерв (0);
♦ бит 2 — является устройством загрузки (IPL-устройство);
♦ бит 1 — устройство ввода (может заменять клавиатуру);
♦ бит 0 — устройство вывода (дисплей).
Вектор подключения BCV
(Boot Connection Vector, он же Interrupt Connection Vector) указывает смещение для процедуры, дальний вызов которой приведет к перехвату векторов прерываний первичных устройств ввода, вывода или загрузки (сервисов Int 9h
, Int 10h
или Int 13h
соответственно), в зависимости от параметров, переданных в регистрах процессора. При вызове этой процедуры в регистре АХ
единицы в битах 0, 1 и 2 запрашивают перехват сервисов Int 9h
, Int 10h
или Int 13h
соответственно (остальные биты нулевые), ES:DI
указывает на контрольную структуру PnP BIOS (System BIOS PnP Installation Check Structure), BX
содержит селективный номер (CSN) карты ISA PnP (для других карт FFFFh); DX
содержит адрес порта чтения ISA PnP (для других карт FFFFh).
Вектор отключения указывает на процедуру, восстанавливающую старое значение векторов при безуспешной попытке загрузки с данного устройства.
Точка входа для загрузки BEV
требуется, если устройство может использоваться в качестве загрузочного, но не обеспечивает блочных функций сервиса Int 13h
. Тогда системная микросхема BIOS может дальним вызовом вызвать эту процедуру вместо выполнения сервиса Int 19h
. Таким образом, например, может выполняться удаленная загрузка (Remote Programm Loading, RPL) по сети.
Вектор получения информации о статических ресурсах задает смещение процедуры, вызов которой выгрузит в память дескрипторы занимаемых ресурсов (в форматах, аналогичных структурам для ISA PnP). Адрес буфера размером не менее 1024 байт задается регистрами ES: DI
при вызове данной процедуры.
Процедура инициализации, которая начинается со смещения 3 в заголовке ПЗУ, для карт PnP должна подчиняться определенным требованиям (до этой спецификации специальных требований не было), принимать параметры и сообщать код возврата.
♦ При вызове процедуры ЕS: DI
указывает на контрольную структуру PnP BIOS, BX
содержит CSN
карты ISA PnP (для других карт FFFFh); DX
— адрес порта чтения ISA PnP (для других карт FFFFh).
♦ При исполнении процедура может переопределять любые векторы прерываний и изменять данные в BDA
и EBDA
, но перед возвратом она обязана восстановить прежние указатели для Int 9h
, Int 10h
, Int 13h
и все прежние значения связанных с ними переменных в BDA
и EBDA
.