Color Television Interface Adapter [1] ( CTIA ) и его преемник Graphic Television Interface Adapter [1] ( GTIA ) — это специальные чипы, используемые в 8-битных компьютерах Atari и домашней игровой консоли Atari 5200. В этих системах чип CTIA или GTIA работает вместе с ANTIC для создания видеодисплея. ANTIC генерирует графику игрового поля (текст и растровое изображение), в то время как CTIA/GTIA обеспечивает цвет для игрового поля и добавляет наложенные объекты, известные как графика игрока/ракеты ( спрайты ). Под руководством Джея Майнера чипы CTIA/GTIA были разработаны Джорджем Маклеодом при технической помощи Стива Смита. [2] [3] [4]
Color Television Interface Adapter и Graphic Television Interface Adapter — названия микросхем, указанные в руководстве по обслуживанию Atari на местах. [1] В различных публикациях микросхемы именовались по-разному, иногда использовалось альтернативное написание Adapter [5] [6] или Graphics , [3] или утверждалось, что «C» в «CTIA» означает Colleen/Candy [5], а «G» в «GTIA» означает George. [3] [5] [6] [7]
Atari построила свой первый чип драйвера дисплея, Television Interface Adaptor , но повсеместно называемый TIA, как часть консоли Atari 2600. [8] Дисплей TIA логически состоял из двух основных наборов объектов, «игроков» и «ракет» , которые представляли движущиеся объекты, и «игрового поля», которое представляло статическое фоновое изображение, на котором происходило действие. Чип использовал данные в регистрах памяти для создания цифровых сигналов, которые преобразовывались в реальном времени через цифро-аналоговый преобразователь и радиочастотный модулятор для создания телевизионного дисплея.
Обычный способ отрисовки игрового поля — использовать битовую карту, хранящуюся в буфере кадра , в котором каждая ячейка памяти в буфере кадра представляет одно или несколько мест на экране. В случае 2600, который обычно использовал разрешение 160x192 пикселей, буфер кадра должен был иметь не менее 160x192/8 = 3840 байт памяти. Созданная в эпоху, когда ОЗУ было очень дорогим, TIA не могла себе позволить это решение.
Вместо этого система реализовала систему отображения, которая использовала один 20-битный регистр памяти , который можно было скопировать или отразить на правой половине экрана, чтобы создать то, что фактически было 40-битным дисплеем. Каждое местоположение могло быть отображено в одном из четырех цветов из палитры из 128 возможных цветов. TIA также включала несколько других объектов отображения, «игроков» и «ракет». Они состояли из двух 8-битных объектов, известных как «игроков», одного 1-битного объекта, известного как «мяч», и двух 1-битных «ракет». Все эти объекты можно было перемещать в произвольные горизонтальные местоположения с помощью настроек в других регистрах.
Ключ к системе TIA и низкой цене 2600 заключался в том, что система реализовала достаточно памяти только для рисования одной строки дисплея, все из которых хранились в регистрах. Чтобы нарисовать весь экран, полный данных, пользовательский код ждал, пока телевизионный дисплей достигнет правой стороны экрана, и обновлял регистры для игрового поля и игрока/ракет, чтобы правильно отразить следующую строку на дисплее. Эта схема рисовала экран построчно из программного кода на картридже ROM , метод, известный как «гонка луча».
Atari изначально предполагала, что 2600 будет иметь короткий срок службы на рынке в три года, когда она была разработана в 1976 году, что означало, что компании понадобится новый дизайн к 1979 году. [8] Первоначально этот новый дизайн был просто обновленной игровой консолью, похожей на 2600, и был построен вокруг похожего базового дизайна, просто обновленного. Работа над тем, что станет CTIA, началась в 1977 году и была направлена на создание системы с удвоенным разрешением и удвоенным количеством цветов. Более того, изменяя количество цветов на игровом поле, можно было поддерживать гораздо более высокие разрешения до 320 пикселей по горизонтали. Игроки и ракеты также были обновлены, включая четырех 8-битных игроков и четыре 2-битных ракеты, но также допуская дополнительный режим для объединения четырех ракет в пятого игрока.
Вскоре после начала проектирования, революция домашних компьютеров началась всерьез во второй половине 1977 года. В ответ Atari решила выпустить две версии новой машины, модель начального уровня в качестве игровой консоли и версию высокого уровня в качестве домашнего компьютера. [8] В любой роли требовалось более сложное игровое поле, особенно поддержка графики персонажей в роли компьютера. Дизайн CTIA был хорошо продвинут на тот момент, поэтому вместо перепроектирования было предложено умное решение путем добавления второго чипа, который бы эффективно автоматизировал процесс гонки луча. Вместо того, чтобы программировать пользователя, обновляя регистры CTIA на основе его синхронизации прерываний, новый ANTIC выполнял эту рутинную работу, считывая данные из буфера кадра и передавая их в CTIA на лету.
В результате этих изменений новые чипы обеспечивают значительно улучшенное количество и выбор графических режимов по сравнению с TIA. Вместо одного режима игрового поля с разрешением 20 или 40 бит пара CTIA/ANTIC может отображать шесть текстовых режимов и восемь графических режимов с различными разрешениями и глубиной цвета, позволяя программисту выбирать баланс между разрешением, цветами и использованием памяти для своего дисплея.
Первоначальный дизайн чипа CTIA также включал три дополнительных цветовых интерпретации обычных графических режимов. Эта функция обеспечивает альтернативные выражения графических режимов высокого разрешения ANTIC, представляющих 1 бит на пиксель, 2 цвета с шириной пикселей в половину цветовой тактовой частоты как 4 бита на пиксель, до 16 цветов, пикселей с шириной двухцветной тактовой частоты. Эта функция была готова до дебюта компьютеров в ноябре 1979 года, но была настолько задержана в цикле разработки, что Atari уже заказала партию из около 100 000 чипов CTIA с отсутствующими графическими режимами. Не желая выбрасывать уже произведенные чипы, компания решила использовать их в первоначальном выпуске моделей Atari 400 и 800 на рынке США. Компьютеры, оснащенные CTIA, но не имеющие 3 дополнительных цветовых режимов, поставлялись до октября-ноября 1981 года. [5] [6] С этого момента все новые устройства Atari оснащались новым чипом, теперь называемым GTIA, который поддерживал новые режимы интерпретации цвета. [6] [9]
Оригинальная операционная система Atari 800/400 поддерживала альтернативные режимы интерпретации цвета GTIA с самого начала, [9] что позволяло легко заменить CTIA на GTIA, как только он был готов. Авторизованные сервисные центры Atari устанавливали чип GTIA в компьютеры, оснащенные CTIA, бесплатно, если компьютер находился на гарантии; в противном случае замена стоила бы 62,52 доллара. [6] [7]
GTIA также устанавливалась во все более поздние компьютеры Atari XL и XE, а также на консоли Atari 5200.
В приведенном ниже списке описываются присущие CTIA/GTIA аппаратные возможности, то есть предполагаемая функциональность самого оборудования, без учета результатов, достигнутых с помощью прерываний, обслуживаемых ЦП, или ядер отображения, управляющих частыми изменениями регистров.
CTIA/GTIA — это телевизионное интерфейсное устройство со следующими характеристиками:
по номеру детали
Atari, Inc. намеревалась объединить функции чипов ANTIC и GTIA в одной интегральной схеме, чтобы снизить себестоимость компьютеров Atari и консолей 5200. Разрабатывались две такие прототипные схемы, однако ни одна из них не пошла в производство.
8-битные компьютеры Atari отображают CTIA/GTIA на шестнадцатеричной странице $D0xx, а консоль Atari 5200 отображает ее на шестнадцатеричной странице $C0xx.
CTIA/GTIA предоставляет 54 регистра чтения/записи, управляющих графикой игрока/ракеты, цветами игрового поля, триггерами джойстика и клавишами консоли. Многие адреса регистров CTIA/GTIA имеют двойное назначение, выполняя различные функции как регистр чтения и записи. Поэтому никакой код не должен читать аппаратные регистры, ожидая извлечения ранее записанного значения.
Эта проблема решена для многих регистров записи с помощью регистров тени операционной системы, реализованных в обычной оперативной памяти как места для хранения последнего записанного в регистры значения. Регистры тени операционной системы копируются из оперативной памяти в аппаратные регистры во время вертикального пустого пространства. Поэтому любая запись в аппаратные регистры, имеющие соответствующие теневые регистры, будет перезаписана значением регистров тени во время следующего вертикального пустого пространства.
Некоторые регистры записи не имеют соответствующих теневых регистров. Они могут быть безопасно записаны приложением без перезаписи значения во время вертикального пробела. Если приложению необходимо знать последнее состояние регистра, то приложение должно запомнить, что оно записало.
Теневые регистры операционной системы также существуют для некоторых регистров чтения, где считывание значения непосредственно с оборудования на неизвестном этапе цикла отображения может возвращать противоречивые результаты.
В отдельных регистрационных списках ниже применяется следующая легенда:
Эти регистры определяют горизонтальное положение в цветовых часах левого края (старший бит байтовых шаблонов GRAF*) объектов Player/Missile. Координаты всегда основаны на движке цветовых часов аппаратного обеспечения дисплея, а НЕ просто на текущем режиме отображения Playfield. Это также означает, что объекты Player/Missile могут быть перемещены в области сканирования за пределами текущего режима Playfield.
Обратите внимание, что хотя битовые шаблоны объектов Ракеты используют один и тот же байт для отображаемых пикселей (GRAFM), каждая Ракета может быть позиционирована независимо. Когда включена опция "пятый Игрок" (см. регистр PRIOR/GPRIOR), превращающая четыре Ракеты в одного "Игрока", Ракеты переключаются с отображения цвета связанного объекта Игрока на отображение значения COLPF3. Новое положение "Игрока" на экране должно быть установлено путем указания положения каждой Ракеты по отдельности.
Пиксели игрока/ракеты визуализируются только в видимых частях пиксельного движка GTIA. Объекты игрока/ракеты не визуализируются во время горизонтального пробела или вертикального пробела. Однако объект может частично находиться в пределах горизонтального пробела. Пиксели объектов, которые выходят за пределы горизонтального пробела, тогда находятся в пределах видимой части дисплея и все еще могут регистрировать столкновения. Диапазон горизонтального положения видимых цветовых часов составляет от $22 hex /34 dec до $DD hex /221 dec .
Чтобы удалить объект «Игрок/Ракета» из видимой области отображения, горизонтальные позиции (слева) 0 и (справа) $DE hex /222 dec (или больше) обеспечат отсутствие отрисовки пикселей независимо от размера объекта «Игрок/Ракета», и, таким образом, не будут отмечены непреднамеренные столкновения.
Горизонтальное положение игрока 0
Горизонтальное положение игрока 1
Горизонтальное положение игрока 2
Горизонтальное положение игрока 3
Горизонтальное положение ракеты 0
Горизонтальное положение ракеты 1
Горизонтальное положение ракеты 2
Горизонтальное положение ракеты 3
Ниже приведены координаты цветовых часов левого и правого краев возможных размеров игрового поля, полезные при выравнивании объектов «Игрок»/«Ракета» по компонентам игрового поля:
Можно выбрать три размера: Normal, Double и Quad width. Левый край (см. Горизонтальные координаты) фиксирован, а изменение размера расширяет Player или Missile вправо во всех случаях.
Обратите внимание, что в размере Quad один пиксель Player/Missile имеет ту же ширину, что и текстовый символ Antic Mode 2. Выбор приоритета Player/Missile в сочетании с графикой Player Missile ширины Quad может использоваться для создания нескольких цветов текста на строку режима.
У каждого игрока есть свой регистр контроля размера:
Размер игрока 0
Размер игрока 1
Размер игрока 2
Размер игрока 3
Управление размером плеера:
Ценности:
Все размеры Ракет контролируются одним регистром, но каждая Ракета может быть установлена независимо от других. Когда включена опция "пятый Игрок" (см. регистр PRIOR/GPRIOR), превращающая четыре Ракеты в одного "Игрока", ширина по-прежнему задается путем указания размера для каждой Ракеты по отдельности.
Ценности:
Каждый объект Player имеет свой собственный 8-битный регистр шаблона. Объекты Missile совместно используют один регистр с 2 битами на каждую Missile. После установки значения оно будет продолжать отображаться на каждой строке сканирования. Без какого-либо другого вмешательства со стороны CPU или ANTIC DMA для обновления значений результатом являются вертикальные полосатые шаблоны по высоте экрана, включая области сканирования за пределами экрана. Этот режим работы не нагружает CPU или DMA на компьютере. Он полезен для отображения чередующихся цветных границ и вертикальных линий, разделяющих области экрана.
Графический шаблон для игрока 0
Графический шаблон для игрока 1
Графический шаблон для игрока 2
Графический шаблон для игрока 3
Каждый игрок имеет ширину 8 бит (пикселей). Если бит установлен, пиксель отображается в цвете, назначенном цветовому регистру, связанному с игроком. Если бит не установлен, объект игрока прозрачен, показывая игроков, ракеты, пиксели игрового поля или цвет фона. Вывод пикселей начинается с горизонтальной позиции, указанной значением HPOS игрока, причем первым выводится самый высокий бит.
Графический шаблон для всех ракет
Каждая ракета имеет ширину 2 бита (пикселя). Если бит установлен, пиксель отображается в цвете, назначенном цветовому регистру для игрока, связанного с ракетой. Когда включен пятый игрок (см. PRIOR/GPRIOR), все пиксели ракет отображают COLPF3. Если бит не установлен, объект ракеты прозрачен, показывая игроков, ракеты, пиксели игрового поля или цвет фона. Вывод пикселей начинается с горизонтальной позиции, указанной значением HPOS ракеты, причем первым выводится самый высокий бит.
Значения ракет:
CTIA/GTIA имеет 60 бит, обеспечивающих автоматическое обнаружение столкновений при пересечении пикселей Player, Missile и Playfield. Один бит указывает, что ненулевой пиксель объекта Player/Missile пересек пиксель определенного регистра цвета. Для пикселей, отрисованных с использованием регистра/значения цвета фона, столкновение не регистрируется. Эта система обеспечивает мгновенное, идеальное по пикселям сравнение перекрытий без дорогостоящей оценки CPU ограничивающего прямоугольника или маскирования битовой карты изображения.
Фактическое значение цвета объекта не учитывается. Если регистры цвета Player, Missile, Playfield и Background имеют одинаковое значение, что делает объекты фактически «невидимыми», пересечения объектов все равно будут регистрировать столкновения. Это полезно для создания скрытых или секретных объектов и стен.
Скрытые пересечения также регистрируют столкновения. Если приоритет объекта Player находится за регистром цвета Playfield, а приоритет другого объекта Player выше (передний план), чем Playfield, и пиксели Player переднего плана закрывают как Playfield, так и объект Player за Playfield, то столкновение между Playfield и обоими объектами Player на заднем и переднем плане будет зарегистрировано вместе со столкновением между объектами Player на переднем и заднем плане.
Обратите внимание, что столкновения ракет друг с другом не происходит.
Столкновения игрока/ракеты могут происходить только тогда, когда пиксели объектов игрока/ракеты попадают в видимые части дисплея. Объекты игрока/ракеты не визуализируются во время горизонтального пробела или вертикального пробела. Диапазон видимых цветовых тактовых импульсов составляет от 34 до 221, а видимые строки сканирования находятся в диапазоне от строки 8 до строки 247. Данные игрока/ракеты за пределами этих координат не визуализируются и не будут регистрировать столкновения. Объект может частично находиться в пределах горизонтального пробела. Пиксели объектов, которые попадают за пределы горизонтального пробела, находятся в пределах видимой части дисплея и все еще могут регистрировать столкновения.
Чтобы удалить объект «Игрок/Ракета» из видимой области отображения, горизонтальные позиции (слева) 0 и (справа) 222 (или больше) обеспечат отсутствие отрисовки пикселей независимо от размера объекта «Игрок/Ракета», и, таким образом, не будут отмечены непреднамеренные столкновения.
Наконец, обнаружение столкновений объектов Player, Missile и Playfield происходит в реальном времени, регистрируя столкновение по мере объединения пикселей изображения и вывода их на дисплей. Проверка битов столкновений объекта до того, как объект будет отрисован CTIA/GTIA, не покажет никаких столкновений.
После установки столкновения остаются в силе до тех пор, пока не будут очищены путем записи в регистр HITCLR. Эффективные процедуры реагирования на столкновения должны выполняться после отображения целевых объектов, или в конце кадра, или во время вертикального пробела, чтобы реагировать на столкновения и очищать столкновения до начала следующего кадра.
Поскольку столкновения — это всего лишь один бит, столкновения, очевидно, не являются аддитивными. Независимо от того, сколько раз и в каких местах происходит столкновение между пикселями в одном кадре, есть только 1 бит, указывающий на то, что произошло столкновение. Установленный бит столкновения информирует программу о том, что она может исследовать связанные объекты, чтобы определить места столкновений, а затем решить, как реагировать для каждого места.
Поскольку HITCLR и обнаружение столкновений происходят в режиме реального времени, прерывания списка отображения могут разделить дисплей на разделы с использованием HITCLR в начале каждого раздела и отдельной оценкой столкновений в конце каждого раздела.
Когда опция "пятый игрок" включена (см. регистр PRIOR/GPRIOR), единственным изменением является переключение Ракет 0 на 3 с отображения цвета связанного объекта Игрока на отображение значения COLPF3. Новые столкновения "Игрока" по-прежнему сообщаются для отдельных Ракет.
Каждый бит указывает, что пиксель объекта Player/Missile пересек пиксель указанного объекта цвета Playfield. Для цвета фона не зарегистрировано ни одного столкновения.
Скрытые пересечения также регистрируют столкновения. Если приоритет объекта Игрок/Ракета находится за регистром цвета игрового поля, а приоритет другого объекта Игрок/Ракета выше (передний план), чем игровое поле, и пиксели Игрока/Ракеты переднего плана закрывают как игровое поле, так и объект Игрока/Ракеты за игровым полем, то столкновение между игровым полем и обоими фоновыми и передними объектами Игрока/Ракеты будет зарегистрировано.
Режимы пикселей с высоким разрешением и 1/2 цветовой тактовой частотой ( режимы ANTIC 2, 3 и F) обрабатываются по-разному. Цвет «фона», отображаемый как COLPF2, где значения пикселей равны 0, не регистрирует столкновение. Пиксели с высоким разрешением отображаются как значение яркости из COLPF1. Пиксели группируются в пары цветовой тактовой частоты (пиксели 0 и 1, пиксели 2 и 3, продолжающиеся до пикселей 318 и 319). Если любой из пикселей пары равен 1, обнаруживается столкновение между пикселями игрока или ракеты и цветом игрового поля COLPF2.
Режимы GTIA 9 и 11 не обрабатывают столкновения игрового поля. В режиме GTIA 10 столкновения игрового поля будут регистрироваться там, где пиксели игрового поля используют COLPF0 через COLPF3
Столкновения ракеты 0 с игровым полем
Столкновения ракеты 1 с игровым полем
Столкновения ракеты 2 с игровым полем
Столкновения ракеты 3 с игровым полем
Столкновения игрока 0 с игровым полем
Столкновения игрока 1 с игровым полем
Столкновения игрока 2 с игровым полем
Столкновения игрока 3 с игровым полем
Ракеты сталкиваются с игроками и игровыми полями. Столкновений ракет с ракетами не происходит.
Ракета 0 столкновений с игроком
Столкновения ракеты 1 с игроком
Столкновения ракеты 2 с игроком
Ракета 3 столкновений с игроком
Столкновение между двумя игроками устанавливает бит столкновения в регистрах столкновений обоих игроков. Когда сталкиваются Игрок 0 и Игрок 1, устанавливается бит столкновения Игрока 0 для Игрока 1, а также устанавливается бит столкновения Игрока 1 для Игрока 0.
Игрок не может столкнуться сам с собой, поэтому его бит всегда равен 0.
Столкновения игрока 0 с игроком
Столкновения Игрока 1 с Игроком
Столкновения Игрока 2 с Игроком
Столкновения Игрока 3 с Игроком
Все пиксели объектов Player/Missile и все пиксели Playfield в режиме интерпретации цвета CTIA/GTIA по умолчанию используют косвенную адресацию для указания цвета. Косвенная адресация означает, что значения данных пикселей не определяют цвет напрямую, а указывают на другой источник информации для цвета. CTIA/GTIA содержат аппаратные регистры, которые устанавливают значения, используемые для цветов, и информация о пикселях ссылается на эти регистры. Палитра на Atari представляет собой 8 уровней яркости по 16 цветов для всего 128 цветов. Гибкость косвенной адресации цвета позволяет программе подгонять цвета экрана под цель отображения программы.
Все аппаратные регистры цвета имеют соответствующие теневые регистры.
ТЕНЬ: PCOLOR0 $02C0
Цвет/яркость Игрока и Ракеты 0.
При включении 9-цветного режима GTIA (значение PRIOR/GPRIOR $80) этот регистр используется для границы и фона (значение пикселя игрового поля 0), а не COLBK.
ТЕНЬ: PCOLOR1 $02C1
Цвет/яркость Игрока и Ракеты 1.
ТЕНЬ: PCOLOR2 $02C2
Цвет/яркость Игрока и Ракеты 2.
ТЕНЬ: PCOLOR3 $02C3
Цвет/яркость Игрока и Ракеты 3.
ТЕНЬ: ЦВЕТ0 $02C4
Цвет/яркость игрового поля 0.
ТЕНЬ: ЦВЕТ1 $02C5
Цвет/яркость игрового поля 1.
Этот регистр используется для установленных пикселей (значение 1) в текстовых режимах ANTIC 2 и 3 и режиме карты F. Используется только часть яркости, которая объединяется с помощью OR со значением цвета COLPF2. В других режимах символов и карт этот регистр обеспечивает ожидаемый цвет и яркость для пикселя.
ТЕНЬ: ЦВЕТ2 $02C6
Цвет/яркость Playfield 2.
Этот регистр используется для цвета фона игрового поля текстовых режимов ANTIC 2 и 3, а также режима карты F. То есть, где используется значение пикселя 0. В других режимах символов и карт этот регистр обеспечивает ожидаемый цвет и яркость для пикселя.
ТЕНЬ: ЦВЕТ3 $02C7
Цвет/яркость Playfield 3
COLPF3 доступен в нескольких особых случаях:
ТЕНЬ: ЦВЕТ4 $02C8
Цвет/яркость фона игрового поля.
Цвет фона отображается там, где нет других пикселей по всей области отображения overscan. Для фона возможны следующие исключения:
Биты регистров цвета :
Старший полубайт регистра цвета определяет один из 16 цветов ($00, $10, $20... до $F0).
Младший разряд регистра определяет одно из 16 значений яркости ($00, $01, $02... до $0F).
В обычном режиме интерпретации цвета младший бит не имеет значения, и доступны только 8 значений яркости ($00, $02, $04, $06, $08, $0A, $0C, $0E), поэтому полная цветовая палитра составляет 128 значений цвета.
В режиме интерпретации цвета GTIA $4 (режим только яркости) доступны полные 16 бит значений яркости для пикселей игрового поля, предоставляя палитру из 256 цветов. Любые объекты Player/Missile, отображаемые в этом режиме, окрашиваются косвенно, что по-прежнему использует палитру из 128 цветов.
В обычном режиме интерпретации цвета значения пикселей находятся в диапазоне от $0 до $3, обычно указывая на регистры цвета COLBK, COLPF0, COLPF1, COLPF2 соответственно. Режимы цветного текста также включают опции использования COLPF3 для определенных диапазонов значений символов. Для получения дополнительной информации см. графические режимы ANTIC .
Когда для отображения включены графические шаблоны игрока/ракеты, где установлены биты графических шаблонов, отображаемый цвет берется из регистров, назначенных объектам.
Существуют исключения для генерации и отображения цвета:
Использование регистров цвета в режимах символов ANTIC :
Использование цветовых регистров в режимах карты ANTIC :
Использование регистров цвета в режимах GTIA (ANTIC F) :
Цвета игрока/ракеты всегда доступны для объектов игрока/ракеты во всех режимах, хотя цвета могут быть изменены, когда действуют специальные режимы GTIA (16 оттенков/16 цветов).
ТЕНЬ: GPRIOR $026F
Этот регистр управляет несколькими функциями управления цветом CTIA/GTIA: режимом интерпретации цвета игрового поля GTIA, многоцветными объектами игрока, пятым игроком и приоритетом игрока/ракеты/игрового поля.
CTIA включает только один режим интерпретации цвета по умолчанию для потока данных игрового поля ANTIC. Это базовая функциональность, предполагаемая в большинстве обсуждений ANTIC и CTIA/GTIA, если не указано иное. GTIA включает три альтернативных режима интерпретации цвета для данных игрового поля. Эти режимы работают путем сопряжения соседних цветовых часов из ANTIC, таким образом, пиксели, выводимые GTIA, всегда имеют ширину двух цветовых часов. Хотя эти режимы могут быть задействованы при отображении любого режима игрового поля ANTIC, полная цветовая палитра, возможная с этими параметрами обработки цвета GTIA, реализуется только в режимах ANTIC на основе пикселей 1 ⁄ 2 цветовых часов (режимы ANTIC 2, 3, F.) Эти параметры GTIA чаще всего используются с дисплеем в режиме F. Специальные режимы обработки цвета GTIA также изменяют отображение или поведение графики игрока/ракеты различными способами.
Управление интерпретацией цвета является глобальной функцией GTIA, влияющей на весь экран. GTIA изначально не может смешивать на одном дисплее различные режимы интерпретации цвета GTIA и режим CTIA по умолчанию, необходимые для большинства игровых полей ANTIC. Смешивание режимов интерпретации цвета требует программной записи в регистр PRIOR по мере генерации дисплея (обычно прерыванием списка отображения).
Биты 7 и 6 PRIOR предоставляют четыре значения, определяющие режимы интерпретации цвета:
Этот режим использует регистр COLBK для указания цвета фона. Вместо использования косвенности, значения пикселей напрямую представляют яркость. Этот режим позволяет использовать все четыре бита яркости в цветовой палитре Atari и, таким образом, способен отображать 256 цветов.
Графика игрока/ракеты (без опции пятого игрока) отображается правильно в этом режиме, однако обнаружение столкновений с игровым полем отключено. Приоритет игрового поля всегда внизу. Когда ракеты переключаются на роль пятого игрока, то там, где объекты ракеты перекрывают игровое поле, яркость пикселей ракеты сливается со значением яркости пикселей игрового поля.
В отличие от двух других специальных режимов GTIA, этот режим полностью управляется косвенностью цвета. Все девять регистров цвета работают на дисплее для значений пикселей от 0 до 8. Оставшиеся 7 значений пикселей повторяют предыдущие регистры цвета.
Пиксели задерживаются на один цветовой такт (половина пикселя режима GTIA) при выводе. Это смещение позволяет получать интересные эффекты. Например, быстрое переключение страниц между этим режимом и другим режимом GTIA создает дисплей с явно более высоким разрешением и большим количеством цветов.
Этот режим уникален тем, что для границы и фона (пиксели игрового поля со значением 0) он использует регистр цвета COLPM0, а не COLBK.
Графика Игрока/Ракеты отображается правильно, за исключением того, что Игрок/Ракета 0 неотличимы от пикселей фона, поскольку они используют тот же регистр цвета, COLPM0. Пиксели игрового поля, использующие цвета Игрока/Ракеты, изменяются настройками приоритета, как если бы они были объектами Игрока/Ракеты, и поэтому могут влиять на отображение Игроков/Ракеты. (См. обсуждение ниже о приоритетах Игрока/Ракеты/Игрового поля).
Пиксели игрового поля, использующие цвета Player/Missile, не вызывают столкновений, когда объекты Player/Missile накладываются на них. Однако графика Player/Missile, перекрывающая цвета игрового поля COLPF0 — COLPF3, вызовет ожидаемое столкновение.
Этот режим использует регистр COLBK для указания яркости всех пикселей Playfield (значения от 1 hex /1 dec до F hex /15 dec .) Наименее значимый бит значения яркости не наблюдается, поэтому доступны только стандартные/CTIA 8 значения яркости ( $0 , $2 , $4 , $6 , $8 , $A , $C , $E ). Кроме того, сам фон использует только цветовой компонент, установленный в регистре COLBK. Значение яркости фона принудительно устанавливается равным 0. Как и в режиме Luminance, косвенность отключена, и значения пикселей напрямую представляют цвет.
Обратите внимание, что цветовой компонент фона также сливается с пикселями игрового поля. Цвета, отличные от черного для фона, уменьшают общее количество цветов, отображаемых в режиме.
Графика игрока/ракеты (без опции пятого игрока) отображается правильно в этом режиме, однако обнаружение столкновений с игровым полем отключено. Приоритет игрового поля всегда внизу. Когда ракеты переключаются на роль пятого игрока, то, когда объекты ракеты перекрывают игровое поле, пиксели ракеты наследуют значение цвета пикселей игрового поля.
PRIOR бит 5, значение 20 hex /32 dec включает объекты Multi-Color Player. Там, где пиксели двух объектов Player/Missile накладываются друг на друга, появляется третий цвет. Это реализуется путем устранения приоритетной обработки между парами объектов Player/Missile, в результате чего CTIA/GTIA выполняет побитовое ИЛИ двух цветных пикселей для вывода нового цвета.
Пример: пиксель игрока со значением цвета 98 hex /152 dec (синий) накладывается на пиксель игрока со значением цвета 46 hex /70 dec (красный), в результате чего получается цвет пикселя DE hex /228 dec (светло-зеленый/желтый).
Пары Игрок/Ракеты, способные давать многоцветный вывод:
PRIOR бит 4, значение $10 hex /16 dec позволяет Ракетам стать пятым Игроком. Никаких функциональных изменений в Ракете не происходит, кроме цветовой обработки Ракет. Обычно Ракеты отображаются с использованием цвета связанного Игрока. Когда Пятый Игрок включен, все Ракеты отображают цвет Игрового поля 3 (COLPF3). Горизонтальное положение, размер, вертикальная задержка и столкновения Игрока/Ракеты продолжают работать таким же образом. Приоритет Пятого Игрока для пересечений пикселей объектов Игрока равен COLPF3, но пиксели Пятого Игрока имеют приоритет над всеми цветами Игрового поля.
Изменение обработки цвета также приводит к некоторым исключениям для отображения ракет в альтернативных цветовых режимах GTIA:
Пятый игрок вводит исключение для значения приоритета $8 (биты 1000) (см. обсуждение приоритета ниже).
PRIOR биты с 3 по 0 предоставляют четыре значения приоритета Player/Missile и Playfield, которые определяют, какое значение пикселя отображается при пересечении пикселей объектов Player/Missile и пикселей Playfield. Четыре значения предоставляют конкретные параметры, перечисленные в таблице приоритетов ниже. "PM" означает обычную реализацию Player/Missile без Fifth Player. Пятый Player, "P5", показан там, где его приоритет возникает, когда он включен.
Таблица точна для режимов ANTIC Playfield Character и Map с использованием режима интерпретации цвета по умолчанию (CTIA). Режимы интерпретации цвета GTIA и режимы ANTIC, основанные на высоком разрешении, 1 ⁄ 2 пикселей цветовых часов, ведут себя по-разному (отмечено позже).
Если установлено несколько бит, то при возникновении конфликта CTIA/GTIA выводит черный пиксель. Обратите внимание, что черный означает фактически черный цвет, а не просто цвет фона, COLBK.
Хотя пятый игрок отображается со значением COLPF3, его приоритет выше всех цветов игрового поля. Это создает исключение для значения приоритета $8 (биты 1000). В этом режиме игровые поля 0 и 1 имеют более высокий приоритет, чем игроки, а игроки имеют более высокий приоритет, чем игровые поля 2 и 3. Когда пиксели игрового поля 0 или 1 пересекают любой пиксель игрока, отображаемым результатом является пиксель игрового поля. Однако, если пятый игрок также пересекает то же самое место, его значение отображается над игровым полем, из-за чего создается впечатление, что игровое поле 3 имеет наивысший приоритет. Если пиксель игрового поля 0 или 1 удален из этого пересечения, то пиксель пятого игрока не имеет пикселя игрового поля для переопределения и поэтому также отстает от пикселей игрока.
Когда все биты Priority равны 0, возникает другой эффект — пиксели Player и Playfield логически ИЛИ объединяются вместе способом, аналогичным функции Multi-Color Player. В этой ситуации пиксели Player 0 и 1 могут смешиваться с пикселями Playfield 0 и 1, а пиксели Player 2 и 3 могут смешиваться с пикселями Playfield 2 и 3. Кроме того, когда используется опция Multi-Color Player, полученный объединенный цвет Player также может смешиваться с Playfield, создавая больше цветов. Когда рассматриваются все возможности слияния цветов, оборудование CTIA/GTIA может выводить 23 цвета на строку сканирования. Начиная с цвета фона в качестве первого цвета, возможны оставшиеся 22 цвета и слияния цветов:
Когда все биты приоритета равны 0, цвета ракет функционируют так же, как и соответствующие игроки, как описано выше. Когда включен пятый игрок, пиксели ракет вызывают такое же слияние цветов, как показано для COLPF3 в таблице выше (цвета с 19 по 22).
Результат приоритета отличается для режимов «Символ» и «Карта», использующих высокое разрешение, 1 ⁄ 2 пикселей цветной синхронизации — режимы ANTIC 2, 3 и F. Эти различия в обработке приоритетов можно использовать для создания цветного текста или графики в этих режимах, которые традиционно считаются «монохромными».
В этих режимах ANTIC COLPF2 выводится как "фон" игрового поля, а COLBK выводится как граница вокруг игрового поля. Графические или глифовые пиксели выводятся с использованием только компонента яркости COLPF1, смешанного с цветовым компонентом фона (обычно COLPF2).
Приоритетные отношения между игроками/ракетами и COLPF2 работают в соответствии с приведенной ниже таблицей приоритетов. Пиксели игрока/ракеты с более высокими приоритетами заменят COLPF2 в качестве цвета «фона». COLPF1 всегда имеет наивысший приоритет и не может быть скрыт игроками или ракетами. Пиксели глифа/графики используют цветовой компонент цвета с наивысшим приоритетом (игровое поле, игрок или ракета) и компонент яркости COLPF1. Обратите внимание, что это поведение также последовательно, когда конфликты приоритетов игрока/ракеты приводят к истинному черному цвету для «фона». По сути, значение цвета, которое CTIA/GTIA в конечном итоге использует для цвета «фона», «оттеняет» пиксели глифа/графики переднего плана COLPF1.
Вертикальная задержка P/M Графика
Этот регистр используется для обеспечения движения по одной строке сканирования, когда разрешение Double Line Player/Missile включено в регистре ANTIC DMACT . Это работает путем маскирования обновлений ANTIC DMA в регистрах GRAF* на четных строках сканирования, заставляя графический шаблон смещаться вниз на одну строку сканирования.
Поскольку разрешение Single Line требует обновлений ANTIC DMA на каждой строке сканирования, а VDELAY маскирует обновления на четных строках сканирования, этот бит снижает разрешение Single Line Player/Missile до Double Line.
Графический контроль
GRACTL управляет получением CTIA/GTIA данных DMA игрока/ракеты от ANTIC и переключает режим ввода триггера джойстика.
Получение данных Player/Missile DMA требует настройки CTIA/GTIA для получения данных. Это делается с помощью пары бит в GRACTL, которые соответствуют паре бит в регистре DMACTL ANTIC , которые предписывают ANTIC отправлять данные Player и данные Missile. Бит 0 GRACTL соответствует биту 2 DMACTL, что позволяет передавать данные Missile. Бит 1 GRACTL соответствует биту 3 DMACTL, что позволяет передавать данные Player. Эти биты должны быть установлены для GTIA для получения данных Player/Missile от ANTIC через DMA. Когда графика Player/Missile управляется непосредственно CPU, эти биты должны быть выключены.
Регистры триггеров джойстика сообщают о нажатом/не нажатом состоянии в реальном времени. Если опрос ввода программы может быть недостаточно частым для захвата кратковременных нажатий кнопок джойстика, то триггеры можно настроить на блокировку в закрытом/нажатом состоянии и сохранение этого состояния даже после отпускания кнопки. Установка бита GRACTL 2 включает фиксацию всех триггеров. Очистка бита возвращает триггеры в незафиксированное состояние реального времени.
Очистить столкновения
Любая запись в этот регистр очищает все биты обнаружения столкновений игрока и ракеты.
ТЕНЬ: STRIG0 $0284
Триггер джойстика 0
ТЕНЬ: STRIG1 $0285
Триггер джойстика 1.
ТЕНЬ: STRIG2 $0286
Триггер джойстика 2.
ТЕНЬ: STRIG3 $0287
Триггер джойстика 3
Биты с 7 по 1 всегда равны 0. Бит 0 сообщает о состоянии триггера джойстика. Значение 1 указывает на то, что триггер не нажат. Значение 0 указывает на то, что триггер нажат.
Триггер регистрирует нажатия кнопки отчета в реальном времени. Состояние нажатия кнопки мгновенно сбрасывается при отпускании кнопки.
Триггеры могут быть настроены на защелкивание, то есть блокировку, в нажатом состоянии и оставаться в таком состоянии до тех пор, пока они специально не будут очищены. Бит 2 GRACTL включает поведение защелкивания для всех триггеров. Очистка бита 2 GRACTL возвращает все триггеры к поведению в реальном времени.
Флаги PAL.
Этот регистр сообщает стандарт отображения для системы. Когда биты с 3 по 0 установлены в 1 (значение $f hex /15 dec ), система работает в NTSC. Когда биты равны нулю, система работает в режиме PAL.
Консольный динамик
Bit3 управляет внутренним динамиком Atari 800/400. В более поздних моделях консольный динамик удален, и звук смешивается с обычными аудиосигналами POKEY для вывода на порт монитора и RF-адаптер. Atari OS использует консольный динамик для вывода щелчка клавиатуры и звука звонка/зуммера.
Операционная система устанавливает бит динамика во время процедуры Vertical Blank. Повторная запись 0 в бит будет производить жужжащий звук частотой 60 Гц, поскольку Vertical Blank сбрасывает значение. Полезные тоны могут быть сгенерированы с использованием кода 6502, эффективно добавляя пятый аудиоканал, хотя канал требует процессорного времени для поддержания аудиотонов.
Клавиши консоли
Бит назначается для сообщения о состоянии каждой из специальных клавиш консоли, Start, Select и Option. Значение бита 0 указывает на то, что клавиша нажата, а 1 указывает на то, что клавиша не нажата. Значения клавиш/битов:
Аппаратная система " спрайта " обрабатывается CTIA/GTIA. Официальное название ATARI для системы спрайтов - "Player/Missile Graphics", поскольку она была разработана для уменьшения необходимости манипулировать памятью дисплея для быстро движущихся объектов, таких как "игрок" и его оружие, "ракеты", в игре-стрелялке .
Player по сути является глифом шириной 8 пикселей и высотой 256 ТВ-линий и имеет два цвета: фон (прозрачный) ( 0
в глифе) и передний план ( 1
). Объект Missile похож, но имеет ширину всего 2 пикселя. CTIA/GTIA объединяет пиксели объектов Player/Missile с пикселями Playfield в соответствии с их приоритетом. Прозрачные ( 0
) пиксели игрока не влияют на Playfield и отображают либо Playfield, либо пиксель фона без изменений. Обычная ширина пикселя всех объектов Player/Missile составляет одну цветовую тактовую частоту. Значение регистра может установить ширину пикселей Player или Missile в 1, 2 или 4 цветовых тактовых частоты.
Реализация Player/Missile от CTIA/GTIA похожа на реализацию TIA . Player — это 8-битное значение или шаблон в указанной горизонтальной позиции, который автоматически повторяется для каждой строки сканирования или до тех пор, пока шаблон не будет изменен в регистре. Ракеты имеют ширину 2 бита и совместно используют один регистр шаблона, так что четыре значения шириной 2 бита занимают 8-битный регистр шаблона, но каждая ракета имеет независимую горизонтальную позицию и размер. Объекты Player/Missile расширяют высоту дисплея, включая границу экрана. То есть, реализация графики Player/Missile по умолчанию от CTIA/GTIA представляет собой полосу вниз по экрану. Несмотря на кажущуюся ограниченность, этот метод облегчает использование графики Player/Missile в качестве альтернативных цветных вертикальных границ или разделителей на дисплее, и когда значения приоритета установлены для помещения пикселей Player/Missile за пикселями игрового поля, их можно использовать для добавления дополнительных цветов на дисплей. Все Players и Missiles, установленные на максимальную ширину и размещенные рядом, могут покрывать всю игровую область обычной ширины.
CTIA/GTIA поддерживает несколько опций управления цветом Игрока/Ракеты. Значение регистра PRIOR/GPRIOR может переключать четыре Ракеты между двумя вариантами отображения цвета — каждая Ракета (от 0 до 3) выражает цвет связанного объекта Игрока (от 0 до 3) или все Ракеты показывают цвет регистра COLPF3/COLOR3. Когда Ракеты окрашены одинаково, их можно рассматривать как пятого игрока, но правильное размещение на экране по-прежнему требует сохранения значений во всех четырех регистрах горизонтального положения Ракеты. PRIOR/GPRIOR также управляет функцией, которая заставляет перекрывающиеся пиксели двух Игроков генерировать третий цвет, позволяя создавать разноцветные объекты Игрока за счет сокращения количества доступных объектов. Наконец, PRIOR/GPRIOR можно использовать для изменения наслоения переднего плана/фона (называемого «приоритетом») пикселей Игрока/Ракеты по сравнению с пикселями Игрового поля и может создавать конфликты приоритетов, которые предсказуемо влияют на отображаемые цвета.
Традиционная идея спрайта с изображением/шаблоном, который меняется по вертикали, также встроена в графическую систему Player/Missile. Чип ANTIC включает функцию выполнения DMA для автоматической подачи новых пиксельных шаблонов в CTIA/GTIA по мере генерации дисплея. Это можно сделать для каждой строки сканирования или каждой второй строки сканирования, в результате чего пиксели Player/Missile будут высотой в одну или две строки сканирования. Таким образом, объект Player/Missile можно считать чрезвычайно высоким символом в шрифте, шириной 8 бит/пикселей, по высоте дисплея.
Перемещение объектов Player/Missile по горизонтали так же просто, как изменение регистра в CTIA/GTIA (в Atari BASIC один оператор POKE перемещает игрока или ракету по горизонтали). Перемещение объекта по вертикали достигается либо перемещением блока определения глифа в новое место в битовой карте Player или Missile, либо вращением всей битовой карты Player/Missile (128 или 256 байт). В худшем случае вращение всей битовой карты все еще довольно быстро в машинном языке 6502, даже несмотря на то, что в 6502 отсутствует инструкция перемещения блока, имеющаяся в 8080. Поскольку спрайт имеет длину ровно 128 или 256 байт, индексацию можно легко разместить в регистре шириной в байт на 6502. В Atari BASIC отсутствует команда перемещения высокоскоростной памяти, а перемещение памяти с использованием BASIC PEEK() и POKE(s) происходит мучительно медленно. Программы Atari BASIC, использующие графику Player/Missile, имеют другие возможности для выполнения высокоскоростных перемещений памяти. Один из методов — вызов короткой процедуры машинного языка через функцию USR() для выполнения перемещений памяти. Другой вариант — использование большой строки в качестве карты памяти Player/Missile и выполнение команд копирования строк, которые приводят к перемещению памяти со скоростью машинного языка.
Аккуратное использование графики Player/Missile с другими графическими функциями оборудования Atari может значительно упростить графическое программирование, особенно игр.
Чип GTIA обратно совместим с CTIA и добавляет 3 цветовые интерпретации для 14 «нормальных» графических режимов игрового поля ANTIC. Нормальная цветовая интерпретация чипа CTIA ограничена на строку развертки максимум 4 цветами в режимах карты или 5 цветами в текстовых режимах (плюс 4 цвета для графики игрока/ракеты), если не используются специальные методы программирования. Три новые цветовые интерпретации в GTIA обеспечивают теоретически в общей сложности 56 графических режимов (14 режимов ANTIC, умноженные на четыре возможных цветовых интерпретации). Однако только графические режимы, основанные на высоком разрешении, 1 ⁄ 2 пикселей цветовых часов (то есть текстовые режимы Antic 2, 3 и графический режим F), способны полностью выразить цветовые палитры этих 3 новых цветовых интерпретаций. Три дополнительные цветовые интерпретации используют информацию в двух цветовых часах (четыре бита) для генерации пикселя в одном из 16 цветовых значений. Это изменяет режим отображения F с 2 цветов на пиксель, 320 пикселей по горизонтали, одной строки сканирования на строку режима, на 16 цветов и 80 пикселей по горизонтали. Дополнительные цветовые интерпретации позволяют следующее:
Из этих режимов особенно выделяется Atari BASIC Graphics 9. Он позволяет Atari отображать оцифрованные фотографии в оттенках серого, которые, несмотря на низкое разрешение, были очень впечатляющими в то время. Кроме того, допуская 16 оттенков одного тона вместо 8 оттенков, доступных в других графических режимах, он увеличивает количество различных цветов, которые Atari может отображать, со 128 до 256. К сожалению, эта функция ограничена для использования только в этом режиме, который из-за своего низкого разрешения не получил широкого распространения.
Текстовые режимы Antic 2 и 3 способны отображать те же цветовые диапазоны, что и графика режима F при использовании альтернативных цветовых интерпретаций GTIA. Однако, поскольку также применяется уменьшение пикселей и превращает текст шириной 8 пикселей, 2 цвета в 2 пикселя, 16 цветных блоков, эти режимы не подходят для реального текста, и поэтому эти графические режимы не популярны за пределами демонстраций. Эффективное использование функции интерпретации цвета GTIA с текстовыми режимами требует тщательно сконструированного набора символов, обрабатывающего символы как пиксели. Этот метод позволяет отображать очевидный графический режим GTIA "высокого разрешения", который обычно занимает 8 КБ ОЗУ, вместо этого используя только около 2 КБ (1 КБ для набора символов и 1 КБ для экранной ОЗУ и списка отображения.)
GTIA также исправила ошибку в CTIA, которая вызывала смещение графики на «половину цветовой частоты». Побочным эффектом исправления было то, что программы, которые полагались на цветовые артефакты в монохромных режимах высокого разрешения, отображали другую пару цветов. [5] [15]
Владельцы Atari могут определить, оснащена ли их машина чипом CTIA или GTIA, выполнив команду BASICPOKE 623,64
. Если после выполнения экран почернел, машина оснащена новым чипом GTIA. Если он остается синим, машина оснащена чипом CTIA.
Последние компьютеры Atari XE, сделанные для восточноевропейского рынка, были собраны в Китае. Многие, если не все, имеют глючный чип PAL GTIA. Значения яркости в Graphics 9 и выше ошибочны, проявляясь в виде полос. Замена чипа решает проблему. Также были попытки исправить неисправные чипы GTIA с помощью некоторых внешних схем.