Вывод символов и пикселов на экран мы выполняли с помощью записи данных в память. Такое выполнение зависит от установленного режима, поэтому полезно знать сервисные функции для вывода данных на экран. Вызов этих функций осуществляется командами
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: сохранить или восстановить статус видеоподсистемы.