Прерывание 10h: службы ROM BIOS для видеодисплея
Все видеослужбы ROM BIOS запрашиваются с помощью прерывания 10h (в десятичной нотации 16). Имеется 25 основных служб, предоставляемых данным прерыванием. Подобно всем другим службам ROM BIOS видеослужбы нумеруются, начиная с 00h, и выбираются с помощью занесения номера службы в регистр AH. Обычно при работе с этими службами требуется задавать дополнительные параметры в регистрах AL, BX, CX или DX.
Служба 0: установить режим выдачи изображения
Служба 0 используется для выбора одного из четырнадцати режимов выдачи, показанных в таблице. Режимы с 0h по 6h применимы для стандартного цветного графического адаптера (CGA); режим 7h применяется для монохромного режима (MDA); режимы с 0Dh по 10h были добавлены для улучшенного графического адаптера (EGA); наконец, режимы 11h - 13h были внедрены на многоцветном графическом массиве (MCGA) (PS/2 моделей 25 и 30) и видеографическом массиве (VGA) (PS/2 моделей 50, 60 и 80).
Обычно при установке режима ROM BIOS чистит буфер памяти экрана, даже если снова и снова устанавливается один и тот же режим. Такая повторная установка того же самого режима может быть использована как простой и эффективный способ очистки экрана. В некоторых версиях DOS команда CLS фактически чистит экран с помощью данного способа. Установка видеорежима приводит также к установке принятых по умолчанию значений цветов цветовой палитры, поэтому при очистке экрана не используйте службу 0, если вы работаете с цветами, вместо этого применяйте видеослужбу 6.
При наличии адаптеров EGA,MCGA и VGA вы можете также дать указание ROM BIOS не очищать экран при установке видеорежима. Для этого к номеру режима, задаваемому вами в регистре AL, прибавьте число 80h (в десятичной нотации 128), что соответствует добавлению 1 в бит 7.
Значения регистров для службы установки видеорежима 0h
Номер службы Параметр
AH = 0 AL = номер режима
Таблица. Видеорежимы, устанавливаемые с помощью
видеослужбы ROM BIOS
--------------------------------------------------------------
Режим Тип Разрешающая Число Видеопод-
способность цветов системы
--------------------------------------------------------------
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
08h,09h,0Ah Только для PCjr
0Bh,0Ch Внутренние режимы BIOS
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
Например, следующий фрагмент очистит экран и установит видеорежим 3:
MOV AX, 0003h
INT 10h
Служба 6: прокрутить окно вверх
Служба 06h (в десятичной нотации 6) и ее напарник служба 07h (в десятичной нотации 7) используются для задания на экране прямоугольной области текстового окна и прокручивания его содержимого вверх или вниз на одну или более строк. Для достижения эффекта прокрутки в нижнюю часть окна службой 06h вставляются пустые строки (служба 07h вставляет пустые строки в верхнюю часть окна); при этом верхние строки окна (нижние - в случае службы 07h) смещаются и исчезают с экрана.
Число строк, подлежащих прокрутке, задается в регистре AL. При AL = 00h окно очищается полностью (то же самое произойдет, если мы прокрутим больше строк, чем позволяет размер окна). Положение и размер окна задается в регистрах CX и DX: CH содержит верхнюю строку, а DH - нижнюю строку; CL - левую колонку, а DL - правую колонку. Атрибуты для новых пустых строк в обеих службах, задаются в регистр BH. Ниже суммируется порядок задания значений регистров для обеих служб (06h и 07h).
Значения регистров для служб прокрутки окон 06h и 07h
Номер службы Параметры
AH = 06h AL = число строк, подлежащих прокрутке
(прокрутка CH = номер строки для верхнего лев. угла
вверх)
AH = 07h CL = номер колонки для верх. левого угла
(прокрутка DH = номер строки для нижнего прав. угла
вниз)
DL = номер колонки для ниж. правого угла
BH = атрибут для выдачи пустых строк
Служба 7: прокрутить окно вниз
Служба 07h (в десятичной нотации 7), как мы уже упоминали, является зеркальным отображением службы 06h. Различие между этими двумя службами состоит в том, как происходит прокрутка. При выполнении службы 07h новые пустые строки появляются в верхней части окна, а старые строки исчезают со стороны его нижней части. (При выполнении службы 06h имеют место противоположные изменения.)
Служба 02h: установить положение курсора
Служба 02h (в десятичной нотации 2) устанавливает позицию курсора, используя координаты строки и колонки экрана. В текстовых режимах, где может быть несколько страниц изображения, каждая из них имеет независимо записываемую позицию курсора. Хотя в графических режимах и нет видимого курсора, в них логическое положение курсора поддерживается тем же способом, что и в текстовых режимах. Эта логическая позиция курсора используется для управления вводом/выводом символов по аналогии с текстовым режимом.
Для задания позиции курсора номер строки помещается в регистр DH, номер колонки в DL, а номер страницы в BH. Нумерация строк и колонок начинается с координат 0,0 в левом верхнем углу экрана. В графических режимах для идентификации положения курсора используются координаты строки и колонки пикселов вместо координат для знака. Номер страницы - это обычный номер страницы изображения, используемый в Бэйсике: страницы от 0 до 7 в 40-колонных режимах и от 0 до 3 в 80-колонных режимах. В графических режимах номер страницы должен быть установлен в 0.
Сведения о задании регистров даны ниже.
Значения регистров при установке положения курсора
с помощью службы 02h
Номер службы Параметры
AH = 02h DH = номер строки
DL = номер колонки
BH = номер страницы