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