все эти же функции вызываются через точку входа, найденную через каталог 32-разрядных сервисов (см. выше), при этом назначение входных и выходных регистров и флага CF
сохраняется. До использования 32-разрядного интерфейса следует сначала найти его каталог и убедиться в наличии сервисов PCI. Функции PCI BIOS перечислены ниже:
♦ АХ
= CF
=0, АН
=0 и EDX
=20494350h (строка символов 'PCI '); проверяться должны все три признака. При этом в AL
находится описатель аппаратного механизма доступа к конфигурационному пространству и генерации специальных циклов PCI:
• Бит 0 — поддержка механизма № 1 для доступа к конфигурационному пространству;
• Бит 1 — поддержка механизма № 2 для доступа к конфигурационному пространству;
• Биты 2:3=00 (резерв);
• Бит 4 — поддержка генерации специального цикла по механизму № 1;
• Бит 5 — поддержка генерации специального цикла по механизму № 2;
• Биты 6:7=00 (резерв).
В регистрах ВН
и BL
возвращается старший и младший номер версии (BCD-цифры), в CL
— максимальный номер шины PCI, присутствующий в системе (число шин +1, поскольку они нумеруются с нуля последовательно). В регистре EDI
может возвращаться линейный адрес точки входа 32-разрядных сервисов BIOS. Этот адрес возвращается не всеми версиями BIOS (некоторые не изменяют EDI
); для проверки можно при вызове обнулять EDI
и проверять на нуль возвращенное значение.
♦ АХ
= СХ
указывается идентификатор устройства, в DX
— идентификатор производителя, в SI
— индекс (порядковый номер) устройства. При успешном возврате в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции. Для нахождения всех устройств с указанными идентификаторами вызовы выполняют, последовательно инкрементируя SI
от 0 до получения кода возврата 86h.
♦ AX
= ЕСХ[23:16]
указывается код класса, в ЕСХ[15:8]
— подкласса, в ЕСХ[7:0]
— интерфейс, в SI
— индекс устройства (аналогично предыдущему). При успешном возврате в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции.
♦ АХ
= BL
указывается номер шины, в EDX
— данные специального цикла.
♦ АХ
= ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh). При успешном возврате в CL
— считанный байт.
♦ АХ
= ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh, четный). При успешном возврате в СХ
— считанное слово.
♦ АХ
= ВН
— номер шины, в BL [7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh, кратный 4). При успешном возврате в ЕСХ
— считанное двойное слово.
♦ АХ
= ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh), в CL
— записываемый байт.
♦ АХ
= ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh, четный), в СХ
— записываемое слово.
♦ АХ
= ВН
— номер шины, в BL [7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh, кратный 4), в ЕСХ
— записываемое двойное слово.
12.9. Расширения ROM BIOS
В микросхеме ROM BIOS, установленной на системной плате, поддерживаются только стандартные (по назначению и реализации) устройства. При необходимости дополнительные устройства, устанавливаемые в слоты шин расширения (ISA, PCI, PCMCIA), могут иметь микросхемы ПЗУ своей программной поддержки — Additional ROM BIOS (дополнительные модули ROM BIOS), они же Expansion ROM. Эта необходимость возникает, когда программная поддержка устройств требуется до загрузки ОС и прикладного ПО. В таком модуле может содержаться и вся программа функционирования специализированного бездискового контроллера на базе PC. Расширения ROM BIOS используют графические адаптеры EGA/VGA/SVGA, некоторые контроллеры жестких дисков, контроллеры SCSI, сетевые адаптеры с удаленной загрузкой и другие периферийные устройства. Для модулей расширения устройств с шиной ISA в пространстве памяти зарезервирована область C8000h-F4000h. POST сканирует эту область с шагом 2 Кбайт в поисках дополнительных модулей BIOS на завершающем этапе выполнения (после загрузки векторов прерываний указателями на собственные обработчики). Дополнительный модуль BIOS графического адаптера (EGA, VGA, SVGA…) имеет фиксированный адрес C0000 и инициализируется раньше (на шаге инициализации видеоадаптера). Устройства с шиной PCI в своем конфигурационном пространстве содержат лишь признак использования модуля расширения, а его приписку к адресам памяти назначает POST.
Дополнительный модуль ROM BIOS должен иметь заголовок, выровненный по границе 2- килобайтной страницы памяти, формат заголовка ПЗУ иллюстрирует табл. 12.8.
Таблица 12.8. Заголовок модуля дополнительного ПЗУ
Смещение | Длина | Назначение |
---|---|---|
0 | 2 | Сигнатура (признак начала модуля): байт 0=55h, байт 1=AAh |