6.3. Функции прерывания 10H

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

mov    ah, функция

int    10h

после записи параметров в регистры, где функция представляет собой число из диапазона от 0 до 1Ch.

Функция 0: установить видеорежим.

Вход: AL = номер видеорежима.

Данная функция устанавливает видеорежим с указанным номером, в соответствии с табл. 6.1.

Таблица 6.1

Номер режима

Тип

Разрешающая способность

Число цветов

Дисплей

00h, 01h

текстовый

40´25

16

CGA, EGA, MCGA, VGA

02h, 03h

текстовый

80´25

16

CGA, EGA, MCGA, VGA

04h, 05h

графический

320´200

4

CGA, EGA, MCGA, VGA

06h

графический

640´200

2

CGA, EGA, MCGA, VGA

07h

графический

80´25

монохромный

MDA, EGA, VGA

0Dh

графический

320´200

16

EGA, VGA

0Eh

графический

640´200

16

EGA, VGA

0Fh

графический

640´350

монохромный

EGA, VGA

10h

графический

640´350

16

EGA, VGA

11h

графический

640´480

2

MCGA, VGA

12h

графический

640´480

16

VGA

13h

графический

320´200

256

MCGA, VGA

При установке видеорежима, как правило, видеопамять очищается, поэтому очистку экрана можно выполнять с помощью повторной установки видеорежима. Эта функция приводит к установке принятых по умолчанию значений цветов. Если необходимо установить видеорежим, не очищая экран, то перед вызовом функции надо записать в AL сумму номера режима и числа 80h. ROM BIOS использует для программ обслуживания данные, записанные в память, начиная с адреса 400h. Эта область состоит

из двух блоков по 256 байт. В частности, номер видеорежима находится по адресу 449h. Текущий видеорежим можно определить функцией 0Fh.

Функция 1: установить размер курсора.

Вход:     CH – начальная строка сканирования,

              CL – конечная строка сканирования.

Курсор состоит из 16 сканируемых строк в стандартных текстовых режимах. Данная функция позволяет переустановить номера отображаемых строк. (По умолчанию для VGA значения CH = 13 и CL = 14.) Для номеров строк используются лишь младшие тетрады регистров CH и CL. Если установить CH = 20h, то курсор исчезнет. Другой способ удаления курсора с экрана – вывести его в несуществующую позицию, например в строку 30, столбец 1. В графических режимах курсор надо моделировать, например, с помощью знака 0DFh сплошного прямоугольника.

Функция 2: установить положение курсора.

Вход:     BH – экранная страница,

                        DH – номер строки (координата y),

                        DL – номер строки (координата x).

Каждая страница экрана может иметь собственное положение курсора. Номер страницы, которая в данный момент выводится на экран, устанавливается с помощью функции 5 (прерывания 10h).

Функция 3: прочитать координаты положения курсора.

Вход:     BH – экранная страница,

              CH – начальная строка сканирования,

                        CL – конечная строка сканирования,

                        DH – строка,

                        DL – столбец.

Сообщает размеры и координаты курсора на странице BH.

Функция 5: установить активную страницу экрана.

Вход:   AL – номер новой экранной страницы.

Функция используется для выбора страницы, которая будет отображаться на экране. В текстовых режимах 0-3 номер страницы принимает значения от 0 до 7. В графических 16-цветных режимах номер страницы изменяется в пределах 0-1 или 0-3.

Функция 6: прокрутить окно вверх.

Вход:     AL – число строк прокрутки,

              CH – номер строки для верхнего левого угла,

              CL – номер столбца для верхнего левого угла,

                        DH – номер строки для правого нижнего угла,

                        DL – номер столбца для правого нижнего угла,

              BH – атрибут изображения для пустых строк.

Функция 7: прокрутить окно вниз.

Входные параметры те же, что и для функции 6.

Функция 8: прочитать знак и атрибут.

Вход:     BH – номер активной страницы.

Выход:   AL – код символа ASCII, прочитанного по месту расположения курсора,

              AH – атрибут текстового знака.

Функция применяется для чтения знаков с экрана. Работает как в текстовом, так и в графическом режиме.

Функция 9: записать знак и атрибут.

Вход:     AL – код символа ASCII, прочитанного по месту расположения курсора,

              BL – значение атрибута (в текстовом режиме), цвет символа (в графическом режиме),

              BH – номер страницы экрана (кроме режима 3),

              CX – число экземпляров знака и атрибута, подлежащих записи.

Функция 0Ah: записать знак.

Вход:     AL – код ASCII, записываемый на экран,

              BL – цвет символа (для графических режимов),

              BH – цвет фона (для видеорежима 13h) или номер страницы (для остальных режимов),

              CX – число экземпляров знака и атрибута, подлежащих записи.

Эта функция в отличие от функции 9 не позволяет изменять текущий атрибут в текстовом режиме.

Функция 0Bh: установить 4-цветную палитру.

Вход:     BH = 00h,       BL – цвет фона, или

              BH = 01h,       BL – номер палитры (0 или 1).

В случае BH = 0 цвет фона может принимать значения от 00h до 0Fh. В случае BH = 1 можно выбрать одну из двух палитр, обеспечиваемых аппаратными средствами.

Функция 0Ch: записать пиксел.

Вход:     AL – цвет пиксела,

              BH – номер страницы экрана,

              DX – координата y,

              CX – координата x.

При установленном бите 7 в регистре AL пиксел будет иметь цвет, полученный в результате поразрядной операции XOR со старым цветом точки, имеющей координаты x = CX и y = DX.

Функция 0Dh: прочитать пиксел.

Вход:     BH – номер страницы экрана,

              DX – координата y,

              CX – координата x.

Выход:   AL – значение цвета пиксела.

Возвращает цвет точки, имеющей координаты (x, y). Действует в графических режимах.

Функция 0Eh: вывод символа в режиме телетайпа.

Вход:     AL – код ASCII символа,

              BL – цвет символа (в графическом режиме),

              BH – страница экрана (для ранних IBM PC).

Выводит символ на экран как на печатающее устройство, при необходимости переходя на новую строку или делая скроллинг вверх.

Функция 0Fh: получить текущий видеорежим.

Выход:   AL – номер текущего видеорежима,

              AH – число знаков в строке (80 или 40),

              BH – номер активной страницы.

Функция 10h: установка и чтение регистров палитры.

Вход:     AL – подфункция

              AL = 0 – установить один регистр палитры,

              AL = 1 – установить цвет окантовки экрана,

            AL = 2 – установить 16 регистров палитры и цвет окантовки,

              AL = 3 – установить яркость фона или атрибут мерцания,

              AL = 7 – прочитать значение регистра палитры,

              AL = 8 – прочитать регистр цвета окантовки,

              AL = 9 – прочитать значения 16 регистров палитры и регистра окантовки,

              AL = 10h – изменить указанный регистр цвета DAC.

AL = 0. Номер регистра палитры (который в функциях вывода символов и точек задается как параметр цвета) при вызове этой подфункции следует записать в BL, а новое значение регистра палитры – в BH. Подфункция AL = 7 выполняет обратную операцию – при вызове подфункции AL = 7 номер регистра палитры следует записать в BL, а в BH будет возвращаться текущее значение этого регистра палитры. Значение регистра палитры, состоящего из смеси Red красных, Green зеленых и Blue синих цветов, где Red, Green и Blue – целые числа, принимающие значения от 0 до 3, вычисляются по формуле

.

Здесь a % b обозначает остаток от деления a на b, a / b – целая часть дроби , a * b – произведение. Если Red состоит из битов Rr, Green – из Gg, Blue – из Bb, то значение регистра BH будет равно 00rgbRGB.

AL = 1. Часть экрана, лежащая вне рабочей области, называется окантовкой (или окаймлением). Эта часть не обязательно должна быть черной. При вызове данной подфункции значение цвета окантовки задается в регистре BH. Подфункция 8 возвращает в BH значение цвета окантовки.

AL = 2. Изменение значений всех регистров палитры и регистра окантовки. Перед вызовом данной подфункции следует записать новые значения регистров в 17-байтную таблицу (массив), а адрес этой таблицы передается с помощью регистров ES и DX. Подфункция 9 выполняет обратное действие, записывая регистры палитры и окантовки в массив, адрес которого находится в регистрах ES и DX.

AL = 3. Значение, переданное в регистре BL, определяет, будет ли мерцание задано (BL = 1) или отменено (BL = 0). При отмене мерцания цвет фона изменяется в диапазоне от 0 до 15. (В этом случае старший бит байта атрибута обозначает интенсивность цвета фона.)

AL = 10. Осуществляет изменение регистра, принадлежащего набору, состоящему из 256 регистров цвета цифроаналогового преобразователя (DAC или ЦАП). В BX задается номер регистра цвета. Значения красного, зеленого и синего цветов задаются соответственно в регистрах DH, CH и CL. Для чтения одного из регистров цвета следует записать номер регистра цвета в BX и вызвать подфункцию 15h, которая возвратит значения RGB в DH, CH и CL.

Функция 11h: загрузить набор символов, используемых в текстовых или графических режимах.

Функция 12h: выбор альтернативной программы печати экрана.

Функция 13h: записать строку знаков.

В зависимости от AL использует заданные атрибуты для записи строки с адресом ES:BP на экран. Длина строки задана регистром CX, начальная позиция – регистром DX, страница – регистром BH. Если AL = 0, то атрибуты берутся из регистра BL. Если AL = 2 или AL = 3, то на экран переписываются из строки байты, помещая в видеоп

амять сначала знак, а затем его атрибут. Если AL = 2, то курсор остается в первоначальной позиции. Если AL = 3, то курсор перемещается в положение за последним знаком выведенной строки.

Функция 1Ah: прочитать / записать код комбинации дисплея.

Возвращает двухбайтовый код, указывающий, какая комбинация видеоподсистем и видеодисплеев присутствует на данном компьютере.

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

Функция 1Ch: сохранить или восстановить статус видеоподсистемы.