Rejestry GTIA
From Atariki
Wersja z dnia 20:02, 19 lip 2019 0xF (Dyskusja | wkład) (Bity 1 i 0 PMCNTL sterują DMA, a nie wyświetlaniem PMG) ← Previous diff |
Wersja z dnia 20:08, 19 lip 2019 0xF (Dyskusja | wkład) (CONSOL w 5200) Next diff → |
||
Linia 170: | Linia 170: | ||
|- | |- | ||
|id="CONSOL"|$D01F (R/W)||CONSOL|| | |id="CONSOL"|$D01F (R/W)||CONSOL|| | ||
- | Bity 0-3 tego rejestru reprezentują stan nóżek S0-S3 układu [[GTIA]], a pozostałe bity sa niewykorzystane. Znaczenie: | + | Bity 0-3 tego rejestru reprezentują stan nóżek S0-S3 układu [[GTIA]], a pozostałe bity sa niewykorzystane. |
+ | |||
+ | Znaczenie w komputerze: | ||
* bit 3 - jednobitowe wyjście dźwiękowe (tzw. [[Buzzer]]) | * bit 3 - jednobitowe wyjście dźwiękowe (tzw. [[Buzzer]]) | ||
* bit 2 - stan klawisza OPTION (0 - naciśnięty) | * bit 2 - stan klawisza OPTION (0 - naciśnięty) | ||
Linia 177: | Linia 179: | ||
Przed odczytaniem stanu linii wejściowych (czyli stanu klawiszy START, SELECT, OPTION) odpowiednie bity rejestru CONSOL trzeba ustawić na zero. Normalnie jednak nie ma potrzeby tego czynić w programie, gdyż robi to systemowa procedura [[SYSVBL]]. | Przed odczytaniem stanu linii wejściowych (czyli stanu klawiszy START, SELECT, OPTION) odpowiednie bity rejestru CONSOL trzeba ustawić na zero. Normalnie jednak nie ma potrzeby tego czynić w programie, gdyż robi to systemowa procedura [[SYSVBL]]. | ||
+ | |||
+ | W konsoli 5200 wszystkie cztery bity służą jako wyjścia wybierające port joysticka, którego klawisze są skanowane przez POKEY. | ||
|} | |} | ||
{{stub}} | {{stub}} | ||
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] |
Wersja z dnia 20:08, 19 lip 2019
GTIA został wykorzystany w małych Atari oraz w konsolach Atari 5200. W obu systemach rejestry GTIA zostały zmapowane na różnych stronach pamięci - w komputerach na stronie $D0, w konsoli na stronie $C0. W tabeli podane są adresy właściwe dla komputerów 400/800/XL/XE.
Lista rejestrów
Adres | Etykieta | Opis | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
$D000 (R) | KOLM0PF, M0PF | |||||||||||||||||||
$D000 (W) | HPOSP0 |
Pozycja pozioma gracza nr 0, mierzona w cyklach koloru. Można wpisywać wartości od 0 (skrajna lewa) do 255 (skrajna prawa) pamiętając jednak o tym, że skrajne pozycje znajdują się poza obszarem wyświetlanym na ekranie przeciętnego monitora. W praktyce zakres pozycji, w jakich duszek jest widoczny, rozciąga się od wartości 32 do 216. Standardowe pole gry zajmuje pozycje 48 do 208, zwężone odpowiednio mniej, a rozszerzone odpowiednio więcej. | ||||||||||||||||||
$D001 (R) | KOLM1PF, M1PF | |||||||||||||||||||
$D001 (W) | HPOSP1 | Pozycja pozioma gracza nr 1. Patrz HPOSP0. | ||||||||||||||||||
$D002 (R) | KOLM2PF, M2PF | |||||||||||||||||||
$D002 (W) | HPOSP2 | Pozycja pozioma gracza nr 2. Patrz HPOSP0. | ||||||||||||||||||
$D003 (R) | KOLM3PF, M3PF | |||||||||||||||||||
$D003 (W) | HPOSP3 | Pozycja pozioma gracza nr 3. Patrz HPOSP0. | ||||||||||||||||||
$D004 (R) | KOLP0PF, P0PF | |||||||||||||||||||
$D004 (W) | HPOSM0 | Pozycja pozioma pocisku nr 0. Patrz HPOSP0. | ||||||||||||||||||
$D005 (R) | KOLP1PF, P1PF | |||||||||||||||||||
$D005 (W) | HPOSM1 | Pozycja pozioma pocisku nr 1. Patrz HPOSP0. | ||||||||||||||||||
$D006 (R) | KOLP2PF, P2PF | |||||||||||||||||||
$D006 (W) | HPOSM2 | Pozycja pozioma pocisku nr 2. Patrz HPOSP0. | ||||||||||||||||||
$D007 (R) | KOLP3PF, P3PF | |||||||||||||||||||
$D007 (W) | HPOSM3 | Pozycja pozioma pocisku nr 3. Patrz HPOSP0. | ||||||||||||||||||
$D008 (R) | KOLM0P, M0PL | |||||||||||||||||||
$D008 (W) | SIZEP0 | |||||||||||||||||||
$D009 (R) | KOLM1P, M1PL | |||||||||||||||||||
$D009 (W) | SIZEP1 | |||||||||||||||||||
$D00A (R) | KOLM2P, M2PL | |||||||||||||||||||
$D00A (W) | SIZEP2 | |||||||||||||||||||
$D00B (R) | KOLM3P, M3PL | |||||||||||||||||||
$D00B (W) | SIZEP3 | |||||||||||||||||||
$D00C (R) | KOLP0P, P0PL | |||||||||||||||||||
$D00C (W) | SIZEM | |||||||||||||||||||
$D00D (R) | KOLP1P, P1PL | |||||||||||||||||||
$D00D (W) | GRAFP0 | |||||||||||||||||||
$D00E (R) | KOLP2P, P2PL | |||||||||||||||||||
$D00E (W) | GRAFP1 | |||||||||||||||||||
$D00F (R) | KOLP3P, P3PL | |||||||||||||||||||
$D00F (W) | GRAFP2 | |||||||||||||||||||
$D010 (R) | TRIG0 | Stan spustu joysticka nr 0 (0 - wciśnięty). Cień w TRIG0S ($0284). Podłączony jest tu również element światłoczuły pióra świetlnego lub pistoletu świetlnego dołączonego do portu 0. | ||||||||||||||||||
$D010 (W) | GRAFP3 | |||||||||||||||||||
$D011 (R) | TRIG1 | Stan spustu joysticka nr 1 (0 - wciśnięty). Cień w TRIG1S ($0285). Podłączony jest tu również element światłoczuły pióra świetlnego lub pistoletu świetlnego dołączonego do portu 1. | ||||||||||||||||||
$D011 (W) | GRAFM | |||||||||||||||||||
$D012 (R) | TRIG2 |
W 400/800 stan spustu joysticka nr 2 (0 - wciśnięty). W XEGS wskazuje fakt podłączenia klawiatury (1 - podłączona). W pozostałych XL i XE rejestr nieużywany. Cień w TRIG2S ($0286). | ||||||||||||||||||
$D012 (W) | COLPM0 |
Kolor gracza i pocisku nr 0. Bity 7-4 wybierają kolor, bity 3-1 odcień, a bit 0 jest nieużywany, a więc wybór jest z palety 128 kolorów. Rejestr odświeżany jest przez procedurę SYSVBL, która kopiuje tu zawartość cienia COLPM0S $02C0 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D013 (R) | TRIG3 |
W 400/800 stan spustu joysticka nr 3 (0 - wciśnięty). W XL i XE sygnalizuje stan zewnętrznego cartridge'a (1 - włożony do gniazda) podpiętego pod linię RD5 (mapowanie $A000-$BFFF). Nie wskaże, czy włożono cartridge, który jest podpięty tylko (!) pod linię RD4 (mapowanie $8000-$9FFF). Cień w TRIG3S ($0287). W komputerach SECAM (w przeciwieństwie do PAL i NTSC) stan tego rejestru nie ustala się natychmiast po aktywacji (włożeniu) kartridża, ale dopiero podczas pierwszych sześciu cykli koloru po impulsie synchronizacji poziomej kończącym bieżącą linię skaningową. Powoduje to kłopoty, jeśli program zapisany na kartridżu może odłączać pamięć ROM kartridża w celu uzyskania dostępu do znajdującego się "pod nią" RAM-u. Takim kartridżem jest SpartaDOS X. Przyczyną jest fakt, że procedura SYSVBL (a ściślej: jej druga faza) zawiera kod sprawdzający zgodność stanu TRIG3 i jego cienia GINTLK ($03FA), i jeśli się nie zgadzają, zawiesza komputer. Metoda obejścia tego problemu:
sei ;zablokuj drugą fazę SYSVBL ... ;tu przełączenie pamięci sta wsync ;odczekujemy 2 linie na ustalenie sie stanu trig3 sta wsync lda trig3 sta gintlk cli
| ||||||||||||||||||
$D013 (W) | COLPM1 |
Kolor gracza i pocisku nr 1. Bity 7-4 wybierają kolor, bity 3-1 odcień, a bit 0 jest nieużywany, a więc wybór jest z palety 128 kolorów. Rejestr odświeżany jest przez procedurę SYSVBL, która kopiuje tu zawartość cienia COLPM1S $02C1 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D014 (R) | PAL |
Znacznik systemu TV. Znaczenie bitów:
Wynika z tego, że w systemie PAL i SECAM wartość rejestru to $01, a w NTSC $0F. | ||||||||||||||||||
$D014 (W) | COLPM2 |
Kolor gracza i pocisku nr 2. Bity 7-4 wybierają kolor, bity 3-1 odcień, a bit 0 jest nieużywany, a więc wybór jest z palety 128 kolorów. Rejestr odświeżany jest przez procedurę SYSVBL, która kopiuje tu zawartość cienia COLPM2S $02C2 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D015 (W) | COLPM3 |
Kolor gracza i pocisku nr 3. Bity 7-4 wybierają kolor, bity 3-1 odcień, a bit 0 jest nieużywany, a więc wybór jest z palety 128 kolorów. Rejestr odświeżany jest przez procedurę SYSVBL, która kopiuje tu zawartość cienia COLPM3S $02C3 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D016 (W) | COLPF0 | |||||||||||||||||||
$D017 (W) | COLPF1 | |||||||||||||||||||
$D018 (W) | COLPF2 | |||||||||||||||||||
$D019 (W) | COLPF3 | |||||||||||||||||||
$D01A (W) | COLBAK, COLBK | |||||||||||||||||||
$D01B (W) | GTIACTL, PRIOR |
Rejestr cień: GTIACTLS (GPRIOR) $026F
| ||||||||||||||||||
$D01C (W) | VDELAY |
Bity 0-3 oznaczają pociski o numerach 0-3, bity 4-7 graczy o numerach 0-3. Ustawienie bitu powoduje, ze pozycja pionowa odpowiedniego obiektu zwiększa się o jedną linię skaningową obrazu (czyli obiekt na ekranie obniża się o jedną linię). Służy to do zwiększenia płynności ruchu pionowego obiektów w rozdzielczości dwuliniowej, patrz DMACTL. | ||||||||||||||||||
$D01D (W) | PMCNTL, GRACTL |
Funkcje bitów:
Bity 1 i 0 aktywują pobieranie grafiki odpowiednio graczy i pocisków z szyny danych. Normalnie ustawia się takie same wartości, jak w bitach 3 i 2 DMACTL. Ustawienie bitów w DMACTL, a nie w PMCNTL powoduje DMA ANTICa, którego odczyty są ignorowane. Ustawienie bitów w PMCNTL ale nie w DMACTL powoduje, że grafika graczy lub pocisków jest pozornie losowa, w rzeczywistości bierze się z zawartości szyny danych sterowanej przez procesor. Bit 2 odpowiada za działanie rejestrów TRIG0-3: jego ustawienie powoduje, że po wciśnięciu spustu joysticka odpowiedni rejestr TRIGx "zatrzaskuje się" i pokazuje cały czas, że spust jest wciśnięty, nawet jeśli już nie jest. Zwolnienie następuje dopiero po skasowaniu bitu 2 PMCNTL. Mechanizm ten służy do wykrywania portu, do którego jest podłączone pióro świetlne lub pistolet świetlny. Urządzenia te generują bardzo krótkie impulsy. Bity 6-7 są niewykorzystane. | ||||||||||||||||||
$D01E (W) | HITCLR |
Zapis dowolnej wartości pod ten adres kasuje stany rejestrów kolizji. | ||||||||||||||||||
$D01F (R/W) | CONSOL |
Bity 0-3 tego rejestru reprezentują stan nóżek S0-S3 układu GTIA, a pozostałe bity sa niewykorzystane. Znaczenie w komputerze:
Przed odczytaniem stanu linii wejściowych (czyli stanu klawiszy START, SELECT, OPTION) odpowiednie bity rejestru CONSOL trzeba ustawić na zero. Normalnie jednak nie ma potrzeby tego czynić w programie, gdyż robi to systemowa procedura SYSVBL. W konsoli 5200 wszystkie cztery bity służą jako wyjścia wybierające port joysticka, którego klawisze są skanowane przez POKEY. |
Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.