POKEY

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 15:19, 21 wrz 2005
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 09:19, 4 gru 2005
KMK (Dyskusja | wkład)

Next diff →
Linia 2: Linia 2:
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]]. 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 [[gniazdo SIO|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 [[Rejestry POKEY-a#SEROUT|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 [[Rejestry POKEY-a#SERIN|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:
 +
 +<table border=1 cellpadding=5>
 +<tr><td><b>R</b></td><td><b>bps<br>(PAL / NTSC)</b></td><td><b>Uwagi</b></td></tr>
 +
 +<tr><td>0</td><td>126674,7 / 127840,9</td><td>Szybkość trudna do praktycznego użycia ze względu na zakłócenia powodowane przez układ [[ANTIC]] przy generowaniu obrazu.</td></tr>
 +<tr><td>1</td><td>110840,4 / 111860,8</td><td>j/w. Jest to najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 115,2 kbps (6x19200).</td></tr>
 +<tr><td>2</td><td>98524,8 / 99431,8</td><td>Maksymalna praktycznie użyteczna szybkość transmisji szeregowej ze stacją dysków</td></tr>
 +<tr><td>3</td><td>88672,3 / 89488,6</td><td> </td></tr>
 +<tr><td>4</td><td>80611,2 / 81353,3</td><td>Szybkość opcjonalna stacji [[XFD-602]]</td></tr>
 +<tr><td>5</td><td>73893,6 / 74573,8</td><td>Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 76800 bps (4x19200).</td></tr>
 +<tr><td>6</td><td>68209,5 / 68837,4</td><td>Szybkość 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</td></tr>
 +<tr><td>7</td><td>63337,3 / 63920,4</td><td> </td></tr>
 +<tr><td>8</td><td>59114,9 / 59659</td><td>Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 57600 bps (3x19200). </td></tr>
 +<tr><td>9</td><td>55420,2 / 55930,4</td><td>Szybkość transmisji używana w rozszerzeniu [[Speedy 1050]]</td></tr>
 +<tr><td>10</td><td>52160,2 / 52640,4</td><td>52 kbps, szybkość stacji [[US Doubler]] i [[Happy Warp]]</td></tr>
 +<tr><td>11</td><td>49262,4 / 49715,9</td><td> </td></tr>
 +<tr><td>12</td><td>46669,6 / 47099,3</td><td> </td></tr>
 +<tr><td>13</td><td>44336,1 / 44744,3</td><td> </td></tr>
 +<tr><td>14</td><td>42224,9 / 42613,6</td><td> </td></tr>
 +<tr><td>15</td><td>40305,6 / 40676,6</td><td> </td></tr>
 +<tr><td>16</td><td>38553,2 / 38908</td><td>Maksymalna szybkość nie modyfikowanych stacji [[XF551|XF-551]] oraz [[CA2001|CA-2001]]. Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 38400 bps (2x19200).</td></tr>
 +</table>
 +
 +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]]. Patrz [[rejestry POKEY-a]].
[[Kategoria:Atari 8-bit]] [[Kategoria:Atari 8-bit]]

Wersja z dnia 09:19, 4 gru 2005

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