На главную страницу
Форум txt.version   




Статья :: SVGA Новые возможности VBE 2.0
  

Новые возможности VBE 2.0

Уже на момент публикации VBE 1.2 выпускались микропроцессоры, поддерживающие работу в защищенном (32-разрядном) режиме и существовало соответствующее программное обеспечение. Поэтому возникла необходимость в создании следующей версии, учитывающей особенности защищенного режима. Она была опубликована в ноябре 1994 года и получила название VBE 2.0. Интересно, что в этой версии были добавлены только две новые функции и внесены некоторые дополнения в ранее существовавшие, о них говорилось в предыдущем разделе.

Линейное пространство адресов

Защищенный режим отличается от реального тем, что не только данные, но и адреса содержат 32 разряда. Соответственно, размер адресуемого в командах пространства составляет 4 294 967 296 байтов или 4 Гбайт (4 биллиона байтов). У современных ПК реальный объем оперативной памяти намного меньше указанной величины, любой адрес оперативной памяти не только помещается в 32-разрядном регистре, но и не заполняет весь регистр, часть старших разрядов остается свободной.

Оперативная память занимает младшую часть всего пространства адресов, поэтому BIOS и область ввода-вывода перенесены в его старшую часть. Самые старшие адреса отведены для BIOS, например, при перезагрузке ПК происходит обращение к адресу FFFFFFF0II.

Видеопамять, как и оперативная, образует линейное пространство адресов, которое в документации VESA называется FFB (Flat Frame Buffer) или LFB
(Linear Frame Buffer). В Защищенном режиме возможен произвольный доступ к любым адресам видеопамяти без использования механизма переключения окон. Физический (абсолютный) адрес начала LFB хранится в поле 28h (см. табл. 1.2), он не зависит от видеорежима. В качестве примера в табл. 1.2 приведено значение FS000000H.

Содержимое следующих двух полей (2Ch и 3оh) зависит от видеорежима. Эти поля заполнены не у всех видеокарт, а в VBE з.о вообще объявлены резерв-
ными потому, что их содержимое можно легко вычислить. В поле 2Ch должна храниться сумма адреса начала LFB и размера рабочей области памяти. В поле зоь должна находиться разность между общим объемом видеопамяти и размером ее рабочей области.

Замечание
Напомним, что размер рабочей области вычисляется как произведение величин, указанных в полях 10h (размер строки в байтах) и I4h (количество строк) (см. табл. 1.2).

физический адрес нельзя использовать для работы с видеопамятью, он должен быть предварительно преобразован в линейный адрес. Способ такого преобразования и сегментный регистр, указываемый при работе с LFB, зависят от используемого задачей распределения памяти. Например, если применяется простая линейная (гладкая - flat) модель, то физический адрес просто уменьшается на базовый адрес области данных, а для доступа к любым адресам используется сегментный регистр DS.

Для того чтобы видеоконтроллер поддерживал работу с LFB при установке видеорежима (функция 4F02), в регистре bx кроме указания кода режима надо установить 14-й разряд, например, bx = 4ioih для установки режима lOih и разрешения работы с LFB.

В большинстве случаев после разрешения работы с LFB исключается возможность работы с окнами видеопамяти. При этом запросы функции 4F05h отвергаются и в регистре ah возвращается код ошибки 3. Но в литературе встречаются сведения о существовании видеокарт, без уточнения их названия, одновременно допускающих оба способа работы с видеопамятью.

Следует заметить, что поддержка LFB является самым существенным нововведением VBE 2.0. При работе с LFB исключается необходимость контроля адресов видеопамяти в задачах для определения моментов, когда надо изменять текущее окно. Это значительно упрощает и ускоряет манипуляции с графическими объектами.

Работа с регистрами палитры

В режимах packed pixel graphics коды цветов точек хранятся в регистрах палитры (их 256). Эти регистры недоступны обычным командам. Для записи или чтения их содержимого необходимо обращение к внутренним регистрам видеокарты.

В VBE 1.2 отсутствует специальная функция, выполняющая чтение или изменение содержимого регистров DAC палитры. Прикладные задачи могут использовать для этой цели стандартные функции IBM VGA, примеры работы с ними описаны в главе 4 данной книги.

VBE 2.0 такая функция введена. В отличие от функций IBM VGA она использует другой формат палитры, позволяет изменять содержимое блока регистров DAC во время обратного хода луча и поддерживает работу с дополнительным набором регистров палитры, если таковой имеется.

Функция 4F09h Get/Set Block DAC Registers позволяет сохранить или изменить текущую палитру цветов (содержимое блока регистров DAC). Код выполняемого действия указывается в регистре bl. При сохранении блока регистров bl=1, а при записи bl=о. В регистре сх задается количество сохраняемых или изменяемых регистров (размер блока), а в регистре dx - номер первого сохраняемого регистра (0 - 255).

Для размещения палитры в оперативной памяти надо выделить массив размером 4*N байтов, где N - размер блока, указанный в регистре сх (напомним, что он не может быть больше чем 256). Содержимое каждого регистра занимает 4 подряд расположенных байта, в первых трех находятся коды синего, зеленого и красного цветов, а четвертый очищен. Полный адрес массива задается в регистрах es-.di (es - сегмент, di - смещение).

Такое расположение базовых цветов принято в палитре формата BMP (см. приложение А данной книги). Отметим, что в формате BMP код базового цвета занимает 8 разрядов, а у большинства видеокарт он составляет 6 разрядов. Поэтому при использовании данной функции может потребоваться преобразование хранящихся в файле кодов базовых цветов. Подробнее об этом сказано в главе 4 данной книги.

Некоторые модели видеокарт содержат дополнительную группу регистров палитры. Для работы с дополнительной группой в регистре ы указываются коды 2 или 3 (вместо 0 или 1). Если дополнительная палитра отсутствует, то при возврате из BIOS в регистре ah находится код ошибки 2.

В некоторых моделях видеокарт содержимое регистров палитры можно изменять только во время обратного хода луча, в противном случае на экране появляются помехи ("снег"). Признаком такой особенности видеокарты является установка бита 2 в поле capabilities (см. описание функции 4F00h). В таком случае вместо кода 0 в регистре ы указывается 8оь.

Интерфейс защищенного режима. Большинство функций BIOS, в том числе и функций VEE, независимо от версии, рассчитано на выполнение в реальном (16-разрядном) режиме работы микропроцессора. Если задача выполняется в защищенном (32-разрядном) режиме, то для обращения к функциям BIOS необходим временный переход в реальный режим работы микропроцессора. Это увеличивает количество вспомогательных действий при вызове функций BIOS и замедляет процесс их выполнения. Замедление становится ощутимым, если функции вызываются часто.

Разработчики VBE 2.0 предусмотрели возможность непосредственного вызова процедур, дублирующих функции 4F05h, 4F07h и 4F09h, но рассчитанных на выполнение в защищенном режиме. Прикладная задача определяет адреса точек входа в указанные процедуры следующим способом.

Функция 4FOAh Return VBE 2.0 Protected Mode Interface Возвращает адрес массива, содержащего указанные выше процедуры и некоторые дополнительные данные. Перед ее вызовом надо очистить регистр bl. После исполнения запроса в регистры возвращаются следующие величины:

  • es - сегмент массива, расположенного в области BIOS в формате для реального режима (чаще всего код соооh);
  • di - адрес (смещение) начала массива в этом сегменте;
  • сх - размер массива в байтах.

Первые три слова массива es: [di+o], es-. [di+2] и es: [di+4] содержат адреса (смещения относительно начала массива) точек входа в процедуры, дублирующие функции 4F05h, 4F07h и 4F09h для защищенного режима.

Процедуры полностью перемещаемые, они могут выполняться как непосредственно в ROM BIOS, так и в оперативной памяти, разумеется, после предварительного копирования, для чего и нужен размер массива, возвращаемый в регистре сх.

Указанные процедуры должны вызываться как ближние, т. е. без смены сегментного регистра (см. приложение В данной книги). Если задача использует простую линейную модель памяти, то доступ к области BIOS происходит без смены сегментного регистра и нет необходимости копировать процедуры в оперативную память. Если же пространство адресов сегментировано, то процедуры надо скопировать в сегмент кодов. В таком случае их вызов будет происходить без смены сегментного регистра.

Фактически процедуры не являются полными аналогами функций, выполняемых в реальном режиме. Имеются следующие различия:

  • Аналог 4F05h поддерживает работу только с одним окном д.
  • Аналог 4F07h лишь устанавливает новое начало отображаемого участка видеопамяти, причем вместо номера строки и столбца при вызове указывается полный (32-разрядный) адрес начала отображаемой области. Его старшая часть помещается в регистр dx, а младшая - в сх.
  • Аналог 4F09h поддерживает только основной набор регистров DAC.

Кроме перечисленных функций описываемый массив может содержать перечень номеров портов видеокарты и адресов, которые задача может использовать для ввода и вывода данных. Если такой список присутствует, то его смещение относительно начала массива указано в слове es: [di+6].

Если это слово очищено, то списка в массиве нет. Для большинства программистов этот список не представляет интереса, поскольку не известно назначение указанных в нем портов и адресов. Стандарт VBE 2.0 оговаривает только способ их хранения в таблице, но не назначение.

Замечание
Целесообразность введения функции 4FOAh не очевидна, поэтому в версии VBE 3.0 она не относится к числу обязательных.

Программирование работы в защищенном режиме в данной книге не рассматривается. Если вас интересует этот вопрос, то советуем прочитать статьи Андрианова С. А. в журналах "Мир ПК", в них приведены простые примеры работы с описанными функциями. При наличии доступа
К Сети Internet подшивки этих журналов можно найти на www.opensystems.ru.

Заключительные замечания

Несмотря на небольшое число функций (11), их состав оказался вполне достаточным. Авторы версии VBE 3.0, которая опубликована в сентябре 1998 года, не ввели ни одной новой функции, а только расширили возможности существующих с учетом новейших достижений разработчиков видеокарт.

В разные годы ассоциация VESA выпустила несколько небольших документов с описанием функций специального назначения. Формально они не относятся к VBE и их описание отсутствует во всех стандартах. Даже авторы VBE 3.0 ограничились их перечислением и весьма лаконичным комментарием. Вот перечень этих функций без комментариев:

  • 4FiOh - Power Management Extension (PM) для стандарта DPMS;
  • 4Fiih - Flat Panel Interface Extension (FP);
  • 4Fi3h - Audio Interface Extension (AI);
  • 4Fi4h - OEM Extension, вводимые по усмотрению разработчиков;
  • 4Fi5h - Display Data Channel (DDC).

Функции с кодами 10h, I4h и ish были обнаружены автором при исследовании зюз видеокарт с версиями VEE 1.2 и VBE 2.0. Если вы умеете восстанавливать исходные тексты BIOS, то можно проверить, какие функции поддерживает интересующая вас видеокарта.

Общая характеристика стандарта VBE закончена и мы переходим к описанию программирования работы с графикой в иидеорежимах VESA.

  

SVGA Новые возможности VBE 2.0

страницы в данном разделе 
 SVGA Глава 1. Видеосистемы и стандарт VESA  SVGA Видеосистемы и стандарт VESA
 SVGA Видеосистемы и их стандартизация  SVGA Мониторы
 SVGA Видеокарты и стандарты  SVGA Акселераторы
 SVGA Общая характеристика стандарта VESA  SVGA Стандартизация видеорежимов.
 SVGA Информационные функции VBE  SVGA Основные функции VBE 1.2
 SVGA Новые возможности VBE 2.0   


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста