В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения ) |
Контроллер алфавитно-цифрового телевизионного интерфейса [1] ( ANTIC ) представляет собой интегральную схему с большой интегральной схемой (БИС ), предназначенную для создания двухмерной компьютерной графики для отображения на экране телевизора или дисплее компьютера .
Под руководством Джея Майнера чип был разработан в 1977–1978 годах Джо Декюиром , Франсуа Мишелем и Стивом Смитом [2] для 8-битных компьютеров Atari, впервые выпущенных в 1979 году. Чип был запатентован Atari, Inc. в 1981 году. [3] ANTIC также используется в игровой консоли Atari 5200 1982 года, которая имеет большую часть того же оборудования, что и 8-битные компьютеры.
Для каждого кадра видео ANTIC считывает инструкции для определения игрового поля или фоновой графики, затем передает поток данных на сопутствующий чип CTIA или GTIA , который добавляет цвет и накладывает спрайты (называемые Atari «графикой игрока/ракеты»). Каждая инструкция ANTIC соответствует либо пустым строкам развертки , либо одному из 14 графических режимов, используемых для горизонтальной полосы дисплея. Высота каждой полосы зависит от режима. Инструкции включают в себя список отображения , на языке Atari, который определяет, как весь дисплей строится из стека отдельных режимов.
Список отображения определяет, откуда берутся данные для каждой строки. Для режимов символов базовый адрес битовых карт символов хранится в регистре на кристалле и может быть изменен. Инструкции списка отображения могут включать горизонтальную и вертикальную тонкую прокрутку и отмечать, что должно произойти прерывание. Прерывание позволяет выполнить произвольный код 6502, обычно для изменения настроек, связанных с отображением, в середине кадра.
Журнал Atari Computer Antic был назван в честь чипа. [4]
В приведенном ниже списке описываются присущие ANTIC аппаратные возможности, то есть предполагаемая функциональность самого оборудования, без учета результатов, достигаемых прерываниями, обслуживаемыми ЦП, или ядрами отображения, часто инициирующими изменения регистров.
ANTIC использует DMA для чтения программы, называемой списком отображения , которая определяет следующие характеристики игрового поля:
Другие функции на основе регистров:
по номеру детали
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 |
Д0 – Д7 | 30, 31, 32, 33, 40, 39, 38, 37 | Шина данных ввода-вывода |
FØ0 | 35 | Быстрый входной сигнал фазы 0 |
ОСТАНОВИТЬ | 9 | Остановка вывода (приостанавливает работу ЦП, пока ANTIC считывает память) |
ЛП | 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 для графики игрока/ракеты, точной прокруткой, вводом светового пера и прерываниями. Аппаратные регистры не возвращают записанные значения обратно при чтении. Эта проблема решается с помощью регистров тени операционной системы, реализованных в обычной оперативной памяти в качестве мест для хранения последнего значения, записанного в регистры. Регистры тени операционной системы копируются из оперативной памяти в аппаратные регистры во время вертикального пробела. Поэтому любые записи в аппаратные регистры, имеющие соответствующие теневые регистры, будут перезаписаны значением регистров тени во время следующего вертикального пробела.
Некоторые регистры оборудования Write не имеют соответствующих регистров Shadow. Они могут быть безопасно записаны приложением без перезаписи значения во время вертикального пробела. Если приложению необходимо знать последнее состояние регистра, то приложение должно запомнить, что оно записало.
Теневые регистры операционной системы также существуют для некоторых регистров чтения, где считывание значения непосредственно с оборудования на неизвестном этапе цикла отображения может возвращать противоречивые результаты.
Имя | Описание | Чтение/Запись | Шестнадцатеричный адрес | Дек. адрес | Имя тени | Адрес теневого шестнадцатеричного кода | Тень Дек Аддр |
---|---|---|---|---|---|---|---|
ДМАКТЛ | Прямой контроль доступа к памяти | Писать | $400D | 54272 | SDMCTL | $022F | 559 |
ЧАКТЛ | Управление персонажем | Писать | $401 | 54273 | ДИАГРАММА | $02F3 | 755 |
ДЛИСТЛ | Указатель списка отображения (младший байт) | Писать | $402 | 54274 | SDLSTL | $0230 | 560 |
ДЛИСТ | Указатель списка отображения (старший байт) | Писать | $403 | 54275 | SDLSTH | $0231 | 561 |
HSCROL | Горизонтальная мелкая прокрутка | Писать | $404 | 54276 | |||
ВСКРОЛ | Вертикальная мелкая прокрутка | Писать | $405 | 54277 | |||
PMBASE | Адрес базы игрока/ракеты | Писать | $407D | 54279 | |||
CHBASE | Базовый адрес набора символов | Писать | $409 | 54281 | ЧБАС | $02F4 | 756 |
WSYNC | Дождитесь горизонтальной синхронизации | Писать | $D40A | 54282 | |||
VCOUNT | Счетчик вертикальных линий | Читать | $D40B | 54283 | |||
ПЕНЬ | Горизонтальное положение светового пера | Читать | $D40C | 54284 | ЛПЕНХ | $0234 | 564 |
ПЕНВ | Вертикальное положение светового пера | Читать | $D40D | 54285 | ЛПЕНВ | $0235 | 565 |
НМИЕН | Включение немаскируемого прерывания (NMI) | Писать | $D40E | 54286 | |||
НМИРЭС | Сброс немаскируемого прерывания (NMI) | Писать | $D40F | 54287 | |||
НМИСТ | Состояние немаскируемого прерывания (NMI) | Читать | $D40F | 54287 |
В отдельных регистрационных списках ниже применяется следующая легенда:
Значение бита | Описание |
---|---|
0 | Бит должен быть 0 |
1 | Бит должен быть 1 |
? | Бит может быть равен 0 или 1 и используется для определенной цели. |
- | Бит не используется или не должен иметь определенного значения |
этикетка | Обратитесь к более позднему объяснению назначения этого бита. |
ТЕНЬ: 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$ | Включить DMA ракеты |
1 0 = 08 долларов | Включить DMA игрока |
1 1 = $0C | Включить DMA игрока и ракеты |
Функция ANTIC Player/Missile DMA считывает байты из памяти и передает данные для обновления графических шаблонов GRAFP0, GRAFP1, GRAFP2, GRAFP3 и GRAFM CTIA/GTIA , освобождая ЦП от создания графики Player/Missile ( спрайта ). Эти биты включают передачу ANTIC данных Player и Missile в CTIA/GTIA. CTIA/GTIA также необходимо настроить для получения данных через регистр GRACTL , чтобы DMA Player/Missile функционировало должным образом.
Когда включен DMA игрока, автоматически запускается DMA ракеты для поддержания согласованности синхронизации DMA, но данные не передаются в регистр GRAFM ракеты.
При включении DMA игрока/ракеты происходит на каждой строке сканирования видимого дисплея — от строки сканирования 8 до 247. Поэтому данные игрока/ракеты в карте памяти (см. PMBASE ANTIC) выше и ниже этих счетчиков строк сканирования не используются и не отображаются.
Значения битов разрешения игрока/ракеты :
Обновления регистров ANTIC DMA и Player/Missile происходят на каждой строке сканирования независимо от разрешения. Когда действует разрешение Double line, память Player/Missile может быть изменена между избыточными выборками DMA, таким образом изменяя шаблон, отправляемый в регистры GRAF*, и создавая видимое разрешение Single line Player/Missile.
Значения битов DMA-списка отображения :
Для отображения игрового поля требуется, чтобы был включен Display List DMA и указана ширина игрового поля. Если любое из значений равно нулю, то отображение игрового поля не генерируется.
ТЕНЬ: ДИАГРАММА $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 приводит к отображению инвертированных видеосимволов в виде инвертированного пустого пространства. Биты Video Inverse и Video Blank работают в режимах ANTIC 2 и 3 и не оказывают влияния на другие текстовые режимы 4, 5, 6 и 7.
Бит Video Reflect влияет на все текстовые режимы. Video Reflect полезен в ситуациях, требующих зеркальных эффектов без определения нового набора символов. Идеальное использование — карточные игры, отображающие точные лицевые стороны карт, показывающие перевернутые масти. Поскольку это вертикально отражает данные глифа перед их использованием, эффект кажется непоследовательным для выносных элементов ANTIC Mode 3 с байтами глифа 6 и 7, появляющимися в нижней части области выносных элементов.
ТЕНЬ: SDLSTL/SDLSTH $0230/$0231
Отображение указателя списка
Бит 15 | Бит 14 | Бит 13 | Бит 12 | Бит 11 | Бит 10 | Бит 9 | Бит 8 | Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
ANTIC начинает выполнять Display List , на который указывает 16-битный адрес в регистрах DLISTL/DLISTH (D402-D403 hex /54274-54275 dec ). Адресные регистры обновляются во время выполнения Display List с помощью JMP (Jump) и JVB (Jump and wait for Vertical Blank) ANTIC. Адрес также обновляется процедурой Vertical Blank Interrupt (VBI) операционной системы с использованием значений в теневых регистрах SDLSTL/SDLSTH (0230-0231 hex /560-561 dec ).
Когда включено прерывание OS Vertical Blank, прямые обновления регистров ANTIC DLIST ЦП или инструкции ANTIC Jump будут перезаписаны ОС во время следующего Vertical Blank значениями в теневых регистрах. Поэтому перелистывание страниц, реализованное списками отображения , которые указывают на следующий список отображения в серии, не будет работать так, как ожидается, если прерывание Vertical Blank не отключено.
Горизонтальная мелкая прокрутка
Бит 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 соответствует цветовой синхронизации, необходимой для точной цветопередачи.
Вертикальная мелкая прокрутка
Бит 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 для «обычных» инструкций режима игрового поля.) Однако инструкция пустого режима может использоваться для завершения области прокрутки и по-прежнему подвержена ожидаемым изменениям высоты строки сканирования в зависимости от значения вертикальной прокрутки.
Адрес базы ракет игрока
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Это указывает страницу базового адреса для графики Player/Missile. При работе графики P/M с разрешением в две строки значение PMBASE должно начинаться с границы 1K. При работе графики P/M с разрешением в одну строку значение PMBASE должно начинаться с границы 2K.
ТЕНЬ: 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 .
Ожидание горизонтальной синхронизации
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Этот регистр позволяет программам синхронизироваться с дисплеем. Запись в этот регистр останавливает программу 6502 до конца текущей строки сканирования. Такое поведение обычно используется во время прерываний списка отображения для создания чистых переходов/изменений от одной строки сканирования к другой. Записанное значение не имеет значения.
Счетчик вертикальных линий
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Этот регистр отслеживает текущую генерируемую строку сканирования. Возвращаемое значение — это фактическая строка сканирования, деленная на 2. Включаются пустые строки, генерируемые в начале отображения. Значение для NTSC будет находиться в диапазоне от 0 до 130 для NTSC и от 0 до 155 для PAL. Это значение полезно во время прерываний списка отображения для определения вертикального положения экрана.
ТЕНЬ: LPENH $0234
Горизонтальное положение светового пера
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Он содержит горизонтальную цветовую тактовую позицию при нажатии на курок светового пера/светового пистолета. Теневой регистр является рекомендуемым источником для считывания этой информации, поскольку он будет обновляться во время вертикального пробела, гарантируя последовательные и надежные результаты. Программам следует избегать прямого считывания аппаратного регистра, если только программа не уверена, что регистр считывается в момент, гарантирующий правильность значения. Световые пистолеты для Atari функционируют так же, как световые перья, с добавлением оптического увеличителя, позволяющего считывать экран с большего расстояния. Устройство ввода светового пера/светового пистолета требует обычного ЭЛТ, использующего сканирующий электронный луч. Световое перо/световой пистолет не может работать с современными ЖК-телевизорами и мониторами.
ТЕНЬ: LPENV $0235
Вертикальное положение светового пера
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Он содержит значение VCOUNT, полученное при нажатии на курок светового пера/светового пистолета. Теневой регистр является рекомендуемым источником для считывания этой информации, поскольку он будет обновляться во время вертикального пробела, гарантируя последовательные и надежные результаты. Программам следует избегать прямого считывания аппаратного регистра, если только программа не уверена, что регистр считывается в момент, гарантирующий правильность значения. Световые пистолеты для Atari функционируют так же, как световые перья, с добавлением оптического увеличителя, позволяющего считывать экран с большего расстояния. Устройство ввода светового пера/светового пистолета требует обычного ЭЛТ, использующего сканирующий электронный луч. Световое перо/световой пистолет не может работать с современными ЖК-телевизорами и мониторами.
Включение немаскируемого прерывания (NMI)
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
ДЛИ | ВБИ | ПЕРЕЗАГРУЗИТЬ | - | - | - | - | - |
NMIEN включает немаскируемые прерывания. Значения битов:
Особенность | Значение битов | Описание |
---|---|---|
Перезагрузить | 20 долларов | Включить прерывание клавиши сброса |
ВБИ | 40 долларов | Включить вертикальное прерывание пустого интервала |
ДЛИ | 80 долларов | Включить прерывание списка отображения |
Операционная система устанавливает NMIEN на значение по умолчанию $40 hex /64 dec во время процедур включения питания. Процедуры обслуживания NMI сначала проходят через вектор $FFFA hex /65530 dec , который определяет причину, а затем передает управление процедуре обслуживания прерывания.
ДЛИ:
Если бит DLI NMIEN установлен, когда ANTIC встречает инструкцию Display List с установленным битом модификатора DLI, то ANTIC запускает DLI на последней строке сканирования этой строки режима инструкций Display List.
Операционная система не использует 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 будет сигнализировать прерывание Vertical Blank в конце обработки JVB (Jump vertical blank) в конце списка отображения . Операционная система использует Vertical Blank для выполнения различных служебных задач (среди прочего - обновления таймеров, копирования входных значений контроллера в их теневые регистры и копирования содержимого теневых регистров в аппаратные регистры пользовательских чипов).
ОС переходит через VVBLKI ($0222 hex /546 dec ) для начала процедуры обслуживания OS VBI, а процедура OS VBI завершается переходом через VVBLKD ($0224 hex /548 dec ). По умолчанию VVBLKI указывает на вектор перехода OS SYSVBV ($E45F hex /58463 dec ) для начала прерывания вертикального пустого импульса, а VVBLKD указывает на вектор перехода OS XITVBV ($E462 hex /58466 dec ).
Пользовательские программы могут вставлять выполнение пользовательского кода либо до (немедленно), либо после (отложенно) процедур прерывания вертикального пустого интервала операционной системы. Поскольку прерывание вертикального пустого интервала ОС может быть вызвано во время обновления векторов пользовательской программой, операционная система предоставляет процедуру SETVBV ($E45C hex /58460 dec ), которая безопасно обновит векторы VVBLKI или VVBLKD, чтобы указать на новую процедуру:
Если флаг CRITIC ($42 hex /66 dec ) не равен нулю, выполнение прерывания Deferred Vertical Blank подавляется независимо от адресов в векторах. Значение CRITIC по умолчанию, 0, позволяет выполнять как Immediate, так и Deferred Vertical Blank Interrupts.
Сброс немаскируемого прерывания (NMI)
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Любое значение, записанное в NMIRES, сбрасывает биты в NMIST, которые указывают причину последнего немаскируемого прерывания. Это используется кодом диспетчеризации прерываний в операционной системе, и обычно не было бы причин для пользовательской программы писать здесь.
Состояние немаскируемого прерывания (NMI)
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
ДЛИ | ВБИ | ПЕРЕЗАГРУЗИТЬ | - | - | - | - | - |
Процедура диспетчеризации немаскируемых прерываний операционной системы считывает этот регистр, чтобы определить причину прерывания и, следовательно, какую процедуру обслуживания следует выполнить.
Значения битов:
Список отображения — это список инструкций, указывающих ANTIC, как генерировать отображение. Данные, обрабатываемые этой «программой» списка отображения, — это экранная память. Выходные данные — это графический дисплей. Виды графики на выходе (текст против адресуемых пикселей) определяются инструкциями в списке отображения.
Список отображения и данные отображения записываются в ОЗУ процессором. ANTIC считывает инструкции списка отображения, экранную память и информацию о наборе символов из ОЗУ, используя технику, известную как прямой доступ к памяти (DMA) . Задача программы на языке BASIC или 6502 — инициализировать дисплей — настроить инструкции списка отображения, организовать экранную память (и набор символов, если применимо), а затем указать ANTIC запустить дисплей. После этого ANTIC автоматически берет на себя генерацию экранного дисплея. Это позволяет 8-битным компьютерам Atari создавать сложные смешанные режимы отображения без прямого вмешательства процессора. Другие платформы, даже разработанные намного позже, не могут смешивать графические режимы на одном дисплее или делать это без сложных прерываний процессора.
ANTIC обрабатывает инструкции в списке отображения, считывает память экрана (и данные набора символов, если применимо), преобразует эту информацию в поток графических данных в реальном времени и отправляет этот поток данных на чип CTIA/GTIA , который применяет цвет к графическим пикселям и выводит видео. Вместе эти два чипа обеспечивают 6 текстовых и 8 графических режимов (всего 14). Более продвинутая версия, GTIA , добавляет три альтернативные цветовые интерпретации для каждого графического режима ANTIC, обеспечивая в общей сложности 56 (14 умножить на четыре) графических режимов. Однако только графические режимы ANTIC, основанные на полуцветных тактовых пикселях, способны отображать полную цветовую палитру, предоставляемую новыми цветовыми интерпретациями, и из этих режимов наиболее удобными для использования являются режимы ANTIC 2 (текстовый режим графики ОС 0) и режим ANTIC F (графический режим ОС 8). Таким образом, разумное количество уникальных графических режимов, доступных с использованием внутренних аппаратных возможностей ANTIC + CTIA/GTIA, составляет 20–14 режимов ANTIC + 3 дополнительные цветовые интерпретации для каждого из режимов ANTIC 2 и F.
Дисплей Atari построен как ряд инструкций ANTIC, каждая из которых описывает строку текстового или графического режима последовательно сверху вниз экрана, пока не будет заполнена нужная область отображения. По сути, экран представляет собой вертикальный стек инструкций режима ANTIC. Различные режимы занимают разное количество строк развертки и используют разный объем оперативной памяти. Проектирование дисплея требует подсчета строк развертки каждой инструкции Mode и отслеживания памяти для каждой строки Mode, чтобы предотвратить превышение ограничений ANTIC или видеостандарта. (См. раздел Ограничения).
Смешивание нескольких графических режимов на одном дисплее выполняется просто путем предоставления различных инструкций по режиму символов или карт для желаемого положения на экране. Например, графические режимы операционной системы Atari с 1 по 8 предлагают полноэкранный режим или опцию для четырехстрочного текстового окна в нижней части экрана. Эта функция разделения экрана реализуется с использованием внутренних возможностей ANTIC и его списка отображения без каких-либо прерываний ЦП или специальных манипуляций с видеооборудованием.
ANTIC имеет четыре типа инструкций:
Инструкции режима карты и персонажа имеют дополнительные модификаторы, которые можно включить с помощью инструкции:
ANTIC начинает выполнять Display List, на который указывает 16-битный адрес в регистрах DLISTL/DLISTH ($D402-$D403 hex /54274-54275 dec ). Адресные регистры автоматически увеличиваются ANTIC по мере выполнения каждой инструкции. ANTIC может обновлять только самые нижние 10 бит адреса во время автоматического увеличения, ограничивая display list началом и концом в пределах диапазона адресов 1K.
Регистры также обновляются во время выполнения Display List с помощью JMP (Jump) и JVB (Jump and wait for Vertical Blank) от ANTIC. Эти инструкции загружают полные 16 бит адреса, поэтому их можно использовать для обхода ограничения Display List в 1K.
Адрес также обновляется процедурой прерывания вертикального пустого интервала (VBI) операционной системы с использованием значений из теневых регистров операционной системы SDLSTL/SDLSTH ($0230-$0231 hex /560-561 dec ). Когда включена процедура ОС VBI, прямые обновления регистров ANTIC DLIST процессором или инструкции ANTIC Jump будут перезаписаны ОС во время следующего вертикального пустого интервала. Поскольку обработка VBI является обычным состоянием системы, большинство программ полагаются на это и обновляют только теневые регистры ОС (SDLSTL/SDLSTH $0230-$0231 hex /560-561 dec ) для установки списка отображения.
Эта легенда применима к схемам битов инструкций, представленным ниже:
Значение бита | Описание |
---|---|
0 | Бит должен быть 0 |
1 | Бит должен быть 1 |
? | Бит может быть равен 0 или 1 и используется для определенной цели. |
— | Бит не используется или не должен иметь определенного значения |
этикетка | Обратитесь к более позднему объяснению назначения этого бита. |
Инструкция биты:
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
ДЛИ | СУО | ПРОТИВ | ГС | Режим | Режим | Режим | Режим |
Биты 7:4 являются модификаторами для инструкций Playfield Mode в битах 3:0. Значение бита 1 включает модификатор, а 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 hex /112 dec (или 24 пустых строк сканирования) для этой цели. Пустые строки также полезны для разделения частей пользовательского дисплея с различными целями (например, граница между дисплеем состояния и основной графикой.)
Строки пустого режима не могут содержаться в области прокрутки, поскольку инструкции линии пустого режима по своей сути не имеют битов модификатора точной прокрутки. Однако инструкция пустого режима может использоваться для завершения области вертикальной прокрутки и по-прежнему подвержена ожидаемым изменениям высоты строки сканирования в соответствии со значением вертикальной прокрутки.
Бит модификатора DLI доступен для инструкций пустой строки. Когда бит DLI включен, прерывание списка отображения будет вызвано во время последней пустой строки сканирования инструкции. Поскольку DMA игрового поля не происходит во время пустых строк (происходит только DMA списка отображения и DMA игрока/ракеты (если включено)), пустые строки могут использоваться там, где графика игрового поля не нужна, давая больше времени для процедур прерывания списка отображения, изменяющих регистры цвета или позиции игрока/ракеты.
ДЛИ | СУО | ПРОТИВ | ГС | Режим | Режим | Режим | Режим |
---|---|---|---|---|---|---|---|
0 | ? | 0 | 0 | 0 | 0 | 0 | 1 |
Когда значение Mode равно 1, ANTIC выполняет Jump в своей программе (список отображения). Следующие два байта в списке отображения загружаются в регистры ANTIC DLISTL/DLISTH ($D402-$D403 hex /54274-54275 dec ), изменяя точку выполнения следующей инструкции.
Существует два вида прыжков:
Регистры DLIST также обновляются процедурой прерывания вертикального пробела (VBI) операционной системы с использованием значений в теневых регистрах SDLSTL/SDLSTH (0230-0231 hex /560-561 dec ). Когда включена процедура ОС VBI, прямые обновления регистров ANTIC DLIST процессором или инструкции перехода ANTIC будут перезаписаны ОС во время следующего вертикального пробела. Это означает, что инструкция ANTIC JVB (переход и ожидание вертикального пробела), которая указывает недопустимый адрес (или допустимый адрес, отличающийся от значения теневого SDLST), не оказывает реального влияния на дисплей.
Аргумент JVB обычно указывает на начало того же списка отображения, но он также может указывать на другой список отображения, так что цепочка списков отображения выполняется после последовательных вертикальных пробелов. Конечно, чтобы дать ANTIC контроль над началом следующего списка отображения, прерывание OS Vertical Blank должно быть отключено, чтобы предотвратить перезапись аппаратных регистров ANTIC значениями теневых регистров.
ДЛИ | СУО | ПРОТИВ | ГС | Режим | Режим | Режим | Режим |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Ниже приведен список инструкций графического режима 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, на следующее большее значение.
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
ДЛИ | СУО | ПРОТИВ | ГС | ? | ? | ? | ? |
Биты 7:4 являются модификаторами для инструкций режима игрового поля в битах 3:0. Значения инструкций режима игрового поля находятся в диапазоне от $02 до $0F. Значение бита модификатора 1 включает модификатор, а 0 отключает модификатор.
Bit4: значение позиции $10, управляет горизонтальной прокруткой игрового поля.
При включении горизонтальной прокрутки ANTIC извлекает больше байтов экранной памяти, чем отображается, чтобы показать частично прокрученные байты дисплея в начале и конце строки. Если дисплей находится в узком режиме, ANTIC извлекает количество байтов экрана, необходимое для нормального режима. Если дисплей находится в нормальном режиме, ANTIC извлекает количество байтов экрана, необходимое для широкоэкранного режима. В широкоэкранном режиме ANTIC не извлекает никаких дополнительных байтов экрана. Прокрутка в широкоэкранном режиме приведет к смещению пустых данных в прокручиваемую область. Это не проблема, поскольку это происходит в области пересканирования, которая не видна на обычном дисплее NTSC/PAL.
Bit5: значение позиции $20, управляет вертикальной прокруткой режима игрового поля.
Область вертикальной прокрутки на дисплее определяется установкой бита VS ($20) на последовательную серию строк режима ANTIC в списке отображения. Первая строка режима без установленного бита VS становится концом области прокрутки и используется как буферная строка для предоставления новой информации для прокрутки вверх в нижнюю часть области прокрутки.
Бит 6: значение позиции $40, загружает новый адрес начала экранной памяти для текущей строки режима игрового поля.
Опция LMS загружает адрес сканирования экранной памяти ANTIC с 16-битным значением в двух байтах, следующих за инструкцией. Указанный режим Character или Map начнет отображать байты с этого адреса. Опция LMS должна появиться в первой строке инструкции Playfield Mode (не в пустой строке) в списке отображения, чтобы инициализировать ANTIC для начала чтения в начале экранной памяти. Большинство полноэкранных режимов, сгенерированных операционной системой, будут иметь только одно вхождение модификатора LMS, присутствующего в списке отображения . ANTIC автоматически увеличит свой адрес LMS в конце каждой строки режима, готовясь к следующей строке. Пока экранная память не пересекает границу 4 КБ, модификатор LMS не нужен в последующих инструкциях Playfield Mode.
Полноэкранные дисплеи с использованием режимов карты игрового поля E или F будут иметь второе появление модификатора LMS в инструкции карты около середины экрана, поскольку для полного отображения требуется более 4 КБ экранной памяти. (Дисплеи режима F включают строки с высоким разрешением в 320 пикселей и режимы отображения GTIA.)
Объединение инструкций Map и Character Mode с битом LMS позволяет свободно устанавливать адрес экранной памяти в адресном пространстве 64 К независимо для каждой строки дисплея . Другими словами, экранная память не обязательно должна быть полностью непрерывной памятью, последовательно сканируемой в направлении более высоких адресов, — только одна строка режима должна быть снабжена достаточным количеством последовательных байтов памяти для соответствия требованиям этого режима, ширины дисплея и функции прокрутки.
Бит7: значение позиции $80 , указывает ANTIC вызвать прерывание, обслуживаемое ЦП, на последней строке сканирования режима игрового поля .
Если в регистре ANTIC NMIEN ( D40E hex /54286 dec ) установлен бит 7 ( $80 ), то на последней строке сканирования строки режима будет запущена процедура прерывания, которая векторизована через адрес VDSLST (200 hex /512 dec ).
Содержимое регистров аккумулятора 6502, X и Y не сохраняется до входа в процедуру DLI. Процедура DLI отвечает за сохранение состояния регистров, используемых во время DLI, а затем восстанавливает исходные значения регистров перед выходом с помощью инструкции RTI. Обычно процедуры помещают значения регистров в стек 6502.
Процедуры DLI обычно короткие и быстрые, они изменяют регистры цвета или позиции игрока-ракеты перед выходом. Однако краткость не требуется. Пока процедура DLI завершается до начала следующей процедуры DLI, процедура DLI может продолжать обновлять значения на нескольких строках сканирования.
Чип ANTIC допускает множество различных режимов и ширины игрового поля. Однако оригинальная операционная система Atari, включенная в компьютеры Atari 800/400, обеспечивает легкий доступ к ограниченному подмножеству этих графических режимов. Режимы игрового поля ANTIC доступны пользователям через Atari BASIC с помощью команды "GRAPHICS", а для некоторых других языков — с помощью похожих системных вызовов. Как ни странно, режимы, напрямую не поддерживаемые оригинальной ОС и BASIC, являются режимами, наиболее полезными для игр. Более поздняя версия ОС, используемая в компьютерах Atari 8-bit XL/XE, добавила поддержку большинства из этих "отсутствующих" графических режимов.
Чип ANTIC использует Display List и другие настройки для создания этих режимов. Любой графический режим в цветовой интерпретации GTIA по умолчанию может быть свободно смешан без вмешательства ЦП путем изменения инструкций в Display List .
Геометрия экрана ANTIC не фиксирована. Аппаратный регистр может указать ANTIC отображать узкое игровое поле (128 цветовых тактов/256 пикселей высокого разрешения в ширину), игровое поле нормальной ширины (160 цветовых тактов/320 пикселей высокого разрешения в ширину) и широкое игровое поле с переразверткой (192 цветовых такта/384 пикселя высокого разрешения в ширину). В то время как высота операционной системы по умолчанию для графических режимов составляет 192 строки развертки, Antic может отображать вертикальную переразвертку высотой до 240 телевизионных строк развертки, создав пользовательский список отображения .
Режим F создает цвета посредством артефактов NTSC и работает аналогично графическим режимам Apple II . Разрешение пикселей составляет 320 по горизонтали, но цветовое разрешение вдвое меньше, поэтому каждая группа из двух пикселей будет «смешиваться» вместе, образуя один цвет, и таким образом могут быть сгенерированы четыре артефактных цвета. Они будут окрашены, если цвет переднего плана и фона установлен на что-то иное, чем черный/белый/серый. Точные цвета, полученные таким образом, различаются в зависимости от различных 8-битных моделей Atari, а также между чипами CTIA и GTIA, поэтому нежелательные артефактные цвета могут возникнуть при запуске программного обеспечения, использующего режим F, на машине, отличной от той, для которой он был разработан. На машинах PAL невозможно получить артефактную окраску, и режим F будет на них монохромным.
Режим F не был широко использован программным обеспечением из-за его высоких требований к памяти (8k) и непоследовательных артефактных цветов, которые не отображались одинаково на каждой модели 8-битного компьютера Atari. Игры, которые используют его, включают графические приключения Sierra, такие как Troll's Tale и Wizard and the Princess , Lode Runner и серию Ultima .
Система отображения видео была разработана с учетом методов и ограничений отображения NTSC. Частота центрального процессора системы и видеооборудование синхронизированы с половиной частоты тактовой частоты NTSC. Следовательно, вывод пикселей всех режимов отображения основан на размере тактовой частоты цвета NTSC, что является минимальным временем, необходимым для обеспечения правильного и постоянного цвета независимо от горизонтального расположения пикселя на экране. Результатом является точный размер пикселя и окраска, которые не отображают дефекты цветового «стробирования» при горизонтальной прокрутке. (Цветовое стробирование — это неприглядные изменения оттенка в пикселях в зависимости от горизонтального положения, которые возникают, когда изменения сигнала не совпадают с тактовой частотой цвета и, таким образом, не предоставляют оборудованию телевизора/монитора достаточного времени для достижения правильного цвета.)
Режим Antic Text | режим ОС | Символов (или байтов) на строку режима (узкая/нормальная/широкая) | Строк сканирования ТВ на строку режима | Цвета | Цвета на матрицу символов | Символы в шрифте | Размер пикселя матрицы (цветовая частота 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 | Высокое разрешение пикселей. Строчные символы отображаются на 2 строки ниже, позволяя использовать нижние выносные элементы. |
4 | 12 (XL ОС) | 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 последовательных байтов для представления символа. Доступны четыре типа рендеринга символов/глифов этих байтов. Каждый режим символов связан с определенным методом рендеринга:
Характерные биты [7:6] | Диапазон символов | Цвет пикселей глифа |
---|---|---|
0 0 = $00 | $00 – $3F | COLPF0 |
0 1 = 40 долларов | 40–7 франков | COLPF1 |
1 0 = 80 долларов | $80 - $BF | COLPF2 |
1 1 = $C0 | $C0 - $FF | COLPF3 |
Символ бит 7 | Пара бит глифа | Цвет пикселя глифа |
---|---|---|
0/1 = 00 долл. США/80 долл. США | 0 0 | КОЛБК |
0/1 = 00 долл. США/80 долл. США | 0 1 | COLPF0 |
0/1 = 00 долл. США/80 долл. США | 1 0 | COLPF1 |
0 = 00$ | 1 1 | COLPF2 |
1 = 80 долларов | 1 1 | COLPF3 |
Режим Antic Map | Режим ОС | Пикселей на линию режима (узкая/нормальная/широкая) | Строк сканирования ТВ на строку режима | Байты на строку режима (узкая/нормальная/широкая) | Бит на пиксель | Цвета | Цветовые тактовые частоты на пиксель |
---|---|---|---|---|---|---|---|
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 (XL ОС) | 128/160/192 | 1 | 16/20/24 | 1 | 2 | 1 |
Д | 7 | 128/160/192 | 2 | 32/40/48 | 2 | 4 | 1 |
Э | 15 (XL ОС) | 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 — это дисплеи Antic Mode F с альтернативной опцией интерпретации цвета, включаемой через регистр GTIA PRIOR ($D01B hex /53275 dec ), затененный GPRIOR ($026F hex /623 dec ). Полное цветовое выражение этих режимов GTIA также может быть задействовано в текстовых режимах Antic 2 и 3, хотя для них также потребуется пользовательский набор символов для достижения практического использования цветов. Для получения дополнительной информации см. GTIA .
Режим Antic Map | Режим ОС | Пикселей на линию режима (узкая/нормальная/широкая) | Строк сканирования ТВ на строку режима | Байты на строку режима (узкая/нормальная/широкая) | Бит на пиксель | Цвета | Цветовые тактовые частоты на пиксель | Примечания |
---|---|---|---|---|---|---|---|---|
Ф | 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 цветовых оттенков одинаковой яркости, заданной фоном, плюс цвет фона. |
До того, как видеодисплеи стали обычной частью пользовательского интерфейса, многие компьютеры использовали телетайп — принтер, обычно с непрерывной подачей бумаги. Пользовательский ввод и генерируемый компьютером вывод печатались на бумаге, подаваемой через принтер. Этот широко понимаемый интерфейс для пользовательского ввода и компьютерного вывода продолжился с введением видеодисплеев, поскольку компьютеры представляли метафору экрана как смотрового окна над воображаемым бесконечным рулоном бумаги. Информация отображается на экране, начиная с верхней части, пока не достигнет нижней части экрана, и когда компьютеру нужно ввести новую информацию, он сдвигает всю экранную информацию вверх, предоставляя пустое место внизу для новой информации и, следовательно, стирая самую верхнюю информацию.
Этот вид прокрутки называется «грубой прокруткой». Она достигается путем перемещения байтов памяти через обозначенную область отображения экрана. Перемещение килобайта (или более) памяти требует больших ресурсов ЦП, и более медленные компьютеры могут не успеть выполнить что-либо еще при обновлении данных экрана. В качестве средства анимации отображения результаты могут быть прерывистыми, когда ЦП не может обновлять память экрана быстрее, чем аппаратное обеспечение дисплея считывает память для генерации видеовыходов. Плавность движения ухудшается, поскольку минимальное количество смещения дисплея равно размеру целого символа. Большинство компьютеров, включая Atari 8-bit, выполняют грубую прокрутку, как описано выше — распространенными примерами являются просмотр длинного листинга программ BASIC или каталога файлов.
Грубая прокрутка, реализованная путем массового перемещения данных, часто является единственным возможным методом прокрутки на большинстве компьютеров. Однако ANTIC обеспечивает прямую аппаратную поддержку вертикальной и горизонтальной, грубой и точной прокрутки, переводя концепцию «просмотрового окна, движущегося по данным» из метафорической иллюзии в буквальную реализацию. Эти функции ANTIC обеспечивают быстрое, плавное, полноэкранное перемещение, требующее незначительного времени ЦП, и, таким образом, освобождают ЦП для другой работы.
Все режимы отображения ANTIC, текстовый и картографический, могут использовать функции аппаратной прокрутки.
Вертикальная грубая прокрутка — самая простая функция для использования. Первая инструкция режима текста или карты в каждом списке отображения всегда включает модификатор инструкции LMS, указывающий начало памяти экрана. При генерации отображения ANTIC автоматически увеличивает указатель сканирования памяти от строки режима до строки режима, чтобы отображать память непрерывно. Таким образом, отображение можно «переместить», просто обновив начальный адрес модификатора LMS; добавление количества байтов, используемых для строки в текущем режиме текста или карты, сдвигает содержимое экрана на одну строку вверх, а вычитание того же количества сдвигает экран вниз. Таким образом, отображение на самом деле является портом просмотра, который перемещается для просмотра различных областей памяти, а не перемещает память в фиксированную карту экрана.
Поскольку счетчик сканирования памяти ANTIC не может автоматически увеличиваться за границу 4K, предел вертикальной прокрутки таким простым способом составляет до 4K движения. Полный экран текста Mode 2, использующий приблизительно 1K, может непрерывно прокручивать высоту четырех экранов, пока не достигнет границы 4K. Аналогично, текстовый дисплей Mode 7 может прокручивать высоту 16 полных экранов.
Естественно, этот тривиальный пример имеет ограниченную полезность. Многие реализации прокрутки прокручивают только часть экрана, в то время как другие разделы остаются фиксированными. Эта проблема решается за счет внутренних возможностей ANTIC Display List . В этой ситуации Display List добавит инструкции Mode с использованием модификаторов LMS в первую строку режима разделов экрана, которые не должны перемещаться, что фактически заблокирует эти части дисплея, пока обновляется адрес модификатора LMS для раздела прокрутки.
Дальнейшее усовершенствование этой концепции использует опцию модификатора LMS на каждой строке, которая прокручивается. Вертикальная прокрутка на этом дисплее требует обновления одного адреса модификатора LMS для каждой строки Mode в области прокрутки. Когда дисплей управляется на этом уровне детализации, границу RAM экрана ANTIC 4K можно легко обойти. Даже в этом худшем случае затраченные усилия ЦП составляют малую часть обработки, необходимой для массового перемещения данных экрана.
Еще одно ограничение, о котором следует знать, заключается в том, что двухбайтовый адрес модификатора LMS не должен обновляться, когда ANTIC обрабатывает LMS. Если ANTIC считывает адрес LMS, пока он частично обновлен, ANTIC отобразит неправильный раздел памяти для этой строки режима. Когда область прокрутки дисплея требует нескольких обновлений адреса LMS, увеличивается вероятность частичного обновления, а также увеличивается вероятность того, что две последующие строки будут отображать одни и те же данные. Программы решают эту проблему несколькими способами — выполняя обновления во время вертикального пробела, отслеживая VCOUNT перед обновлениями или выполняя обновления в прерываниях списка отображения, выполняемых во время участков дисплея вне области прокрутки.
Вертикальная тонкая прокрутка позволяет перемещать область прокрутки по одной строке сканирования для режимов Текст и Карта, высота которых превышает одну строку сканирования. Вертикальная тонкая прокрутка для режимов Карта, высота которых составляет всего одну строку сканирования, логически нецелесообразна. Эффект вертикальной «тонкой» прокрутки для режимов Карта с одной строкой сканирования может быть достигнут с помощью более простого метода грубой прокрутки.
Тонкая прокрутка требует настройки для определения области прокрутки. Это делается путем установки бита модификатора вертикальной прокрутки (VS) в последовательных инструкциях списка отображения. Первая инструкция строки режима без установленного бита VS становится концом области прокрутки и используется как буферная строка для подачи новых строк сканирования для прокрутки вверх в нижнюю часть области прокрутки.
Процесс вертикальной тонкой прокрутки ANTIC работает, просто указывая ANTIC пропустить несколько строк сканирования для первой строки режима области прокрутки. Последующие строки режима в области прокрутки не затрагиваются. Последняя строка области задает нижнюю границу области прокрутки, отображая количество строк сканирования, которые были удалены из первой строки. Это количество строк сканирования контролируется регистром VSCROL. Значение находится в диапазоне от 0 до высоты строки сканирования линии режима ANTIC - 1. Максимальный диапазон значений охватывает тонкую прокрутку 16 строк сканирования от 0 до 15.
При достижении предела точной прокрутки прокрутка продолжается путем сброса значения VSCROL и выполнения грубой вертикальной прокрутки области прокрутки.
Горизонтальная грубая прокрутка требует немного больше усилий, чем вертикальная прокрутка. В то время как горизонтальная прокрутка должна создавать иллюзию перемещения окна просмотра влево и вправо по широкой панорамной сцене, созданной из экранной памяти, автоматическое увеличение сканирования памяти ANTIC противоречит идее о том, что строки экранных данных шире дисплея. Представление экранной памяти в виде длинных горизонтальных линий требует модификатора LMS для каждой инструкции Display List Text или Map Mode в области прокрутки. Горизонтальный шаг достигается путем увеличения или уменьшения всех адресов LMS области прокрутки.
Горизонтальная прокрутка требует той же реализации Display List , что и худший пример, описанный для Vertical Coarse Scrolling. Таким образом, там, где реализована горизонтальная прокрутка, вертикальная прокрутка также поддерживается просто путем изменения значения, увеличивая или уменьшая адреса LMS. Другим преимуществом этой компоновки является то, что легко управлять экранной памятью вокруг граничного предела экранной памяти ANTIC в 4K.
Более подробное обсуждение и ограничения по времени при обновлении адресов модификаторов LMS см. в разделе «Вертикальная грубая прокрутка».
Горизонтальная тонкая прокрутка позволяет перемещать область прокрутки по одному цветовому сигналу для режимов «Текст» и «Карта». Для всех обычных интерпретаций цвета это происходит по цветовому сигналу, а не по пикселям, даже если пиксели больше (или меньше) цветовых сигналов. Режимы ANTIC, использующие альтернативные интерпретации цвета GTIA, должны прокручиваться на целый пиксель GTIA (два цветовых сигнала). Для обеспечения правильной прокрутки пикселей GTIA следует использовать только четные значения. Нечетные значения HSCROL сместят поток пикселей GTIA в другое состояние, которое будет интерпретироваться как другие цвета.
Для тонкой прокрутки требуется настройка для определения области горизонтальной прокрутки. Первый шаг — начать с Display List, используя модификатор инструкции LMS для указания начального адреса каждой строки Mode. Это делается для организации экранной памяти в виде длинных строк данных для отображения. Следующий шаг — установка бита модификатора Horizontal Scroll (HS) во всех инструкциях строки Display List Mode для области прокрутки.
Это количество цветовых часов для сдвига контролируется регистром HSCROL. Максимальный диапазон значений HSCROL охватывает точную прокрутку 16 цветовых часов от 0 до 15. Используемая информация о цветовых часах буферизуется с начала строки режима (текущего указателя сканирования памяти ANTIC) с использованием достаточного количества байтов экранной памяти для удовлетворения 16 цветовых часов. Горизонтальная прокрутка просто указывает ANTIC, сколько цветовых часов он может вывести из буферизованных 16 цветовых часов, начиная с последнего (самого правого) цветового часа буферизованной памяти. Ноль (0) означает отсутствие цветовых часов, выведенных из буфера. 1 означает последний (самый правый) цветовой час буфера. Цветовые часы вставляются на левом краю экрана, заставляя область прокрутки экрана смещаться вправо.
При достижении предела точной прокрутки продолжайте прокрутку, сбросив значение HSCROL и выполнив грубую горизонтальную прокрутку области прокрутки. 16-цветный диапазон тактовой частоты ANTIC позволяет выполнять точную прокрутку нескольких символов текстового режима или пикселей режима карты размером более одного байта. Поэтому обновление адресов LMS может добавлять или вычитать несколько байтов.
Интересное использование поведения сканирования памяти DMA ANTIC допускает стратегию для, по-видимому, длинных горизонтальных расстояний прокрутки, но использует часть реальной требуемой памяти. Как обсуждалось в разделе Горизонтальная грубая прокрутка, автоматическое сканирование памяти ANTIC от строки режима до строки режима противоречит идее о том, что строки экранных данных шире дисплея. Использование памяти, фактически организованной как длинная, горизонтальная, непрерывная серия байтов, требует модификатора LMS для каждой инструкции Display List Text или Map Mode в области прокрутки.
Вместо использования модификатора LMS для каждой строки этот метод использует более «нормальный» список отображения, которому требуется только один модификатор LMS в начале области прокрутки. Увеличение (+1) адреса модификатора LMS заставляет область прокрутки казаться смещенной влево. Однако «новая» информация, которая переместилась в правую сторону области прокрутки, ранее была первым байтом в следующей строке (за исключением последнего байта последней строки — эта информация была полностью за пределами экрана).
Вторая половина этой стратегии требует обновления последнего байта/символа каждой строки в области прокрутки для отображения желаемой новой информации. Для типичного прокручиваемого дисплея это означало бы обновление последнего байта одного или двух десятков строк, что занимает незначительное количество времени при сборке. Таким образом, если этот процесс прокрутки включает полноэкранное текстовое отображение в режиме 2 или режиме 4 (наихудший случай) и использует всю 4K-возможность автоматической адресации экранной памяти ANTIC, то горизонтальная прокрутка может продолжаться таким образом около 3000 шагов; эквивалентно 75 полным экранам.
Однако даже использование памяти 4K не требуется. После того, как все данные с первого полного экрана будут перемещены с дисплея, приложение прокрутки может перестроить первый экран, чтобы он содержал известную точку перехода, так что действие прокрутки может вернуться к первому адресу в блоке без видимых задержек или очевидных прерываний прокрутки.
Тонкая прокрутка эта компоновка требует немного больше планирования. Когда тонкая прокрутка включена в Display List, ANTIC извлекает больше информации, чем требуется строке Mode для отображения. Поскольку каждая строка Mode теперь использует больше памяти, новая информация, прокручиваемая в сторону дисплея, не является байтом/символом, который отображался в начале следующей строки. Однако это не ухудшает процесс прокрутки и просто изменяет значение сложения и вычитания, используемое для определения начала и конца каждой строки дисплея.
ANTIC включает функцию запуска прерывания, обслуживаемого ЦП, в определенных вертикальных позициях на экране. Это встроено в список отображения ANTIC, который предписывает ANTIC запустить прерывание во время последней строки сканирования текущей инструкции режима, и поэтому называется «прерыванием списка отображения». Другие платформы называют это действие « растровыми прерываниями » или « горизонтальными пустыми прерываниями ». Обычной целью является изменение значений, связанных с отображением, в известном месте, чтобы переходы были визуально точными или происходили там, где они не будут конфликтовать с активностью отображения. Возможности включают, но не ограничиваются изменением значений регистра цвета, горизонтальных позиций игрока/ракеты и значений точной прокрутки. Поскольку DLI представляет собой машинный код 6502, выполняемый ЦП, возможен любой вид обработки при условии, что он достаточно короткий, чтобы не конфликтовать с другой активностью, и не превышает последующее прерывание списка отображения. Хорошим примером является опрос контроллера мыши, который должен выполняться чаще, чем 1/60 секунды.
Для правильного запуска прерывания необходимы следующие условия:
При обновлении значений управления дисплеем необходимо следить за тем, чтобы ANTIC в данный момент их не использовал. Если ANTIC обрабатывает список отображения, содержащий инструкцию с модификатором DLI, то при изменении адреса VDSLST может быть отправлено прерывание, что может привести к сбою системы. Если список отображения использует несколько прерываний, а прерывания включены в NMIEN после того, как ANTIC уже передал инструкции режима с модификаторами DLI, то прерывания списка отображения будут запущены не по порядку, что приведет к неожиданным результатам.
Разумная последовательность событий для установки списка отображения с использованием прерываний списка отображения :
Программа, тесно интегрированная с циклом отображения и знающая положение электронного луча относительно текущего отображения, может обойти отключение Display List 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 ; Сохранить аккумулятор в стеке LDA # $9C ; Загрузить светло-голубой (цвет $9, яркость $C) STA WSYNC ; Ожидание синхронизации до конца строки развертки STA COLBK ; Установка фона PLA ; Восстановление аккумулятора из стека RTI ; Конец.
Большая часть графических функций Player/Missile находится в области чипа CTIA/GTIA . CTIA/GTIA управляет положением, размером, цветом, приоритетом и обнаружением столкновений для графических объектов Player/Missile, но его фактическая реализация рендеринга формы не идет дальше однобайтового шаблона на объект, представленного равномерно на всех строках сканирования. (Шаблоны задаются в регистрах графических шаблонов GRAF* CTIA/GTIA .) В конце концов, сам по себе CTIA/GTIA генерирует объекты Player/Missile только как шаблоны вертикальных полос на экране.
Конструкция ANTIC включает возможность DMA, чтобы он мог считывать свои графические данные Display List и Playfield. Эта возможность прямого доступа к памяти используется для считывания данных от имени CTIA/GTIA и обновления регистров графических шаблонов GRAF* по мере генерации каждой строки сканирования дисплея. Таким образом, ANTIC предоставляет объектам Player/Missile шаблоны, которые изменяются по высоте экрана и поэтому выглядят как традиционная графика «спрайта».
Биты 2 и 3 регистра DMACTL ANTIC (затененные SDMCTL) управляют извлечением ANTIC данных игрока/ракеты для обновления регистров графических шаблонов CTIA/GTIA.
Значения битов управления DMA игрока/ракеты DMACTL (биты [3:2]):
Бит 4 (значение 10 hex /16 dec ) регистра DMACTL управляет частотой получения новых данных. ANTIC извлекает данные и обновляет CTIA/GTIA каждую строку сканирования. Настройки разрешения DMACTL влияют на то, как часто ANTIC увеличивает свой внутренний указатель DMA для получения новых данных. Графика Player/Missile с разрешением Single Line увеличивает адрес DMA на каждой строке сканирования, а разрешение Double Line увеличивает адрес DMA с каждой четной строкой сканирования. Значения бита DMACTL для разрешения Player/Missile:
CTIA/GTIA также должны быть специально включены для получения графических данных Player/Missile через DMA для корректного представления объектов на экране. См. регистр GRACTL CTIA/GTIA для получения дополнительной информации.
Расположение памяти, считываемой ANTIC для графики Player/Missile, контролируется регистром PMBASE. Это значение PMBASE обеспечивает начальную страницу базового адреса для графики Player/Missile. При работе графики P/M с разрешением в две строки значение PMBASE должно начинаться с границы 1K. При работе графики P/M с разрешением в одну строку значение PMBASE должно начинаться с границы 2K. Карты памяти для графических режимов Player/Missile:
Разрешение двойной строки (1 байт на 2 строки сканирования, 128 байт на каждый объект) относительно PMBASE x 100 hex /256 dec :
НЕИСПОЛЬЗОВАННЫЙ | Ракеты 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 |
шестигранник | +$17F | +$1FF | +$27F | +$2FF | +$37F | +$3FF |
Разрешение одной строки (1 байт на строку сканирования, 256 байт на каждый объект) относительно PMBASE x 100 hex /256 dec :
НЕИСПОЛЬЗОВАННЫЙ | Ракеты 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 строк сканирования данных памяти Player/Missile в карте памяти. При разрешении в две строки игнорируются первые и последние четыре байта, при разрешении в одну строку — первые и последние восемь байтов.
Поскольку Player/Missiles являются наложением, независимым от графики Playfield, и визуализируются в области overscan, вертикальные координаты для данных Player/Missile должны быть смещены для выравнивания объектов с Playfield. В графических режимах операционной системы с 192 строками сканирования по умолчанию вертикальные координаты данных Player/Missile смещены относительно начала Player/Missile в памяти, как показано ниже. Записи Overscan показывают первое и последнее использованное смещение данных Player/Missile:
Игровое поле | П/М Двойная линия | П/М Одна линия |
---|---|---|
(вверху) Неиспользованный | +$00 hex /0 dec до +$03 hex /3 dec | +$00 hex /0 dec до +$07 hex /7 dec |
Начать сканирование сверху | +$04 гекс /4 дек | +$08 гекс /8 дек |
Графическая строка 0 | +$10 гекс. /16 дек. | +$20 гекс. /32 дек. |
Графическая строка 191 | +$6F гекс /111 дек | +$DF hex /223 дек. |
Конец оверскана | +$7B hex /123 dec | +$F7 hex /247 dec |
(внизу) Неиспользованный | +$7C hex /124 dec в +$7F hex /127 dec | +$F8 hex /248 dec в +$FF hex /255 dec |
Вертикальный размер всего игрового поля варьируется от 0 до 240 строк развертки — это зависит от количества строк, которые ANTIC запрограммирован отображать в соответствии со списком отображения . ANTIC начинает генерировать строки развертки с телевизионной строки развертки 8 и продолжает до строки 247, что в общей сложности составляет 240 строк развертки.
Горизонтальная ширина дисплея Playfield может быть установлена на 256, 320 или 384 пикселей, что соответствует 128, 160 или 192 цветовым тактам. В самом широком режиме фактически видны только 352 пикселя (176 цветовых тактовых тактов). См. DMACTL.
Горизонтальная тонкая прокрутка перемещает область прокрутки до 16 цветовых часов. См. HSCROL.
Режимы GTIA Map должны горизонтально прокручиваться с шагом размером в целый пиксель (2 цветовых такта), а не в один цветовой такт. См. HSCROL и обсуждение, Горизонтальная тонкая прокрутка
Вертикальная тонкая прокрутка перемещает область прокрутки на количество строк сканирования в одной строке режима области прокрутки, максимум до 16 строк сканирования. См. VSCROL.
Хотя счетчик программ Display List ANTIC является 16-битным, только нижние 10 бит изменяются во время нормального (т. е. последовательного) выполнения Display List. Это означает, что Display List требует инструкцию JMP (Jump) для пересечения границы 1K. Это не является серьезным ограничением, поскольку размер одного Display List обычно варьируется от 32 до 202 байт и практически никогда не превышает 720 байт. Поскольку он может быть расположен в любом месте памяти, не составляет труда найти достаточно большое место в памяти, которое не пересекает границу 1K.
Регистр сканирования памяти, регистр, адресующий данные, хранящиеся в памяти экрана, является 16-битным, но только нижние 12 бит изменяются, когда ANTIC последовательно сканирует видеопамять. Это означает, что для списка отображения требуется инструкция линии режима, включающая опцию LMS (Load Memory Scan), где память экрана пересекает границу 4 КБ. Графические режимы ANTIC E и F требуют более 7,5 КБ памяти экрана для полноэкранного отображения. Списки отображения для этих дисплеев требуют опции LMS, добавленной к инструкции режима около середины дисплея, где память экрана пересекает границу 4 КБ. Граница 4 КБ не может быть пересечена в середине строки графического режима, но только между концом одной строки режима и началом следующей строки. Другими словами, память для предыдущей строки режима заканчивается точно на последнем байте блока 4 КБ, а следующая строка режима начинается точно на первом байте следующего блока 4 КБ.
Набор символов может располагаться в любом месте памяти (см. CHBASE), но в зависимости от текстового режима ANTIC начальный адрес должен быть выровнен по границе 512 байт или 1 КБ.
Карта памяти Игрок/Ракета может располагаться в любом месте памяти (см. PMBASE), но, в зависимости от разрешения, начальный адрес должен соответствовать границе 1 КБ или 2 КБ (см. также DMACTL).
This section may contain an excessive amount of intricate detail that may interest only a particular audience.(May 2019) |
Определенные комбинации значений в списке отображения могут давать неожиданные результаты. Кроме того, некоторые действия ANTIC имеют критический тайминг. Изменения регистров за пределами надлежащих временных окон могут привести к отложенному эффекту или неожиданным результатам. Некоторые из этих ситуаций можно использовать для интересных эффектов, а другие приводят к искажениям отображения.
Один из методов использования расширенных цветовых режимов GTIA без больших требований к памяти режима ANTIC F заключается в том, чтобы заставить ANTIC повторить каждую строку данных один или несколько раз, используя инструкции строки режима с модификатором LMS для повторного отображения тех же данных экрана на нескольких строках сканирования. Это обеспечивает более низкое вертикальное разрешение, где каждый пиксель имеет высоту в 2 или более строк сканирования, но имеет более высокие накладные расходы DMA из-за того, что ANTIC необходимо повторно считывать те же байты из памяти экрана. Вместо использования повторяющихся модификаторов LMS можно использовать особенность вертикальной прокрутки для создания режима с четырьмя строками сканирования, который отображает пиксели с использованием режимов интерпретации цвета высокого разрешения или GTIA.
Вертикальная прокрутка обычно не считается полезной для режима ANTIC F, высота которого составляет одну строку сканирования. Однако, если вертикальная прокрутка включена для инструкции Mode F Display List , а регистр VSCROL установлен на 13, то счетчик строк ANTIC будет считать от 13 до 0 (четыре строки сканирования — 13, 14, 15, 0). При этом ANTIC выводит одну и ту же строку графики для каждой строки сканирования из своего внутреннего буфера без повторного считывания той же экранной памяти. В конце области вертикальной прокрутки необходимо сбросить VSCROL на 3, что позволит ANTIC считать от 0 до 3 (четыре строки сканирования). Конечным результатом является отображение режима F, где строки имеют высоту в четыре строки сканирования, а не одну, но с накладными расходами DMA только одного чтения данных экранной памяти, происходящего на первой строке сканирования.
Режимы ANTIC Map Modes 8 и 9 будут повреждены, если они следуют сразу за горизонтально прокручиваемой строкой другого режима с использованием нормальной или широкой ширины игрового поля. Это происходит, если строка Mode 8 или 9 горизонтально прокручивается или нет, но результаты повреждения в каждом случае различны. Проблема возникает для определенных значений HSCROL, из-за чего ANTIC неправильно выводит пиксели и смещает строку Mode 8-9.
Ошибка отсутствует при использовании узкого игрового поля.
Поскольку значения HSCROL, вызывающие проблему, больше 7, проблему можно предотвратить, когда режим 8 или 9 НЕ использует горизонтальную прокрутку, ограничив сдвиги HSCROL до 0–7 цветовых часов и обновив адрес LMS списка отображения для горизонтальной грубой прокрутки с меньшим шагом. Эта стратегия решает все случаи во всех текстовых режимах и всех режимах карт от A до F, которые генерируют 8 или менее цветовых часов на байт экранной памяти.
Список отображения не должен быть создан с помощью инструкции высокого разрешения (Mode F) в строке сканирования 247 — последней отображаемой строке сканирования. Если биты ширины игрового поля DMACTL не равны 00, то ANTIC не будет правильно генерировать вертикальную синхронизацию, что может привести к искажению изображения. В любом случае, этого легко избежать, поскольку это непрактичное расположение списка отображения, поскольку оно помещает строку режима в область пересканирования, где она обычно не видна.
Модификатор списка отображения горизонтальной тонкой прокрутки заставляет ANTIC извлекать дополнительную экранную память, соответствующую следующей большей ширине игрового поля, которая предоставляет данные, необходимые для прокрутки на дисплее. Поскольку нет игрового поля шириной больше, чем широкое игровое поле, у ANTIC нет дополнительных данных для тонкой прокрутки. ANTIC представляет поддельные данные для области, освобожденной смещенным экраном — на левой стороне дисплея будет смещен цвет фона, а на правой стороне в конце диапазона прокрутки появятся несколько цветных часов случайных данных. Эти пиксельные данные обычно не заметны, так как это происходит в области сканирования за пределами экрана, где они обычно не видны. Однако, если эти ложные пиксели игрового поля пересекают пиксели игрока/ракеты, будет отмечено столкновение. Решение для игроков/ракет, которые переместились в область сканирования за пределами экрана, — сбросить их позиции на ноль, чтобы удалить их с дисплея и таким образом предотвратить ложные столкновения.