Rejestry ANTIC-a

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 14:20, 21 wrz 2005
KMK (Dyskusja | wkład)
(infrastruktura)
← Previous diff
Aktualna wersja
Mono (Dyskusja | wkład)
(zamienione rozdzieelczości dwuliniowa i jednoliniowa przy opisie pmbase)
Linia 1: Linia 1:
-===Lista rejestrów===+Układ [[ANTIC (układ)|ANTIC]], 15 rejestrów.
 + 
 +==Lista rejestrów==
<table border = 1 cellpadding = 5> <table border = 1 cellpadding = 5>
<tr><td><b>Adres</b></td><td><b>Etykieta</b></td><td><b>Opis</b></td></tr> <tr><td><b>Adres</b></td><td><b>Etykieta</b></td><td><b>Opis</b></td></tr>
-<tr><td id="DMACTL">$D400 (W)</td><td>DMACTL</td><td> </td></tr>+<tr><td id="DMACTL">$D400 (W)</td><td>DMACTL</td><td>
 +<p>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]].</p>
 +<p>Znaczenie bitów:</p>
 +* bit 7: niewykorzystany
 +* bit 6: niewykorzystany
 +* bit 5: DMA dla [[ANTIC Display List|Display List]] (1 = włączone)
 +* bit 4: rozdzielczość [[Player/Missile Graphics|graczy i pocisków]] (0 = dwuliniowa, 1 = jednoliniowa)
 +* bit 3: DMA dla graczy (1 = włączone)
 +* bit 2: DMA dla pocisków (1 = włączone)
 +<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>
 +<table border = 1 cellpadding = 5>
 +<tr><td><b>Bit 1</b></td><td><b>Bit 0</b></td><td><b>Znaczenie</b></td></tr>
 +<tr><td>0</td><td>0</td><td>Brak obrazu.</td></tr>
 +<tr><td>0</td><td>1</td><td>Wąski obraz (32 kolumny, 256 pikseli).</td></tr>
 +<tr><td>1</td><td>0</td><td>Normalny obraz (40 kolumn, 320 pikseli).</td></tr>
 +<tr><td>1</td><td>1</td><td>Szeroki obraz (48 kolumn, 384 piksele).</td></tr>
 +</table>
 +<p>Normalnie ustawianą tu przez system operacyjny wartością jest $22 (34).</p>
 +<p>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%.</p>
 +</td></tr>
-<tr><td id="CHRCTL">$D401 (W)</td><td>CHRCTL</td><td> </td></tr>+<tr><td id="CHRCTL">$D401 (W)</td><td>CHRCTL, CHACTL</td><td>
 +<p>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]].</p>
 +<p>Znaczenie bitów:</p>
 +* bit 2: lustrzane odbicie znaków w pionie (1 = włączone)
 +* 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 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>
 +</td></tr>
-<tr><td id="DLPTR">$D402-3 (W)</td><td>DLPTR</td><td> </td></tr>+<tr><td id="DLPTR">$D402 (W)</td><td rowspan = 2>DLPTR, DLISTL/DLISTH</td><td rowspan = 2>
 +<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>
 +<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#HSCRL|przesuwem poziomym]].</td></tr>
 + 
 +<tr><td id="VSCROL">$D405 (W)</td><td>VSCROL</td><td>Rejestr pionowego przesuwu obrazu.
 +* Bity 0..3: Przesuwają treść obrazu w górę o n linii skanningowych.
 +Pozostałe bity są niewykorzystane.
 + 
 +Treść obrazu, analogicznie jak przy [[ANTIC Display List#HSCRL|przesuwie poziomym]], jest przesuwana tylko w liniach [[ANTIC Display List|Display List]] z uaktywnionym [[ANTIC Display List#VSCRL|przesuwem pionowym]] (wyjątkiem jest pierwsza linia Display List nieruchomej sekcji następująca po ostatniej linii Display List z uaktywnionym [[ANTIC Display List#VSCRL|przesuwem pionowym]]).</td></tr>
<tr><td>$D406</td><td>-</td><td> </td></tr> <tr><td>$D406</td><td>-</td><td> </td></tr>
-<tr><td id="PMBASE">$D407 (R)</td><td>PMBASE</td><td> </td></tr>+<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 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>
 +<table border = 1 cellpadding = 5>
 +<tr><td rowspan = 2><b>Obiekt</b></td><td colspan = 2><b>Offset względem PMBASE w rozdzielczości</b></td></tr>
 +<tr> <td><b>Dwuliniowej</b></td><td><b>Jednoliniowej</b></td></tr>
 +<tr><td>pociski</td><td>$0184</td><td>$0308</td></tr>
 +<tr><td>gracz 0</td><td>$0204</td><td>$0408</td></tr>
 +<tr><td>gracz 1</td><td>$0284</td><td>$0508</td></tr>
 +<tr><td>gracz 2</td><td>$0304</td><td>$0608</td></tr>
 +<tr><td>gracz 3</td><td>$0384</td><td>$0708</td></tr>
 +</table>
 +</p>
 +<p>Matryca pojedynczego gracza ma 8 bitów szerokości, a pocisku 2 bity.</p>
 +</td></tr>
<tr><td>$D408</td><td>-</td><td> </td></tr> <tr><td>$D408</td><td>-</td><td> </td></tr>
-<tr><td id="CHBASE">$D409 (W)</td><td>CHBASE</td><td> </td></tr>+<tr><td id="CHBASE">$D409 (W)</td><td>CHBASE</td><td><p>Wskaźnik adresu [[Generator znaków|zestawu znaków]], ma cień CHBAS pod adresem $02F4 (756).</p>
 +* w trybach ANTIC-a 2, 3, 4 i 5 bity 7-2 odpowiadają bitom 15-10 adresu zestawu znaków definiującego 128 znaków.
 +* 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>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>
-<tr><td id="WSYNC">$D40A (W)</td><td>WSYNC</td><td> </td></tr>+<tr><td id="WSYNC">$D40A (W)</td><td>WSYNC</td><td>
 +<p>Wait for horizontal synchronization. Zapis dowolnej wartości do tego rejestru powoduje uaktywnienie przez [[ANTIC (układ)|ANTIC]] sygnału RDY, czym zatrzymuje on [[6502]] do chwili wystąpienia impulsu synchronizacji poziomej.</p>
 +</td></tr>
-<tr><td id="VCOUNT">$D40B (R)</td><td>VCOUNT</td><td> </td></tr>+<tr><td id="VCOUNT">$D40B (R)</td><td>VCOUNT</td><td>
 +<p>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 [http://pl.wikipedia.org/wiki/NTSC 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.</p>
 +</td></tr>
-<tr><td id="LPENH">$D40C (R)</td><td>LPENH</td><td> </td></tr>+<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>Rejestr cień LPENHS pod adresem $0234.</p>
 +</td></tr>
-<tr><td id="LPENV">$D40D (R)</td><td>LPENV</td><td> </td></tr>+<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>Rejestr cień LPENVS pod adresem $0235.</p>
 +</td></tr>
-<tr><td id="NMIEN">$D40E (W)</td><td>NMIEN</td><td> </td></tr>+<tr><td id="NMIEN">$D40E (W)</td><td>NMIEN</td><td>
 +<p>Rejestr kontrolujący występowanie [[przerwania|przerwań]] [[NMI]] (NMI enable register). Znaczenie bitów:</p>
 +* bit 7 = 1, [[DLI]] włączone
 +* bit 6 = 1, [[VBL]] włączone
 +<p>Pozostałe bity są niewykorzystane.</p>
 +<p>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ć.</p>
 +</td></tr>
-<tr><td id="NMIST">$D40F (R)</td><td>NMIST</td><td> </td></tr>+<tr><td id="NMIST">$D40F (R)</td><td>NMIST</td><td>
 +<p>Rejestr statusu [[przerwania|przerwań]] [[NMI]] (NMI status register). Znaczenie bitów:</p>
 +* bit 7 = 1, [[DLI]] wystąpiło
 +* bit 6 = 1, [[VBL]] wystąpiło
 +* bit 5 = 1, [[NMI RESET]] wystąpiło (tylko seria [[400/800]])
 +<p>Pozostałe bity są niewykorzystane i ustawione na 1.</p>
 +<p>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 [[Rejestry ANTIC-a#NMIRES|NMIRES $D40F]].</p>
 +</td></tr>
-</table>+<tr><td id="NMIRES">$D40F (W)</td><td>NMIRES</td><td>
 +<p>Zapis tego rejestru (dowolną wartością) powoduje skasowanie bitów statusu [[NMI]] w rejestrze [[Rejestry ANTIC-a#NMIST|NMIST $D40F]].</p>
 +</td></tr>
-{{stub}}+</table>
-[[Kategoria:Atari 8-bit]]+[[Kategoria:Programowanie Atari 8-bit]]

Aktualna wersja

Układ ANTIC, 15 rejestrów.

Lista rejestrów

AdresEtykietaOpis
$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:

  • bit 7: niewykorzystany
  • bit 6: niewykorzystany
  • bit 5: DMA dla Display List (1 = włączone)
  • bit 4: rozdzielczość graczy i pocisków (0 = dwuliniowa, 1 = jednoliniowa)
  • bit 3: DMA dla graczy (1 = włączone)
  • bit 2: DMA dla pocisków (1 = włączone)

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:

Bit 1Bit 0Znaczenie
00Brak obrazu.
01Wąski obraz (32 kolumny, 256 pikseli).
10Normalny obraz (40 kolumn, 320 pikseli).
11Szeroki obraz (48 kolumn, 384 piksele).

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:

  • bit 2: lustrzane odbicie znaków w pionie (1 = włączone)
  • bit 1: interpretacja drugiej połówki generatora znaków w trybach tekstowych ANTIC 2 i 3 (0 = znaki normalne, 1 = inverse video)
  • bit 0: tłumienie znaków drugiej połówki generatora znaków w trybach tekstowych ANTIC 2 i 3 (1 = niewidoczne)

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)HSCROLRejestr poziomego przesuwu obrazu.
  • Bity 0..3: Przesuwają treść obrazu w lewo o 16-n cykli koloru.

Pozostałe bity są niewykorzystane.

Treść obrazu jest przesuwana tylko w liniach Display List z uaktywnionym przesuwem poziomym.
$D405 (W)VSCROLRejestr pionowego przesuwu obrazu.
  • Bity 0..3: Przesuwają treść obrazu w górę o n linii skanningowych.

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.

ObiektOffset względem PMBASE w rozdzielczości
DwuliniowejJednoliniowej
pociski$0184$0308
gracz 0$0204$0408
gracz 1$0284$0508
gracz 2$0304$0608
gracz 3$0384$0708

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).

  • w trybach ANTIC-a 2, 3, 4 i 5 bity 7-2 odpowiadają bitom 15-10 adresu zestawu znaków definiującego 128 znaków.
  • w trybach ANTIC-a 6 i 7 bity 7-1 odpowiadają bitom 15-9 adresu zestawu znaków definiującego 64 znaki.

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:

  • bit 7 = 1, DLI włączone
  • bit 6 = 1, VBL włączone

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:

  • bit 7 = 1, DLI wystąpiło
  • bit 6 = 1, VBL wystąpiło
  • bit 5 = 1, NMI RESET wystąpiło (tylko seria 400/800)

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.

Personal tools