Для получения общих данных о видеокарте предназначена функция 4FOOh Get SuperVGA information. Входным параметром является адрес массива размером 256 байтов, при исполнении запроса в него записываются данные о видеокарте. Полный адрес этого массива указывается в регистрах es:di. Форма записи es:di общепринята, она означает, что в регистре es находится сегмент памяти, а в регистре di — расположение (смещение) массива в этом сегменте. При исполнении запроса только первые 20 байтов массива заполняются следующими данными:
В первом столбце приведенного списка указаны смещения полей относительно начала массива, адрес которого находится в регистрах 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, они устанавливаются в тех случаях, когда видеоконтроллер или внешние устройства поддерживают работу со стереоскопическими сигналами.
В поле videoModePtr находится адрес начала списка видеорежимов, поддерживаемых картой. Первое слово поля содержит смещение, а второе сегмент. Список расположен в области BIOS, код каждого режима занимает одно слово. Признаком конца списка является код OFFFFh.
В поле TotalMemory указан установленный на видеокарте объем памяти, выраженный в блоках размером 64 Кбайт. 1 Мбайт соответствует 16 блокам (10h). На устаревших моделях видеокарт это поле может быть очищено. В каких случаях полезна описанная функция? Например, если графическая задача рассчитана на выполнение в защищенном (32-разрядном) режиме работы микропроцессора, то обязательно надо проверять номер версии VBE. Видеокарта может работать в таком режиме, если на ней реализованы функции VBE 2 . О, НО НС VBE 1. 2.
Анализ состояния разрядов поля capabilities и списка поддерживаемых режимов при выполнении задачи едва ли целесообразен. Поддержка выбранного режима обязательно проверяется в задаче, но делается это более надежным способом, чем просмотр списка, поскольку присутствие режима в списке еще не означает его поддержку. Подробно это обсуждается в главе 2.
Целесообразно составить простую программу, которая сохраняет в файле или распечатывает результаты выполнения запроса 4FOOh, включая список видеорежимов, и учитывать эти результаты при программировании. Запрос характеристик видеорежимов. В начале выполнения любой графической задачи обязательно вызывается другая информационная функция, которая возвращает данные, необходимые для настройки на работу с конкретной видеокартой. Здесь описана структура информационного блока, а процессу настройки посвящена специальная глава 2.
Функция 4F01h Get SuperVGA Mode Information позволяет получить информацию о любом из поддерживаемых видеорежимов независимо от того, установлен он или нет. Ее целесообразно вызывать до попытки установить режим, т. к. полученные данные позволяют определить, поддерживает видеокарта работу в нужном режиме или нет, и выполнить ряд подготовительных действий.
Перед вызовом в регистрах es:di указывается адрес массива размером в 256 байтов (как и для функции 4FOOh), а в регистр сх помещается код инте- ресующего вас режима. Если видеокарта содержит VBE, то при возврате в регистре ах записан код 4Fh. Если режим не поддерживается, то признак ошибки не вырабатывается, просто очищаются все поля табл. 1.2.
Результатом исполнения запроса является структура данных, приведенная в табл. 1.2. В первом столбце таблицы указаны смещения полей от начала массива, адрес которого находится в регистрах es:di. Второй столбец содержит размеры полей в байтах. Для примера в трех последних столбцах показаны значения величин, формируемых видеокартой VIRGE /DX /GS семейства S3 при запросе характеристик режимов 10lh (640x480, 256 цветов), 11оh (640x480, 32К) и H2h (640x480, 16М цветов). В шести случаях последние столбцы слиты в один это означает, что данные в соответствующих полях зависят не от режима, а от характеристик видеокарты.