Работа видеоконтроллеров EGA и VGA в графических режимах

Скачать доклад: Работа видеоконтроллеров EGA и VGA в графических режимах

Графические режимы контроллеров EGA, VGA и SVGA можно разделить на 2 основные группы: режимы с 16 цветами и режимы с 256 цветами. Эти две группы сильно отличаются друг от друга по организации видеопамяти.

Видеорежимы с 16 цветами

Контроллер EGA работает в режимах с разрешением 640х200 и 640х350 точек, контроллер VGA имеет дополнительный режим 640х480 точек, а контроллеры SVGA часто могут также реализовывать режимы 800х600 и 1024х768 точек. К сожалению, видеопамять в этих режимах имеет очень неудобную и морально устаревшую организацию, что очень сильно замедляет вывод графики. В настоящее время эти видеорежимы используются только для создания простых статических изображений (чертежей и диаграмм).

В режимах с 16 цветами память разделена на 4 видеоплоскости: по одной на каждый из основных цветов и одна плоскость служит для кодирования яркости. Байт данных в видеоплоскости кодирует информацию для восьми расположенных рядом по горизонтали точек (пикселов).

Упрощенная схема прохождения данных через графические контроллеры EGA и VGA в графических режимах с 16 отображаемыми цветами (цепи установки/сброса не показаны):

                                          Битовая
------¬ маска
----------------->¦ ¦ -¬ ----------¬
¦ -¬ ¦ АЛУ +--->¦¦ ¦Плоскость¦
¦-->¦+--------T-->¦ ¦ ¦¦ ¦ 3 ¦
¦¦ L-Защелка ¦ L------ ¦+------>¦ ¦
¦¦ ¦ ¦¦ ¦ ¦
¦¦ L------------->¦¦ ¦ ¦
¦¦ L- ¦ ¦
Сдвигающий¦L------------------------------------+ ¦
регистр ¦ ------¬ ¦ ¦ --¬ +---------------->¦ ¦ -¬ -+--------¬¦
¦ ¦ ¦ -¬ ¦ АЛУ +--->¦¦ ¦Плоскость+-
Байты ¦ ¦ ¦-->¦+--------T-->¦ ¦ ¦¦ ¦ 2 ¦
данных от ¦ ¦ ¦¦ L-Защелка ¦ L------ ¦+----->¦ ¦
процессора ¦ ¦ ¦¦ ¦ ¦¦ ¦ ¦
==========>¦ +--+¦ L------------->¦¦ ¦ ¦
¦ ¦ ¦¦ L- ¦ ¦
¦ ¦ ¦L-----------------------------------+ ¦
¦ ¦ ¦ ------¬ ¦ ¦
L-- +---------------->¦ ¦-¬ -+--------¬¦
¦ -¬ ¦ АЛУ +--->¦¦ ¦Плоскость+-
¦-->¦+--------T-->¦ ¦ ¦¦ ¦ 1 ¦
¦¦ L-Защелка ¦ L------ ¦+---->¦ ¦
¦¦ ¦ ¦¦ ¦ ¦
¦¦ L------------->¦¦ ¦ ¦
¦¦ L- ¦ ¦
¦L----------------------------------+ ¦
¦ ------¬ ¦ ¦
L---------------->¦ ¦ -¬ -+--------¬¦
-¬ ¦ АЛУ +--->¦¦ ¦Плоскость+-
-->¦+--------T-->¦ ¦ ¦¦ ¦ 0 ¦
¦ L-Защелка ¦ L------ ¦+--->¦ ¦
¦ ¦ ¦¦ ¦ ¦
¦ L------------->¦¦ ¦ ¦
¦ L- ¦ ¦
L---------------------------------+ ¦
¦ ¦
L----------

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

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

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

                    ---------¬       ----------¬
¦ Бит из ¦ ¦ Бит из ¦
¦ АЛУ ¦ ¦ защелки ¦
L----T---- L----T-----
¦ ¦
-----------¬ ¦ 1 0 ¦
¦ Бит из ¦ L------- -------
¦ регистра +-------------->\
¦ битовой ¦ ¦
¦ маски ¦ ¦
L----------- ¦
V
Видеопамять

Арифметико-логическое устройство позволяет выполнять операции И (AND), ИЛИ (OR) и ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR) над содержимым регистра-защелки и поступившим от процессора байтом. Это прозволяло создавать примитивные анимационные эффекты, однако в настоящее время такие приемы практически не применяются.

Недостатком графических 16-цветных режимов является необходимость интенсивной работы с большим числом рагистров при выводе в видеопамять текстов и графики. На одну операцию вывода в видеопамять приходится одна операция чтения из видеопамяти и одна-две операции записи в регистры, что замедляет работу с видеопамятью в десятки раз (из-за конструктивных особенностей контроллеров EGA и VGA обращение к регистру выполняется в несколько раз медленнее, чем обращение к видеопамяти).

Рассмотрим наиболее часто используемые регистры:

"Первый регистр входного состояния" (Input Status Register One) расположен по адресу 3DAh. Бит 3 в этом регистре устанавливается в 1 в течение обратного хода луча по кадру. При выполнении различных видеоэффектов типа прокрутки изображения или перезагрузки палитры используемых цветов, а также при создании движущихся изображений состояние этого регистра приходится постоянно контролировать, так как в некоторые регистры контроллера разрешается записывать данные только в течение обратного хода луча.

"Регистр адреса указателя последовательности" (Sequenser Address Register), расположенный по адресу 3C4h, определяет, какой из 5 регистров, ассоциированных с портом 3C5h, будет доступен для операций ввода-вывода.

Чтобы получить доступ к Регистру маскирования растра (Map Mask Register), необходимо записать по адресу 3C4h число. Каждому из 4 младших битов регистра маскирования растра поставлена в соответствие одна битовая матрица - запись 1 в любой из этих битов делает соответствующую матрицу недоступной. Старшие 4 бита не используются. Регистр маскирования растра позволяет копировать сложные графические изображения из ОЗУ ЭВМ в видеопамять поочередно для каждой видеоплоскости, что позволяет выводить на экран заранее созданные и записанные на диск картинки-слайды.

Регистр 3D4h определяет, какой из регистров контроллера электронно-лучевой трубки будет доступен для чтения-записи информации через регистр 3D5h.

Так, для доступа через порт 3D5h к  2"Регистру начального старшего адреса" (Start Address High Register) необходимо записать в порт 3D4h число 0Ch, а для доступа к "Регистру начального младшего адреса" (Start Address Low Register) - число 0Dh. В эти регистры записывается адрес ячейки памяти первого отображаемого на экране монитора символа или пикселя. Оба регистра доступны для чтения и записи и используются для плавной вертикальной и грубой горизонтальной "прокрутки" изображения на экране и для переключения видеостраниц.

Для доступа к регистру "Смещение" (Offset Register), который определяет объем видеопамяти, выделенной для хранения одной строки видеоизображения, необходимо загрузить в регистр 3D4h код 13h.

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

Регистр "Адрес графики" расположен по адресу 3CFh и определяет, какой из следующих регистров подключен к порту 3CEh.

Регистр "Установка/сброс" с индексом 0 может быть использован для выбора битовых матриц в режиме постоянного сброса или установки. Для определении битовой матрицы как "установленной" в соответствующий бит записывается 1. Если бит установлен в 0, то соответствующая матрица находится в режиме сброса. (Содержимое этого регистра имеет значение только в режиме записи 0).

Регистр  2"Разрешение установки/сброса" (индекс) разрешает (при 1 в соответствующем бите) или запрещает (при) режим установки/сброса для каждой из 4 битовых матриц.

Регистр "Циклический сдвиг данных" с индексом 3 обеспечивает сдвиг данных на заданное число позиций вправо перед записью их в ячейку памяти, а также позволяет осуществлять, вместо простой записи информации в память, операции И, ИЛИ, и исключающее ИЛИ над содержимым ячейки памяти и передаваемыми из процессора данными.

Регистр "Выбор считываемой матрицы" с индексом 4 определяет номер считываемой битовой плоскости в режиме чтения 0. Номер битовой плоскости кодируется в младших двух битах регитра, а старшие 6 бит не используются.

Регистр "Режим" имеет индекс 5.

Биты 0 и 1 этого регистра определяют режим записи:

- в режиме 0 данные, помещаемые в память адаптера, записываются в каждую разрешенную матрицу;

- в режиме 1 в память заносится без изменения содержимое регистров-защелок (этот режим предназначен для копирования информации с одного места видеопамяти в другое);

- в режиме 2 регистр битовой маски применяется для запрещения или разрешения установки отдельных пикселей в заданный цвет;

- в режиме 3 выполняется операция И над содержимым регистра установки/сброса и битовой маской, а результат заносится в видеопамять.

Бит 3 определяет режим считывания данных из видеопамяти. При 0 в этом бите процессор прочитает байт из видеплоскости, номер которой задан в регистре "выбор считываемой матрицы". При 1 в этом бите в считанном процессором байте в 1 будут установлены только те биты, для которых цвет пикселей соответствует значению, указанному в регистре  "Сравнение цвета".

Регистр "Смешанные данные" с индексом 6 управляет типом режима: текстовый или графический", а также определяет начальный адрес видеопамяти. Регистр "Цвет безразличен" с индексом 7 позволяет игнорировать установленные в регистре "Сравнение цветов" значения для заданных видеоплоскостей. Регистр "Битовой маски" с индексом 8 разрешает (при 1 в соответствующем бите) или запрещает (при 0) модификацию определенных битов в байте видеопамяти, к которому обращается процессор.

Порт 3C0h использует иной метод экономии пространства адресов. Перед обращением к этому порту неоходимо выполнить операцию считывания из порта 3DAh. Затем в порт 3C0h заносится индекс требуемого порта, а при следующем обращении к порту 3C0h будет произведена запись в выбранный регистр. Так, для обращения к регистру "Горизонтальное поэлементное панарамирование" необходимо вначале задать индекс 13h. Регистр поэлементного панарамирования используется для плавной прокрутки изображения по горизонтали в 16-цветных графических режимай, когда каждому байту битовой плоскости соответствует 8 пикселов на экране (и изменение одних только регистров начального адреса приводило бы к скачку сразу на 8 пикселей).