POKEY

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
Atari POKEY (C012294) pin-out

Pokey stworzony w latach 80. przez firmę Atari Inc. to układ wejścia, wyjścia montowany w całej rodzinie 8-bitowych Atari, różnych konsolach oraz automatach arcade. Układ POKEY oznaczony został CO12294, ma 40 końcówek i jest odpowiedzialny za generowanie dźwięku, obsługę klawiatury, port szeregowy, obsługę potencjometrów, generowanie liczb pseudolosowych. Nazwa POKEY pochodzi od słów POtentiometer and KEYboard chip – potencjometr (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 (AUDio Frequency)
AUDC1 do AUDC4 – rejestr głośności i szumów (AUDio Control)
AUDCTL – wspólny rejestr do sterowania generatorami (AUDio ConTroL)

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 szumy – distortion:
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 rejestru przesuwającego 17-bit. 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 (15KHz) 
wybór taktowania dzielników częstotliwości "0" – 64KHz, "1" – 15KHz 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" – 9bit

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 kiedy korzystamy z układu Pokey do generowania dźwięku, to po każdej takiej operacji powinno się go od nowa inicjować. Należy wpisać wartość 3 do rejestru $D20F oraz 0 do rejestru $D08

Szeregowy port wejścia wyjścia[edytuj | edytuj kod]

Składa 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 2 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 włączyć programowo.

Inne cechy[edytuj | edytuj kod]

Ponadto POKEY oferuje:

  • Trzy timery, które używają kanały audio. Jeżeli timer zostanie użyty 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 statusu przerwań IRQ
$D20F SKCTL kontrola nad portem szeregowym SKSTAT status portu szeregowego

Zobacz też[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]