POKEY

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
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:

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).

Rejestry POKEY-a

Patrz rejestry POKEY-a.

Personal tools