Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Микропроцессор Atari ANTIC на материнской плате Atari 130XE

Контроллер алфавитно-цифрового телевизионного интерфейса [1] ( ANTIC ) - это ASIC LSI, предназначенная для создания компьютерной 2D-графики для отображения на экране телевизора или дисплея компьютера . Под руководством Джея Майнера чип был разработан в 1977-1978 годах Джо Декюром , Франсуа Мишелем и Стивом Смитом [2] для 8-битного семейства домашних компьютеров Atari, впервые выпущенных в 1979 году, и был запатентован Atari, Inc. в 1981 г. [3] ANTIC также используется в Atari 5200 система видеоигр, выпущенная в 1982 году, которая использует большую часть того же оборудования, что и 8-битные компьютеры.

ANTIC отвечает за создание графики игрового поля, которая доставляется в виде потока данных на соответствующий чип CTIA / GTIA . CTIA / GTIA обеспечивает окраску лопая графики, и отвечает за добавление наложенных друг на друга спрайтов называют «графикой игрока / ракета» по Atari.

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

Особенности [ править ]

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

ANTIC использует DMA для чтения программы, называемой « Список отображения », управляющей этими функциями Playfield:

  • 14 различных графических режимов игрового поля
    • 6 символьных режимов
      • 4 типа рендеринга шрифтов / глифов
    • 8 режимов карты
  • Вывести переменное количество пустых строк развертки
  • Режимы Playfield Text и Map можно смешивать на экране
  • Регулируемая высота экрана до вертикальной развертки
  • Грубая горизонтальная и вертикальная прокрутка
  • Определите разделы экрана, на которых выполняется горизонтальная и / или вертикальная точная прокрутка
  • Запуск программы обработки прерывания, обслуживаемой ЦП, которая называется «Прерывание списка отображения», на определенных строках развертки (также называемое « прерыванием растра » или « прерыванием горизонтального пустого поля » в других системах)
  • Запуск программы обработки прерывания, обслуживаемой ЦП, которая называется «прерывание по вертикали при пустом поле», в конце кадра дисплея.

Другие функции на основе регистров:

  • Регулируемая ширина экрана до горизонтальной развертки
  • Определите расстояние перемещения для горизонтальной и вертикальной точной прокрутки
  • Предоставляет информацию о вертикальном расположении экрана электронного луча в реальном времени.
  • Считывает световое перо горизонтальные / вертикальные координаты (только ЭЛТ)
  • Мягкий, повторно определяемый набор символов.
  • Регулируемое отображение инвертированных видеосимволов.
  • Символы могут отображаться вертикально.
  • Управляйте ориентированными на дисплей прерываниями «Вертикальное пустое поле» и «Список отображения», а также прерыванием клавиши сброса.
  • Выполняет DMA для CTIA / GTIA для создания графики игрока / ракеты (также известной как спрайты )
  • Нефиксированная оперативная память. Это позволяет размещать ОЗУ для графических функций практически в любом месте 16-разрядного диапазона адресов памяти. Это касается:
    • Показать списки.
    • Графические данные игрового поля
    • Шрифты набора символов
    • Графические данные игрока / ракеты

Версии [ править ]

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

  • C012296 - NTSC: используется в компьютерах Atari 400, 800 и 1200XL. [4]
  • C014887 - PAL / SECAM: используется в компьютерах Atari 400 и 800.
  • C021697 - NTSC: используется в моделях Atari 600XL, 800XL и XE.
  • C021698 - PAL / SECAM: используется в моделях Atari XL и XE.

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

  • C020577 - CGIA [5]
  • C021737 - KERI [5] [6] [7]

Распиновка [ править ]

Распиновка Atari ANTIC (C012296)

Регистры [ править ]

8-битные компьютеры Atari и консоль Atari 5200 отображают чип ANTIC на шестнадцатеричную страницу $ D4xx .

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

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

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

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

DMACTL $ D400 Запись [ править ]

ТЕНЬ: SDMCTL $ 022F

Управление прямым доступом к памяти (DMA)

DMACTL контролирует поведение DMA ANTIC для графики Playfield и Player-Missile ( спрайта ).

Битовые значения ширины игрового поля :

Также см. Бит DMA списка отображения относительно отображения игрового поля.

Значения битов DMA Player / Missile :

Функция DMA Player / Missile в ANTIC считывает байты из памяти и доставляет данные для обновления регистров графических шаблонов CTIA / GTIA GRAFP0, GRAFP1, GRAFP2, GRAFP3 и GRAFM, ​​освобождая CPU от создания графики Player / Missile ( спрайта ). Эти биты включают передачу ANTIC данных игрока и данных о ракетах в CTIA / GTIA. CTIA / GTIA также должен быть настроен для получения данных через его регистр GRACTL, чтобы DMA Player / Missile функционировал должным образом .

Когда Player DMA включен, Missile DMA автоматически выполняется, чтобы поддерживать согласованность времени DMA, но данные не доставляются в регистр Missile GRAFM.

Когда этот параметр включен, DMA игрока / ракеты происходит в каждой строке сканирования на видимом дисплее - от строки сканирования 8 до 247. Следовательно, данные игрока / ракеты в карте памяти (см. PMBASE ANTIC ) выше и ниже этих счетчиков строк сканирования не используются и не отображается.

Значения битов разрешения игрока / снаряда :

  • $ 00 - Двойное разрешение строки. ANTIC обновляет свой адрес выборки DMA через каждую вторую строку сканирования и обновляет регистры CTIA / GTIA Player / Missile Graphics каждую строку сканирования, так что каждый байтовый шаблон Player / Missile имеет высоту в две строки сканирования. Когда разрешение двойной строки включено, регистр CTIA / GTIA VDELAY ($ D01C hex / 53276 dec ) работает, маскируя обновления на четных строках развертки, что приводит к смещению битовой комбинации отдельных игроков и ракет на одну строку развертки вниз.
  • $ 10 - Разрешение одной строки. Выборка DMA и обновление регистра Player / Missile происходит в каждой строке сканирования. CTIA / GTIA регистр VDELAY ($ D01C шестигранный / 53276 Декабря ) , который обновляет маски на четных строках развертки эффективно уменьшает разрешение однолинейного разрешения двойной линии.

Обновления регистров ANTIC DMA и Player / Missile происходят на каждой строке сканирования независимо от разрешения. Когда действует разрешение двойной строки, память Player / Missile может быть изменена между избыточными выборками DMA, таким образом изменяя шаблон, отправляемый в регистры GRAF *, и производя очевидное разрешение Single Line Player / Missiles.

Список отображаемых значений битов DMA :

  • $ 00 - Отключить список отображения.
  • $ 20 - Включить список отображения.

Для отображения игрового поля необходимо, чтобы был включен DMA списка отображения и указана ширина игрового поля. Если любое из значений равно нулю, то отображение игрового поля не создается.

CHACTL $ D401 Запись [ править ]

ТЕНЬ: ДИАГРАММА $ 02F3

Управление персонажем

CHACTL управляет отображением символов.

Значения управляющих битов символов выполняют следующие действия:

Биты CHACTL Video Inverse и Video Blank влияют на отображение символов в текстовых режимах ANTIC 2 и 3, для которых установлен высокий бит (символы от $ 80 до $ FF). Переключение значений битов CHACTL позволяет мигать или гасить эти символы глобально для всего дисплея.

Совместное использование инверсии видео и пустого видео приводит к отображению инвертированных видеосимволов в виде инверсного пустого пространства. Биты инверсии видео и пустого видео работают в режимах ANTIC 2 и 3 и не влияют на другие текстовые режимы 4, 5, 6 и 7.

Бит отражения видео влияет на все текстовые режимы. Отражение видео полезно в ситуациях, когда требуются эффекты зеркалирования без определения нового набора символов. Идеальное использование - карточные игры, в которых правильно отображаются лицевые стороны карт и масти перевернуты. Поскольку это вертикальное зеркальное отражение данных глифа перед его использованием, эффект кажется несовместимым для нисходящих элементов ANTIC Mode 3 с байтами 6 и 7 глифа, появляющимися в нижней части области нисходящего элемента.

DLISTL / DLISTH $ D402 / $ D403 Запись [ редактировать ]

ТЕНЬ: SDLSTL / SDLSTH $ 0230 / $ 0231

Указатель списка отображения

ANTIC начинает выполнение дисплей списка , на который указывает 16-разрядного адреса в регистрах DLISTL / DLISTH ($ D402- $ D403 шестигранной / 54274-54275 разл ). Регистры адресов обновляются во время выполнения списка отображения с помощью ANTIC JMP (переход) и JVB (переход и ожидание вертикального пробела). Адрес также обновляется процедурой прерывания по вертикали (VBI) операционной системы с использованием значений в теневых регистрах SDLSTL / SDLSTH ($ 0230- $ 0231 шестнадцатеричный / 560-561 десятичный ).

Когда включено прерывание ОС по вертикали, прямые обновления регистров ANTIC DLIST ЦП или инструкции ANTIC Jump будут перезаписаны ОС во время следующего вертикального пробела значениями в теневых регистрах. Следовательно, перелистывание страниц, реализованное списками отображения, которые указывают на следующий список отображения в серии, не будет работать должным образом, если не отключено прерывание вертикального пустого экрана .

HSCROL $ D404 Запись [ править ]

Горизонтальная тонкая прокрутка

Этот регистр определяет расстояние сдвига горизонтальной точной прокрутки в цветных часах. Только младшие 4 бита имеют значение. Диапазон значений в 16 цветовых часов позволяет ANTIC сдвигать текст в режиме 2 на четыре символа и текст в режиме 6 на два символа, прежде чем потребуется грубая прокрутка.

Когда горизонтальная прокрутка включена для строки режима, ANTIC выбирает следующий приращение размера, превышающее текущую ширину экрана, чтобы предоставить буфер данных для управления горизонтальной прокруткой. При отображении Narrow width ANTIC выбирает RAM экрана, необходимую для нормальной ширины. Аналогично, для нормальной ширины ANTIC выбирает оперативную память экрана, необходимую для широкой.

ANTIC буферизует первые несколько байтов, считываемых из экранной памяти, которых достаточно для покрытия диапазона движения часов с 16 цветами. (От двух до четырех байтов в зависимости от режима отображения.) Значение HSCROL определяет, сколько цветовых тактов должно выводиться из буферизованных данных, начиная с последнего (самого правого) цветового такта последнего буферизованного байта и продвигаясь влево. Когда HSCROL равен 0, из буфера не выводятся цветовые тактовые импульсы, поэтому первый отображаемый байт экрана является первым байтом после буферизованных данных. По мере увеличения HSCROL больше цветовых тактов с конца (правой стороны) буферизованных данных добавляется к левому краю дисплея, вызывая смещение тонкой прокрутки для перемещения содержимого экрана вправо.

Режим ANTIC F (высокое разрешение, 1/2 пикселя цветовой синхронизации) можно прокручивать только на два пикселя за раз, потому что HSCROL определяет цветовую частоту.

Режимы ANTIC, в которых используются альтернативные интерпретации цветов GTIA, должны прокручиваться на весь пиксель GTIA (два цветовых такта). Для правильной прокрутки следует использовать только четные значения. Нечетные значения HSCROL переводят поток пикселей в другое состояние, которое GTIA интерпретирует как разные цвета.

В отличие от многих платформ, горизонтальная прокрутка Atari визуально согласована и свободна от артефактов «стробирования» цвета из-за того, что размер пикселя Atari совпадает с синхронизацией цветовой синхронизации, необходимой для точной цветопередачи.

VSCROL $ D405 Запись [ править ]

Вертикальная тонкая прокрутка

Этот регистр определяет расстояние тонкой вертикальной прокрутки в строках развертки. Младшие 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 Запись [ править ]

Адрес ракетной базы игрока

Это указывает страницу базового адреса для графики игрока / ракеты. Когда работает графика P / M с двухстрочным разрешением, значение PMBASE должно начинаться с границы 1K. Когда работают графики P / M с однострочным разрешением, значение PMBASE должно начинаться с границы 2K.

CHBASE $ D409 Запись [ править ]

ТЕНЬ: CHBAS $ 02F4

Базовый адрес персонажа

Это указывает страницу базового адреса для набора символов. Режимы ANTIC 2, 3, 4 и 5 используют 128 символов в наборе символов и требуют, чтобы значение CHBASE начиналось на границе 1K. В режимах ANTIC 6 и 7 используется 64 символа, поэтому значение CHBASE должно начинаться с границы в 512 байт.

Обычное значение по умолчанию $ E0 шестигранных / 224 Декабрь для набора символов в ПЗУ на $ E000 шестигранного / 57344 деса .

WSYNC $ D40A Запись [ править ]

Дождитесь горизонтальной синхронизации

Этот регистр позволяет программам синхронизироваться с дисплеем. Запись в этот регистр останавливает программу 6502 до конца текущей строки развертки. Это поведение обычно используется во время прерываний списка отображения для создания четких переходов / изменений от одной строки развертки к другой. Написанное значение неважно.

VCOUNT $ D40B Читать [ редактировать ]

Счетчик вертикальной линии

Этот регистр отслеживает генерируемую в данный момент строку развертки. Возвращаемое значение представляет собой фактическую строку развертки, деленную на 2. Включены пустые строки, созданные в начале отображения. Значение для NTSC будет варьироваться от 0 до 130 для NTSC и от 0 до 155 для PAL. Это значение полезно во время прерываний списка отображения для определения вертикального положения экрана.

PENH $ D40C Читать [ править ]

ТЕНЬ: ЛПЕНЬ $ 0234

Горизонтальное положение светового пера

Он содержит горизонтальное положение цветных часов при нажатии светового пера / светового пистолета. Теневой регистр является рекомендуемым источником для чтения этой информации, так как он будет обновляться во время вертикального бланка, что гарантирует согласованные и надежные результаты. Программы должны избегать чтения аппаратного регистра напрямую, если программа не уверена, что регистр читается в то время, когда значение является допустимым. Световые пушки для Atari работают так же, как световые ручки, с добавлением оптической лупы, позволяющей читать с экрана с большего расстояния. Для устройства ввода светового пера / световой пушки требуется обычный ЭЛТ, использующий сканирующий электронный луч. Световое перо / световой пистолет не может работать с современными ЖК-телевизорами и мониторами.

PENV $ D40D Читать [ править ]

ТЕНЬ: LPENV $ 0235

Вертикальное положение светового пера

Он содержит значение VCOUNT, полученное при нажатии светового пера / светового пистолета. Теневой регистр является рекомендуемым источником для чтения этой информации, так как он будет обновляться во время вертикального бланка, что гарантирует согласованные и надежные результаты. Программы должны избегать чтения аппаратного регистра напрямую, если программа не уверена, что регистр читается в то время, когда значение является допустимым. Световые пушки для Atari работают так же, как световые ручки, с добавлением оптической лупы, позволяющей читать с экрана с большего расстояния. Для устройства ввода светового пера / световой пушки требуется обычный ЭЛТ, использующий сканирующий электронный луч. Световое перо / световой пистолет не может работать с современными ЖК-телевизорами и мониторами.

NMIEN $ D40E Написать [ править ]

Включение немаскируемого прерывания (NMI)

NMIEN разрешает немаскируемые прерывания. Значения битов:

Операционная система устанавливает NMIEN по умолчанию $ 40 в шестнадцатеричном / 64 дес при включении питания подпрограмм. Служба NMI сначала выполняет вектор через $ FFFA hex / 65530 dec, который определяет причину и затем передает управление подпрограмме обслуживания прерывания.

DLI:

Если бит DLI NMIEN установлен, когда ANTIC встречает команду Display List с установленным битом модификатора DLI, тогда ANTIC запускает DLI на последней строке сканирования этой строки режима команд Display List.

Операционная система не использует DLI, поэтому адрес по умолчанию для вектора DLI (VDSLST, $ 0200 шестнадцатеричный / 512 десятичный ) указывает на инструкцию RTI в ПЗУ. Приложение, использующее DLI, должно изменить VDSLST, чтобы указать на желаемую процедуру DLI, прежде чем включать DLI.

Аккумулятор 6502, содержимое регистров X и Y не сохраняется до входа в процедуру DLI. Процедура DLI отвечает за сохранение состояния регистров, которые будут использоваться во время процедуры DLI, а последним действием является восстановление исходных значений регистров перед выходом с помощью инструкции RTI. Подпрограммы обычно помещают значения регистров в стек 6502.

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

VBI:

Когда бит VBI NMIEN установлен, ANTIC будет сигнализировать о прерывании вертикального пустого поля в конце обработки JVB (переход вертикального пустого поля) в конце списка отображения . Операционная система использует Vertical Blank для выполнения различных служебных задач (среди прочего - обновления таймеров, копирования входных значений контроллера в их теневые регистры и копирования содержимого теневых регистров в аппаратные регистры пользовательских микросхем).

OS прыгает через VVBLKI ($ 0222 шестигранный / 546 разла ) , чтобы начать Routine OS VBI Service, и процедура выхода OS VBI с прыжком через VVBLKD ($ 0224 шестигранный / 548 разла ). По умолчанию точек VVBLKI к вектору OS прыжка SYSVBV ($ E45F шестигранных / 58463 Декабря ) , чтобы начать Vertical Blank прерываний и точки VVBLKD вектору OS прыжка XITVBV ($ E462 шестигранного / 58466 разл ).

Пользовательские программы могут вставлять выполнение пользовательского кода либо до (Немедленно), либо после (Отложено) подпрограмм прерывания вертикального пустого экрана операционной системы. Поскольку прерывание OS Vertical Blank может быть вызвано, когда пользовательская программа обновляет векторы, операционная система предоставляет подпрограмму SETVBV ($ E45C hex / 58460 dec ), которая безопасно обновит векторы VVBLKI или VVBLKD, чтобы указать на новую процедуру. :

  • Чтобы установить новую цель перехода для VVBLKI (Immediate), установите регистр 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 шестнадцатеричный / 66 десятичных ) не равен нулю, выполнение прерывания отложенного вертикального пробела подавляется независимо от адресов в векторах. Значение по умолчанию CRITIC, 0, разрешает выполнение как немедленного, так и отложенного прерывания вертикального пустого поля.

NMIRES $ D40F Запись [ править ]

Сброс немаскируемого прерывания (NMI)

Любое значение, записанное в NMIRES, сбрасывает биты в NMIST, которые указывают причину последнего немаскируемого прерывания. Это используется кодом диспетчеризации прерывания в операционной системе, и обычно у пользовательской программы нет причин писать здесь.

NMIST $ D40F Читать [ править ]

Статус немаскируемого прерывания (NMI)

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

Значения битов:

  • $ 20 - сброс ключа прерывания
  • $ 40 - прерывание по вертикали
  • $ 80 - Прерывание списка отображения

Список отображения [ править ]

Список Показать список инструкций, или программу, направляя Antić как генерировать дисплей. Данные, обрабатываемые этой «программой» списка отображения, являются памятью экрана. Результатом является графический дисплей. Типы графики в выводе (текст или адресные пиксели) определяются инструкциями в списке отображения.

Список дисплей и отображать данные записываются в ОЗУ ЦП. ANTIC считывает инструкции списка отображения, экранную память и информацию о наборе символов из ОЗУ, используя метод, известный как прямой доступ к памяти (DMA) . Задача программ на машинном языке BASIC или 6502 - инициализировать отображение - настроить инструкции списка отображения, организовать память экрана (и набор символов, если применимо), а затем указать ANTIC для запуска отображения. После этого ANTIC автоматически создаст изображение на экране. Это позволяет 8-битным компьютерам Atari создавать сложные дисплеи в смешанном режиме без прямого вмешательства процессора. Другие платформы, даже разработанные намного позже, не могут либо смешивать графические режимы на одном дисплее, либо делать это без сложных прерываний процессора.

ANTIC обрабатывает инструкции в списке отображения, считывает память экрана (и данные набора символов, если применимо), переводит эту информацию в поток графических данных в реальном времени и отправляет этот поток данных на микросхему CTIA / GTIA, которая применяет цвет в графические пиксели и выводит видео. Вместе две микросхемы обеспечивают 6 текстовых и 8 графических режимов (всего 14). Более продвинутая версия GTIA, добавляет три альтернативные интерпретации цвета для каждого графического режима ANTIC, обеспечивая в общей сложности 56 графических режимов (14 раз по четыре). Однако только графические режимы ANTIC, основанные на пикселях с половинными часами, способны отображать полную цветовую палитру, обеспечиваемую новыми интерпретациями цвета, и из этих режимов удобными для использования являются режимы ANTIC 2 (текстовый режим графики ОС 0) и ANTIC mode F (Графический режим ОС 8). Таким образом, разумное количество уникальных графических режимов, доступных с использованием встроенных аппаратных возможностей ANTIC + CTIA / GTIA, составляет 20–14 режимов ANTIC + 3 дополнительных цветовых интерпретации каждый для режимов ANTIC 2 и F.

Обзор инструкций списка отображения [ править ]

Дисплей Atari построен в виде серии инструкций ANTIC, каждая из которых описывает строку текста или графический режим постепенно от верха до низа экрана до тех пор, пока желаемая область отображения не будет заполнена. По сути, экран представляет собой вертикальный стек инструкций режима ANTIC. Различные режимы занимают разное количество строк развертки и используют разный объем оперативной памяти. Проектирование дисплея требует подсчета строк развертки каждой инструкции режима и отслеживания памяти для каждой строки режима, чтобы предотвратить выход за рамки ограничений ANTIC или стандартов видео. (См. Раздел Ограничения ).

Смешивание нескольких графических режимов на одном дисплее выполняется просто путем предоставления различных инструкций режима символов или карты для желаемой позиции на экране. Например, графические режимы с 1 по 8 операционной системы Atari предлагают полноэкранное отображение или вариант для четырехстрочного текстового окна в нижней части экрана. Эта функция разделения экрана достигается с использованием встроенных возможностей ANTIC и его списка отображения без каких-либо прерываний процессора или пользовательских манипуляций с видеооборудованием.

В ANTIC есть четыре типа инструкций:

  • Пустая строка - 8 инструкций для отображения от 1 до 8 горизонтальных пустых строк
  • Инструкции перехода - 2 вида инструкций перехода, которые перезагружают счетчик программ ANTIC (3-байтовые инструкции)
  • Символьный режим - 6 инструкций для отображения символьных данных
  • Режим карты - 8 инструкций для отображения цветных пикселей

Инструкции режима карты и персонажа имеют дополнительные модификаторы, которые можно включить с помощью инструкции:

  • Горизонтальная прокрутка - включает тонкую горизонтальную прокрутку.
  • Вертикальная прокрутка - включает тонкую вертикальную прокрутку.
  • Загрузить сканирование памяти (LMS) - устанавливает начальный адрес графических / символьных данных (3-байтовая инструкция)
  • DLI - Прерывание списка отображения ( в других системах называется « прерывание растра » или « прерывание горизонтального пустого поля »)

Выполнение инструкции [ править ]

ANTIC начинает выполнение дисплея список , указанный в 16-разрядный адрес в регистрах DLISTL / DLISTH ($ D402- $ D403 шестигранного / 54274-54275 разл ). Регистры адреса автоматически увеличиваются ANTIC при выполнении каждой инструкции. ANTIC может обновлять только 10 младших бит адреса во время автоматического приращения, ограничивая начало и конец списка отображения в пределах диапазона адресов 1 КБ.

Регистры также обновляются во время выполнения списка отображения с помощью ANTIC JMP (переход) и JVB (переход и ожидание вертикального пробела). Эти инструкции загружают полные 16 бит адреса, поэтому их можно использовать для обхода ограничения 1K Display List.

Адрес также обновляется Blank прерывания (VBI) обычным вертикального операционная система с использованием значений из эксплуатации теневых регистров SDLSTL / SDLSTH ($ 0230- $ 0231 шестигранный / 560-561 разла ). Когда процедура OS VBI включена, прямые обновления регистров ANTIC DLIST ЦП или инструкции ANTIC Jump будут перезаписаны ОС во время следующего вертикального пробела. Поскольку обработка VBI является обычным состоянием системы, большинство программ полагаются на это и обновляют только теневые регистры ОС (SDLSTL / SDLSTH $ 0230-0231 шестнадцатеричный / 560-561 десятичный ) для установки списка отображения.

Байты инструкций [ править ]

Эта легенда относится к битовым диаграммам команд ниже:

Биты инструкции:

Биты 7: 4 являются модификаторами для инструкций режима игрового поля в битах 3: 0. Битовое значение 1 включает модификатор, а 0 отключает модификатор.

  • Бит 3: Бит 0 - инструкция режима игрового поля.
    • Значения $ 00 и $ 01 являются специальными инструкциями.
    • Значения режима от $ 02 до $ 0F определяют режимы символов игрового поля и карты.
  • Бит 4 - 10 долларов - горизонтальная прокрутка.
  • Бит 5 - 20 долларов - Вертикальная прокрутка.
  • Бит 6 - 40 долларов - сканирование загрузки памяти.
  • Бит 7 - $ 80 - Прерывание списка отображения.

Инструкция режима 0 - пустые строки [ править ]

Когда все биты режима равны нулю, ANTIC не выполняет DMA игрового поля и отображает одну или несколько пустых строк развертки цвета фона. Для нормального режима интерпретации цвета «фон» является регистром цвета COLBK ($ D01A шестигранного / 53274 Декабрь ) OS Shadow color4 ($ 02C8 шестигранного / 712 Декабрь ), хотя это отличается для режимов GTIA цвета интерпретации. См. Обсуждение COLBK на странице GTIA для получения дополнительной информации.

Количество пустых строк сканирования определяется значением битов с 4 по 6, что позволяет использовать диапазон от 0 до 7. ANTIC добавляет к этому значению единицу и отображает полученное количество строк сканирования. Значения инструкции:

Пустые строки полезны для отсрочки начала отображения экрана до тех пор, пока электронный луч не покинет вертикальную область за пределами диапазона в верхней части дисплея. Операционная система Atari создает для этой цели все свои графические режимы, начиная с трех шестнадцатеричных инструкций по 70 долл. США / 112 дек (или 24 пустых строк развертки). Пустые строки также полезны для разделения частей настраиваемого дисплея с различными целями (например, границы между дисплеем состояния и основной графикой).

Строки пустого режима не могут содержаться в области прокрутки, поскольку строковые инструкции пустого режима по своей сути не имеют битов модификатора точной прокрутки. Тем не менее, для завершения области вертикальной прокрутки можно использовать команду «Пустой режим», которая по-прежнему зависит от ожидаемых изменений высоты строки развертки на значение вертикальной прокрутки.

Бит модификатора DLI доступен для инструкций с пустой строкой. Когда бит DLI включен, прерывание списка отображения будет запущено во время последней пустой строки сканирования инструкции. Поскольку DMA игрового поля не происходит во время пустых строк (происходит только DMA списка отображения и DMA игрока / ракеты (если включено)), пустые строки могут использоваться там, где графика игрового поля не требуется, что дает больше времени для процедур прерывания списка отображения, изменяющих регистры цвета или Позиции игрока / ракетницы.

Инструкция режима 1 - прыжок [ править ]

Когда значение Mode равно 1, ANTIC выполняет переход в своей программе (список отображения). Следующие два байта в списке отображения загружаются в регистры ANTIC DLISTL / DLISTH ($ D402- $ D403 hex / 54274-54275 dec ), изменяя точку выполнения следующей инструкции.

Есть два вида прыжков:

  • $ 01 шестнадцатеричный / 1 десятичный JMP - Перейти к адресу. Это используется для загрузки нового адреса выполнения в середине выполнения списка отображения, как правило, когда список отображения должен пересекать границу в 1 КБ.
  • $ 41 шестнадцатеричный / 65 десятичный JVB - Перейти к адресу и ждать вертикального пустого поля. (Установлен бит JMP + LMS) Используется для завершения списка отображения. Используемый адрес должен быть начальным адресом списка отображения.

Регистры DList также обновляется Blank прерывания (VBI) обычной вертикальной операционной системы с использованием значений в теневых регистрах SDLSTL / SDLSTH ($ 0230- $ 0231 шестигранной / 560-561 ДЕК ). Когда процедура OS VBI включена, прямые обновления регистров ANTIC DLIST ЦП или инструкции ANTIC Jump будут перезаписаны ОС во время следующего вертикального пробела. Это означает, что инструкция ANTIC JVB (переход и ожидание вертикального пробела), которая указывает недопустимый адрес (или действительный адрес, который отличается от теневого значения SDLST), не оказывает реального влияния на отображение.

Аргумент JVB обычно указывает на начало того же списка отображения, но он также может указывать на другой список отображения, так что цепочка списков отображения выполняется после последовательных вертикальных пробелов. Конечно, чтобы дать ANTIC контроль над началом следующего списка отображения, необходимо отключить прерывание OS Vertical Blank, чтобы предотвратить перезапись аппаратных регистров ANTIC значениями теневых регистров.

Инструкции для режимов со 2 по F - режимы персонажей и карт игрового поля [ править ]

Ниже приведен список инструкций графического режима ANTIC. Более подробное описание каждого режима см. В разделе « Графические режимы игрового поля ».

Требования к памяти для строки режима определяются двумя факторами:

  • Биты ширины, установленные в аппаратном регистре DMACTL .
  • Наличие модификатора инструкций списка горизонтальной тонкой прокрутки .

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

Модификаторы инструкций [ править ]

Биты 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, управляет вертикальной прокруткой режима Playfield.

Область вертикальной прокрутки на дисплее определяется установкой бита VS ($ 20) в последовательной серии строк режима ANTIC в списке отображения. Первая строка режима без установленного бита VS становится концом области прокрутки и используется в качестве буферной строки для предоставления новой информации для прокрутки вверх в нижнюю часть области прокрутки.

LMS Modifer - Загрузить сканирование памяти [ править ]

Бит 6: значение позиции $ 40, загружает новый адрес для начала экранной памяти для текущей строки режима Playfield.

Опция LMS загружает адрес сканирования экранной памяти ANTIC с 16-битным значением в двух байтах, следующих за инструкцией. Указанный режим символов или карты начнет отображать байты с этого адреса. Параметр LMS должен появиться в первой строке инструкции режима игрового поля (не пустой строке) в списке отображения, чтобы инициализировать ANTIC для начала чтения в начале памяти экрана. В большинстве полноэкранных режимов, создаваемых операционной системой, в списке отображения присутствует только одно вхождение модификатора LMS . ANTIC автоматически увеличивает свой адрес LMS в конце каждой строки режима, готовясь к следующей строке. Пока экранная память не пересекает границу 4K, модификатор LMS не требуется в последующих инструкциях режима Playfield.

Полноэкранные дисплеи с использованием режимов карты игрового поля E или F будут иметь второе появление модификатора LMS в инструкции карты ближе к середине экрана, поскольку для полного отображения требуется более 4 КБ экранной памяти. (Дисплеи в режиме F включают в себя линии с высоким разрешением 320 пикселей и режимы дисплея GTIA.)

Комбинирование инструкций режима карты и символьного режима с битом LMS позволяет свободно устанавливать адрес экранной памяти в адресном пространстве 64 КБ независимо для каждой строки дисплея . Другими словами, экранная память не должна быть полностью непрерывной памятью, последовательно сканируемой в направлении более высоких адресов - только одна строка режима должна быть снабжена адекватными последовательными байтами памяти для удовлетворения требований этого режима, ширины дисплея и Функция прокрутки.

DLI Modifer - Прерывание списка отображения [ править ]

Бит 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 не получил широкого распространения в программном обеспечении из-за его высоких требований к памяти (8k) и несовместимых цветов артефактов, которые не были одинаковыми на каждой модели 8-битного компьютера Atari. Игры, в которых он используется, включают графические приключения Sierra, такие как Troll's Tale and Wizard and the Princess, Lode Runner и серия Ultima .

Система отображения видео была разработана с тщательным учетом методов отображения и ограничений NTSC. Тактовая частота системного ЦП и видеооборудование синхронизированы до половины тактовой частоты NTSC. Следовательно, вывод пикселей во всех режимах отображения основан на размере тактовой частоты цвета NTSC, который представляет собой минимальное время, необходимое для обеспечения правильного и согласованного цвета независимо от горизонтального положения пикселя на экране. Результатом является точный размер пикселя и цвет, который не отображает дефекты «стробирования» цвета при горизонтальной прокрутке. (Стробирование цвета - это неприглядные изменения оттенка пикселей в зависимости от положения по горизонтали, вызванные тем, что изменения сигнала не совпадают с синхронизацией цветности и поэтому аппаратному обеспечению телевизора / монитора не предоставляется достаточное время для достижения правильного цвета.)

Режимы персонажа [ править ]

Рендеринг глифов [ править ]

Во всех наборах символов для представления символа используется 8 последовательных байтов. Доступны четыре типа отображения символов / глифов этих байтов. Каждый символьный режим связан с определенным методом визуализации:

  • Стандарт: режим ANTIC 2. В зависимости от графических режимов высокого разрешения каждый бит в символьном глифе представляет один пиксель на экране шириной 1/2 цветовой тактовой частоты. Цвет фона - COLPF2, а не COLBK, используемый в других режимах символов и карт. COLBK появляется как рамка вокруг всех четырех сторон игрового поля. Биты значения 0 в символьном глифе показывают цвет фона. Биты значения 1 показывают значение яркости из COLPF1 на основе цвета фона (COLPF2). Набор символов состоит из 128 символов и требует 1024 байта ОЗУ.
  • Десендеры: режим ANTIC 3. Модификация стандартного метода. Метод отображения цвета пикселей такой же. Каждая строка режима имеет высоту 10 строк развертки, хотя символ символа по-прежнему составляет 8 байтов. Символы $ 00 гекс / 0 Декабрь до $ 5F шестнадцатеричнома / 95 разл дисплее в верхних строках развертки 8 с двумя пустыми строками развертки , добавленных в нижней части. Символы от 60 долларов в шестнадцатеричной системе / 96 десятичных знаков до 7F шестнадцатеричных / 127 десятичных знаковначните с двух пустых строк развертки вверху, а затем отобразите байты глифов в нижних 8 строках развертки. Первые два байта глифа перемещаются в две нижние строки развертки. Это позволяет правильно спроектированному набору символов отображать истинные нижние элементы. Набор символов состоит из 128 символов и требует 1024 байта ОЗУ.
  • Одноцветный: режимы ANTIC 6 и 7. В этих режимах каждый бит в символьном глифе представляет один пиксель шириной в один цветовой тактовый сигнал. Цвет фона - COLBK. Персонажи могут отображаться в одном из четырех цветов. Шесть младших битов значения символа идентифицируют глиф, а два старших бита определяют цвет. Поскольку значение символа уменьшено до шести битов, набор символов использует 64 символа и требует 512 байт ОЗУ. Биты значения 0 в символьном глифе показывают цвет фона. Биты значения 1 в данных глифа показывают один из четырех возможных вариантов цвета на основе двух старших битов значения символа. Биты 7 и 6 символьного значения:
  • Многоцветный: режимы ANTIC 4 и 5. В этих символьных режимах каждая пара битов в символьном глифе представляет пиксель шириной в один цвет, поэтому один байт информации о глифе представляет 4 пикселя, а не 8 пикселей в других режимах. Набор символов состоит из 128 символов и требует 1024 байта ОЗУ. Цвет фона - COLBK. Этот режим позволяет отображать до четырех цветов (включая фон) в одной матрице символов. Если установлен старший бит значения символа (т. Е. Инверсное видео), то пятый цвет, COLPF3, отображается вместо битового шаблона «11» пикселя, который обычно показывает COLPF2. Выбор цвета на основе битовых пар символьного глифа:

Режимы карты [ править ]

Режимы GTIA [ править ]

Режимы GTIA являются режим F Старое дисплеи с альтернативной опцией интерпретации цветов включены с помощью GTIA зарегистрировать ПРИОР ($ D01B гекс / 53275 декабря ) затененный GPRIOR ($ 026F гекс / 623 декабря ). Полное цветовое выражение этих режимов GTIA также может быть задействовано в текстовых режимах Antic 2 и 3, хотя для них также потребуется специальный набор символов для практического использования цветов. См. GTIA для получения дополнительной информации.

Прокрутка [ править ]

До того, как видеодисплеи стали обычной частью пользовательского интерфейса, многие компьютеры использовали телетайп - принтер, обычно с непрерывно подаваемой бумагой. Пользовательский ввод и компьютерный вывод распечатывались на бумаге, подаваемой через принтер. Этот широко понятный интерфейс для пользовательского ввода и компьютерного вывода был продолжен с появлением видеодисплеев, поскольку компьютеры представляли метафору экрана как окна просмотра над воображаемым бесконечным рулоном бумаги. Информация отображается на экране, начиная вверху, пока не достигает нижней части экрана, и когда компьютеру требуется ввести новую информацию, он сдвигает всю информацию на экране вверх, предоставляя пустое место внизу для новой информации и, следовательно, стирая самую верхнюю информацию .

Такой вид прокрутки называется «грубой прокруткой». Это достигается перемещением байтов памяти через обозначенную область экрана. Перемещение килобайта (или более) памяти требует больших затрат ресурсов ЦП, и более медленные компьютеры могут не выполнять ничего другого при обновлении данных экрана. В качестве средства анимации дисплея результаты могут быть прерывистыми, когда ЦП не может обновить память экрана быстрее, чем оборудование дисплея считывает память для генерации видеовыхода. Плавность движения ухудшается, поскольку минимальное смещение отображения составляет размер всего символа. Большинство компьютеров, включая 8-битные Atari, выполняют грубую прокрутку, как описано выше - обычными примерами являются просмотр длинного списка программ BASIC или каталога файлов.

Грубая прокрутка, реализованная путем массового перемещения данных, часто является единственным методом прокрутки, доступным на большинстве компьютеров. Однако ANTIC обеспечивает прямую аппаратную поддержку вертикальной и горизонтальной, грубой и тонкой прокрутки, переводя концепцию «порта просмотра, перемещающего данные» от метафорической иллюзии к буквальной реализации. Эти функции ANTIC обеспечивают быстрое, плавное перемещение в полноэкранном режиме, требующее незначительного времени процессора, и, таким образом, освобождают процессор для другой работы.

Все режимы отображения ANTIC, режимы текста и карты могут использовать функции аппаратной прокрутки.

Вертикальная грубая прокрутка [ править ]

Вертикальная грубая прокрутка - это самая легкая функция. Первая инструкция текстового режима или режима карты в каждом списке отображения всегда включает модификатор инструкции LMS, определяющий начало памяти экрана. По мере создания дисплея ANTIC автоматически увеличивает свой указатель сканирования памяти со строки режима на строку режима для непрерывного отображения памяти. Следовательно, дисплей можно «переместить», просто обновив адрес исходного модификатора LMS; добавление количества байтов, используемых для строки в текущем режиме текста или карты, сдвигает содержимое экрана на одну строку вверх, а вычитание того же количества перемещает экран вниз. Таким образом, дисплей на самом деле представляет собой порт просмотра, который перемещается для просмотра различных областей памяти, а не для перемещения памяти в фиксированную карту экрана.

Поскольку счетчик сканирования памяти ANTIC не может автоматически увеличиваться за границу 4K, предел вертикальной прокрутки таким простым способом составляет до 4K перемещения. Полноэкранный текст в режиме 2 с использованием приблизительно 1 КБ может непрерывно прокручивать высоту четырех экранов до достижения границы 4K. Точно так же текстовый дисплей в режиме 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 для каждой инструкции Display List Text или Map Mode в области прокрутки.

Вместо использования модификатора LMS для каждой строки в этом методе используется более «нормальный» список отображения, для которого требуется только один модификатор LMS в начале области прокрутки. Приращение (+1) адреса модификатора LMS заставляет область прокрутки перемещаться влево. Однако «новая» информация, которая переместилась в правую часть области прокрутки, ранее была первым байтом в следующей строке (за исключением последнего байта последней строки - эта информация была полностью за пределами экрана).

Вторая половина этой стратегии требует, чтобы последний байт / символ каждой строки в области прокрутки был обновлен для отображения желаемой новой информации. Для типичного дисплея с прокруткой это будет означать обновление последнего байта одной или двух десятков строк, что занимает незначительное количество времени при сборке. Таким образом, если этот процесс прокрутки включает отображение текста в полноэкранном режиме 2 или 4 (скорее, наихудший случай) и использует все возможности 4K автоматической адресации экранной памяти ANTIC, то горизонтальная прокрутка может продолжаться таким же образом около 3000 шагов; эквивалент 75 полных экранов.

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

Для тонкой прокрутки такой компоновки требуется немного больше планирования. Когда в списке отображения включена тонкая прокрутка, ANTIC извлекает больше информации, чем требуется для отображения в строке режима. Поскольку каждая строка режима теперь использует больше памяти, новая информация, прокручиваемая сбоку дисплея, не является байтом / символом, который отображался в начале следующей строки. Однако это не ухудшает процесс прокрутки и просто изменяет значение сложения и вычитания, используемое для определения местоположения начала и конца каждой строки отображения.

Отображение прерываний списка (DLI) [ править ]

ANTIC включает функцию запуска прерывания, обслуживаемого ЦП, в определенных вертикальных положениях на экране. Он встроен в список отображения ANTIC, который указывает ANTIC на запуск прерывания во время последней строки сканирования текущей инструкции режима, и поэтому называется «Прерывание списка отображения». На других платформах это действие называется « Прерывания растра » или « Прерывания по горизонтали пустым».". Обычная цель - изменить значения, связанные с отображением, в известном месте, чтобы переходы были визуально точными или происходили там, где они не конфликтовали с отображением. Возможности включают, но не ограничиваются изменением значений цветового регистра, горизонтального положения игрока / ракеты , и значения точной прокрутки.Поскольку DLI - это машинный код 6502, выполняемый ЦП, возможны любые виды обработки при условии, что они достаточно короткие, чтобы не конфликтовать с другими действиями и не выходить за пределы последующего прерывания списка отображения. Хороший пример - опрос контроллера мыши, который должен выполняться чаще, чем 1/60 секунды.

Обзор [ править ]

Для правильного запуска прерывания необходимы следующие условия:

  • Список отображения с инструкцией режима, которая включает установленный бит модификатора прерывания списка отображения (DLI) . (Бит 7 - 80 долларов в шестнадцатеричном формате / 128 в десятичном формате )
  • В регистре NMIEN ANTIC установлен бит DLI. (Бит 7 - 80 долларов в шестнадцатеричном формате / 128 в десятичном формате )
  • Вектор операционной системы для отображения списка прерываний (VDSLST, $ 0200 шестигранных / 512 Декабрь ) указует на начальный адрес подпрограммы обработки прерывания.

Правильная установка [ править ]

При обновлении значений управления отображением необходимо следить за тем, чтобы 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 Декабрь ) для приращения , указывающего ИВБ произошел.
    • Следите за VCOUNT ANTIC на предмет изменений, указывающих на начало следующего кадра.
  • Включите прерывания списка отображения ANTIC, установив бит 7 (80 $) NMIEN . Обычное значение для NMIEN - $ C0, которое включает DLI и VBI.
  • Включите ANTIC Display List DMA, обновив теневой регистр ( 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  ; Сохранить аккумулятор в стеке  LDA  # $ 9 C  ; Загрузить голубой (цвет $ 9, яркость $ C)  STA  WSYNC  ; Дождитесь синхронизации до конца строки сканирования  STA  COLBK  ; Установите фон  PLA  ; Восстановить Аккумулятор из стека  РТИ  ; Конец.

Графика игрока / ракеты [ править ]

Большая часть графических функций Player / Missile находится в области чипа CTIA / GTIA . CTIA / GTIA управляет положением, размером, цветом, приоритетом и обнаружением столкновений для графических объектов Player / Missile, но его реальная реализация рендеринга формы идет не дальше, чем однобайтный шаблон для каждого объекта, представленного единообразно на всех строках сканирования. (Шаблоны устанавливаются в регистрах графических шаблонов CTIA / GTIA GRAF * .) В конце концов, CTIA / GTIA сама по себе генерирует объекты Player / Missile только как шаблоны с вертикальными полосами на экране.

Дизайн ANTIC включает возможность DMA, так что он может читать графические данные своего списка отображения и игрового поля. Эта возможность прямого доступа к памяти используется для чтения данных от имени CTIA / GTIA и обновления регистров графических шаблонов GRAF * по мере создания каждой строки развертки дисплея. Таким образом, ANTIC предоставляет объектам Player / Missile шаблоны, которые меняются по высоте экрана и поэтому выглядят как традиционная «спрайтовая» графика.

Биты 2 и 3 регистра DMACTL ANTIC (затененные SDMCTL) управляют извлечением ANTIC данных игрока / ракеты для обновления регистров графического шаблона CTIA / GTIA.

DMACTL Значения управляющих битов DMA Player / Missile (биты [3: 2]):

  • $ 00 - Отключить DMA игрока и ракеты
  • $ 04 - Включить DMA для ракеты
  • $ 08 - Включить DMA игрока
  • $ 0C - Включить DMA игрока и ракеты

Ракетный DMA можно включить без DMA игрока. Однако, когда Player DMA включен, Missile DMA автоматически выполняется, чтобы поддерживать согласованность времени DMA, но данные не доставляются в регистр Missile GRAFM .

Бит 4 (значение $ 10 гекса / 16 Декабрь ) из элементов управления DMACTL регистров частоты новой выборки данных. ANTIC извлекает данные и обновляет CTIA / GTIA каждую строку сканирования. Настройки разрешения DMACTL влияют на то, как часто ANTIC увеличивает свой внутренний указатель DMA для выборки новых данных. Разрешение однострочной графики Player / Missile увеличивает адрес DMA каждую строку развертки, а разрешение двойной строки увеличивает адрес DMA с каждой четной строкой развертки. Значения битов DMACTL для разрешения игрока / снаряда:

  • $ 00 - Двойное разрешение строки. Новые данные извлекаются DMA по четным строкам сканирования, но обновление регистров шаблонов CTIA / GTIA Player / Missile Graphics по-прежнему происходит в каждой строке сканирования. Следовательно, каждый байтовый шаблон Player / Missile имеет высоту в две строки развертки. Когда разрешение Двойной линии включена CTIA / GTIA регистр VDELAY ($ D01C шестигранный / 53276 Декабря ) можно использовать для маскировки обновления Antić на четных строках развертки , сдвигая битовую последовательность отдельных игроков и ракет вниз на одну строки развертки.
  • $ 10 - Разрешение одной строки. Новая выборка DMA и обновление регистра Player / Missile происходит в каждой строке сканирования. CTIA / GTIA регистр VDELAY ($ D01C шестигранной / 53276 Декабре ) маскирует обновления на четных линий сканирования уменьшает одну строку разрешение игрока / ракетными казаться разрешением Двойная линия, хотя данные сдвигаются одна линия сканирования ниже.

CTIA / GTIA также должен быть специально включен для получения графических данных Player / Missile через DMA, чтобы правильно отображать объекты на экране. Дополнительную информацию см. В реестре CTIA / GTIA GRACTL .

Расположение памяти, считываемой ANTIC для графики Player / Missile, контролируется регистром PMBASE . Это значение PMBASE обеспечивает начальную страницу базового адреса для графики Player / Missile. Когда работает графика P / M с двухстрочным разрешением, значение PMBASE должно начинаться с границы 1K. Когда работают графики P / M с однострочным разрешением, значение PMBASE должно начинаться с границы 2K. Карты памяти для графических режимов Player / Missile:

Разрешение Двойная линия (1 байт на 2 растровых строк, 128 байт каждый объект) по отношению к PMBASE х $ 100 гекс / 256 декабрь :

Разрешение одной линии (1 байт на строки развертки, 256 байтов каждый объект) по отношению к PMBASE х $ 100 гекс / 256 декабрь :

Ракеты используют одни и те же байты карт памяти выше, по два бита на ракету:

ANTIC не использует первые и последние 8 строк развертки памяти игрока / ракеты в карте памяти. При разрешении в две строки первые и последние четыре байта игнорируются, при разрешении в одну строку - первые и последние восемь байтов.

Так как Player / Missiles являются наложением, независимым от графики игрового поля и визуализируются в области развертки, вертикальные координаты для данных Player / Missile должны быть смещены, чтобы выровнять объекты с игровым полем. В стандартных графических режимах операционной системы с 192 строками развертки вертикальные координаты данных игрока / ракеты смещены относительно начала игрока / ракеты в памяти, как показано ниже. Записи Overscan показывают первое и последнее использованные смещения данных игрока / ракеты:

Ограничения [ править ]

Вертикальный размер всего дисплея Playfield варьируется от 0 до 240 строк развертки - это зависит от количества строк, которые ANTIC запрограммировал для отображения в соответствии со списком отображения . ANTIC начинает генерировать строки развертки в строке 8 развертки ТВ, продолжая до строки 247, всего 240 строк развертки.

Горизонтальная ширина дисплея Playfield может быть установлена ​​на 256, 320 или 384 пикселя, что соответствует 128, 160 или 192 цветовой частоте. В самом широком режиме фактически видны только 352 пикселя (176 цветовых частот). См. DMACTL .

Горизонтальная точная прокрутка перемещает область прокрутки до 16 цветовых значений. См. HSCROL .

Режимы карты GTIA должны прокручиваться по горизонтали с шагом в один пиксель (2 цветных такта) вместо одинарных цветных часов. См. HSCROL и обсуждение, Horizontal Fine Scrolling

Вертикальная точная прокрутка перемещает область прокрутки на количество строк развертки в одной строке режима области прокрутки, максимум до 16 строк развертки. См. VSCROL .

Хотя программный счетчик списка отображения ANTIC является 16-битным, только младшие 10 битов изменяются во время нормального (т. Е. Последовательного) выполнения списка отображения. Это означает, что для списка отображения требуется инструкция JMP (переход) для пересечения границы в 1 Кбайт. Это не является серьезным ограничением, поскольку размер одного списка отображения обычно варьируется от 32 до 202 байтов и практически никогда не превышает 720 байтов. Поскольку он может быть расположен где угодно в памяти, нетрудно найти место в памяти достаточного размера, которое не пересекает границу в 1 КБ.

Регистр сканирования памяти, регистр, адресующий данные, хранящиеся в памяти экрана, является 16-битным, но только младшие 12 битов изменяются, когда ANTIC последовательно сканирует видеопамять. Это означает, что для списка отображения требуется строковая инструкция режима, включая LMS (сканирование загрузки памяти).вариант, при котором экранная память пересекает границу 4K. Графические режимы ANTIC E и F требуют более 7,5 КБ экранной памяти для полноэкранного отображения. Списки дисплеев для этих дисплеев требуют, чтобы опция LMS была добавлена ​​к инструкции Mode в середине дисплея, где экранная память пересекает границу 4K. Границу 4K нельзя пересекать в середине строки графического режима, а только между концом одной строки режима и началом следующей строки. Другими словами, память для предыдущей строки режима заканчивается точным последним байтом блока 4K, а следующая строка режима начинается точно с первого байта следующего блока 4K.

Набор символов может быть расположен в любом месте памяти (см. CHBASE ), но, в зависимости от текстового режима ANTIC, начальный адрес должен быть выровнен по границе 512 байт или 1 КБ.

Карта памяти игрока / ракеты может находиться где угодно в памяти (см. PMBASE ), но, в зависимости от разрешения, начальный адрес должен быть совмещен с границей 1K или 2K (также см. DMACTL ).

Ошибки и пограничные условия [ править ]

Определенные комбинации значений в списке отображения могут привести к неожиданным результатам. Кроме того, для некоторых действий 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, где строки имеют высоту четыре строки развертки, а не одну, но с накладными расходами прямого доступа к памяти только для чтения данных из памяти одного экрана, происходящих в первой строке развертки.

Неиспользуемое поведение [ править ]

Режим 8 / Режим 9 Повреждение горизонтальной прокрутки [ править ]

Режимы карты ANTIC 8 и 9 будут повреждены при немедленном следовании горизонтально прокручиваемой строке другого режима с использованием нормальной или широкой ширины игрового поля. Это происходит, если строка режима 8 или 9 прокручивается горизонтально или нет, но результаты искажения в каждом случае разные. Проблема возникает для определенных значений HSCROL, из-за чего ANTIC неправильно выводит пиксели и смещает строку Mode 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 представляет поддельные данные для области, освобожденной из-за смещения экрана - в левой части дисплея будет смещен цвет фона, а в правой части появятся несколько цветных тактов случайных данных в конце диапазона прокрутки. Эти пиксельные данные обычно не заметны, так как это происходит в области переразвертки, где они обычно не видны. Однако, если эти ложные пиксели Playfield пересекаются с пикселями Player / Missile, столкновение будет помечено.Решение для игроков / ракет, которые переместились в область за пределами области обзора, состоит в том, чтобы сбросить свои позиции до нуля, чтобы удалить их с дисплея и таким образом предотвратить ложные столкновения.

См. Также [ править ]

  • CTIA / GTIA
  • Горизонтальное пустое прерывание
  • Вертикальное пустое прерывание

Ссылки [ править ]

  1. ^ Руководство по обслуживанию домашних компьютеров Atari - 400/800 (PDF). Atari, Inc., стр. 1–8.
  2. Перейти ↑ Neubauer, Doug (2009-06-20). «Годы Atari, Дуг Нойбауэр. Звездные рейдеры, Солярис и Поки» . DougNeubauer.com .
  3. ^ Патент США 4296476 , Mayer, Steven T .; Майнер, Джей Г .; Neubauer, Douglas G .; Декюр, Джозеф К., «Система обработки данных с программируемым графическим генератором», выпуск 1 981-10-20, переданный Atari, Inc. 
  4. ^ Майкл Каррент, "Что такое чипы SALLY, ANTIC, CTIA / GTIA, POKEY и FREDDIE?" , 8-битные компьютеры Atari: часто задаваемые вопросы
  5. ^ a b Борис, Дан. «Atari Chips» . Dan Б Домашняя страница . Проверено 1 февраля 2011 .
  6. ^ Вендель, Курт. «Atari 800XLCR» . AtariMuseum.com . Архивировано из оригинала на 2011-09-13 . Проверено 1 февраля 2011 .
  7. ^ Вендель, Курт. «Тестер производительности KERI» . AtariMuseum.com . Архивировано из оригинала на 2011-09-13 . Проверено 1 февраля 2011 .

Внешние ссылки [ править ]

  • De Re Atari, опубликованная Atari Program Exchange
  • Картографирование Atari, переработанное издание Иэна Чедвика
  • Лист данных чипа ANTIC отсканирован в PDF .