Rejestry POKEY-a

From Atariki

Revision as of 17:34, 13 gru 2005; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

Układ POKEY ma 29 rejestrów, które zajmują 16 adresów od $D200 do $D20F. W komputerach z zamontowanym stereo drugi Pokey zajmuje następnych 16 adresów, czyli $D210-$D21F.

Główny zegar POKEY-a ma częstotliwość 1773447 Hz w systemie PAL oraz 1789772,5 Hz w systemie NTSC (albo wg niektóryzch źrodeł 1,7897885 MHz).

  • Rejestry dźwięku: AUDF1-4, AUDC1-4, AUDCTL, SKCTL.
  • Rejestry klawiatury: KBCODE, SKCTL, SKSTAT.
  • Rejestry wiosełek: POT0-7, POTST, POTGO.
  • Rejestry transmisji szeregowej: AUDF3-4, AUDC4, AUDCTL, SKSTRES, SKCTL, SKSTAT, SERIN, SEROUT.
  • Rejestry IRQ: IRQEN, IRQST, AUDF1, AUDF2, AUDF4, STIMER.
  • Inne rejestry: RANDOM.


AdresEtykietaOpis
$D200 (W)AUDF1

Rejestr częstotliwości generatora dźwięku nr 1. Jest to w istocie dzielnik częstotliwości zdefiniowanej w rejestrze AUDCTL $D208. Wartość częstotliwości wyjściowej uzyskujemy ze wzorów:

  • dla zegara wejściowego o częstotliwości głównej (1,773447 MHz w systemie PAL): F = CLOCK/2*(N+M), gdzie N to zwiększona o jeden wartość rejestru AUDF, a M to wartość modyfikująca zależna od rozmiaru rejestru generatora. Dla pojedynczego generatora ośmiobitowego M = 4, natomiast dla generatórów połączonych w parę M = 7.
  • dla zegara wejściowego o częstotliwości 1/28 lub 1/114 częstotliwości głównej: F = CLOCK/2*N.

Oprócz tego rejestry AUDF (za wyjątkiem AUDF3) mogą pełnić funkcję liczników generujących cyklicznie przerwania IRQ. Przerwanie zostanie wygenerowane w momencie, kiedy licznik osiągnie wartość -1. Patrz IRQEN $D20E i STIMER $D209.

$D200 (R)POT0Rezystancja wiosełka nr 0.
$D201 (W)AUDC1
$D201 (R)POT1Rezystancja wiosełka nr 1.
$D202 (W)AUDF2

Rejestr częstotliwości generatora dźwięku nr 2. Może być połączony w parę (generator szesnastobitowy) z rejestrem AUDF1.

$D202 (R)POT2Rezystancja wiosełka nr 2.
$D203 (W)AUDC2
$D203 (R)POT3Rezystancja wiosełka nr 3.
$D204 (W)AUDF3

Rejestr częstotliwości generatora dźwięku nr 3. W odróżnieniu od pozostałych AUDF3 nie może być używany jako licznik generujący przerwania IRQ.

$D204 (R)POT4Rezystancja wiosełka nr 4 (tylko w serii 400/800).
$D205 (W)AUDC3
$D205 (R)POT5Rezystancja wiosełka nr 5 (tylko w serii 400/800).
$D206 (W)AUDF4

Rejestr częstotliwości generatora dźwięku nr 4. Może być połączony w parę (generator szesnastobitowy) z rejestrem AUDF3. Para generatorów 3 i 4 używana jest przez system operacyjny do zdefiniowania szybkości transmisji szeregowej SIO.

$D206 (R)POT6Rezystancja wiosełka nr 6 (tylko w serii 400/800).
$D207 (W)AUDC4
$D207 (R)POT7Rezystancja wiosełka nr 7 (tylko w serii 400/800).
$D208 (W)AUDCTL

Rejestr kontroli dźwięku (Audio Control register). Znaczenie bitów:

  • bit 7 - kontrola rejestru przesuwającego (0 = 17 bitów, 1 = 9 bitów)
  • bit 6 - zegar bazowy dla generatora 1 (0 - wg bitu 0, 1 = częstotliwość główna)
  • bit 5 - zegar bazowy dla generatora 3 (0 - wg bitu 0, 1 = częstotliwość główna)
  • bit 4 - łączenie generatorów 1 i 2 w parę (1 = połączone)
  • bit 3 - łączenie generatorów 3 i 4 w parę (1 = połączone)
  • bit 2 - filtr górnoprzepustowy w generatorze 1 sterowany przez generator 3 (1 = włączony)
  • bit 1 - filtr górnoprzepustowy w generatorze 2 sterowany przez generator 4 (1 = włączony)
  • bit 0 - wybór częstotliwości bazowej dla wszystkch generatorów (0 - 1/28 cz. głównej, 1 - 1/114 cz. głównej)

Główna częstotliwość 1,773447 MHz obowiązuje w wersji PAL, w wersji zaś NTSC to jest 1,7897725 MHz. Odpowiednio 1/114 częstotliwości głównej to tzw. "15 kHz", czyli 15556,55 Hz w wersji PAL oraz 15699,76 Hz w wersji NTSC, a 1/28 częstotliwości głównej to tzw. "64 kHz", czyli 63337,39 Hz w wersji PAL oraz 63920,4 Hz w wersji NTSC.

$D208 (R)POTST (aka ALLPOT)

Rejestr stanu konwersji analogowo-cyfrowej dla ośmiu wiosełek (czyli rejestrów POT0-7). Znaczenie bitów:

  • bit 7 - POT7
  • bit 6 - POT6
  • bit 5 - POT5
  • bit 4 - POT4
  • bit 3 - POT3
  • bit 2 - POT2
  • bit 1 - POT1
  • bit 0 - POT0

Jeśli bit jest skasowany, to znaczy, że odpowiedni rejestr POT zawiera właściwy wynik pomiaru.

$D209 (W)STIMER

Zapis tego rejestru powoduje umieszczenie wartości rejestrów AUDF1, AUDF2 i AUDF4 w odpowiednich licznikach oraz zapoczątkowanie zliczania.

$D209 (R)KBCODE

Sześć młodszych bitów tego rejestru to kod klawiaturowy ostatnio wciśniętego klawisza. Znaczenie dwóch pozostałych bitów jest następujące:

  • bit 7 = 1, klawisz naciśnięto razem z CONTROL
  • bit 6 = 1, klawisz naciśnięto razem z SHIFT

Zawartość tego rejestru zmieniają tylko te klawisze, których naciśnięcie powoduje wygenerowanie przerwania IRQ klawiatury. Przerwania tego nie generują następujące klawisze: START, SELECT, OPTION, RESET, BREAK, SHIFT oraz CONTROL (generuje je natomiast klawisz HELP oraz klawisze funkcyjne F1-F4).

Klawisze BREAK i RESET wywołują oddzielne przerwania: BREAK przerwanie IRQ, RESET przerwanie NMI w serii 400/800, albo RESET w serii XL/XE. Klawisz SHIFT nie wywołuje przerwania klawiatury, ale jego stan można odczytać w SKSTAT ($D20F). Wciśnięcie klawisza CONTROL daje się wykryć tylko wtedy, kiedy jest wciśnięty razem z jakimś innym klawiszem, którego kod klawiaturowy da się odczytać w tym rejestrze.

Klawisze konsoli patrz CONSOL ($D01F).

$D20A (W)SKSTRES

Zapis tego rejestru powoduje zresetowanie bitów 5-7 rejestru SKSTAT ($D20F).

$D20A (R)RANDOM

Liczba pseudolosowa z zakresu od 0 do 255.

$D20B (W)POTGO

Zapis tego rejestru powoduje wyzerowanie rejestrów położenia potencjometrów (POT0-7) i rozpoczęcie pomiaru oporności od nowa.

$D20C-

Rejestr nieużywany.

$D20D (W)SEROUT

Rejestr wyjściowy dla transmisji szeregowej.

$D20D (R)SERIN

Rejestr wejściowy dla transmisji szeregowej.

$D20E (W)IRQEN

Rejestr zezwoleń na wygenerowanie przerwań IRQ. Ma cień IRQENS pod adresem $0010. Przypisanie bitów jest w obydwu identyczne (0 - przerwanie zabronione):

  • bit 7 - przerwanie klawisza BREAK
  • bit 6 - przerwanie klawiatury
  • bit 5 - odczyt z łącza szeregowego
  • bit 4 - zapis na łącze szeregowe
  • bit 3 - koniec transmisji szeregowej
  • bit 2 - licznik nr 4
  • bit 1 - licznik nr 2
  • bit 0 - licznik nr 1

Przy blokowaniu przerwań IRQ należy raczej korzystać z cienia. Np. zablokowanie klawisza BREAK uzyskuje się przez:

    lda irqens
    and #$7f
    sta irqens
$D20E (R)IRQST

Rejest statusu przerwań IRQ. Cień IRQSTAT pod adresem $0011. Przypisanie bitów (0 - przerwanie wystąpiło):

  • bit 7 - przerwanie klawisza BREAK
  • bit 6 - przerwanie klawiatury
  • bit 5 - odczyt z łącza szeregowego
  • bit 4 - zapis na łącze szeregowe
  • bit 3 - koniec transmisji szeregowej
  • bit 2 - licznik nr 4
  • bit 1 - licznik nr 2
  • bit 0 - licznik nr 1
$D20F (W)SKCTL

Rejestr kontroli transmisji szeregowej i klawiatury (Serial and Keyboard Control register). Znaczenie bitów:

  • bit 7 - nadanie sygnału SPACE, czyli dziesięciu zer (1 = włączone)
  • bity 6-4 - źrodło sygnału zegarowego dla transmisji szeregowej (bit 6 od lewej):
    • 000 - zewnętrzne, wg linii CLOCK IN gniazda SIO
    • 001 - odczyt wg AUDF4 $D206, zapis wg CLOCK IN (default przy odczycie)
    • 010 - odczyt i zapis wg AUDF4 (default przy zapisie)
    • 011 - kombinacja zabroniona
    • 100 - odczyt wg CLOCK IN, zapis wg AUDF4
    • 101 - kombinacja zabroniona
    • 110 - odczyt wg AUDF4, zapis wg AUDF2 $D202 (niedostępne w trybie dwutonowym)
    • 111 - jak wyżej, CLOCK IN i CLOCK OUT nieaktywne (niedostępne w trybie dwutonowym)
  • bit 3 - transmisja dwutonowa (1 = włączona)
  • bit 2 - częstotliwość konwersji analogowo-cyfrowej (0 - 20 ms, 1 - 128 us)
  • bit 1 - tryb pracy klawiatury (1 - standard, 0 - skanowanie matrycy)
  • bit 0 - ustawienie wartości 1 tu i w bicie 1 (czyli wpisanie $03 do SKCTL) resetuje POKEY

W trybie dwutonowym częstotliwość ustawiona w AUDF1 $D200 pełni funkcję logicznej jedynki, natomiast ta z AUDF2 - logicznego zera. AUDF2 musi być ustawiony na niższy ton niż AUDF1. System operacyjny wybiera tu częstotliwości 5278 Hz i 3958,56 Hz (w systemie PAL; odpowiednio są to wartości 5 i 7 dla rejestrów AUDF1 i 2). Transmisja dwutonowa jest używana podczas zapisu na magnetofon, poza tym jest normalnie wyłączona, a dane transmitowane są jako poziomy logiczne (+4 V = prawda, 0 V = fałsz).

$D20F (R)SKSTAT

Rejestr statusu transmisji szeregowej i klawiatury (Serial and Keyboard Status register). Znaczenie bitów:

  • bit 7 - framing error (0 - wystąpił)
  • bit 6 - serial overrun (0 - wystąpił)
  • bit 5 - przepełnienie bufora wejściowego klawiatury (0 - wystąpiło)
  • bit 4 - kopia wejścia szeregowego
  • bit 3 - klawisz SHIFT (0 - wciśniety)
  • bit 2 - dowolny klawisz (0 - wciśnięty)
  • bit 1 - transmisja danych (0 - w toku)
  • bit 0 - nieużywany, zawsze 1.

Wymieniony powyżej "bufor wejściowy klawiatury" to rejestr KBCODE $D209. Bit 5 SKSTAT ustawiany jest na zero, kiedy w KBCODE pojawi się nowa wartość zanim poprzednia została odczytana przez procesor.

Zobacz też:


Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.

Personal tools