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
Aktualna wersja
Mono (Dyskusja | wkład)
(Zobacz też)
Linia 1: Linia 1:
-'''POKEY''' (''Pot-Keyboard Integrated Circuit'') - układ LSI o oznaczeniu C012294.+{{grafr|Atari_POKEY.png}}
 +Pot-Keyboard Integrated Circuit - wielofunkcyjny układ LSI. Stosowany w [[Atari 8-bit|8-bitowych komputerach Atari]], konsoli [[5200]], niektórych kartridżach do konsoli [[7800]] oraz w części gier salonowych produkcji Atari.
-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]].+== Numery katalogowe ==
 + 
 +* Standard: '''C012294'''
 +* [[PORKEY]] (wersja ze zintegrowanymi multiplekserami 4051B, prototyp): '''C020574'''
 +* MEG (wersja CMOS): '''C021463'''
 +* [[QUAD POKEY]]: '''C024425'''
 + 
 +== Przeznaczenie ==
 + 
 +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 - źródłem przerwań [[IRQ]]. Układ ma [[rejestry POKEY-a|29 rejestrów]] i zajmuje adresy $D200-$D2FF.
==Transmisja szeregowa== ==Transmisja szeregowa==
-Protokół transmisji urządzeń podłączonych do szyny szeregowej ([[SIO]]) jest zdefiniowany następująco:+===Protokół transmisji pojedynczych bajtów===
-* 1 bit startu+Protokół transmisji urządzeń podłączonych do szyny szeregowej (zob. [[Gniazdo SIO]]) jest zdefiniowany następująco:
 + 
 +* 1 bit startu (0)
* osiem bitów danych * osiem bitów danych
* brak kontroli parzystości * brak kontroli parzystości
-* 1 bit stopu+* 1 bit stopu (1)
* 19200 bitów na sekundę * 19200 bitów na sekundę
 +* poziom +4 V oznacza logiczną jedynkę, a 0 V - zero.
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ę.
-===Układ POKEY a transmisja szeregowa===+Układ POKEY działa jako [http://en.wikipedia.org/wiki/UART UART], przejmując na siebie podział bajtów, wpisanych przez system do [[Rejestry POKEY-a#SEROUT|rejestru 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===
-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 przez OS 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 1773447 Hz w systemie PAL albo 1789772,5 Hz w systemie [http://pl.wikipedia.org/wiki/NTSC NTSC]. Szybkość tę możemy obliczyć według następującego wzoru:
baud = (F/2)/(R+7) 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:+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 R = ((F/2)/baud)-7
-Szukana wartość to R po zaokrągleniu do najbliższej całkowitej.+Szukana wartość (tzw. [[HS Index]]) 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).+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:+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> <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><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>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 (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>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>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>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>4</td><td>80611,2 / 81353,3</td><td>Szybkość opcjonalna stacji [[XFD602]]</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>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>6</td><td>68209,5 / 68837,4</td><td>Szybkość stacji [[LDW Super 2000]], [[Top Drive 1050]], [[TOMS Turbo Drive]], [[TOMS Multi Drive]], [[TOMS 710]], [[TOMS 720]], [[XFD601]]/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>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>8</td><td>59114,9 / 59659</td><td>Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 57600 bps (3x19200). Szybkość transmisji używana w stacji [[SN-360]] z firmwarem [[Mikey|Mikeya]] (jedyna możliwa prędkość turbo, narzucona sprzętowo przez zegar UARTa w stacji)</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>9</td><td>55420,2 / 55930,4</td><td>Szybkość transmisji używana w rozszerzeniach [[Speedy 1050]] oraz [[Hyper-XF]]</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>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>11</td><td>49262,4 / 49715,9</td><td> </td></tr>
Linia 52: Linia 65:
<tr><td>14</td><td>42224,9 / 42613,6</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>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>+<tr><td>16</td><td>38553,2 / 38908</td><td>Maksymalna szybkość nie modyfikowanych stacji [[XF551|XF-551]] oraz [[CA-2001]]. Najbliższy (odchyłka <5%) odpowiednik "standardowej" szybkości 38400 bps (2x19200).</td></tr>
</table> </table>
Linia 61: Linia 74:
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. 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).+Odczyt z magnetofonu przeprowadzany jest tak samo, jak komunikacja z innymi urządzeniami. Do zapisu danych na magnetofon stosowany jest tryb dwutonowy, gdzie logicznej jedynce odpowiada ton o częstotliwości 5278 Hz, a zeru - o częstotliwości 3958,56 Hz (w systemie PAL; odpowiednio są to wartości 5 i 7 dla rejestrów AUDF1 i 2).
- +
-===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]].+===Przydźwięk I/O===
-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.+Podczas odczytu szeregowego na wyjściu audio komputera pojawia się dźwięk sygnalizujący, że transmisja jest w toku. Dźwięk ten jest generowany automatycznie przez POKEY-a, a źródłem jest kanał audio użyty jako generator częstotliwości (normalnie AUDF3/4) dla wejścia szeregowego.
-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.+Sposób generowania dźwięku jest dość prosty. Podczas odczytu z dyskietki na wyjściu AUDIO (pin 37) pojawia się sygnał prostokątny 1Vpp (Voh=~5V, Vih=~4V). Na każdy odebrany bajt - dziesięć okresów (start, 8 bitów danych, stop) o częstotliwości równej prędkości transmisji. Przy 19200 bps jest to oczywiście zbyt wysoka częstotliwość, aby była słyszalna. To co słychać, to krótka (ok. pół bitu) przerwa na synchronizację generatora, pomiędzy bitem stopu bajtu n a bitem startu bajtu n+1 (czyli ton o częstotliwości ok. 1800 Hz); i, oczywiście, dłuższe przerwy między odbieranymi bajtami 'A' i 'C' (patrz [[SIO#Po.C5.82.C4.85czenia_szeregowe|SIO]]).
-Ogólnie schemat wymiany danych przy odczycie jest następujący:+{{ImgFrm|http://drac030.krap.pl/transmisja-mini.png|http://drac030.krap.pl/transmisja.png|Przebiegi sygnałów ''audio '' i ''data in'' podczas odczytu z magnetofonu - wykres z analizatora stanów logicznych.}}
-* prędkość 19200 bps+Z odczytem z kasety jest bardzo podobnie - najpierw odbiór dwóch bajtów $AA (ustalenie częstotliwości taktowania - brak dźwięku na wyjściu), potem prawie dokładnie tak samo jak dla dysku, czyli dziesięć okresów częstotliwości taktowania na każdy odbierany bajt, z synchronizacją generatora każdym kolejnym bitem startu. Amplituda sygnału jest o około połowę mniejsza niż przy odczycie z dysku. Dodatkowo pojawia się (prawdopodobnie losowo - nie zauważa się jakiejś zależności - na oko z prawdopodobieństwem bliskim 0,5) modulacja dźwięku podstawowego częstotliwością 31,666 kHz o znacznie większej amplitudzie (łacznie 4Vpp) - ale raczej bez znaczenia dla brzmienia. To, co słychać, to ton podstawowy ~600 Hz z nałożoną częstotliwością synchronizacji bajt/bajt - ~ 60Hz. Okresowa (na blok danych) zmiana brzmienia pochodzi stąd, że dla każdego bloku występuje pewna niedokładność określenia częstotliwości taktowania (nieco inna wysokość tonu podstawowego), a ona z kolei powoduje inną długość przerw na synchronizację bajt/bajt.
-* 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:+Nie ma żadnej zależności między zawartością danych a generowanym dźwiękiem. Wrażenie, że jest inaczej, powstaje raczej wskutek przesłuchów i zakłóceń na połączeniach SIO w przypadku stacji dysków, w przypadku magnetofonu - przesłuchów pomiędzy ścieżką danych a (zazwyczaj pustą) ścieżką audio itp.
-* prędkość 19200 bps+Jak napisano, przydźwięk kontrolny generowany jest tylko podczas odczytu, ale jednak zapis też nie jest całkowicie bezgłośny: w przypadku "normalnych" urządzeń szeregowych [[SIO]] (tj. wszystkich oprócz magnetofonu) źródłem dobiegających wtedy z głośnika postukiwań czy też chrupnięć są nadsyłane przez urządzenie potwierdzenia odbioru komend i danych. Natomiast zapis na magnetofon jest, jak napisano powyżej, realizowany akustycznie w trybie dwutonowym, stąd dźwięk.
-* 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).+Przydźwięk można wyłączyć zerując rejestr systemowy IOSNDEN ($41), co powoduje, że procedury szeregowe OS-u redukują głośność w kanale AUDF3/4 do zera i dźwięk milknie; normalnie zaś stosowanym poziomem głośności jest 8.
-==Rejestry POKEY-a==+== Zobacz też ==
 +* [[Rejestry POKEY-a]]
 +* [[QPokey]]
 +* [[QUAD POKEY]]
 +* [[HOKEY]]
 +* [[PokeyMAX]]
 +* [[PokeyONE]]
 +* [[Evie]]
-Patrz [[rejestry POKEY-a]].+== Odnośniki zewnętrzne ==
 +* [http://ftp.pigwa.net/stuff/collections/nir_dary_cds/Tech%20Info/POKEY.PDF POKEY CO12294 - oryginalna dokumentacja]. Zawiera wewnętrzne schematy
 +* [http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm Wersja HTML dokumentacji]
 +* [http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#Pin%20list Opis końcówek]
 +* [http://en.wikipedia.org/wiki/POKEY POKEY w Wikipedii]
[[Kategoria:Atari 8-bit]] [[Kategoria:Atari 8-bit]]

Aktualna wersja

Grafika:Atari_POKEY.png

Pot-Keyboard Integrated Circuit - wielofunkcyjny układ LSI. Stosowany w 8-bitowych komputerach Atari, konsoli 5200, niektórych kartridżach do konsoli 7800 oraz w części gier salonowych produkcji Atari.

Spis treści

Numery katalogowe

  • Standard: C012294
  • PORKEY (wersja ze zintegrowanymi multiplekserami 4051B, prototyp): C020574
  • MEG (wersja CMOS): C021463
  • QUAD POKEY: C024425

Przeznaczenie

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 - źródłem przerwań IRQ. Układ ma 29 rejestrów i zajmuje adresy $D200-$D2FF.

Transmisja szeregowa

Protokół transmisji pojedynczych bajtów

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

  • 1 bit startu (0)
  • osiem bitów danych
  • brak kontroli parzystości
  • 1 bit stopu (1)
  • 19200 bitów na sekundę
  • poziom +4 V oznacza logiczną jedynkę, a 0 V - zero.

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 działa jako UART, przejmując na siebie podział bajtów, wpisanych przez system do rejestru 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

Szybkość transmisji programowana jest przez OS 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 1773447 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ść (tzw. HS Index) 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 XFD602
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 Drive, TOMS Multi Drive, TOMS 710, TOMS 720, XFD601/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). Szybkość transmisji używana w stacji SN-360 z firmwarem Mikeya (jedyna możliwa prędkość turbo, narzucona sprzętowo przez zegar UARTa w stacji)
955420,2 / 55930,4Szybkość transmisji używana w rozszerzeniach Speedy 1050 oraz Hyper-XF
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.

Odczyt z magnetofonu przeprowadzany jest tak samo, jak komunikacja z innymi urządzeniami. Do zapisu danych na magnetofon stosowany jest tryb dwutonowy, gdzie logicznej jedynce odpowiada ton o częstotliwości 5278 Hz, a zeru - o częstotliwości 3958,56 Hz (w systemie PAL; odpowiednio są to wartości 5 i 7 dla rejestrów AUDF1 i 2).

Przydźwięk I/O

Podczas odczytu szeregowego na wyjściu audio komputera pojawia się dźwięk sygnalizujący, że transmisja jest w toku. Dźwięk ten jest generowany automatycznie przez POKEY-a, a źródłem jest kanał audio użyty jako generator częstotliwości (normalnie AUDF3/4) dla wejścia szeregowego.

Sposób generowania dźwięku jest dość prosty. Podczas odczytu z dyskietki na wyjściu AUDIO (pin 37) pojawia się sygnał prostokątny 1Vpp (Voh=~5V, Vih=~4V). Na każdy odebrany bajt - dziesięć okresów (start, 8 bitów danych, stop) o częstotliwości równej prędkości transmisji. Przy 19200 bps jest to oczywiście zbyt wysoka częstotliwość, aby była słyszalna. To co słychać, to krótka (ok. pół bitu) przerwa na synchronizację generatora, pomiędzy bitem stopu bajtu n a bitem startu bajtu n+1 (czyli ton o częstotliwości ok. 1800 Hz); i, oczywiście, dłuższe przerwy między odbieranymi bajtami 'A' i 'C' (patrz SIO).

transmisja-mini.png
Przebiegi sygnałów audio i data in podczas odczytu z magnetofonu - wykres z analizatora stanów logicznych.

Z odczytem z kasety jest bardzo podobnie - najpierw odbiór dwóch bajtów $AA (ustalenie częstotliwości taktowania - brak dźwięku na wyjściu), potem prawie dokładnie tak samo jak dla dysku, czyli dziesięć okresów częstotliwości taktowania na każdy odbierany bajt, z synchronizacją generatora każdym kolejnym bitem startu. Amplituda sygnału jest o około połowę mniejsza niż przy odczycie z dysku. Dodatkowo pojawia się (prawdopodobnie losowo - nie zauważa się jakiejś zależności - na oko z prawdopodobieństwem bliskim 0,5) modulacja dźwięku podstawowego częstotliwością 31,666 kHz o znacznie większej amplitudzie (łacznie 4Vpp) - ale raczej bez znaczenia dla brzmienia. To, co słychać, to ton podstawowy ~600 Hz z nałożoną częstotliwością synchronizacji bajt/bajt - ~ 60Hz. Okresowa (na blok danych) zmiana brzmienia pochodzi stąd, że dla każdego bloku występuje pewna niedokładność określenia częstotliwości taktowania (nieco inna wysokość tonu podstawowego), a ona z kolei powoduje inną długość przerw na synchronizację bajt/bajt.

Nie ma żadnej zależności między zawartością danych a generowanym dźwiękiem. Wrażenie, że jest inaczej, powstaje raczej wskutek przesłuchów i zakłóceń na połączeniach SIO w przypadku stacji dysków, w przypadku magnetofonu - przesłuchów pomiędzy ścieżką danych a (zazwyczaj pustą) ścieżką audio itp.

Jak napisano, przydźwięk kontrolny generowany jest tylko podczas odczytu, ale jednak zapis też nie jest całkowicie bezgłośny: w przypadku "normalnych" urządzeń szeregowych SIO (tj. wszystkich oprócz magnetofonu) źródłem dobiegających wtedy z głośnika postukiwań czy też chrupnięć są nadsyłane przez urządzenie potwierdzenia odbioru komend i danych. Natomiast zapis na magnetofon jest, jak napisano powyżej, realizowany akustycznie w trybie dwutonowym, stąd dźwięk.

Przydźwięk można wyłączyć zerując rejestr systemowy IOSNDEN ($41), co powoduje, że procedury szeregowe OS-u redukują głośność w kanale AUDF3/4 do zera i dźwięk milknie; normalnie zaś stosowanym poziomem głośności jest 8.

Zobacz też

Odnośniki zewnętrzne

Personal tools