03/19/95 08:11pm
vid_ad.lek
А.В.Фролов,Г.В.Фролов
"Программирование
видеоадаптеров CGA, EGA, VGA" БСП том 3,
М "ДИАГОГ-МИФИ" 1994. Роберт
Журден "Справочник программиста
на компьютере фирмы IBM".
А.Г.Шевчик, Т.В.Демьянков
"Справочник программиста и
пользователя" серия
"Карманная энциклопедия"
М."Кварта" 1993.
Архитектуры простейших видеоадаптеров.
АРХИТЕКТУРА ВИДЕОАДАПТЕРА CGA
Видеоадаптер
построен на основе микросхемы Motorola
6845 или ее аналога. Микросхема
содержит контроллер ЭЛТ,
управляющий форматом экрана,
курсором, световым пером и
цветовыми характеристиками
изображения.
Адаптер CGA имеет 16Кбайт
видеопамяти, память доступна
процессору c адреса B800:0000h. В
некоторых режимах память разделена
на несколько страниц.
В ТЕКСТОВОМ режиме, отображаемая информация записывается в виде двухбайтовых слов. Младшее слово содержит ASCII код символа, старшее - атрибуты:
бит 7 - мигание символа или интенсивность фона,
6..4 - цвет фона,
3 - интенсивность символа,
2..0 - цвет символа.
Каждому слову соответствует определенноя позиция на экране. При формировании изображения содержимое видеопамяти считывается и преобразуется знакогенератором в двумерный графический эквивалент символа. Таблицы знакогенератора недоступны процессору.
В ГРАФИЧЕСКОМ режиме в видеопамяти хранится информация о каждом пикселе изображения. Информация и содержимом строк с четными и нечетными номерами хранится в разных областях памяти (четные строки с адреса B800:0000h, нечетные - B800:2000h).
В режимах 4 и 5 (320*200) на одну точку отводится два бита. В режиме 6 (640*200) - один; левому верхнему углу соответствуют старшие биты младшего байта области видеопамяти.
В адаптере "HERCULES" видеопамять, в графическом режиме 720*348, поделена на четыре части. Строки изображения последовательно чередуясь выбираются из областей памяти: B800:0000h, B800:2000h, B800:4000h, B800:6000h.
АРХИТЕКТУРА ВИДЕОАДАПТЕРОВ EGA И VGA.
Условно в структуре видеоадпреров можно выделить шесть блоков:
1 Видеопамять. Размер видеопамяти может достигать 256Кбайт и больше. Физически память состоить из четырех блоков, называемых СЛОЯМИ. Слои памяти с точки зрения процессора располагаются в одном и том же адресном пространстве.
2 Графический контроллер. Обеспечивает связь процессора со слоями видеопамяти. Может выполнять над поступившими данными операции И, ИЛИ, ИСКЛ.ИЛИ, ЦИКЛ.СДВИГ. Операция выполняется над поступившим байтом и регистрами-защелками, хранящими результат последнего обращения к буферу.
3 Последовательный преобразователь. Формирует поток битов для отображения на экране ЭЛТ.
4 Контроллер ЭЛТ. Генерирует сигналы управления ЭЛТ, формирует курсор, обслуживает световое перо и осуществляет вертикальную свертку (скроллинг) содержимого экрана.
5 Контроллер атрибутов. Управляет цветом. Значениям цветовых атрибутов ставится в соответствие определенный цвет при помощи таблицы цветовой палитры (Color Lock-up Table). В адаптере VGA по значению цвета далее выбирается один из регистров цифроаналогового преобразователя, который и формирует аналоговый RGB сигнал.
6 Синхронизатор. Осуществляет синхронизяцию работы устройств видеоадаптера и управляет непосредственной записью информации в цветовые слои.
Структура видеопамяти.
В ТЕКСТОВОМ режиме для кодирования символа используются два байта. ASCII код символа располагается в нулевом цветовом слое, его атрибуты - в первом. Таблица знакогенератора хранится во втором цветовом слое. При непосредственном доступе к памяти байты нулевого и первого цветовых слоев чередуются в адресном пространстве, что обеспечивает совместимостиь с CGA.
Размер второго цветового слоя позволяет загрузить сразу несколько таблиц знакогенератора. Активными могут быть одновременно две таблицы, что позволяет отображать 512 различных символа. Текущая таблица определяется одним из битов атрибутов символа. Для описания одного символа отводтися 32 байта таблицы знакогенератора.
Формат байта атрибутов символа, в целом, совпадает с форматом, принятым для CGA, но бит 3 может использоваться для указания одной из двух активных таблиц знакогенератора.
В ГРАФИЧЕСКОМ режиме использование слоев зависит от установленной разрешающей способности.
РЕГИСТРЫ ВИДЕОАДАПТЕРОВ EGA И VGA
Программирование видеоадаптеров на уровне регистров повышает скорость работы программ, но могут возникнуть проблемы с переносом созданного ПО на другой компьютер в связи с неполным соответствием регистров адаптеров различных фирм по их набору, структуре и расположению в адресном пространстве.
Современные адаптеры эмулируют регистры адаптеров более низкого уровня.
Доступ к большинству регистров осуществляется в два этапа: вначале через один порт указывается номер выбираемого регистра; затем через другой порт выполняется обмен. Такое решение позволяет сократить число портов. Многие регистры доступны только по записи, что приводит к неудобствам в мультизадачных системах. При работе с конкретным видеоадаптером необходимо ознакомиться с соответствующей документацией.
ПРИМЕЧАНИЕ: Далее приведено назначение некоторых регистров адаптеров EGA и VGA.
Внешние регистры.
Управляют работой видеоадаптера в целом. Адресуются непосредственно по адресам своих портов.
MOR (Miscellaneous Output Register) - Регистр определения режима работы.
7 - полярность сигнала вертикальной синхронизации (0+, 1-);
6 - полярность сигнала горизонтальной синхронизации (0+, 1-);
5 - используется для перекомпановки слоев в различные адреса памяти (для текстового режима =1);
4 - =1 дисплей управляется дополнительным устройством;
3..2 - управление тактовой частотой:
00 - 640 или 320 столбцов, 10 - внешний генератор,
01 - 720 столбцов, 11 - резерв.
1 - =0 доступ к видеопамяти запрешен;
0 - выбор диапазона адресов регистров FCR, ISR1 и контроллера ЭЛТ: =0 3Bxh, =1 3Dxh.
FCR (Feature Control Register) - Регистр управления дополнительным устройством. Биты D1, D0 регистра передаются на разъем доплнительного устройства FC1, FC0. Бит D3 =0.
ISR0 (Input Status Register 0) - Регистр состояния 0.
7 - обратный ход кадровой развертки (генерируется прерывание IRQ2);
6..5 - значение выходных линий FEAT1, FEAT0 дополнительного устройства;
4 - значение бита переключателя на плате EGA, номер бита соответствует значениям битов 3..2 регистра MOR. Для VGA бит определяет какой дисплей используется (монохромный или цветной);
3..0 - не используются.
ISR1 (Input Status Register 1) - Регистр состояния 1.
7..6 - не используются;
5..4 - диагностические (соответствуют двум выходным сигналам);
3 - обратный вертикальный ход луча;
2 - состояние переключателя светового пера;
1 - значение триггера светового пера;
0 - =1 когда адаптер читает данные из видеобуфера.
Регистры контроллера ЭЛТ.
Эти регистры управляют сигналами синхронизации, необходимыми для формирования растра, определяют формат данных на экране и форму курсора. Изменение настройки большинства регистров приводит к потере работоспособности адаптера. Доступ к регистрам осуществляется через индексный порт и порт данных.
HTR (Horizontal Total Register) - Общая длина горизонтальной развертки. Длина указывается в знакоместах с учетом времени, необходимого на обратный ход луча.
HDER (Horizontal Display Enable Register) - Число отображаемых в строке знакомест, уменьшенное на единицу.
SHBR (Start Horizontal Blank Register) - Начало импульса гашения лучагоризонтальной развертки.
EHBR (End Horizontal Blank Register) - Конец импульса гашения луча горизонтальной развертки.
7 - =0 для EGA и =1 для VGA;
6..5 - смещение между началом выборки символов и их отображением:
00 - нет, 01 - 1, 10 - 2, 11 - 3 символа;
4..0 - собственно конец импульса.
SHRR (Start Horizontal Retrace Regicter) - рачало импульса горизонтального обраного хода луча.
EHRR (End Horizontal Retrace Register) - Конец импульса горизонтального обратного хода луча.
7 - для EGA управление горизонтальной сверткой,
для VGA пятый бит регистра гашения луча;
6..5 - смещение импульса относительно отображаемого участка развертки:
00 - нет, 01 - 1, 10 - 2, 11 - 3 символа;
4..5 - младшие пять битов конца импульса горизонтальной развертки.
(1) - Общая длительность цикла горизонтальной развертки;
(2) - Отображаемая строка символов;
(3) - формирование "рамки";
(4) - выключение луча;
(5) - начало выбора символов из видеобуфера;
(6) - обратный ход луча.
Регистры синхронизатора.
Доступ осуществляется через индексный порт и порт данных. Регистры доступны по записи.
CPWE (Color Plane Write Enable) - Регистр разрешения записи цветового слоя.
7..4 - не используются;
3..0 - =1 разрешено записывать в соответствующий слой.
CGSR (Character Generator Select Register) - Регистр выбора знакогенератора.
7..6 - не используется;
5..4 - старшие биты номера таблиц;
3..2 - номер таблицы при D3 атрибута = 1;
1..0 - номер таблицы при D3 атрибута = 0;
Регистры графического контроллера.
Доступ осуществляется через индексный порт и порт данных. Использование регистров довольно не опасно. В общем виде графический контроллер работает следующим образом:
1. Байт, записываемый в видеопамять поступает в графический контроллер;
2. В соответствии со значением регистра сдвига и выбора функции происходит циклический сдвиг полученного байта;
3. Затем результат сдвига обрабатывается по функции ИЛИ, И или ИСКЛ.ИЛИ с содержимым регистров-защелок;
4. На основе значений регистров разрешения установки/сброса и регистра установки/сброса данные дополнительно модифицируются;
5. В зависимости от значения регистра битовой маски в слои помешается информация из регистров-защелок или результаты преобразования.
SRR (Set/Reset Register) - Регистр установки/сброса.
7..4 - резерв;
3..0 - записываемое значение в слой при установленном бите регистра разрешения установки/сброса.
SRER (Set/Reset Enable Register) - Регистр разрешения установки/сброса.
7..4 - резерв;
3..0 - =0 - данные для соответствующего слоя берутся от процессора, =1 - данные формируются размножением соответствующего бита регистра установки/сброса.
DRFS (Data Rotate & Function Select) - Регистр циклического сдвига и выбора функции.
7..5 - не используются;
4..3 - функция:
00 - нет операции,
01 - И,
10 - ИЛИ,
11 - ИСКЛ.ИЛИ;
2..0 - величина сдвига (вправо).
BMR (Bit Mask Register) - Регистр битовой маски. Если его бит =0, то соответствующий бит будет записываться из регистра-защелки; иначе бит поступает от процессора.
Регистры контроллера атрибутов.
Управляет цветовыми характеристиками изображений. Доступ осуществляется через один порт. Переключение индекс-данные осуществляется при каждой записи в порт. Установку в исходное состояние можно осуществить, прочитав содержимое ISR1.
CPR (Color Palette Register's) - Регистры цветовой палитры (0..15). Формат регистров различен для различных дисплеев.
SBCR (Screen Border Color Register) - Регистр цвета рамки экрана. Формат эквивалентен формату регистров цветовой палитры.
Регистры цифро-аналогового преобразователя VGA.
LTRIR (Look-up Table Read Index Register) - Указывается индекс читаемого регистра палитры.
LTWIR (Look-up Table Write Index Register) - Указывается индекс записываемого регистра палитры.
LTDR (Look-up Table Data Register) - Регистр данных таблицы цветов. После установки адреса необходимо выполнить три операции чтения (записи) с интервалом не менее 240нс.
7..6 - не используется;
5..0 - код уровня сигнала.