Адаптер телевизионного интерфейса - Television Interface Adaptor
Эта статья ведущий раздел не может адекватно подвести итог его содержание.июнь 2013) ( |
В Адаптер телевизионного интерфейса[1] (TIA) это обычай компьютерный чип это сердце Atari 2600 игровая консоль, генерирующая отображение экрана, звуковые эффекты и считывающие контроллеры ввода. На его дизайн сильно повлияла попытка уменьшить количество баран необходимо для работы с дисплеем. Полученный в результате дизайн, как известно, сложно программировать, что является постоянной проблемой для разработчиков.
Разработка CO10444 / CO11903[2] TIA возглавил Джей Майнер который продолжил в Atari расширять дизайн TIA для Atari 400/800 компьютеры с АНТИК и CTIA / GTIA чипсы. Джей Майнер будет руководить разработкой пользовательских чипов для Amiga Lorraine, который впоследствии стал компьютером Commodore Amiga.
Дизайн
Фон
Рано видеоигры обычно использовались два разных типа графики: «игроки», которыми управлял игрок или компьютер (сегодня известный как спрайты ), а также «игровое поле» или фоновая графика, обычно нарисованная под игроками.[3] Игроки постоянно перемещаются, в то время как игровые поля в основном были статичными, меняясь только в четко определенные моменты времени при «смене уровня».
Обычный способ нарисовать игровое поле - использовать битовая карта проводился в кадровый буфер. Каждая ячейка памяти в буфере кадра содержит значение, описывающее пиксели на экране. Схема дисплея считывает эти значения из буфера и использует их для генерации аналогового сигнала для отображения на ЭЛТ видеомонитор. Отображение памяти на места на экране или пиксели часто ограничивалось аппаратным обеспечением дисплея. На обычном NTSC цветной телевизор максимальное разрешение обычно составляет от 256 до 320 пикселей на строку и от 192 до 240 строк на экран.[4]
Дизайн без RAM
Когда разрабатывалась модель 2600, баран был чрезвычайно дорогим, стоил десятки тысяч долларов за мегабайт.[5] Типичный дисплей с разрешением 320 на 200 пикселей и даже с одним битом на пиксель потребует 8000 байт памяти для хранения буфера кадра.[3] Это не подойдет для платформы, которая должна стоить всего несколько сотен долларов. Даже резкое снижение разрешения не снизит стоимость памяти до разумного уровня. Вместо этого команда разработчиков решила полностью удалить фреймбуфер на основе памяти.
TIA отличается от традиционного подхода с буфером кадра тем, что изображение на экране формируется путем манипулирования пятью подвижными графическими объектами (2 игрока, 2 ракеты и 1 мяч) и статическим объектом игрового поля. Все они генерируются на каждой строке развертки из соответствующих регистров, в отличие от метода, используемого в модели с отображением буфера кадра, требующей, чтобы программа обновляла их на каждой строке развертки.[6] Горизонтальное разрешение неоднородно, так как его размер зависит от конкретного графического объекта. Наименьшая единица пикселя соответствует 1 тактовому циклу цвета чипа, из которых 160 видимых на строке.[6]
Объект Playfield состоит из двух с половиной байтового регистра (шириной 20 бит), который может быть симметрично отражен или скопирован как есть в правую половину экрана, всего 40 бит (каждый бит составляет 4 цветовых цикла. широкий). Цвет, который был нарисован, если бит был 1 или 0, был выбран из предопределенной палитры до 128 цветов (см. Ниже) и сохранен в других регистрах.
TIA также поддерживает пять отдельных графических объектов, состоящих из:
- Две 8-пиксельные горизонтальные линии, составляющие 'спрайты Игрок 1 и Игрок 2. Они одного цвета, могут быть растянуты в 2 или 4 раза, и могут быть дублированы или дублированы в трех экземплярах.
- «Мяч» - горизонтальная линия того же цвета, что и игровое поле. Это может быть один, два, четыре или восемь пикселей в ширину.
- Две «ракеты» - еще одна горизонтальная линия того же цвета, что и соответствующий игрок. Это может быть один, два, четыре или восемь пикселей в ширину.
TIA имеет аппаратное обнаружение коллизий для всех этих объектов и хранит битовую карту коллизий, которые обычно считываются в течение периода VBLANK. Регистры в TIA позволяют программисту контролировать расположение графических объектов и их цвет.
TIA также предоставляет два канала однобитового звука. Каждый канал обеспечивает 32 значения высоты тона и 16 возможных битовых последовательностей. Есть 4-х битный регулятор громкости.
Наконец, TIA имеет входы для чтения до четырех аналоговых лопастных контроллеров с использованием потенциометры и для двух триггеров джойстика.
Рисование дисплея
Поскольку регистры содержали данные только для одной строки дисплея, создание полноэкранного режима требовало, чтобы игровая программа обновляла регистры на лету, процесс, известный как "мчащийся луч ".[7]
Для запуска процесса игровая программа, запущенная на Технология MOS 6502 -основан ЦПУ загрузит регистры TIA данными, необходимыми для рисования первой строки дисплея. Затем TIA будет ждать, пока телевизор будет готов нарисовать линию (под командой соответствующего аналогового оборудования TIA) и считывать регистры, чтобы произвести сигнал для этой линии. Вовремя горизонтальное гашение Период между строками, 6502 быстро изменит регистры TIA на данные, необходимые для следующей строки. Этот процесс продолжался вниз по экрану.
Этот процесс усложнялся тем, что Технология MOS 6507 В 2600 использовалась версия 6502 с уменьшенными выводами, которая не поддерживала аппаратное обеспечение. прерывает. Как правило, аналоговая сторона системы отображения генерирует прерывание, когда заканчивает рисовать растровую линию и готовится к следующей (как, например, в домашних компьютерах Atari). Прерывание запускало код, необходимый для обновления экрана, а затем возвращался в «основную» программу. 6507 оставил эти контакты вне процессора, чтобы сэкономить деньги. Однако у него был вывод «RDY», используемый для вставки состояний ожидания в циклы шины ЦП. TIA был специально разработан для использования вывода RDY для синхронизации ЦП с синхронизацией растровой строки видео, генерируемого TIA: когда ЦП записывает в определенный адрес регистра TIA, TIA понижает выходной сигнал RDY до начала следующей строки. Когда 6507 и TIA соединены между собой обычным способом (как в Atari 2600), это приостанавливает работу ЦП до начала (цикл цветовой синхронизации 0) следующей строки, обеспечивая некоторую автоматическую синхронизацию. Предполагаемое использование этого механизма состоит в том, чтобы ЦП настраивал регистры TIA для следующей строки до того, как TIA достигнет конца текущей строки, а затем записывает в регистр, который запускает задержку синхронизации через RDY, отбрасывая переменное количество Процессорное время для упрощения синхронизации видео.
Кроме того, TIA только полуавтоматически генерирует синхронизирующие сигналы вертикальной синхронизации (чтобы отметить конец каждого видеокадра и начало следующего). TIA может вставлять сигнал вертикальной синхронизации в аналоговый выходной видеосигнал, но он не имеет счетчика строк кадров и поэтому не может определить, когда должен закончиться кадр. Вместо этого программе ЦП предоставляется запуск сигналов вертикальной синхронизации и подсчет строк в каждом кадре, чтобы определить, когда должен генерироваться сигнал вертикальной синхронизации. Как и в случае с оборудованием RDY-wait, сигнал вертикальной синхронизации запускается при записи ЦП на определенный адрес регистра TIA. Если запись по этому адресу никогда не производилась, а TIA разрешалось запускаться в свободном режиме, он генерировал один бесконечный кадр активных растровых строк, который обычно появлялся на экране телевизора в виде катящегося изображения. Большинство опубликованных игр для Atari 2600 генерировали вертикальную синхронизацию либо через каждые 262, либо через каждые 263 строки (но ничто в TIA не могло помешать ему генерировать кадры любой длины, короче или длиннее, хотя в результате видеодисплеи будут вращаться вертикально - с различной скоростью - на нормальных телевизорах).
Эти и другие детали программирования TIA означали, что программистам нужно было тщательно рассчитывать время своих программ, чтобы выполнить точное количество циклов, необходимых для различных событий, связанных с экраном. Ошибка означала, что экран не будет отображаться должным образом, поэтому, помимо сложности рисования дисплея, программистам также необходимо было тщательно подсчитывать количество циклов, которые потребовались их программам для запуска, перемещая код по мере необходимости, чтобы убедиться, что он точно соответствует в рамках ограниченного бюджета ЦП. Часть программы, которая это делала, была известна как "ядро" этой программы.[8] и был фантастически сложным по сравнению с программным обеспечением, выполняющим аналогичную функцию в других системах.
Учитывая эту сложность, ранние игры, использующие эту систему, имели тенденцию быть довольно простыми по компоновке, используя TIA для создания простых симметричных игровых полей с игроками наверху. Это было изначальное намерение системы - иметь возможность запускать несколько аркадные игры Atari уже выпустила простые игровые поля, например танк и Понг. В этих случаях данные игрового поля обычно размещались в 2 КБ. ПЗУ память в игровой картридж. Поскольку каждая строка использовала 20 бит данных, а на дисплее NTSC было 192 строки,[9] дисплею с разной компоновкой в каждой строке требовалось всего 480 байт (192 x 20/8) из 4 кБ картриджа, чтобы разместить один жестко запрограммированный дисплей. В этом случае ядро просто продвигало 20 бит через ПЗУ для каждой строки, когда TIA продвигался вниз по экрану, задача, которая занимала всего несколько циклов процессорного времени. Это можно было бы еще больше уменьшить, используя одни и те же данные для нескольких строк, либо удваивая их по вертикали, либо читая один путь по списку для верха, а затем обратно в обратном направлении для нижнего, создавая вертикальное зеркальное отображение всего 240 байт.
Ключевым достижением стало лицензирование Космические захватчики для платформы, для которой требовалось гораздо больше графики игрока, чтобы рисовать вражеских пришельцев. Решение состояло в том, чтобы изменять данные игрока для каждой линии по мере рисования изображения, создавая очевидное большое количество игроков. Космические захватчики была платформа приложение-убийца, увеличивая продажи системы в четыре раза. Еще один прогресс был достигнут путем (частичного) кодирования дисплея в виде инструкций ЦП вместо сохранения его в виде фиксированных данных в ПЗУ. Приключение использовал эту концепцию для создания большого количества карт, комбинируя различные части данных в ПЗУ, перепрыгивая через них во время рисования на экране.[10] Это позволило игре иметь 30 комнат, для которых в противном случае потребовалось бы 14 КБ ПЗУ.
По мере того, как программисты все больше привыкли к странным временным интервалам, необходимым для правильной работы на экране, они начали использовать присущую TIA гибкость для значительного улучшения дисплеев. Одним из распространенных «трюков» было изменение регистров цвета, которые использовались для отображения состояний 1 и 0 игрового поля, в результате чего на дисплеях появлялись эффекты, похожие на радугу - это стало отличительной чертой платформы. В более поздних играх даже удалось добиться того момента, когда они могли безопасно менять цвета во время рисования линии. Подобные эффекты можно использовать для изменения средней линии игрового поля для создания асимметричных шаблонов, а также для изменения положения и изменения спрайтов игроков в середине экрана, чтобы генерировать дополнительные спрайты на экране. Эти уловки, в совокупности именуемые «гонкой по лучу», во многих случаях позволяли создавать более графически насыщенные игры, чем изначально предполагали разработчики оборудования. Программирование TIA остается реальной проблемой, которая нравится многим домашним программистам и сегодня.
Возможности TIA Color
TIA использует разные цветовые палитры в зависимости от используемого формата телевизионного сигнала. За NTSC формат (номер детали CO10444)[2], предусмотрена 128-цветная палитра, в то время как для PAL (номер детали CO11903)[2]. Кроме того, СЕКАМ палитра состоит всего из 8 цветов.
Палитра NTSC
яркость оттенок | 0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 |
---|---|---|---|---|---|---|---|---|
0 | ||||||||
1 | ||||||||
2 | ||||||||
3 | ||||||||
4 | ||||||||
5 | ||||||||
6 | ||||||||
7 | ||||||||
8 | ||||||||
9 | ||||||||
10 | ||||||||
11 | ||||||||
12 | ||||||||
13 | ||||||||
14 | ||||||||
15 |
Палитра PAL
яркость оттенок | 0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 |
---|---|---|---|---|---|---|---|---|
0,1,14,15 | ||||||||
2 | ||||||||
3 | ||||||||
4 | ||||||||
5 | ||||||||
6 | ||||||||
7 | ||||||||
8 | ||||||||
9 | ||||||||
10 | ||||||||
11 | ||||||||
12 | ||||||||
13 |
Палитра SECAM
0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 |
---|---|---|---|---|---|---|---|
Генератор шума / тонального сигнала (AUD0 / 1)
TIA может генерировать различные типы импульсов и шума на своих двух генераторах (или каналах) AUD0 и AUD1. Каждый генератор имеет 5-битный делитель частоты и 4-битный регистр управления звуком, который управляет формой волны. Также имеется 4-битный регистр регулировки громкости на каждый канал.
Делитель частоты (AUDF0 / 1)
Частоты генерируются путем деления 30 кГц на предоставленное 5-битное значение. В результате получается дешевый делитель частоты, способный воспроизводить расстроенные ноты и нечетно настроенную частоту. TIA не является музыкальным чипом, если композитор не работает в рамках частотных ограничений или не модулирует между двумя расстроенными частотами для создания настроенной ноты вибрато.
Управление звуком (AUDC0 / 1)
Регистр управления звуком генерирует импульсную волну и управляет ею для создания сложных импульсов или шума. В следующей таблице (с продуманными дубликатами) объясняется, как генерируются его тона:
HEX | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Тип шума или разделения |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | Установите 1 (только громкость) | ||||
1 | 0 | 0 | 0 | 1 | 4-битный поли | ||||
2 | 0 | 0 | 1 | 0 | ÷ 15 → 4-битный поли | ||||
3 | 0 | 0 | 1 | 1 | 5-битный поли → 4-битный поли | ||||
4 | 0 | 1 | 0 | 0 | ÷ 2 | ||||
5 | 0 | 1 | 0 | 1 | ÷ 2 | ||||
6 | 0 | 1 | 1 | 0 | ÷ 31 | ||||
7 | 0 | 1 | 1 | 1 | 5-битный поли → ÷ 2 | ||||
8 | 1 | 0 | 0 | 0 | 9-битный поли (белый шум) | ||||
9 | 1 | 0 | 0 | 1 | 5-битный поли | ||||
А | 1 | 0 | 1 | 0 | ÷ 31 | ||||
B | 1 | 0 | 1 | 1 | Установите последние 4 бита на 1 | ||||
C | 1 | 1 | 0 | 0 | ÷ 6 | ||||
D | 1 | 1 | 0 | 1 | ÷ 6 | ||||
E | 1 | 1 | 1 | 0 | ÷ 93 | ||||
F | 1 | 1 | 1 | 1 | 5-битный поли ÷ 6 |
Рекомендации
- ^ «I. Теория действия». Руководство по обслуживанию видео компьютерной системы Atari на месте - модель 2600 / 2600A для внутреннего пользования (PDF). Ред. 02. Atari, Inc. 21 января 1983 г. С. 1–4. Архивировано из оригинал (PDF) 15 февраля 2017 г.. Получено 10 сентября, 2010.
- ^ а б c Стилфен, Скотт (5 февраля 2020 г.). "ATARI VCS / 2600 TIA CHIPS". Получено 24 февраля, 2020.
- ^ а б Крис Кроуфорд, «ANTIC и список отображения», Де Ре Атари
- ^ Montfort & Bogost, стр. 27
- ^ Маккаллум, Джон К. (13 февраля 2012 г.). «Цены на память (1957-2012)». jcmit.net. Архивировано из оригинал 26 октября 2012 г.. Получено 27 октября, 2012.
- ^ а б Райт, Стив. "Руководство программиста Стеллы", (на испанском языке) 3 декабря 1979 г. В архиве 5 марта 2016 г.
- ^ Колер, Крис (13 марта 2009 г.). «Гонка за лучом: как безумное оборудование Atari 2600 изменило дизайн игры». Проводной. В архиве из оригинала от 12 июля 2014 г.
- ^ Montfort & Bogost, стр. 34
- ^ Подробнее о PAL см. «Характеристики Atari 2600» В архиве 24 мая 2011 г. Wayback Machine
- ^ Робинетт, Уоррен, "Приключение", Университет Северной Каролины. В архиве 27 января 2018 г.
Источники
- Монфор, Ник; Богост, Ян (2009). Racing the Beam: компьютерная видеосистема Atari. MIT Press. ISBN 0-262-01257-X.