Иллюстрированный самоучитель по SVGA

Информационные функции VBE

В поле videoModePtr находится адрес начала списка видеорежимов, поддерживаемых картой. Первое слово поля содержит смещение, а второе сегмент. Список расположен в области BIOS, код каждого режима занимает одно слово. Признаком конца списка является код OFFFFh.

В поле TotalMemory указан установленный на видеокарте объем памяти, выраженный в блоках размером 64 Кбайт. 1 Мбайт соответствует 16 блокам (10h). На устаревших моделях видеокарт это поле может быть очищено. В каких случаях полезна описанная функция? Например, если графическая задача рассчитана на выполнение в защищенном (32-разрядном) режиме работы микропроцессора, то обязательно надо проверять номер версии VBE. Видеокарта может работать в таком режиме, если на ней реализованы функции VBE 2.0, НО НС 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М цветов). В шести случаях последние столбцы слиты в один это означает, что данные в соответствующих полях зависят не от режима, а от характеристик видеокарты.

Таблица 1.2. Информация, возвращаемая по запросу 4F0ih.

Адрес поля Размер поля Что хранится в поле Режим 101h Режим 110h Режим 112h
00 2 Атрибуты режима 009ВН OOQBh 009Bh
02 1 Атрибуты окна А 07
03 1 Атрибуты окна в 00
04 2 Размер ячейки окна в Кбайт 0040h
06 2 Размер окна в Кбайт 0040h
08 2 Код видеосегмента окна А AOOOh AOOOh AOOOh
OAh 2 Код видеосегмента окна в AOOOh AOOOh AOOOh
OCh 4 Адрес подпрограммы BIOS 556Ch COOOh
10h 2 Размер строки в байтах 0280h OSOOh OAOOh
12h 2 Размер строки в точках 0280h 0280h 0280h
14h 2 Количество строк на экране 01EOh 01EOh 01EOh
16h 1 Ширина символа (текст) 08 08 08
17h 1 Высота символа (текст) 10h 10h 10h
18h 1 Количество планов памяти 01 01 01
19h 1 Количество бит на точку 08 OFh 20h
1Ah 1 Количество банков видеопамяти 01 01 01
1Bh 1 Модель видеопамяти 04 06 06
1Ch 1 Размер банка в Кбайт 00 00 00
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.