|
Утилита для отображения информации
Утилита для отображения информации об имеющихся в системе дополнительных
устройствах. Программа выполняет поиск дополнительных BIOS (Expansion
ROM) и визуализирует их характеристики. Если Expansion ROM удовлетворяет
спецификации Plug and Play и содержит структуру данных PnP Expansion ROM
Header, выводится более подробная информация
|
Option ROM Address
|
Базовый адрес ROM в формате base:offset
|
Signature
|
Сигнатура Expansion ROM 0AA55h
|
Length
|
Размер Expansion ROM
|
ROM Init Entry Point
|
Точка входа для инициализационной процедуры
|
|
Точка входа для инициализационной процедуры, по которой System BIOS
передает управление в Expansion ROM при ROMSCAN это всегда FAR base:0003.
По этому адресу в Expansion ROM обычно находится команда внутрисегментной
передачи управления. Несколько экспериментов показали, что программа PNPOROM
умеет выполнять вычисление адреса перехода и в качестве ROM Init Entry
Point выводит адрес Target IP, по которому будет передано управление уже
внутри Expansion ROM, хотя не исключаеено, что при некоторых косвенных
формах JMP/CALL возможны проблемы.
Для PnP Expansion ROM выводятся следующие параметры:
|
Option
ROM Address |
Базовый
адрес ROM в формате base:offset |
Signature
|
Сигнатура
Expansion ROM 0AA55h |
Length
|
Размер
Expansion ROM |
ROM
Init Entry Point |
Точка
входа для инициализационной процедуры |
PnP
Expansion Header |
Адрес
структуры PnP Option ROM Header, детально описанной ниже |
Signature
|
Сигнатура
PnP Option ROM Header = "$PnP" |
Structure
Revision |
Версия
PnP Option ROM Header |
Header
Length |
Длина
PnP Option ROM Header в параграфах, параграф = 16 байт |
Next
Header Offset |
Смещение
следующего в цепочке блока Option ROM Header |
Reserved
|
Значение
зарезервированного байта |
Check
Sum |
Контрольная
сумма |
Device
Identifier |
Тридцатидвухразрядный
упакованный идентификатор устройства, из которого, согласно схеме
приведенной в описании функции Get DevNode, можно получить семисимвольный
ASCII идентификатор PnP |
Device
Type Codes |
|
Base
Type |
Базовый
класс |
Sub
Type |
Субкласс
|
Interface
Type |
Interface Level |
Device
Indicators |
Байт
флагов |
Boot
Conn. Vector |
Адрес
процедуры Boot Connect |
Disconnect
Vector |
Адрес
процедуры Disconnect |
Boot
Entry Vector |
Адрес
RPL альтернативы INT 19h |
Reserved
|
Зарезервированное
слово |
Static
Resources Info |
Адрес
процедуры для получения информации об используемых устройством ресурсах
|
|
PnP Option ROM Header построен на основе шаблона, описанного в документе
Plug and Play BIOS Specification, Appendix
A: Generic Option ROM Headers. Expansion ROM, который поддерживает
расширения Option ROM Header, содержит по смещению 1Ah шестнадцатибитовый
указатель на первый Option ROM Header (шестнадцатибитовый указатель и
константа 1Ah - смещения относительно базового адреса Expansion ROM).
Так как структуры вида Option ROM Header используются не только для PnP,
структура, на которую указывает содержимое ячейки 1Ah, может быть Option
ROM Header другого типа, поэтому для обнаружения PnP Option ROM Header
необходимо просканировать цепочку таких структур, пользуясь указателем
на следующую структуру, присутствующем в каждом Option ROM Header и выполняя
опознавание сигнатуры "$PnP"
|
Offset |
Size |
Пояснение |
00h |
4
BYTES |
Сигнатура
"$PnP" = 24h, 50h, 6Eh, 50h |
04h |
BYTE
|
Structure
Revision, версия Expansion ROM Header |
05h |
BYTE
|
Length,
длина в единицах [16 байт] |
06h |
WORD
|
Offset
Next Header, указатель на следующую структуру,
0000h - если эта структура последняя |
08h |
BYTE
|
Reserved,
зарезервированный байт равный 00h |
09h |
BYTE
|
Checksum.
Байт контрольной суммы формируется таким образом, чтобы сумма по модулю
256 для блока данных указанной полем Length длины была равна 0
|
0Ah |
DWORD
|
PnP
Device Identifier.
Упакованный 32-битовый идентификатор устройства |
0Eh |
WORD
|
Pointer
to Manufacturer String (Optional).
Указатель на ASCII строку (название производителя), заканчивающуюся
нулем. Если Pointer=0000, это означает, что строка отсутствует
|
10h |
WORD
|
Pointer
to Product Name String (Optional).
Указатель на ASCII-строку (название устройства), заканчивающуюся нулем.
Если Pointer=0000, это означает, что строка отсутствует |
12h |
3
BYTES |
PnP
Device Type Code.
Содержит Base Type Code, Sub Type Code, Programming Interface Level
|
15h |
BYTE
|
Device
Indicators.
Отражают статус подключения Expansion ROM и задействование устройства
в процессе загрузки ОС
Bit0 |
1=Display
Device |
Bit1 |
1=Input
Device |
Bit2 |
1=Initial
Program Load (IPL) Device |
Bit3 |
Reserved |
Bit4 |
1=This
Option ROM fully support boot from this device |
Bit5 |
1=Enable
Read Cacheable for this ROM |
Bit6 |
1=Enable
Shadow this ROM |
Bit7 |
1=DDIM
Support (Device Driver Initialization Model) |
|
16h |
WORD
|
Boot
Connection Vector (0000=None) |
18h |
WORD
|
Disconnect
Vector (0000=None) |
1Ah |
WORD
|
Bootstrap
Entry Point (0000=None) |
1Ch |
WORD
|
Reserved
(0000h) |
1Eh |
WORD
|
Static
Resource Information Vector (0000=None)
Используется для запроса информации о системных ресурсах, занимаемых
устройством: I/O Address, Memory Address, IRQ, DRQ |
|
Для Expansion ROM (Additional BIOS) сделанного в соответствии со спецификацией
PnP Expansion ROM, протокол ROMSCAN для опознавания и подключения Additional
BIOS системным BIOS изменяется:
- При вызове системным BIOS процедуры Initialization Vector (Base:0003),
Additional BIOS не может перехватывать векторы прерываний, относящиеся
к поддержке BOOT-Devices:
INT
09h |
Keyboard
Hardware Interrupt (IRQ1=INT9) Service |
INT
10h |
Video
Service |
INT
13h |
Disk
Service
|
INT
19h |
Bootstrap
Loader |
INT
18h |
Bootstrap
Loader (Alternative) |
Вместо этого, перехваты этих векторов могут быть выполнены при вызове
системным BIOS процедуры Boot Connection Vector
- Если попытка загрузки с IPL (Initial Program Load) устройства,
обслуживаемого данным Expansion ROM не удалась (Boot Failure), системный
BIOS вызывает процедуру Disconnect Vector, для того, чтобы Additional
BIOS освободил занятые им векторы прерываний, а возможно другие ресурсы,
для обеспечения попытки загрузки с другого устройства
- Для выполнения попытки загрузки с устройства, обслуживаемого PnP
Expansion ROM, при одновременном соблюдении следующих четырех условий
вместо INT 19h выполняется вызов процедуры Bootstrap Entry Vector
(RPL mode - Remote Program Load)
- Байт Device Indicators сообщает, что это устройство IPL
- Устройство не поддерживает дисковый сервис INT 13h
- Bootstrap Entry Vector ненулевой
- Boot Connection Vector нулевой
- Все векторы для запуска процедур содержат смещения относительно
базового адреса данного Expansion ROM. Более подробно описание входных
и выходных параметров всех процедур описано в документе Plug
and Play BIOS Specification
|
|
|