Vesa 1.2
6. Расширение VGA BIOS
Определено несколько новых вызовов BIOS для поддержки режимов Super VGA. Для достижения максимума совместимости со стандартным VGA BIOS эти вызовы сгруппированы в одной функции. Номер этой функции передается в обработчик int 10h на регистре AH.
Номер расширенной функции Super VGA установлен равным 4Fh. Функция с таким номером до настоящего времени не использовалась в большинстве, если не во всех, реализациях VGA BIOS. Стандартный VGA BIOS при вызове функции 4Fh не выполняет никаких действий. Super VGA стандарт VS900602 определяет подфункции с номерами от 00H до 07H. Подфункции с номерами от 08H до 0FFH зарезервированы для будущего использования.
6.1 Информация о состоянии
Каждая функция возвращает информацию о состоянии на регистре AX. Установлен следующий формат слова состояния:
AL == 4Fh: Функция поддерживается AL != 4Fh: Функция не поддерживается AH == 00h: Функция выполнена успешно AH == 01h: Ошибка при вызове функции
Программное обеспечение должно трактовать ненулевые значения AH, как наличие ошибки. В последующих версиях VESA BIOS Extension возможно будут определены новые коды ошибок.
6.2 Функция 00h - Вернуть Super VGA информацию
Цель этой функции состоит в том, чтобы снабдить вызывающую программу информацией об общих возможностях Super VGA среды. Функция заполняет структуру информационного блока по адресу, указанному вызывающей программой. Размер информационного блока составляет 256 байтов.
Вход: AH = 4Fh Поддержка Super VGA AL = 00h Возврат Super VGA информации ES:DI = Указатель на буфер Output: AX = Состояние Все другие регистры сохраняются
Информационный блок имеет следующую структуру:
VgaInfoBlock struc VESASignature db 'VESA' ; 4 байта сигнатуры VESAVersion dw ? ; номер версии VESA OEMStringPtr dd ? ; указатель на строку ; идентификации видеоплаты Capabilities db 4 dup (?) ; возможности среды Super VGA VideoModePtr dd ? ; указатель на поддерживаемые ; режимы Super VGA TotalMemory dw ? ; Число 64kb блоков на плате Reserved db 236 dup (?) ; Остаток VgaInfoBlock VgaInfoBlock ends
Поле VESASignature содержит символы 'VESA', если этот блок корректен.
VESAVersion является двоичным полем, в котором указан номер версии стандарта VESA, соответствующий Super VGA BIOS. Старший байт указывает основной номер версии, а младший - вспомогательный. Текущий номер версии VESA равен 1.2. Прикладным программам, рассчитанным на использование возможностей определенной версии, гарантируется работа в последующих версиях. В дальнейшем VESA BIOS Extension будет обновляться с сохранением совместимости.
Поле OEMStringPtr является длинным указателем на строку идентификации конкретной видеоплаты, которая заканчивается символом NULL. Эта строка может использоваться аппаратно зависимыми драйверами устройств для идентификации видео чипа, видеоплаты, конфигурации памяти и т.д. Никаких ограничений на формат этой строки не накладывается.
Поле Capabilities описывает какие общие возможности поддерживаются видео средой. Его биты определены следующим образом:
D0 = возможность переключения DAC 0 = DAC имеет фиксированную ширину по 6 бит на каждый основной цвет 1 = ширина DAC переключается D1-31 = зарезервировано
VideoModePtr указывает на список поддерживаемых номеров Super VGA режимов (как определенных VESA, так и специфичных для конкретной платы). Каждый номер режима занимает одно слово (16 бит). Список номеров режимов заканчивается -1 (0FFFFh). Описание номеров режимов VESA см. в разделе 2 настоящего документа. Указатель может ссылаться на ПЗУ или ОЗУ в зависимости от особенностей реализации. Список может быть либо статической строкой, хранящейся в ПЗУ, либо генерироваться в процессе выполнения программы в информационном блоке (см. выше) в ОЗУ. Ответственность за проверку реализуемости любого из этих режимов возложена на прикладную программу. Она может быть выполнена по информации, возвращаемой при вызове функции 1 (возврат информации о режиме Super VGA). Некоторые из возвращенных режимов могут быть недоступны при конкретной комплектации памятью или монитором.
Поле TotalMemory указывает число блоков памяти, установленных на плате VGA. Его значение выражается числом 64kb блоков памяти, установленных в данный момент.