Информационные функции VBE
Авторы стандарта VESA стремились не только облегчить работу программистов, но и не ограничивать разработчиков в выборе способов улучшения характеристик видеокарт. Компромиссным решением было включение в состав BIOS специальных информационных блоков с основными данными о видеокарте. В частности, они содержат список и характеристики всех поддерживаемых видеорежимов. В данном разделе описана структура основных информационных блоков и способ доступа к ним прикладных задач.
Вызов функций VВЕ
На любой видеокарте имеется микросхема пассивной, т. е. доступной только для чтения (ROM), памяти, в которой хранится фрагмент BIOS, содержащий структуры данных и подпрограммы, предназначенные для поддержки работы видеосистемы. В частности, к ним относятся функции, обращение к которым (вызов которых) происходит через прерывание int 10h (Video Services).
В состав группы video Services обязательно входит набор функций для поддержки стандартных режимов IBM. Он необходим, по крайней мере, для нормального выполнения процесса загрузки ПК. Дополнением к нему являются функции VBE, описанные в данном и двух следующих разделах. Перед обращением к BIOS код запрашиваемой функции помещается в регистр ах. Он состоит из кодов группы и функции в группе. Код группы VBE равен 4Fh, он указывается в старшем байте регистра ах. Код функции для версии VBE 1.2 может изменяться от 0 до 8, он указывается в младшем байте регистра ах. Таким образом, содержимое регистра ах при вызове функций VBE 1.2 Может изменяться ОТ 4F00h до 4F08h.
Функции могут иметь входные и выходные параметры, которые передаются в регистрах общего назначения или в сегментных регистрах. Входные параметры нужны для нормального выполнения конкретной функции, а выходные содержат ее возвращаемый результат. Назначение и размещение параметров в регистрах будет описано для каждой функции. Если запрошенная задачей функция поддерживается BIOS, то в регистр ai возвращается код 4Fh.
Важно
Это признак того, что функция могла быть выполнена. При успешном выполнении дополнительно очищается байт ah. В противном случае он содержит код ошибки. Таким образом, код 4Fh в регистре ах является признаком успешного выполнения запроса.
Примеры вызова информационных функций VBE и использования возвращаемых ими данных описаны в Главе 2.
Запрос общих данных
Для получения общих данных о видеокарте предназначена функция 4FOOh Get SuperVGA information. Входным параметром является адрес массива размером 256 байтов, при исполнении запроса в него записываются данные о видеокарте. Полный адрес этого массива указывается в регистрах es:di. Форма записи es:di общепринята, она означает, что в регистре es находится сегмент памяти, а в регистре di – расположение (смещение) массива в этом сегменте. При исполнении запроса только первые 20 байтов массива заполняются следующими данными:
- 00 4 байта – VESASignature;
- 04 2 байта – VESAVersion;
- 0б 4 байта – OEMStringptr;
- 0Ah 4 байта – Capabilities;
- 0Eh 4 байта – VideoModePtr;
- 12h 2 байта – TotalMemory.
В первом столбце приведенного списка указаны смещения полей относительно начала массива, адрес которого находится в регистрах es:di. Поле VESASignature содержит ASCII-КОДЫ четырех букв, образующих слово "VESA". Вот эти коды – 56h, 45h, 53h, 41h.
Поле VESAVersion занимает 2 байта, содержащих номер версии и ее редакцию, например 0102 для VBE 1.2 или 0200 для VBE 2.0.
В поле OEMStringptr находится полный адрес (из области BIOS) начала строки текста, содержащей наименование изготовителя видеокарты. Коды символов соответствуют стандарту ASCII, а строка заканчивается пустым байтом (формат строки ASCIIZ). Полный адрес занимает два слова, в первом из них хранится смещение, а во втором – код сегмента памяти.
Поле Capabilities состоит из 32-х независимых разрядов (битов), в которых указываются специфические особенности видеокарты. Авторы стандарта явно перестарались, даже в новейшей версии VBE 3.0 описано назначение только пяти младших разрядов.
У рядовой видеокарты все 32 разряда поля capabilities очищены. Установка нулевого разряда означает возможность увеличения количества разрядов регистров DAC до 8 (см. описание функции 4F08h). Установка первого разряда означает, что видеоконтроллер не совместим с режимом IBM VGA.
Установка второго разряда означает необходимость синхронизации момента изменения содержимого регистров DAC с обратным ходом луча (см. описание функции 4F09h).
Третий и четвертый разряды описаны только в VBE 3.0, они устанавливаются в тех случаях, когда видеоконтроллер или внешние устройства поддерживают работу со стереоскопическими сигналами.