POKEY – stworzony w latach 70. przez firmę Atari Inc. układ wejścia-wyjścia, stosowany w całej rodzinie 8-bitowych Atari, różnych konsolach oraz automatach do gier. Układowi POKEY nadano oznaczenie CO12294. Posiada on 40 pinów. Układ odpowiada za: generowanie dźwięku, obsługę klawiatury, portu szeregowego i potencjometrów czy generowanie liczb pseudolosowych. Nazwa pochodzi od słów potentiometer and keyboard chippotencjometr (Paddle) i klawiatura.

Atari POKEY (C012294) pin-out

Generowanie dźwięku za pomocą pokeya edytuj

POKEY posiada cztery kanały audio, z których każdy posiada własną regulację częstotliwości, szumu i siły głosu.

Każdy kanał ma 8-bitowy dzielnik częstotliwości i 8-bitowy rejestr do wyboru szumu i głośności:
AUDIOF1 do AUDIOF4 – rejestry częstotliwości (ang. audio frequency),
AUDC1 do AUDC4 – rejestr głośności i szumów (ang. audio control),
AUDCTL – wspólny rejestr do sterowania generatorami.

Opis rejestrów AUDIOC1-4 edytuj

Bit 0-3
Sterowanie natężeniem dźwięku od 0 do F.
Bit 4
Kontrola dzielnika częstotliwości dźwięku: "1" włączony, "0" wyłączony. Kiedy dzielnik częstotliwości jest wyłączony, generowane są stałe dźwięki o natężeniu dźwięku zapisanym w bitach 0-3.
Bit 5-7
Rejestry przesuwające odpowiedzialne za szumydistortion:
000 = rejestr 5-bitowy i 17-bitowy
001 = rejestr 5-bitowy
010 = rejestr 5-bitowy i 4-bitowy
011 = rejestr 5-bitowy – dubluje się, nie jest używany
100 = rejestr 17-bitowy
101 = bez rejestru przesuwającego – pure tones
110 = rejestr 4-bitowy
111 = bez rejestru przesuwającego – dubluje się, nie jest używany

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 NTSC a 1,77 MHz 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.

Opis rejestru AUDIOCTL edytuj

"1" oznacza włączony, chyba że napisane jest inaczej:

Bit 0 (15 KHz)
wybór taktowania dzielników częstotliwości "0" – 64 KHz, "1" – 15 KHz 1,
Bit 1 (FI2+4)
filtr górnoprzepustowy dla kanału 2 taktowany częstotliwością kanału 4,
Bit 2 (FI1+3)
filtr górnoprzepustowy dla kanału 1 taktowany częstotliwością kanału 3,
Bit 3 (CH4+3)
połączenie dzielników 4+3 dla uzyskania dokładności 16-bitowej,
Bit 4 (CH2+1)
połączenie dzielników 2+1 dla uzyskania dokładności 16-bitowej,
Bit 5 (1,79CH3)
taktowanie kanału 3 częstotliwością "0" – 1,77 MHz PAL, "1" – 1,79 MHz NTSC,
Bit 6 (1,79CH1)
taktowanie kanału 1 częstotliwością "0" – 1,77 MHz PAL, "1" – 1,79 MHz NTSC,
Bit 7 (POLY9)
służy do przełączania rejestru przesuwającego "0" – 17-bit, "1" – 9-bit.

Wszystkie cztery dzielniki częstotliwości (AUDIOF) mogą być równocześnie taktowane 64 KHz lub 15 KHz. Dzielniki częstotliwości 1 i 4 mogą być taktowane na przemian zegarem CPU (1,79 MHz NTSC a 1,77 MHz PAL). Dzielniki częstotliwości 2 i 4 mogą być taktowane na przemian wyjściem dzielników 1 i 3. Dzięki temu układ Pokey umożliwia łączenie ze sobą kanałów 8-bitowych, tak by uzyskany dźwięk miał dokładność 16-bitową. Poniżej, możliwości konfiguracji kanałów:

  • cztery kanały 8-bitowe
  • dwa kanały 8-bitowe i jeden kanał 16-bitowy
  • dwa kanały 16-bitowe

Dodatkowe informacje edytuj

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, po każdej takiej operacji powinno się go od nowa inicjować. Należy wprowadzić wartość 3 do rejestru $D20F oraz 0 do rejestru $D208

Szeregowy port wejścia wyjścia edytuj

Składają się na niego:

  • szeregowa linia wejścia
  • szeregowa linia wyjścia
  • szeregowa linia zegara wyjścia
  • dwukierunkowa szeregowa linia danych zegara
  • rejestry SKRES, SEROUT, SERIN, SKCTL, SKSTAT

Osiem przerwań IRQ edytuj

  • BREAK – break (przerwanie klawisza BREAK)
  • K – keyboard (przerwanie klawiatury)
  • SIR – if serial input ready (przerwanie odczytu z szyny szeregowej)
  • ODN – if output data needed (przerwanie zapisu na szynę szeregową)
  • XD – if exmitend Data (przerwanie końca transmisji szeregowej)
  • T1 – timer 1, przerwanie licznika nr 1
  • T2 – timer 2, przerwanie licznika nr 2
  • T4 – timer 4, przerwanie licznika nr 4

Przerwania mogą zostać włączone lub wyłączone programowo za pomocą rejestru IRQEN. Rejestr IRQSTAT zawiera status przerwań.

Klawiatura edytuj

Sześcioklawiszowy rejestr aktualnie wciśniętych klawiszy (K0 K5), który przechowuje wartości od 00 do 3F. Znajdują się tutaj 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.

Potencjometry edytuj

Osiem portów do mierzenia czasu narastania wejścia. Każde wejście ma 8-bitowy licznik, odmierzający czas przy wyświetlaniu każdej kolejnej linii telewizyjnej. Każde wejście ma także tranzystor zrzutu, który można włączyć lub wyłączyć programowo.

Inne cechy edytuj

Ponadto POKEY oferuje:

  • trzy timery, które używają kanałów audio. Po użyciu timera kanały audio zostaną zresetowane,
  • generator liczb losowych.

Tabela rejestrów pokeya edytuj

16 rejestrów pokeya – $D200–$D20F
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

Zobacz też edytuj

Linki zewnętrzne edytuj