Rejestry ANTIC-a
From Atariki
Wersja z dnia 18:55, 10 kwi 2017 0xF (Dyskusja | wkład) (PMBASE: brzytwa Ockhama) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (zamienione rozdzieelczości dwuliniowa i jednoliniowa przy opisie pmbase) |
||
Linia 15: | Linia 15: | ||
* bit 3: DMA dla graczy (1 = włączone) | * bit 3: DMA dla graczy (1 = włączone) | ||
* bit 2: DMA dla pocisków (1 = włączone) | * bit 2: DMA dla pocisków (1 = włączone) | ||
- | <p>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.</p> | + | <p>Przy rozdzielczości jednoliniowej graczy i pocisków jeden piksel P/MG ma wysokość jednej linii skaningowej. Przy rozdzielczości dwuliniowej -- dwóch linii. W obu przypadkach DMA następuje w każdej linii skaningowej (przy rozdzielczości dwuliniowej z jednakowymi adresami w każdej parze linii).</p> |
<p>Bity 0 i 1 wybierają szerokość obrazu jak następuje:</p> | <p>Bity 0 i 1 wybierają szerokość obrazu jak następuje:</p> | ||
<table border = 1 cellpadding = 5> | <table border = 1 cellpadding = 5> | ||
Linia 32: | Linia 32: | ||
<p>Znaczenie bitów:</p> | <p>Znaczenie bitów:</p> | ||
* bit 2: lustrzane odbicie znaków w pionie (1 = włączone) | * bit 2: lustrzane odbicie znaków w pionie (1 = włączone) | ||
- | * bit 1: interpretacja drugiej połówki generatora znaków (0 = znaki normalne, 1 = [[inverse video]]) | + | * bit 1: interpretacja drugiej połówki generatora znaków w trybach tekstowych [[ANTIC_Display_List#Tryby_znakowe|ANTIC 2 i 3]] (0 = znaki normalne, 1 = [[inverse video]]) |
- | * bit 0: tłumienie znaków w inverse video (1 = niewidoczne) | + | * bit 0: tłumienie znaków drugiej połówki generatora znaków w trybach tekstowych ANTIC 2 i 3 (1 = niewidoczne) |
<p>Pozostałe bity są niewykorzystane. Normalną wartością CHRCTL jest $02.</p> | <p>Pozostałe bity są niewykorzystane. Normalną wartością CHRCTL jest $02.</p> | ||
</td></tr> | </td></tr> | ||
<tr><td id="DLPTR">$D402 (W)</td><td rowspan = 2>DLPTR, DLISTL/DLISTH</td><td rowspan = 2> | <tr><td id="DLPTR">$D402 (W)</td><td rowspan = 2>DLPTR, DLISTL/DLISTH</td><td rowspan = 2> | ||
- | <p>Wskaźnik pierwszego rozkazu [[ANTIC Display List|Display List]] (Display List Pointer). Ma cień DLPTRS (SDLSTL/SDLSTH) 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.</p> | + | <p>Wskaźnik rozkazu [[ANTIC Display List|Display List]] (Display List Pointer). Ma cień DLPTRS (SDLSTL/SDLSTH) pod adresem $0230-$0231, skąd procedura [[SYSVBL]] przepisuje stan rejestru za każdym wystąpieniem [[przerwania]] [[VBL]]. System operacyjny umieszcza Display List bezpośrednio przed pamięcią obrazu.</p> |
</td></tr> | </td></tr> | ||
<tr><td>$D403 (W)</td></tr> | <tr><td>$D403 (W)</td></tr> | ||
Linia 57: | Linia 57: | ||
<tr><td id="PMBASE">$D407 (W)</td><td>PMBASE</td><td> | <tr><td id="PMBASE">$D407 (W)</td><td>PMBASE</td><td> | ||
- | <p>Player/Missile Base, wskaźnik obszaru pamięci przeznaczonego na [[Player/Missile Graphics|grafikę graczy i pocisków]]. Przy rozdzielczości dwuliniowej graczy i pocisków (zob. [[Rejestry ANTIC-a#DMACTL|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.</p> | + | <p>Player/Missile Base, wskaźnik obszaru pamięci przeznaczonego na [[Player/Missile Graphics|grafikę graczy i pocisków]]. Przy rozdzielczości jednoliniowej graczy i pocisków (zob. [[Rejestry ANTIC-a#DMACTL|DMACTL $D400]]) zawiera pięć, a przy dwuliniowej 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.</p> |
<p>Wewnątrz tego obszaru [[ANTIC (układ)|ANTIC]] przeznacza dla jednego gracza 120 bajtów w rozdzielczości dwuliniowej i 240 w rozdzielczości jednoliniowej. Taki sam obszar, jak dla jednego gracza, zarezerwowany jest też dla czterech pocisków.</p> | <p>Wewnątrz tego obszaru [[ANTIC (układ)|ANTIC]] przeznacza dla jednego gracza 120 bajtów w rozdzielczości dwuliniowej i 240 w rozdzielczości jednoliniowej. Taki sam obszar, jak dla jednego gracza, zarezerwowany jest też dla czterech pocisków.</p> | ||
<p> | <p> | ||
Linia 79: | Linia 79: | ||
* w trybach ANTIC-a 6 i 7 bity 7-1 odpowiadają bitom 15-9 adresu zestawu znaków definiującego 64 znaki. | * w trybach ANTIC-a 6 i 7 bity 7-1 odpowiadają bitom 15-9 adresu zestawu znaków definiującego 64 znaki. | ||
<p>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.</p> | <p>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.</p> | ||
+ | <p>OS ma jeszcze dodatkowy adres międzynarodowego zestawu znaków CHSPTR w rejestrze $026B (619). Zawartości CHBAS i CHSPTR są zamieniane miejscami po wciśnięciu kombinacji klawiszy CTRL+F4 w 1200XL. Na VBLKD przepisywana jest do rejestru sprzętowego zawsze tylko zawartość CHBAS.</p> | ||
</td></tr> | </td></tr> | ||
Linia 91: | Linia 92: | ||
<tr><td id="LPENH">$D40C (R)</td><td>LPENH, PENH</td><td> | <tr><td id="LPENH">$D40C (R)</td><td>LPENH, PENH</td><td> | ||
<p>Współrzędna X pozycji [[Pióro świetlne|pióra świetlnego]] (Light Pen Horizontal position) lub [[XG-1|pistoletu świetlnego]]. Wskazuje cykl koloru w linii, w którym wykryto obecność elementu światłoczułego.</p> | <p>Współrzędna X pozycji [[Pióro świetlne|pióra świetlnego]] (Light Pen Horizontal position) lub [[XG-1|pistoletu świetlnego]]. Wskazuje cykl koloru w linii, w którym wykryto obecność elementu światłoczułego.</p> | ||
+ | <p>Rejestr cień LPENHS pod adresem $0234.</p> | ||
</td></tr> | </td></tr> | ||
<tr><td id="LPENV">$D40D (R)</td><td>LPENV, PENV</td><td> | <tr><td id="LPENV">$D40D (R)</td><td>LPENV, PENV</td><td> | ||
<p>Współrzędna Y pozycji pióra świetlnego (Light Pen Vertical position) lub pistoletu świetlnego. Wskazuje numer linii ekranowej podzielony przez 2 (analogicznie, jak VCOUNT), w której wykryto obecność elementu światłoczułego.</p> | <p>Współrzędna Y pozycji pióra świetlnego (Light Pen Vertical position) lub pistoletu świetlnego. Wskazuje numer linii ekranowej podzielony przez 2 (analogicznie, jak VCOUNT), w której wykryto obecność elementu światłoczułego.</p> | ||
+ | <p>Rejestr cień LPENVS pod adresem $0235.</p> | ||
</td></tr> | </td></tr> | ||
Aktualna wersja
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 (SDMCTL) pod adresem $022F, skąd procedura SYSVBL przepisuje stan rejestru za każdym wystąpieniem przerwania VBL. Znaczenie bitów:
Przy rozdzielczości jednoliniowej graczy i pocisków jeden piksel P/MG ma wysokość jednej linii skaningowej. Przy rozdzielczości dwuliniowej -- dwóch linii. W obu przypadkach DMA następuje w każdej linii skaningowej (przy rozdzielczości dwuliniowej z jednakowymi adresami w każdej parze linii). 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, CHACTL |
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, DLISTL/DLISTH |
Wskaźnik rozkazu Display List (Display List Pointer). Ma cień DLPTRS (SDLSTL/SDLSTH) pod adresem $0230-$0231, skąd procedura SYSVBL przepisuje stan rejestru za każdym wystąpieniem przerwania VBL. System operacyjny umieszcza Display List 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. | ||||||||||||||||||||
$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 Display List nieruchomej sekcji następująca po ostatniej linii Display List 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 jednoliniowej graczy i pocisków (zob. DMACTL $D400) zawiera pięć, a przy dwuliniowej 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 120 bajtów w rozdzielczości dwuliniowej i 240 w rozdzielczości jednoliniowej. Taki sam obszar, jak dla jednego gracza, zarezerwowany jest też dla czterech pocisków.
Matryca pojedynczego gracza ma 8 bitów szerokości, a pocisku 2 bity. | ||||||||||||||||||||
$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. OS ma jeszcze dodatkowy adres międzynarodowego zestawu znaków CHSPTR w rejestrze $026B (619). Zawartości CHBAS i CHSPTR są zamieniane miejscami po wciśnięciu kombinacji klawiszy CTRL+F4 w 1200XL. Na VBLKD przepisywana jest do rejestru sprzętowego zawsze tylko zawartość CHBAS. | ||||||||||||||||||||
$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. Przez jeden cykl w każdej ramce jest tu wartość 156 (PAL) lub 131 (NTSC). Wartość 0 utrzymuje się przez 227 cykli, a nie 228. | ||||||||||||||||||||
$D40C (R) | LPENH, PENH |
Współrzędna X pozycji pióra świetlnego (Light Pen Horizontal position) lub pistoletu świetlnego. Wskazuje cykl koloru w linii, w którym wykryto obecność elementu światłoczułego. Rejestr cień LPENHS pod adresem $0234. | ||||||||||||||||||||
$D40D (R) | LPENV, PENV |
Współrzędna Y pozycji pióra świetlnego (Light Pen Vertical position) lub pistoletu świetlnego. Wskazuje numer linii ekranowej podzielony przez 2 (analogicznie, jak VCOUNT), w której wykryto obecność elementu światłoczułego. Rejestr cień LPENVS pod adresem $0235. | ||||||||||||||||||||
$D40E (W) | NMIEN |
Rejestr kontrolujący występowanie przerwań NMI (NMI enable register). Znaczenie bitów: Pozostałe bity są niewykorzystane. System operacyjny normalnie ustawia tu wartość $40 (DLI wyłączone, VBL włączone). Przerwania NMI RESET (które jest trzecim z przerwań generowanych przez ANTIC) nie można wyłączyć. | ||||||||||||||||||||
$D40F (R) | NMIST |
Rejestr statusu przerwań NMI (NMI status register). Znaczenie bitów:
Pozostałe bity są niewykorzystane i ustawione na 1. Skasowanie bitu DLI następuje automatycznie w momencie wystąpienia przerwania VBL (te przerwania nie mogą wystąpić jednocześnie). Do skasowania wszystkich bitów służy rejestr NMIRES $D40F. | ||||||||||||||||||||
$D40F (W) | NMIRES |
Zapis tego rejestru (dowolną wartością) powoduje skasowanie bitów statusu NMI w rejestrze NMIST $D40F. |