POKEY
Ten artykuł należy dopracować |
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 gry. Układowi POKEY nadano oznaczenie CO12294. Posiada 40 końcówek. Układ jest odpowiedzialny za: generowanie dźwięku, obsługę klawiatury, obsługę portu szeregowego, obsługę potencjometrów czy generowanie liczb pseudolosowych. Nazwa POKEY pochodzi od słów potentiometer and keyboard chip – potencjometr (Paddle) i klawiatura.
Generowanie dźwięku za pomocą pokeya
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
- 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
- 001 = rejestr 5-bitowy
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
"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
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 $D208
Szeregowy port wejścia wyjścia
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
- 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
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
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
Ponadto POKEY oferuje:
- Trzy timery, które używają kanały audio. Po użyciu timera, kanały audio zostaną zresetowane.
- Generator liczb losowych.
Tabela rejestrów pokeya
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ż
- MOS Technology SID – generator dźwięku w ośmiobitowych komputerach marki Commodore
Linki zewnętrzne
- Specyfikacja techniczna układu POKEY. retromicro.com. [zarchiwizowane z tego adresu (2011-01-05)].
- Archiwum muzyki dla chipu POKEY
- Aktualne repozytorium Atari Sap Music Archive
- Hasło POKEY w Atariki
Media użyte na tej stronie
Autor:
- Atari_POKEY.png: Hellisp
- vectorization: Deuterium360 (talk)
Atari POKEY Chip