Выбрать главу

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.