
POKEY (Pot Keyboard Integrated Circuit) – układ wejścia-wyjścia zaprojektowany w latach 70. przez firmę Atari Inc., stosowany w całej rodzinie 8-bitowych Atari, a także w pewnych konsolach oraz automatach do gier. Układ POKEY, oznaczony numerem katalogowym CO12294, posiada 40 pinów w obudowie DIP i pełni szereg funkcji, w tym: generowanie dźwięku, obsługę klawiatury, portu szeregowego i potencjometrów, a także generowanie liczb pseudolosowych. Nazwa pochodzi od słów potentiometer and keyboard chip – potencjometr (Paddle) i klawiatura. Układ został po raz pierwszy zastosowany w roku 1979 w Atari 400 oraz Atari 800 i był używany we wszystkich późniejszych modelach oraz konsoli Atari 5200.
POKEY dysponuje czterema kanałami audio, z których każdy ma możliwość indywidualnej regulacji częstotliwości, poziomu szumu i natężenia dźwięku.
Każdy kanał ma 8-bitowy dzielnik częstotliwości i 8-bitowy rejestr do wyboru szumu i głośności:
Generacja losowych szumów odbywa się poprzez odczyt górnych 8 bitów 17-bitowego rejestru przesuwającego. Rejestry te taktowane są częstotliwością 1,79 MHz w systemie NTSC oraz 1,77 MHz w systemie PAL, jednak ich wyjścia mogą być próbkowane niezależnie przez cztery kanały audio, w tempie dzielnika częstotliwości danego kanału.
"1" oznacza włączony, chyba że napisane jest inaczej:
Wszystkie cztery dzielniki częstotliwości AUDF mogą być równocześnie taktowane częstotliwością 64 kHz lub 15 kHz. Dzielniki 1 i 4 mogą być taktowane naprzemiennie zegarem CPU (1,79 MHz w systemie NTSC oraz 1,77 MHz w systemie PAL). Dzielniki 2 i 4 mogą być taktowane wyjściem dzielników 1 i 3. Pozwala to układowi POKEY na łączenie kanałów 8‑bitowych w celu uzyskania dźwięku o rozdzielczości 16‑bitowej. Kanały mogą być konfigurowane na następujące sposoby:
Każda operacja wejścia-wyjścia powoduje zmianę wartości rejestrów sterujących generatorami. Dlatego, podczas korzystania z układu POKEY do generowania dźwięku, należy go od nowa inicjować po każdej takiej operacji. Aby to zrobić, należy wprowadzić wartość 3 do rejestru $D20F oraz 0 do rejestru $D208.
Składają się na niego:
Przerwania mogą zostać włączone lub wyłączone programowo za pomocą rejestru IRQEN. Rejestr IRQSTAT zawiera status przerwań.
Sześcioklawiszowy rejestr aktualnie wciśniętych klawiszy (K0 K5) przechowuje wartości od 00 do 3F. Znajdują się w nim dwie wartości sterujące. Jedna z nich pełni rolę deszyfratora wszystkich 6 wartości. Druga wartość sterująca jest przeznaczona do dekodowania znaków specjalnych CTRL, SHIFT i BREAK.
Układ POKEY zawiera osiem portów umożliwiających pomiar czasu narastania sygnału na wejściach. Każde z wejść wyposażone jest w 8-bitowy licznik, który odmierza czas na podstawie wyświetlania kolejnych linii telewizyjnych. Dodatkowo każde wejście ma tranzystor zrzutu, którego stan może być kontrolowany programowo.
POKEY oferuje trzy timery używające kanałów audio (resetujące się po każdym ich użyciu) oraz generator liczb losowych.
| Rejestr | Zapis | Odczyt | ||
|---|---|---|---|---|
| Nazwa | Opis | Nazwa | Opis | |
| $D200 | AUDF1 | częstotliwość kanału 1 | POT0 | potencjometr nr 0 |
| $D201 | AUDC1 | generator kanału 1 | POT1 | potencjometr nr 1 |
| $D202 | AUDF2 | częstotliwość kanału 2 | POT2 | potencjometr nr 2 |
| $D203 | AUDC2 | generator kanału 2 | POT3 | potencjometr nr 3 |
| $D204 | AUDF3 | częstotliwość kanału 3 | POT4 | potencjometr nr 4 |
| $D205 | AUDC3 | generator kanału 3 | POT5 | potencjometr nr 5 |
| $D206 | AUDF4 | częstotliwość kanału 4 | POT6 | potencjometr nr 6 |
| $D207 | AUDC4 | generator kanału 4 | POT7 | potencjometr nr 7 |
| $D208 | AUDCTL | kontrola nad kanałami audio | POTSTAT | odczyt wszystkich 8 linii portu potencjometrów |
| $D209 | STIMER | uruchomienie timera | KBCODE | kod ostatnio wciśniętego klawisza |
| $D20A | SKRES | reset statusu portu szeregowego | RANDOM | wartość generatora liczb losowych |
| $D20B | POTGO | rozpocznij sekwencje skanowania portu | ||
| $D20C | ||||
| $D20D | SEROUT | rejestr wyjściowy portu szeregowego | SERIN | rejestr wejściowy portu szeregowego |
| $D20E | IRQEN | aktywacja przerwań IRQ | IRQSTAT | status przerwań IRQ |
| $D20F | SKCTL | kontrola nad portem szeregowym | SKSTAT | status portu szeregowego |