Przejdź do zawartości

POKEY

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

POKEYukład wejścia-wyjścia stworzony w latach 70. przez firmę Atari Inc., stosowany w całej rodzinie 8-bitowych Atari, a także w różnych konsolach oraz automatach do gier. Układ POKEY, oznaczony numerem katalogowym CO12294, posiada 40 pinów 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 chippotencjometr (Paddle) i klawiatura.

Generowanie dźwięku za pomocą POKEY

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:
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 – czyste tony
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 w systemie NTSC, zaś PAL wykorzystuje 1,77 MHz, 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 jeżeli jest to NTSC, a gdy jest to PAL - 1,77 MHz). 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ą. Kanały można skonfigurować na poniższe sposoby:

  • 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 – 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) 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]

POKEY oferuje trzy timery używające kanałów audio (resetujące się po ich każdym użyciu) oraz generator liczb losowych.

Tabela rejestrów pokey'a

[edytuj | edytuj kod]
16 rejestrów pokey'a – $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]