Неизвестный ранний CGA-гейминг: 160х100, 16 цветов
Приветствую Вас, дорогие читатели и подписчики!
Где-то полгода назад на ютуб-канале The 8-bit Guy я наткнулся на отличное познавательное видео о CGA-адаптерах и их режимах работы (легко находится по словам CGA graphics not as bad). Собственно, там весь канал состоит из интересных и содержательных видео по ретро-тематике, но это меня особенно зацепило. А дело вот в чем. Знакомство с CGA-графикой у меня впервые состоялось в начале 90х в Клубе юных техников, в кружке компьютерной грамотности. Кружок был оснащен XT-совместимыми компьютерами ЕС-1840 и Нейрон с CGA-совместимыми видеоадаптерами, притом все мониторы были черно-белые. Как позднее выяснилось, это сохранило ранимую подростковую психику от созерцания обоих-двух "цветных" палитр CGA - вырвиглазной "теплой" и унылой "холодной":
На советских теплых и ламповых мониторах все выглядело намного спокойнее, в приятных градациях серого. Знакомство с настоящими CGA-цветами состоялось позднее и было необязывающим - у родителей на работе и на информатике в школе были уже компьютеры от 286 и выше, с многоцветными адаптерами EGA и VGA. Поэтому глянув пару раз для пробы, что такое настоящий CGA, захотелось забыть о нем навсегда.
И тут в 2019 году, благодаря упомянутому видеоблоггеру, с удивлением узнаю: CGA мог воспроизводить 16-цветную графику и некоторые разработчики игр в 80е этим пользовались! По словам блоггера, многоцветные CGA-режимы были доступны только при задействовании "композитного" ТВ-выхода графического адаптера. Соответственно, обладатели адаптеров более поздних типов это увидеть уже не могли, т.к. у них режим CGA в платах EGA/VGA эмулировался и картинка выводилась только через штатный выход на монитор.
Немного по-другому описана суть многоцветного режима в статье CGA 16 Color RGB Graphics Modes из блога Nerdy Pleasures. При этом, об ограничениях, связанных с работой только через "композит", в ней я не нашел. На своей ретротехнике я обязательно все это попробую, как только справлюсь с временными аппаратными трудностями. Пока же приведу краткий перевод-пересказ вышеуказанной статьи. Итак:
Nerdy Pleasures
16-цветные графические режимы CGA
Введение
Адаптер Color/Graphics Display Adapter (CGA) мог воспроизвести 16 цветов через цифровой коннектор монитора. Поскольку подсоединение к монитору было именно цифровым (в отличие от последующих аналоговых интерфейсов EGA/VGA), цвета передавались и отображались без какой бы то ни было модуляции-демодуляции. Этим достигалось лучшее качество видео, которое мог позволить типичный 13-дюймовый монитор CRT.
CGA поддерживает текстовые режимы по 40 и 80 столбцов, а также графические разрешения 320x200 и 640x200 точек. Т.к. адаптер имеет видеопамять размером 16 Кб, это ограничивает максимальное количество цветов RGB, которые могут быть отображены в графическом режиме - это 4 цвета из доступной 16-цветной палитры. Притом какими будут эти 4 цвета - свободно выбрать нельзя, т.к. при создании референтной схемы адаптера IBM использовала стандартные логические микросхемы TTL, широко доступные в то время. Это удешевило плату, но и ограничило ее возможности. Посмотрите на фото: плата большая (34 см в длину), микросхем много - но почти все из них можно было купить в радиомагазине.
Все 16 цветов CGA может показать одновременно только в текстовых режимах. Каждая текстовая ячейка имеет свой байт символа и байт атрибута. Байт символа определяет, что показывать на экране, например "A" или "a". Байт атрибута определяет основной цвет и цвет фона для каждого символа. Каждая текстовая ячейка может показать любой из доступных 16 цветов как для символа, так и для фона (для фона при этом надо выключить атрибут мигания).
CGA имеет микросхему ROM, которая содержит шаблоны для 256 символов. Сейчас мы знаем эту таблицу под именем Codepage 437 DOS (на самом деле это имеет два набора шаблонов, тонкий шрифт по умолчанию и полужирный, который может быть выбран через аппаратную перемычку). Вот эти шаблоны:
Эти шаблоны выбираются и отображаются чипом Motorola 6845 CRTC. BIOS программирует CRTC для отображения или 40 столбцов 25 строками или 80 столбцов 25 строками. Каждая ячейка-знакоместо составляет 8x8 пикселей, давая в итоге разрешение 320x200 и 640x200. Если просто рисовать частично или полностью закрашенными ячейками 8х8, то "разрешение" будет так себе - даже при 80 столбцах много не нарисуешь. Но чипы 6845 могут быть запрограммированы для показа любого числа столбцов и строк - нужно только сделать ячейку-знакоместо нужного размера.
Уменьшаем размер ячейки до 8x2 пикселя - и вот уже детализация возросла! На данном этапе экран на 40 или 80 столбцов уже имеет 100 строк. Используя символы с ASCII-кодами 221 или 222, которые имеют шаблон "половина заливка цветом фона, половина заливка цветом символа", можно определять для половинки каждого знакоместа свой независимый цвет. Исходный символ ASCII 221 или 222:
можно расцветить, например, так:
и уменьшить до такого элементарного "кирпичика":
Каждая ячейка становится эквивалентом двух "пикселей", и с режимом на 40 столбцов мы получаем эффективное разрешение экрана 80x100. Максимально достижимая детализация таким путем будет в режиме 80 столбцов, что дает в итоге 160x100 "пикселей". Он чаще всего и использовался игроделами на практике.
Графика из текстовых элементов - как это знакомо у нас обладателям советских ПК семейства Радио-86РК... Там вообще отсутствовал графический режим, а изображение в играх набиралось по знакоместам "символами" с полной или частичной заливкой. А в Апогей БК-01Ц появилась возможность также задавать цвет текста и фона. К сожалению, цветных игр для него вышло всего несколько штук. Аналогично строилось изображение и в некоторых советских игровых автоматах второй половины 80х. Да и на спектрумах при желании можно было неплохо рисовать псевдографикой, что было популярно в листингах простых type-in игр, публиковавшихся в журналах. Но, продолжим.
Одним из преимуществ описанных режимов является возможность использования одновременно нескольких страниц видеопамяти. В режиме 40 столбцов экранная страница занимает 2 Кб, в режиме 80 столбцов - 4 Кб. Т.к. видеопамяти у нас 16 Кб, нам одновременно доступны, соответственно, 8 или 4 экранные страницы. Получается, что если своевременно их заполнять "за кулисами", отрисовка последовательности изображений будет происходить просто мгновенной сменой страниц - это обеспечит плавный скроллинг. К сожалению, этим пользовались немногие игры - платформеры на ПК не особо в почете.
Широкой распространенности помешало, в частности, что IBM вскользь упомянула о режиме 160х100 в своих технических справочниках, но не представила его как режим, доступный через БИОС и не документировала способы его использования. "А теперь - слайды!" (с)
Игры Windmill Software
Windmill Software была одной из первых компаний-разработчиков, сконцентрировавших усилия на платформе IBM PC. Хотя ее игры были клонами популярных аркад, они всегда были добротными и выжимали из CGA максимум. Она выпустила 3 игры, использовавших режим 160х100: The Exterminator, Moon Bugs and Styx. В том же духе, но другими разработчиками были выпущены Bricks и Round 42.
Все эти игры были предназначены для классической IBM PC или PC/XT с тактовой частотой 4.77 МГц с CGA-картой и звуком через штатный динамик PC Speaker. Они разработаны с прицелом на 83-клавишную клавиатуру IBM PC. Этим объясняется, например, непривычное нам использование для выстрела клавиши F1 - просто тогда она была сбоку прямо под рукой, а не далеко вверху. Caps Lock и Ins для перемещения влево-вправо - запросто, ведь они тоже были рядом!
Обычно титры игр отрисовывались в стандартных режимах 320x200x4 или текстовом, а внутриигровая графика уже в 160x100x16. На Tandy 1000 эти игры также без проблем запустятся, а на ПК с EGA/VGA - нет.
Styx:
The Exterminator:
Moon Bugs:
Bricks:
Round42:
Игры компании Macrocom
ICON: Quest for the Ring:
The Seven Spirits of RA:
ICON Demo - одна из первых работ на демосцене IBM PC:
Игры компании Level 9 Computing
Lancelot
Scapeghost:
Tunneler - последняя игра 160х100, сделанная непосредственно в эпоху CGA (1991):
Не обошлось без новоделов - в 2011 году традиции DOS-гейминга в 160х100 поддержала компания Paladin Systems North, выпустив клон Pacman под названием Paku Paku:
Благодарю за внимание и до новых встреч - в том числе, и за другими играми 160х100х16!