CIASNY
POKEY , skrót od Pot Keyboard Integrated Circuit , to cyfrowy układ wejścia/wyjścia zaprojektowany przez Douga Neubauera z Atari, Inc. dla 8-bitowej rodziny komputerów domowych Atari. Po raz pierwszy został wydany z Atari 400 i Atari 800 w 1979 roku i jest zawarty we wszystkich późniejszych modelach oraz Atari 5200 . POKEY łączy w sobie funkcje do odczytu kontrolerów łopatkowych ( potencjometrów ) oraz klawiatur komputerowych a także generowanie dźwięku i źródło liczb pseudolosowych. Generuje cztery głosy charakterystycznego fali prostokątnej , w postaci czystych tonów lub zmodyfikowanych za pomocą ustawień zniekształceń. Neubauer opracował również 8-bitową aplikację Star Raiders na Atari , która wykorzystuje funkcje POKEY.
Chipy POKEY są używane do odtwarzania dźwięku w wielu arkadowych grach wideo z lat 80., w tym w Centipede , Missile Command , Asteroids Deluxe i Gauntlet . Niektóre systemy arkadowe Atari wykorzystują wersje wielordzeniowe z 2 lub 4 POKEYami w jednym pakiecie dla większej liczby kanałów audio. Konsola Atari 7800 pozwala kartridżowi z grą zawierać POKEY, zapewniając lepszy dźwięk niż układ audio systemu. Korzystają z tego tylko dwie licencjonowane gry: porty Ballblazer i Commando .
Układ LSI ma 40 styków i jest oznaczony jako C012294. USPTO . Na „Urządzenie do wytwarzania wielu efektów dźwiękowych”. Wymienieni wynalazcy to Steven T. Mayer i Ronald E. Milner.
Nieprodukowany już POKEY jest emulowany w oprogramowaniu przez 8-bitowe emulatory Arcade i Atari, a także za pośrednictwem formatu muzycznego Atari SAP i powiązanego odtwarzacza.
Cechy
- Audio
- 4 częściowo niezależne kanały audio
- Kanały mogą być skonfigurowane jako jeden z:
- Cztery 8-bitowe kanały
- Dwa 16-bitowe kanały
- Jeden kanał 16-bitowy i dwa kanały 8-bitowe
- Głośność , częstotliwość i kształt fali na kanał ( fala prostokątna ze zmiennym cyklem pracy lub szumem pseudolosowym )
- Dzielnik częstotliwości 15 kHz lub 64 kHz.
- Dwa kanały mogą być sterowane z częstotliwością zegara procesora.
- Filtr górnoprzepustowy
- Skanowanie klawiatury (do 64 klawiszy) + 2 bity modyfikujące (Shift, Control) + Break
- potencjometru (8 niezależnych portów, każdy o rozdzielczości 8-bitowej)
- Timery wysokiej rozdzielczości (kanały audio 1, 2 i 4 można skonfigurować tak, aby powodowały przerwanie timera, gdy przekroczą zero)
- Generator liczb losowych (można odczytać 8 bitów 17-bitowego licznika wielomianowego)
- Szeregowy port we/wy
- Osiem przerwań IRQ
Wersje
Według numeru części:
- C012294 — używany we wszystkich 8-bitowych komputerach z rodziny Atari, w tym w Atari XEGS , a także w konsoli Atari 5200. Sufiks na chipie odnosi się do producenta:
- C012294B-01 — AMI
- C012294-03 — Sygnalizacja
- C012294-19 — Krajowy Semiconductor
- C012294-22 — OK
- C012294-31 — IMP
- 137430-001 — Numer części czasami używany w automatach arkadowych Atari dla POKEY.
- 137324-1221 — czterordzeniowy POKEY używany w automatach do gier Atari Major Havoc , I, Robot , Firefox i Return of the Jedi .
Pinout
Nazwa pinezki | Numery pinów | Opis |
---|---|---|
A0 - A3 | 36, 35, 34, 33 | Wprowadzanie adresu pamięci |
ACLK | 27 | Wyjście zegara szeregowego |
AUD | 37 | Wyjście audio |
BCLK | 26 | Dwukierunkowe wejście/wyjście zegara |
CS0 | 30 | Wybór chipa |
CS1 | 31 | Wybór chipa |
D0 - D7 | 38, 39, 40, 2, 3, 4, 5, 6 | Wejście/wyjście magistrali danych |
IRQ | 29 | Wyjście żądania przerwania |
K0 - K5 | 23, 22, 21, 20, 19, 18 | Wyjście skanowania klawiatury |
KR1 - KR2 | 25, 16 | Wejście stroboskopowe rzędu klawiatury |
P0 - P7 | 14, 15, 12, 13, 10, 11, 8, 9 | Skanowanie potencjometru (łopatki). |
R/W | 32 | Sterowanie odczytem/zapisem we/wy |
SID | 24 | Szeregowe dane wejściowe |
DARŃ | 28 | Szeregowe dane wyjściowe |
V CC | 17 | Zasilanie +5 woltów |
V ss | 1 | Grunt |
Ø2 | 7 | Wejście zegara fazy 2 |
Rejestry
8-bitowe komputery Atari odwzorowują POKEY na stronę szesnastkową $ D2xx , a konsola Atari 5200 odwzorowuje ją na stronę szesnastkową $ E8xx .
POKEY zapewnia 29 rejestrów odczytu/zapisu kontrolujących dźwięk, wejście łopatkowe, wejście klawiatury, wejście/wyjście szeregowe i przerwania. Wiele adresów rejestrów POKEY ma podwójne cele, wykonując różne funkcje jako rejestry do odczytu i zapisu. Dlatego żaden kod nie powinien odczytywać rejestrów sprzętowych oczekujących na odzyskanie wcześniej zapisanej wartości.
Ten problem został rozwiązany dla niektórych rejestrów przez rejestry „Shadow” systemu operacyjnego zaimplementowane w zwykłej pamięci RAM, które odzwierciedlają wartości rejestrów sprzętowych. Podczas pionowego wygaszenia system operacyjny kopiuje rejestry Shadow w pamięci RAM dla rejestrów zapisu do odpowiedniego rejestru sprzętowego i odpowiednio aktualizuje wartości rejestrów Shadow dla rejestrów odczytu ze sprzętu. Dlatego zapisy do rejestrów sprzętowych, które mają odpowiadające im rejestry cienia, zostaną nadpisane wartością rejestrów cienia podczas następnego wygaszenia pionowego.
Odczyt wartości bezpośrednio ze sprzętu na nieznanym etapie cyklu wyświetlania może dawać niespójne wyniki (przykład: odczyt potencjometrów). Rejestry Shadow systemu operacyjnego dla rejestrów Read są zwykle preferowanym źródłem informacji.
Niektóre rejestry sprzętowe Write nie mają odpowiednich rejestrów Shadow. Mogą być bezpiecznie zapisywane przez aplikację bez nadpisywania wartości podczas pionowego odstępu. Jeśli aplikacja musi znać ostatnią wartość zapisaną w rejestrze, obowiązkiem aplikacji jest zaimplementowanie własnej wartości ukrytej, aby zapamiętać to, co zapisała.
Nazwa | Opis | Odczyt/zapis | Adres szesnastkowy | grudzień adr | Imię cienia | Adres szesnastkowy cienia | Adres dec. cienia |
---|---|---|---|---|---|---|---|
AUDF1 | Częstotliwość kanału audio 1 | Pisać | 200 $ | 53760 | |||
POT0 | Potencjometr (łopatka) 0 | Czytać | 200 $ | 53760 | PADDL0 | 0270 $ | 624 |
AUDC1 | Kontrola kanału audio 1 | Pisać | 201 dolarów | 53761 | |||
POT1 | Potencjometr (łopatkowy) 1 | Czytać | 201 dolarów | 53761 | PADDL1 | 0271 $ | 625 |
AUDF2 | Częstotliwość kanału audio 2 | Pisać | $202 | 53762 | |||
POT2 | Potencjometr (łopatka) 2 | Czytać | $202 | 53762 | PADDL2 | 0272 $ | 626 |
AUDC2 | Sterowanie kanałem 2 audio | Pisać | 203 $ | 53763 | |||
POT3 | Potencjometr (łopatka) 3 | Czytać | 203 $ | 53763 | PADDL3 | 0273 $ | 627 |
AUDF3 | Częstotliwość kanału audio 3 | Pisać | 204 $ | 53764 | |||
POT4 | Potencjometr (łopatkowy) 4 | Czytać | 204 $ | 53764 | PADDL4 | 0274 $ | 628 |
AUDC3 | Sterowanie kanałem 3 audio | Pisać | 205 dolarów | 53765 | |||
POT5 | Potencjometr (łopatkowy) 5 | Czytać | 205 dolarów | 53765 | PADDL5 | 0275 $ | 629 |
AUDF4 | Częstotliwość kanału audio 4 | Pisać | $206 | 53766 | |||
POT6 | Potencjometr (łopatkowy) 6 | Czytać | $206 | 53766 | PADDL6 | 0276 $ | 630 |
AUDC4 | Sterowanie kanałem audio 4 | Pisać | $207 | 53767 | |||
POT7 | Potencjometr (łopatkowy) 7 | Czytać | $207 | 53767 | PADDL7 | 0277 $ | 631 |
AUDCTL | Sterowanie dźwiękiem | Pisać | 208 dolarów | 53768 | |||
ALLPOT | Odczyt 8-liniowego stanu portu POT | Czytać | 208 dolarów | 53768 | |||
STIMER | Uruchom timery | Pisać | 209 dolarów | 53769 | |||
KOD KB | Kod klawiatury | Czytać | 209 dolarów | 53769 | CH | $02FC | 764 |
SKREST | Zresetuj status szeregowy (SKSTAT) | Pisać | $20A | 53770 | |||
LOSOWY | Generator liczb losowych | Czytać | $20A | 53770 | |||
POTGO | Uruchom sekwencję skanowania POT | Pisać | $20B | 53771 | |||
SEROUT | Wyjście danych portu szeregowego | Pisać | $20D | 53773 | |||
SERIN | Wejście danych portu szeregowego | Czytać | $20D | 53773 | |||
IRQEN | Włącz żądanie przerwania | Pisać | $20E | 53774 | POKMSK | 10 $ | 16 |
IRQST | Stan IRQ | Czytać | $20E | 53774 | |||
SKCTL | Kontrola portu szeregowego | Pisać | $20F | 53775 | SSKCTL | 0232 $ | 562 |
SKSTAT | Stan portu szeregowego | Czytać | $20F | 53775 |
W poniższych wykazach poszczególnych rejestrów obowiązuje następująca legenda:
Wartość bitowa | Opis |
---|---|
0 | Bit musi być równy 0 |
1 | Bit musi wynosić 1 |
? | Bit może mieć wartość 0 lub 1 i jest używany w określonym celu. |
- | Bit jest nieużywany lub nie należy oczekiwać, że będzie miał określoną wartość |
etykieta | Zapoznaj się z późniejszym wyjaśnieniem celu bitu. |
Audio
Pokey zawiera programowalny generator dźwięku ; cztery kanały audio z oddzielną regulacją częstotliwości, hałasu i poziomu głosu.
Każdy kanał ma 8-bitowy dzielnik częstotliwości i 8-bitowy rejestr do wyboru szumu i głośności.
- AUDF1 do AUDF4 – rejestr częstotliwości (AUDio Częstotliwość)
- AUDC1 do AUDC4 – rejestr głośności i szumu (AUDio Control)
- AUDCTL – ogólny rejestr, który steruje generatorami (AUDio ConTroL)
Dźwięk POKEYa jest charakterystyczny: kiedy cztery kanały są używane niezależnie, zauważalne jest rozstrojenie części 12-tonowej skali jednakowego temperamentu , z powodu braku dokładności tonu. Kanały można sparować w celu uzyskania większej dokładności; ponadto dostępnych jest wiele form zniekształceń , co pozwala uzyskać grubszy dźwięk. Zniekształcenie jest używane głównie w muzyce do partii basowych.
Jeden z silników dźwiękowych opracowanych dla rodziny 8-bitowych Atari nazywał się silnik AMP (Advanced Music Processor). Wykorzystał to muzyk Gary Gilbertson .
Częstotliwość kanału audio
Rejestry AUDF* sterują częstotliwością lub tonem odpowiednich kanałów dźwiękowych. Wartości AUDF* kontrolują również czasomierze sprzętowe POKEY, przydatne w przypadku kodu, który musi być uruchamiany w precyzyjnych odstępach czasu, częściej niż odstępy pionowe.
Każdy rejestr AUDF* jest 8-bitową wartością dostarczającą licznik czasu lub dzielnik impulsów z zegara POKEY. Tak więc mniejsze wartości pozwalają na częstsze wysyłanie impulsów z POKEY, a większe wartości na rzadsze. Wartości $0 hex /0 dec do $FF hex /255 dec są zwiększane przez POKEY do zakresu od $1 hex /1 dec do $100 hex /256 dec . Rzeczywista słyszalna wysokość dźwięku zależy od wybranej częstotliwości zegara POKEY i wartości zniekształceń. Zobacz Sterowanie kanałami audio i Sterowanie dźwiękiem .
AUDF1 $D200 Zapis
Częstotliwość kanału audio 1
AUDF2 $D202 Zapis
Częstotliwość kanału audio 2
AUDF3 $D204 Zapis
Częstotliwość kanału audio 3
AUDF4 $D206 Zapis
Częstotliwość kanału audio 4
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Kontrola kanałów audio
Rejestry kontrolne kanałów audio zapewniają kontrolę głośności i zniekształceń w poszczególnych kanałach dźwiękowych. Dźwięk może być również generowany niezależnie od zegara POKEY poprzez bezpośrednią manipulację głośnością kanału dźwiękowego, co jest przydatne do odtwarzania cyfrowych próbek.
AUDC1 $D201 Zapis
Kontrola kanału audio 1
AUDC2 $D203 Zapis
Sterowanie kanałem 2 audio
AUDC3 $D205 Zapis
Sterowanie kanałem 3 audio
AUDC4 $D207 Zapis
Sterowanie kanałem audio 4
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
Hałas 2 | Hałas 1 | Hałas 0 | Wymuś głośność | Tom 3 | Głośność 2 | Tom 1 | Tom 0 |
Bit 0-3: Kontrola poziomu głośności, od 0 do F.
Bit 4: Wymuszone wyjście tylko z głośnością. Gdy ten bit jest ustawiony, kanał ignoruje zegar AUDF, regulatory szumu/zniekształceń i filtr górnoprzepustowy. Dźwięk jest generowany tylko przy ustawieniu bitów głośności 0:3 . Ta funkcja została wykorzystana do stworzenia cyfrowego dźwięku poprzez modulację impulsowo-kodową .
Bit 5-7: Ustawienia rejestru przesuwnego dla szumów/zniekształceń. Wartości bitów opisane poniżej:
Wartość szumu | Wartość bitów | Opis |
---|---|---|
0 0 0 | $00 | Wielomiany 5-bitowe, a następnie 17-bitowe |
0 0 1 | 20 $ | Tylko 5-bitowy poli |
0 1 0 | 40 $ | 5-bitowe, a następnie 4-bitowe wielokąty |
0 1 1 | 60 $ | Tylko 5-bitowy poli |
1 0 0 | 80 $ | Tylko 17-bitowy poli |
1 0 1 | $A0 | bez poli (czysty ton) |
1 1 0 | $C0 | Tylko 4-bitowy poli |
1 1 1 | $E0 | bez poli (czysty ton) |
Generowanie losowych szumów odbywa się poprzez odczyt 8 bitów z góry 17-bitowego rejestru przesuwnego. Rejestry te sterowane są częstotliwością 1,79 MHz dla NTSC lub 1,77 MHz dla PAL. Jego wyjścia mogą być używane niezależnie przez współczynnik dzielenia każdego kanału audio.
AUDCTL $D208 Zapis
Audio Control umożliwia wybór wejścia zegara używanego dla kanałów audio, sterowanie funkcją filtra górnoprzepustowego, łączenie dwóch kanałów razem, co pozwala na 16-bitową dokładność częstotliwości, wybór zegara wysokiej częstotliwości dla określonych kanałów oraz kontrolę nad „losowością” wejścia wielomianowego.
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
17 vs 9 Poli | CH1 1.79 | CH3 1.79 | CH2 + 1 | CH4 + 3 | FI1 + 3 | FI2 + 4 | 64 vs 15 kHz |
„1” oznacza „włączony”, jeśli nie opisano:
- Bit 0
- $01: (15 kHz), wybór współczynnika dzielnika częstotliwości „0” - 64 kHz, „1” - 15 kHz
- Bit 1
- $02: (FI2 + 4), filtr górnoprzepustowy dla kanału 2 oceniany według częstotliwości kanału 4
- Bit 2
- $04: (FI1 + 3), filtr górnoprzepustowy dla kanału 1 oceniany na podstawie częstotliwości kanału 3
- Bit 3
- $08: (CH4 + 3), połączenie dzielników 4+3 w celu uzyskania 16-bitowej dokładności
- Bit 4
- $10: ( CH2 + 1), połączenie dzielników 2+1 w celu uzyskania 16-bitowej dokładności
- Bit 5
- 20 $: (CH3 1,79), ustaw częstotliwość kanału 3 „0” na 64 kHz. „1” to 1,79 MHz NTSC lub 1,77 MHz PAL
- Bit 6
- 40 USD: (CH1 1,79), ustaw częstotliwość kanału 1 „0” na 64 kHz. „1” to 1,79 MHz NTSC lub 1,77 MHz PAL
- Bit 7
- 80 USD: (POLY 9), przełącz rejestr przesuwny „0” — 17-bitowy, „1” — 9-bitowy
Wszystkie dzielniki częstotliwości (AUDF) mogą być napędzane w tym samym czasie z częstotliwością 64 kHz lub 15 kHz.
Dzielniki częstotliwości 1 i 3 mogą być naprzemiennie sterowane zegarem procesora (1,79 MHz NTSC, 1,77 MHz PAL). Dzielniki częstotliwości 2 i 4 mogą być naprzemiennie sterowane przez wyjścia dzielników 1 i 3. W ten sposób POKEY umożliwia łączenie 8-bitowych kanałów w celu uzyskania dźwięku z 16-bitową dokładnością.
Możliwe konfiguracje kanałów:
- cztery 8-bitowe kanały
- dwa kanały 8-bitowe i jeden kanał 16-bitowy
- dwa kanały 16-bitowe
Potencjometry
POKEY posiada osiem portów konwertera analogowo-cyfrowego najczęściej używanych do potencjometrów, znanych również jako Paddle Controllers. Wejścia analogowe są również używane dla kontrolera tabletu dotykowego i 12-przyciskowych kontrolerów klawiatury do gier wideo. Każde wejście ma tranzystor kroplowy, który można włączyć lub wyłączyć za pomocą oprogramowania. Timery mogą być również używane do obsługi pióra świetlnego , poprzez podłączenie fotodiody do tranzystora kroplowego, który przechwytuje timer, gdy wiązka elektronów w telewizorze przechodzi przez pióro. Pionowe położenie pióra należało odczytać oddzielnie.
POT0 $D200 Odczyt
CIEŃ: PADDL0 0270 $
Kontroler wiosła 0 Wejście
POT1 $D201 Odczyt
CIEŃ: PADDL1 0271 $
Kontroler wiosła 1 wejście
POT2 $D202 Odczyt
CIEŃ: PADDL2 0272 $
Wejście kontrolera wiosła 2
POT3 $D203 Odczyt
CIEŃ: PADDL3 0273 $
Kontroler wiosła 3 Wejście
POT4 $D204 Odczyt
CIEŃ: PADDL4 02704 $
Wejście kontrolera wiosła 4
POT5 $D205 Odczyt
CIEŃ: PADDL5 0275 $
Kontroler wiosła 5 Wejście
POT6 $D206 Odczyt
CIEŃ: PADDL6 0276 $
Wejście kontrolera wiosła 6
POT7 $D207 Odczyt
CIEŃ: PADDL7 0277 $
Wejście kontrolera wiosła 7
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Każde wejście posiada 8-bitowy timer, odliczający czas wyświetlania każdej linii TV. Miało to tę dodatkową zaletę, że umożliwiało podawanie odczytanej wartości bezpośrednio do współrzędnych ekranowych obiektów napędzanych przez łopatki. Wartości Atari Paddle mieszczą się w zakresie od 0 do 228, chociaż maksymalna możliwa liczba to 244. Kontroler Paddle odczytuje 0 po obróceniu do maksymalnej pozycji zgodnie z ruchem wskazówek zegara i zwraca rosnące wartości, gdy jest obracany w kierunku przeciwnym do ruchu wskazówek zegara, kończąc na maksymalnej wartości.
Proces odczytu łopatki rozpoczyna się od zapisu do POTGO , który resetuje wartości POT* do 0, wartość ALLPOT do $FF i rozładowuje kondensatory odczytu potencjometru. Wartości POT* narastają podczas skanowania, aż do osiągnięcia wartości rezystancji potencjometru. Po zakończeniu odczytu wiosła odpowiedni bit w ALLPOT jest resetowany do 0.
Proces skanowania Paddle może zająć większość klatki wideo. System operacyjny Atari automatycznie zajmuje się odczytem Paddle. Łyżki są odczytywane, a skanowanie łyżek inicjowane podczas etapu 2 pionowego wygaszania. Wartości wiosła są kopiowane do rejestrów cienia. (Zauważ, że wyzwalacze wiosła są w rzeczywistości danymi wejściowymi kierunku joysticka odczytanymi z PIA.)
Szybszy tryb skanowania łyżek jest możliwy poprzez ustawienie bitu w SKCTL . Sekwencja odczytu kończy się tylko w kilku liniach skanowania, ale wartość jest mniej dokładna.
ALLPOT $ 208 Odczyt
Stan skanowania potencjometru
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
wiosło 7 | wiosło 6 | wiosło 5 | wiosło 4 | wiosło 3 | wiosło 2 | wiosło 1 | wiosło 0 |
Każdy bit odpowiada jednemu wejściu potencjometru (rejestry POT*). Kiedy skanowanie łopatki jest rozpoczynane przez zapis do POTGO , każdy bit łopatki w ALLPOT jest ustawiany na 1. Kiedy skanowanie łopatki jest zakończone, odpowiedni bit w ALLPOT jest resetowany do 0, wskazując, że wartość w powiązanym rejestrze POT* jest teraz ważna do odczytu.
POTGO $D20B Napisz
Rozpocznij skanowanie potencjometru
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - |
Zapis do POTGO inicjuje proces skanowania potencjometru (Paddle). Spowoduje to zresetowanie wartości POT* do 0, ALLPOT do $FF i rozładowanie kondensatorów odczytu potencjometru. Gdy każdy skan potencjometru zakończy się, bit odpowiadający potencjometrowi w ALLPOT zostanie wyczyszczony, co wskazuje, że wartość powiązanego rejestru POT* jest ważna do odczytu.
Szeregowy port wyjściowy wejścia
Zawiera:
- szeregowa linia wejściowa
- szeregowa linia wyjściowa
- Linia wyjściowa zegara szeregowego
- dwukierunkowa linia danych zegara szeregowego
- rejestruje SKREST, SEROUT, SERIN, SKCTL, SKSTAT
POKEY to coś w rodzaju UART . Zwykle jeden z podwojonych kanałów audio jest używany jako generator szybkości transmisji. Standardowa prędkość transmisji to 19,2 kbit/s, maksymalna możliwa prędkość to 127 kbit/s. Bajt umieszczony w rejestrze SEROUT jest automatycznie przesyłany przez magistralę szeregową. Ramka danych zawiera 10 bitów: 1 bit startu, 8 bitów danych, 1 bit stopu. Poziomy napięcia to 0 V (logiczne 0) i +4 V (logiczne 1). Istnieje możliwość połączenia portu szeregowego Atari z portem RS-232 za pomocą prostej przetwornicy napięcia.
Każda operacja wejścia/wyjścia powoduje zmianę wartości w wewnętrznych rejestrach przesuwnych POKEY, dlatego podczas programowania POKEY konieczne jest ponowne zainicjowanie niektórych wartości po wykonaniu każdej operacji.
SKREST $D20A Napisz
Zresetuj stan portu szeregowego (SKSTAT).
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - |
Zapis do tego rejestru zresetuje bity od 5 do 7 SKSTAT , które są zatrzaskami, na 1. Zatrzaski sygnalizują przekroczenie klawiatury, przekroczenie wejścia danych szeregowych i błąd ramki wprowadzania danych szeregowych.
SEROUT $D20D Zapis
Bajt wyjściowy danych portu szeregowego.
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - |
Jest to równoległy rejestr „wstrzymujący” dla ośmiobitowej (jeden bajt) wartości, która zostanie przesłana do szeregowego rejestru przesuwnego w celu wyprowadzenia bit po bicie. Gdy port jest gotowy do przyjęcia danych do wyjścia, przerwanie Serial Data Out informuje system operacyjny, że może zapisać bajt w tym rejestrze wyjściowym.
SERIN $D20D Odczyt
Bajt wejściowy danych portu szeregowego.
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - |
Podobnie jak SEROUT, również równoległy rejestr „wstrzymujący”. Przechowuje ośmiobitową (jeden bajt) wartość zebraną przez szeregowy rejestr przesuwny, odczytujący wprowadzane dane po jednym bicie na raz. Kiedy odczytywany jest cały bajt, następuje przerwanie Serial Data In informujące system operacyjny, że może odczytać bajt z tego rejestru.
SKCTL $D20F Zapis
Kontrola portu szeregowego
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
Przerwa w serialu | Tryb szeregowy 2 | Tryb szeregowy 1 | Tryb szeregowy0 | Seryjny dwukolorowy | Szybkie skanowanie puli | Włącz skanowanie KB | Odrzucenie KB |
Bit 0: Włącz skanowanie „debounce”, które ma na celu wyeliminowanie szumu lub drgań z przełączników mechanicznych. Wartość 1 umożliwia POKEYowi użycie wewnętrznego rejestru porównawczego podczas skanowania kluczy. Klawisz musi zostać wykryty w dwóch jednoczesnych skanach, zanim zostanie zidentyfikowany jako naciśnięty, i musi być widoczny, aby dwa kolejne skany zostały uznane za zwolnione. Ta opcja powinna być włączona, aby utrzymać normalną obsługę klawiatury w systemie operacyjnym.
Bit 1: Ustaw na 1, aby włączyć skanowanie klawiatury. Ta opcja powinna być włączona, aby utrzymać normalną obsługę klawiatury w systemie operacyjnym.
Bit 2: Ustaw na 1, aby włączyć szybkie, choć mniej dokładne skanowanie potencjometru. Skanowanie Fast Pot zwiększa licznik w każdym cyklu i zwraca użyteczny wynik w ciągu dwóch linii skanowania. System operacyjny wykorzystuje powolne skanowanie puli, które zwiększa licznik raz na 114 cykli (linia skanowania), biorąc klatkę (1/60 sekundy), aby uzyskać wynik. System operacyjny odczytuje wartości Pot podczas przerwania pionowego pustego (VBI) i kopiuje wynik do rejestrów Shadow potencjometru w pamięci RAM. Następnie resetuje POTGO dla następnego odczytu podczas następnego VBI.
Bit 3: Włącz tryb dwukolorowy portu szeregowego. Po włączeniu, bity 1 i 0 wysyłane do magistrali SIO są zastępowane tonami ustawionymi przez zegary 1 i 2. Jest to zwykle używane do zapisywania tonów analogowych reprezentujących dane cyfrowe na taśmie magnetofonowej.
Bit 4-6: Sterowanie taktowaniem zegara dla operacji portu szeregowego. Wartości bitów opisane poniżej:
Kontrola portu [6:4] | Wartość bitów | Zegar wejściowy | Zegar wyjściowy | Zegar dwukierunkowy |
---|---|---|---|---|
0 0 0 | $00 | Zewnętrzny | Zewnętrzny | Wejście |
0 0 1 | 10 $ | Kanały 3+4 (asynchroniczne) | Zewnętrzny | Wejście |
0 1 0 | 20 $ | kanał 4 | kanał 4 | Kanał wyjściowy 4 |
0 1 1 | 30 $ | Kanał 3+4 (asynchroniczny) | Kanał 4 (asynchroniczny) | Wejście |
1 0 0 | 40 $ | Zewnętrzny | kanał 4 | Wejście |
1 0 1 | 50 $ | Kanał 3+4 (asynchroniczny) | Kanał 4 (asynchroniczny) | Wejście |
1 1 0 | 60 $ | kanał 4 | kanał 2 | Kanał wyjściowy 4 |
1 1 1 | 70 $ | Kanał 3+4 (asynchroniczny) | kanał 2 | Wejście |
Bit 7: Wymusza znane wyjście 0, aby timer 2 mógł zresetować timer 1 w trybie dwutonowego wyjścia szeregowego.
SKSTAT $D20F Odczyt
Stan portu szeregowego
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
Błąd numeru seryjnego w ramce | Serial w przewadze | Przekroczenie KB | Odczyt Dane gotowe | Klawisz Shift | Ostatni klawisz wciąż wciśnięty | Wejście szeregowe zajęte | - |
KBCODE $D209 Odczyt
CIEŃ: CH $02FC
Kod klawiatury
Osiem przerwań IRQ
- BREAK
- Break (przerwanie klawisza BREAK)
- K
- Klawiatura (przerwanie klawiatury)
- SIR
- jeśli wejście szeregowe gotowe (odczyt przerwania z szyny szeregowej)
- ODN
- jeśli dane wyjściowe potrzebne (przerwanie zapisu z szyny szeregowej)
- XD
- jeśli eXmitend Data (przerwanie końca transmisji szeregowej)
- T1
- Timer 1 , timer 1 przerwanie
- T2
- Timer 2, timer 2 przerwanie
- T4
- Timer 4, timer 4 przerwanie
Przerwania mogą być włączane i wyłączane z oprogramowania przez rejestr IRQEN. Rejestr IRQSTAT zawiera status przerwań.
Klawiatura
Rejestr sześciu klawiszy aktualnie wciśniętych klawiszy (K0 K5), który zawiera wartości od 00 do 3F. Zawiera 2 wartości kontrolne. Jeden z nich pełni rolę dekodera wszystkich 6 wartości. Drugie wartości kontrolne służą do dekodowania specjalnych wartości klawiszy — CTRL, SHIFT i BREAK.
Linki zewnętrzne
- ASMA — Atari SAP Music Archive Kolekcja odtwarzaczy muzyki chipowej POKEY (SAP) i muzyki SAP z różnych 8-bitowych gier Atari.
- Arkusz danych chipa POKEY zeskanowany do pliku PDF .
- POKEY wykonany z małych układów logicznych
- Wideo przedstawiające 8-bitowe Atari (przy użyciu POKEY) emulujące układ Commodore SID.