ДРЕВНИЙ
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|

Контроллер буквенно-цифрового телевизионного интерфейса [1] ( ANTIC ) — это LSI ASIC , предназначенная для создания 2D компьютерной графики , которая будет отображаться на экране телевизора или дисплее компьютера .
Под руководством Джея Майнера чип был разработан в 1977–1978 годах Джо Декюром , Франсуа Мишелем и Стивом Смитом. [2] для 8-битных компьютеров Atari, впервые выпущенных в 1979 году. Чип был запатентован Atari, Inc. в 1981 году. [3] ANTIC также используется в игровой консоли Atari 5200 1982 года , которая имеет большую часть того же оборудования, что и 8-битные компьютеры.
Для каждого кадра видео ANTIC считывает инструкции для определения игрового поля или фоновой графики, затем доставляет поток данных в сопутствующий чип CTIA или GTIA , который добавляет цвет и накладывает спрайты (называемые Atari «графикой игрока/ракеты»). Каждая инструкция ANTIC соответствует либо пустым строкам развертки , либо одному из 14 графических режимов, используемых для горизонтальной полосы дисплея. Высота каждой полосы зависит от режима. Инструкции содержат список отображения , на языке Atari, который определяет, как весь дисплей строится из стека отдельных режимов.
Список отображения указывает, откуда берутся данные для каждой строки. В символьных режимах базовый адрес растровых изображений символов хранится во встроенном регистре и может быть изменен. Инструкции списка отображения могут включать тонкую горизонтальную и вертикальную прокрутку и отмечать необходимость возникновения прерывания. Прерывание позволяет выполнить произвольный код 6502, обычно для изменения настроек дисплея в середине кадра.
Компьютерный журнал Atari Antic был назван в честь чипа. [4]
Особенности [ править ]
В приведенном ниже списке описаны присущие аппаратным возможностям ANTIC, означающие предполагаемую функциональность оборудования сами по себе, не включая результаты, достигнутые с помощью прерываний, обслуживаемых ЦП, или ядер дисплея, часто вызывающих изменения в регистрах.
ANTIC использует DMA для чтения программы, называемой списком отображения , которая определяет следующие функции игрового поля:
- 14 различных графических режимов
- 6 режимов персонажей
- 4 типа рендеринга шрифтов/глифов
- 8 растровых режимов
- 6 режимов персонажей
- Вывод переменного количества пустых строк сканирования
- Режимы текста и карты игрового поля можно смешивать на экране.
- Переменная высота экрана вплоть до вертикальной развертки
- Горизонтальная и вертикальная грубая прокрутка
- Определите разделы дисплея, на которые распространяется горизонтальная и/или вертикальная тонкая прокрутка.
- Запуск процедуры прерывания, обслуживаемой ЦП, называемой «Прерывание списка отображения», в определенных строках сканирования (также называемой « растровым прерыванием » или « Горизонтальным пустым прерыванием » в других системах).
- Запустите процедуру прерывания, обслуживаемую ЦП, называемую «Прерывание по вертикальному пробелу», в конце кадра дисплея.
Другие функции на основе регистров:
- Переменная ширина экрана вплоть до горизонтальной развертки
- Определите расстояние перемещения для горизонтальной и вертикальной тонкой прокрутки.
- Предоставляет информацию в режиме реального времени о вертикальном положении экрана электронного луча.
- Считывает горизонтальные/вертикальные координаты светового пера (только ЭЛТ)
- Мягкий, переопределяемый набор символов.
- Настраиваемое отображение инверсных видеосимволов.
- Символы могут быть вертикально отражены.
- Управляйте ориентированными на отображение прерываниями «Вертикальная пустая полоса» и «Список отображения», а также прерыванием клавиши сброса.
- Выполняет DMA для CTIA/GTIA для создания графики игрока/ракеты (также известной как спрайты ).
- Нефиксированная оперативная память. Это позволяет располагать ОЗУ для графических функций практически в любом месте 16-битного диапазона адресов памяти. Это относится к:
- Отображение списков.
- Графические данные игрового поля
- Шрифты набора символов
- Графические данные игрока/ракеты
Версии [ править ]
по номеру детали
- C012296 — NTSC: используется в компьютерах Atari 400, 800 и 1200XL. [5]
- C014887 — PAL/SECAM: используется в компьютерах Atari 400 и 800.
- C021697 — NTSC: используется в моделях Atari 600XL, 800XL и XE.
- C021698 — PAL/SECAM: используется в моделях Atari XL и XE.
Atari, Inc. намеревалась объединить функции чипов ANTIC и GTIA в одной интегральной схеме, чтобы снизить затраты на производство компьютеров Atari и консолей 5200. Разрабатывались два таких прототипа схемы, но ни один из них не поступил в производство.
Распиновка [ править ]

Имя контакта | Номер(а) контакта | Описание |
---|---|---|
А0 - А15 | 13, 12, 11, 10, 28, 27, 26, 25, 24, 23, 16, 22, 17, 18, 19, 20 | Адрес памяти ввода/вывода |
АН0 – АН2 | 2, 3, 5 | Интерфейс ANTIC для CTIA/GTIA |
D0 – D7 | 30, 31, 32, 33, 40, 39, 38, 37 | Шина данных ввода-вывода |
Ф00 | 35 | Быстрая входная тактовая частота фазы 0 |
ОСТАНОВКА | 9 | Остановить вывод (приостанавливает работу процессора, пока ANTIC читает память) |
LP | 4 | Ввод световым пером |
НМИ | 7 | Вывод прерывания NMI на ЦП |
РДИ | 15 | Готовый вывод. ANTIC переводит контакт на низкий уровень, чтобы остановить процессор для горизонтальной синхронизации (WSYNC). |
ССЫЛКА | 8 | Выход обновления ОЗУ |
РНМИ | 6 | Вход прерывания NMI |
РСТ | 36 | Сброс входа ANTIC |
Ч/З | 14 | Чтение/запись направления ввода/вывода |
В куб.см. | 21 | Питание +5 вольт |
В сс | 1 | Земля |
Ø0 | 34 | Тактовый выход фазы 0 |
Ø2 | 29 | Входной сигнал фазы 2 |
Регистры [ править ]
8-битные компьютеры Atari и консоль Atari 5200 сопоставляют чип ANTIC с шестнадцатеричной страницей $D4xx.
ANTIC предоставляет 15 регистров чтения/записи, управляющих параметрами отображения игрового поля, DMA для графики игрока/ракеты, точной прокрутки, ввода световым пером и прерываний. Аппаратные регистры не возвращают записанные значения обратно при чтении. Эта проблема решается с помощью теневых регистров операционной системы, реализованных в обычной оперативной памяти в качестве мест для хранения последнего значения, записанного в регистры. Теневые регистры операционной системы копируются из ОЗУ в аппаратные регистры во время вертикального пробела. Таким образом, любые записи в аппаратные регистры, имеющие соответствующие теневые регистры, будут перезаписаны значениями теневых регистров во время следующего вертикального пробела.
Некоторые аппаратные регистры записи не имеют соответствующих теневых регистров. Они могут быть безопасно записаны приложением без перезаписи значения во время вертикального пробела. Если приложению необходимо знать последнее состояние регистра, то приложение обязано запомнить то, что оно записало.
Теневые регистры операционной системы также существуют для некоторых регистров чтения, где чтение значения непосредственно с оборудования на неизвестном этапе цикла отображения может возвращать противоречивые результаты.
Имя | Описание | Чтение/запись | Шестнадцатеричный адрес | Декабрьский адрес | Теневое имя | Теневой шестнадцатеричный адрес | Тень Dec Адрес |
---|---|---|---|---|---|---|---|
ДМАКТЛ | Прямой контроль доступа к памяти | Писать | 400 динаров | 54272 | СДМКТЛ | $022F | 559 |
ШАКТЛ | Управление персонажем | Писать | 401 динара | 54273 | ДИАГРАММА | $02F3 | 755 |
ДЛИСТЛ | Указатель списка отображения (младший байт) | Писать | $402 динара | 54274 | СДЛСТЛ | $0230 | 560 |
ДЛИСТ | Указатель списка отображения (старший байт) | Писать | $403 динара | 54275 | СДЛСТХ | $0231 | 561 |
HSCROL | Горизонтальная тонкая прокрутка | Писать | 404 доллара США | 54276 | |||
ВСКРОЛ | Вертикальная тонкая прокрутка | Писать | 405 динаров | 54277 | |||
PMBASE | Адрес игрока/ракетной базы | Писать | 407 динаров | 54279 | |||
ЧБАСЭ | Базовый адрес набора символов | Писать | 409 динаров | 54281 | ЧБАС | $02F4 | 756 |
ВСИНК | Ждите горизонтальной синхронизации | Писать | $40А | 54282 | |||
VCOUNT | Счетчик вертикальных линий | Читать | 40 миллиардов динаров | 54283 | |||
ПЕНЬ | Горизонтальное положение светового пера | Читать | $D40C | 54284 | ЛПЕНЬ | $0234 | 564 |
ПЭНВ | Световое перо в вертикальном положении | Читать | 40 динаров | 54285 | ЛПЕНВ | $0235 | 565 |
НМИЕН | Включение немаскируемого прерывания (NMI) | Писать | 40 динаров | 54286 | |||
НМИРЕС | Сброс немаскируемого прерывания (NMI) | Писать | 40 дирхамов | 54287 | |||
НМИСТ | Статус немаскируемого прерывания (NMI) | Читать | 40 дирхамов | 54287 |
В приведенных ниже списках отдельных реестров применяются следующие условные обозначения:
Битовое значение | Описание |
---|---|
0 | Бит должен быть 0 |
1 | Бит должен быть 1 |
? | Бит может быть равен 0 или 1 и используется для определенной цели. |
- | Бит не используется или не следует ожидать, что он будет иметь определенное значение. |
этикетка | Обратитесь к более позднему объяснению назначения бита. |
DMACTL $D400 Запись [ править ]
ТЕНЬ: SDMCTL $022F
Управление прямым доступом к памяти (DMA)
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
- | - | Список отображения DMA | Разрешение ракет игрока | Игрок DMA | Ракетный прямой доступ к памяти | Ширина игрового поля | Ширина игрового поля |
DMACTL управляет поведением DMA ANTIC для графики игрового поля и игрока-ракеты ( спрайта ).
Значения битов ширины игрового поля :
Биты ширины игрового поля [1:0] | Описание | Размер |
---|---|---|
0 0 = $00 | Отключить игровое поле | |
0 1 = $01 | Узкое игровое поле | 128 цветовых такт/256 пикселей высокого разрешения |
1 0 = $02 | Обычное игровое поле | 160 цветовых такт/320 пикселей высокого разрешения |
1 1 = $03 | Широкое игровое поле | 192 цветных тактовых сигнала/384 пикселя высокого разрешения |
Также см. бит DMA списка отображения относительно отображения игрового поля.
DMA игрока/ракеты Значения битов :
Биты DMA игрока/ракеты [3:2] | Описание |
---|---|
0 0 = $00 | Отключить игрок и ракету DMA |
0 1 = $04 | Включить ракетный прямой доступ к памяти |
1 0 = $08 | Включить DMA игрока |
1 1 = 0 долларов США | Включить DMA для игрока и ракеты |
Функция Player/Missile DMA ANTIC считывает байты из памяти и доставляет данные для обновления регистров графических шаблонов GRAFP0, GRAFP1, GRAFP2, GRAFP3 и GRAFM CTIA/GTIA , освобождая процессор от создания Player/Missile ( спрайтов графики ). Эти биты включают передачу ANTIC данных игрока и данных о ракетах в CTIA/GTIA. CTIA/GTIA также должна быть настроена на получение данных через регистр GRACTL , чтобы DMA игрока/ракеты функционировал должным образом.
Когда Player DMA включен, автоматически возникает Missile DMA, чтобы обеспечить согласованность синхронизации DMA, но данные не доставляются в регистр GRAFM Missile.
Когда эта функция включена, DMA Player/Missile происходит в каждой строке сканирования на видимом дисплее — от строки сканирования 8 до 247. Следовательно, данные Player/Missile в карте памяти (см. PMBASE ANTIC ) выше и ниже этих счетчиков строк сканирования не используются и не отображается.
Значения битов разрешения игрока/ракеты :
- $00 — разрешение двойной линии. ANTIC обновляет свой адрес выборки DMA каждую вторую строку сканирования и обновляет шаблон CTIA/GTIA Player/Missile Graphics в каждой строке сканирования, так что каждый байтовый шаблон Player/Missile имеет высоту в две строки сканирования. Когда включено двойное разрешение строк, CTIA/GTIA регистр VDELAY ($D01C hex /53276 dec ) работает путем маскировки обновлений на четных строках сканирования, что приводит к сдвигу битовой комбинации отдельных игроков и ракет вниз на одну строку сканирования.
- 10 долларов США — разрешение одной строки. Выборка DMA и обновление регистра игрока/ракеты происходят в каждой строке сканирования. CTIA/GTIA Регистр VDELAY ($D01C hex /53276 dec ), который маскирует обновления даже на строках сканирования, эффективно снижает разрешение одной строки до разрешения двойной строки.
Обновления регистров шаблонов ANTIC DMA и Player/Missile происходят в каждой строке сканирования независимо от разрешения. Когда действует разрешение двойной строки, память игрока/ракеты может быть изменена между избыточными выборками DMA, таким образом изменяя шаблон, отправляемый в регистры GRAF *, и создавая видимое разрешение игрока/ракеты в одну строку.
Значения битов DMA в списке отображения :
- $00 — отключить список отображения.
- $20 — Включить список отображения.
Для отображения игрового поля необходимо, чтобы был включен режим Display List DMA и указана ширина игрового поля. Если любое из значений равно нулю, отображение игрового поля не создается.
CHACTL $D401 Запись [ изменить ]
ТЕНЬ: КАРТИНА $02F3
Управление персонажем
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
- | - | - | - | - | Видео Отражение | Инверсное видео | Видео пустое |
CHACTL управляет отображением символов.
Значения битов управления символами выполняют следующие действия:
Особенность | Биты Значение | Описание |
---|---|---|
Видео пустое | $01 | Инвертированные видеосимволы отображаются в виде пробелов. |
Инверсное видео | $02 | Символы инвертированного видео отображаются как инвертированное видео. (по умолчанию) |
Видео Отражение | $04 | Все символы отображаются вертикально зеркально. |
Биты CHACTL Video Inverse и Video Blank влияют на отображение символов в текстовых режимах ANTIC 2 и 3, для которых установлен старший бит (символы от $80 до $FF). Переключение значений битов CHACTL позволяет мигать или гасить эти символы глобально для всего дисплея.
Совместное использование параметров «Инверсия видео» и «Пробел видео» приводит к тому, что символы обратного видео отображаются как инверсное пустое пространство. Биты Video Inverse и Video Blank работают в режимах ANTIC 2 и 3 и не влияют на другие текстовые режимы 4, 5, 6 и 7.
Бит Video Reflect влияет на все текстовые режимы. Video Reflect полезен в ситуациях, когда требуется зеркальное отображение без определения нового набора символов. Идеальное применение — карточные игры, в которых отображаются точные лица карт, показывающие перевернутые масти. Поскольку это вертикально отражает данные глифа перед его использованием, эффект выглядит непоследовательным для спусковых устройств ANTIC Mode 3 с байтами глифа 6 и 7, появляющимися в нижней части области нижнего колонтитула.
DLISTL/DLISTH $D402/$D403 Запись [ изменить ]
ТЕНЬ: SDLSTL/SDLSTH $0230/$0231
Отобразить указатель списка
Бит 15 | Бит 14 | Бит 13 | Бит 12 | Бит 11 | Бит 10 | Бит 9 | Бит 8 | Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
ANTIC начинает выполнение списка отображения , на который указывает 16-битный адрес в регистрах DLISTL/DLISTH (D402-D403 hex /54274-54275 dec ). Регистры адреса обновляются во время выполнения списка отображения с помощью JMP (переход) и JVB (переход и ожидание вертикального пробела) ANTIC. Адрес также обновляется процедурой вертикального пустого прерывания (VBI) операционной системы с использованием значений в теневых регистрах SDLSTL/SDLSTH (0230-0231 шестнадцатеричный /560-561 десятичный ).
Когда включено прерывание вертикального пробела ОС, прямые обновления регистров ANTIC DLIST процессором или инструкции перехода ANTIC будут перезаписаны ОС во время следующего вертикального пробела значениями в теневых регистрах. Таким образом, переворачивание страниц, реализованное с помощью списков отображения , которые указывают на следующий список отображения в серии, не будет работать должным образом, если не отключено прерывание вертикального пустого экрана.
HSCROL $D404 Запись [ править ]
Горизонтальная тонкая прокрутка
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
— | — | — | — | ? | ? | ? | ? |
Этот регистр определяет расстояние горизонтального сдвига тонкой прокрутки в цветных часах. Значимыми являются только младшие 4 бита. Диапазон значений из 16 цветовых сигналов позволяет ANTIC сдвигать текст в режиме 2 на четыре символа, а текст в режиме 6 на два символа, прежде чем потребуется грубая прокрутка.
Когда горизонтальная прокрутка включена для строки режима, ANTIC извлекает следующий шаг размера, превышающий текущую ширину экрана, чтобы предоставить буфер данных, подлежащих управлению горизонтальной прокруткой. При отображении узкой ширины ANTIC извлекает оперативную память экрана, необходимую для нормальной ширины. Аналогично, для нормальной ширины ANTIC извлекает оперативную память экрана, необходимую для широкой.
ANTIC буферизует первые несколько байтов, считанных из памяти экрана, которых достаточно для покрытия 16-цветного диапазона движения часов. (От двух до четырех байтов в зависимости от режима отображения.) Значение HSCROL определяет, сколько тактовых импульсов цвета должно быть выведено из буферизованных данных, начиная с последнего (самого правого) тактового сигнала последнего буферизованного байта и продвигаясь влево. Когда HSCROL равен 0, тактовые сигналы цвета не выводятся из буфера, поэтому первый отображаемый байт экрана — это первый байт после буферизованных данных. По мере увеличения HSCROL к левому краю дисплея добавляется больше тактовых импульсов цвета с конца (правой стороны) буферизованных данных, в результате чего сдвиг тонкой прокрутки перемещает содержимое экрана вправо.
В режиме ANTIC F (высокое разрешение, 1/2 пикселя цветовой синхронизации) можно прокручивать только два пикселя за раз, поскольку HSCROL определяет тактовую частоту цвета.
Режимы ANTIC, использующие альтернативные интерпретации цветов GTIA, должны прокручиваться на целый пиксель GTIA (два цветовых тактовых сигнала). Для обеспечения корректной прокрутки следует использовать только четные значения. Нечетные значения HSCROL переведут поток пикселей в другое состояние, которое GTIA будет интерпретировать как разные цвета.
В отличие от многих платформ, горизонтальная прокрутка Atari визуально единообразна и не содержит артефактов «стробирования» цвета, поскольку размер пикселей Atari соответствует синхронизации цветовой синхронизации, необходимой для точной цветопередачи.
VSCROL $D405 Запись [ править ]
Вертикальная тонкая прокрутка
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
— | — | — | — | ? | ? | ? | ? |
Этот регистр определяет расстояние тонкой вертикальной прокрутки в строках развертки. Младшие 4 бита имеют значение, однако значение вертикальной прокрутки должно находиться в диапазоне от 0 до высоты строки сканирования линии режима ANTIC - 1. Прокрутка дальше, чем количество строк сканирования в режиме ANTIC, приводит к появлению строк повторяющихся данных, нарушающих плавную непрерывность прокрутки (хотя , это также может быть использовано как уязвимое поведение).
Область вертикальной прокрутки определяется установкой бита VS ($20) в последовательной серии строк режима ANTIC в списке отображения . Первая строка режима без установленного бита VS становится концом области прокрутки и используется в качестве строки буфера для предоставления новой информации для прокрутки вверх в нижнюю часть области прокрутки.
Значение вертикальной прокрутки указывает номер строки сканирования, с которого начинается отображение в первой строке режима, а также используется в качестве номера строки сканирования для завершения отображения в последней строке режима (строка без установленного бита VS).
Пример: Учитывая режим ANTIC с восемью строками сканирования (текстовые режимы 2, 4 или 6) с битом VS, установленным в двух соседних строках режима, область прокрутки состоит из трех строк режима: третья строка в области прокрутки является первым режимом. обнаружена строка без установленного бита VS. Если вертикальная прокрутка не установлена в списке отображения, три строки режима естественным образом приведут к отображению 24 строк сканирования. Когда биты VS установлены в инструкциях режима списка отображения , как описано, а значение VSCROL установлено на 2, тогда первая строка режима в регионе начинает отображаться в строке сканирования 2, показывая строки сканирования со 2 по 7 (шесть строк сканирования или 8 - VSCROL ), вторая строка режима отображается полностью (восемь строк сканирования), а последняя строка режима заканчивается на строке сканирования 2, показывая строки сканирования от 0 до 2 (три строки сканирования или VSCROL + 1). Общее количество строк сканирования, отображаемых в области прокрутки, составляет 6 + 8 + 3 = 17 строк сканирования.
Поскольку точная прокрутка основана на линиях сканирования, а не на высоте пикселей, а перемещение области прокрутки осуществляется простым пропуском строк сканирования из первой строки режима и добавлением строк сканирования в последнюю строку режима, можно использовать различные графические режимы внутри области прокрутки. . Это просто требует дополнительной осторожности при определении того, сколько строк развертки можно сдвинуть для текущей первой и последней строк режима в области прокрутки.
Строки пустого режима не могут содержаться в области прокрутки, поскольку инструкции строки пустого режима по своей сути не имеют бита модификатора вертикальной прокрутки. (Инструкции пустого режима определяют количество пустых строк с помощью битов с 7 по 5, которые действуют как модификаторы LMS, HS и VS для «обычных» инструкций режима игрового поля.) Однако инструкция пустого режима может использоваться для завершения области прокрутки и по-прежнему зависит от ожидаемых изменений высоты строки сканирования в зависимости от значения вертикальной прокрутки.
PMBASE $D407 Запись [ править ]
Адрес ракетной базы игрока
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Это указывает страницу базового адреса для графики игрока/ракеты. При работе графики P/M с разрешением двойной строки значение PMBASE должно начинаться с границы 1 КБ. При работе графики P/M с однострочным разрешением значение PMBASE должно начинаться с границы 2K.
CHBASE $D409 Запись [ править ]
ТЕНЬ: CHBAS $02F4
Базовый адрес персонажа
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Это указывает страницу базового адреса для набора символов. Режимы ANTIC 2, 3, 4 и 5 используют 128 символов в наборе символов и требуют, чтобы значение CHBASE начиналось с границы 1 КБ. Режимы ANTIC 6 и 7 используют 64 символа, поэтому значение CHBASE должно начинаться с границы 512 байт.
Обычное значение по умолчанию — $E0 hex /224 dec для набора символов в ПЗУ по адресу $E000 hex /57344 dec .
WSYNC $D40A Запись [ править ]
Подождите горизонтальной синхронизации
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Этот регистр позволяет программам синхронизироваться с дисплеем. Запись в этот регистр останавливает программу 6502 до конца текущей строки сканирования. Такое поведение обычно используется во время прерываний списка отображения для создания четких переходов/изменений от одной строки развертки к другой. Написанное значение не имеет значения.
VCOUNT $D40B Чтение [ править ]
Счетчик вертикальных линий
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Этот регистр отслеживает строку сканирования, генерируемую в данный момент. Возвращаемое значение представляет собой фактическую строку сканирования, разделенную на 2. Пустые строки, созданные в начале отображения, включены. Значение NTSC будет находиться в диапазоне от 0 до 130 для NTSC и от 0 до 155 для PAL. Это значение полезно во время прерываний списка отображения для определения вертикального положения экрана.
PENH $D40C Читать [ править ]
ТЕНЬ: ЛПЕНЬ $0234
Горизонтальное положение светового пера
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Здесь указывается положение цветных часов по горизонтали при нажатии курка светового пера/светового пистолета. Теневой регистр является рекомендуемым источником для чтения этой информации, поскольку он будет обновляться во время вертикального пробела, гарантируя последовательные и надежные результаты. Программам следует избегать прямого чтения аппаратного регистра, если только программа не уверена, что регистр считывается в тот момент, когда значение является действительным. Световые пистолеты для Atari функционируют так же, как световые ручки, с добавлением оптической лупы, позволяющей читать экран с большего расстояния. Для устройства ввода светового пера/светового пистолета требуется обычная ЭЛТ, использующая сканирующий электронный луч. Световая ручка/световой пистолет не может работать с современными ЖК-телевизорами и мониторами.
PENV $D40D Читать [ править ]
ТЕНЬ: LPENV $0235
Световое перо в вертикальном положении
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Он содержит значение VCOUNT, полученное при нажатии курка светового пера/светового пистолета. Теневой регистр является рекомендуемым источником для чтения этой информации, поскольку он будет обновляться во время вертикального пробела, гарантируя последовательные и надежные результаты. Программам следует избегать прямого чтения аппаратного регистра, если только программа не уверена, что регистр считывается в тот момент, когда значение является действительным. Световые пистолеты для Atari функционируют так же, как световые ручки, с добавлением оптической лупы, позволяющей читать экран с большего расстояния. Для устройства ввода светового пера/светового пистолета требуется обычная ЭЛТ, использующая сканирующий электронный луч. Световая ручка/световой пистолет не может работать с современными ЖК-телевизорами и мониторами.
NMIEN $D40E Запись [ править ]
Включение немаскируемого прерывания (NMI)
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
ДЛИ | ВБИ | ПЕРЕЗАГРУЗИТЬ | - | - | - | - | - |
NMIEN включает немаскируемые прерывания. Значения битов:
Особенность | Биты Значение | Описание |
---|---|---|
Перезагрузить | $20 | Включить прерывание клавиши сброса |
ВБИ | $40 | Включить вертикальное пустое прерывание |
ДЛИ | $80 | Включить прерывание списка отображения |
Операционная система устанавливает для NMIEN значение по умолчанию — 40 долларов в шестнадцатеричном /64 десятичном формате во время процедур включения питания. Подпрограммы обслуживания NMI сначала векторируют через $FFFA hex /65530 dec , который определяет причину, а затем передает управление подпрограмме обслуживания прерываний.
ДЕЛАТЬ:
Если бит DLI NMIEN установлен, когда ANTIC встречает инструкцию списка отображения с установленным битом модификатора DLI, то ANTIC запускает DLI в последней строке сканирования этой строки режима инструкций списка отображения.
Операционная система не использует DLI, поэтому адрес по умолчанию для вектора DLI (VDSLST, $0200 hex /512 dec ) указывает на инструкцию RTI в ПЗУ. Приложение, использующее DLI, должно изменить VDSLST, чтобы он указывал на нужную процедуру DLI, прежде чем включать DLI.
Содержимое аккумулятора 6502, регистров X и Y не сохраняется до входа в процедуру DLI. В обязанности процедуры DLI входит сохранение состояния регистров, которые будут использоваться во время процедуры DLI, а затем последним действием является восстановление исходных значений регистров перед выходом с помощью инструкции RTI. Подпрограммы обычно помещают значения регистров в стек 6502.
Если используется несколько DLI, первое прерывание обновляет VDSLST, чтобы указать адрес следующего прерывания, и так далее для последующих прерываний. Последняя процедура прерывания списка отображения на экране указывает VDSLST обратно на адрес первого прерывания списка отображения. В качестве альтернативы можно использовать процедуру вертикального пустого прерывания для сброса адреса VDSLST, чтобы гарантировать синхронизацию DLI с экраном.
ВБИ:
Когда бит VBI NMIEN установлен, ANTIC сигнализирует прерывание по вертикальному пробелу в конце обработки JVB (переход по вертикальному пробелу) в конце списка отображения . Операционная система использует вертикальный пробел для выполнения различных служебных задач (среди прочего - обновления таймеров, копирования входных значений контроллера в их теневые регистры и копирования содержимого теневых регистров в аппаратные регистры пользовательских чипов).
ОС переходит через VVBLKI ($0222 шестнадцатеричный /546 десятичный ), чтобы начать процедуру обслуживания VBI ОС, а процедура OS VBI завершается переходом через VVBLKD ($0224 шестнадцатеричный /548 десятичный ). По умолчанию VVBLKI указывает на вектор перехода ОС SYSVBV ($E45F hex /58463 dec ), чтобы начать вертикальное пустое прерывание, а VVBLKD указывает на вектор перехода OS XITVBV ($E462 hex /58466 dec ).
Пользовательские программы могут вставлять выполнение пользовательского кода либо до (немедленно), либо после (отложенно) процедур вертикального пустого прерывания операционной системы. Поскольку прерывание ОС по вертикальному пробелу может быть вызвано, когда пользовательская программа обновляет векторы, операционная система предоставляет подпрограмму SETVBV ($E45C hex /58460 dec ), которая безопасно обновляет векторы VVBLKI или VVBLKD, чтобы указать на новую подпрограмму. :
- Чтобы установить новую цель перехода для VVBLKI (немедленно), установите в регистре Y младший байт целевого адреса, в регистре X — старший байт целевого адреса, а в аккумуляторе — 6, затем JSR SETVBV. Пользовательский код, вызываемый через VVBLKI, просто должен выйти, перейдя к вертикальному пробелу ОС с помощью JMP SYSVBV ($E45F hex /58463 dec ).
- Чтобы установить новую цель перехода для VVBLKD (отложенный), установите в регистре Y младший байт целевого адреса, в регистре X — старший байт целевого адреса, а в аккумуляторе — 7, затем JSR SETVBV. Код пользователя вызываемый через VVBLKD, должен выйти, перейдя к подпрограмме выхода OS «Vertical Blank» с помощью JMP XITVBV ($E462 hex /58466 dec ).
Когда флаг CRITIC ($42 hex /66 dec ) ненулевой, выполнение прерывания отложенного вертикального пробела подавляется независимо от адресов в векторах. Значение по умолчанию CRITIC, 0, позволяет выполнять как немедленные, так и отложенные вертикальные пустые прерывания.
NMIRES $D40F Запись [ править ]
Сброс немаскируемого прерывания (NMI)
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Любое значение, записанное в NMIRES, сбрасывает биты в NMIST, которые указывают причину последнего немаскируемого прерывания. Это используется кодом диспетчеризации прерываний в операционной системе, и обычно у пользовательской программы нет смысла писать здесь.
NMIST $D40F Чтение [ править ]
Статус немаскируемого прерывания (NMI)
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
ДЛИ | ВБИ | ПЕРЕЗАГРУЗИТЬ | - | - | - | - | - |
Подпрограмма диспетчеризации немаскируемых прерываний операционной системы считывает этот регистр, чтобы определить причину прерывания и определить, какую служебную процедуру следует выполнить.
Значения битов:
- $20 — Сброс прерывания по клавише
- $40 — вертикальное пустое прерывание
- $80 — Прерывание списка отображения
Список отображения [ править ]
Список отображения — это список инструкций, указывающих ANTIC, как генерировать отображение. Данные, обрабатываемые этой «программой» списка отображения, представляют собой память экрана. Результатом является графический дисплей. Виды графики на выходе (текст или адресуемые пиксели) определяются инструкциями в списке отображения.
Список отображения и данные дисплея записываются в ОЗУ процессором. ANTIC считывает инструкции списка дисплея, экранную память и информацию о наборе символов из ОЗУ, используя метод, известный как прямой доступ к памяти (DMA) . Работа программы на машинном языке BASIC или 6502 заключается в инициализации дисплея — настройке инструкций списка дисплея, организации памяти экрана (и набора символов, если применимо), а затем указании ANTIC запустить дисплей. После этого ANTIC автоматически позаботится о создании изображения на экране. Это позволяет 8-битным компьютерам Atari создавать сложные смешанные дисплеи без прямого вмешательства ЦП. Другие платформы, даже разработанные значительно позже, не могут ни смешивать графические режимы на одном дисплее, ни делать это без сложных прерываний процессора.
ANTIC обрабатывает инструкции в списке отображения, считывает экранную память (и данные набора символов, если применимо), преобразует эту информацию в поток графических данных в реальном времени и отправляет этот поток данных в чип CTIA/GTIA , который применяет цвет. графическим пикселям и выводит видео. Вместе эти два чипа обеспечивают 6 текстовых и 8 графических режимов (всего 14). Более продвинутая версия GTIA добавляет три альтернативные интерпретации цвета для каждого графического режима ANTIC, обеспечивая в общей сложности 56 (14×4) графических режима. Однако только графические режимы ANTIC, основанные на полуцветных тактовых пикселях, способны выразить полную цветовую палитру, обеспечиваемую новыми интерпретациями цвета, и из этих режимов удобными для использования являются режимы ANTIC 2 (текстовый режим графики ОС 0) и Режим ANTIC F (графический режим ОС 8). Таким образом, разумное количество уникальных графических режимов, доступных с использованием аппаратных возможностей ANTIC + CTIA/GTIA, составляет 20–14 режимов ANTIC + по 3 дополнительные цветовые интерпретации для режимов ANTIC 2 и F.
Обзор инструкций списка отображения [ редактировать ]
Дисплей Atari построен как серия инструкций ANTIC, каждая из которых описывает строку текста или графического режима постепенно сверху вниз по экрану, пока желаемая область отображения не будет заполнена. По сути, экран представляет собой вертикальную стопку инструкций режима ANTIC. Разные режимы занимают разное количество строк развертки и используют разный объем оперативной памяти. Проектирование дисплея требует подсчета строк сканирования каждой инструкции режима и отслеживания памяти для каждой строки режима, чтобы предотвратить превышение ограничений ANTIC или видеостандарта. (См. раздел «Ограничения» ).
Смешивание нескольких графических режимов на одном дисплее осуществляется просто путем предоставления различных инструкций режима символов или карты для желаемой позиции на экране. Например, графические режимы операционной системы Atari с 1 по 8 предлагают полноэкранное отображение или опцию четырехстрочного текстового окна в нижней части экрана. Эта функция разделения экрана реализуется с использованием встроенных возможностей ANTIC и его списка отображения без каких-либо прерываний процессора или пользовательских манипуляций с видеооборудованием.
ANTIC имеет четыре типа инструкций:
- Пустая строка — 8 инструкций для отображения от 1 до 8 горизонтальных пустых строк.
- Инструкции перехода - 2 вида инструкций перехода, которые перезагружают счетчик программ ANTIC (3-байтовые инструкции).
- Символьный режим — 6 инструкций для отображения символьных данных
- Режим карты — 8 инструкций для отображения цветных пикселей
Инструкции режима карты и символа имеют дополнительные модификаторы, которые можно включить с помощью инструкции:
- Горизонтальная прокрутка — включает тонкую горизонтальную прокрутку.
- Вертикальная прокрутка — включает тонкую вертикальную прокрутку.
- Загрузить сканирование памяти (LMS) — устанавливает начальный адрес графических/символьных данных (3-байтовая инструкция).
- DLI — Прерывание списка отображения (называемое « растровым прерыванием » или « Горизонтальным пустым прерыванием » в других системах)
Выполнение инструкций [ править ]
ANTIC начинает выполнять список отображения, на который указывает 16-битный адрес в регистрах DLISTL/DLISTH ($D402-$D403 hex /54274-54275 dec ). Регистры адреса автоматически увеличиваются ANTIC при выполнении каждой инструкции. ANTIC может обновлять только младшие 10 бит адреса во время автоматического приращения, ограничивая начало и конец списка отображения диапазоном адресов 1 КБ.
Регистры также обновляются во время выполнения списка отображения с помощью JMP (переход) и JVB (переход и ожидание вертикального пробела) ANTIC. Эти инструкции загружают полные 16 бит адреса, поэтому их можно использовать для обхода ограничения списка отображения в 1 КБ.
Адрес также обновляется процедурой вертикального пустого прерывания (VBI) операционной системы с использованием значений из теневых регистров операционной системы SDLSTL/SDLSTH ($0230-$0231 шестнадцатеричный /560-561 десятичный ). Когда процедура VBI ОС включена, прямые обновления регистров ANTIC DLIST процессором или инструкции перехода ANTIC будут перезаписаны ОС во время следующего вертикального пробела. Поскольку обработка VBI является обычным состоянием системы, большинство программ полагаются на это и обновляют только теневые регистры ОС (SDLSTL/SDLSTH $0230-$0231 hex /560-561 dec ) для установки списка отображения.
Байты инструкций [ править ]
Эта легенда применима к приведенным ниже диаграммам командных битов:
Битовое значение | Описание |
---|---|
0 | Бит должен быть 0 |
1 | Бит должен быть 1 |
? | Бит может быть равен 0 или 1 и используется для определенной цели. |
— | Бит не используется или не следует ожидать, что он будет иметь определенное значение. |
этикетка | Обратитесь к более позднему объяснению назначения бита. |
Биты инструкций:
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
ДЛИ | система управления обучением | ПРОТИВ | HS | Режим | Режим | Режим | Режим |
Биты 7:4 являются модификаторами инструкций режима игрового поля в битах 3:0. Значение бита 1 включает модификатор, а 0 отключает модификатор.
- Бит 3: Бит 0 — инструкция режима игрового поля.
- Ценности 00 долларов и $01 — это специальные инструкции.
- Значения режима $02 до $0F определяет режимы персонажа и карты игрового поля.
- Бит 4 - 10 долларов — Горизонтальная прокрутка.
- Бит 5 - 20 долларов — Вертикальная прокрутка.
- Бит 6 - 40 долларов — загрузка сканирования памяти.
- Бит 7 - $80 — Прерывание списка отображения.
Инструкция режима 0 — пустые строки [ править ]
ДЛИ | Линии | Линии | Линии | Режим | Режим | Режим | Режим |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | 0 | 0 | 0 | 0 |
Когда все биты режима равны нулю, ANTIC не выполняет DMA игрового поля и отображает одну или несколько пустых строк сканирования фонового цвета. Для обычных режимов интерпретации цвета «фоном» является регистр цвета COLBK (D01A hex /53274 dec ) OS Shadow COLOR4 (02C8 hex /712 dec ), хотя для режимов интерпретации цвета GTIA это отличается. Для получения дополнительной информации см. обсуждение COLBK на странице GTIA .
Количество пустых строк сканирования определяется значениями битов с 4 по 6, допуская диапазон от 0 до 7. ANTIC добавляет единицу к этому значению и отображает полученное количество строк сканирования. Значения инструкции:
АНТИК Инструкция | Сканировать линии |
---|---|
00 шестнадцатеричный /0 декабрь | 1 пустая строка сканирования. |
10 гекс /16 декабрь | 2 пустые строки сканирования. |
20 гекс /32 декабрь | 3 пустые строки сканирования. |
30 гекс /48 декабрь | 4 пустые строки сканирования. |
40 гекс. /64 дес. | 5 пустых строк сканирования. |
50 гекс. /80 дес. | 6 пустых строк сканирования. |
60 гекс. /96 дес. | 7 пустых строк сканирования. |
70 гекс. /112 дес. | 8 пустых строк сканирования. |
Пустые строки полезны для задержки начала отображения экрана до тех пор, пока электронный луч не покинет вертикальную область развертки в верхней части дисплея. Для этой цели операционная система Atari создает все свои графические режимы, начиная с трех размером 70 шестнадцатеричных /112 десятичных инструкций (или 24 пустых строк сканирования). Пустые строки также полезны для разделения частей пользовательского отображения с различными целями (например, границы между отображением состояния и основной графикой).
Строки пустого режима не могут содержаться в области прокрутки, поскольку инструкции строки пустого режима по своей сути не имеют битов модификатора тонкой прокрутки. Однако команда пустого режима может использоваться для завершения области вертикальной прокрутки и при этом по-прежнему зависит от ожидаемых изменений высоты строки развертки в зависимости от значения вертикальной прокрутки.
Бит-модификатор DLI доступен для инструкций с пустой строкой. Когда бит DLI включен, прерывание списка отображения будет вызвано во время последней пустой строки сканирования команды. Поскольку DMA игрового поля не происходит во время пустых строк (происходит только DMA списка отображения и DMA игрока/ракеты (если включено)), пустые строки могут использоваться там, где графика игрового поля не требуется, давая больше времени для подпрограмм прерывания списка отображения, изменяющих регистры цвета или Позиции игрока/ракеты.
Инструкция режима 1 — прыжок [ править ]
ДЛИ | система управления обучением | ПРОТИВ | HS | Режим | Режим | Режим | Режим |
---|---|---|---|---|---|---|---|
0 | ? | 0 | 0 | 0 | 0 | 0 | 1 |
Когда значение режима равно 1, ANTIC выполняет переход в своей программе (список отображения). Следующие два байта списка отображения загружаются в регистры ANTIC DLISTL/DLISTH ($D402-$D403 hex /54274-54275 dec ), изменяя точку выполнения следующей инструкции.
Существует два вида прыжков:
- 01 шестнадцатеричное /1 десятичное JMP — переход по адресу. Это используется для загрузки нового адреса выполнения в середине выполнения списка отображения, обычно когда список отображения должен пересечь границу в 1 КБ.
- 41 шестнадцатеричный /65 десятичный JVB — перейти к адресу и дождаться вертикального пробела. (Установлен бит JMP + LMS) Используется для завершения списка отображения. Используемый адрес должен быть начальным адресом списка отображения.
Регистры DLIST также обновляются процедурой вертикального пустого прерывания (VBI) операционной системы с использованием значений в теневых регистрах SDLSTL/SDLSTH (0230-0231 hex /560-561 dec ). Когда процедура VBI ОС включена, прямые обновления регистров ANTIC DLIST процессором или инструкции перехода ANTIC будут перезаписаны ОС во время следующего вертикального пробела. Это означает, что инструкция ANTIC JVB (перейти и дождаться вертикального пробела), указывающая неверный адрес (или действительный адрес, отличающийся от теневого значения SDLST), не оказывает реального влияния на отображение.
Аргумент JVB обычно указывает на начало того же списка отображения, но он также может указывать на другой список отображения, так что цепочка списков отображения выполняется после последовательных вертикальных пробелов. Конечно, чтобы дать ANTIC контроль над началом следующего списка отображения, необходимо отключить прерывание ОС по вертикальному пробелу, чтобы предотвратить перезапись аппаратных регистров ANTIC значениями теневого регистра.
Инструкции для режимов 2–F — режимы персонажей игрового поля и карты [ править ]
ДЛИ | система управления обучением | ПРОТИВ | HS | Режим | Режим | Режим | Режим |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Ниже приводится список инструкций графического режима ANTIC. Более подробное описание каждого режима см. в разделе «Режимы графики игрового поля» .
АНТИК Инструкция | Тип режима | Байтов на строку режима (узкая/нормальная/широкая) | Количество строк ТВ-развертки на строку режима | Цвет |
---|---|---|---|---|
2 | Характер | 32/40/48 | 8 | 1.5 |
3 | Характер | 32/40/48 | 10 | 1.5 |
4 | Характер | 32/40/48 | 8 | 5 (многоцветный) |
5 | Характер | 32/40/48 | 16 | 5 (многоцветный) |
6 | Характер | 16/20/24 | 8 | 5 (одноцветный) |
7 | Характер | 16/20/24 | 16 | 5 (одноцветный) |
8 | Карта | 8/10/12 | 8 | 4 |
9 | Карта | 8/10/12 | 4 | 2 |
А | Карта | 16/20/24 | 4 | 4 |
Б | Карта | 16/20/24 | 2 | 2 |
С | Карта | 16/20/24 | 1 | 2 |
Д | Карта | 32/40/48 | 2 | 4 |
И | Карта | 32/40/48 | 1 | 4 |
Ф | Карта | 32/40/48 | 1 | 1.5 |
Требуемая память для строки режима определяется двумя факторами:
- Биты ширины установлены в аппаратном регистре DMACTL .
- Наличие модификатора инструкций по отображению списка горизонтальной тонкой прокрутки .
Модификатор горизонтальной тонкой прокрутки изменит требования к памяти для текущей строки режима с ширины, указанной DMACTL, на следующее по величине значение.
Модификаторы инструкций [ править ]
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
ДЛИ | система управления обучением | ПРОТИВ | HS | ? | ? | ? | ? |
Биты 7:4 являются модификаторами инструкций режима игрового поля в битах 3:0. Значения инструкций режима игрового поля варьируются от $02 до $0F. Значение бита модификатора 1 включает модификатор, а 0 отключает модификатор.
- Бит 4 — 10 шестнадцатеричных долларов /16 десятичных, горизонтальная прокрутка.
- Бит 5 — $20 шестнадцатеричный /32 десятичный . Вертикальная прокрутка.
- Бит 6 — $40 шестнадцатеричный /64 десятичный . Загрузить сканирование памяти.
- Бит 7 — $80 шестнадцатеричный /128 десятичный . Прерывание списка отображения.
HS Modifer — горизонтальная тонкая прокрутка
Бит4: значение позиции $10, управляет горизонтальной прокруткой режима игрового поля.
Когда включена горизонтальная прокрутка, ANTIC извлекает больше байтов памяти экрана, чем отображается, чтобы отображать частично прокручиваемые байты дисплея в начале и конце строки. Если дисплей находится в узком режиме, ANTIC извлекает количество байтов экрана, необходимое для нормального режима. Если дисплей находится в обычном режиме, ANTIC извлекает количество байтов, необходимое для широкоэкранного режима. В широкоэкранном режиме ANTIC не извлекает никаких дополнительных байтов экрана. Прокрутка в широкоэкранном режиме приведет к смещению пустых данных в прокручиваемую область. Это не проблема, поскольку это происходит в области за пределами сканирования, которая не видна на обычном дисплее NTSC/PAL.
VS Modifer — вертикальная тонкая прокрутка [ править ]
Бит5: значение позиции $20, управляет вертикальной прокруткой режима игрового поля.
Область вертикальной прокрутки на дисплее определяется установкой бита VS ($20) в последовательной серии строк режима ANTIC в списке отображения. Первая строка режима без установленного бита VS становится концом области прокрутки и используется в качестве строки буфера для предоставления новой информации для прокрутки вверх в нижнюю часть области прокрутки.
LMS Modifer — Загрузить сканирование памяти [ править ]
Бит6: значение позиции $40, загружает новый адрес начала экранной памяти для текущей строки режима игрового поля.
Опция LMS загружает адрес сканирования памяти экрана ANTIC с 16-битным значением в двух байтах, следующих за инструкцией. В указанном режиме «Символ» или «Карта» начнут отображаться байты с этого адреса. Опция LMS должна появиться в первой строке инструкций режима игрового поля (не в пустой строке) в списке отображения, чтобы инициализировать ANTIC и начать чтение с начала экранной памяти. присутствует только один модификатор LMS В большинстве полноэкранных режимов, генерируемых операционной системой, в списке отображения . ANTIC автоматически увеличивает свой адрес LMS в конце каждой строки режима при подготовке к следующей строке. Пока экранная память не пересекает границу 4K, модификатор LMS не требуется в последующих инструкциях режима игрового поля.
Полноэкранные отображения с использованием режимов карты игрового поля E или F будут иметь второе появление модификатора LMS в инструкции карты ближе к середине экрана, поскольку для полного отображения требуется более 4 КБ экранной памяти. (Дисплеи режима F включают линии высокого разрешения 320 пикселей и режимы отображения GTIA.)
Комбинирование инструкций режима карты и символов с битом LMS позволяет свободно устанавливать адрес экранной памяти в пределах адресного пространства 64 КБ независимо для каждой строки дисплея . Другими словами, память экрана не обязательно должна представлять собой полностью непрерывную память, сканируемую последовательно в направлении более высоких адресов – только одна строка режима должна быть обеспечена достаточным количеством последовательных байтов памяти, чтобы соответствовать требованиям этого режима, ширине дисплея и Функция прокрутки.
Модификатор DLI — Прерывание списка отображения [ править ]
Бит7: значение позиции $80 предписывает ANTIC вызвать прерывание, обслуживаемое ЦП, в последней строке сканирования в режиме игрового поля .
Если ANTIC зарегистрирует NMIEN ( D40E шестнадцатеричный /54286 десятичный ) имеет бит7 ( $80 ), то в последней строке сканирования строки режима будет запущена программа прерывания, векторизация которой осуществляется через адрес VDSLST (200 шестнадцатеричный /512 десятичный ).
Содержимое аккумулятора 6502, регистров X и Y не сохраняется до входа в процедуру DLI. В обязанности процедуры DLI входит сохранение состояния регистров, используемых во время DLI, а затем восстановление исходных значений регистров перед выходом с помощью инструкции RTI. Подпрограммы обычно помещают значения регистров в стек 6502.
Процедуры DLI обычно короткие и быстрые, перед выходом изменяются регистры цвета или позиции игрока-ракеты. Однако краткость не требуется. Пока процедура DLI завершается до начала следующей процедуры DLI, процедура DLI может продолжать обновлять значения по нескольким строкам сканирования.
Режимы графики игрового поля [ править ]
Чип ANTIC позволяет использовать различные режимы и ширину игрового поля. Однако исходная операционная система Atari, поставляемая с компьютерами Atari 800/400, обеспечивает легкий доступ к ограниченному подмножеству этих графических режимов. Режимы ANTIC Playfield доступны пользователям через Atari BASIC с помощью команды «GRAPHICS», а также с некоторыми другими языками с помощью аналогичных системных вызовов. Как ни странно, режимы, не поддерживаемые напрямую исходной ОС и BASIC, наиболее полезны для игр. В более поздней версии ОС, используемой на 8-битных компьютерах Atari XL/XE, добавлена поддержка большинства этих «отсутствующих» графических режимов.
Чип ANTIC использует список отображения и другие настройки для создания этих режимов. Любой графический режим в цветовой интерпретации GTIA по умолчанию можно свободно смешивать без вмешательства ЦП, изменяя инструкции в списке отображения .
Геометрия экрана ANTIC не фиксирована. Аппаратный регистр может указывать ANTIC на отображение узкого игрового поля (128 цветовых такт/ширина 256 пикселей высокого разрешения), игрового поля нормальной ширины (160 цветовых такт/ширина 320 пикселей высокого разрешения) и широкого игрового поля с расширенной разверткой (192 цветовых такт/384 пикселей). высокое разрешение пикселей в ширину). Хотя высота операционной системы по умолчанию для графических режимов составляет 192 строки развертки, Antic может отображать вертикальную развертку высотой до 240 строк ТВ-развертки, создавая собственный список отображения .
Режим F воспроизводит цвета за счет артефактов NTSC и работает аналогично графическим режимам Apple II . Разрешение пикселей составляет 320 по горизонтали, но цветовое разрешение вдвое меньше, поэтому каждая группа из двух пикселей «сливается» вместе, образуя один цвет, и таким образом можно сгенерировать четыре цвета артефакта. Они будут окрашены, если для цвета переднего плана и фона установлено значение, отличное от черного/белого/серого. Точные цвета, получаемые таким способом, различаются в зависимости от 8-битных моделей Atari, а также между чипами CTIA и GTIA, поэтому нежелательные цветовые искажения могут возникнуть в результате запуска программного обеспечения, использующего режим F, на машине, отличной от той, для которой оно было разработано. Не удалось получить артефактную окраску на машинах PAL, и режим F на них будет монохромным.
Режим F не получил широкого распространения в программном обеспечении из-за высоких требований к памяти (8 КБ) и непоследовательных цветов артефактов, которые не были одинаковыми на каждой модели 8-битного компьютера Atari. Игры, в которых он используется, включают графические приключения Sierra, такие как Troll's Tale and Wizard and the Princess , Lode Runner и Ultima серия .
Система отображения видео была разработана с тщательным учетом методов и ограничений отображения NTSC. Тактовая частота процессора системы и видеооборудование синхронизированы с половиной тактовой частоты NTSC. Следовательно, вывод пикселей во всех режимах отображения основан на размере цветовой синхронизации NTSC, что представляет собой минимальное время, необходимое для обеспечения правильного и последовательного цвета независимо от горизонтального положения пикселя на экране. Результатом является точный размер пикселей и цветопередача, без дефектов «стробирования» цвета при горизонтальной прокрутке. (Цветовое стробирование — это неприглядное изменение оттенка пикселей в зависимости от горизонтального положения, которое возникает, когда изменения сигнала не совпадают с тактовой частотой цвета и поэтому не дают аппаратному обеспечению телевизора/монитора достаточного времени для достижения правильного цвета.)
Режимы персонажей [ править ]
Античный текстовый режим | Режим ОС | Символов (или байтов) на строку режима (узкая/нормальная/широкая) | Количество строк ТВ-развертки на строку режима | Цвета | Цвета на символьную матрицу | Символы в шрифте | Размер матрицы в пикселях (цветовые часы x строки развертки) | Битов на пиксель матрицы | Матричная карта (цветные часы x линии сканирования) | Матричная карта (пиксели x пиксели) | Примечания |
---|---|---|---|---|---|---|---|---|---|---|---|
2 | 0 | 32/40/48 | 8 | 1.5 | 1 | 128 | 1/2 х 1 | 1 | 4 х 8 | 8 х 8 | Пиксели высокого разрешения. Когда установлен старший бит символа (значения от $80 до $FF), символьные данные отображаются в соответствии с настройкой CHACTL. |
3 | Н/Д | 32/40/48 | 10 | 1.5 | 1 | 128 | 1/2 х 1 | 1 | 4 х 8/10 | 8 х 8 | Пиксели высокого разрешения. Символы нижнего регистра отображаются на две строки развертки ниже, что позволяет использовать нижние элементы. |
4 | 12 (XLOS) | 32/40/48 | 8 | 5 | 4 | 128 | 1 х 1 | 2 | 4 х 8 | 4 х 8 | Два бита на пиксель позволяют использовать 4 цвета внутри одной символьной матрицы. Когда установлен старший бит символа, пятый цвет заменяет один из четырех других. |
5 | 13 (XL ОС) | 32/40/48 | 16 | 5 | 4 | 128 | 1 х 2 | 2 | 4 х 16 | 4 х 8 | Цвет такой же, как и в Antic Mode 4. Персонажи в два раза выше. |
6 | 1 | 16/20/24 | 8 | 5 | 1 | 64 | 1 х 1 | 1 | 8 х 8 | 8 х 8 | Один цвет на матрицу символов. Символы в каждом блоке из 64 символов показаны разным цветом. Когда установлен старший бит символа, пятый цвет заменяет один из четырех других. |
7 | 2 | 16/20/24 | 16 | 5 | 1 | 64 | 1 х 2 | 1 | 8 х 16 | 8 х 8 | Цвет такой же, как в Antic Mode 6. Персонажи в два раза выше. |
Рендеринг глифов [ править ]
Все наборы символов используют 8 последовательных байтов для представления символа. Доступны четыре типа рендеринга символов/глифов этих байтов. Каждый режим символов связан с определенным методом рендеринга:
- Стандарт: Режим ANTIC 2. В зависимости от графических режимов высокого разрешения каждый бит символьного глифа представляет один пиксель на экране шириной в 1/2 цветовой частоты. Цвет фона COLPF2, а не COLBK, используемый в других режимах символов и карт. COLBK отображается как граница вокруг всех четырех сторон игрового поля. Биты значения 0 в символе символа показывают цвет фона. Биты значения 1 показывают значение яркости от COLPF1 на основе цвета фона (COLPF2). Набор символов использует 128 символов и требует 1024 байта ОЗУ.
- Спусковые устройства: ANTIC Mode 3. Модификация Стандартного метода. Метод отображения цвета пикселей тот же. Каждая строка режима имеет высоту 10 строк развертки, хотя размер символа по-прежнему составляет 8 байт. Персонажи 00 шестнадцатеричный /0 десятичный до отображение 5F Шестнадцатеричное /95 десятичное в верхних 8 строках сканирования с добавлением двух пустых строк сканирования внизу. Персонажи 60 гекс. /96 дес . 7F hex /127 dec начинаются с двух пустых строк сканирования вверху, а затем отображаются байты глифа в нижних 8 строках сканирования. Первые два байта глифа перемещаются в две нижние строки сканирования. Это позволяет правильно разработанному набору символов отображать настоящие нижние элементы. Набор символов использует 128 символов и требует 1024 байта ОЗУ.
- Один цвет: режимы 6 и 7 ANTIC. В этих режимах каждый бит символьного глифа представляет один пиксель шириной в один тактовый цвет. Цвет фона — COLBK. Символы могут отображаться в одном из четырех цветов на выбор. Шесть младших битов значения символа идентифицируют глиф, а два старших бита определяют цвет. Поскольку значение символа уменьшено до шести бит, набор символов использует 64 символа и требует 512 байт ОЗУ. Биты значения 0 в символе символа показывают цвет фона. Биты значения 1 в данных глифа показывают один из четырех возможных вариантов цвета на основе двух старших битов значения символа. Биты символьного значения 7 и 6:
Биты символов [7:6] | Диапазон символов | Цвет пикселей глифа |
---|---|---|
0 0 = $00 | $00 – 3 франка долларов | COLPF0 |
0 1 = $40 | $40 – 7 франков долларов | КОЛПФ1 |
1 0 = $80 | $80 - $БФ | КОЛПФ2 |
1 1 = $C0 | $C0 - $ФФ | КОЛПФ3 |
- Многоцветность: режимы ANTIC 4 и 5. В этих режимах символов каждая пара битов в символе символа представляет собой пиксель шириной в один цвет, таким образом, один байт информации глифа представляет 4 пикселя, а не 8 пикселей в других режимах. Набор символов использует 128 символов и требует 1024 байта ОЗУ. Цвет фона КОЛБК . Этот режим позволяет отображать до четырех цветов (включая фон) в одной матрице символов. Если установлен старший бит значения символа (т. е. инверсное видео), то пятый цвет, COLPF3 отображается вместо битового шаблона пикселей «11», который обычно показывает КОЛПФ2 . Выбор цвета основан на битовых парах глифа символов:
Бит символа 7 | Битовая пара глифов | Цвет пикселя глифа |
---|---|---|
0/1 = $00/$80 | 0 0 | КОЛБК |
0/1 = $00/$80 | 0 1 | COLPF0 |
0/1 = $00/$80 | 1 0 | КОЛПФ1 |
0 = $00 | 1 1 | КОЛПФ2 |
1 = $80 | 1 1 | КОЛПФ3 |
Режимы карты [ править ]
Режим античной карты | Режим ОС | Пикселей на линию режима (узкая/нормальная/широкая) | Количество строк ТВ-развертки на строку режима | Байтов на строку режима (узкая/нормальная/широкая) | Биты на пиксель | Цвета | Частота цвета на пиксель |
---|---|---|---|---|---|---|---|
8 | 3 | 32/40/48 | 8 | 8/10/12 | 2 | 4 | 4 |
9 | 4 | 64/80/96 | 4 | 8/10/12 | 1 | 2 | 2 |
А | 5 | 64/80/96 | 4 | 16/20/24 | 2 | 4 | 2 |
Б | 6 | 128/160/192 | 2 | 16/20/24 | 1 | 2 | 1 |
С | 14 (XLOS) | 128/160/192 | 1 | 16/20/24 | 1 | 2 | 1 |
Д | 7 | 128/160/192 | 2 | 32/40/48 | 2 | 4 | 1 |
И | 15 (XLOS) | 128/160/192 | 1 | 32/40/48 | 2 | 4 | 1 |
Ф | 8 | 256/320/384 | 1 | 32/40/48 | 1 | 1 1 ⁄ 2 | 1 ⁄ 2 |
Режимы GTIA [ править ]
Режимы GTIA представляют собой дисплеи Antic Mode F с альтернативной опцией интерпретации цвета, включенной через GTIA регистр PRIOR ($D01B hex /53275 dec ), затеняемый GPRIOR ($026F hex /623 dec ). Полноцветное выражение этих режимов GTIA также может быть задействовано в текстовых режимах Antic 2 и 3, хотя для практического использования цветов также потребуется специальный набор символов. См. GTIA для получения дополнительной информации.
Режим античной карты | Режим ОС | Пикселей на линию режима (узкая/нормальная/широкая) | Количество строк ТВ-развертки на строку режима | Байтов на строку режима (узкая/нормальная/широкая) | Биты на пиксель | Цвета | Частота цвета на пиксель | Примечания |
---|---|---|---|---|---|---|---|---|
Ф | 9 | 64/80/96 | 1 | 32/40/48 | 4 | 16* | 2 | 16 оттенков цвета фона. |
Ф | 10 | 64/80/96 | 1 | 32/40/48 | 4 | 9 | 2 | режим косвенного направления пикселей — для пикселей используются все 9 регистров цвета игрового поля и игрока/ракеты. |
Ф | 11 | 64/80/96 | 1 | 32/40/48 | 4 | 16* | 2 | 15 цветовых оттенков с одинаковой яркостью, заданной фоном, плюс цвет фона. |
Прокрутка [ править ]
До того, как видеодисплеи стали обычной частью пользовательского интерфейса, многие компьютеры использовали телетайп — принтер, обычно с непрерывной подачей бумаги. Пользовательский ввод и результаты, сгенерированные компьютером, печатались на бумаге, проходящей через принтер. Этот широко понимаемый интерфейс для пользовательского ввода и компьютерного вывода продолжился с появлением видеодисплеев, поскольку компьютеры представляли собой метафору экрана как окна просмотра над воображаемым бесконечным рулоном бумаги. Информация отображается на экране, начиная сверху, пока не достигнет нижней части экрана, и когда компьютеру необходимо ввести новую информацию, он смещает всю информацию на экране вверх, предоставляя пустое место внизу для новой информации и, следовательно, стирая самую верхнюю информацию. .
Такой вид прокрутки называется «грубой прокруткой». Это достигается путем перемещения байтов памяти через выделенную область отображения экрана. Перемещение килобайта (или более) памяти требует большого количества ресурсов ЦП, и более медленные компьютеры могут оказаться не в состоянии выполнить что-либо еще при обновлении данных экрана. В качестве средства анимации дисплея результаты могут быть прерывистыми, когда ЦП не может обновить память экрана быстрее, чем аппаратное обеспечение дисплея считывает память для генерации видеовыхода. Плавность движения ухудшается, поскольку минимальная величина смещения дисплея равна размеру всего символа. Большинство компьютеров, включая 8-битную версию Atari, выполняют грубую прокрутку, как описано выше — типичными примерами являются просмотр длинного списка программ BASIC или каталога файлов.
Грубая прокрутка, реализуемая путем массового перемещения данных, часто является единственным возможным методом прокрутки на большинстве компьютеров. Однако ANTIC обеспечивает прямую аппаратную поддержку вертикальной и горизонтальной, грубой и точной прокрутки, превращая концепцию «порта просмотра, перемещающегося по данным» из метафорической иллюзии в буквальную реализацию. Эти функции ANTIC обеспечивают быстрое, плавное полноэкранное перемещение, требующее незначительного времени ЦП и освобождающее ЦП для другой работы.
Все режимы отображения ANTIC, режимы текста и карты, могут использовать аппаратные функции прокрутки.
Вертикальная грубая прокрутка [ править ]
Вертикальная грубая прокрутка — самая простая в использовании функция. Первая инструкция режима «Текст» или «Карта» в каждом списке отображения всегда включает модификатор инструкции LMS, определяющий начало экранной памяти. При создании изображения ANTIC автоматически увеличивает указатель сканирования памяти от строки режима к строке режима, чтобы отображать память последовательно. Следовательно, дисплей можно «переместить», просто обновив адрес исходного модификатора LMS; добавление количества байтов, используемых для строки в текущем режиме текста или карты, сдвигает содержимое экрана на одну строку вверх, а вычитание того же количества перемещает экран вниз. Таким образом, дисплей на самом деле представляет собой окно просмотра, которое перемещается для просмотра различных областей памяти, а не для перемещения памяти в карту фиксированного экрана.
Поскольку счетчик сканирования памяти ANTIC не может автоматически увеличиваться за границу 4K, предел вертикальной прокрутки этим простым способом составляет до 4K перемещения. Полный экран текста режима 2 с использованием примерно 1 КБ может непрерывно прокручивать высоту четырех экранов до достижения границы 4 КБ. Аналогично, текстовый дисплей в режиме 7 может прокручиваться на высоту 16 полных экранов.
Естественно, этот тривиальный пример имеет ограниченную полезность. Многие реализации прокрутки прокручивают только часть экрана, в то время как другие разделы остаются фиксированными. Эту проблему решают заложенные в ANTIC Display List возможности . В этой ситуации в список отображения будут добавлены инструкции режима с использованием модификаторов LMS в первой строке режима разделов экрана, которые не должны перемещаться, что эффективно блокирует эти части дисплея, пока обновляется адрес модификатора LMS для раздела прокрутки.
Дальнейшее развитие этой концепции использует опцию модификатора LMS на каждой строке, которая прокручивается. Вертикальная прокрутка на этом дисплее требует обновления одного адреса модификатора LMS для каждой строки режима в области прокрутки. Когда дисплей управляется на таком уровне детализации, границу оперативной памяти экрана ANTIC 4K можно легко обойти. Даже в этом наихудшем примере затраченные усилия ЦП составляют лишь небольшую часть обработки, необходимой для массового перемещения данных экрана.
Еще одно ограничение, о котором следует помнить, заключается в том, что двухбайтовый адрес модификатора LMS не должен обновляться, когда ANTIC обрабатывает LMS. Если ANTIC прочитает адрес LMS, пока он частично обновлен, ANTIC отобразит неправильный раздел памяти для этой строки режима. Когда область прокрутки дисплея требует нескольких обновлений адреса LMS, вероятность частичного обновления увеличивается, а также увеличивается вероятность того, что две последующие строки будут отображать одни и те же данные. Программы решают эту проблему несколькими способами: выполняя обновления во время вертикального пробела, отслеживая VCOUNT перед обновлениями или выполняя обновления в прерываниях списка отображения, выполняемых во время разделов дисплея за пределами области прокрутки.
Вертикальная тонкая прокрутка [ править ]
Вертикальная тонкая прокрутка позволяет перемещать область прокрутки по одной строке для режимов «Текст» и «Карта», высота которых превышает одну строку сканирования. Вертикальная тонкая прокрутка для режимов карты высотой только в одну строку логически нецелесообразна. Эффект вертикальной «тонкой» прокрутки для режимов карты с одной строкой сканирования можно реализовать с помощью более простого метода грубой прокрутки .
Точная прокрутка требует настройки для определения области прокрутки. Это делается путем установки бита-модификатора вертикальной прокрутки (VS) в последовательного списка отображения инструкциях . Первая команда строки режима без установленного бита VS становится концом области прокрутки и используется в качестве строки буфера для предоставления новых строк сканирования для прокрутки вверх в нижнюю часть области прокрутки.
Процесс тонкой вертикальной прокрутки ANTIC работает, просто предписывая ANTIC пропустить несколько строк сканирования для первой строки режима области прокрутки. Последующие строки режима в области прокрутки не затрагиваются. Последняя строка области представляет собой нижнюю границу области прокрутки, отображающую количество строк сканирования, удаленных из первой строки. Это количество строк развертки контролируется регистром VSCROL . Значение варьируется от 0 до высоты строки сканирования строки режима ANTIC — 1. Максимальный диапазон значений охватывает тонкую прокрутку 16 строк сканирования от 0 до 15.
Когда достигается предел точной прокрутки, прокрутка продолжается путем сброса значения VSCROL и выполнения грубой вертикальной прокрутки области прокрутки.
Горизонтальная грубая прокрутка [ править ]
Горизонтальная грубая прокрутка требует немного больше усилий, чем вертикальная. Хотя ожидается, что горизонтальная прокрутка создаст иллюзию перемещения окна просмотра влево и вправо по широкой панорамной сцене, созданной из памяти экрана, автоматическое приращение сканирования памяти ANTIC противоречит идее о том, что строки данных на экране шире, чем дисплей. Для представления экранной памяти в виде длинных горизонтальных линий требуется модификатор LMS для каждой команды отображения текста списка или режима карты в области прокрутки. Горизонтальный шаг выполняется путем увеличения или уменьшения всех адресов LMS области прокрутки.
Горизонтальная прокрутка требует той же реализации списка отображения , что и худший пример, описанный для вертикальной грубой прокрутки . Таким образом, там, где реализована горизонтальная прокрутка, также поддерживается вертикальная прокрутка, просто изменяя значение, увеличивая или уменьшая адреса LMS. Другим преимуществом этой схемы является то, что можно легко управлять экранной памятью в пределах ограничения экранной памяти ANTIC в 4K.
См. раздел «Вертикальная грубая прокрутка» для дальнейшего обсуждения и ограничений по времени при обновлении адресов модификаторов LMS.
Горизонтальная тонкая прокрутка [ править ]
Горизонтальная точная прокрутка обеспечивает одноцветное перемещение области прокрутки в режимах «Текст» и «Карта». Для всех обычных интерпретаций цвета это происходит по цветовым часам, а не по пикселям, даже если пиксели больше (или меньше), чем цветовые часы. Режимы ANTIC, использующие альтернативные интерпретации цветов GTIA, должны прокручиваться на целый пиксель GTIA (два цветовых тактовых сигнала). Для обеспечения правильной прокрутки пикселей GTIA следует использовать только четные значения. Нечетные значения HSCROL переведут поток пикселей GTIA в другое состояние, которое будет интерпретироваться как разные цвета.
Для тонкой прокрутки требуется настройка для определения области горизонтальной прокрутки. Первый шаг — начать со списка отображения, используя модификатор инструкции LMS, чтобы указать начальный адрес каждой строки режима. Это сделано для организации памяти экрана в виде длинных строк данных для дисплея. Следующим шагом является установка бита-модификатора горизонтальной прокрутки (HS) во всех строковых инструкциях режима списка отображения для области прокрутки.
Количество смещаемых тактовых импульсов цвета контролируется регистром HSCROL . Максимальный диапазон значений HSCROL охватывает тонкую прокрутку 16 тактовых импульсов цвета от 0 до 15. Используемая информация о тактовых частотах цвета буферизуется с начала строки режима (указатель текущего сканирования памяти ANTIC), используя достаточно байтов экранной памяти для удовлетворения 16 тактовых импульсов цвета. Горизонтальная прокрутка просто указывает ANTIC, сколько тактовых импульсов цвета он может вывести из 16 буферизованных тактовых импульсов цвета, начиная с последнего (самого правого) тактового сигнала буферизованной памяти. Ноль (0) — тактовые сигналы цвета не выводятся из буфера. 1 — это последний (самый правый) цветовой тактовый сигнал буфера. Цветные часы вставляются у левого края экрана, в результате чего область прокрутки экрана смещается вправо.
Когда будет достигнут предел тонкой прокрутки, продолжите прокрутку, сбросив значение HSCROL и выполнив грубую горизонтальную прокрутку области прокрутки. 16-цветный диапазон синхронизации ANTIC позволяет осуществлять точную прокрутку нескольких символов текстового режима или пикселей размером более одного байта в режиме карты. Таким образом, обновление адресов LMS может добавлять или вычитать несколько байтов.
методы Альтернативные прокрутки
Интересное использование поведения сканирования памяти DMA в ANTIC позволяет использовать стратегию для явно больших расстояний горизонтальной прокрутки, но использует часть необходимой реальной памяти. Как обсуждалось в разделе «Горизонтальная грубая прокрутка», автоматическое увеличение сканирования памяти ANTIC от строки режима к строке режима противоречит идее, что строки данных на экране шире, чем дисплей. Использование памяти, фактически организованной в виде длинной горизонтальной непрерывной последовательности байтов, требует модификатора LMS для каждой команды отображения списка текста или режима карты в области прокрутки.
Вместо использования модификатора LMS для каждой строки этот метод использует более «обычный» список отображения, для которого требуется только один модификатор LMS в начале области прокрутки. Увеличение (+1) адреса модификатора LMS приводит к тому, что область прокрутки перемещается влево. Однако «новая» информация, которая переместилась в правую часть области прокрутки, ранее была первым байтом следующей строки (за исключением последнего байта последней строки — эта информация была полностью за кадром).
Вторая половина этой стратегии требует обновления последнего байта/символа каждой строки в области прокрутки для отображения желаемой новой информации. Для типичного дисплея с прокруткой это означало бы обновление последнего байта одной или двух дюжин строк, что на ассемблере занимает тривиальное количество времени. Таким образом, если этот процесс прокрутки включает в себя полноэкранное отображение текста в режиме 2 или режиме 4 (скорее наихудший случай) и использует все возможности 4K автоматической адресации экранной памяти ANTIC, то горизонтальная прокрутка может продолжаться таким образом примерно 3000 шагов; эквивалентно 75 полноэкранным режимам.
Однако даже использование памяти 4K не требуется. После того, как все данные из первого полноэкранного режима были удалены с дисплея, приложение прокрутки может перестроить первый экран, чтобы он содержал известную точку перехода, так что действие прокрутки может вернуться к первому адресу в блоке без видимых заиканий или очевидных ошибок. перерыв в прокрутке.
Точная прокрутка этого расположения требует немного большего планирования. Когда в списке отображения включена точная прокрутка, ANTIC извлекает больше информации, чем требуется для отображения в строке режима. Поскольку каждая строка режима теперь использует больше памяти, новая информация, прокручиваемая сбоку дисплея, не является тем байтом/символом, который отображался в начале следующей строки. Однако это не ухудшает процесс прокрутки, а просто изменяет значение сложения и вычитания, используемое для определения начала и конца каждой строки отображения.
Прерывания списка отображения (DLI) [ править ]
ANTIC включает в себя функцию запуска прерывания, обслуживаемого ЦП, в определенных вертикальных положениях на экране. Он встроен в список отображения ANTIC, который предписывает ANTIC запустить прерывание во время последней строки сканирования текущей инструкции режима, и поэтому называется «Прерывание списка отображения». На других платформах это действие называется « Растровые прерывания » или « Горизонтальные пустые прерывания ». Обычной целью является изменение значений, связанных с отображением, в известном месте, чтобы переходы были визуально точными или происходили там, где они не конфликтуют с активностью отображения. Возможности включают, помимо прочего, изменение значений регистра цвета, горизонтального положения игрока/ракеты и значений тонкой прокрутки. Поскольку DLI представляет собой машинный код 6502, выполняемый ЦП, возможен любой вид обработки при условии, что он достаточно короткий, чтобы не конфликтовать с другими действиями и не перекрывать последующее прерывание списка отображения. Хорошим примером является опрос контроллера мыши, который необходимо выполнять чаще, чем с частотой 1/60 секунды.
Обзор [ править ]
Для правильного запуска прерывания необходимы следующие условия:
- Список отображения с инструкцией режима, включающей установленный бит модификатора прерывания списка отображения (DLI) . (Бит 7 — $80 шестнадцатеричный /128 десятичный )
- ANTIC В регистре NMIEN установлен бит DLI. (Бит 7 — $80 шестнадцатеричный /128 десятичный )
- Вектор операционной системы для прерывания списка отображения (VDSLST, $0200 hex /512 dec ) указывает на начальный адрес процедуры прерывания.
Правильная установка [ править ]
При обновлении значений элементов управления отображением необходимо следить за тем, чтобы ANTIC в настоящее время не использовал их. Если ANTIC обрабатывает список отображения, содержащий инструкцию с модификатором DLI, то при изменении адреса VDSLST может быть отправлено прерывание, что может привести к сбою системы. Если список отображения использует несколько прерываний, а прерывания включены в NMIEN после того, как ANTIC уже передал инструкции режима с модификаторами DLI, то прерывания списка отображения будут запускаться не по порядку, что приведет к неожиданным результатам.
Разумная : последовательность событий для установки списка отображения с использованием прерываний списка отображения
- Отключите прерывания списка отображения ANTIC, очистив бит 7 ( $80 ) NMIEN , установив в регистре значение 40 долларов США, что позволяет продолжить работу вертикального пустого прерывания.
- Отключите ANTIC Display List DMA. Сначала отключите DMA в теневом регистре ( SDMCTL ), а затем при желании то же самое можно сделать и с аппаратным регистром ( DMACTL ). Бит 5 (значение $20 ) необходимо очистить, но в большинстве реализаций будет выбрано обнуление всех битов, а затем, когда придет время перезапустить экран, восстановится правильное значение всех битов.
- Установите указатель списка отображения теневого адреса DLISTL/DLISTH на начальный адрес нового списка отображения.
- Установите адрес прерывания списка отображения VDSLST ( $0200 шестнадцатеричный /512 десятичный ) на начальный адрес процедуры прерывания.
- Подождите следующего вертикального прерывания (VBI), чтобы применить изменения теневого регистра. Возможные методы:
- Монитор RTCLOCK ( $12 / $13 / $14 шестнадцатеричный /18/19/20 десятичный ) для приращения, указывающего на то, что произошел VBI.
- ANTIC Отслеживайте VCOUNT на предмет изменений, указывающих на начало следующего кадра.
- Включите прерывания списка отображения ANTIC, установив бит 7 ( 80 долларов США ) от NMIEN . Обычное значение NMIEN составляет $C0, который включает DLI и VBI.
- Включите DMA списка отображения ANTIC, обновив теневой регистр ( SDMCTL ). Бит 5 (значение $20 ) должны быть установлены, как и биты ширины игрового поля и, если необходимо, биты, относящиеся к графике игрока/ракеты.
Программа, тесно интегрированная с циклом отображения и знающая о положении электронного луча относительно текущего дисплея, может обойти отключение DMA списка отображения. Аналогично, отключение дисплея не требуется, если настройка происходит во время вертикальной холостого хода.
Рекомендации по коду [ править ]
Содержимое аккумулятора 6502, регистров X и Y не сохраняется до входа в процедуру DLI. В обязанности процедуры DLI входит сохранение состояния регистров, которые будут использоваться во время процедуры DLI, а затем последним действием является восстановление исходных значений регистров перед выходом с помощью инструкции RTI. Подпрограммы обычно помещают значения регистров в стек 6502.
Если используется несколько DLI, первое прерывание обновляет VDSLST, чтобы указать адрес следующего прерывания, и так далее для последующих прерываний. Последняя процедура прерывания списка отображения на экране указывает VDSLST обратно на адрес первого прерывания списка отображения.
Если значение, измененное DLI, имеет теневой регистр операционной системы и включены вертикальные пустые прерывания, то значение, действующее до (над) положения экрана прерывания списка отображения, является значением тени, а значение после ( ниже) положение экрана — это значение из DLI (и любого другого DLI, которое позже меняет его). Если значение не имеет тени операционной системы, тогда должна быть начальная процедура DLI (или VBI), которая устанавливает начальное значение.
Если графический объект отображается, когда DLI меняет свое значение, результаты могут быть противоречивыми. Самый распространенный пример — изменение цвета фона. Поскольку DLI начинает выполняться, когда электронный луч находится в видимой части экрана, переход от предыдущего цвета фона к новому цвету, записанному DLI, будет виден где-то на текущей строке сканирования. (Точное местоположение зависит от требований DMA для режима отображения и графики Player/Missile.) Чтобы обеспечить плавный переход от строки сканирования к строке сканирования, код должен сначала записать в WSYNC, который останавливает выполнение DLI до конца строки сканирования. , а затем записать в нужные регистры.
Хотя обычная операция DLI заключается в изменении нескольких значений, ориентированных на отображение, а затем возврате к основному коду, это не является обязательным требованием. Для DLI безопасно работать в течение нескольких или многих строк сканирования, если он завершается до следующего DLI или вертикального пустого прерывания.
Примеры [ править ]
Тривиальный пример прерывания списка отображения, меняющего цвет фона:
DLI
PHA ; Save Accumulator on stack
LDA #$9C ; Load light blue (color $9, luminance $C)
STA WSYNC ; Wait to sync to the end of the scanline
STA COLBK ; Set the background
PLA ; Restore Accumulator from stack
RTI ; The end.
Графика игрока/ракеты [ править ]
Большая часть графических функций Player/Missile находится в ведении чипа CTIA/GTIA . CTIA/GTIA контролирует положение, размер, цвет, приоритет и обнаружение столкновений для графических объектов Player/Missile, но его фактическая реализация рендеринга формы не идет дальше, чем однобайтовый шаблон для каждого объекта, представленный равномерно во всех строках сканирования. (Шаблоны задаются в регистрах графических шаблонов CTIA/GTIA GRAF* .) В конце концов, CTIA/GTIA сама по себе генерирует объекты Player/Missile в виде только шаблонов вертикальных полос на экране.
В конструкции ANTIC предусмотрена возможность DMA, позволяющая считывать графические данные списка отображения и игрового поля. Эта возможность прямого доступа к памяти используется для чтения данных от имени CTIA/GTIA и обновления регистров графических шаблонов GRAF* при генерации каждой строки сканирования дисплея. Таким образом, ANTIC предоставляет объектам Player/Missile узоры, которые варьируются по высоте экрана и поэтому выглядят как традиционная «спрайтовая» графика.
ANTIC Биты 2 и 3 регистра DMACTL (затенены SDMCTL) управляют извлечением ANTIC данных игрока/ракеты для обновления регистров графических шаблонов CTIA/GTIA.
Значения битов управления DMACTL Player/Missile DMA (биты [3:2]):
- $00 — отключить игрок и ракету DMA
- $04 — Включить ракетный DMA
- $08 — Включить DMA игрока
- $0C — включить DMA для игрока и ракеты
Ракетный DMA можно включить без DMA игрока. Missile Однако, когда Player DMA включен, автоматически происходит Missile DMA, чтобы обеспечить согласованность синхронизации DMA, но данные не доставляются в регистр GRAFM .
Бит 4 (значение 10 шестнадцатеричных /16 десятичных ) регистра DMACTL контролируют частоту получения новых данных. ANTIC извлекает данные и обновляет CTIA/GTIA каждую строку сканирования. Настройки разрешения DMACTL влияют на то, как часто ANTIC увеличивает свой внутренний указатель DMA для получения новых данных. Однострочное разрешение. Графика игрока/ракеты увеличивает адрес DMA с каждой строкой сканирования, а разрешение двойной строки увеличивает адрес DMA с каждой четной строкой сканирования. Значения битов DMACTL для разрешения игрока/ракеты:
- $00 — разрешение двойной линии. Новые данные извлекаются DMA по четным строкам сканирования, но обновление регистров шаблонов CTIA/GTIA Player/Missile Graphics по-прежнему происходит в каждой строке сканирования. Следовательно, каждый байтовый шаблон игрока/ракеты имеет высоту в две строки сканирования. Когда включено разрешение двойной строки, регистр CTIA/GTIA VDELAY (D01C hex /53276 dec ) можно использовать для маскировки обновлений ANTIC в четных строках сканирования, сдвигая битовую комбинацию отдельных игроков и ракет вниз на одну строку сканирования.
- 10 долларов США — разрешение одной строки. Новая выборка DMA и обновление регистра игрока/ракеты происходят в каждой строке сканирования. Регистр CTIA/GTIA VDELAY (D01C hex /53276 dec ), маскирующий обновления на четных строках сканирования, снижает разрешение однострочного проигрывателя/ракеты до разрешения двойной строки, хотя данные смещаются на одну строку сканирования ниже.
CTIA/GTIA также должна быть специально включена для получения графических данных игрока/ракеты через DMA для правильного представления объектов на экране. CTIA/GTIA GRACTL Дополнительную информацию см. в реестре .
Расположение памяти, считываемой ANTIC для графики Player/Missile, контролируется регистром PMBASE . Это значение PMBASE обеспечивает начальную страницу базового адреса для графики Player/Missile. При работе графики P/M с разрешением двойной строки значение PMBASE должно начинаться с границы 1 КБ. При работе графики P/M с однострочным разрешением значение PMBASE должно начинаться с границы 2K. Карты памяти для графических режимов Player/Missile:
Разрешение двойной строки (1 байт на 2 строки развертки, 128 байт каждый объект) относительно PMBASE x 100 шестнадцатеричных /256 десятичных :
НЕ ИСПОЛЬЗУЕТСЯ | Ракеты 3/2/1/0 | Игрок 0 | Игрок 1 | Игрок 2 | Игрок 3 | |
---|---|---|---|---|---|---|
Начало/верх экрана | ||||||
декабрь | +0 | +384 | +512 | +640 | +768 | +896 |
шестигранник | +$00 | +$180 | +$200 | +$280 | +$300 | +$380 |
Конец/нижняя часть экрана | ||||||
декабрь | +383 | +511 | +639 | +767 | +895 | +1023 |
шестигранник | +$17 франков | +$1FF | + 27 франков | +$2FF | +$37 франков | +$3FF |
Разрешение одной строки (1 байт на строку сканирования, 256 байт на каждый объект) относительно PMBASE x 100 шестнадцатеричных /256 десятичных :
НЕ ИСПОЛЬЗУЕТСЯ | Ракеты 3/2/1/0 | Игрок 0 | Игрок 1 | Игрок 2 | Игрок 3 | |
---|---|---|---|---|---|---|
Начало/верх экрана | ||||||
декабрь | +0 | +768 | +1024 | +1280 | +1536 | +1792 |
шестигранник | +$00 | +$300 | +$400 | +$500 | +$600 | +$700 |
Конец/нижняя часть экрана | ||||||
декабрь | +767 | +1023 | +1279 | +1535 | +1791 | +2047 |
шестигранник | +$2FF | +$3FF | +$4FF | +$5FF | +$6FF | +$7FF |
Ракеты используют те же байты, что и карты памяти выше, по два бита на ракету:
Ракета | Биты | Значение/Маска |
---|---|---|
0 | ------11 | $03 |
1 | ----11-- | $0C |
2 | --11---- | $30 |
3 | 11------ | $C0 |
ANTIC не использует первые и последние 8 строк сканирования данных памяти игрока/ракеты в карте памяти. При двухстрочном разрешении игнорируются первые и последние четыре байта, при однострочном — первые и последние восемь байтов.
Поскольку игрок/ракеты представляют собой наложение, независимое от графики игрового поля, и отображаются в области за пределами сканирования, вертикальные координаты данных игрока/ракеты должны быть смещены для выравнивания объектов по игровому полю. В графических режимах операционной системы со 192 строками сканирования по умолчанию вертикальные координаты данных игрока/ракеты смещены от начала игрока/ракеты в памяти, как показано ниже. Записи Overscan показывают первое и последнее использованные смещения данных игрока/ракеты:
Игровое поле | П/М Двойная линия | P/M, одна линия |
---|---|---|
(вверху) Не используется | от +00 долларов шестнадцатеричного кода /0 декабря до +03 доллара шестнадцатеричного кода /3 декабря | от +00 долларов шестнадцатеричного кода /0 декабря до +07 доллара шестнадцатеричного кода /7 декабря |
Начать сканирование | +$04 гекс. /4 дек. | +$08 гекс. /8 дек. |
Графическая линия 0 | +$10 гекс. /16 дек. | +$20 гекс. /32 дек. |
Графическая строка 191 | +$6F гекс /111 декабрь | +$DF гекс /223 декабрь |
Завершить пересканирование | +$7 млрд гекс. /123 декабрь | +$F7 шестнадцатеричный /247 декабрь |
(внизу) Не используется | +$7C шестнадцатеричный /124 декабрь до +$7F шестнадцатеричный /127 декабрь | от +$F8 шестнадцатеричный /248 десятичный до +$FF шестнадцатеричный /255 десятичный |
Ограничения [ править ]
Вертикальная протяженность всего дисплея игрового поля варьируется от 0 до 240 строк развертки — это зависит от количества строк, которые ANTIC запрограммирован на отображение в соответствии со списком отображения . ANTIC начинает генерировать строки развертки с 8-й строки развертки телевизора, продолжая строку 247, всего 240 строк развертки.
Горизонтальную ширину дисплея игрового поля можно установить на 256, 320 или 384 пикселя, что соответствует 128, 160 или 192 тактовым частотам. В самом широком режиме фактически видно только 352 пикселя (176 цветовых импульсов). См. ДМАКТЛ .
Горизонтальная тонкая прокрутка перемещает область прокрутки до 16 цветовых такт. См . HSCROL .
Режимы карты GTIA должны прокручиваться по горизонтали с шагом в целый пиксель (2 цветовых тактовых сигнала), а не в один тактовый цвет. См. HSCROL и обсуждение «Горизонтальная тонкая прокрутка».
Вертикальная тонкая прокрутка перемещает область прокрутки на количество строк сканирования в одной строке режима области прокрутки, максимум до 16 строк сканирования. См. ВСКРОЛ .
в ANTIC Хотя счетчик программы списка отображения является 16-битным, во время нормального (т. е. последовательного) выполнения списка отображения изменяются только младшие 10 бит. для списка отображения требуется инструкция JMP (переход) Это означает, что для пересечения границы в 1 КБ . Это не является серьезным ограничением, поскольку размер одного списка отображения обычно варьируется от 32 до 202 байт и практически никогда не превышает 720 байт. Поскольку он может располагаться в любом месте памяти, нетрудно найти место в памяти достаточного размера, не пересекающее границу в 1 КБ.
Регистр сканирования памяти, регистр, адресующий данные, хранящиеся в памяти экрана, является 16-битным, но при последовательном сканировании видеопамяти ANTIC изменяются только младшие 12 бит. Это означает, что для списка отображения требуется инструкция строки режима, включая опцию LMS (сканирование загрузки памяти) , когда экранная память пересекает границу 4K. Графические режимы ANTIC E и F требуют более 7,5 КБ экранной памяти для полноэкранного отображения. Списки отображения для этих дисплеев требуют добавления опции LMS к инструкции режима рядом с серединой дисплея, где память экрана пересекает границу 4K. Границу 4K нельзя пересечь в середине строки графического режима, а только между концом одной строки режима и началом следующей строки. Другими словами, память для предыдущей строки режима заканчивается точно в последнем байте блока 4 КБ, а следующая строка режима начинается точно в первом байте следующего блока 4 КБ.
Набор символов может располагаться где угодно в памяти (см. CHBASE ), но, в зависимости от текстового режима ANTIC, начальный адрес должен соответствовать границе 512 байт или 1 КБ.
Карта памяти Player/Missile может располагаться в любом месте памяти (см. PMBASE ), но, в зависимости от разрешения, начальный адрес должен соответствовать границе 1 КБ или 2 КБ (см. также DMACTL ).
Ошибки и граничные условия [ править ]
![]() | Этот раздел может содержать чрезмерное количество сложных деталей, которые могут заинтересовать только определенную аудиторию . ( Май 2019 г. ) |
Определенные комбинации значений в списке отображения могут привести к неожиданным результатам. Кроме того, некоторые мероприятия ANTIC имеют критический момент. Изменения в регистрах за пределами установленных временных интервалов могут привести к отложенному эффекту или неожиданным результатам. Некоторые из этих ситуаций можно использовать для получения интересных эффектов, а другие приводят к искажениям отображения.
Эксплойтное поведение [ править ]
Графика 9++ [ править ]
Один из методов использования расширенных цветовых режимов GTIA без больших требований к памяти режима ANTIC F — указать ANTIC повторять каждую строку данных один или несколько раз с помощью инструкций строки режима с модификатором LMS для повторного отображения одних и тех же экранных данных при многократном сканировании. линии. Это приводит к более низкому разрешению по вертикали, когда каждый пиксель имеет высоту 2 или более строк развертки, но имеет более высокие издержки DMA из-за того, что ANTIC необходимо повторно читать одни и те же байты из экранной памяти. Вместо использования повторяющихся модификаторов LMS можно использовать особенность вертикальной прокрутки для создания режима четырехстрочного сканирования, который отображает пиксели с использованием режимов интерпретации цветов высокого разрешения или GTIA.
Вертикальная прокрутка обычно не считается полезной для режима ANTIC F, высота которого составляет одну строку сканирования. Однако если вертикальная прокрутка включена для команды отображения списка режима F и регистр VSCROL установлен на 13, то счетчик строк ANTIC будет считать от 13 до 0 (четыре строки сканирования — 13, 14, 15, 0). При этом ANTIC выводит одну и ту же строку графики для каждой строки сканирования из своего внутреннего буфера без повторного чтения той же самой экранной памяти. В конце области вертикальной прокрутки необходимо сбросить VSCROL на 3, чтобы ANTIC мог считать от 0 до 3 (четыре строки сканирования). Конечным результатом является отображение в режиме F, где строки имеют высоту в четыре строки сканирования, а не в одну, но с издержками DMA, связанными с чтением только одного экрана данных из памяти, происходящим в первой строке сканирования.
Неэксплуатируемое поведение [ править ]
прокрутки горизонтальной . Режим 8/Режим 9. Повреждение
Режимы карты ANTIC 8 и 9 будут повреждены, если сразу следовать за горизонтально прокручиваемой линией другого режима с использованием нормальной или широкой ширины игрового поля. Это происходит, если строка режима 8 или 9 прокручивается горизонтально или нет, но результаты повреждения в каждом случае разные. Проблема возникает при определенных значениях HSCROL, из-за чего ANTIC неправильно выводит пиксели и смещает линию режима 8-9.
Ошибка отсутствует при использовании игрового поля узкой ширины.
- Если режим 8 или 9 НЕ использует горизонтальную прокрутку и происходит следующее:
- Режим 2, 3, 4, 5, D, E или F и HSCROL. $A, $B, $E или $F : затем повреждение продолжается через строку режима.
- Режим 2, 3, 4, 5, D, E или F и HSCROL. $C или $D : тогда повреждение устраняется само собой в течение двух строк сканирования.
- Режим 6, 7, A, B или C и HSCROL. $E или $F : затем повреждение продолжается через строку режима.
- Если в режиме 8 или 9 используется горизонтальная прокрутка, то:
- Режим 2, 3, 4, 5, D, E или F: тогда повреждение устраняется само собой в течение трех строк сканирования.
- Режим 6, 7, A, B или C: тогда повреждение устраняется само собой в течение двух строк сканирования.
Поскольку значения HSCROL, вызывающие проблему, превышают 7, проблему можно предотвратить, если режим 8 или 9 НЕ использует горизонтальную прокрутку, ограничив сдвиг HSCROL до значений от 0 до 7 цветовых такт и обновив адрес LMS списка отображения на грубую горизонтальную прокрутку в меньших размерах. приращения. Эта стратегия разрешает все случаи во всех текстовых режимах и во всех режимах карты от A до F, которые генерируют 8 или меньше тактовых импульсов цвета на байт экранной памяти.
Ошибка последней строки в высоком разрешении [ править ]
Список отображения не следует создавать с помощью инструкции высокого разрешения (режим F) в строке сканирования 247 — последней отображаемой строке сканирования. Если биты ширины игрового поля DMACTL не равны 00, то ANTIC не будет правильно генерировать вертикальную синхронизацию, что может привести к искажению изображения. В любом случае этого легко избежать, поскольку это непрактичное расположение списка отображения, поскольку при этом линия режима помещается в область за пределами сканирования, где она обычно не видна.
Широкое игровое поле, тонкая горизонтальная прокрутка
Модификатор списка отображения с горизонтальной тонкой прокруткой заставляет ANTIC извлекать дополнительную экранную память, соответствующую следующей большей ширине игрового поля, которая предоставляет данные, необходимые для прокрутки дисплея. Поскольку ширина игрового поля не превышает ширину широкого игрового поля, ANTIC не имеет дополнительных данных для точной прокрутки. ANTIC представляет поддельные данные для области, освобожденной смещенным экраном: в левой части дисплея будет смещен цвет фона, а в правой части в конце диапазона прокрутки появятся несколько цветных часов случайных данных. Эти пиксельные данные обычно не заметны, поскольку они происходят в области за пределами сканирования, где они обычно не видны. Однако, если эти ложные пиксели игрового поля пересекаются с пикселями игрока/ракеты, столкновение будет отмечено. Решением для игроков/ракет, попавших в зону за пределами сканирования, является сброс их позиций на ноль, чтобы удалить их с дисплея и таким образом предотвратить ложные столкновения.
См. также [ править ]
Ссылки [ править ]
- ^ Руководство по полевому обслуживанию домашнего компьютера Atari — 400/800 (PDF) . Atari, Inc., стр. 1–8.
- ^ Нойбауэр, Дуг (20 июня 2009 г.). «Годы Atari, Дуг Нойбауэр. Star Raiders, Solaris и Pokey» . DougNeubauer.com .
- ^ патент США 4296476 , Майер, Стивен Т.; Майнер, Джей Г .; Нойбауэр, Дуглас Г.; Декуир, Джозеф К., «Система обработки данных с программируемым графическим генератором», выпущено 20 октября 1981 г., передано Atari, Inc.
- ^ Биссон, Джиджи (май 1986 г.). «Antic тогда и сейчас. Как сообщество Atari и этот журнал росли вместе» . Антик . 5 (1): 16–17. ISSN 0745-2527 . Проверено 23 февраля 2023 г.
- ^ Майкл Каррент, «Что такое чипы SALLY, ANTIC, CTIA/GTIA, POKEY и FREDDIE?» , 8-битные компьютеры Atari: часто задаваемые вопросы
- ^ Перейти обратно: а б Борис, Дэн. «Чипы Атари» . Дэна Б. Домашняя страница Проверено 1 февраля 2011 г.
- ^ Вендел, Курт. «Атари 800XLCR» . AtariMuseum.com . Архивировано из оригинала 13 сентября 2011 г. Проверено 1 февраля 2011 г.
- ^ Вендел, Курт. «Тестер производительности KERI» . AtariMuseum.com . Архивировано из оригинала 13 сентября 2011 г. Проверено 1 февраля 2011 г.