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

Основные функции 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 указывается полный адрес массива, в котором надо сохранить или из которого нужно восстановить ранее сохраненные величины.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.