Низкоуровневое програмирование Главная - Реальный режим - Прерывания Bios - INT 10h: Видео сервис

INT 10h: Видео сервис

Здесь детализированы функции INT 10h стандартного видеосервиса ROM-BIOS.

AH сервис
00h Устанавливает видео режим. Очистить экран, установить поля BIOS, установить режим.

Вход:
AL=режим (приведены значения для VGA-совместимых адаптеров, для иных адаптеров параметры видеорежимов могут отличаться.
AL Тип Формат ЦветаАдрес Количество видеостраниц
0 текст 40x25 16 ч/б B8000h8
1 текст 40x25 16 B8000h8
2 текст 80x25 16 ч/б B8000h4
3 текст 80x25 16 B8000h4
4 графика320x2004 B8000h1
5 графика320x2004 ч/б B8000h1
6*графика640x2002 B8000h1
7* текст 80x25 2 B0000h1
0Dh*графика320x20016 A0000h8
0Eh* графика640x20016 A0000h4
0Fh* графика640x3502 A0000h2
10h* графика640x35016** A0000h1
11h* графика640x4802 A0000h1
12h* графика640x48016 A0000h1
13h*графика320x200256 A0000h1

Выход:
AL используется для диагностики ошибок. вот некоторые распространённые коды успешного выполнения:
0
20h - использован режим с номером больше 5
30h - код режим находится в диапозоне 0-5 или равен 7
3Fh - установлен шестой режим

Примечание:
* Этот режим может не поддерживаться
** На некоторых системах 4 цвета
На самом деле известных режимов великое множество, но большинство из них поддерживается только на некоторой конкретной аппаратной платформе или даже при наличии какой-то конкретной программы в памяти, поэтому я решил не описывать их здесь все.

Для установки режимов VESA BIOS Extension испульзуйте функцию 4Fh подфункцию 2 прерывания 10h
01hУстановить размер/форму курсора в текстовом режиме.Курсор, если он видим, всегда мерцает.

Вход:
CH:
    биты 0-4 : верхняя строка экрана, содержащая курсор
    бит  5 : 0 - курсор виден, иначе - не виден
    биты 6-7 : должен быть равным нулю
CL = нижняя строка экрана, содержащая курсор (0-1Fh, т.е. используются только биты 0-4)

Примечание:
Некоторые старые биосы требуют, что бы в AL был номер текущего видеорежима. Но это редкость.
Некоторые биосы используют тольео три бита для задания строки, но это редкость. Примеро может служить биос компьютера PEN*KEY-R 6400 Computer.
В графических режимах курсор нужно моделировать. Для этого можно использовать ASCII символ с кодом 0DFh (сплошной прямоугольник)
Строки экрана указываются как пиксели "внутри" символа
02h Устанавливает позицию курсора.

Вход:
BH = видео страница
DH = номер строки (считая от 0)
DL = номер столбца (считая от 0)

Примечание:
Некоторые биосы, в частности строго следующие спецификации Embedded BIOS 4.1, устанавливают AX в 0
Установка номера страницы производится при помощи функции 5h прерывания 10h
03h Узнать позицию и размер курсора

Вход:
BH = видео страница

Выход:
DH = текущая строка курсора (см. функцию 02H)
DL = текущий столбец курсора (см. функцию 02H)
CH = текущая начальная строка экрана, содержащая курсор (см. функцию 01H)
CL = текущая конечная строка экрана, содержащая курсор (см. функцию 01H)

Примечание:
Документация на PhoenixBios (rev6) гласит, что в CH возвращается конечная строка, а в CL начальная, однако, похоже, что это опечатка
Некоторые версии PhoenixBios, а так же биосы, строго следующие спецификации Embedded BIOS 4.1, устанавливают AX в ноль
04h Читать световое перо

Выход:
AH = триггер (0=нет значений; 1=возвращены значения светового пера)
DH,DL = строка,столбец символа (текст)
BX = столбец точки (графика)
CH = строка точки (для режимов, с количеством строк экрана больше 200 значение возвращается в CX)

Примечание:
Документация на PhoenixBios(rev6) не описывает эту функцию. возможно, она не поддерживается.
Эта функция не поддерживается на стандартных VGA видеоадаптерах.
Если функция не поддерживается, то в регистре AH должнен быть 0, но насколько боисы следуют этому правилу не известно.
Использовать эту функцию в настоящее время не рекомендуется
05h Выбрать активную страницу дисплея

Вход:
AL = номер страницы (Начиная с нуля)

Примечание:
На PCjr эта функция имеет другое значение.
06h Листать окно вверх (или очистить). Листать на 1 или более строк вверх.

Вход:
CH,CL = строка,столбец верхнего левого угла окна (считая от 0)
DH,DL = строка,столбец нижнего правого угла окна (считая от 0)
AL = число пустых строк, вдвигаемых снизу (0=очистить все окно)
BH = видео атрибут, используемый для пустых строк

Примечание:
Значение в BP может быть изменено.
На Trident TVGA8900CL (BIOS датированный 1992/9/8) DS обращается в нуль.
07h Листать окно вниз (вдвинуть пустые строки в верхнюю часть окна)

Вход:
CH,CL = строка,столбец верхнего левого угла окна (считая от 0)
DH,DL = строка,столбец нижнего правого угла окна (считая от 0)
AL = число пустых строк, вдвигаемых сверху (0=очистить все окно)
BH = видео атрибут, используемый для пустых строк

Примечание:
Значение в BP может быть изменено.
На Trident TVGA8900CL (BIOS датированный 1992/9/8) DS обращается в нуль.
08h Читать символ и атрибут в текущей позиции курсора

Вход:
BH = номер видео страницы

Выход:
AL = прочитанный символ (ASCII код)
AH = прочитанный видео атрибут (только для текстовых режимов)

Примечание:
На настоящем IBM PC значение в BP может быть изменено.
На адаптере Tandy 2000 в графических режимах в AH возвращается цвет точки
На некоторых клонах IBM PC значения регистров SI, DI и BP может быь изменено
09h Писать символ и атрибут в текущей позиции курсора

Вход:
BH = номер видео страницы
AL = записываемый символ (ASCII код)
CX = счетчик (сколько экземпляров символа записать)
BL = видео атрибут (текстовый режим) или цвет (графический режим)

Примечание:
При записи с помощью этой функции курсор не сдвигается!
В графических режимах не рекомендуется использовать значение CX, отличное от единицы, т.к. не везде правильно реализован повтор символа
Если программа работает под управлением PTS-DOS, то значения в BH, BL и CX могут быть проигнорированны
0Ah Писать символ в текущей позиции курсора

Вход:
BH = номер видео страницы (считая с нуля) , для видео режима 13h - цвет фона
AL = записываемый символ(ASCII код)
CX = счетчик (сколько экземпляров символа записать)

Примечание:
При записи с помощью этой функции курсор не сдвигается!
В графических режимах не рекомендуется использовать значение, отличное от единицы, т.к. не везде правильно реализован повтор символа
Если программа работает под управлением PTS-DOS, то значения в BH и CX могут быть проигнорированны
0Bh Настройки палитры

Вход:
BHПодфункция
0Цвет бордюра
BL = цвет бордюра (0-1Fh)

Примечание:
Для графических режимов - фонофый цвет, для текстовых - цвет бордюра.
1Выбор палитры
BL - код палитры (0 - RedGreenYellow, 1 - CyanMagnetaWhite)
0Ch Писать пиксель

Вход:
BH = номер видео страницы
DX,CX = строка,столбец , они же координаты x и y
AL = значение цвета

Примечание:
Только графический режим
При установленом бите 7 регистра AL точка будет иметь цвет, полученый в результате поразрядной операции XOR со старым цветом точки с координатами DX,CX
0Dh Читать пиксель

Вход:
BH = номер видео страницы
DX,CX = строка,столбец , они же координаты x и y

Выход:
AL = прочитанное значение цвета

Примечание:
Некоторые биосы игнорируют номер видеостраницы, переданный в BH и записывают точку в активную видеостраницу.
Только графический режим
0Eh Писать символ на активную видео страницу (эмуляция телетайпа)

Вход:
AL = записываемый символ (использует существующий атрибут)
BL = цвет фона (только в графических режимах)

Примечание:
Символы CR(0Dh) LF(0Ah) BELL(7) интерпритируются как управляющие. Атрубут устанавливается равным атрибуту текущего символа.
Некоторые ОЧЕНЬ старые БИОСы требуют, что бы в BH передавался номер активной видеостраницы. Впрочем, вы врядтли найдёте такие раритеты.
Спецификация Embedded BIOS 4.1 позволяет выбрать видеостраницу, на которую будет производится запись. Её номер ДОЛЖЕН быть передан в BH
На некоторых символах BP может быть изменён
0Fh Читать текущий видео режим

Выход:
AL = текущий режим (см. функцию 00h)
AH = число текстовых столбцов на экране
BH = текущий номер активной страницы дисплея

Примечание:
Не все Биосы возвращают корректное значение в AL
10h Установить регистры палитры для EGA. Работает при наличии EGA-совместимой карты.(включая VGA-совместимые)

Выбирает цвета, используемые данным атрибутом экрана. умалчиваемые цвета те же, что используются с CGA (см. атрибуты экрана ).

Вход:
AL Подфункция
0 Установить один регистр палитры

BL = регистр (идентифицирует 4-битовый цвет; 0-15)
BH = значение регистра (6-битовый rgbRGB выдаваемый цвет)

Примечание:
Существует недокументированная особенность этой функции - возможны значения вышё 15, однако менять эти регистры крайне не реккомендуется. В частности в RBIL приведена следующая информация:
 10h attribute mode control register (should let BIOS control this)
 11h overscan color register
 12h color plane enable register (bits 3-0 enable corresponding text attribute bit)
 13h horizontal PEL panning register
 14h color select register
1 Установить регистр рамки.

BH = значение регистра (6-битовый rgbRGB выдаваемый цвет)

Примечание:
На оригинальном IBM PC эта функция записывает данные в не правильный регистр
2 Установить все регистры палитры и регистр границы

ES:DX => 17 байт (регистры палитры (байты 0-15) и регистр границы (байты 16))

Примечание:
Некоторые Биосы не правильно работают, если BH не равен нулю
3 Выбрать яркость или мерцание

BL,бит7 = 0:яркость фона (16 возможных цветов фона)
BL,бит7 = 1: мерцание (8 цветов фона + мерцание переднего плана)

Примечание:
Некоторые Биосы не правильно работают, если BH не равен нулю
7Чтение регистра палитры

BL = номер читаемого регистра палитры (0-15).

Выход:
BH = содержимое регистра палитры.

Примечание:
необходима VGA-совместимая видеокарточка

Существует недокументированная особенность этой функции - возможны значения вышё 15. подробнее в подфункции 0
8Чтение регистра цвета рамки
необходима VGA-совместимая видеокарточка

Выход:
BH = содержимое регистра цвета рамки
9Чтение всех регистров палитры
ES:DX - указатель на 17-байтовую таблицу.(регистры палитры(байт 0-15) и регистр бордюра (байт 16))

Выход:
По адресу ES:DX содержится таблица, заполненная значениями из регистров палитры

Примечание:
необходима VGA-совместимая видеокарточка

Рекомендуется заполнить таблицу каким-либо известным вам значением, т.к. функция никак не сообщает о неудачном выполнении.
10h Установка одного регистра таблицы цветов (регистра ЦАП)
необходима VGA-совместимая видеокарточка

BX = номер регистра таблицы цветов (0-255);
DH = интенсивность красного цвета (6 бит);
CH = интенсивность зеленого цвета (6 бит);
CL = интенсивность синего цвета (6 бит).
12h Установка нескольких регистров таблицы цветов (регистров ЦАП)
необходима VGA-совместимая видеокарточка

BX = номер первого регистра таблицы цветов (0-255);
CX = число устанавливаемых регистров (1-256);
ES:DX - адрес записываемых данных. должен содержать cx блоков по три байта, где старший байт - интенсивность красного цвета, средний - залёного, младший - синего.
13hВыбор подмножества цветов
необходима VGA-совместимая видеокарточка
BL = 0 выбор режима:
BH = 0 : 4 подмножества из 64 цветов;
BH = 1 : 16 подмножеств из 16 цветов;
BL = 1 выбор активного подмножества:
BH = номер подмножества (0-4 или 0-15, в зависимости от установок, сделанных с помощью BL=0).

Примечание:
Функция не поддерживается в видеорежимах с номером 13h или больше.
15h Чтение регистра таблицы цветов (регистра ЦАП)
BL = номер читаемого регистра (0-255).

Выход:
DH = интенсивность красного цвета (6 бит);
CH = интенсивность зеленого цвета (6 бит);
CL = интенсивность синего цвета (6 бит);

Примечание:
необходима VGA-совместимая видеокарточка

На некоторых старых боисах функция изменяет значение регистра AX
17h Чтение нескольких регистров таблицы цветов (регистров ЦАП)
BL = номер первого регистра таблицы цветов (0-255);цы цветов (0-255);
CX = число считываемых регистров (ES:DX - адрес таблицы цветов (CX блоков по 3 байта);

Выход:
Данные в таблице по адресу ES:DX.

Примечание
необходима VGA-совместимая видеокарточка

Таблица цветов содержит по три байта на один регистр таблицы цветов. В каждом байте значащимии являются только младшие 6 бит. Старший байт - интенсивность красного цвета, средний - залёного, младший - синего.
18h Установить PEL-маску
необходима VGA-совместимая видеокарточка

BL = Новое значение PEL
19h Читать PEL-маску
необходима VGA-совместимая видеокарточка

BL = Значение PEL BL = Значение PEL
1AhОпределение режима подмножества цветов
необходима VGA-совместимая видеокарточка


Выход:
BL = 0 - используются 4 цветовых подмножества по 64 цвета;
       1 - используются 16 цветовых подмножеств по 16 цветов;
BH - номер подмножества, используемого в данный момент.
1BhУстановка палитры из градаций серого цвета
необходима VGA-совместимая видеокарточка

BX = номер первого регистра таблицы цветов (0-255);цы цветов (0-255);
CX = число модифицируемых регистров (1-256).

Примечание:
Регистр палитры:
биты 7 и 6 не используются
используемые биты:
     5 - r
     4 - g
     3 - b
     2 - R
     2 - G
     0 - B
По некоторым сведениям, эта функция разрушает содержимое регистров si, di, bp, sp, bx, ax. Так что при ее использовании следует соблюдать осторожность и в случае ошибок сохранять и затем восстанавливать упомянутые регистры
Документация на PhoenixBios (rev 6) не описывает эту функцию. возможно, она не поддерживается
11h Настройка знакогенератора
Необходима EGA или VGA совместимая видеокарточка
ALФункции
0Установка пользовательского шрифта

Вход:
BH - число байт на один символ
BL - Номер загружаемого блока (шрифта) знакогенератора (0-3 для CGA и 0-7 для VGA)
CX - Число загружаемых символов
DX - Номер первого загружаемого символа по таблице кодов символов (ASCII)
ES:BP - указатель на загружаемую таблицу

Примечание:
Только текстовый режим
Эта функция может полностью изменить контекст видеокарты, что может привести к смене видеорежима или сбросу иных параметров.
1 Установить стандартный шрифт 8х14

Вход:
BL - номер шрифта(0-3 для CGA и 0-7 для VGA)

Примечание:
Только текстовый режим
Эта функция может полностью изменить контекст видеокарты, что может привести к смене видеорежима или сбросу иных параметров.
2 Установить стандартный шрифт 8х8

Вход:
BL - номер шрифта(0-3 для CGA и 0-7 для VGA)

Примечание:
Только текстовый режим
Эта функция может полностью изменить контекст видеокарты, что может привести к смене видеорежима или сбросу иных параметров.
3Установка спецификатора блока шрифта
Только текстовый режим
Устанавливает 2 активных набора
Набор номер два используется если третий бит атрибута символа равен 1

Вход:
BL :
Для адаптеров EGA/MCGA
     биты 0-1 : первый блок(номер)
     биты 2-3 : второй блок(номер)
     биты 4-7 : не используется
Для адаптеров VGA+:
     бит 0,1,4 : номер первого блока
     биты 2,3,5 : номер второго блока
     биты 6-7 : не используются
4 Установить стандартный шрифт 8х16
Только текстовый режим
необходима VGA-совместимая видеокарточка

Вход:
BL - номер шрифта(0-4)
10h Загрузить пользовательский шрифт для текстового режима

Вход:
BH - число байт на один символ
BL - Номер загружаемого блока (шрифта) знакогенератора (0-3 для CGA и 0-7 для VGA)
CX - Число загружаемых символов
DX - Номер первого загружаемого символа по таблице кодов символов ASCII
ES:BP - указатель на загружаемую таблицу

Примечание:
Только текстовый режим
Активной видеостраницей должна быть страница номер 0
Эта функция может полностью изменить контекст видеокарты, что может привести к смене видеорежима или сбросу иных параметров.
Отличие от подфункции 0 в том, что выводимое изображение обновляется, а так же сбрасываются значения ряда регистров CRTC
11h Установить стандартный шрифт 8х14

Вход:
BL - номер шрифта(0-3 для CGA и 0-7 для VGA)

Примечание:
Только текстовый режим
Активной видеостраницей должна быть страница номер 0
Эта функция может полностью изменить контекст видеокарты, что может привести к смене видеорежима или сбросу иных параметров.
Отличие от подфункции 1 в том, что выводимое изображение обновляется, а так же сбрасываются значения ряда регистров CRTC
12h Установить стандартный шрифт 8х8

Вход:
BL - номер шрифта(0-3 для CGA и 0-7 для VGA)

Примечание:
Только текстовый режим
Активной видеостраницей должна быть страница номер 0
Эта функция может полностью изменить контекст видеокарты, что может привести к смене видеорежима или сбросу иных параметров.
Отличие от подфункции 2 в том, что выводимое изображение обновляется, а так же сбрасываются значения ряда регистров CRTC
14h Установить стандартный шрифт 8х16

Вход:
BL - номер шрифта(0-4)

Примечание:
Только текстовый режим
Необходима VGA-совместимая видеокарточка
Активной видеостраницей должна быть страница номер 0
Эта функция может полностью изменить контекст видеокарты, что может привести к смене видеорежима или сбросу иных параметров.
Отличие от подфункции 4 в том, что выводимое изображение обновляется, а так же сбрасываются значения ряда регистров CRTC
20h Установить пользовательский шрифт для графического режима

Вход:
ES:BP - 2048-байтовый шрифт 8х8, 8 байт на символ

Примечание:
Только графический режим
Функцию необходимо вызывать сразу после смены режима.
21hУстановить пользовательский шрифт для графического режима (настриаваемый)

Вход:
ES:BP - указатель на шрифт 8х8
CX - байт на символ
BL:
        0 : DL - кол-во строк в символе
        1 - 14 строк в символе
        2 - 25 строк в символе
        3 - 43 строки в символе

Примечание:
Только графический режим
Функцию необходимо вызывать сразу после смены режима.
22h Установить шрифт 8x14 для графических режимов

Вход:
BL:
        0 : DL - кол-во строк в символе
        1 - 14 строк в символе
        2 - 25 строк в символе
        3 - 43 строки в символе

Примечание:
Только графический режим
Функцию необходимо вызывать сразу после смены режима.
23Установить double-dot 8х8 шрифт для графических режимов

Вход:
BL:
        0 : DL - кол-во строк в символе
        1 - 14 строк в символе
        2 - 25 строк в символе
        3 - 43 строки в символе

Примечание:
Только графический режим
Функцию необходимо вызывать сразу после смены режима.
24Установить double-dot 8х16 шрифт для графических режимов

Вход:
BL:
        0 : DL - кол-во строк в символе
        1 - 14 строк в символе
        2 - 25 строк в символе
        3 - 43 строки в символе

Примечание:
Только графический режим
необходима VGA-совместимая видеокарточка
Функцию необходимо вызывать сразу после смены режима.
30hПолучить информацию о шрифте

Вход:
BH:
         0 - int 1fh адрес шрифта
         1 - int 44h адрес шрифта
         2 - адрес шрифта 8х14
         3 - адрес шрифта 8х8 double-dot
         4 - адрес 8х8 double-dot (старшие 128 сbмволов)
         5 - адрес шрифта 9х14
         6 - адрес шрифта 8х16
         7 - адрес шрифта 9х16 (толька VGA+)

Выход:
ES:BX - указывают на запрашиваемый шрифт
CX : байт на знак в шрифте, который используется для вывода на экран (а не в запрошенном шрифте!)
DL : наибольшая строка знака на экране (????)
12h Специальные функции
BLфункция
10h Информация о видео-карточке

Выход:
BH - Режим (0-цветной, 1-ч/б)
BL - Размер памяти (0 - 64Кбайт, 1 - 128Кбайт, 2 - 192Кбайт, 3 - 256Кбайт)
CH - зарезервировано
CL - настройки переключения

Примечание:
Необходима EGA или VGA совместимая видеокарточка
Если перед вызовом функции установить BH в значение, отличное от нуля и единицы, то если после вызова значение BH не изменилось - значит функция не поддерживается
20h Установить альтернативный обработчик события PrintScreen
Необходима EGA или VGA совместимая видеокарточка

Заменяет обработчик события PrintScreen на прошитый в графической карте.
30h Установить ко-во строк на видео-страницу

Вход:
AL = 0 : 200 строк
AL = 1 : 350 строк
AL = 2 : 400 строк

Выход:
AL=12, иначе функция не поддерживается.

Примечание:
Необходима VGA совместимая видеокарточка
Эфект появится только при следующей установке видеорежима
31h Управления палитрой
Определяет необходимость загрузки стандартной палитры при смене видео-режима

Вход:
AL=0 : загружать стандартную палитру
AL=1 : НЕ загружать стандартную палитру

Выход:
AL=12, иначе функция не поддерживается.

Примечание:
Необходима VGA совместимая видеокарточка
32h Доступ к видеопамяти

Вход:
AL=0 : включить доступ
AL=1 : выключить доступ

Выход:
AL=12, иначе функция не поддерживается.

Примечание:
Необходима VGA совместимая видеокарточка
33h Преобразование цветов в градации серого

Вход:
AL=0 : преобразование включёно
AL=1 : преобразование выключёно

Выход:
AL=12, иначе функция не поддерживается.

Примечание:
Необходима VGA совместимая видеокарточка
34h Управление пересчётом курсора
Определяет, должен ли BIOS автоматически пересчитывать параметры курсора

Вход:
AL=0 : пересчёт включён
AL=1 : пересчёт выключен

Выход:
AL=12, иначе функция не поддерживается.

Примечание:
Необходима VGA совместимая видеокарточка
35h Переключение между двумя видеоадаптерами

Вход:
AL:
   0 - выключить основной видеоадаптер
   1 - включить основной видеоадаптер
   2 - выключить дополнительный видеоадаптер
   3 - включить дополнительный видеоадаптер
ES:DX : 128-ми байтный буфер для контекста видеоадаптера.

Выход:
AL=12, иначе функция не поддерживается.

Примечание:
Необходима VGA совместимая видеокарточка
Включение одновременно двух видеоадаптеров может привести к значительным проблемам в системе, по этому строжайше запрещенно
36h Обновление экрана
Определяет, должна ли видео-карточка автоматически обновлять экран

Вход:
AL=0 : автоматическое обновление экрана включено
AL=1 : автоматическое обновление экрана выключено

Выход:
AL=12, иначе функция не поддерживается.

Примечание:
Необходима VGA совместимая видеокарточка
Обычно, при отключении обновления экрана с него исчезает всякое изображение
13H Писать строку.

Вход:
ES:BP => выводимая строка
CX = длина строки (подсчитываются только символы)
DH,DL = строка,столбец начала вывода
BH = номер страницы
AL = код подфункции:
   0 = использовать атрибут в BL; не трогать курсор
  1 = использовать атрибут в BL; курсор - в конец строки
  2 = После каждого знака записан атрибут, не трогать курсор
  3 = После каждого знака записан атрибут, передвинуть курсор

Примечание:
Необходима EGA или VGA совметимая видеокарточка.
Работает только на AT-совместимых компьютерах.

Cимволы 0dH(CarRet), 0aH (LineFeed), 08H (backspace) и 07H (Beep) трактуются как команды управления и не высвечиваются.
Документация на PhoenixBios (rev6) не описывает параметр BH. Возможно, значение BH игнорируется
Если программа работает под управлением PTS-DOS, то значения в AL, BH, BL, DH и DL могут быть проигнорированны
4Fh VBE
Подробнее на странице VBE