Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВМиС - Готовые шпоры.doc
Скачиваний:
145
Добавлен:
15.09.2014
Размер:
1.75 Mб
Скачать

58. Прерывания видеосистемы.

Работа с видеоадаптером может осуществляться тремя способами:

• На уровне MS-DOS с использованием функций прерывания 21h;

• На уровне BIOS с использованием функций прерывания 10h;

• Непосредственным доступом в видеопамять.

Самым скоростным способом вывода информации на экран считается непосредственный доступ к портам и видеопамяти. Этот способ самый быстрый, но он и требует больше труда программиста.

Использование функций BIOS предпочтительней, так как это безопасней и надежнее. Таким образом, если были заданы некорректные значения параметров, функции BIOS не выполнят никаких действий. Драйверы MS-DOS сами используют функции BIOS для вывода информации на экран.

Использование функций 10-го прерывания BOIS.

Рассмотрим описание некоторых функций 10 прерывания BIOS, которая предназначена для работы с видеоадаптером.

• 00h - Выбор режима работы

• 01h - Изменение формы курсора

• 02h - Изменение положения курсора

• 03h - Определение положения и формы курсора

• 05h - Изменение активной страницы видеопамяти

•06h - Свертка текстового окна вверх

• 07h - Свертка текстового окна вниз

• 08h - Чтение символа и его атрибутов

• 09h - Запись символа с атрибутами в текущей позиции курсора

• 0Ah - Запись символа в текущей позиции курсора

• 0Ch - Вывод пиксела

• 0Dh - Чтение пиксела

• 0Eh - Определение текущего режима работы видеоадаптера

Функция 00h (Выбор режима работы)

Функция 00h прерывания 10h устанавливает заданный режим Х работы видеоадаптера:

На входе:

• AH = 00h;

• AL = номер устанавливаемого режима работы видеоадаптера, если бит D7 = 1, то при установке режима видеопамять не очищается;

На выходе: Не используются.

Пример:

_AH = 0x00;

_AL = Х;

geninterrupt(0x10);

Функция 02h (Изменение положения курсора)

Функция 02h задает текущее положение курсора на экране дисплея.

Если видеопамять разделена на несколько страниц, то каждая из них имеет свой курсор, координаты которого можно устанавливать отдельно.

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

На входе:

o AH = 03h - определение размеров и координат курсора;

o BH = номер страницы видеопамяти.

На выходе:

o CH = верхняя граница курсора;

o CL = нижняя граница курсора;

o DH = позиция текущей строки курсора;

o DL = позиция текущего столбца курсора.

Функция 05h (Изменение активной страницы видеопамяти)

Функция 05h позволяет изменить активную страницу видеопамяти. Активная страница видеопамяти отображается на экране.

На входе:

o AH = 05h - выбор активной страницы видеопамяти;

o AL = номер страницы видеопамяти, которая станет активной.

На выходе: Не используются.

Функция 06h (Свертка текстового окна вверх)

Свернуть активное окно экрана вверх (при работе в текстовом режиме) можно при помощи функции 06h. Окно задается координатами верхнего левого и нижнего правого углов. При свертке окна снизу появляются новые пустые строки (строки, заполненные пробелами), а верхние строки исчезают. Область экрана вне окна не изменяется.

На входе:

o AH = 06h - свертка окна вверх;

o AL = число прокручиваемых линий, если оно равно нулю, то окно прокручивается целиком;

o BH = атрибут, используемый для строк, возникающих снизу окна;

o CH = номер строки верхнего левого угла окна;

o CL = номер колонки верхнего левого угла окна;

o DH = номер строки нижнего правого угла окна;

o DL = номер колонки нижнего правого угла окна;

На выходе: Не используются.

Функция 08h (Чтение символа и его атрибутов)

Данная функция позволяет прочитать символ и его атрибуты из позиции экрана, определенной текущим положением курсора. После выполнения функции ASCII-код считанного символа присваивается переменной х. Чтение можно производить как из активной, так и из неактивных страниц памяти:

На входе:

o AH = 08h - чтение символа и его атрибутов;

o BH = номер страницы видеопамяти.

На выходе:

o AL = ASCII-код символа;

o AH = байт атрибутов символа.

Функция 09h (Запись символа с атрибутами в текущей позиции курсора)

Функция позволяет записать один или несколько одинаковых символов с атрибутами в текущей позиции курсора. При этом запись может происходить как в активную, так и в неактивные страницы видеопамяти. После выполнения операции записи положение курсора не изменяется. Управляющие символы, такие как возврат каретки и перевод строки, не действуют и записываются, как обычные символы. Данная функция работает как в текстовых, так и в графических режимах.

На входе:

o AH = 09h - запись символа с атрибутом;

o AL = ASCII-код записываемого символа;

o BH = номер страницы видеопамяти;

o BL = атрибут (для текстового режима) или цвет (для графического режима);

o CX = число записываемых символов.

На выходе: Не используются.

Вывод пиксела - функция 0Ch

Функция используется в графических режимах для записи пиксела заданного цвета в любую страницу видеопамяти. У видеоадаптера CGA в графических режимах определена только одна страница видеопамяти. Значения цветов, которые можно использовать в различных режимах вспоминаем.

Формат вызова функции 0Ch:

На входе:

o AH = 0Ch - запись пиксела;

o AL = номер цвета;

o BH = номер страницы видеопамяти (для CGA не используется);

o CX = координата X;

o DX = координата Y;

На выходе: Не используются.

Если бит 7 регистра AL содержит единицу, то новый пиксел накладывается на текущее содержимое экрана по логике булевой операции XOR. Если он содержит 0, то переданное значение кода цвета переопределяет текущий код цвета пиксела на экране.

Начало системы координат находится в левом верхнем углу экрана, а оси координат направлены следующим образом: ось X - вправо, ось Y - вниз.