Аппаратная реализация вывода текста или изображения на экран осуществляется видеомонитором, который включает в себя экран дисплея вместе с электронно-лучевой трубкой (ЭЛТ) или жидкокристаллической (ЖК) панелью, а также комплекс технических средств, обеспечивающих появление изображения на экране. В ЭЛТ при соударении пучка электронов с поверхностью экрана, покрытой люминофором, образуется светящаяся точка, которую называют пикселем. Электронный луч обегает экран слева направо и сверху вниз 25 раз в секунду, формируя множество близко расположенных пикселей. ЖК-панель представляет собой совокупность ЖК-ячек, каждая из которых генерирует один пиксель. Программист может управлять светимостью экрана в любом его месте вплоть до отдельного пикселя.
Наиболее важные электронные компоненты видеомонитора - это контроллер (схема управления электронно-лучевой трубкой или ЖК-панелью), порты ввода-вывода, запоминающее устройство для генерации символов и видеопамять. Эти компоненты располагаются на одной печатной плате, которая называется дисплейным адаптером.
Для получения на экране цветного изображения требуется, чтобы видеомонитор имел цветной адаптер и цветную ЭЛТ или ЖК-панель.
Изображение, выводимое на экран, предварительно формируется в видеопамяти. Эта память имеет два входа (два порта). Один порт используется сравнительно медленной программой для чтения или записи информации в видеопамять. Второй порт предназначен для быстродействующей схемы развертки изображения, обеспечивающей его регенерацию с частотой 25 гц.
Первый видеоадаптер (MDA), обладавший довольно скромными возможностями, появился в 1981 г. В дальнейшем его сменили все более совершенные модели (HEC, CGA, EGA, VGA, SVGA). Они отличаются друг от друга по количеству пикселей, объему видеопамяти, количеству цветов и другим параметрам. При этом в качестве стандартного режима вывода текста был принят режим, реализованный в адаптере CGA.
Типичный экран ПЭВМ имеет 200 строк по 640 пикселей в строке, т.е. 128000 пикселей. В монохромном режиме для каждого пикселя в видеопамяти требуется один бит, который определяет максимальную или минимальную яркость этого пикселя. Тогда видеопамять должна иметь объем 128000/8 = 16000 байт. В цветном мониторе каждый пиксель формируется как совокупность трех цветных точек: красной, зеленой и синей. В этом случае объем видеопамяти должен быть соответственно больше.
Различают два режима работы с экраном: текстовый и графический. Эти режимы существенно отличаются друг от друга способом использования видеопамяти.
В текстовом режиме на зкран выводятся только символы, которые заранее предопределены таблицей, содержащей 256 их возможных вариантов. Для изображения символа на экране используется матрица из 8 ´ 8 = 64 пикселей, которую называют знакоместом. Первые 8 строк развертки образуют 80 знакомест первой текстовой строки экрана, следующие 8 строк развертки - это символы второй текстовой строки и т.д. Поэтому при выводе символа достаточно указать лишь его номер, для чего требуется один байт. Используя этот номер, электронные схемы развертки находят в специальной области памяти одну из 256 матриц 8´8 разрядов и вычерчивают соответствующий символ.
Примечание. В зависимости от типа адаптера количество пикселей в знакоместе может быть различным. Например, для EGA оно равно , для VGA .
В видеопамяти для каждого знакоместа на самом деле отводится не один, а два байта: один байт (байт символа) определяет номер символа, второй байт (байт атрибутов) используется для указания о цвете символа и цвете окружающего фона.
Таким образом, для хранения "карты" экрана в текстовом режиме требуется 80 × 25 × 2 = 4000 байт видеопамяти.
Объем видеопамяти любой ПЭВМ составляет не менее 16000 байт. Целиком эта память необходима лишь при выводе графической информации. В текстовом режиме используется часть видеопамяти, которая называется страницей текстового экрана. Если емкость экрана 25 ´ 80 знакомест, то одна страница - это 4000 байт.
Байт атрибутов имеет следующую структуру:
½ B ½ b a c k ½ H ½ t e x t ½
Здесь back - цвет фона, text - цвет символа. Каждый разряд в разделах back и text - это один из основных цветов монитора: красный, зеленый или синий. Смешивание основных цветов дает 8 цветовых комбинаций. H - разряд интенсивности цвета. С учетом интенсивности получаем 16 цветов для отображения символа (темные и светлые). Для фона возможны только темные цвета. Разряд B управляет мерцанием символа: если B = 1, символ мигает с частотой около 2 гц.
К видеопамяти можно обращаться из программы с помощью адресов. Для нее в ПЭВМ зарезервированы адреса с сегментной частью от $A000 до $DFFF, т.е. 256 Кбайт. Монитор CGA занимает из них только 16 Кбайт, начиная с адреса $B800:$0000.
В стандартном модуле Crt определены константы для всех 16 значений цветового атрибута в соответствии с приведенной ниже таблицей.
Бит
Н
Бит цвета
кр. зел. син.
Десятич.
значение
Имя
константы
Цвет
Black
Blue
Green
Cyan
Red
Magenta
Brown
LightGray
DarkGray
LightBlue
LightGreen
LightCyan
LightRed
LightMagenta
Yellow
White
Черный
Синий
Зеленый
Голубой
Красный
Фиолетовый
Коричневый
Светло-серый
Темно-серый
Ярко-синий
Ярко-зеленый
Ярко-голубой
Розовый
Малиновый
Желтый
Белый
Blink
Мерцание
символа
В этом же модуле определена переменная TextAttr типа byte, которая задает значение текстового атрибута.
Пример 1.
TextAttr:=Yellow+16*Brown+Blink;
Writeln('Мерцание желтых символов на коричневом фоне');
Аналогично:
TextAttr:=14+16*6+128;
Writeln('Мерцание желтых символов на коричневом фоне');
Для управления цветом символов и цветом фона могут быть использованы также следующие две процедуры:
1) TextColor(Color:byte) - текущий цвет для символов; если Color > 16, то принимается Color := Color div 16 и добавляется мерцание символа.
2) TextBackGround(Color:byte) - текущий цвет фона.
Пример 2.
TextColor(Yellow+Blink); TextBackGround(Brown);
Writeln('Мерцание желтых символов на коричневом фоне');
Аналогично:
TextColor(14+128); TextBackGround(6);
Writeln('Мерцание желтых символов на коричневом фоне');