Rejestry ANTIC-a
From Atariki
Wersja z dnia 21:06, 1 cze 2010 Mono (Dyskusja | wkład) (link do generatora znaków) ← Previous diff |
Wersja z dnia 12:29, 3 cze 2010 Mono (Dyskusja | wkład) (hscroll i vscroll) Next diff → |
||
Linia 42: | Linia 42: | ||
<tr><td>$D403 (W)</td></tr> | <tr><td>$D403 (W)</td></tr> | ||
- | <tr><td id="HSCROL">$D404 (W)</td><td>HSCROL</td><td> </td></tr> | + | <tr><td id="HSCROL">$D404 (W)</td><td>HSCROL</td><td>Rejestr poziomego przesuwu obrazu. |
+ | * Bity 0..3: przesuwają treść obrazu w lewo o 16-n cykli koloru. | ||
+ | Pozostałe bity są niewykorzystane. | ||
- | <tr><td id="VSCROL">$D405 (W)</td><td>VSCROL</td><td> </td></tr> | + | Treść obrazu jest przesuwana tylko w liniach [[ANTIC Display List|Display List]] z uaktywnionym [[ANTIC Display List#Przesuw obrazu|przesuwem poziomym]]. |
+ | |||
+ | Linia z uaktywnionym przesuwem poziomym ma logiczną szerokość 48 bajtów niezależnie od szerokości wyświetlanego obrazu ustawionej w DMACTL.</td></tr> | ||
+ | |||
+ | <tr><td id="VSCROL">$D405 (W)</td><td>VSCROL</td><td>Rejestr pionowego przesuwu obrazu. | ||
+ | * Bity 0..2: przesuwają treść obrazu w górę o n linii skanningowych. | ||
+ | * Bit 3: wpływa na to, jak ma być realizowane przejście między sekcjami z włączonym przesuwem pionowym, a sekcjami bez włączonego przesuwu. | ||
+ | <table border = 1 cellpadding = 5> | ||
+ | <tr><td><b>Bit 3</b></td><td><b>Znaczenie</b></td></tr> | ||
+ | <tr><td>0</td><td>powoduje "ściśnięcie" linii Display List następującej bezpośrednio za sekcją z włączonym przesuwem pionowym do jednej linii skanningowej i wyświetlanie w niej przesuniętego obrazu</td></tr> | ||
+ | <tr><td>1</td><td>powoduje pełne wyświetlanie linii Display List następującej bezpośrednio za sekcją z włączonym przesuwem pionowym oraz zduplikowanie pierwszej linii Display List sekcji z włączonym przesuwem pionowym i wyświetlanie w nich obrazu przesuniętego; w zduplikowanych liniach Display List wyświetlana jest treść linii Display List z pustymi pierwszymi dwiema liniami skanningowymi</td></tr> | ||
+ | </table> | ||
+ | Pozostałe bity są niewykorzystane. | ||
+ | |||
+ | Treść obrazu, analogicznie jak przy przesuwie poziomym, jest przesuwana tylko w liniach [[ANTIC Display List|Display List]] z uaktywnionym [[ANTIC Display List#Przesuw obrazu|przesuwem pionowym]] (wyjątkiem jest pierwsza linia trybu następującego po linii z uaktywnionym przesuwem pionowym).</td></tr> | ||
<tr><td>$D406</td><td>-</td><td> </td></tr> | <tr><td>$D406</td><td>-</td><td> </td></tr> |
Wersja z dnia 12:29, 3 cze 2010
Układ ANTIC, 15 rejestrów.
Lista rejestrów
Adres | Etykieta | Opis | |||||||||||||||||||||||||||||
$D400 (W) | DMACTL |
Rejestr kontroli dostępu do pamięci (DMA Control register). Ma cień DMACTLS pod adresem $022F, skąd procedura SYSVBL przepisuje stan rejestru za każdym wystąpieniem przerwania VBL. Znaczenie bitów:
Przy rozdzielczości dwuliniowej graczy i pocisków dane dla obiektów pobierane są podczas tworzenia co drugiej linii obrazu. Wynika z tego, że jeden piksel P/MG ma w tej rozdzielczości wysokość dwóch linii skaningowych obrazu. Rozdzielczość jednoliniowa jest dwa razy większa - jeden piksel P/MG ma wysokość jednej linii skaningowej. Bity 0 i 1 wybierają szerokość obrazu jak następuje:
Normalnie ustawianą tu przez system operacyjny wartością jest $22 (34). Wyłączenie obrazu i DMA powoduje, że ANTIC przestaje pobierać dane z pamięci i tym samym zabierać procesorowi dostęp do magistrali danych i adresowej. Powoduje to wzrost szybkości obliczeń wykonywanych przez CPU nawet o 30%. | |||||||||||||||||||||||||||||
$D401 (W) | CHRCTL |
Rejestr kontroli wyświetlania znaków (Character control register). Ma cień CHACT pod adresem $02F3, skąd procedura SYSVBL przepisuje stan rejestru za każdym wystąpieniem przerwania VBL. Znaczenie bitów:
Pozostałe bity są niewykorzystane. Normalną wartością CHRCTL jest $02. | |||||||||||||||||||||||||||||
$D402 (W) | DLPTR |
Wskaźnik pierwszego rozkazu Display List (Display List Pointer). Ma cień DLPTRS pod adresem $0230-$0231, skąd procedura SYSVBL przepisuje stan rejestru za każdym wystąpieniem przerwania VBL. Display List jest zazwyczaj ulokowana bezpośrednio przed pamięcią obrazu. | |||||||||||||||||||||||||||||
$D403 (W) | |||||||||||||||||||||||||||||||
$D404 (W) | HSCROL | Rejestr poziomego przesuwu obrazu.
Pozostałe bity są niewykorzystane. Treść obrazu jest przesuwana tylko w liniach Display List z uaktywnionym przesuwem poziomym. Linia z uaktywnionym przesuwem poziomym ma logiczną szerokość 48 bajtów niezależnie od szerokości wyświetlanego obrazu ustawionej w DMACTL. | |||||||||||||||||||||||||||||
$D405 (W) | VSCROL | Rejestr pionowego przesuwu obrazu.
Pozostałe bity są niewykorzystane. Treść obrazu, analogicznie jak przy przesuwie poziomym, jest przesuwana tylko w liniach Display List z uaktywnionym przesuwem pionowym (wyjątkiem jest pierwsza linia trybu następującego po linii z uaktywnionym przesuwem pionowym). | |||||||||||||||||||||||||||||
$D406 | - | ||||||||||||||||||||||||||||||
$D407 (W) | PMBASE |
Player/Missile Base, wskaźnik obszaru pamięci przeznaczonego na grafikę graczy i pocisków. Przy rozdzielczości dwuliniowej graczy i pocisków (zob. DMACTL $D400) zawiera pięć, a przy jednoliniowej sześć najstarszych bitów adresu. Wynika z tego, że obszar danych dla grafiki graczy i pocisków musi zaczynać się odpowiednio na granicy dwóch lub jednego kilobajta. Wewnątrz tego obszaru ANTIC przeznacza dla jednego gracza 128 bajtów w rozdzielczości dwuliniowej i 256 w rozdzielczości jednoliniowej. Taki sam obszar, jak dla jednego gracza, zarezerwowany jest też dla czterech pocisków. Pamięć przydzielona jest tak, jakby było możliwe wyświetlenie ośmiu graczy, jednak ponieważ jest tylko czterech graczy i cztery pociski (które składają się na piątego gracza), część zarezerwowanego obszaru jest niewykorzystana:
Matryca pojedynczego gracza ma 8 bitów szerokości. Ponieważ na dane gracza (czy też pocisków) w rozdzielczości jednoliniowej zarezerwowane jest 256 bajtów, a obraz ma tylko 240 linii skaningowych wysokości, łatwo stąd wydedukować, że gracze i pociski mają większą wysokość niż ekran. Tak też jest w istocie: w tej rozdzielczości pierwsze i ostatnie osiem bajtów matrycy obiektu jest niewidocznych na ekranie (w rozdzielczości dwuliniowej są to pierwsze i ostatnie cztery bajty). | |||||||||||||||||||||||||||||
$D408 | - | ||||||||||||||||||||||||||||||
$D409 (W) | CHBASE | Wskaźnik adresu zestawu znaków, ma cień CHBAS pod adresem $02F4 (756).
Wynika z tego, że w trybach 2-5 zestaw znaków musi się znajdować na granicy 1k, a w trybach 6-7 na granicy 512 bajtów. | |||||||||||||||||||||||||||||
$D40A (W) | WSYNC |
Wait for horizontal synchronization. Zapis dowolnej wartości do tego rejestru powoduje uaktywnienie przez ANTIC sygnału RDY, czym zatrzymuje on 6502 do chwili wystąpienia impulsu synchronizacji poziomej. | |||||||||||||||||||||||||||||
$D40B (R) | VCOUNT |
Licznik generowanych przez ANTIC linii skaningowych (Vertical line counter). Licznik ten jest dziewięciobitowy, z czego w rejestrze VCOUNT widać osiem najstarszych bitów. Zlicza on więc co drugą wyświetlaną linię, w systemie PAL teoretycznie znajdują się tu wartości od 0 do 155, natomiast w systemie NTSC - od 0 do 130. W praktyce po osiągnięciu maximum licznik może na moment (mniej niż 5 cykli CPU) przeskoczyć na wartość o jeden większą (tj. 156 w PAL-u i 131 w NTSC). | |||||||||||||||||||||||||||||
$D40C (R) | LPENH |
Współrzędna X pozycji pióra świetlnego (Light Pen Horizontal position). | |||||||||||||||||||||||||||||
$D40D (R) | LPENV |
Współrzędna Y pozycji pióra świetlnego (Light Pen Vertical position). | |||||||||||||||||||||||||||||
$D40E (W) | NMIEN |
Rejestr kontrolujący występowanie przerwań NMI (NMI enable register). Znaczenie bitów: System operacyjny normalnie ustawia tu wartość $40 (DLI wyłączone, VBL włączone). Bit 5 jest formalnie przypisany do NMI RESET, a faktycznie niewykorzystany: to przerwanie nie występuje w serii XL i XE, a na 400/800 nie da się go zablokować przez skasowanie tego bitu. Pozostałe bity są "naprawdę" niewykorzystane. | |||||||||||||||||||||||||||||
$D40F (R) | NMIST |
Rejestr statusu przerwań NMI (NMI status register). Znaczenie bitów:
Pozostałe bity są niewykorzystane. Skasowania bitów NMIST dokonuje się przez zapis rejestru NMIRES $D40F. Ponadto bit DLI jest kasowany w momencie wystąpienia przerwania VBL. | |||||||||||||||||||||||||||||
$D40F (W) | NMIRES |
Zapis tego rejestru (dowolną wartością) powoduje skasowanie bitów statusu NMI w rejestrze NMIST $D40F. |
Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.