CGA-графика
IBM Color Graphics Adapter
Подавляющее большинство отечественных IBM-совместимых 80-90х годов имели видеоадаптер именно CGA, давайте рассмотрим его подробнее.
В 1981 году во время появления первых IBM PC видеоплата CGA (Color Graphics Adapter) предлагалась как достаточно дорогая модель, старшая в серии видеокарт для PC (младшей была монохромная и чисто текстовая MDA — Monochrome Display Adapter). И по конструкции это был достаточно внушительный агрегат — длиннющая плата, содержавшая порядка 70 микросхем (больше, чем во многих ПК начала 80-х и не намного меньше, чем системная плата того же IBM PC), включая собственное ОЗУ на 16 Кбайт, ПЗУ со знакогенератором на 256 символов (2 Кбайт), чип видеоконтроллера Motorola 6845 (он же использовался в видеокартах MDA и EGA, компьютерах BBC Micro, Amstrad CPC и др.) и десятки корпусов «мелкой логики». Поддерживалось несколько текстовых и графических режимов, причём текстовые были вполне многоцветные: отображалось 25 строк по 80 или 40 символов (матрица знака 8х8 точек), и для каждого символа допускался выбор любого из 16 цветов фона и 16 цветов изображения, а также доступно мерцание. В стандартном графическом режиме 320×200 точек CGA мог отображать лишь 4 цвета одновременно с возможностью выбора одной из двух палитр (но для каждой доступно два варианта — тёмный и светлый), а также выбором любого цвета фона из 16-ти доступных. В режиме высокого разрешения 640×200 точек выводилось лишь два цвета, причём один из них выбирался произвольно из 16-цветной палитры (но почти всегда использовался белый), а фон всегда оставался чёрным.
Фото с попугаями, выведенное на CGA в разрешении 320х200 c первой 4-цветной палитрой (яркий вариант). Видно, что для отображения реалистичных картинок четырёх цветов отчаянно не хватает, хотя сами доступные цвета достаточно приятные, тёплые.
Второй вариант CGA-палитры: холодные цвета
Монохромная CGA-графика в разрешении 640х200: достаточно чёткое изображение с неплохой передачей полутонов за счёт изменения пространственной плотности расположения точек
Третий (как бы нестандартный) вариант палитры CGA: неплохое сочетание тёплого (красный) и холодных цветов (голубой, белый)
Надо заметить, CGA-графика отличается достаточно странным и спорным набором цветов — мало того, что их всего 4, так ещё и выбор их довольно загадочен: в одной палитре — белый, голубой и сиреневый, в другой — красный, зёленый, жёлтый/коричневый (не считая цвета фона, который в большинстве случаев был чёрным). Отобразить с такими цветами какую-либо приличную графику достаточно проблематично, в том числе и в играх. Впрочем, хотя цвета CGA и принято поругивать, всё же своя логика в них есть: в палитре «красный-зелёный-жёлтый» цвета «тёплые», в «белый-голубой-сиреневый» — «холодные», а в 3-й палитре («голубой, красный, белый») — смесь тех и других.
Ещё одной особенностью, связанной с ограничениями чипа 6845 (он предназначен в основном для вывода текста, а не графики, и мог отображать не более 128 строк) было использование двухбанковой структуры видеопамяти в графическом режиме: нечётные строки изображения (100 строк, ~8 Кбайт) хранились в одной половине памяти, чётные — в другой, то есть последовательно расположенные строки находились в памяти не друг за другом, а со смещением в 8 Кбайт, что создавало некоторые трудности при программировании графики.
Известным недостатком оригинальных CGA (отсутствующим у многих «клонов» CGA и у всех видеокарт других типов) был так называемый «снег» — помехи в виде случайных горизонтальных чёрточек, появлявшиеся в текстовом режиме при записи данных процессором ПК в видеопамять (из-за приоритета ЦП ПК над видеоконтроллером при доступе к видеопамяти). Обойти этот недостаток можно было лишь одним способом — записывая данные в видеопамять только в короткий период обратного хода луча кадровой развёртки (примерно 1—2 миллисекунды в течение каждого кадра длительностью 1/60 сек) или обратного хода строчной развёртки (очень короткие отрезки в несколько микросекунд после вывода каждой строки на экран).
Никакой стандартной поддержки игровой или «мультимедийной» графики у CGA не предусмотрено — ни скроллингов (плавного сдвига изображения по вертикали или горизонтали), ни аппаратных «спрайтов», ни программируемой палитры, ни многоплановой структуры видеопамяти и т. д. Вся работа с графикой выполнялась чисто программно, за счёт центрального процессора. Зато, в отличие от большинства тогдашних игровых ПК, в CGA есть произвольный выбор цветов для любой точки — в графическом режиме среднего разрешения 320х200 нет никаких ограничений на использование доступных 4-х цветов, любые точки (в том числе соседние) можно окрашивать в любой из 4-х цветов (аналогично БК-0010/0011, «Львову», «Искре 1080» и т.д.). Правда, в отличие от некоторых ПК (например, советского «Корвета») одновременное использование графического и текстового режимов — скажем, наложение аппаратного текста на графику или наоборот — не предусмотрено.
CGA-графика с 16-ю цветами, но низкого разрешения — 160х100. Цвета, безусловно, намного веселее, но разрешение, к сожалению, катастрофически слабое.
Кроме стандартных режимов, CGA поддерживал и несколько дополнительных возможностей, которые иногда использовались в программах и играх: третью палитру (голубой, красный, белый), «композитный» 16-цветный графический режим с использованием особенностей американского стандарта цветного телевидения NTSC (позволял значительно улучшить цвета в некоторых играх), 16-цветную графику низкого разрешения 160х100 на основе изменённого текстового режима и др. Однако большинство разработчиков игр пользовалось лишь стандартными возможностями, изредка прибегая к каким-то «твикам» вроде многократной смены палитр или фонового цвета в кадре. Хороший пример максимального использования функций CGA дают «демки» — например,
Обычный текстовый режим CGA 80x25: пример программы на стандартном Бейсике — строки почти слипаются, читать текст очень неудобно
Та же Бейсик-программа на мониторе MDA: между строками нормальные просветы, читать текст намного легче; изображение приятно-зеленоватое, поскольку большинство монохромных мониторов для IBM PC имели именно зелёное свечение (реже жёлтое, белое и т.п.)
Текст CGA: на укрупнённом снимке хорошо видно, что соседние строки местами буквально сливаются (там, где есть запятые, а в других случаях — некоторые строчные буквы, спецсимволы и т.д.), поскольку на просвет между строками отведена всего одна точка
Текст MDA (а также Hercules): строки не «сливаются» (на просветы между ними отведено 3 точки), сами символы несколько мельче, но заметно чётче и выглядят лучше (матрица типичного большого символа 7х11 точек, а не 7х7, как у CGA); между буквами просветы так
В целом, CGA-видеокарты трудно назвать удачными, даже с учётом относительно раннего времени появления. В качестве профессиональных они во многом уступали даже более простым MDA или Hercules, имевшим значительно более приятный и серьёзный режим вывода текста с матрицей знакоместа 9х14 точек, из которых сами символы использовали 7х11 точек (между буквами были нормальные просветы как по горизонтали, так и, особенно, по вертикали; а вот в CGA символы и строки были вплотную прилеплены друг к другу — матрица знакоместа 8х8, а матрица символа 7х7, то есть просветы между крупными символами всего в одну точку и сами символы более простые, что выглядело гораздо хуже и напоминало дешёвые домашние ПК). Графика CGA также была весьма ограниченной (особенно по количеству цветов) и малопригодной для серьёзных целей в качестве именно цветной графики. Однако само наличие графики, конечно, сильно расширяло сферу применения ПК в сравнении, например, с текстовыми MDA — и не только в тех очевидных случаях, когда требовалось что-то рисовать на экране, но и, к примеру, для той же обработки текстов (появлялись возможности пропорционального отображения букв, а не с постоянной шириной, изменения начертания и размера шрифта, одновременного использования любых языков и т. п.) или для реализации графических оболочек в операционных системах (в середине 1980-х появились первые версии Windows и другие подобные программы).
Хотя первые IBM PC в минимальной конфигурации были вполне рассчитаны на подключение к обычному телевизору и бытовому магнитофону (но гораздо чаще использовались всё же со специальным монитором и дисководами), для домашнего использования CGA был также не очень-то хорош — для компьютера с минимальной ценой 1565 долларов (с 16 Кбайт ОЗУ и без какой-либо периферии) предлагалась видеокарта, явно уступавшая по возможностям работы с цветом очень многим в разы более дешёвым домашним ПК и видеоприставкам (причём видеокарта гордо называлась «цветным графическим адаптером» и стоила дороже многих ПК и приставок). Впрочем, в отличие от большинства дешёвых ПК и, тем более, приставок, CGA всё же имел достаточно высокое разрешение и графики, и текста, что выделяло его среди типичных домашних ПК начала 80-х. А в сфере профессиональных ПК многие вообще не имели поддержки графики, предлагая чисто текстовый экран. Однако некоторые компьютеры при значительно более скромных ценах отличались заметно лучшими графическими возможностями — к примеру, вышедший в конце того же 1981 года учебно-домашний Acorn BBC Micro, основанный также на видеоконтроллере 6845, предлагал гораздо больше режимов экрана, большее количество одновременно выводимых цветов (8 вместо 4, да ещё и с программируемой палитрой) и большее максимальное разрешение (640х256 вместо 640х200).
Серьёзными конкурентами CGA были видеокарты Hercules Graphics Card, производившиеся с 1982 года и не имевшие поддержки цвета (хотя позже вышла и цветная версия), но зато обеспечивающие высокое качество текста и графику вдвое большего разрешения, чем CGA — 720х348 точек. Эти видеокарты были совместимы как с MDA, так, частично, и с CGA, поэтому были очень удобны для бизнес-пользователей и стали фактически главным стандартом на IBM-совместимых ПК с монохромными мониторами.
Одна из первых версий Windows (1.01) на IBM PC с CGA: работа в графическом режиме 640х200 позволяет отображать текст со шрифтами разного вида (в том числе пропорциональными) и разного размера
Windows 1.01 на CGA, графический редактор Paint: разрешения 640х200 было вполне достаточно для рисования качественных монохромных значков, окон и т.п.
Таким образом, CGA, очевидно, создавался как некий компромисс между функциями вывода текста и графики, возможностями чипа 6845, объёмом видеопамяти, необходимостью поддержки не только специальных мониторов, но и бытовых телевизоров (а это сильно снижало допустимое вертикальное разрешение) и так далее. В результате получился достаточно странный видеоадаптер, не очень-то хорошо справляющийся ни с типичными задачами профессиональных ПК (как правило, в том или ином виде работа с текстами), ни с развлекательными функциями домашних ПК, но при этом довольно сложный и дорогой (и рассчитанный на подключение к достаточно дорогому цветному монитору, а не к дешёвому монохромному). Впрочем, долгая жизнь CGA — а они были основными цветными видеокартами на IBM-совместимых ПК примерно до 1987 года и очень широко использовались вплоть до начала-середины 1990-х — говорит о том, что при всех теоретических недостатках, его практические возможности оказались вполне приемлемыми для широкого круга задач. В 1984 году IBM предложила новый вариант старшей видеокарты массового применения — EGA (Enhanced Graphics Adapter), в которой удачно исправлялись недостатки как текстового режима (матрица знакоместа увеличена до 8х14 точек, появился программируемый знакогенератор), так и графического (максимальное разрешение увеличено до 640х350, причём для любой точки доступно 16 цветов, программируемых из общей палитры в 64 цвета). Впрочем, EGA-карты стоили значительно дороже и не были совместимы с CGA-мониторами, а EGA-мониторы также были дороже. Поэтому в недорогих IBM-совместимых видеокарты CGA продолжали использоваться ещё достаточно долго, в том числе даже после появления ещё более продвинутых VGA (1987 г.), XGA, SVGA и т. д.
Применение CGA-совместимых видеоконтроллеров в советских IBM-совместимых ПК, особенно недорогих домашних моделях, также вполне логично: для дешёвых компьютеров более сложные и дорогие видеокарты были просто неприемлемы (учитывая, что даже на реализацию сравнительно простого CGA уходило до половины микросхем всего ПК); к тому же среди стандартных видеоадаптеров для PC только CGA поддерживал вывод на обычные телевизоры, что было необходимым условием для отечественных домашних ПК.