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 gier. Układowi POKEY nadano oznaczenie CO12294. Posiada on 40 pinów. 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[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 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 (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, 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[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]
| 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]
- MOS Technology SID – generator dźwięku w ośmiobitowych komputerach marki Commodore
Linki zewnętrzne[edytuj | edytuj kod]
- 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