POKEY

Z Wikipedii, wolnej encyklopedii
Atari POKEY (C012294) pin-out

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.

Generowanie dźwięku za pomocą pokeya[edytuj | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

"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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

  • 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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]