POKEY
From Atariki
Wersja z dnia 15:22, 4 gru 2005 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 15:25, 4 gru 2005 KMK (Dyskusja | wkład) (jednak przeniosłem chyba trochę za dużo) Next diff → |
||
Linia 17: | Linia 17: | ||
===Układ POKEY a transmisja szeregowa=== | ===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)]]. | + | 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: | 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: | ||
Linia 62: | Linia 62: | ||
Do zapisu danych na magnetofon stosowany jest tryb dwutonowy (odczyt przebiega normalnie). | 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 [[gniazdo SIO|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 [[XF551|Atari XF-551]] oraz [[CA2001|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 [[XF551|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 [[CA2001|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. [[XF551|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 [[XF551|Atari XF-551]] oraz [[CA2001|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 [[XF551|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 [[XF551|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== | ==Rejestry POKEY-a== |
Wersja z dnia 15:25, 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).
Rejestry POKEY-a
Patrz rejestry POKEY-a.