- •Видеосистема
- •Введение
- •Компоненты видеосистемы
- •Монитор
- •Область памяти дисплея
- •Видеоконтроллер
- •Видео-bios
- •Видеорежимы
- •Атрибуты
- •Функции прерывания iнт 10н
- •Функция 0н прерывания int10н: установка видеорежима
- •Функция 01н прерывания int10н: установка размера курсора
- •Функция 02н прерывания int10н: установка положения курсора
- •Функция 0зн прерывания int10н: получение состояния курсора
- •Функция 05н прерывания int10н: выбор активной страницы
- •Функция 06н прерывания int10н: прокрутка экрана вверх
- •Функция 07н прерывания int10н: прокрутка экрана вниз
- •Функция 08н прерывания int10н: считывание символа и его атрибутов в положении курсора
- •Функция 09н прерывания int10н: вывод том символа и атрибутов в положение курсора
- •Функция 0ан прерывания int10н: вывод символа в положение курсора
- •Непосредственный вывод на экран
Видеосистема
Цель: описать дополнительные возможности работы с дисплеем, включая прокрутку, инвертирование, установку режимов и атрибутов и использование графики.
Введение
В этой главе выполняется углубленное рассмотрение материала по работе с дисплеем. В первом параграфе описаны компоненты видеосистемы: Монитор, область видеоданных и видеоконтроллер. В следующем параграфе рассмотрены такие свойства дисплея, как режимы, атрибуты и страницы. Далее, в большом параграфе, посвященном прерыванию ВIОSINT10H, предназначенному для работы с дисплеем, описаны такие действия, как установка режима, установка курсора, прокрутка экрана, вывод символов и установка атрибутов.
В последних нескольких параграфах рассмотрены различные функции, используемые для вывода на экран графики, а также непосредственный вывод на дисплей и создание рамок меню.
В этой главе рассмотрены следующие функции INT10H:
00HУстановить видеорежим 0ВН Установить цветовую палитру
00HУстановить размер курсора 0СН Записать пиксель
02Н Установить положение курсора 00Н Прочитать пиксель
03Н Вернуть состояние курсора 0ЕН Записать в режиме телетайпа
05Н Установить активную страницу 0FН Получить текущий видеорежим
06Н Прокрутить экран вверх 10Н Обратиться к регистрам палитры
07HПрокрутить экран вниз 11HОбратиться к знакогенератору
08Н Прочитать символ/атрибут 12Н Выбрать альтернативную программу
09Н Вывести символ/атрибут 1ЗН Вывести строку символов
0AН Вывести символ 1ВН Вернуть видеоинформацию
Компоненты видеосистемы
Стандартные (или когда-то бывшие таковыми) адаптеры дисплея — это МDА (адаптер монохромного дисплея), СGА (цветной графический адаптер), ЕGА (улучшенный графический адаптер) иVGA(видеографический адаптер).VGAи последовавшие за ним различные системыSVGA(SuperVGA) полностью вытеснили ранее использовавшиеся. Вследствие общедоступностиVGA, в этой книге описывается только этот видеоадаптер.
Основные компоненты видеосистемы — это монитор, область видеоданных, видео-BIOSи видеоконтроллер. Другие встроенные устройства включают в себя знакогенератор, контроллер режима, генератор видеосигнала и декодер атрибутов. На рис. 9.1 показана взаимосвязь между этими устройствами.
Монитор
Экран монитора содержит набор близко расположенных друг к другу горизонтальных линий, называемый растром. Каждая линия состоит из сотен точек, называемых пикселями. Каждая из точек состоит из трех зерен люминофора — по одной для каждого из трех аддитивных цветов: красного, синего и зеленого.
Три электронных луча вызывают свечение этих зерен, формируя цвет пикселов. Лучи перемещаются по экрану вдоль строки слева направо и сверху вниз, начиная свое движение в каждом кадре с верхнего левого угла и заканчивая его в нижнем правом. Изменения в интенсивности лучей вызывают изменение яркости свечения люминофора и, соответственно, изменения в яркости пикселов. Различные сочетания интенсивностей трех основных цветов создают всевозможные цвета и оттенки.
Область памяти дисплея
Программа посылает данные — символы в текстовом режиме и пиксели в графическом — в область памяти дисплея (также называемую буфером) в оперативной памяти при помощи операций INTили, помещая данныё непосредственно в эту область памяти. Данные проходят довольно сложный процесс пре образования, перед тем как, наконец, выводятся на экран. Начальный адрес этой области зависит от типа видеоадаптера и выбранного режима. Прерывания, обслуживающие вывод на экран, передают ваши данные непосредственно в эту область памяти. Далее приводятся адреса начала сегментов для основных видео режимов:
A000:[0] используется для дескрипторов шрифтов в текстовом режиме и для графики высокого разрешения в видеорежимах от 0DHдо 13H;
B000:[0] — для монохромного текста в режиме 07Н;
B800:[0] — для текста и графики в рёжимах от 00Н до 06Н.
Схемы видеоадаптера непрерывно просматривают данные в видеообласти и в соответствии с ними обновляют экран. Данные в видеообласти могут быть символами таблицы ASCII(текстом) или графикой. В текстовом режиме каждый символ в видеообласти занимает два байта: один байт — для, собственно, кода символа, а второй — для определения его цвета и яркости. В графическом режиме в видеообласти хранятся группы битов, определяющие цвет и интенсивность каждого пикселя.
Область памяти дисплея позволяет хранить данные в страницах. Страница содержит данные для одного полного экрана, а всего страниц 8, с номерами от 0 до 7. Страница 0 всегда выбрана по умолчанию и, для текстовых режимов, начинается с адреса области памяти дисплея B800[0]. Страница 1 начинается с адреса В900[0], страница 2 — с адреса ВА00[0], страница 3 — с адреса ВВ00[0], и т.д.
Вы можете работать с любой страницей в памяти, но одновременно на экран выводится только одна страница. Как отмечалось выше, в текстовом режиме каждый выводимый на экран символ занимает два байта. Следовательно, одна страница занимает 80х25х2 = 4000 байт. В действительности для одной страницы выделяется область памяти размером 4 Кбайт (4096 байт). Так что за каждой страницей следует блок из 96 неиспользуемых байтов.