Прерывание 10h: службы ROM BIOS для видеодисплея

воскресенье, 25 апреля 2010 г. Автор: Vadim

 

Все видеослужбы 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 = номер страницы

Предлагаю ознакомиться с аналогичными статьями:



Отправить комментарий