!!!!!!! CO JEST W ŚRODKU (5) POKEY czytelnia Try2emu

CO JEST W ŚRODKU (5) POKEY

POKEY (POtentiometr and KEYboard interface) jest kolejnym specjalizowanym układem Atari. Jak wskazuje jego nazwa służy do obsługi klawiatury i wiosełek (padle). Poza tym jego zadaniem jest komunikacja z innymi urządzeniami zewnętrznymi oraz obsługa generatorów dźwięku.

KLAWIATURA

Dzięki temu, że POKEY stale kontroluje klawiaturę, każde naciśnięcie klawisza (oprócz BREAK, SHIFT i CONTROL) jest przez niego natychmiast wykrywane i wywołuje przerwanie. Klawisz BREAK jest obsługiwa ny przez odrębną procedurę („Bajtek" 2/87), natomiast wciśnięcie klawiszy SHIFT i CONTROL jest od czytywane przez POKEY z dodatkowych linii sygnałowych. Podczas procedury przerwania odczytywany jest kod klawisza, który następnie umieszczany jest w rejestrze KBCODE§, skąd do dalszego wykorzystania pobiera go system operacyjny. Kod klawisza jest modyfikowany przez dodanie 128 w przypadku jednoczesne go wciśnięcia CONTROL lub 64 w przypadku wciśnięcia SHIFT.
WIOSEŁKA

Do obsługi wiosełek służy specjalna część POKEY-a — przetwornik analogowo-cyfrowy. Przekształca on napięcie dostarczone do wejścia na odpowiedni sygnał cyfrowy przyjmujący wartości z zakresu 0-228. Można je odczytać z rejestrów POT0-POT3 lub PADDL0- -PADDL3. Informacja o tym, czy zamiana sygnału analogowego na cyfrowy dla danego wiosełka została za kończona znajduje się w rejestrze POTSTAT, w którym wiosełkom odpowiadają bity o takich samych numerach. Skasowanie bitu oznacza, że konwersja dla od powiadającego mu wiosełka została już zakończona.

Jednym z najważniejszych zadań POKEY'a jest kontrola generatorów dźwięku. Ponieważ zostało to szczegółowo opisane w „Bajtku" (11 i 12/86), ograniczę się tylko do wskazania dodatkowej korzyści. Otóż z rejestru RANDOM można odczytać losową liczbę jednobajtową (0-255), która stanowi uboczny produkt pracy generatorów dźwięku.

KOMUNIKACJA

Kolejną ważną funkcją spełnianą przez POKEY jest obsługa złącza szeregowego. W tym celu POKEY wykorzystuje cztery wewnętrzne zegary (używane także do generowania dźwięku), których wyzerowanie wywołuje przerwanie. Służą one do kontroli szybkości transmisji danych do i z komputera. Dokładniejsze przedstawienie tego zagadnienia wymagałoby oddzielnego artykułu, poprzestaniemy więc na tej krótkiej informacji.
W powyższym opisie bardzo często wspominałem o różnych przerwaniach. Musi więc istnieć sposób ich odróżniania i blokowania. Wykorzystywane są do tego rejestry IRQEN (Interrupt ReOuest ENable — zezwolenie żądania przerwania) i IROSTAT (Interrupt ReOuest STATus — stan żądania przerwania). Odpowiednie bity tych rejestrów zezwalają i zabraniają przerwań (IRQEN) oraz informują o źródle wywołanego przerwania (IROSTAT). Warto opisać je bliżej, gdyż mogą one służyć do zabezpieczenia programów.
bit znaczenie
0 Wyzerowanie zegara 1
1 Wyzerowanie zegara 2
2 Wyzerowanie zegara 4
3 Koniec przesyłania danych
4 Koniec nadawania bloku danych
5 Koniec odbierania bloku danych
6 Naciśnięcie klawisza (oprócz BREAK)
7 Naciśnięcie klawisza BREAK
Określone przerwanie jest zabronione, jeśli odpowiadający mu bit w IROEN jest skasowany (0), natomiast skasowanie bitu w IROSTAT sygnalizuje wystąpienie przerwania odpowiadającego temu bitowi.
Na zakończenie trochę adresów:

53774 IROEN zezwolenia przerwań (tylko do zapisu)
53774 IROSTAT źródła przerwań (tylko do odczytu)
16 IRQEN§ rejestr-cień IROEN
17 IRQSTAT§ rejestr-cień IROSTAT
53760-53763  POT0-POT3 stan wiosełek
624-627        PADDL0-PADDL3  rejestry-cienie wiosełek
53769 KBCODE kod ostatnio naciśniętego klawisza (tylko odczyt)
764 KBCODE§ rejestr-cień KBCODE
53768 POTSTAT wskaźnik odczytu wiosełek (tylko od czyt)
53770 RANDOM wartość losowa (tylko odczyt)
520-521 VKEYBOARD        wektor przerwania klawiatury
566-567        VBREAKKEY        wektor przerwania klawisza BREAK
528-533        VTIMER1,2,4 wektory przerwań zegarów POKEY-a
65 IOSOUNDEN        wyłączanie dźwięku podczas opera cji wejścia/wyjścia
731 CLICKDIS wyłączanie dźwięku klawiatury
Rejestry kontrolujące dźwięk zostały opisane w numerach 11 i 12/86 „Bajtka".

Wojciech Zientara