Главная страничкаИсходники программСтатьи и описанияПроекты и разработкаПолезные ссылкиЗадай вопрос, получи ответВыскажи свое мнениеПишите письма

Описание VESA  + разная, полезная информация

Описание основных функций VESA драйвера 
Вольный перевод
(все вместе кажется называется WHATVGA)

Вступление

Для того что-бы использовать ту или иную функцию VESA вам нужно установить регистры процессора в нужное значение и вызвать прерывание под номером 10h ($10)

Примерно это выглядит так

Uses DOS;
Var
    Rp:Register;
Begin
    Rp.Ax:=$13;
    Intr($10,Rp);
End.

После этого:         AL=$4F - Если функция поддерживается
                                AH - код выполнения операции
                                        00 - Усе окей
                                        01 - Облом
                                        02 - Ф-ция не поддерживаеться при текущей настройке экрана
                                        03 - Ф-ция не поддерживаеться текущем видеорежимом
                       
Теперь описание

4F00 - Получить информацию о VESA драйвере

Вход
    AX = $4F00
    ES:DI = Указатель на буфер куда копируем информацию о VESA

Формат буфера
Смещение Размер в байтах Описание
$00 4 Сигнатура, тип драйвер ('VESA' или 'VBE2')
$04 2 Версия VESA драйвера
$06 4 Указатель на OEM имя видео карты
$0A 4 Совместимость
Bit   0 - Установлен если DAC может изменять длину, т.е. больше 6 бит на компоненту
        1 - (VBE2) не VGA контроллер
        4 - (VBE2)  программируемый DAC через Blank Bit
$0E 4 Указатель на список поддерживаемых VESA и OEM видеорежимов, заканчивается на $FFFF
$12 2 Размер видео памяти в блоках по 64Kb
Далее следуют функции для VBE 2.0
$14 2 OEM версия
$16 4 Указатель на имя производителя
$1A 4 Указатель на имя продукта
$1E 4 Указатель на строку определения продукта
Остальное резерв

P.S. Размер буфера для большинства видео кат равен 256 байт, но иногда он бывает 262 байта, или 512 для VBE 2. Поэтому желательно сразу использовать буфер размером 512 байт, начало для них всех одинаковое.

4F01 - Получить информацию о VESA видеорежиме

Вход
    AX = $4F01
    CX = номер VESA видео режима
    ES:DI = Указатель на буфер куда копируем информацию о VESA (256байт)

Формат буфера
Смещение Размер в байтах Описание
$00 2 Атрибут режима
Bit 0-Режим поддерживается если установлен
      1-Optional информация доступна если бит установлен
      2-Вывод через BIOS доступен если установлен
      3-Если установлен то цветной, иначе монохромный
      4-Если установлен то графический, иначе монохромный
      5-Если установлен то (VBE2) не VGA режим
      6-Если установлен то (VBE2) не банковый режим
      7-Если установлен то (VBE2) поддержка линейного фреймбуфера
$02 1 Атрибут окна A
Bit 0-Установлен если доступно
      1-Чтение разрешено если установлен
      2-Запись разрешена если установлен
      3-7 - резерв
$03 1 Атрибут окна B (биты аналогичны окну A)
$04 2 Granularity окна в килобайтах
$06 2 Размер окна в килобайтах
$08 2 Сегмент окна A
$0A 2 Сегмент окна B
$0C 4 Адрес функции управления окнами (эквивалент AX=$4F05)
$10 2 Число байт на скан линию монитора
Далее идет информация только для VESA режимов (Optional информация)
$12 2 Ширина экрана в пикселях (WIDTH)
$14 2 Высота экрана в пикселях (HEIGHT)
$16 1 Ширина матрицы символа в пикселях
$17 1 Высота матрицы символа в пикселях
$18 1 Число слоев (memory planes)
$19 1 Чсило бит на пиксель
$1A 1 Число банков
$1B 1 Модель памяти
$1 - Текст
$2 - CGA графика
$3 - Hercules графика
$4 - EGA 16
$5 - 256 цветовой видеорежим
$6 - Не палитровый режим 15/16/24/32 бита на точку
$7 - YUV  (YIQ) видео режим
$8-$0F - Резерв для VESA
$10-$FF - Резерв для OEM
$1C 1 Размер банка в килобайтах
$1D 1 Число видео страниц (image pages)
$1E 1 Резерв
VBE 1.2+
$1F 1 Размер маски красной компоненты (сколько бит)
$20 1 Позиция маски красной компоненты (с какого бита)
$21 1 Размер маски зеленой крмпоненты
$22 1 Позиция маски зеленой компоненты
$23 1 Размер маски синей компоненты
$24 1 Позиция маски синей компоненты
$25 1 Размер маски резервной компоненты
$26 1 Позиция маски резервной компоненты
$27 1 Direct Screen mode
Bit 0 - если бит установлен то размер компонент программируется, иначе нет
      1 - если не установлен то резервное поле зачем-то нужно, иначе юзайте его на здоровье
VBE 2.0
$28 4 Физический адрес линейного буфера
$2C 4 Указатель на начало offscreen memory
$30 2 Размер Offscreen памяти
Остальное резерв

 

4F02 - Установить VESA видеорежим

Вход

    AX = 4F02h
    BX = номер видеорежима VESA
              Бит 15 говорит о том, что не нужно очищать видеопамять
              Бит 14 говорит (VBE2) о включении линейного фреймбуфера

Пример некоторых VESA видеорежимов
Номер режима Описание режима
$00-$FF OEM режимы, и через 4F02 не ставятся
$100 640x400x256
$101 640x480x256
$102 800x600x16
$103 800x600x256
$104 1024x768x16
$105 1025x768x256
$106 1280x1024x16
$107 1280x1024x256
$108 80x60 текст
$109 132x25 текст
$10A 132x43 текст
$10B 132x50 текст
$10C 132x60 текст
VBE 1.2+ режимы
$10D 320x200x15 Бит
$10E 320x200x16 Бит
$10F 320x200x24 Бит
$110 640x480x15 Бит
$111 640x480x16 Бит
$112 640x480x24 Бит
$113 800x600x15 Бит
$114 800x600x16 Бит
$115 800x600x24 Бит
$116 1024x768x15 Бит
$117 1024x768x16 Бит
$118 1024x768x24 Бит
$119 1280x1024x15 Бит
$11A 1280x1024x16 Бит
$11B 1280x1024x24 Бит
VBE 2.0
$81FF Специальный режим с доступом ко всей памяти

P.S. Эти видео режимы зачастую используются видеокартами, но каждая карта использует еще и свои режимы о которых вы можете узнать почитав спецификацию о карте, либо проведя сканирование видеорежимов при помощи функции $4F01

 

4F03 - Получить номер текущего VESA видеорежима

Вход

    AX = $4F03

Выход

    BX = Номер текущего видеорежима

4F04 - Сохранить, восстановить текущий статус видео карты

Вход

    AX = $4F04
    DL = Подфункция
              $00 Получить размер буфера
                      Возвращает : BX = размер буфера в блоках по 64 килобайта
              $01 Сохранить статус
                      ES:BX - указатель на буфер
              $02 Восстановить статус
                      ES:BX - указатель на буфер
                      CX - чего восстанавливать
                              Бит: 0 - Статус видео карты
                                      1 - Статус видео BIOS'а
                                      2 - DAC статус (палитра)
                                      3 - SVGA статус

4F05 - Управление видеопамятью

Вход

    AX = $4F05
    BH = Подфункция
                $00 Установка видео окна
                        DX = адрес окна в памяти (in granularity units)
                $01 Получить положение об окне
                        Возвращает: DX = адрес окна в видео памяти (in gran. units)
    BL = номер окна (0-A, 1-B)

4F06 - Установка логической длины скан-линии

Вход

    AX = $4F06
    BL = Подфункция
                00h Установить длину скан-линии
                                CX = длина в пикселях
                01h Получить длину скан-линии
                02h (VBE 2) установить длину скан-линии
                                CX = длина в байтах
                03h (VBE 2) Получить длину скан-линии

Выход

    BX = число байт на сканлинию
    CX = число пикселей на сканлинию
    DX = число сканлиний

P.S. Если длина линии обломна для адаптера, то он поставить следующую после нее ближнюю величину
А еще скан-линия может быть длиннее экрана, т.е. вылезать за него, при этом эта фишка прокатит даже для текстовых режимов, только как-то криво, там значение помножиться ширину символа

4F07 - Установка начала дисплея

Вход

    AX = $4F07
    BH = $00 (reserved)
    BL = $00 (or $80) Установить начало дисплея
                CX = Первый  левый пиксель (X)
                DX = Первая верхняя сканлинии (Y)
          = 01h Получить   начало дисплея

Выход

    BH = 00h
    CX = Первый  левый пиксель (X)
    DX = Первая верхняя сканлинии (Y)


P.S. :Эта функция доступна и в текстовых режимах, только значение множиться на ширину и высоту символов

4F08 - Работа с DAC (палитрой)

Вход

    AX = $4F08
    BL = Подфункция
            $00 Установить DAC длину палитры
                    BH = Число бит на цвет
            $01 Получить   DAC длину палитры

Выход

    AH = статус
    BH = Текущее число бит на цвет

4F09 - Получить/установить палитровый вход ??? (PALETTE ENTRIES)

Вход

    AX = $4F09
    BL = подфункция
            00h установить палитру
            01h получить палитру
            02h установить вторичную палитру
            03h получить
            80h Установка палитры с ожиданием обратного хода луча
    CX = число цветов для изменения
    DX = первый цвет
    ES:DI -> Палитровый буфер, по 4 байта на цвет, где:
            00h BYTE Красный
            01h BYTE Зеленый
            02h BYTE Синий
            03h BYTE Альфа канал

4F0A - Получить информацию для защищенного режима

Вход

    AX = $4F0A
    BX = какую функцию
                $0001 установка банка
                $0002 установка начала дисплея
                $0003 установка палитры

Выход


    CX = число байт для копирования
    ES:DI -> код требуемой функции

4F10 - DPMS - управление питанием монитора

Вход

    AX = $4F10
    BL = $00 указывает нп VBE/PM совместимость
            ES:DI = 0000h:0000h
            Выход     BH = Статус поддержки управления питанием:
                                        Bit 0 STAND BY поддерживается если установлен
                                              1 SUSPEND поддерживается если установлен
                                              2 OFF поддерживается если установлен
                                              3 REDUCED On поддерживается если установлен
                           (Не поддерживается в DPMS 1.0)
                           BL = VBE/PM Номер версии::
                                        Bit 0-3 Minor версия
                                              4-7 Major версия
   BL=$01 Установить режим дисплея
   BH = Че надо установить:
            00h ВКЛ
            01h STAND BY
            02h SUSPEND
            04h ВЫКЛ
            08h REDUCED ON (для flat screens)
            02h Получить текущую информацию о питании монитора
    Выход: BH = Информация о питании монитора
            00h ВКЛ
            01h STAND BY
            02h SUSPEND
            04h ВЫКЛ
            08h REDUCED ON (для flat screens)

 

4FFF - Включить, выключить VESA

Вход

    AX = $4FFF
    DL = новое состояние($00 Вкл, $01 Выкл)

Некоторые полезные функции INT $10

По идее далее пойдет речь не о VESA, но эти функции тоже могут пригодиться

00 - Установить OEM видео моду

Вход

    AH = $00
    AL = номер видео режима

Выход

    AL = флаг видеорежима  (Phoenix BIOS)
            20h режим > 7
            30h режим <= 7 except mode 6
            3Fh режим 6
    AL = режим CRT контроллера (Phoenix 386 BIOS v1.10)

P.S. стандартные IBM видео режимы не очищают видеопамять если 7 бит установлен (EGA или выше)

Типы некоторых видеорежимов
Номер Описание
$00 40x25 16 Mono Text
$01 40x25 16 Color Text
$02 80x25 16 Mono Text
$03 80x25 16 Color Text
$04 320x200 4 Mono
$05 320x200 4 Color
$06 640x200 2 Mono
$07 80x25 Mono Text
$0D 320x200 16 Color
$0E 640x200 16Color
$0F 640x350 2 Mono
$10 640x350 2 Color
$11 640x480 16 Mono
$12 640x480 16 Color
$13 320x200 256 Color

 

05 - Установить страницу

Вход

    AH = $05
    AL = номер страницы

0C - Нарисовать пиксель

Вход

    AH = $0C
    BH = Номер видеостраницы
    AL = Цвет пикселя
    CX = X
    DX = Y

0D - Получить пиксель с экрана

Вход

    AH = $0D
    BH = Номер видеостраницы
    CX = X
    DX = Y

Выход

    AL = Цвет пикселя

0F - Получить текущий видеорежим

Вход

    AH = $0F


Выход

    AL = Номер видеорежима
    AH = Число символов в строке
    BH = Активная страница

1003 - Переключение интенсивности, мигания для текстовых режимов

Вход

    AX = $1003
    BL = Новый режим
            $00 - Интенсивность фона
            $01 - Мигание фона

1010 - Установить регистр палитры

Вход

    AX = $1010
    BX = номер цвета
    CH = зеленый (0-63)
    CL = синий (0-63)
    DH = красный (0-63)

1012 - Установить несколько регистров палитры

Вход

    AX = $1012
    BX = первый цвет
    CX = сколько цветов копировать
    ES:DX -> указатель на таблицу размером 3*CX, т.е. на каждый цвет 3 байта

1015 - Прочитать регистр палитры

Вход

    AX = $1015
    BX = номер цвета

Выход


    CH = зеленый (0-63)
    CL = синий (0-63)
    DH = красный (0-63)

1017 - Прочитать несколько регистров палитры

Вход

    AX = $1012
    BX = первый цвет
    CX = сколько цветов копировать
    ES:DX -> указатель на таблицу размером 3*CX, т.е. на каждый цвет 3 байта

101B - Сделать палитру монохромной

Вход

    AX = $101B
    BX = первый цвет
    CX = последний цвет

11 - Текстовый символьный генератор

Вход

    AH = $11
    AL = $00, $10: Загрузить шрифт пользователя
        ES:BP -> указатель на таблице шрифтов пользователя
        CX = число символов
        DX = смещение символов в map 2 block
        BL = блок для загрузки в map 2
        BH = число байт на символ
    AL = $01, $11: Загрузить шрифт 8x14
        BL = блок для загрузки
    AL = $02, $12: Загрузить шрифт 8x8
        BL = блок для загрузки
    AL = $03: установить индификатор блока
        BL = индификатор блока
                (EGA) bits 0,1 = block selected by chars with attribute
                            bit 3=0
                            bits 2,3 = block selected by chars with attribute
                            bit 3=1
                (VGA) bits 0,1,4 = block selected by attribute bit 3 = 0
                            bits 2,3,5 = block selected by attribute bit 3 = 1
    AL = $04, $14: Загрузить шрифт 8x16
        BL = блок для загрузки

11 - Графический символьный генератор

Вход

    AH = $11
    AL = $20: установить шрифт пользователя 8x8
                ES:BP -> указатель на таблицу шрифтов пользователя
    AL = $21: Установить шрифт пользователя
                ES:BP -> указатель на таблицу шрифтов пользователя
                CX = байт на символ
                BL = row specifier
                        00h установка пользователя
                DL = число линий
                            $01 14 линий
                            $02 25 линий
                            $03 43 линии
    AL = $22: ROM 8x14
                BL = row specifier
    AL = $23: ROM 8x8
                BL = row specifier
    AL = $24: ROM 8x16
                BL = row specifier (see above)
    AL = $29: ROM 8x16
                BL = row specifier (see above)

1130 - Получить информацию о шрифтах

Вход

 
    AX = $1130
    BH = Что нужно
            00h INT 1Fh pointer
            01h INT 43h pointer
            02h ROM 8x14 character font pointer
            03h ROM 8x8 double dot font pointer
            04h ROM 8x8 double dot font (high 128 characters)
            05h ROM alpha alternate (9 by 14) pointer (EGA,VGA)
            06h ROM 8x16 font (MCGA, VGA)
            07h ROM alternate 9x16 font (VGA only)

Выход


    ES:BP = указатель на таблицу шрифтов
    CX = число байт на символ
    DL = число линий на символ на экране

12 - Выбор вертикального разрешения

Вход

    AH = $12
    BL = $30
    AL = Вертикальное разрешение
            00h 200 scan lines
            01h 350 scan lines
            02h 400 scan lines

Выход

AL=$12 если ф-ция поддерживается


Rambler's Top100