CTIA и GTIA - CTIA and GTIA

Чип NTSC GTIA производства Okidata

Адаптер интерфейса цветного телевидения[1] (CTIA) и его преемник Адаптер графического телевизионного интерфейса[1] (GTIA) - нестандартные микросхемы, используемые в Семейство 8-битных Atari компьютеров и в Atari 5200 домашняя игровая консоль. В этих системах чип CTIA или GTIA работает вместе с АНТИК для производства видеодисплея. ANTIC генерирует графику игрового поля (текст и растровое изображение), в то время как CTIA / GTIA предоставляет цвет для игрового поля и добавляет объекты наложения, известные как графика игрока / ракеты (спрайты ). Под руководством Джей Майнер, чипы CTIA / GTIA были разработаны Джорджем Маклеодом при техническом содействии Стива Смита.[2][3][4]

Адаптер интерфейса цветного телевидения и Адаптер графического телевизионного интерфейса являются названиями микросхем, как указано в руководстве по обслуживанию Atari.[1] В разных изданиях фишки назывались по-разному, иногда используя альтернативное написание Адаптер[5][6] или же Графика,[3] или утверждая, что буква «C» в «CTIA» означает Коллин / Кэнди[5] а «G» в «GTIA» - для Джорджа.[3][5][6][7]

История

2600 и TIA

Atari построила свой первый чип драйвера дисплея, Адаптер телевизионного интерфейса но повсеместно именуемой TIA, как часть Atari 2600 консоль.[8] Дисплей TIA логически состоял из двух основных наборов объектов: «игроки» и «ракеты» который представляет движущиеся объекты, и «игровое поле», которое представляет собой статическое фоновое изображение, на котором происходит действие. Чип использовал данные в регистры памяти для создания цифровых сигналов, которые были преобразованы в реальном времени через цифро-аналоговый преобразователь и Модулятор RF производить телеэкран.

Обычный способ нарисовать игровое поле - использовать битовая карта проводился в кадровый буфер, в котором каждая ячейка памяти в буфере кадров представляет одно или несколько мест на экране. В случае 2600, который обычно использовал разрешение 160x192 пикселей, буфер кадра должен был бы иметь как минимум 160x192 / 8 = 3840 байтов памяти. Построен в эпоху, когда баран было очень дорого, TIA не могла себе позволить такое решение.

Вместо этого в системе реализована система отображения, в которой используется один 20-битный регистр памяти которые можно было скопировать или отразить в правой половине экрана, чтобы получить фактически 40-битный дисплей. Каждое местоположение может быть отображено одним из четырех цветов из палитры из 128 возможных цветов. TIA также включал несколько других демонстрационных объектов, «игроков» и «ракеты». Они состояли из двух 8-битных объектов, известных как «игроки», одного 1-битного объекта, известного как «мяч», и двух 1-битных «ракет». Все эти объекты можно перемещать в произвольные горизонтальные положения с помощью настроек в других регистрах.

Ключом к системе TIA и низкой цене 2600 было то, что в системе было достаточно памяти, чтобы нарисовать одну строку дисплея, и все это содержалось в регистрах. Чтобы нарисовать весь экран, заполненный данными, пользовательский код будет ждать, пока телевизионный дисплей не достигнет правой стороны экрана, и обновит регистры для игрового поля и игрока / ракет, чтобы правильно отобразить следующую строку на дисплее. Эта схема построила экран построчно из программного кода на ПЗУ картридж, техника, известная как "гонка по лучу".

CTIA

Изначально Atari рассчитывала, что 2600 будет иметь короткий срок службы на рынке в три года, когда он был разработан в 1976 году, а это означало, что компании потребуется новый дизайн к 1979 году.[8] Первоначально этот новый дизайн представлял собой просто обновленную игровую консоль, подобную 2600, и был построен на основе аналогичной базовой конструкции, просто обновленной. Работа над тем, что впоследствии станет CTIA, началась в 1977 году и была направлена ​​на создание системы с удвоенным разрешением и вдвое большим количеством цветов. Более того, варьируя количество цветов в игровом поле, можно было поддерживать гораздо более высокие разрешения до 320 пикселей по горизонтали. Также были обновлены игроки и ракеты, включая четыре 8-битных проигрывателя и четыре 2-битных ракеты, но также позволил дополнительный режим объединить четыре ракеты в пятого игрока.

Вскоре после начала проектирования домашний компьютер Революция всерьез началась во второй половине 1977 года. В ответ Atari решила выпустить две версии новой машины: недорогую в качестве игровой приставки и версию высокого класса в качестве домашнего компьютера.[8] В любой роли потребуется более сложное игровое поле, особенно поддержка графика персонажей в роли компьютера. На тот момент дизайн CTIA был хорошо продвинут, поэтому вместо редизайна было предложено умное решение путем добавления второго чипа, который эффективно автоматизирует процесс ускорения луча. Вместо пользовательского программирования, обновляющего регистры CTIA в зависимости от времени прерывания, новый АНТИК справится с этой рутиной, считывая данные из фреймбуфера и передавая их CTIA на лету.

В результате этих изменений новые чипы обеспечивают значительно улучшенное количество и выбор графических режимов по сравнению с TIA. Вместо одного режима игрового поля с разрешением 20 или 40 бит пара CTIA / ANTIC может отображать шесть текстовых режимов и восемь графических режимов с различными разрешениями и глубиной цвета, что позволяет программисту выбирать баланс между разрешением, цветами и использованием памяти. для их отображения.

CTIA против GTIA

256-цветная палитра, используемая в чипе GTIA (только NTSC) с 16 оттенками и 16 значениями яркости.
Это то, что Atari TIA и CTIA использовали в качестве палитры (только NTSC) с 16 оттенками и только 8 значениями яркости, что составляет 128 уникальных цветов.

Первоначальный дизайн чипа 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 - это устройство телевизионного интерфейса со следующими функциями:

  • Интерпретирует поток графических данных Playfield из АНТИК чтобы применить цвет к дисплею.
  • Объединяет четыре объекта наложения Player и четыре объекта Missile (также известные как спрайты ) с графикой игрового поля ANTIC. Особенности игрока / ракеты включают в себя:
    • Позиционирование пикселей игрока / ракеты не зависит от игрового поля:
      • Объекты Player / Missile обычно функционируют в вертикальных и горизонтальных областях развертки за пределами отображаемого игрового поля.
      • Объекты Player / Missile обычно работают без игрового поля ANTIC.
    • Объекты Player шириной 8 бит и объекты Missile шириной 2 бита, где каждый бит представляет один отображаемый пиксель.
    • Переменная ширина пикселя (ширина 1, 2 или 4 цветных такта)
    • Каждый объект Player / Missile по вертикали равен высоте всего экрана.
    • Переменная высота пикселей, когда данные предоставляются ANTIC DMA (одиночные или двойные строки развертки на данные)
    • Возможность независимо сдвигать каждый объект P / M на одну строку развертки по вертикали при работе с двойными строками развертки на данные.
    • Каждый игрок и связанная с ним Ракета имеют специальный регистр цветов, отдельный от цветов игрового поля.
    • Несколько схем приоритета для порядка расположения графических слоев (P / M Graphics против игрового поля)
    • Слияние цветов между Players и Playfield дает дополнительные цвета.
    • Слияние цветов между парами игроков, создающих многоцветных игроков.
    • Ракеты можно сгруппировать в Пятого игрока, который использует отдельный регистр цвета.
    • Обнаружение столкновений между игроками, ракетами и графикой игрового поля.
  • Для обычного режима интерпретации цветов (CTIA) нет фиксированных цветов. Все цвета генерируются косвенно через девять цветовых регистров. (Четыре для графики игрока / ракеты, четыре для игрового поля и один общий для игрового поля и функции Пятого игрока.)
    • Обычный режим интерпретации цвета обеспечивает выбор цветов из 128 цветовой палитры (16 цветов по 8 значений яркости для каждого)
    • Режим интерпретации цветов GTIA может генерировать 16 яркостей для каждого цвета, обеспечивая 256-цветную палитру.
  • Версия чипа GTIA добавляет три альтернативных режима интерпретации цвета для графики Playfield.
    • 16 оттенков одного оттенка из 16 возможных оттенков палитры Atari. Это доступно в Atari BASIC как Graphics 9.
    • 15 оттенков в одном значении оттенка / яркости плюс фон. Это доступно в Atari BASIC как Graphics 11.
    • 9 цветов любого оттенка и яркости из палитры, выполненные с использованием всех цветовых регистров Player / Missile и Playfield для цветов Playfield. Это доступно в Atari BASIC как Graphics 10.
  • Читает состояние джойстик триггеры (нижние кнопки только для контроллеров Atari 5200).
  • Он включает четыре входа / выхода, которые используются по-разному в зависимости от системы:
    • В 8-битных компьютерах Atari три контакта используются для чтения состояния клавиш консоли (Пуск / Выбор / Опция).
    • Четвертый контакт управляет динамиком, встроенным в Atari 400/800, для генерации щелчков клавиатуры. В более поздних моделях динамик отсутствует, но нажатие клавиши по-прежнему генерируется GTIA и смешивается с обычным аудиовыходом.
    • В Atari 5200 контакты используются как часть процесса для чтения клавиатуры контроллера.

Версии

по номеру детали

  • C012295 - NTSC CTIA[10][11]
  • C014805 - NTSC GTIA[12]
  • C014889 - PAL GTIA[12]
  • C020120 - французский SECAM GTIA (FGTIA)[12]

Atari, Inc. намеревалась объединить функции микросхем ANTIC и GTIA в одной интегральной схеме, чтобы снизить затраты на производство компьютеров Atari и консолей 5200. Два таких прототипа схемы разрабатывались, однако ни один из них не был запущен в производство.

Распиновка

Распиновка Atari GTIA (C014805)
Имя контактаНомер (а) контактаОписание
A0 - A42, 1, 40, 39, 38Ввод адреса
AN0 - AN218, 19, 20Вход интерфейса ANTIC
COL21Выходная частота цвета
CS32Вход выбора микросхемы
CSYNC25Композитный выход синхронизации
D0 - D77, 6, 5, 4, 37, 36, 35, 34Ввод / вывод шины данных
DEL17Линейный вход задержки цвета
FØ029Выход тактовой частоты Fast Phase
HALT26Остановить ввод
L0 - L331, 22, 23, 24Выходная яркость
N / C16Не подключен (PAL в более поздних версиях)
OSC28Вход осциллятора
R / W33Чтение / запись ввода
S0 - S312, 13, 14, 15Коммутатор ввода / вывода данных
Т0 - Т38, 9, 10, 11Триггерные входы с внутренним подтягиванием
Vcc27Мощность +5 Вольт
VSS3Земля
Ø230Компьютер, вход фазы 2

Регистры

8-битные компьютеры Atari отображают CTIA / GTIA на $ D0xxшестнадцатеричный страница, а консоль Atari 5200 сопоставляет его с $ C0xxшестнадцатеричный страница.

CTIA / GTIA предоставляет 54 регистра чтения / записи, управляющих графикой игрока / ракеты, цветами игрового поля, триггерами джойстика и клавишами консоли. Многие адреса регистров CTIA / GTIA имеют двойное назначение, выполняя разные функции: регистр чтения и записи. Следовательно, никакой код не должен читать аппаратные регистры, ожидая получить ранее записанное значение.

Эта проблема решается для многих регистров записи с помощью теневых регистров операционной системы, реализованных в обычной оперативной памяти как места для хранения последнего значения, записанного в регистры. Теневые регистры операционной системы копируются из ОЗУ в аппаратные регистры во время вертикального пробела. Следовательно, любая запись в аппаратные регистры, которые имеют соответствующие теневые регистры, будет перезаписана значением теневых регистров во время следующего вертикального пробела.

Некоторые регистры записи не имеют соответствующих теневых регистров. Они могут быть безопасно записаны приложением без перезаписи значения во время вертикального пробела. Если приложению необходимо знать последнее состояние реестра, тогда оно обязано запомнить, что оно написало.

Теневые регистры операционной системы также существуют для некоторых регистров чтения, где чтение значения непосредственно с оборудования на неизвестной стадии в цикле отображения может вернуть несогласованные результаты.

ИмяОписаниеЧитай пишиHex AddrDec AddrИмя тениShadow Hex AddrShadow Dec Addr
HPOSP0Горизонтальное положение игрока 0Написать$ D00053248
M0PFРакета 0 для столкновений на игровом полеЧитать$ D00053248
HPOSP1Горизонтальное положение игрока 1Написать$ D00153249
M1PFСтолкновения ракеты 1 с игровым полемЧитать$ D00153249
HPOSP2Горизонтальное положение игрока 2Написать$ D00253250
M2PFРакета 2 в столкновениях на игровом полеЧитать$ D00253250
HPOSP3Горизонтальное положение игрока 3Написать$ D00353251
M3PFРакета 3 для столкновений на игровом полеЧитать$ D00353251
HPOSM0Горизонтальное положение ракеты 0Написать$ D00453252
P0PFИгрок 0 в коллизии игрового поляЧитать$ D00453252
HPOSM1Горизонтальное положение ракеты 1Написать$ D00553253
P1PFИгрок 1 сталкивается с игровым полемЧитать$ D00553253
HPOSM2Горизонтальное положение ракеты 2Написать$ D00653254
P2PFИгрок 2 сталкивается с игровым полемЧитать$ D00653254
HPOSM3Горизонтальное положение ракеты 3Написать$ D00753255
P3PFИгрок 3 к столкновениям игрового поляЧитать$ D00753255
РАЗМЕР0Размер игрока 0Написать$ D00853256
M0PLРакета 0 для столкновений игроковЧитать$ D00853256
РАЗМЕР1Размер игрока 1Написать$ D00953257
M1PLРакета 1 для столкновений игроковЧитать$ D00953257
РАЗМЕР2Размер игрока 2Написать$ D00A53258
M2PLРакета 2 для столкновений игроковЧитать$ D00A53258
РАЗМЕР 3Размер игрока 3НаписатьD00B53259
M3PLРакета 3 для столкновений игроковЧитатьD00B53259
РАЗМЕРРазмер всех ракетНаписатьD00C53260
P0PLИгрок 0 в столкновения игроковЧитатьD00C53260
GRAFP0Графический шаблон для игрока 0Написать$ D00D53261
P1PLСтолкновения игрока 1 с игрокомЧитать$ D00D53261
GRAFP1Графический шаблон для игрока 1НаписатьD00E53262
P2PLСтолкновения игрока 2 с игрокомЧитатьD00E53262
GRAFP2Графический шаблон для игрока 2НаписатьD00F53263
P3PLСтолкновения игрока 3 с игрокомЧитатьD00F53263
GRAFP3Графический шаблон для Player 3Написать$ D01053264
TRIG0Триггер джойстика 0.Читать$ D01053264STRIG0$0284644
ГРАФМГрафический шаблон для всех ракетНаписать$ D01153265
TRIG1Джойстик 1 триггер.Читать$ D01153265STRIG1$0285645
COLPM0Цвет / яркость игрока и ракеты 0.Написать$ D01253266PCOLOR0$ 02C0704
TRIG2Джойстик 2 курковый.Читать$ D01253266STRIG2$0286646
COLPM1Цвет / яркость игрока и ракеты 1.Написать$ D01353267PCOLOR1$ 02C1705
TRIG3Джойстик 3 триггерный.Читать$ D01353267STRIG3$0287647
COLPM2Цвет / яркость игрока и ракеты 2.Написать$ D01453268PCOLOR2$ 02C2706
PALФлаги PAL.Читать$ D01453268
COLPM3Цвет / яркость игрока и ракеты 3.Написать$ D01553269PCOLOR3$ 02C3707
COLPF0Цвет / яркость игрового поля 0.Написать$ D01653270ЦВЕТ0$ 02C4708
COLPF1Цвет / яркость игрового поля 1.Написать$ D01753271ЦВЕТ1$ 02C5709
COLPF2Цвет / яркость Playfield 2.Написать$ D01853272ЦВЕТ2$ 02C6710
COLPF3Цвет / яркость Playfield 3.Написать$ D01953273ЦВЕТ 3$ 02C7711
КОЛБКЦвет / яркость фона игрового поля.Написать$ D01A53274ЦВЕТ 4$ 02C8712
ПРЕЖНИЙПриоритетный выбор, пятый игрок и режимы GTIAНаписать$ D01B53275GPRIOR$ 026F623
VDELAYГрафика вертикальной задержки P / MНаписать$ D01C53276
GRACTLУправление графикой.Написать$ D01D53277
HITCLRОчистить столкновенияНаписать$ D01E53278
CONSPKКонсольный динамикНаписать$ D01F53279
КОНСОЛКлавиши консолиЧитать$ D01F53279

В списках индивидуальных реестров ниже применяется следующая легенда:

Битовое значениеОписание
0Бит должен быть 0
1Бит должен быть 1
?Бит может иметь значение 0 или 1 и используется для определенной цели.
-Бит не используется, или не следует ожидать, что он будет иметь определенное значение
меткаОбратитесь к более позднему объяснению назначения биты.

Горизонтальные координаты игрока / ракеты

Эти регистры определяют положение по горизонтали в цветовых часах левого края (старший бит GRAF * байтовые шаблоны) объектов Player / Missile. Координаты всегда основаны на механизме синхронизации цвета аппаратного обеспечения дисплея, а НЕ просто на текущем режиме отображения Playfield. Это также означает, что объекты Player / Missile могут быть перемещены в области за пределами текущего режима Playfield.

Обратите внимание, что хотя битовые шаблоны объектов Missile используют один и тот же байт для отображаемых пикселей (ГРАФМ ) каждую ракету можно расположить независимо. Когда включена опция «Пятый игрок» (см. PRIOR / GPRIOR register) превращая четыре Ракеты в одного «Игрока», Ракеты переключаются с отображения цвета соответствующего объекта «Игрок» на отображение значения COLPF3. Новое положение «Игрока» на экране должно быть установлено путем индивидуального указания положения каждой Ракеты.

Пиксели Player / Missile отображаются только в видимых частях пиксельного движка GTIA. Объекты Player / Missile не отображаются во время горизонтального или вертикального пустого поля. Однако объект может частично находиться внутри горизонтальной заготовки. Пиксели объектов, которые выходят за пределы горизонтальной пустоты, оказываются в видимой части дисплея и могут регистрировать столкновения. Диапазон горизонтального положения видимых цветных часов - 22 доллара.шестнадцатеричный/34декабрь до $ DDшестнадцатеричный/221декабрь.

Чтобы удалить объект Player / Missile из горизонтальных позиций (слева) 0 и (справа) видимой области отображения $ DEшестнадцатеричный/222декабрь (или выше) гарантирует, что никакие пиксели не будут отображаться независимо от размера объекта Player / Missile, и поэтому непреднамеренные столкновения не могут быть отмечены.

HPOSP0 $ D000 Запись

Горизонтальное положение игрока 0

HPOSP1 $ D001 Запись

Горизонтальное положение игрока 1

HPOSP2 $ D002 Запись

Горизонтальное положение игрока 2

HPOSP3 $ D003 Запись

Горизонтальное положение игрока 3

HPOSM0 $ D004 Запись

Горизонтальное положение ракеты 0

HPOSM1 $ D005 Запись

Горизонтальное положение ракеты 1

HPOSM2 $ D006 Запись

Горизонтальное положение ракеты 2

HPOSM3 $ D007 Запись

Горизонтальное положение ракеты 3

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
????????

Ниже приведены координаты цветных часов левого и правого краев возможных размеров игрового поля, полезные при выравнивании объектов Player / Missile с компонентами игрового поля:

Игровое полеШирина в отображаемых цветных часахЧасы первого цвета с левой стороныЧасы последнего цвета правого края
Узкий$80шестнадцатеричный/128декабрь$40шестнадцатеричный/64декабрь$ BFшестнадцатеричный/191декабрь
Нормальный$ A0шестнадцатеричный/160декабрь$30шестнадцатеричный/48декабрь$ CFшестнадцатеричный/207декабрь
Широкий$ B0шестнадцатеричный/176декабрь$28шестнадцатеричный/40декабрь$ D7шестнадцатеричный/215декабрь

Контроль размера игрока / ракеты

Можно выбрать три размера: нормальный, двойной и четырехместный. Левый край (см. Горизонтальные координаты ) фиксирован, а регулировка размера расширяет игрока или ракету вправо во всех случаях.

  • Нормальный - 1 бит (пиксель) соответствует ширине 1 тактовой частоты цвета
  • Двойной - 1 бит (пиксель) соответствует ширине 2 цветовых часов
  • Quad - 1 бит (пиксель) соответствует ширине 4 цветовых часов

Обратите внимание, что в размере Quad один пиксель Player / Missile имеет ту же ширину, что и текстовый символ Antic Mode 2. Выбор приоритета игрока / ракеты, смешанный с графикой ракеты игрока четырехугольной ширины, можно использовать для создания нескольких цветов текста в строке режима.

У каждого игрока есть свой регистр управления размером:

SIZEP0 $ D008 Написать

Размер игрока 0

SIZEP1 $ D009 Написать

Размер игрока 1

SIZEP2 $ D00A Запись

Размер игрока 2

SIZEP3 $ D00B Запись

Размер игрока 3

Управление размером плеера:

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
------Размер 1Размер 0

Значения:

РазмерШирина игрокаЗначение битовРазмер 1Размер 0
Нормальный8 цветных часов$0000
Двойной16 цветных часов$0101
Нормальный8 цветных часов$0210
Quad32 цветных часов$0311

SIZEM $ D00C Написать

Все размеры Ракет контролируются одним регистром, но каждая Ракета может иметь размер независимо от других. Когда включена опция «Пятый игрок» (см. PRIOR / GPRIOR register) превращая четыре ракеты в одного «игрока», ширина по-прежнему устанавливается путем указания размера для каждой ракеты индивидуально.

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
M3 Размер 1M3 Размер 0M2 Размер 1M2 Размер 0M1 Размер 1M1 Размер 0M0 Размер 1M0 Размер 0

Значения:

РакетаРазмерШирина ракетыЗначение битовРазмер 1Размер 0
Ракета 0Нормальный2 цветные часы$0000
Двойной4 цветные часы$0101
Нормальный2 цветные часы$0210
Quad8 цветных часов$0311
Ракета 1Нормальный2 цветные часы$0000
Двойной4 цветные часы$0401
Нормальный2 цветные часы$0810
Quad8 цветных часов$ 0C11
Ракета 2Нормальный2 цветные часы$0000
Двойной4 цветные часы$1001
Нормальный2 цветные часы$2010
Quad8 цветных часов$3011
Ракета 3Нормальный2 цветные часы$0000
Двойной4 цветные часы$4001
Нормальный2 цветные часы$8010
Quad8 цветных часов$ C011

Шаблоны графики игрока / ракеты

Каждый объект Player имеет свой собственный 8-битный регистр шаблона. Ракетные объекты совместно используют один регистр с 2 битами на каждую Ракету. После установки значения оно будет продолжать отображаться в каждой строке развертки. Без какого-либо другого вмешательства со стороны ЦП или ANTIC DMA для обновления значений в результате образуются вертикальные полосы по высоте экрана, включая области за пределами диапазона. Этот режим работы не приводит к потере ресурсов ЦП или прямого доступа к памяти компьютера. Это полезно для отображения чередующихся цветных границ и вертикальных линий, разделяющих области экрана.

GRAFP0 $ D00D Запись

Графический шаблон для игрока 0

GRAFP1 $ D00E Запись

Графический шаблон для игрока 1

GRAFP2 $ D00F Запись

Графический шаблон для игрока 2

GRAFP3 $ D010 Запись

Графический шаблон для Player 3

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
Пиксель HPOS + 0Пиксель HPOS + 1Пиксель HPOS + 2Пиксель HPOS + 3Пиксель HPOS + 4Пиксель HPOS + 5Пиксель HPOS + 6Пиксель HPOS + 7

Ширина каждого игрока составляет 8 бит (пикселей). Если установлен бит, пиксель отображается в цвете, назначенном регистру цвета, связанному с проигрывателем. Если бит не установлен, объект Player будет прозрачным, показывая игроков, ракеты, пиксели игрового поля или цвет фона. Вывод пикселей начинается в горизонтальной позиции, указанной значением HPOS проигрывателя, причем сначала выводится самый высокий бит.

GRAFM $ D011 Написать

Графический шаблон для всех ракет

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
M3 пикселей HPOS + 0M3 пикселей HPOS + 1M2 пикселей HPOS + 0M2 пикселей HPOS + 1M1 пиксель HPOS + 0M1 пиксель HPOS + 1M0 пикселей HPOS + 0M0 пикселей HPOS + 1

Каждая ракета имеет ширину 2 бита (пикселя). Если установлен бит, пиксель отображается в цвете, назначенном регистру цветов для игрока, связанного с ракетой. Когда включен Пятый игрок (см. PRIOR / GPRIOR ) Все пиксели ракеты отображают COLPF3. Если бит не установлен, объект Missile будет прозрачным, показывая игроков, ракеты, пиксели игрового поля или цвет фона. Вывод пикселей начинается в горизонтальном положении, заданном значением HPOS ракеты, причем сначала выводится самый высокий бит.

Значения ракет:

РакетаЗначение битовПиксель 1Пиксель 0
Ракета 0$0000
$0101
$0210
$0311
Ракета 1$0000
$0401
$0810
$ 0C11
Ракета 2$0000
$1001
$2010
$3011
Ракета 3$0000
$4001
$8010
$ C011

Столкновения игроков и ракет

CTIA / GTIA имеет 60 бит, обеспечивающих автоматическое обнаружение столкновений при пересечении пикселей Player, Missile и Playfield. Один бит указывает, что ненулевой пиксель объекта Player / Missile пересек пиксель определенного регистра цвета. Коллизия не регистрируется для пикселей, визуализированных с использованием регистра / значения цвета фона. Эта система обеспечивает мгновенное сравнение перекрытий с точностью до пикселя без дорогостоящей оценки ЦП ограничивающей рамки или маскирования растровых изображений.

Фактическое значение цвета объекта не учитывается. Если регистры цвета Player, Missile, Playfield и Background имеют одно и то же значение, что делает объекты фактически «невидимыми», пересечения объектов по-прежнему будут регистрировать столкновения. Это полезно для создания скрытых или секретных объектов и стен.

На закрытых перекрестках также регистрируются столкновения. Если приоритет объекта Player находится за регистром цвета Playfield, а приоритет другого объекта Player выше (передний план), чем Playfield, а пиксели Player переднего плана закрывают как Playfield, так и объект Player позади Playfield, то возникает конфликт между Playfield и обоими объекты Player фона и переднего плана будут регистрироваться вместе с столкновением между объектами Player переднего и заднего плана.

Обратите внимание, что здесь нет столкновения ракеты с ракетой.

Столкновения Игрок / Ракета могут происходить только тогда, когда пиксели объекта Игрок / Ракета встречаются в видимых частях дисплея. Объекты Player / Missile не отображаются во время горизонтального или вертикального пустого поля. Диапазон видимых цветовых тактов составляет от 34 до 221, а видимые строки сканирования находятся в диапазоне от строки 8 до строки 247. Данные игрока / ракеты за пределами этих координат не отображаются и не регистрируют столкновения. Объект может частично находиться внутри горизонтальной заготовки. Пиксели объектов, выходящие за пределы горизонтальной пустоты, находятся в видимой части дисплея и могут регистрировать столкновения.

Чтобы удалить объект Player / Missile из видимой области отображения, горизонтальные позиции (слева) 0 и (справа) 222 (или больше) гарантируют, что никакие пиксели не будут отображаться независимо от размера объекта Player / Missile, и поэтому непреднамеренные столкновения не могут быть отмечен.

Наконец, обнаружение столкновения объектов Player, Missile и Playfield осуществляется в реальном времени, регистрируя столкновение, когда пиксели изображения объединяются и выводятся для отображения. Проверка битов столкновения объекта до того, как объект был визуализирован CTIA / GTIA, не покажет столкновения.

После установки коллизии остаются в силе до тех пор, пока не будут устранены путем записи в HITCLR регистр. Эффективные процедуры реагирования на столкновения должны выполняться после того, как намеченные объекты были отображены, или в конце кадра, или во время вертикального бланка, чтобы реагировать на столкновения и устранять столкновения до начала следующего кадра.

Поскольку столкновения - это только один бит, очевидно, что столкновения не аддитивны. Независимо от того, сколько раз и в разных местах происходит столкновение между пикселями в одном кадре, есть только 1 бит, чтобы указать, что столкновение произошло. Установленный бит столкновения сообщает программе, что она может исследовать связанные объекты, чтобы определить места столкновения, а затем решить, как реагировать для каждого местоположения.

Поскольку HITCLR и обнаружение столкновений осуществляются в реальном времени, прерывания списка отображения могут разделить отображение на разделы с использованием HITCLR в начале каждого раздела и отдельной оценки столкновений в конце каждого раздела.

Когда включена опция «Пятый игрок» (см. PRIOR / GPRIOR register), единственное изменение - это переключение Missiles 0 на 3 с отображения цвета связанного объекта Player на отображение значения COLPF3. Новые столкновения "Игрока" по-прежнему сообщаются для отдельных ракет.

Столкновения игрока / ракеты с игровым полем

Каждый бит указывает, что пиксель объекта Player / Missile пересек пиксель указанного цветового объекта Playfield. Для цвета фона не зарегистрировано коллизий.

На закрытых перекрестках также регистрируются столкновения. Если приоритет объекта Player / Missile находится за регистром цвета игрового поля, а приоритет другого объекта Player / Missile выше (передний план), чем Playfield, и пиксели переднего плана Player / Missile закрывают как игровое поле, так и объект Player / Missile за игровым полем, тогда будет зарегистрировано столкновение между игровым полем и объектами Player / Missile как на заднем, так и на переднем плане.

Высокое разрешение, режимы пикселей 1/2 цветовой синхронизации (АНТИК Режимы 2, 3 и F) обрабатываются по-разному. Цвет «фона» отображается как COLPF2 где значения пикселей равны 0, коллизия не регистрируется. Пиксели с высоким разрешением отображаются как значение яркости из COLPF1. Пиксели сгруппированы вместе в пары цветных часов (пиксели 0 и 1, пиксели 2 и 3, продолжающиеся до пикселей 318 и 319). Если любой из пикселей пары равен 1, обнаруживается коллизия между пикселями игрока или ракеты и цветом игрового поля. COLPF2.

Режимы GTIA 9 и 11 не обрабатывают коллизии игрового поля. В режиме GTIA будет зарегистрировано 10 коллизий игрового поля, где пиксели игрового поля используют COLPF0 через COLPF3

M0PF $ D000 Читать

Ракета 0 для столкновений на игровом поле

M1PF $ D001 Читать

Столкновения ракеты 1 с игровым полем

M2PF $ D002 Читать

Ракета 2 в столкновениях на игровом поле

M3PF $ D003 Читать

Ракета 3 для столкновений на игровом поле

P0PF $ D004 Читать

Игрок 0 в коллизии игрового поля

P1PF $ D005 Читать

Игрок 1 сталкивается с игровым полем

P2PF $ D006 Читать

Игрок 2 сталкивается с игровым полем

P3PF $ D007 Читать

Игрок 3 к столкновениям игрового поля

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
----COLPF3COLPF2COLPF1COLPF0

Столкновения ракет с игроком

Ракеты сталкиваются с игроками и игровыми полями. Столкновения ракеты с ракетой нет.

M0PL $ D008 Читать

Ракета 0 для столкновений игроков

M1PL $ D009 Читать

Ракета 1 для столкновений игроков

M2PL $ D00A Читать

Ракета 2 для столкновений игроков

M3PL $ D00B Читать

Ракета 3 для столкновений игроков

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
----COLPM3COLPM2COLPM1COLPM0

Столкновения игроков с игроками

Столкновение между двумя игроками устанавливает бит столкновения в регистрах столкновений обоих игроков. Когда Игрок 0 и Игрок 1 сталкиваются, бит коллизии Игрока 0 для Игрока 1 устанавливается, а бит коллизии Игрока 1 для Игрока 0 устанавливается.

Игрок не может столкнуться с самим собой, поэтому его бит всегда равен 0.

P0PL $ D00C Читать

Игрок 0 в столкновения игроков

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
----COLPM3COLPM2COLPM10
P1PL $ D00D Читать

Столкновения игрока 1 с игроком

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
----COLPM3COLPM20COLPM0
P2PL $ D00E Читать

Столкновения игрока 2 с игроком

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
----COLPM30COLPM1COLPM0
P3PL $ D00F Читать

Столкновения игрока 3 с игроком

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
----0COLPM2COLPM1COLPM0

Цвет и яркость игрока / ракеты и игрового поля

Все пиксели объектов Player / Missile и все пиксели Playfield в режиме интерпретации цвета CTIA / GTIA по умолчанию используют косвенное указание для указания цвета. Косвенность означает, что значения данных пикселей не определяют цвет напрямую, а указывают на другой источник информации о цвете. CTIA / GTIA содержат аппаратные регистры, которые устанавливают значения, используемые для цветов, и информация о пикселях относится к этим регистрам. Палитра Atari имеет 8 уровней яркости по 16 цветов, всего 128 цветов. Гибкость косвенного изменения цвета позволяет программе настраивать цвета экрана в соответствии с целями отображения программы.

Все регистры цвета оборудования имеют соответствующие теневые регистры.

COLPM0 $ D012 Запись

ТЕНЬ: PCOLOR0 $ 02C0

Цвет / яркость игрока и ракеты 0.

Когда включен 9-цветной режим GTIA (PRIOR / GPRIOR значение $ 80) этот регистр используется для границы и фона (значение пикселя игрового поля 0), а не КОЛБК.

COLPM1 $ D013 Написать

ТЕНЬ: PCOLOR1 $ 02C1

Цвет / яркость игрока и ракеты 1.

COLPM2 $ D014 Запись

ТЕНЬ: PCOLOR2 $ 02C2

Цвет / яркость игрока и ракеты 2.

COLPM3 $ D015 Запись

ТЕНЬ: PCOLOR3 $ 02C3

Цвет / яркость игрока и ракеты 3.

COLPF0 $ D016 Запись

ТЕНЬ: ЦВЕТ0 $ 02C4

Цвет / яркость игрового поля 0.

COLPF1 $ D017 Запись

ТЕНЬ: ЦВЕТ1 $ 02C5

Цвет / яркость игрового поля 1.

Этот регистр используется для установленных пикселей (значение 1) в текстовых режимах ANTIC 2 и 3, а также в режиме карты F. Используется только часть яркости и выполняется операция ИЛИ со значением цвета COLPF2. В других режимах «Символ» и «Карта» этот регистр обеспечивает ожидаемый цвет и яркость пикселя.

COLPF2 $ D018 Запись

ТЕНЬ: COLOR2 $ 02C6

Цвет / яркость Playfield 2.

Этот регистр используется для цвета фона игрового поля текстовых режимов ANTIC 2 и 3 и режима карты F. То есть, где используется значение пикселя 0. В других режимах «Символ» и «Карта» этот регистр обеспечивает ожидаемый цвет и яркость пикселя.

COLPF3 $ D019 Запись

ТЕНЬ: COLOR3 $ 02C7

Цвет / яркость Playfield 3

COLPF3 доступен при нескольких особых обстоятельствах:

  • Когда Ракеты превращаются в «пятого игрока», они переключаются с отображения цвета соответствующего объекта Player на отображение COLPF3 и меняют приоритет. Видеть PRIOR / GPRIOR регистр.
  • Текстовые режимы 4 и 5 игрового поля. Инверсия видеосимволов (установлен старший бит $ 80) заставляет CTIA / GTIA заменять значение COLPF3 на пиксели COLPF2 в матрице символов. (Видеть Отрисовка символов ANTIC )
  • Текстовые режимы поля воспроизведения 6 и 7. Когда для значения символа установлены биты 6 и 7 (диапазон символов $ C0-FF), вся матрица пикселей символа отображается в COLPF3. (Видеть Отрисовка символов ANTIC )
  • Этот регистр также доступен в специальном 9-цветном, непрямом цветовом режиме GTIA.

COLBK $D01A Write

SHADOW: COLOR4 $02C8

Color/luminance of Playfield background.

The background color is displayed where no other pixel occurs through the entire overscan display area. The following exceptions occur for the background:

  • In ANTIC text modes 2 and 3, and map mode F the background of the playfield area where pixels may be rendered is from COLPF2 and the COLBK color appears as a border around the playfield.
  • In GTIA color interpretation mode $8 (9 color indirection) the display background color is provided by color register COLPM0 while COLBAK is used for Playfield pixel value $8.
  • In GTIA color interpretation mode $C (15 colors in one luminance level, plus background) uses COLBK to set the luminance level of all other pixels (pixel value $1 through $F). However, the background itself uses only the color component set in the COLBK register. The luminance value of the background is forced to 0.

Color Registers' Bits:

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
Color 3Цвет 2Цвет 1Color 0Luminance 3Luminance 2Luminance 1(Luminance 0)

The high nybble of the color register specifies one of 16 colors color ($00, $10, $20... to $F0).

The low nybble of the register specifies one of 16 luminance values ($00, $01, $02... to $0F).

In the normal color interpretation mode the lowest bit is not significant and only 8 luminance values are available ($00, $02, $04, $06, $08, $0A, $0C, $0E), so the complete color palette is 128 color values.

In GTIA color interpretation mode $4 (luminance-only mode) the full 16 bits of luminance values are available for Playfield pixels providing a palette of 256 colors. Any Player/Missile objects displayed in this mode are colored by indirection which still uses the 128 color palette.

In normal color interpretation mode the pixel values range from $0 to $3 ordinarily pointing to color registers COLBK, COLPF0, COLPF1, COLPF2 respectively. The color text modes also include options to use COLPF3 for certain ranges of character values. Видеть ANTIC 's graphics modes for more information.

When Player/Missile graphics patterns are enabled for display where the graphics patterns bits are set the color displayed comes from the registers assigned to the objects.

There are exceptions for color generation and display:

  • ANTIC Text modes 2 and 3, and Map mode F:
    • The pixel values in these modes is only $0 and $1. The $0 pixels specify the Playfield background which is color register COLPF2. The $1 pixels use the color component of COLPF2, and the luminance specified by COLPF1. The border around the Playfield uses the color from COLBK.
    • ANTIC Text modes 2 and 3, and Map mode F behave differently with Player/Missile graphics from the other modes. COLPF1 used for the glyph or graphics pixels always has the highest priority and cannot be obscured by Players or Missiles. The color of COLPF1 always comes from the "background" which is ordinarily COLPF2. Therefore, where Players/Missiles and Fifth Player have priority over COLPF2 the COLPF1 glyph/graphics pixels use the color component of the highest priority color (Player or Missile), and the luminance component of COLPF1. This behavior is consistent where Player/Missile priority conflicts result in true black for the "background". In summary, the color CTIA/GTIA finally determines to use "behind" the high-res pixel is then used to "tint" the COLPF1 foreground glyph/graphics pixels.
  • GTIA Exceptions
    • GTIA color interpretation mode $8 (9 color indirection) uses color register COLPM0 for the display background and border color while COLBAK is used for Playfield pixel value $8.
    • GTIA color interpretation mode $C (15 colors in one luminance level, plus background) uses COLBK to set the luminance level of all other pixels (pixel value $1 through $F). However, the background itself uses only the color component set in the COLBK register. The luminance value of the background is forced to 0. Note that the background's color component is also OR'd with the other pixels' colors. Therefore, the overall number of colors in the mode is reduced when the background color component is not black (numerically zero).
  • Player/Missile Exceptions:
    • Player/Missile Priority value $0 (See PRIOR/GPRIOR ) will cause overlapping Player and Playfield pixels to be OR'd together displaying a different color.
    • Conflicting Player/Missile Priority configuration will cause true black (color 0, luma 0) to be output where conflicts occur.
    • The Player/Missile Multi-Color option will cause overlapping Player pixels to be OR'd together displaying a different color.

Color Registers' Use per ANTIC Character Modes:

регистрANTIC 2ANTIC 3ANTIC 4ANTIC 5ANTIC 6ANTIC 7
COLPM0/PCOLOR0
COLPM1/PCOLOR1
COLPM2/PCOLOR2
COLPM3/PCOLOR3
COLPF0/COLOR0glyph pixelglyph pixelглифглиф
COLPF1/COLOR1glyph pixel (luma)glyph pixel (luma)glyph pixelglyph pixelглифглиф
COLPF2/COLOR2фонфонglyph pixelglyph pixelглифглиф
COLPF3/COLOR3glyph pixelglyph pixelглифглиф
COLBAK/COLOR4границаграницафонфонфонфон

Color Registers' Use per ANTIC Map Modes:

регистрANTIC 0 (blank lines)ANTIC 8ANTIC 9ANTIC AANTIC BANTIC CANTIC DANTIC EANTIC F
COLPM0/PCOLOR0
COLPM1/PCOLOR1
COLPM2/PCOLOR2
COLPM3/PCOLOR3
COLPF0/COLOR0пиксельпиксельпиксельпиксельпиксельпиксельпиксель
COLPF1/COLOR1пиксельпиксельпиксельпиксельpixel (luma)
COLPF2/COLOR2пиксельпиксельпиксельпиксельфон
COLPF3/COLOR3
COLBAK/COLOR4фонфонфонфонфонфонфонфонграница

Color Registers' Use per GTIA Modes (ANTIC F):

регистрGTIA $4 (BASIC 9)GTIA $8 (BASIC 10)GTIA $C (BASIC 11)
COLPM0/PCOLOR0фон
COLPM1/PCOLOR1пиксель
COLPM2/PCOLOR2пиксель
COLPM3/PCOLOR3пиксель
COLPF0/COLOR0пиксель
COLPF1/COLOR1пиксель
COLPF2/COLOR2пиксель
COLPF3/COLOR3пиксель
COLBAK/COLOR4background base colorпиксельbackground base luma

Player/Missile colors are always available for Player/Missile objects in all modes, though colors may be modified when the special GTIA modes (16 shades/16 color) are in effect.

Miscellaneous Player/Missile and GTIA Controls

PRIOR $D01B Write

SHADOW: GPRIOR $026F

This register controls several CTIA/GTIA color management features: The GTIA Playfield color interpretation mode, Multi-Color Player objects, the Fifth Player, and Player/Missile/Playfield priority.

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
GTIA Mode 1GTIA Mode 0Multi-Color PlayerFifth PlayerPriority 3Priority 2Priority 1Priority 0

GTIA Playfield Color Interpretations
CTIA includes only one default color interpretation mode for the ANTIC Playfield data stream. That is the basic functionality assumed in the majority of the ANTIC and CTIA/GTIA discussion unless otherwise noted. GTIA includes three alternate color interpretations modes for Playfield data. These modes work by pairing adjacent color clocks from ANTIC, thus the pixels output by GTIA are always two color clocks wide. Although these modes can be engaged while displaying any ANTIC Playfield Mode, the full color palette possible with these GTIA color processing options are only realized in the ANTIC Modes based on 1/2 color clock pixels (ANTIC modes 2, 3, F.) These GTIA options are most often used with a Mode F display. The special GTIA color processing modes also alter the display or behavior of Player/Missile graphics in various ways.

The color interpretation control is a global function of GTIA affecting the entire screen. GTIA is not inherently capable of mixing on one display the various GTIA color interpretation modes and the default CTIA mode needed for most ANTIC Playfields. Mixing color interpretation modes requires software writing to the PRIOR register as the display is generated (usually, by a Display List Interrupt).

PRIOR bits 7 and 6 provide four values specifying the color interpretation modes:

GTIA Mode Bits [7:6]ОсобенностьОписание
0 0 = $00ДефолтSame as CTIA. Normal color register usage.
0 1 = $40GTIA/16 Shades16 shades of background color ( COLBK )
1 0 = $80GTIA/9 colorAll nine Playfield and Player/Missile color registers are available on the Playfield. The background is COLPM0
1 1 = $C0GTIA/16 Color15 colors at one luminance level set by the background register (COLBK ), plus the background.

16 Shades
This mode uses the COLBK register to specify the background color. Rather than using indirection, pixel values directly represent Luminance. This mode allows all four luminance bits to be used in the Atari color palette and so is capable of displaying 256 colors.

Player/Missile graphics (without the fifth Player option) display properly in this mode, however collision detection with the Playfield is disabled. Playfield priority is always on the bottom. When the Missiles are switched to act as a fifth Player then where the Missile objects overlap the Playfield the Missile pixels luminance merges with the Playfield pixels' Luminance value.

9 Color
Unlike the other two special GTIA modes, this mode is entirely driven by color indirection. All nine color registers work on the display for pixel values 0 through 8. The remaining 7 pixel values repeat previous color registers.

The pixels are delayed by one color clock (half a GTIA mode pixel) when output. This offset permits interesting effects. For an example, page flipping rapidly between this mode and a different GTIA mode produces a display with apparent higher resolution and greater number of colors.

This mode is unique in that is uses color register COLPM0 for the border and background (Playfield 0 value pixels) rather than COLBK.

Player/Missile graphics display properly with the exception that Player/Missile 0 are not distinguishable from the background pixels, since they use the same color register, COLPM0. The Playfield pixels using the Player/Missile colors are modified by priority settings as if they were Player/Missile objects and so can affect the display of Players/Missiles. (See discussion later about Player/Missile/Playfield priorities).

The Playfield pixels using Player/Missile colors do not trigger collisions when Player/Missile objects overlay them. However, Player/Missile graphics overlapping Playfield colors COLPF0 к COLPF3 will trigger the expected collision.

16 Colors
This mode uses the COLBK register to specify the luminance of all Playfield pixels (values $1шестнадцатеричный/1декабрь through $Fшестнадцатеричный/15декабрь.) The least significant bit of the luminance value is not observed, so only the standard/CTIA 8 luminance values are available ($0, $2, $4, $6, $8, $A, $C, $E). Additionally, the background itself uses only the color component set in the COLBK register. The luminance value of the background is forced to 0. As with the Luminance mode indirection is disabled and pixel values directly represent a color.

Note that the color component of the background also merges with the playfield pixels. Colors other than black for the background reduce the overall number of colors displayed in the mode.

Player/Missile graphics (without the fifth Player option) display properly in this mode, however collision detection with the Playfield is disabled. Playfield priority is always on the bottom. When the Missiles are switched to act as a fifth Player then where the Missile objects overlap the Playfield the Missile pixels inherit the Playfield pixels' Color value.

Multi-Color Player
PRIOR bit 5, value $20шестнадцатеричный/32декабрь enables Multi-Color Player objects. Where pixels of two Player/Missile objects overlap a third color appears. This is implemented by eliminating priority processing between pairs of Player/Missile objects resulting in CTIA/GTIA performing a bitwise OR of the two colored pixels to output a new color.

Example: A Player pixel with color value $98шестнадцатеричный/152декабрь (blue) overlaps a Player pixel with color value $46шестнадцатеричный/70декабрь (red) resulting in a pixel color of $DEшестнадцатеричный/228декабрь (light green/yellow).

The Players/Missiles pairs capable of Multi-Color output:

  • Player 0 + Player 1
  • Missile 0 + Missile 1
  • Player 2 + Player 3
  • Missile 2 + Missile 3

Fifth Player
PRIOR bit 4, value $10шестнадцатеричный/16декабрь enables Missiles to become a fifth Player. No functional change occurs to the Missile other than the color processing of the Missiles. Normally the Missiles display using the color of the associated Player. When Fifth Player is enabled all Missiles display the color of Playfield 3 (COLPF3 ). Horizontal position, size, vertical delay, and Player/Missile collisions all continue to operate the same way. The priority of the Fifth Player for Player objects pixel intersections is COLPF3, but the Fifth Player's pixels have priority over all Playfield colors.

The color processing change also causes some exceptions for the Missiles' display in GTIA's alternative color modes:

  • GTIA 16 Shades mode: Where Missile pixels overlap the Playfield the pixels inherit the Playfield pixels' Luminance value.
  • GTIA 16 Colors mode: Where Missile pixels overlap the Playfield the pixels inherit the Playfield pixels' Color value.

The Fifth Player introduces an exception for Priority value $8 (bits 1000) (See Priority discussion below.)

Priority
PRIOR bits 3 to 0 provide four Player/Missile and Playfield priority values that determine which pixel value is displayed when Player/Missile objects pixels and Playfield pixels intersect. The four values provide specific options listed in the Priority chart below. "PM" mean normal Player/Missile implementation without the Fifth Player. The Fifth Player, "P5", is shown where its priority occurs when it is enabled.

The chart is accurate for ANTIC Playfield Character and Map modes using the default (CTIA) color interpretation mode. GTIA color interpretation modes, and the ANTIC modes based on high-resolution, 1/2 color clock pixels behave differently (noted later).

Priority Bits [3:0]0 0 0 1 = $10 0 1 0 = $20 1 0 0 = $41 0 0 0 = $80 0 0 0 = $0
ВершинаPM0PM0P5/PF0P5/PF0PM0
PM1PM1PF1PF1PM1
PM2P5/PF0PF2PM0P5/PF0
PM3PF1PF3PM1PF1
P5/PF0PF2PM0PM2PM2
PF1PF3PM1PM3PM3
PF2PM2PM2PF2PF2
PF3PM3PM3PF3PF3
НижнийCOLBKCOLBKCOLBKCOLBKCOLBK

If multiple bits are set, then where there is a conflict CTIA/GTIA outputs a black pixel—Note that black means actual black, not simply the background color, COLBK.

Although the Fifth Player is displayed with the value of COLPF3, its priority is above all Playfield colors. This produces an exception for Priority value $8 (Bits 1000). In this mode Playfield 0 and 1 are higher priority than the Players, and the Players are higher priority than Playfield 2 and 3. Where Playfield 0 or 1 pixels intersect any Player pixel the result displayed is the Playfield pixel. However, if the Fifth player also intersects the same location, its value is shown over the Playfield causing it to appear as if Playfield 3 has the highest priority. If the Playfield 0 or 1 pixel is removed from this intersection then the Fifth Player's pixel has no Playfield pixel to override and so also falls behind the Player pixels.

When the Priority bits are all 0 a different effect occurs—Player and Playfield pixels are logically OR'd together in the a manner similar to the Multi-Color Player feature. In this situation Players 0 and 1 pixels can mix with Playfield 0 and 1 pixels, and Players 2 and 3 pixels can mix with Playfield 2 and 3 pixels. Additionally, when the Multi-Color Player option is used the resulting merged Players' color can also mix with the Playfield producing more colors. When all color merging possibilities are considered, the CTIA/GTIA hardware can output 23 colors per scan line. Starting with the background color as the first color, the remaining 22 colors and color merges are possible:

ЦветCOLPM0COLPM1COLPF0COLPF1ЦветCOLPM2COLPM3COLPF2COLPF3
1Икс12Икс
2Икс13Икс
3ИксИкс14ИксИкс
4Икс15Икс
5ИксИкс16ИксИкс
6ИксИкс17ИксИкс
7ИксИксИкс18ИксИксИкс
8Икс19Икс
9ИксИкс20ИксИкс
10ИксИкс21ИксИкс
11ИксИксИкс22ИксИксИкс

When Priority bits are all 0 the Missiles colors function the same way as the corresponding Players as described above. When Fifth Player is enabled, the Missile pixels cause the same color merging as shown for COLPF3 in the table above (colors 19 through 22).

Priority And High-Resolution Modes
The priority result differ for the Character and Map modes using high-resolution, 1/2 color clock pixels—ANTIC modes 2, 3, and F. These priority handling differences can be exploited to produce color text or graphics in these modes that are traditionally thought of as "monochrome".

In these ANTIC modes COLPF2 is output as the "background" of the Playfield and COLBK is output as the border around the Playfield. The graphics or glyph pixels are output using only the luminance component of COLPF1 mixed with the color component of the background (usually COLPF2).

The priority relationship between Players/Missiles, and COLPF2 work according to the priority chart below. Player/Missile pixels with higher priorities will replace COLPF2 as the "background" color. COLPF1 always has the highest priority and cannot be obscured by Players or Missiles. The glyph/graphics pixels use the color component of highest priority color (Playfield, Player, or Missile), and the luminance component of COLPF1. Note that this behavior is also consistent where Player/Missile priority conflicts result in true black for the "background". In effect, the color value CTIA/GTIA finally uses for the "background" color "tints" the COLPF1 foreground glyph/graphics pixels.

Priority Bits [3:0]COLPF2 vs COLPM0 and COLPM1COLPF2 vs COLPM2 and COLPM3
0 0 0 0 = $00Player/MissilePlayer/Missile OR'd with COLPF2
0 0 0 1 = $01Player/MissilePlayer/Missile
0 0 1 0 = $02Player/MissileCOLPF2
0 0 1 1 = $03Player/MissileTrue Black
0 1 0 0 = $04COLPF2COLPF2
0 1 0 1 = $05COLPF2True Black
0 1 1 0 = $06COLPF2COLPF2
0 1 1 1 = $07COLPF2True Black
1 0 0 0 = $08Player/MissilePlayer/Missile
1 0 0 1 = $09Player/MissilePlayer/Missile
1 0 1 0 = $0APlayer/MissileTrue Black
1 0 1 1 = $0BPlayer/MissileTrue Black
1 1 0 0 = $0CCOLPF2True Black
1 1 0 1 = $0DCOLPF2True Black
1 1 1 0 = $0ECOLPF2True Black
1 1 1 1 = $0FCOLPF2True Black

VDELAY $D01C Write

Vertical Delay P/M Graphics

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
Игрок 3Игрок 2Игрок 1Player 0Missile 3Missile 2Missile 1Missile 0

This register is used to provide single scan line movement when Double Line Player/Missile resolution is enabled in ANTIC's DMACTL регистр. This works by masking ANTIC DMA updates to the GRAF* registers on even scan lines, causing the graphics pattern to shift down one scan line.

Since Single Line resolution requires ANTIC DMA updates on each scan line and VDELAY masks the updates on even scan lines, then this bit reduces Single line Player/Missile resolution to Double line.

GRACTL $D01D Write

Graphics Control

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
?????Trigger LatchEnable PlayersEnable Missiles

GRACTL controls CTIA/GTIA's receipt of Player/Missile DMA data from ANTIC and toggles the mode of Joystick trigger input.

Receipt of Player/Missile DMA data requires CTIA/GTIA be configured to receive the data. This is done with a pair of bits in GRACTL that match a pair of bits in ANTIC's DMACTL register that direct ANTIC to send Player data and Missile data. GRACTL's Bit 0 corresponds to DMACTL's Bit 2, enabling transfer of Missile data. GRACTL's Bit 1 corresponds to DMACTL's Bit 3, enabling transfer of Player data. These bits must be set for GTIA to receive Player/Missile data from ANTIC via DMA. When Player/Missile graphics are being operated directly by the CPU then these bits must be off.

The joystick trigger registers report the pressed/not pressed state in real-time. If a program's input polling may not be frequent enough to catch momentary joystick button presses, then the triggers can be set to lock in the closed/pressed state and remain in that state even after the button is released. Setting GRACTL Bit 2 enables the latching of all triggers. Clearing the bit returns the triggers to the unlatched, real-time behavior.

HITCLR $D01E Write

Clear Collisions

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
????????

Any write to this register clears all the Player/Missile collision detection bits.

Other CTIA/GTIA Functions

Joystick Triggers

TRIG0 $D010 Read

SHADOW: STRIG0 $0284

Joystick 0 trigger

TRIG1 $D011 Read

SHADOW: STRIG1 $0285

Joystick 1 trigger.

TRIG2 $D012 Read

SHADOW: STRIG2 $0286

Joystick 2 trigger.

TRIG3 $D013 Read

SHADOW: STRIG3 $0287

Joystick 3 trigger

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Спусковой крючок
0000000?

Bits 7 through 1 are always 0. Bit 0 reports the state of the joystick trigger. Value 1 indicates the trigger is not pressed. Value 0 indicates the trigger is pressed.

The trigger registers report button presses in real-time. The button pressed state will instantly clear when the button is released.

The triggers may be configured to latch, that is, lock, in the pressed state and remain that way until specifically cleared. GRACTL bit 2 enables the latch behavior for all triggers. Clearing GRACTL bit 2 returns all triggers to real-time behavior.

PAL $D014 Read

PAL flags.

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
----Video 3Video 2Video 1Video 0

This register reports the display standard for the system. When Bits 3 to 0 are set to 1 (value $fшестнадцатеричный/15декабрь) the system is operating in NTSC. When the bits are zero the system is operating in PAL mode.

CONSPK $D01F Write

Console Speaker

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
0000Оратор---

Bit3 controls the internal speaker of the Atari 800/400. In later models the console speaker is removed and the sound is mixed with the regular POKEY audio signals for output to the monitor port and RF adapter. The Atari OS uses the console speaker to output the keyboard click and the bell/buzzer sound.

The Operating System sets the speaker bit during the Vertical Blank routine. Repeatedly writing 0 to the bit will produce a 60 Hz buzzing sound as the Vertical Blank resets the value. Useful tones can be generated using 6502 code effectively adding a fifth audio channel, albeit a channel requiring CPU time to maintain the audio tones.

CONSOL $D01F Read

Console Keys

Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
-----ВариантВыбиратьНачинать

A bit is assigned to report the state of each of the special console keys, Start, Select, and Option. Bit value 0 indicates a key is pressed and 1 indicates the key is not pressed. Key/Bit values:

  • Start Key = Bit value $1
  • Select Key = Bit value $2
  • Option Key = Bit value $4

Player/Missile Graphics (sprites) operation

A hardware "спрайт " system is handled by CTIA/GTIA. The official ATARI name for the sprite system is "Player/Missile Graphics", since it was designed to reduce the need to manipulate display memory for fast-moving objects, such as the "player" and his weapons, "missiles", in a застрели их игра.

A Player is essentially a glyph 8 pixels wide and 256 TV lines tall, and has two colors: the background (transparent) (0 in the glyph) and the foreground (1). A Missile object is similar, but only 2 pixels wide. CTIA/GTIA combines the Player/Missile objects' pixels with the Playfield pixels according to their priority. Transparent (0) player pixels have no effect on the Playfield and display either a Playfield or background pixel without change. All Player/Missile objects' normal pixel width is one color clock. A register value can set the Player or Missile pixels' width to 1, 2, or 4 color clocks wide.

The Player/Missile implementation by CTIA/GTIA is similar to the TIA с. A Player is an 8-bit value or pattern at a specified horizontal position which automatically repeats for each scan line or until the pattern is changed in the register. Missiles are 2-bits wide and share one pattern register, so that four, 2-bit wide values occupy the 8-bit wide pattern register, but each missile has an independent horizontal position and size. Player/Missile objects extend the height of the display including the screen border. That is, the default implementation of Player/Missile graphics by CTIA/GTIA is a stripe down the screen. While seemingly limited this method facilitates Player/Missile graphics use as alternate colored vertical borders or separators on a display, and when priority values are set to put Player/Missile pixels behind playfield pixels they can be used to add additional colors to a display. All Players and Missiles set at maximum width and placed side by side can cover the entire normal width Playfield.

CTIA/GTIA supports several options controlling Player/Missile color. В PRIOR/GPRIOR register value can switch the four Missiles between two color display options—each Missile (0 to 3) expresses the color of the associated Player object (0 to 3) or all Missiles show the color of register COLPF3/COLOR3. When Missiles are similarly colored they can be treated as a fifth player, but correct placement on screen still requires storing values in all four Missile Horizontal Position registers. PRIOR/GPRIOR also controls a feature that causes the overlapping pixels of two Players to generate a third color allowing multi-colored Player objects at the expense of reducing the number of available objects. Ну наконец то, PRIOR/GPRIOR can be used to change the foreground/background layering (called, "priority") of Player/Missile pixels vs Playfield pixels, and can create priority conflicts that predictably affect the colors displayed.

The conventional idea of a sprite with an image/pattern that varies vertically is also built into the Player/Missile graphics system. The ANTIC chip includes a feature to perform DMA to automatically feed new pixel patterns to CTIA/GTIA as the display is generated. This can be done for each scan line or every other scan line resulting in Player/Missile pixels one or two scan lines tall. In this way the Player/Missile object could be considered an extremely tall character in a font, 8 bits/pixels wide, by the height of the display.

Moving the Player/Missile objects horizontally is as simple as changing a register in the CTIA/GTIA (in Atari BASIC, a single POKE statement moves a player or missile horizontally). Moving an object vertically is achieved by either block moving the definition of the glyph to a new location in the Player or Missile bitmap, or by rotating the entire Player/Missile bitmap (128 or 256 bytes). The worst case rotation of the entire bitmap is still quite fast in 6502 machine language, even though the 6502 lacks a block-move instruction found in the 8080. Since the sprite is exactly 128 or 256 bytes long, the indexing can be easily accommodated in a byte-wide register on the 6502. Atari BASIC lacks a high speed memory movement command and moving memory using BASIC PEEK()s and POKE(s) is painfully slow. Atari BASIC programs using Player/Missile graphics have other options for performing high speed memory moves. One method is calling a short machine language routine via the USR() function to perform the memory moves. Another option is utilizing a large string as the Player/Missile memory map and performing string copy commands which result in memory movement at machine language speed.

Careful use of Player/Missile graphics with the other graphics features of the Atari hardware can make graphics programming, particularly games, significantly simpler.

GTIA enhancements

The GTIA chip is обратная совместимость with the CTIA, and adds 3 color interpretations for the 14 "normal" ANTIC Playfield graphics modes. The normal color interpretation of the CTIA chip is limited, per scanline, to a maximum of 4 colors in Map modes or 5 colors in Text modes (plus 4 colors for Player/Missile graphics) unless special programming techniques are used. The three, new color interpretations in GTIA provide a theoretical total of 56 graphics modes (14 ANTIC modes multiplied by four possible color interpretations). However, only the graphics modes based on high-resolution, 1/2 color clock pixels (that is, Antic text modes 2, 3, and graphics mode F) are capable of fully expressing the color palettes of these 3 new color interpretations. The three additional color interpretations use the information in two color clocks (four bits) to generate a pixel in one of 16 color values. This changes a mode F display from 2 colors per pixel, 320 pixels horizontally, one scan line per mode line, to 16 colors and 80 pixels horizontally. The additional color interpretations allow the following:

  • GTIA color interpretation mode $4 -- 16 shades of a single hue (set by the background color, COLBK) from the 16 possible hues in the Atari palette. This is also accessible in Atari BASIC as Graphics 9.
  • GTIA color interpretation mode $8 -- This mode allows 9 colors of indirection per horizontal line in any hue and luminance from the entire Atari palette of 128 colors. This is accomplished using all the Player/Missile and Playfield color registers for the Playfield pixels. In this mode the background color is provided by color register COLPM0 while COLBAK is used for Playfield pixel value $8. This mode is accessible in Atari BASIC as Graphics 10,
  • GTIA color interpretation mode $C -- 15 hues in a single shade/luminance value, plus the background. The value of the background, COLBK sets the luminance level of all other pixels (pixel value $1 through $F). The least significant bit of the luminance value is not observed, so only the standard/CTIA 8 luminance values are available ($0, $2, $4, $6, $8, $A, $C, $E). Additionally, the background itself uses only the color component set in the COLBK register. The luminance value of the background is forced to 0. This mode is accessible in Atari BASIC as Graphics 11.

Of these modes, Atari BASIC Graphics 9 is particularly notable. It enables the Atari to display gray-scale digitized photographs, which despite their low resolution were very impressive at the time. Additionally, by allowing 16 shades of a single hue rather than the 8 shades available in other graphics modes, it increases the amount of different colors the Atari could display from 128 to 256. Unfortunately, this feature is limited for use in this mode only, which due to its low resolution was not widely used.

The Antic 2 and 3 text modes are capable of displaying the same color ranges as mode F graphics when using the GTIA's alternate color interpretations. However, since the pixel reduction also applies and turns 8 pixel wide, 2 color text into 2 pixel wide, 16 color blocks these modes are unsuitable for actual text, and so these graphics modes are not popular outside of demos. Effective use of the GTIA color interpretation feature with text modes requires a carefully constructed character set treating characters as pixels. This method allows display of an apparent GTIA "high resolution" graphics mode that would ordinarily occupy 8K of RAM to instead use only about 2K (1K for the character set, and 1K for the screen RAM and display list.)

The GTIA also fixed an error in CTIA that caused graphics to be misaligned by "half a color clock". The side effect of the fix was that programs that relied on color artifacts in high-resolution monochrome modes would show a different pair of colors.[5][15]

Atari owners can determine if their machine is equipped with the CTIA or GTIA by executing the БАЗОВЫЙ команда POKE 623,64. If the screen blackens after execution, the machine is equipped with the new GTIA chip. If it stays blue, the machine has a CTIA chip instead.

Ошибки

The last Atari XE computers made for the Eastern European market were built in China. Many if not all have a buggy PAL GTIA chip. The luma values in Graphics 9 and higher are at fault, appearing as stripes. Replacing the chip fixes the problem. Also, there have been attempts to fix faulty GTIA chips with some external circuitry.

Смотрите также

Рекомендации

  1. ^ а б c Atari Home Computer Field Service Manual - 400/800 (PDF). Atari, Inc. pp. 1–10. Получено 2010-09-10.
  2. ^ Neubauer, Doug (2009-06-20). "The Atari Years, by Doug Neubauer. Star Raiders, Solaris and Pokey". DougNeubauer.com.
  3. ^ а б c Sherer, Robin Alan (June 1988). "GTIA Joystick Painter - Powerful Atari Animation Tool". ANTIC. 7 (2): 37. ISSN  0113-1141. Получено 2011-01-26.
  4. ^ US patent 4296476, Mayer, Steven T.; Miner, Jay G.; Neubauer, Douglas G.; Decuir, Joseph C., "Data processing system with programmable graphics generator", issued 1981-10-20, assigned to Atari, Inc. 
  5. ^ а б c d е Patchett, Craig; Sherer, Robin (1984). "Special Chips and ROM". The Master Memory Map for the Atari. Reston, Va.: Reston Publishing Company. ISBN  0-8359-4242-2. Получено 2011-01-26.
  6. ^ а б c d е Mace, Scott (1982-03-15). "Atari quietly switches to a 16-color graphics chip". InfoWorld. Palo Alto, CA: Popular Computing. 4 (10): 3–4. ISSN  0199-6649. Получено 2011-02-01.
  7. ^ а б Chamberlain, Craig (July 1982). "Atari Video Graphics And The New GTIA". Вычислить! (26): 124. ISSN  0194-357X. Получено 2011-01-24.
  8. ^ а б c Joe Decuir, "3 Generations of Game Machine Architecture", CGEXPO99
  9. ^ а б Small, David; Маленький, Сэнди; Blank, George (May 1983). "Design Philosophy and GTIA Demos". Творческий Atari. Creative Computing Press. ISBN  978-0-916688-34-9. Получено 2011-01-26.
  10. ^ Switzer, Steve (October 1983). "Atari Clinic". ANTIC. 2 (7): 103. ISSN  0113-1141. Получено 2011-02-01.
  11. ^ Michael Current, "What are the SALLY, ANTIC, CTIA/GTIA, POKEY, and FREDDIE chips?", Atari 8-Bit Computers: Frequently Asked Questions
  12. ^ а б c d е Борис, Дан. "Atari Chips". Dan B's Home Page. Получено 2011-02-01.
  13. ^ Vendel, Curt. "Atari 800XLCR". AtariMuseum.com. Получено 2011-02-01.
  14. ^ Vendel, Curt. "KERI Performance Tester". AtariMuseum.com. Получено 2011-02-01.
  15. ^ Small, David; Маленький, Сэнди; Blank, George, eds. (1983). "The Wizard, the Princess, and the Atari". Творческий Atari. Creative Computing Press. ISBN  0916688348.

внешняя ссылка