POKEY
From Atariki
Wersja z dnia 09:25, 4 gru 2005 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 15:22, 4 gru 2005 KMK (Dyskusja | wkład) Next diff → |
||
Linia 14: | Linia 14: | ||
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ę. | 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=== | ===Układ POKEY a transmisja szeregowa=== |
Wersja z dnia 15:22, 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.
Spis treści |
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ę.
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:
R | bps (PAL / NTSC) | Uwagi |
0 | 126674,7 / 127840,9 | Szybkość trudna do praktycznego użycia ze względu na zakłócenia powodowane przez układ ANTIC przy generowaniu obrazu. |
1 | 110840,4 / 111860,8 | j/w. Jest to najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 115,2 kbps (6x19200). |
2 | 98524,8 / 99431,8 | Maksymalna praktycznie użyteczna szybkość transmisji szeregowej ze stacją dysków |
3 | 88672,3 / 89488,6 | |
4 | 80611,2 / 81353,3 | Szybkość opcjonalna stacji XFD-602 |
5 | 73893,6 / 74573,8 | Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 76800 bps (4x19200). |
6 | 68209,5 / 68837,4 | 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 |
7 | 63337,3 / 63920,4 | |
8 | 59114,9 / 59659 | Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 57600 bps (3x19200). |
9 | 55420,2 / 55930,4 | Szybkość transmisji używana w rozszerzeniu Speedy 1050 |
10 | 52160,2 / 52640,4 | 52 kbps, szybkość stacji US Doubler i Happy Warp |
11 | 49262,4 / 49715,9 | |
12 | 46669,6 / 47099,3 | |
13 | 44336,1 / 44744,3 | |
14 | 42224,9 / 42613,6 | |
15 | 40305,6 / 40676,6 | |
16 | 38553,2 / 38908 | Maksymalna 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).
Systemy turbo do stacji dysków
Standardowa szybkość wymiany danych ze stacją dysków - 19200 bps - szybko okazała się dalece niewystarczająca. Ponieważ, jak napisano powyżej, możliwości układu POKEY pozwalają uzyskać znacznie więcej, wkrótce powstało kilka, różnych niestety, systemów "turbo".
US Doubler / Happy Warp
Protokół transmisji US Doublera (i zgodnego z nim Happy Warp) jest identyczny jak w standardzie, z tą różnicą, że układ POKEY programowany jest do pracy z prędkością 52 kbps. Praca w standardowym 19,2 kbps także jest możliwa. Stacja przełącza się automatycznie pomiędzy tymi dwoma trybami pracy, a do pomiaru żądanej przez komputer prędkości wykorzystuje pojawiający się na złączu szeregowym Atari synchronizujący sygnał zegarowy (CLOCK OUT).
Stacje z rozszerzeniem US Doubler implementują dodatkową komendę POLL ('?'). Wysłanie - w standardzie - tej komendy do stacji dysków powoduje, że zwraca ona 1 bajt stanowiący wartość, jaką należy wstawić do licznika układu POKEY celem uzyskania szybkiej transmisji. W standardowych stacjach US Doubler wartością tą jest $0A, ale stacje innych producentów dzięki temu mechanizmowi mogą implementować wyższe prędkości i wciąż pozostają zgodne z US Doublerem.
Atari XF-551 / CA-2001
Stacje Atari XF-551 oraz California Access 2001 mogą pracować z prędkością 38400 bps. Dla zasygnalizowania stacji, że komputer żąda pracy w turbo, przy prędkości 38400 bps używany jest inny protokół transmisji będący - oczywiście - zmodyfikowaną wersją standardowego (patrz wyżej).
Blok komendy (Command Frame) dla stacji, tak samo jak w standardzie, wysyłany jest z prędkością 19200 bps. Jednakże drugi bajt tego bloku, zawierający wartość bajtu DCMND bloku DCB, jest zwiększony o 128 (ORA #$80). Po wysłaniu komendy komputer, identycznie jak w standardzie, czeka - cały czas mając układ POKEY zaprogramowany na 19200 bps - na potwierdzenie jej przyjęcia. Negatywna odpowiedź urządzenia na taką komendę oznacza, że nie zna ono tego protokołu transmisji i nie może pracować w turbo zgodnym z XF-551.
Odpowiedź pozytywna ('A') jest sygnałem do przeprogramowania układu POKEY na większą prędkość. Komputer wstawia do licznika AUDF3/4 wartość $10; analogicznej operacji ze swojej strony dokonuje stacja dysków. Dalsza wymiana danych wywołana przez tę jedną komendę odbywa się w przyspieszonej transmisji. Po wykonaniu komendy następuje powrót do prędkości standardowej.
Ogólnie schemat wymiany danych przy odczycie jest następujący:
- prędkość 19200 bps
- komputer --> komenda 4 B + CRC --> urządzenie
- komputer <-- potwierdzenie 'A' <-- urządzenie
- przełączenie na 38400 bps
- wykonanie
- komputer <-- potwierdzenie 'C' <-- urządzenie
- komputer <-- blok danych + CRC <-- urządzenie
- przełączenie na 19200 bps
- koniec.
Natomiast zapis wygląda tak:
- prędkość 19200 bps
- komputer --> komenda 4 B + CRC --> urządzenie
- komputer <-- potwierdzenie 'A' <-- urządzenie
- przełączenie na 38400 bps
- komputer --> blok danych + CRC --> urządzenie
- komputer <-- potwierdzenie 'A' <-- urządzenie
- wykonanie
- komputer <-- potwierdzenie 'C' <-- urządzenie
- przełączenie na 19200 bps
- koniec
Budzącym zakłopotanie niedopatrzeniem jest w tym wszystkim niemożność odpytania stacji na okoliczność wartości, jaką ma mieć licznik POKEY-a w czasie przyspieszonej transmisji. Dodatkowym kłopotem posiadaczy CA-2001 jest to, że stację trzeba specjalnie zaprogramować (programem o nazwie Synchromesh dostarczonym przez producenta na dyskietce), żeby w ogóle działała w turbo. XF-551 jest tej ostatniej wady na szczęście pozbawiona.
Indus GT / LDW 2000 Super
Protokół przyspieszonej transmisji używany przez stacje Indus GT oraz LDW Super 2000 jest identyczny z tym opisanym powyżej dla Atari XF-551 oraz California Access 2001. Jedyną różnicą jest szybkość transmisji: dla LDW wynosi ona 68,2 kbps (wartość licznika POKEY-a - $06). Dla uzyskania tej prędkości konieczne jest uprzednie zaprogramowanie stacji programem Synchromesh dostarczonym przez producenta na dyskietce. Stacja pozostaje zaprogramowana aż do wyłączenia zasilania.
Ogólnie schemat wymiany danych przy odczycie jest następujący:
- prędkość 19200 bps
- komputer --> komenda 4 B + CRC --> urządzenie
- komputer <-- potwierdzenie 'A' <-- urządzenie
- przełączenie na 68,2 kbps
- wykonanie
- komputer <-- potwierdzenie 'C' <-- urządzenie
- komputer <-- blok danych + CRC <-- urządzenie
- przełączenie na 19200 bps
- koniec.
Natomiast zapis wygląda tak:
- prędkość 19200 bps
- komputer --> komenda 4 B + CRC --> urządzenie
- komputer <-- potwierdzenie 'A' <-- urządzenie
- przełączenie na 68,2 kbps
- komputer --> blok danych + CRC --> urządzenie
- komputer <-- potwierdzenie 'A' <-- urządzenie
- wykonanie
- komputer <-- potwierdzenie 'C' <-- urządzenie
- przełączenie na 19200 bps
- koniec
Top Drive / TOMS Turbo
Stacje z rozszerzeniem Top Drive 1050, TOMS Turbo oraz TOMS Multi mogą pracować z prędkością 68,2 kbps. Dla zasygnalizowania stacji, że komputer żąda pracy w turbo, przy prędkości 68,2 kbps używany jest inny protokół transmisji będący zmodyfikowaną wersją standardowego. Protokół ten jest odmienny niż w wypadku stacji XF-551.
Blok komendy (Command Frame) dla stacji, tak samo jak w standardzie, wysyłany jest z prędkością 19200 bps. Czwarty bajt tego bloku, niosący wartość bajtu DAUX2 bloku DCB, jest zwiększony o 128 (ORA #$80). Po wysłaniu komendy komputer - nie czekając na odpowiedź - przeprogramowuje układ POKEY na 68,2 kbps (wartość licznika - $06) założywszy w ciemno, że stacja ze swej strony również przełącza się na szybką transmisję. Odbiór ewentualnej negatywnej odpowiedzi oczywiście nie jest w takim układzie możliwy.
Dalsza wymiana danych wywołana przez tę jedną komendę odbywa się w przyspieszonej transmisji. Po wykonaniu komendy następuje powrót do prędkości standardowej.
Ogólnie schemat wymiany danych przy odczycie jest następujący:
- prędkość 19200 bps
- komputer --> komenda 4 B + CRC --> urządzenie
- przełączenie na 68,2 kbps
- komputer <-- potwierdzenie 'A' <-- urządzenie
- wykonanie
- komputer <-- potwierdzenie 'C' <-- urządzenie
- komputer <-- blok danych + CRC <-- urządzenie
- przełączenie na 19200 bps
- koniec.
Natomiast zapis wygląda tak:
- prędkość 19200 bps
- komputer --> komenda 4 B + CRC --> urządzenie
- przełączenie na 68,2 kbps
- komputer <-- potwierdzenie 'A' <-- urządzenie
- komputer --> blok danych + CRC --> urządzenie
- komputer <-- potwierdzenie 'A' <-- urządzenie
- wykonanie
- komputer <-- potwierdzenie 'C' <-- urządzenie
- przełączenie na 19200 bps
- koniec
Jest to zdecydowanie najpodlejsze turbo z omawianej tu czwórki; Top Drive nie dość, że ma wszystkie wady protokołu XF-551, to jeszcze dorzuca do nich jedną własną (którą jest wspomniana wyżej niemożność odrzucenia przez stację w cywilizowany sposób żądanego przez komputer trybu pracy), nie mając przy tym żadnych równoważących to zalet (jeden bajt więcej przesłany w szybkiej transmisji zwiększa prędkość wymiany danych o niecałe 8 promili).
Rejestry POKEY-a
Patrz rejestry POKEY-a.