Введение
Сейчас развитие видеоподсистемы идет сумасшедшими темпами, и зачастую видеоадаптеры диктуют моду мониторам, однако на рассвете компьютерной эпохи все было совсем наоборот. Так откуда же «выросла» эта железка, которая в настоящее время по стоимости может поспорить с процом?
Первые мониторы, являвшиеся наследниками осциллографов, были векторными и не предполагали наличие видеоадаптера, ведь в них изображение строилось не посредством последовательного облучения электронным пучком экрана строка за строкой, а, так сказать, «от точки до точки». Компьютер управлял отклоняющей системой дисплея напрямую. Однако когда вывод на монитор пришел на смену выводу на телетайп, и сложность изображения увеличилась, целесообразнее стало подключить компьютер к телевизору. По этому пути развития и пошли дальше мониторы. Телевизионное изображение - растровое, поэтому возникла необходимость в промежуточных блоках для подготовки графической информации к отображению. Для построения картинки теперь требовались специализированные довольно ресурсоемкие вычисления, поэтому понадобились специальные устройства, ориентированные на работу с растровыми мониторами, которые могли бы хранить в себе видеоинформацию, обрабатывать ее и переводить в аналоговую форму для отображения на дисплее. Основной технологией здесь можно считать frame-buffer technology[1]. Изначально в задачу видеокарты входило только сохранение и регенерация кадра, и построение целиком ложилось на центральный процессор и программу. Процессор рассчитывал кадр и помещал его в память видеоадаптера, который преобразовывал данные из видеопамяти в аналоговый вид.
Основные узлы
Чтобы не запутаться в дальнейшем, кратко рассмотрим основные узлы видеоадаптера. Видеоадаптеры состояли из следующих основных частей: графического преобразователя, контроллера атрибутов, контроллера CRT, ПЗУ[2], видеопамяти и синхронизатора. В первых символьных версиях видеоадаптеров ПЗУ отсутствовало. Оно было добавлено несколько позже, и предназначалось для хранения экранных шрифтов, служебных таблиц и т.п. ПЗУ не используется видеоконтроллером напрямую - к нему обращается только центральный процессор, и в результате выполнения им программ из ПЗУ происходят обращения к видеоконтроллеру и видеопамяти. ПЗУ необходимо только для первоначального запуска адаптера и работы в режиме DOS[3] - операционные системы с графическим интерфейсом его практически не используют. В целом в ходе истории ПЗУ глобально не изменялось. Обновлялись и добавлялись лишь данные, хранящиеся в нем. Графический контроллер - устройство, которое отвечает за обмен данными между CPU и видеопамятью, регенерацию ее содержимого, и обработку запросов центрального процессора. Для исключения конфликтов при обращении к памяти со стороны видеоконтроллера и центрального процессора первый имеет отдельный буфер, который в свободное от обращений ЦП время заполняется данными из видеопамяти. Если конфликта избежать не удается - видеоконтроллеру приходится задерживать обращение ЦП к видеопамяти, что снижает производительность системы. Для исключения подобных конфликтов в ряде карт применялась так называемая двухпортовая память, допускающая одновременные обращения со стороны двух устройств.
Последовательный преобразователь – выбирает данные из памяти и преобразует их в поток битов. Контроллер атрибутов - преобразует информацию о цвете в вид для отображения монитором.
Контроллер CRT - генерирует синхросигналы, управляющие монитором. Видеопамять - используется как буфер видеоконтроллера для промежуточного хранения и модификации изображения. Синхронизатор - обеспечивает синхронную работу всех узлов адаптера, задает временные параметры и управляет доступом CPU к видеопамяти.
MDA
Видеокарты стандарта MDA[4] использовались в IBM PC[5] самыми первыми, они были представлены IBM в 1981 году. MDA-адаптеры были монохромными и работали в текстовом режиме. По сути, задача сводилась к тому, чтобы «распечатать» на мониторе текст, как на принтере. Экран монитора условно был «разбит» на определенное количество строк и столбцов. В каждой позиции мог выводиться только один символ. В ПЗУ видеоадаптера хранились символы в виде двоичных матриц соответственно ярких и неярких точек. Символ представлялся в виде матрицы 9x14 точек. Монитор, однако, облучает строчку экрана за строчкой, поэтому адаптер сохранял в память всю символьную строку, транслировал отдельные символы в матрицы и преобразовывал их в матрицу строки. Для преобразования кодов символов в двоичные матрицы служил так называемый знакогенератор. При получении кода символа знакогенератор формировал на своем выходе соответствующий двоичный код. Дальше каждая строчка матрицы символьной строки передавалась в монитор, который засвечивал соответствующие точки люминофора. Чтобы построение изображения было возможным, видеоадаптер также генерировал синхросигнал, который задавал частоту строчной развертки. Однако, в отличие от принтера, на мониторе изображение необходимо регенерировать, поэтому программе постоянно приходилось посылать страницу «на печать» в порт монитора.
Текстовый режим в современных операционных системах используется только на этапе начальной загрузки. Но именно MDA мы обязаны текстовому режиму 80 столбцов на 25 строк, который используется и до сих пор. Это соответствовало разрешению 720x350 точек, частота регенерации кадра составляла 50 Гц. Стандартный набор состоял из 256 символов, очертания которых хранились в ПЗУ, с помощью платы расширения памяти фирмы IBM можно было расширить набор до 512 символов. IBM graphics memory module kit позволял увеличить его до 1024 символов.
Hercules
В то же время выпускается монохромный адаптер высокого разрешения – Hercules. Это первый графический адаптер, то есть кадр строится в видеопамяти, а адресация осуществляется к каждой точке. HOC[6], так же, как и MDA, поддерживал текстовый режим. Этот адаптер получил большое распространение при работе с электронными таблицами для построения графиков и диаграмм, но в силу своей монохромности дальше не поддерживался. Однако очень долгое время данный адаптер
к одному компьютеру. Так, поставив CGA/EGA/VGA и Hercules, можно было работать с двумя мониторами. Актуально это было до 1996 года, пока не появились видеокарты, поддерживающие два монитора.
CGA
На смену MDA в 1982 году пришел стандарт CGA[7] и привел за собой жесткую стандартизацию. Это была первая революция в видеоадаптерах. Видеоадаптеры CGA были цветными и графическими (если быть точнее, они поддерживали как символьный, так и графический вывод). Графический кадр сохранялся в видеопамяти, а затем транслировался в монитор. Цвет пикселя задавался цифровыми сигналами, определявшими уровень яркости для соответствующих RGB-пушек, а уже логика монитора преобразовывала их в аналоговую форму. Палитра CGA состояла из 1 6 цветов. При разработке CGA главной задачей была универсальность, а потому использовалась стандартная частота развертки - 60 Гц.
Камнем преткновения на этом этапе была видеопамять, точнее, ее объем. Дело в том, что модули памяти в то время были дико дорогими, поэтому CGA-адаптеры стандартно комплектовались 16 Кб видеопамяти. И если в текстовом режиме 80x25 символов (то есть 640x200 пикселей) видеокарта могла выводить все 16 цветов, то в графическом хватало лишь на то, чтобы одновременно выводить только 4 цвета, причем не любые, а только стандартные палитры. С этого момента все узлы адаптера стали работать на частоте кадровой развертки, так как возникали конфликты с видеопамятью, проявляющиеся в виде «снега» на экране.
В текстовом режиме размер матрицы символа был 9x14 точек, однако можно было установить размер матрицы 8x8, что хотя и ухудшало восприятие текста, но зато позволяло разместить на экране больше информации.
EGA
Однако первой видеокартой, способной воспроизводить нормальное цветное изображение, был EGA-адаптер[8], представленный IBM в 1984 году. EGA поддерживал 16 цветов и разрешение до 640x350 точек. Также поддерживались CGA режимы: 640x200 и 320x200. Первые карты могли работать с мониторами обоих типов. Переключение между режимами осуществлялось при помощи dip-переключателей на задней планке видеоадаптера. Также поддерживались и текстовые режимы. Стандартный объем видеопамяти составлял 64 Кб. В более поздних EGA-клонах фирм ATI Technologies и Paradise с объемом памяти 256 Кб были доступны режимы: 640x400, 640x480 и 720x540. Видеопамять была разделена на четыре банка (четыре цветовых слоя). Таким образом, по одному адресу располагалось четыре байта. Процессор мог заполнять их одновременно. В результате скорость заполнения кадра значительно увеличилась. Отличительной чертой от предыдущих видеоадаптеров было добавление в ПЗУ видеокарты не графических примитивов, а наборов инструкций для их построения, что ознаменовало зарождение ускорителей. Частота регенерации кадра осталась 60 Гц. Интерфейс с монитором по-прежнему цифровой.
MCGA
Сейчас мало кто знает про Multi Colour Graphics Array. Этот тип видеоадаптеров не был особо распространен. Причиной тому явилась политика IBM, которая изобрела и ввела этот стандарт в рамках стандарта PS/2. Лицензии на производство данного типа карт компания не давала, поэтому MCGA не стал общим стандартом. Список поддерживаемых
640x400 (текст). Количество воспроизводимых оттенков в текстовом режиме составило 262144. Графический режим характеризовался разрешением 320x200 пикселей при 64 Кб видеопамяти.
VCA
Поистине революционным стандартом можно считать стандарт VGA[9], представленный все той же IBM в 1987 году. Революцией являлось появление цифро-аналогового преобразователя в VGA-адаптерах. Это было связано с переходом от цифрового управления монитором к аналоговому. Все дело в том, что VGA-видеокарта могла отображать значительно больше оттенков, чем видеоадаптеры всех предыдущих стандартов: теперь для кодирования каждого цвета требовалось не 2 бита, а целых 6, то есть 18 проводов на цвета, плюс один провод на сигнал синхронизации, что, согласись, нецелесообразно. Поэтому в монитор стали передавать аналоговый сигнал, от уровня которого зависел уровень яркости соответствующей RGB-пушки. В связи с этим возникла необходимость установить на видеоадаптер цифро-аналоговый преобразователь. Вместе с VGA появилось несколько более знакомое всем сокращение RAMDAC[10]. VGA-адаптеры комплектовались 256 Кб видеопамяти и поддерживали следующие режимы: 640x480 - 16 цветов, 640x400 - 16 цветов, 320x200 - 16 цветов и 320x200 - 256 цветов. Палитра VGA составляла 262144 оттенков (2Л18, по 64 уровня яркости на каждый RGB-цвет). Начиная с этого адаптера, применяются разрешения с соотношением сторон 4:3.