Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
ПОКЕЙ в Atari 130XE

Горшок клавиатура Integrated Circuit ( Поки ) [1] представляет собой цифровой I / O чип предназначен для Atari 8-битного семейства домашних компьютеров и нашли в Atari аркадных игр 1980 - х годов. POKEY сочетает в себе функции потенциометров выборки (таких как игровые манипуляторы ) и матриц сканирования переключателей (таких как клавиатура компьютера ), а также генерации звука. Он производит четыре голоса характерного прямоугольного звука либо в виде чистых тонов, либо измененных с помощью ряда настроек искажения. [2]

Чипы POKEY используются для воспроизведения звука во многих аркадных играх, включая Centipede , Missile Command , Asteroids Deluxe и Gauntlet . Некоторые аркадные системы Atari используют многоядерные версии с 2 или 4 POKEY в одном пакете для большего количества звуковых голосов. 7800 Атари консоль позволяет игровой картридж содержит Поки, обеспечивая лучший звук , чем звуковой чип системы. Только две лицензионные игры используют это: порты Ballblazer и Commando .

БИС чип имеет 40 штырей и идентифицируется как C012294. [3] POKEY был разработан сотрудником Atari Дугом Нойбауэром , [4] который также программировал оригинальные Star Raiders . USPTO получил патент США 4,314,236 для Atari 2 февраля 1982 года для «Аппарата для получения множества аудио звуковых эффектов». [5] Перечисленные изобретатели - Стивен Т. Майер и Рональд Э. Милнер.

POKEY больше не производится, ПОКЕЙ эмулируется в программном обеспечении с помощью аркадных и 8-битных эмуляторов Atari, а также с помощью музыкального формата Atari SAP и соответствующего проигрывателя.

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

  • Аудио
    • 4 полунезависимых аудиоканала
    • Каналы могут быть настроены как один из:
      • Четыре 8-битных канала
      • Два 16-битных канала
      • Один 16-битный канал и два 8-битных канала
    • Объем , частота и форма сигнала на каждый канал ( прямоугольная волна с переменной скважностью или псевдослучайным шумом)
    • Делитель частоты на 15 или 64 кГц.
    • Два канала могут управляться с тактовой частотой процессора.
    • Фильтр высоких частот
  • Сканирование клавиатуры (до 64 клавиш) + 2 бита модификатора (Shift, Control) + Break
  • Порты потенциометра (8 независимых портов, каждый с 8-битным разрешением)
  • Таймеры высокого разрешения (аудиоканалы 1, 2 и 4 могут быть настроены так, чтобы вызывать прерывания таймера при переходе через ноль)
  • Генератор случайных чисел (можно прочитать 8 бит 17-битного полиномиального счетчика)
  • Последовательный ввод / вывод порта
  • Восемь IRQ прерываний

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

По номеру детали:

  • C012294 - Используется во всех 8-битных компьютерах семейства Atari , включая Atari XEGS , а также в консоли Atari 5200. Суффикс на чипе относится к производителю:
    • C012294B-01 - AMI
    • C012294-03 - Signetics
    • C012294-19 - National Semiconductor
    • C012294-22 - OKI
    • C012294-31 - IMP
  • 137430-001 - Номер детали, который иногда используется в аркадных автоматах Atari для игры в POKEY.
  • 137324-1221 - Четырехъядерный POKEY, используемый в аркадных автоматах Atari Major Havoc , I, Robot , Firefox и Return of the Jedi . [6]

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

Распиновка Atari POKEY (C012294)

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

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

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

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

Чтение значений непосредственно с аппаратного обеспечения на неизвестной стадии цикла отображения может дать противоречивые результаты (пример: показания потенциометров). Теневые регистры операционной системы для регистров чтения обычно являются предпочтительным источником информации.

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

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

Аудио [ править ]

Pokey содержит программируемый звуковой генератор ; четыре аудиоканала с отдельными регуляторами частоты, шума и уровня голоса.

Каждый канал имеет 8-битный делитель частоты и 8-битный регистр для выбора шума и громкости.

  • AUDF1 - AUDF4 - регистр частоты (AUDio Frequency)
  • AUDC1 - AUDC4 - регистр громкости и шума (AUDio Control)
  • AUDCTL - общий регистр, который контролирует генераторы (AUDIO ConTroL)

Звук POKEY характерен: когда четыре канала используются независимо, наблюдается заметная расстройка частей 12-тональной шкалы одинаковой темперации из-за недостаточной точности звука. Каналы могут быть спарены для большей точности; кроме того, доступны несколько форм искажения , позволяющие получить более плотный звук. Искажение в основном используется в музыке для басовых партий.

Один из звуковых движков, разработанный для семейства 8-битных Atari, назывался AMP (Advanced Music Processor). Этим воспользовался музыкант Гэри Гилбертсон .

Частота аудиоканала [ править ]

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

Каждый регистр AUDF * представляет собой 8-битное значение, обеспечивающее таймер обратного отсчета или делитель для импульсов от тактового генератора POKEY. Таким образом, меньшие значения позволяют чаще выводить импульсы из POKEY, а большие значения - реже. Значения от $ 0 шестнадцатеричный / 0 десятичный до $ FF шестнадцатеричный / 255 десятичных увеличиваются с помощью POKEY до диапазона от 1 шестнадцатеричного доллара / 1 десятичного до 100 шестнадцатеричного / 256 десятичного . Фактическая высота слышимого звука зависит от выбранной тактовой частоты POKEY и значений искажения. См Audio Control Channel и управления аудио .

AUDF1 $ D200 Запись [ править ]

Частота аудиоканала 1

AUDF2 $ D202 Запись [ править ]

Частота аудиоканала 2

AUDF3 $ D204 Запись [ править ]

Частота аудиоканала 3

AUDF4 $ D206 Запись [ править ]

Частота аудиоканала 4

Управление аудиоканалом [ править ]

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

AUDC1 $ D201 Запись [ править ]

Управление аудиоканалом 1

AUDC2 $ D203 Запись [ править ]

Управление аудиоканалом 2

AUDC3 $ D205 Запись [ править ]

Управление аудиоканалом 3

AUDC4 $ D207 Запись [ править ]

Управление аудиоканалом 4

Бит 0-3: управление уровнем громкости от 0 до F.

Бит 4: Принудительный вывод только объема. Когда этот бит установлен, канал игнорирует таймер AUDF, средства управления шумом / искажением и фильтр высоких частот. Звук воспроизводится только при установке битов громкости 0: 3. Эта функция использовалась для создания цифрового звука с помощью импульсно-кодовой модуляции .

Бит 5-7: настройки регистра сдвига для шумов / искажений. Битовые значения описаны ниже:

Генерация случайных шумов обслуживается чтением 8 битов из верхней части 17-битного регистра сдвига. Эти регистры управляются частотой 1,79 МГц для NTSC или 1,77 МГц для PAL. Его выходы могут использоваться независимо от делителя каждого аудиоканала.

AUDCTL $ D208 Запись [ править ]

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

«1» означает «включен», если не указано иное:

Бит 0
$ 01: (15 кГц), выбор коэффициента делителя частоты «0» - 64 кГц, «1» - 15 кГц
Бит 1
$ 02: (FI2 + 4), фильтр верхних частот для канала 2, рассчитанный по частоте канала 4
Бит 2
$ 04: (FI1 + 3), фильтр верхних частот для канала 1, рассчитанный по частоте канала 3
Бит 3
$ 08: (CH4 + 3), соединение делителей 4 + 3 для получения 16-битной точности
Бит 4
$ 10: (CH2 + 1), соединение делителей 2 + 1 для получения 16-битной точности
Бит 5
$ 20: (CH3 1.79), установите частоту «0» канала 3, равную 64 кГц. «1» - 1,79 МГц NTSC или 1,77 МГц PAL.
Бит 6
$ 40: (CH1 1.79), установите частоту канала 1 "0" равной 64 кГц. «1» - 1,79 МГц NTSC или 1,77 МГц PAL.
Бит 7
$ 80: (POLY 9), переключатель сдвигового регистра «0» - 17 бит, «1» - 9 бит

Все делители частоты (AUDF) могут управляться одновременно с частотой 64 кГц или 15 кГц.

Делители частоты 1 и 3 могут поочередно управляться тактовой частотой процессора (1,79 МГц NTSC, 1,77 МГц PAL). Делители частоты 2 и 4 могут поочередно управляться выходом делителей 1 и 3. Таким образом, POKEY позволяет подключать 8-битные каналы для создания звука с 16-битной точностью.

Возможные конфигурации каналов:

  • четыре 8-битных канала
  • два 8-битных канала и один 16-битный канал
  • два 16-битных канала

Потенциометры [ править ]

POKEY имеет восемь аналогово-цифровых преобразователей портов, наиболее часто используемых для потенциометров, также известных как контроллеры весла. Аналоговые входы также используются для контроллера сенсорного планшета и 12-кнопочного контроллера клавиатуры для видеоигр. На каждом входе есть капельный транзистор, который можно включить или выключить программно. Таймеры также можно использовать для поддержки светового пера , подключив фотодиод к каплевидному транзистору, который улавливает таймер, когда электронный луч в телевизоре проходит мимо пера. Вертикальное положение пера нужно было читать отдельно.

POT0 $ D200 Читать [ править ]

ТЕНЬ: PADDL0 $ 0270

Контроллер весла 0 Вход

POT1 $ D201 Читать [ редактировать ]

ТЕНЬ: PADDL1 $ 0271

Вход контроллера весла 1

POT2 $ D202 Читать [ редактировать ]

ТЕНЬ: PADDL2 $ 0272

Вход контроллера весла 2

POT3 $ D203 Читать [ редактировать ]

ТЕНЬ: PADDL3 $ 0273

Контроллер весла 3 входа

POT4 $ D204 Читать [ редактировать ]

ТЕНЬ: PADDL4 $ 02704

Контроллер весла 4 входа

POT5 $ D205 Читать [ редактировать ]

ТЕНЬ: PADDL5 $ 0275

Контроллер весла 5 Вход

POT6 $ D206 Читать [ редактировать ]

ТЕНЬ: PADDL6 $ 0276

Контроллер весла 6 входов

POT7 $ D207 Читать [ редактировать ]

ТЕНЬ: PADDL7 $ 0277

Контроллер весла 7 Вход

Каждый вход имеет 8-битный таймер, отсчитывающий время отображения каждой ТВ-строки. Это имело дополнительное преимущество, позволяя вводить считываемое значение непосредственно в экранные координаты объектов, управляемых лопастями. Значения Atari Paddle варьируются от 0 до 228, хотя максимально возможное значение составляет 244. Контроллер Paddle читает 0 при повороте в максимальное положение по часовой стрелке и возвращает возрастающие значения при повороте против часовой стрелки, заканчивая максимальным значением.

Процесс чтения Paddle начинается с записи в POTGO, который сбрасывает значения POT * на 0, значение ALLPOT на $ FF и разряжает конденсаторы считывания потенциометра. Значения POT * увеличиваются по мере сканирования до достижения значения сопротивления потенциометра. Когда считывание Paddle завершено, соответствующий бит в ALLPOT сбрасывается в 0.

Процесс сканирования Paddle может занять большую часть видеокадра. Операционная система Atari автоматически выполняет чтение Paddle. Лопатки считываются, и запускается сканирование лопастей во время вертикального бланка этапа 2. Значения Paddle копируются в теневые регистры. (Обратите внимание, что триггеры Paddle на самом деле являются вводом направления джойстика, считываемым из PIA.)

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

ALLPOT $ D208 Читать [ редактировать ]

Состояние сканирования потенциометра

Каждый бит соответствует одному входу потенциометра (регистры POT *). Когда сканирование манипулятора запускается записью в POTGO, каждый бит манипулятора в ALLPOT устанавливается в 1. Когда сканирование манипулятора завершается, соответствующий бит в ALLPOT сбрасывается на 0, указывая, что значение в соответствующем регистре POT * теперь доступно для чтения.

POTGO $ D20B Запись [ править ]

Начать сканирование потенциометром

Запись в POTGO запускает процесс сканирования потенциометра (Paddle). Это сбрасывает значения POT * на 0, значение ALLPOT на $ FF и разряжает конденсаторы считывания потенциометра. Когда каждое сканирование потенциометра завершается, бит, соответствующий потенциометру в ALLPOT , очищается, показывая, что значение соответствующего регистра POT * допустимо для чтения.

Последовательный порт ввода-вывода [ править ]

Содержит:

  • линия последовательного ввода
  • линия последовательного вывода
  • линия вывода последовательных часов
  • двухсторонняя линия передачи данных с последовательными часами
  • регистрирует SKREST, SEROUT, SERIN, SKCTL, SKSTAT

POKEY - это разновидность UART . Обычно в качестве генератора скорости передачи используется один из удвоенных аудиоканалов. Стандартная скорость передачи составляет 19,2 кбит / с, максимально возможная скорость передачи составляет 127 кбит / с. Байт, помещенный в регистр SEROUT, автоматически отправляется по последовательной шине. Фрейм данных содержит 10 бит: 1 стартовый бит, 8 бит данных, 1 стоповый бит. Уровни напряжения равны 0 В (логический 0) и +4 В (логическая 1). Последовательный порт Atari можно соединить с портом RS-232 с помощью простого преобразователя напряжения.

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

SKREST $ D20A Написать [ редактировать ]

Сбросить статус последовательного порта (SKSTAT).

Запись в этот регистр сбрасывает биты с 5 по 7 SKSTAT, которые являются защелками, в 1. Защелки обозначают переполнение клавиатуры, переполнение последовательного ввода данных и ошибку кадра последовательного ввода данных.

SEROUT $ D20D Написать [ редактировать ]

Байт вывода данных последовательного порта.

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

SERIN $ D20D Читать [ править ]

Байт ввода данных последовательного порта.

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

SKCTL $ D20F Запись [ править ]

Управление последовательным портом

Бит 0: включить сканирование «противодействия», которое предназначено для устранения шума или дрожания от механических переключателей. Значение 1 позволяет POKEY использовать внутренний регистр сравнения при сканировании ключей. Клавиша должна быть обнаружена в двух одновременных сканированиях, прежде чем она будет идентифицирована как нажатая, и она должна быть видна отпущенной, чтобы два последовательных сканирования считались отпущенными. Это должно быть включено, чтобы поддерживать нормальную работу с клавиатурой в операционной системе.

Бит 1: Установите в 1, чтобы включить сканирование клавиатуры. Это должно быть включено, чтобы поддерживать нормальную работу с клавиатурой в операционной системе.

Бит 2: Установите в 1, чтобы включить быстрое, хотя и менее точное сканирование потенциометра. Сканирование Fast Pot увеличивает счетчик на каждый цикл и возвращает полезный результат в пределах двух строк сканирования. Операционная система использует медленное сканирование горшков, которое увеличивает счетчик каждые 114 циклов (строка развертки), принимая кадр (1/60 секунды) для получения результата. ОС считывает значения Pot во время прерывания по вертикали (VBI) и копирует результат в теневые регистры потенциометра в ОЗУ. Затем он сбрасывает POTGO для следующего чтения во время следующего VBI.

Бит 3: включить двухтональный режим последовательного порта. Если этот параметр включен, биты 1 и 0, выводимые на шину SIO, заменяются тонами, установленными таймерами 1 и 2. Обычно это используется для записи аналоговых сигналов, представляющих цифровые данные, на кассету.

Бит 4-6: Контроль синхронизации для работы последовательного порта. Битовые значения описаны ниже:

Бит 7: Принудительно устанавливает выходной сигнал известного 0, чтобы таймер 2 мог сбросить таймер 1 в режиме двухтонального последовательного вывода.

SKSTAT $ D20F Читать [ править ]

Статус последовательного порта

KBCODE $ D209 Читать [ редактировать ]

ТЕНЬ: CH $ 02FC

Код клавиатуры

Восемь прерываний IRQ [ править ]

ПЕРЕМЕНА
Перерыв (прерывание клавиши BREAK)
K
Клавиатура (прерывание клавиатуры)
СЭР
если последовательный вход готов (чтение прерывания с последовательной шины)
ODN
если требуются выходные данные (прерывание записи с последовательной шины)
XD
if eXmitend Data (прерывание конца последовательной передачи)
Т1
Таймер 1, прерывание от таймера 1
Т2
Таймер 2, таймер 2 прерывания
Т4
Таймер 4, таймер 4 прерывания

Прерывания могут быть включены или отключены из программного обеспечения с помощью регистра IRQEN. Регистр IRQSTAT содержит статус прерывания.

Клавиатура [ править ]

Шесть ключевой регистр фактически нажатых клавиш (K0 K5), который содержит значения от 00 до 3F. Содержит 2 контрольных значения. Один из них действует как декодер всех 6 значений. Вторые контрольные значения используются для декодирования специальных значений ключей - CTRL, SHIFT и BREAK.

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

  1. ^ "I. Теория работы". Руководство по обслуживанию домашних компьютеров Atari на месте - 400/800 . Atari, Inc., стр. 1–11.
  2. ^ «Глава 7: Звук». De Re Atari . Atari, Inc. 1982 г.
  3. ^ Майкл Каррент, "Что такое чипы SALLY, ANTIC, CTIA / GTIA, POKEY и FREDDIE?" , 8-битные компьютеры Atari: часто задаваемые вопросы
  4. ^ Гаага, Джеймс (2002-06-01). «Интервью с Дугом Нойбауэром» . Безмятежные дни . Проверено 14 января 2008 года .
  5. ^ Atari, Inc. (1979-01-24). «Устройство для создания множества звуковых звуковых эффектов» . Патент США . Проверено 14 января 2008 года .
  6. ^ https://forums.arcade-museum.com/showthread.php?t=390819&page=2

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

  • ASMA - Atari SAP Music Archive Коллекция проигрывателей музыки с чипом POKEY (SAP) и музыки SAP из различных 8-битных игр Atari.
  • Лист данных чипа POKEY отсканирован в PDF .
  • POKEY из малогабаритных логических микросхем
  • Видео Atari 8-бит (с использованием POKEY), эмулирующего чип Commodore SID.