Видеоустройства персональных ЭВМ и их основные характеристикиРефераты >> Программирование и компьютеры >> Видеоустройства персональных ЭВМ и их основные характеристики
Байт атрибутов символа содержит информацию о цвете символа, цвете фона, на который должен накладываться символ и как должен отображаться символ - с мерцанием или без. Структура байта атрибутов символа для адаптера CGA-монитора представлена на рис.2.
Рис.2. Структура байта атрибутов.
Назначение 7-го бита байта атрибутов может программно измениться. Пользователь может определить этот бит как бит интенсивности цветов фона (аналогично биту 3,определяющему интенсивность цветов символа),или же как бит, задающий мерцание символа.
Итак, Вы уже знаете, что в буфере хранится информация, которая много о чем говорит адаптеру - какие символы и в каких позициях экранной страницы они должны выводиться, какой цвет каждого символа и на каком фоне должен отображаться этот символ и др.
Как же адаптер преобразует эту информацию в видеосигналы, т.е. в сигналы, единственно понятные монитору?
Вы уже знаете, что мельчайшим элементом изображения на экране монитора является пиксел (picture element). Наименьшим же элементом экранной страницы является знакоместо, в котором может одновременно отображаться только один символ. Большинство видеоадаптеров ПЭВМ определяют знакоместо как матрицу из 8 пикселов по вертикали (8 телевизионных строк) и такого же количества пикселов по горизонтали. В этом случае между форматом символьной страницы на экране монитора и его разрешением справедливы следующие соотношения :
N=V/8; M=H/8, (2)
где N и M - максимальное количество символьных строк и символов в строке соответственно; V и H - разрешение монитора по вертикали и горизонтали соответственно.
(Определите текстовый формат для монитора с разрешением 640*200 пиксел) Любой символ может быть отображен в знакоместе путем активизации тех или иных пикселов матрицы. Так, например, для отображения буквы “A” должны быть активизированы 4-й и 5-й пикселы в 1-й строке матрицы,3-й и 6-й - во второй строке,2 и 7 - в 3,4,6,7 и 8-й строках, а в 5-й строке необходимо активизировать 2,3,4,5,6 и 7-й пик-сел.(Проверьте это, нарисовав матрицу из 8-ми строк и 8-ми столбцов и закрасив указанные элементы матрицы).
Состояние элементов матрицы для любых символов легко кодировать двоичным кодом и хранить в памяти адаптера, если условиться, что состояние элементов (пикселов) каждой отдельной строки матрицы хранится в отдельной байте, причем в старшем(седьмом) бите каждого байта хранится состояние 1-го пиксела, в шестом бите - состояние 2-го пиксела и т.д. до нулевого бита, который характеризует состояние 8-го пиксела матричной строки(пикселы и строки в матрице символа отсчитываются с левого верхнего угла матрицы вправо и вниз соот-ветственно). Таким образом,каждый символ может быть описан восемью байтами. Первый байт хранит состояние восьми пикселов первой строки матрицы,второй байт - состояние пикселов второй строки и т.д. Ак-тивность того или иного пиксела задается установкой соответствую-щего ему разряда в байте строки. Для рассмотренного примера с бук-вой “A” последовательность байт будет следующей:
0 0 0 1 1 0 0 0 - байт 1-й строки символа
0 0 1 0 0 1 0 0 - байт 2-й строки символа
0 1 0 0 0 0 1 0 - байт 3-й строки символа
0 1 0 0 0 0 1 0 - байт 4-й строки символа
0 1 1 1 1 1 1 0 -||- 5-й -||-
0 1 0 0 0 0 1 0 -||- 6-й -||-
0 1 0 0 0 0 1 0 -||- 7-й -||-
0 1 0 0 0 0 1 0 -||- 8-й -||-
Такие восьмибайтные массивы, описывающие различные символы, хранятся в специальной памяти видеоадаптера, называемой знакогенератором. А однобайтные ASCII-коды символов (эти коды загружаются микропроцессором в видеобуфер) являются указателями на ячейку памяти в знакогенераторе, в которой хранится байт первой строки матрицы данного символа. Адрес этой ячейки вычисляется умножением кода символа на 8,т.е. на длину массива матрицы символа. Например, байт первой строки матрицы символа, код которого, скажем, “55”,будет хранится в 55*8=440-й ячейке памяти знакогенератора.
Теперь самое время вспомнить, какую роль играют синхроимпульсы. Вспомнили? Совершенно правильно! Они обеспечивают управление генераторами строчной и кадровой разверток монитора, т.е. задают координаты электронного луча на экране ЭЛТ. А т.к. синхроимпульсы вырабатываются адаптером, то он всегда знает в какой точке экрана в данный момент находится электронный луч. Но адаптер знает и другое, а именно - как распределены знакоместа на экране и с какими ячейками памяти видеобуфера эти знакоместа связаны. Поэтому, когда электронный луч после обратного хода по кадру возвращается в начало кадра, то адаптер обращается к первым двум ячейкам видеобуфера и считывает код символа, который должен отображаться в самом первом знакоместе страницы, и его атрибуты. Код символа поступает в знакогенератор и обеспечивает выборку байта первой строки матрицы данного символа. Следует отметить, что байты строк матрицы выводятся с знакогенератора побитно. Сначала выводится старший (седьмой) бит байта, затем шестой и т.д. Частота, с которой выводятся биты, соответствует частоте вывода точек на экран. Эта частота примерно равна числу пиксел в строке (640),умноженному на частоту строк (15,75кГц) и составляет десятки мегагерц. Таким образом, моменты вывода бит байта строки совпадают с моментами прохождения электронным лучом соответствующих пиксел на экране. После вывода последнего (нулевого)бита байта строки матрицы электронный луч переместится в начало следующего знакоместа. Адаптер считывает из видеобуфера код и атрибуты символа, который должен отображаться во втором знакоместе и процесс повторяется. После прохода электронным лучом первой телевизионной строки (не путайте телевизионную и символьную строки - последняя состоит из восьми телевизионных),на экран будут выведены первые строки матриц первых 80 символов. Во второй телевизионной строке будут выведены вторые строки матриц первых 80-и символов и т.д. После прохода электронным лучом восьмой телевизионной строки первая символьная строка будет выведена на экран полностью и адаптер перейдет к выводу второй символьной строки аналогичным образом. А после вывода последней символьной строки электронный луч возвращается в левый верхний угол экрана (на начало кадра) и повторяется вывод первой символьной строки, затем второй и т.д. Обновление информации в видеобуфере осуществляется центральным процессором во время обратных ходов электронного луча по кадру и строкам. Адаптер имеет доступ к видеобуферу только во время прямого хода луча. Таким образом исключается возможность одновременного доступа к видеобуферу процессора и адаптера. Следует отметить, что такое разделение времени доступа к видеобуферу должно осуществляться программным путем, а не аппаратно.
И последнее, что нам необходимо рассмотреть - это формирование цветов символа и фона. Этот процесс хорошо иллюстрирует рисунок 3. Здесь можно обойтись и без излишних комментариев, отметим только, что выводимые из знакогенератора сигналы обеспечивают вывод на RGBI-ли-нии монитора значения 3-0 разрядов кода атрибутов, когда текущий пиксел активен, и 7-4-й разряды - когда пиксел пассивный.