POKEY

From Atariki

Revision as of 09:19, 4 gru 2005; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

POKEY (Pot-Keyboard Integrated Circuit) - układ LSI o oznaczeniu C012294.

Służy do generowania dźwięku, kontroli interfejsu szeregowego (SIO), obsługi manipulatorów analogowych (wiosełek - paddle) i klawiatury. Poza tym Pokey zawiera cztery układy zegarowe oraz generator liczb pseudolosowych i jest głównym - ale nie jedynym - źrodłem przerwań IRQ.

Transmisja szeregowa

Protokół transmisji urządzeń podłączonych do szyny szeregowej (SIO) jest zdefiniowany następująco:

  • 1 bit startu
  • osiem bitów danych
  • brak kontroli parzystości
  • 1 bit stopu
  • 19200 bitów na sekundę

Dane transmitowane są w kolejności od najmłodszego bitu. Szybkość transmisji 19200 bitów na sekundę nie dotyczy magnetofonu kasetowego, gdzie określona jest na 600 bitów na sekundę.

Przebieg komunikacji pomiędzy komputerem i urządzeniem jest następujący:

1) komputer ustawia linię COMMAND portu SIO;

2) komputer formuje czterobajtowy blok komendy, tzw. Command Frame. Command Frame składa się kolejno z (bajt 1) dodanych do siebie wartości DDEVIC i DUNIT, odjąć 1; (bajt 2) wartości DCMND; (bajt 3) wartości DAUX1; (bajt 4) wartości DAUX2;

3) komenda jest wysyłana do urządzenia razem z dołączoną na końcu sumą kontrolną; czas pomiędzy ustawieniem linii COMMAND a wysłaniem komendy musi być nie mniejszy niż 750 usec i nie większy niż 1600 usec.

4) komputer kasuje linię COMMAND portu SIO (nie wcześniej niż po 650 usec i nie później niż 950 usec po wysłaniu komendy) i czeka na odpowiedź;

5) urządzenie przyjmuje komendę; jeśli urządzenie stwierdziło w komendzie błąd sumy kontrolnej, nie reaguje; jeśli komenda jest nierozpoznana, albo nieprawidłowe są jej parametry (np. nie istnieje sektor o podanym numere), odpowiedzią jest $4E ("N", jak Negative Acknowledge) i na tym transmisja się kończy; jeśli komenda jest urządzeniu znana a parametry prawidłowe, odpowiedzią jest $41 ("A", jak Acknowledge). Odpowiedź urządzenia musi nastąpić w czasie od 0 do 16 msec. od skasowania linii COMMAND przez komputer;

6) jeśli komenda jest wykonalna i jest to odczyt danych, urządzenie podejmuje próbę wykonania operacji; jeśli się to nie uda (np. nie można odczytać sektora z powodu uszkodzenia nośnika), wysyła kod $45 ("E", jak Error) i na tym transmisja się kończy; w przeciwnym wypadku przesyłany jest kod $43 ("C", jak Complete), a następnie blok danych zakończony sumą kontrolną i na tym transmisja się kończy; po przesłaniu potwierdzenia ("C") blok danych po musi nadejść nie wcześniej niż w ciągu 1000 usec. i nie później niż w ciągu 1800 usec.;

7) jeśli to jest zapis danych, komputer przesyła blok danych plus sumę kontrolną do urządzenia. Po jego przyjęciu i stwierdzeniu poprawności urządzenie odpowiada kodem $41 ("A") i przystępuje do np. zapisania danych na nośnik. Po zapisie urządzenie informuje komputer kodem "C" lub "E" o znaczeniu jak powyżej, i na tym transmisja się kończy. Przesłanie danych po potwierdzeniu ("A") musi nastąpić nie wcześniej niż w ciągu 1000 usec. i nie później niż w ciągu 1800 usec. Przesłanie potwierdzenia końcowego ("C" lub "E") musi nastąpić w czasie od 850 usec. do 16 msec. po przesłaniu bloku danych.

Ogólnie potwierdzenie końcowe ("C" lub "E") musi nadejść z urządzenia nie wcześniej niż po 250 usec. i nie później niż po 255 sekundach - czyli po 4 minutach i 15 sekundach - od nadesłania potwierdzenia komendy ("A").

Ogólnie schemat wymiany danych przy odczycie jest następujący:

  • komputer --> komenda 4 B + CRC --> urządzenie
  • komputer <-- potwierdzenie 'A' <-- urządzenie
  • wykonanie
  • komputer <-- potwierdzenie 'C' <-- urządzenie
  • komputer <-- blok danych + CRC <-- urządzenie
  • koniec.

Natomiast zapis wygląda tak:

  • komputer --> komenda 4 B + CRC --> urządzenie
  • komputer <-- potwierdzenie 'A' <-- urządzenie
  • komputer --> blok danych + CRC --> urządzenie
  • komputer <-- potwierdzenie 'A' <-- urządzenie
  • wykonanie
  • komputer <-- potwierdzenie 'C' <-- urządzenie
  • koniec

W fazie oznaczonej jako wykonanie urządzenie dokonuje niezbędnych czynności (np. stacja dysków wyszukuje żądany sektor na dyskietce i odczytuje go, albo zapisuje), a komputer czeka.

Potwierdzenia przesyłane są bez sum kontrolnych (CRC).

Układ POKEY a transmisja szeregowa

Transmisja szeregowa jest wspomagana przez układ POKEY. Działa on jako UART, przejmując na siebie podział bajtów, wpisanych przez system do rejestrze wyjścia szeregowego (SEROUT), na pojedyncze bity i wyemitowanie ich na złącze szeregowe z zaprogramowaną częstotliwością, lub scalenie napływających z urządzenia bitów w bajt i przekazanie go w rejestrze wejścia szeregowego (SERIN).

Szybkość transmisji programowana jest przy użyciu połączonych w parę dzielników 3 i 4 (AUDF3 i AUDF4), do których doprowadza się sygnał o częstotliwości głównego zegara systemu, czyli 1773446,25 Hz w systemie PAL albo 1789772,5 Hz w systemie NTSC. Szybkość tę możemy obliczyć według następującego wzoru:

baud = (F/2)/(R+7)

gdzie F to wspomniana wyżej częstotliwość bazowa, a R - wartość wstawiana do rejestru układu POKEY. Żądaną wartość licznika dla znanej prędkości możemy obliczyć po przekształceniu tego wzoru:

R = ((F/2)/baud)-7

Szukana wartość to R po zaokrągleniu do najbliższej całkowitej.

Normalnie ustawianą przez system operacyjny wartością R jest 40. Teoretycznie ma to odpowiadać szybkości 19200 bitów na sekundę, z podanego wzoru wynika jednak, że w rzeczywistości jest to 18866,45 bps w systemie PAL oraz 19040 bps w systemie NTSC. W praktyce szybkość transmisji nieprzyspieszanej może wahać się w zakresie od 17734,46 bps do 20152,8 bps (19200 bps +/- 5%; odpowiada to wartościom dzielnika POKEY-a z zakresu od 43 do 37, w systemie PAL).

Możliwości układu POKEY nie kończą się jednak na szybkości 20 kbps. Niektóre możliwe do wygenerowania szybkości transmisji przedstawia poniższa tabela:

Rbps
(PAL / NTSC)
Uwagi
0126674,7 / 127840,9Szybkość trudna do praktycznego użycia ze względu na zakłócenia powodowane przez układ ANTIC przy generowaniu obrazu.
1110840,4 / 111860,8j/w. Jest to najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 115,2 kbps (6x19200).
298524,8 / 99431,8Maksymalna praktycznie użyteczna szybkość transmisji szeregowej ze stacją dysków
388672,3 / 89488,6
480611,2 / 81353,3Szybkość opcjonalna stacji XFD-602
573893,6 / 74573,8Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 76800 bps (4x19200).
668209,5 / 68837,4Szybkość stacji LDW Super 2000, Top Drive 1050, TOMS Turbo, TOMS Multi, TOMS 710, TOMS 720, XFD-601/602 itd., krótko mówiąc, najpopularniejsze "turbo" do szeregowej stacji dysków
763337,3 / 63920,4
859114,9 / 59659Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 57600 bps (3x19200).
955420,2 / 55930,4Szybkość transmisji używana w rozszerzeniu Speedy 1050
1052160,2 / 52640,452 kbps, szybkość stacji US Doubler i Happy Warp
1149262,4 / 49715,9
1246669,6 / 47099,3
1344336,1 / 44744,3
1442224,9 / 42613,6
1540305,6 / 40676,6
1638553,2 / 38908Maksymalna szybkość nie modyfikowanych stacji XF-551 oraz CA-2001. Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 38400 bps (2x19200).

Oczywiście wartość dzielnika częstotliwości może mieć i wyższe wartości, do 65535 włącznie (co daje 13,6 bps).

Magnetofon

Dla magnetofonu domyślną wartością rejestru jest 1484, co odpowiada szybkości 594,7 bps. Szybkość tę podczas transmisji komputer dostosowuje w pewnym zakresie do bieżących potrzeb wynikłych np. z nierównomiernego przesuwu taśmy bądź jej rozciągnięcia itd.

Do zapisu danych na magnetofon stosowany jest tryb dwutonowy (odczyt przebiega normalnie).

Patrz rejestry POKEY-a.

Personal tools