7.3. Дисплейные адаптеры
Дисплейным адаптером условимся называть блок компьютера, к которому подключается дисплей — чаще всего, монитор на электронно-лучевой трубке. В обязательный круг задач этого адаптера входит формирование изображения на экране под управлением программы компьютера, выполняемое в графическом и (или) алфавитно-цифровом режиме отображения. Расширенный круг задач может включать и воспроизведение на экране того же монитора «живого» видео из потока данных, полученного от компьютера или от какого-либо источника телевизионного сигнала.
Рассмотрим функциональную схему графического адаптера (рис. 7.5), которая с некоторыми добавлениями или исключениями применима практически ко всем адаптерам, применяемым в PC.
Поскольку адаптер предназначен для подключения монитора, его обязательным элементом будет контроллер ЭЛТ (CRT Controller). В задачу этого контроллера входит согласованное формирование сигналов сканирования видеопамяти (адрес и стробы чтения) и сигналов вертикальной и горизонтальной синхронизации монитора. Контроллер ЭЛТ должен обеспечивать требуемые частоты развертки и режимы сканирования видеопамяти, которые зависят от режима отображения (графический или текстовый) и организации видеопамяти, о чем говорилось в начале главы. Опорной частотой для работы контроллера является DotCLK — частота вывода пикселов в графических режимах или точек разложения символов в текстовом режиме. В самых первых моделях адаптеров в качестве контроллера ЭЛТ применялась микросхема Motorola 6845, и ее регистровая модель поддерживается современными адаптерами при эмуляции адаптеров CGA и MDA. В текстовом режиме этот же узел формирует и аппаратный курсор.

Видеопамять является специальной областью памяти, из которой контроллер ЭЛТ организует циклическое чтение содержимого для регенерации изображения. Традиционно для видеопамяти в карте распределения памяти PC была выделена область адресов A0000-BFFFFh, непосредственно доступная любому процессору х86. Первым адаптерам (MDA, CGA) этой области было более чем достаточно. Адаптеры EGA эти 128 Кбайт использовали уже полностью, а для "дальнейшего увеличения объема, потребовавшегося адаптерам VGA и SVGA, пришлось применять технику переключения банков. Эта вынужденная мера осложняет программное формирование изображения, которое в режимах высокого разрешения с большим количеством цветов уже не помещается в один банк. Типовой объем видеопамяти достиг 1 Мбайт у рядовых адаптеров, хотя при этом разрядность шины данных памяти составляет всего 16 бит (популярны микросхемы 4 Мбит с организацией 512Кх8). Лучше иметь видеопамять объемом 2 Мбайт, при этом реализуются все возможности 32-битных чипсетов. Адаптеры для профессиональной работы с цветом имеют 4 Мбайт видеопамяти. Современные графические адаптеры имеют возможность переадресации видеопамяти в область старших адресов (выше границы 16 Мбайт), что позволяет в защищенном режиме процессоров 386+ работать с цельными образами экранов. Кроме аппаратно-выделенной видеопамяти, устанавливаемой на графических адаптерах, существует и архитектура унифицированной памяти UMA (Unified Memory Architecture). При таком подходе под видеобуфер выделяется область системного ОЗУ, что позволяет несколько удешевить компьютер. Эта «экономия на спичках» приводит к снижению производительности, как графической подсистемы, так и компьютера в целом, и перспективы развития UMA сомнительны. Диаметрально противоположным подходом, нацеленным на повышение производительности, является не просто выделение видеопамяти, а еще и применение в ней микросхем со специальной архитектурой — VRAM, WRAM, MDRAM, RDRAM, SGRAM.
Необходимый объем видеопамяти определяется желаемым графическим режимом (в текстовом режиме потребуется всего несколько килобайт, которые «погоду не делают»). Требуемые объемы для одной страницы различных видеорежимов приведены в табл. 7.6. Если взять удвоенное значение этого объема, то многие адаптеры позволят организовать двухстраничный режим с переключением буферов, что иногда полезно для вывода динамичных изображений.
Таблица 7.6. Разрешение и требуемый объем видеопамяти
Бит/пиксел | Количество цветов | 640х480 | 800х600 | 1024х768 | 1280х1024 |
4 | 16 | 150 Кбайт | 234 Кбайт | 384 Кбайт | 640 Кбайт |
8 | 256 | 300 Кбайт | 469 Кбайт | 768 Кбайт | 1,25 Мбайт |
15 | 32:768 | 600 Кбайт | 938 Кбайт | 1,5 Мбайт | 2,5 Мбайт |
16 | 65:536 | 600 Кбайт | 938 Кбайт | 1,5 Мбайт | 2,5 Мбайт |
24 | 16:777:216 | 900 Кбайт | 1,37 Мбайт | 2,25 Мбайт | 3,75 Мбайт |
32* | 16:777:216 | 1,172 Мбайт | 1,83 Мбайт | 3,0 Мбайт | 5,0 Мбайт |
* В режиме с 32 бит/пиксел для цветопередачи используются только 24 младших бита.
Трактовка данных видеопамяти зависит от используемого видеорежима. В текстовом режиме каждому знакоместу экрана соответствует слово видеопамяти, расположенное по четному адресу. При этом младший байт слова (байт с четным адресом) содержит ASCII-код символа, а старший байт — его атрибуты. Организация памяти в этом случае является линейной: цепочка слов соответствует собранной в цепь последовательности строк символов. В графическом режиме возможны разнообразные варианты организации видеопамяти.
В видеорежимах с одним битом на пиксел (6h, 11h) используется линейное отображение (см. рис. 7.2, а), но в режиме 6 из-за архитектурных особенностей адаптера CGA строки пикселов чередуются: по базовому адресу видеобуфера располагаются ячейки памяти, соответствующие цепочкам четных строк пикселов, а нечетные строки отображает область со смещением 2000Н. В адаптерах HGC в чередовании участвуют уже не пары, а четверки строк, и их образы также имеют смещение в 2000h.
В видеорежимах 4 и 5 с двумя битами на пиксел используется линейное отображение (см. рис. 7.2, б) и такое же чередование строк. В режиме Fh используется многоплоскостная модель памяти (см. рис. 7.3), но из четырех слоев используются только два (0 и 1). То же относится и к режиму l0h, когда он используется в двухбитном варианте.
В видеорежимах с четырьмя битами на пиксел используется четырехплоскостная модель памяти (см. рис. 7.3) в полном объеме.
При 8,, 24 и 32 битах на пиксел в графических адаптерах применяется только линейная организация памяти, где за каждый пиксел отвечает 1-4 смежных байта. При режимах High Color и True Color содержимое этих байт посредственно задает цвет через двоичные коды уровней интенсивности базисных цветов RGB. Форматы байт (младший бит — справа) выглядят следующим образом:
- 15 бит/пиксел: URRR RRGG GGGB ВВВВ (5-5-5)
- 16 бит/пиксел: RRRR RGGG GGGB ВВВВ (5-6-5)
- 24 бит/пиксел: RRRR RRRR GGGG GGGG ВВВВ ВВВВ (8-8-8)
- 32 бит/пиксел: UUUU UUUU RRRR RRRR GGGG GGGG ВВВВ ВВВВ (8-8-8)
Здесь U обозначает биты, не используемые для формирования цвета, а в цепочках бит базисных цветов (R, G, В), младший бит, расположен справа. Контроллер атрибутов управляет трактовкой цветовой информации, хранящейся в видеопамяти. В текстовом режиме он обрабатывает информацию из 1байт атрибутов знакомест (откуда и пошло его название), в графическом — из 1 бит текущего выводимого пиксела. Контроллер атрибутов позволяет увязать обьем хранимой цветовой информации с возможностями монитора. Для монохромных (не полутоновых) мониторов часть цветовой информации может преобразовываться в такие элементы оформления, как мигание, подчеркивание и инверсия знакоместа. В состав контроллера атрибутов входят регистры палитр, которые служат для преобразования цветов, закодированных битами видеопамяти, в реальные цвета на экране. В адаптере CGA цветовая палитра меняется L совсем просто: в выходной сигнал добавляется (или не добавляется) один из базисных цветов (синий), в результате чего управление двумя другими цветами будет давать по четыре цвета в двух разных палитрах. В адаптере EGA применены уже настоящие программируемые регистры палитр, позволяющие каждому 1из 16 возможных кодов поставить в соответствие один из 64 возможных цветов, отображаемых монитором EGA. С появлением адаптеров, способных задавать большое (256 и более) количество цветов, на плату графического адаптера из монитора «переехали» и цифроаналоговые преобразователи (ЦАП) сигналов базисных цветов. Функционально оказалось целесообразным объединить эти преобразователи вместе с регистрами палитр, которые представляли собой небольшое (поначалу) быстродействующее ОЗУ (RAM). Эта функциональная сборка в настоящее время исполняется в виде микросхем RAMDAC (Digital-to-I-Analog Converter — цифро-аналоговый преобразователь). Микросхемы RAM-DАС характеризуются разрядностью преобразователей, которая может доходит 1до 8 бит на цвет, и предельной частотой выборки точек (DotCLK), с которой они способны работать. Естественно, что чем точнее должно быть преобразование, тем труднее его выполнить быстро. Трудности и высокая стоимость достижения высокого разрешения при высокой частоте построчной развертки (эти факторы требуют высокого быстродействия RAMDAC) с большой глубиной цвета (требующей высокой точности преобразования) связаны и с этой причиной. Когда количество бит на пиксел достигло 24 (True Color), показалось, что в этом режиме преобразование цветов уже не требуется. Однако фирма Microsoft, взявшая на себя функции диктатора моды, предупреждает, что в 1998 году загружаемость RAMDAC для режимов 24 бит на пиксел и выше станет обязательным требованием к новым графическим адаптерам. Это позволит выполнять гамма-коррекцию цвета аппаратными средствами адаптера.
Знакогенератор предназначен для формирования растрового изображения символов в текстовом режиме экрана. Знакогенераторы адаптеров MDA/HGC и CGA программно недоступны: они выполнены в виде микросхем ПЗУ, никак не отображаемых в адресном пространстве процессора. Эти знакогенераторы определяют фиксированный набор из 256 отображаемых символов, и с их «начинкой» приходится сталкиваться при «русификации» адаптеров данного класса. Знакогенератор CGA имеет формат 8х8 и простейшую весьма наглядную организацию: бит 7 соответствует самой левой точке строки разложения, а бит 0 — правой. Каждому символу отводится по 8 байт (строк его разложения), объем ПЗУ равен 2 Кбайт. Знакогенератор MDA/HGC имеет формат 8х14 (при знакоместе 9х14) с тем же расположением бит в строке, и для него требуется ПЗУ емкостью 4 Кбайт. Однако в расположении строк попадаются разнообразные варианты. Это может быть и выделение для каждого символа по 16 смежных байт ПЗУ с игнорированием двух последних, и более замысловатые варианты, включая чередование строк. Распространен, например, вариант, когда в первой половине ПЗУ расположены по 8 первых строк для каждого символа, а их нижняя часть (по четыре используемых и четыре фиктивных строки) располагается во второй половине. Хотя для данного знакогенератора требуется всего 4 Кбайт, часто используют более распространенные микросхемы 2764 (8Кх8). Иногда в них помещают два знакогенератора, и адаптер позволяет выбирать таблицу программно (обычно никому не известным способом). Для определенности, при программировании можно в обе половины записать одинаковые таблицы. Сами таблицы для русификации можно позаимствовать, например, из загружаемых русифицированных фонтов для адаптера EGA.
Знакогенераторы адаптеров EGA и VGA размещаются во втором слое видеопамяти и поэтому программно доступны. При инициализации адаптера они загружаются из образов, хранящихся в ПЗУ расширения BIOS, установленных на платах графических адаптеров. Адаптер EGA позволяет одновременно хранить до четырех таблиц по 256 символов, a VGA — до восьми. Активной (используемой для отображения) может быть либо одна из них, либо сразу две. В последнем случае набор одновременно отображаемых символов расширяется до 512, а одна из двух таблиц, используемых для конкретного символа, определяется битом 3 его байта атрибутов.
Таблицы имеют 32-байтную развертку каждого символа в формате 16х16, из которой в EGA используется матрица 8х14, а в VGA — 9х16. Если таблицу знакогенератора (фонты) для EGA загрузить в VGA, символы будет выглядеть мелковато, а в линиях, нарисованных символами псевдографики, появятся разрывы. Если же фонты для VGA загрузить в EGA, то символы будут выглядеть усеченными (особенно снизу). Программная доступность знакогенератора снимает необходимость аппаратной русификации адаптера, но при желании можно переписать русифицированные фонты в BIOS графического адаптера (не забыв исправить контрольную сумму в последнем байте ПЗУ). Такая процедура избавит от необходимости загрузки резидентного русификатора, занимающего место в памяти. Поскольку знакогенератор расположен в одном из слоев видеопамяти,
после использования большинства графических режимов его содержимое приходится перезагружать, а встроенный драйвер BIOS по умолчанию возьмет образ, хранившийся в ПЗУ адаптера. Если туда подставить нужный фонт, то дополнительный драйвер экрана не потребуется.

Графический контроллер являтся средством повышения производительности программного построения изображений, точнее их образов, в видеопамяти. В первых графических адаптерах (CGA и HGC) этот блок фактически отсутствовал. Он оформился в адаптере EGA, откуда перекочевал и в VGA. В этих Адаптерах его функции реализованы аппаратными средствами специализированных микросхем. Рассмотрим функции графического контроллера адаптеров /EGA и VGA. Он работает с четырехслойной моделью организации видеопамяти (см. рис. 7.3). Адаптеры EGA и VGA имеют четыре 8-битных регистра-защелки, в которых фиксируются данные из соответствующих им цветовых слоев при выполнении любой операции чтения видеопамяти. В последующих операциях записи в формировании данных для каждого слоя могут принимать участие данные от процессора (1 байт) и данные из регистров-защелок соответствующих слоев (рис. 7.6). Данные от процессора могут быть предварительно циклически сдвинуты. Над данными от процессора (возможно, сдвинутыми) и из регистров защелок могут выполняться логические операции И, ИЛИ и ИСКЛЮЧАЮЩЕЕ ИЛИ. Кроме того, вместо результатов этих операций в некоторые слои могут быть записаны байты нулей или единиц. Регистр битовой маски позволяет побитно управлять источником записываемых данных: если бит регистра маски имеет нулевое значение, то в видеопамять этот бит во всех слоях будет записан из регистра-защелки. Данные от процессора (логически обработанные) будут поступать только для бит с единичным значением маски. И, наконец, запись будет производиться только в разрешенные слои, правда, функция разрешения слоев относится уже к синхронизатору.
При чтении графический контроллер может задать номер читаемого слоя. Возможно и чтение со сравнением цветов. В этом случае указывается код искомого цвета (значение бит для соответствующих слоев) и результатом чтения сразу всех слоев станет байт, у которого единичное значение примут, биты пикселов, цвет которых совпадает с образцом (рис. 7.7). В сравнении цветов могут участвовать и не все слои.

Всеми функциями графического контроллера управляют через его регистры. Конечно, возможно и прямое обращение к отдельному цветовому слою как по чтению, так и по записи. Но знание возможностей графического контроллера позволяет многие часто используемые функции возложить на его аппаратные средства. Однако если такой аппаратный графический контроллер еще приемлем для четырехслойной организации (4 бита на пиксел), то для более глубоких цветов (8 бит на пиксел и более), он будет уже слишком громоздким. В современных адаптерах функции графического контроллера, существенно расширенные по сравнению с EGA и VGA, выполняются встроенным микропроцессором — графическим акселератором. Возможные функции графического акселератора (без претензии на полноту перечисления) были рассмотрены выше.
Синхронизатор, появившийся с адаптером EGA, позволяет синхронизировать циклы обращения процессора к видеопамяти с процессом регенерации изображения. Адаптеры имеют собственные кварцованные генераторы синхронизации (иногда и по нескольку). От внутреннего генератора вырабатывается частота вывода пикселов DotClock (DotCLK), относительно которой строятся все временные последовательности сканирования видеопамяти, формирования видеосигналов и синхронизации монитора. В то же время процессор обращается к видеопамяти асинхронно относительно процесса регенерации. В задачу синхронизатора входит согласование этих асинхронных процессов. В адаптерах SVGA для шины РСI в качестве опорной для некоторых видеорежимов может использоваться и частота 33 МГц прямо с шины, а циклы обращения процессора и так уже привязаны к этому синхросигналу. Таким образом, задача синхронизатора упрощается. Шина РСI допускает частоты и 30 и 25 МГц, а при частоте системной шины 83 МГц частота РСI будет уже 41,5 МГц. Так что не стоит удивляться, когда смена процессора (при которой иногда приходится менять и системную частоту) приведет к изменению геометрии изображения на экране монитора. Правда, монитор с хорошей автоматической подстройкой генераторов изменения частот синхронизации может и скомпенсировать.
Внутренняя шина адаптера предназначена для высокопроизводительного обмена данными между видеопамятью, графическим акселератором и внешним интерфейсом. Типовая разрядность канала данных у этой шины сейчас составляет 32 бит, не редкость адаптеры и с 64-битной шиной. Однако реально используемая разрядность может оказаться меньшей, если установлены не все предусмотренные микросхемы видеопамяти.
Блок внешнего интерфейса связывает адаптер с одной из шин компьютера. Если раньше для графических адаптеров использовали шину ISA (8 или 146 бит), то современные графические адаптеры используют в основном высокопроизводительные шины. Локальная шина VLB довольно быстро сошла со сцены вместе с процессорами класса 486. В настоящее время для этих целей перспективна шина РСI и еще более производительный канал AGP.
Блок интерфейса монитора формирует выходные сигналы соответствующего типа (RGB-TTL, RGB-Analog, композитный видео или S-Video). Этот же блок отвечает и за диалог с монитором: в простейшем случае — чтение бит идентификации (для VGA-мониторов), а в более сложном — обмен данными по каналу iddc. Идентификация типа подключенного монитора VGA может производиться и по уровню видеосигнала на выходах красного или синего цвета: монитор имеет терминаторы (75 0м) на каждом из аналоговых входов. Такая нагрузка при подключении снижает напряжение выходного сигнала. У монохромного монитора используется только канал зеленого цвета — линии красного и синего остаются без нагрузки. Этот факт и может зафиксировать интерфейсный блок и сообщить системе об обнаружении монохромного монитора. Правда, бывают irk конфузы: если у цветного монитора отключить терминаторы (некоторые большие мониторы позволяют это сделать), то его примут за монохромный.
Модуль расширения BIOS (Video BIOS) хранит код драйверов видеосервиса (INT10h) и таблицы знакогенераторов. Этот модуль появился с адаптерами EGA и VGA и обеспечивает возможность установки любой карты, не задумываясь о проблемах программной совместимости. Модуль расширения получает управление для инициализации графического адаптера почти в самом начале POST (до тестирования основной памяти), и его заставка появляется на экране до заставки системной BIOS. Модуль имеет начальный адрес C0000h, его размер зависит от модели адаптера: конечный адрес EGA BIOS — CSFFFh, VGABIOS — C7FFFL. Поскольку для расширения BIOS применяют 8-разрядные микросхемы ПЗУ, время доступа, к которым существенно превышает время доступа микросхем ОЗУ, для повышения производительности видеопостроений применяют теневую память (Video BIOS Shadowing) или кэширование (Video BIOS Caching). Драйверы для адаптеров MDA и CGA встроены в системную BIOS. Естественно, что для графических адаптеров, интегрированных в системную плату, программная поддержка также встроена в системную BIOS.
Видеокомпоненты пока еще не стали обязательными принадлежностями дисплейного адаптера. Они могут включать аппаратную поддержку различных кодеков (чаще всего — MPEG-плейер), средства поддержки видеооверлеев, фрейм-граббер, TV-тюнер.
Первые графические адаптеры строились на базе контроллера ЭЛТ (6845), обрамленного массой микросхем средней степени интеграции. В современных дисплейных адаптерах применяются наборы специализированных интегральных схем высокой степени интеграции — графические и видеочипсеты. Эти микросхемы вместе с применяемыми микросхемами видеопамяти определяют основные характеристики адаптеров.


