Основные функции VBE 1.2
BIOS, соответствующая стандарту VBE 1.2, кроме двух информационных, поддерживает еще семь функций, которые описаны в данном разделе.
Установка и чтение режима
Любая графическая задача устанавливает тот видеорежим, на работу с которым она рассчитана. Для этой цели в состав VBE включена специальная функция. Перед ее вызовом целесообразно выполнить функцию 4F01H и проверить возможность работы в выбранном вами режиме, способ проверки описан в Главе 2.
Функция 4F02h Set SuperVGA video Mode устанавливает видеорежим VESA, его код перед вызовом функции помещается в регистр bх. Обычно при установке режимов видеопамять очищается и экран оказывается черным. Если в регистре bх установить старший (15-й) разряд, то видеопамять не очищается. Сохранение содержимого видеопамяти может быть полезным (и применяется) в некоторых специальных случаях, но не забывайте, что при смене видеорежима картинка на экране изменяется до неузнаваемости.
Начиная с VBE 2.0, используется 14-й разряд регистра bx. Он должен быть очищен, если задача выполняется в реальном (16-разрядном) режиме работы микропроцессора, и установлен, если задача выполняется в защищенном (32-разрядном) режиме. При установке 14-го разряда возможность работы с окнами обычно исключается, поскольку доступно все пространство видеопамяти. Подробнее об этом сказано в разделе далее.
Функция универсальна в том отношении, что позволяет устанавливать не только режимы VESA, но и режимы IBM. Коды режимов VESA имеют значения от lOOh и выше. Обнаружив в регистре bx код с меньшим значением, функция 4F02h вызывает стандартную процедуру BIOS, предназначенную для установки режимов IBM (обычно ее использует функция 0 прерывания int 10h).
Как уже говорилось ранее, при установке режима код VESA заменяется кодом OEM, который записывается в байт с абсолютным адресом 449h, относящимся к области данных BIOS.
Специальная функции для завершения работы в режиме VESA не предусмотрена – она просто не нужна. В этом случае либо устанавливается новый видеорежим (стандартный или VESA), либо завершается выполнение задачи и DOS выполняет все необходимые действия по восстановлению исходного (текстового) видеорежима.
Функция 4F03h Get Current video Mode позволяет определить код установ-ленного (текущего) режима VESA, который возвращается в регистре bx. Функция введена по той причине, что в байте 44вь хранится код OEM. Исполнение запроса 4F03 сводится к чтению кода OEM из указанного байта и преобразованию его в код VESA по таблице соответствия, которая обязательно входит в состав BIOS.
Сохранение и восстановление состояния
Имеется в виду сохранение текущего содержимого регистров цвета видеокарты (DAC) и некоторых величин, хранящихся в области данных BIOS. Напомним, что регистры DAC используются только при работе в режимах packed pixel graphics.
Функция 4F04h Save/Restore Video State выполняет Копирование вышеназванных званных величин в указанный массив или, наоборот, из указанного массива в регистры DAC и в область данных BIOS. Кроме того, она позволяет определить размер массива, необходимый для размещения сохраняемых величин. Перед вызовом функции заполняется несколько регистров, каких – это зависит от запрашиваемого действия.
Обязательно заполняются регистры сх и dx. В регистре сх используются 4 младших разряда, установка каждого из которых определяет группу сохраняемых или восстанавливаемых величин:
- бит 0 – характеристики оборудования из области данных BIOS;
- бит 1 – характеристики видеорежима из области данных BIOS;
- бит 2 – содержимое регистров DAC;
- бит 3 – содержимое регистров.
В регистре dx указывается код запрашиваемого действия:
- 0 – определить размер буфера для размещения сохраняемых величин;
- 1 – сохранить состояние;
- 2 – восстановить ранее сохраненное состояние.
Если регистр dx очищен, то регистры их и еs не заполняются. После исполнения запроса в их находится количество байтов памяти, которое надо выделить для сохранения указанных в сх групп величин. Теперь можно выбрать расположение массива в памяти и запросить сохранение состояния.
Если в dx задан код 1 или 2, то в паре регистров es:bx указывается полный адрес массива, в котором надо сохранить или из которого нужно восстановить ранее сохраненные величины.