Графические устройства

         

Установка и чтение режима



Установка и чтение режима

Любая графическая задача устанавливает тот видеорежим, на работу с которым она рассчитана. Для этой цели в состав 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.



Содержание раздела