Rejestry POKEY-a
From Atariki
Wersja z dnia 10:32, 4 gru 2005 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 10:34, 4 gru 2005 KMK (Dyskusja | wkład) Next diff → |
||
Linia 17: | Linia 17: | ||
*dla zegara wejściowego o częstotliwości głównej (1,77344625 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 głównej (1,77344625 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'''. | *dla zegara wejściowego o częstotliwości 1/28 lub 1/114 częstotliwości głównej: '''F = CLOCK/2*N'''. | ||
- | <p>Oprócz tego rejestry AUDF (za wyjątkiem AUDF3) mogą pełnić funkcję licznika generującego cyklicznie przerwania [[IRQ]]. Przerwanie zostanie wygenerowane w momencie, kiedy licznik osiągnie wartość -1. Patrz [[Rejestry POKEY-a#IRQEN|IRQEN $D20E]] i [[Rejestry POKEY-a#STIMER|STIMER $D209]]. | + | <p>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 [[Rejestry POKEY-a#IRQEN|IRQEN $D20E]] i [[Rejestry POKEY-a#STIMER|STIMER $D209]]. |
</td></tr> | </td></tr> |
Wersja z dnia 10:34, 4 gru 2005
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ść 1773446,25 Hz w systemie PAL oraz 1,789788 Hz w systemie NTSC.
- 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.
Adres | Etykieta | Opis |
$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:
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. </td></tr> |
$D200 (R) | POT0 | |
$D201 (W) | AUDC1 | |
$D201 (R) | POT1 | |
$D202 (W) | AUDF2 |
<p>Rejestr częstotliwości generatora dźwięku nr 2. Może być połączony w parę (generator szesnastobitowy) z rejestrem AUDF1.</p> |
$D202 (R) | POT2 | |
$D203 (W) | AUDC2 | |
$D203 (R) | POT3 | |
$D204 (W) | AUDF3 |
<p>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.</p> |
$D204 (R) | POT4 | |
$D205 (W) | AUDC3 | |
$D205 (R) | POT5 | |
$D206 (W) | AUDF4 |
<p>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.</p> |
$D206 (R) | POT6 | |
$D207 (W) | AUDC4 | |
$D207 (R) | POT7 | |
$D208 (W) | AUDCTL |
<p>Rejestr kontroli dźwięku (Audio Control register). Znaczenie bitów:</p>
<p>Główna częstotliwość 1,773446 MHz obowiązuje w wersji PAL, w wersji zaś NTSC to jest 1,789788 MHz. Odpowiednio 1/114 częstotliwości głównej to tzw. "15 kHz", czyli 15556,5 Hz w wersji PAL oraz 15699,9 Hz w wersji NTSC, a 1/28 częstotliwości głównej to tzw. "64 kHz", czyli 63337 Hz w wersji PAL oraz 63921 Hz w wersji NTSC.</p> |
$D208 (R) | POTST (aka ALLPOT) | <p>Rejestr stanu konwersji analogowo-cyfrowej dla ośmiu wiosełek (czyli rejestrów POT0-7). Znaczenie bitów:</p>
<p>Jeśli bit jest skasowany, to znaczy, że odpowiedni rejestr POT zawiera właściwy wynik pomiaru.</p> |
$D209 (W) | STIMER |
<p>Zapis tego rejestru powoduje umieszczenie wartości rejestrów AUDF1, AUDF2 i AUDF4 w odpowiednich licznikach oraz zapoczątkowanie zliczania.</p> |
$D209 (R) | KBCODE | <p>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:</p>
<p>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).</p> <p>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.</p> <p>Klawisze konsoli patrz CONSOL ($D01F).</p> |
$D20A (W) | SKSTRES | <p>Zapis tego rejestru powoduje zresetowanie bitów 5-7 rejestru SKSTAT ($D20F).</p> |
$D20A (R) | RANDOM | <p>Liczba pseudolosowa z zakresu od 0 do 255.</p> |
$D20B (W) | POTGO | <p>Zapis tego rejestru powoduje wyzerowanie rejestrów położenia potencjometrów (POT0-7) i rozpoczęcie pomiaru oporności od nowa.</p> |
$D20C | - | <p>Rejestr nieużywany.</p> |
$D20D (W) | SEROUT | <p>Rejestr wyjściowy dla transmisji szeregowej.</p> |
$D20D (R) | SERIN | <p>Rejestr wejściowy dla transmisji szeregowej.</p> |
$D20E (W) | IRQEN | <p>Rejestr zezwoleń na wygenerowanie przerwań IRQ. Ma cień IRQENS pod adresem $0010. Przypisanie bitów jest w obydwu identyczne (0 - przerwanie zabronione):</p>
<p>Przy blokowaniu przerwań IRQ należy raczej korzystać z cienia. Np. zablokowanie klawisza BREAK uzyskuje się przez:</p> lda irqens and #$7f sta irqens |
$D20E (R) | IRQST | <p>Rejest statusu przerwań IRQ. Cień IRQSTAT pod adresem $0011. Przypisanie bitów (0 - przerwanie wystąpiło):</p>
|
$D20F (W) | SKCTL |
<p>Rejestr kontroli transmisji szeregowej i klawiatury (Serial and Keyboard Control register). Znaczenie bitów:</p>
<p>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).</p> |
$D20F (R) | SKSTAT | <p>Rejestr statusu transmisji szeregowej i klawiatury (Serial and Keyboard Status register). Znaczenie bitów:</p>
<p>Wymieniony powyżej "bufor wejściowy klawiatury" to rejestr KBCODE $D209. Bit 5 SKSTAT ustawiany jest, kiedy w KBCODE pojawi się nowa wartość zanim poprzednia została odczytana przez procesor.</p> |