Rejestry GTIA
From Atariki
Wersja z dnia 17:59, 21 sie 2023 0xF (Dyskusja | wkład) (GRACTL włącza odbiór DMA, a nie same sprajty) ← Previous diff |
Aktualna wersja KMK (Dyskusja | wkład) (stub na tym etapie to już nieśmieszne) |
||
Linia 16: | Linia 16: | ||
|id="HPOSP0"|$D000 (W)||HPOSP0|| | |id="HPOSP0"|$D000 (W)||HPOSP0|| | ||
Pozycja pozioma [[gracz]]a nr 0, mierzona w [[cykl koloru|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. | Pozycja pozioma [[gracz]]a nr 0, mierzona w [[cykl koloru|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. | ||
- | |- | ||
- | |id="DISM0PF"|$D000 (R/W)||DISM0PF|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji pocisku 0 z polem gry. Bity 0-3 oznaczają kolizje z polem gry 0-3 (COLPF0-COLPF3). Blokada jest aktywna kiedy bit jest ustawiony. | ||
- | * bit 0: COLPF0 | ||
- | * bit 1: COLPF1 | ||
- | * bit 2: COLPF2 | ||
- | * bit 3: COLPF3 | ||
- | * bity 4-7: zawsze 0 | ||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLM1PF"|$D001 (R)||KOLM1PF, M1PF|| | |id="KOLM1PF"|$D001 (R)||KOLM1PF, M1PF|| | ||
Linia 30: | Linia 21: | ||
|- | |- | ||
|id="HPOSP1"|$D001 (W)||HPOSP1||Pozycja pozioma gracza nr 1. Patrz [[#HPOSP0|HPOSP0]]. | |id="HPOSP1"|$D001 (W)||HPOSP1||Pozycja pozioma gracza nr 1. Patrz [[#HPOSP0|HPOSP0]]. | ||
- | |- | ||
- | |id="DISM1PF"|$D001 (R/W)||DISM1PF|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji pocisku 1 z polem gry. Patrz [[#DISM0PF|DISM0PF]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLM2PF"|$D002 (R)||KOLM2PF, M2PF|| | |id="KOLM2PF"|$D002 (R)||KOLM2PF, M2PF|| | ||
Linia 40: | Linia 26: | ||
|- | |- | ||
|id="HPOSP2"|$D002 (W)||HPOSP2||Pozycja pozioma gracza nr 2. Patrz [[#HPOSP0|HPOSP0]]. | |id="HPOSP2"|$D002 (W)||HPOSP2||Pozycja pozioma gracza nr 2. Patrz [[#HPOSP0|HPOSP0]]. | ||
- | |- | ||
- | |id="DISM2PF"|$D002 (R/W)||DISM2PF|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji pocisku 2 z polem gry. Patrz [[#DISM0PF|DISM0PF]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLM3PF"|$D003 (R)||KOLM3PF, M3PF|| | |id="KOLM3PF"|$D003 (R)||KOLM3PF, M3PF|| | ||
Linia 50: | Linia 31: | ||
|- | |- | ||
|id="HPOSP3"|$D003 (W)||HPOSP3||Pozycja pozioma gracza nr 3. Patrz [[#HPOSP0|HPOSP0]]. | |id="HPOSP3"|$D003 (W)||HPOSP3||Pozycja pozioma gracza nr 3. Patrz [[#HPOSP0|HPOSP0]]. | ||
- | |- | ||
- | |id="DISM3PF"|$D003 (R/W)||DISM3PF|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji pocisku 3 z polem gry. Patrz [[#DISM0PF|DISM0PF]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLP0PF"|$D004 (R)||KOLP0PF, P0PF|| | |id="KOLP0PF"|$D004 (R)||KOLP0PF, P0PF|| | ||
Linia 60: | Linia 36: | ||
|- | |- | ||
|id="HPOSM0"|$D004 (W)||HPOSM0||Pozycja pozioma [[pocisk]]u nr 0. Patrz [[#HPOSP0|HPOSP0]]. | |id="HPOSM0"|$D004 (W)||HPOSM0||Pozycja pozioma [[pocisk]]u nr 0. Patrz [[#HPOSP0|HPOSP0]]. | ||
- | |- | ||
- | |id="DISP0PF"|$D004 (R/W)||DISP0PF|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji gracza 0 z polem gry. Bity 0-3 oznaczają kolizje z polem gry 0-3 (COLPF0-COLPF3). Blokada jest aktywna kiedy bit jest ustawiony. | ||
- | * bit 0: COLPF0 | ||
- | * bit 1: COLPF1 | ||
- | * bit 2: COLPF2 | ||
- | * bit 3: COLPF3 | ||
- | * bity 4-7: zawsze 0 | ||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLP1PF"|$D005 (R)||KOLP1PF, P1PF|| | |id="KOLP1PF"|$D005 (R)||KOLP1PF, P1PF|| | ||
Linia 74: | Linia 41: | ||
|- | |- | ||
|id="HPOSM1"|$D005 (W)||HPOSM1||Pozycja pozioma pocisku nr 1. Patrz [[#HPOSP0|HPOSP0]]. | |id="HPOSM1"|$D005 (W)||HPOSM1||Pozycja pozioma pocisku nr 1. Patrz [[#HPOSP0|HPOSP0]]. | ||
- | |- | ||
- | |id="DISP1PF"|$D005 (R/W)||DISP1PF|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji gracza 1 z polem gry. Patrz [[#DISP0PF|DISP0PF]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLP2PF"|$D006 (R)||KOLP2PF, P2PF|| | |id="KOLP2PF"|$D006 (R)||KOLP2PF, P2PF|| | ||
Linia 84: | Linia 46: | ||
|- | |- | ||
|id="HPOSM2"|$D006 (W)||HPOSM2||Pozycja pozioma pocisku nr 2. Patrz [[#HPOSP0|HPOSP0]]. | |id="HPOSM2"|$D006 (W)||HPOSM2||Pozycja pozioma pocisku nr 2. Patrz [[#HPOSP0|HPOSP0]]. | ||
- | |- | ||
- | |id="DISP2PF"|$D006 (R/W)||DISP2PF|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji gracza 2 z polem gry. Patrz [[#DISP0PF|DISP0PF]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLP3PF"|$D007 (R)||KOLP3PF, P3PF|| | |id="KOLP3PF"|$D007 (R)||KOLP3PF, P3PF|| | ||
Linia 94: | Linia 51: | ||
|- | |- | ||
|id="HPOSM3"|$D007 (W)||HPOSM3||Pozycja pozioma pocisku nr 3. Patrz [[#HPOSP0|HPOSP0]]. | |id="HPOSM3"|$D007 (W)||HPOSM3||Pozycja pozioma pocisku nr 3. Patrz [[#HPOSP0|HPOSP0]]. | ||
- | |- | ||
- | |id="DISP3PF"|$D007 (R/W)||DISP3PF|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji gracza 3 z polem gry. Patrz [[#DISP0PF|DISP0PF]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLM0P"|$D008 (R)||KOLM0P, M0PL|| | |id="KOLM0P"|$D008 (R)||KOLM0P, M0PL|| | ||
Linia 116: | Linia 68: | ||
** %11 - poczwórna | ** %11 - poczwórna | ||
* bity 2-7: niezdefiniowane | * bity 2-7: niezdefiniowane | ||
- | |- | ||
- | |id="DISM0P"|$D008 (R/W)||DISM0P|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji pocisku 0 z graczem. Bity 0-3 oznaczają kolizje z graczem 0-3 (COLPM0-COLPM3). Blokada jest aktywna kiedy bit jest ustawiony. | ||
- | * bit 0: COLPM0 | ||
- | * bit 1: COLPM1 | ||
- | * bit 2: COLPM2 | ||
- | * bit 3: COLPM3 | ||
- | * bity 4-7: zawsze 0 | ||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLM1P"|$D009 (R)||KOLM1P, M1PL|| | |id="KOLM1P"|$D009 (R)||KOLM1P, M1PL|| | ||
Linia 131: | Linia 74: | ||
|id="SIZEP1"|$D009 (W)||SIZEP1|| | |id="SIZEP1"|$D009 (W)||SIZEP1|| | ||
Szerokość gracza 1. Patrz [[#SIZEP0|SIZEP0]]. | Szerokość gracza 1. Patrz [[#SIZEP0|SIZEP0]]. | ||
- | |- | ||
- | |id="DISM1P"|$D009 (R/W)||DISM1P|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji pocisku 1 z graczem. Patrz [[#DISM0P|DISM0P]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLM2P"|$D00A (R)||KOLM2P, M2PL|| | |id="KOLM2P"|$D00A (R)||KOLM2P, M2PL|| | ||
Linia 142: | Linia 80: | ||
|id="SIZEP2"|$D00A (W)||SIZEP2|| | |id="SIZEP2"|$D00A (W)||SIZEP2|| | ||
Szerokość gracza 2. Patrz [[#SIZEP0|SIZEP0]]. | Szerokość gracza 2. Patrz [[#SIZEP0|SIZEP0]]. | ||
- | |- | ||
- | |id="DISM1P"|$D00A (R/W)||DISM2P|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji pocisku 2 z graczem. Patrz [[#DISM0P|DISM0P]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLM3P"|$D00B (R)||KOLM3P, M3PL|| | |id="KOLM3P"|$D00B (R)||KOLM3P, M3PL|| | ||
Linia 153: | Linia 86: | ||
|id="SIZEP3"|$D00B (W)||SIZEP3|| | |id="SIZEP3"|$D00B (W)||SIZEP3|| | ||
Szerokość gracza 3. Patrz [[#SIZEP0|SIZEP0]]. | Szerokość gracza 3. Patrz [[#SIZEP0|SIZEP0]]. | ||
- | |- | ||
- | |id="DISM3P"|$D00B (R/W)||DISM3P|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji pocisku 3 z graczem. Patrz [[#DISM0P|DISM0P]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLP0P"|$D00C (R)||KOLP0P, P0PL|| | |id="KOLP0P"|$D00C (R)||KOLP0P, P0PL|| | ||
Linia 172: | Linia 100: | ||
* bity 4-5: szerokość pocisku 2 | * bity 4-5: szerokość pocisku 2 | ||
* bity 6-7: szerokość pocisku 3 | * bity 6-7: szerokość pocisku 3 | ||
- | |- | ||
- | |id="DISP0P"|$D00C (R/W)||DISP0P|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji gracza 0 z graczem. Bity 0-3 oznaczają kolizje z graczem 0-3 (COLPM0-COLPM3). Blokada jest aktywna kiedy bit jest ustawiony. | ||
- | * bit 0: COLPM0 | ||
- | * bit 1: COLPM1 | ||
- | * bit 2: COLPM2 | ||
- | * bit 3: COLPM3 | ||
- | * bity 4-7: zawsze 0 | ||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLP1P"|$D00D (R)||KOLP1P, P1PL|| | |id="KOLP1P"|$D00D (R)||KOLP1P, P1PL|| | ||
Linia 187: | Linia 106: | ||
|id="GRAFP0"|$D00D (W)||GRAFP0|| | |id="GRAFP0"|$D00D (W)||GRAFP0|| | ||
Rejestr grafiki gracza 0. Zazwyczaj zapisywany przez ANTIC kiedy włączony jest DMA dla graczy w rejestrze [[Rejestry ANTIC-a#DMACTL|DMACTL]]. Ręczne zapisanie tego rejestru powoduje zmianę kształtu gracza 0. | Rejestr grafiki gracza 0. Zazwyczaj zapisywany przez ANTIC kiedy włączony jest DMA dla graczy w rejestrze [[Rejestry ANTIC-a#DMACTL|DMACTL]]. Ręczne zapisanie tego rejestru powoduje zmianę kształtu gracza 0. | ||
- | |- | ||
- | |id="DISP1P"|$D00D (R/W)||DISP1P|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji gracza 1 z graczem. Patrz [[#DISP0P|DISP0P]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLP2P"|$D00E (R)||KOLP2P, P2PL|| | |id="KOLP2P"|$D00E (R)||KOLP2P, P2PL|| | ||
Linia 198: | Linia 112: | ||
|id="GRAFP1"|$D00E (W)||GRAFP1|| | |id="GRAFP1"|$D00E (W)||GRAFP1|| | ||
Rejestr grafiki gracza 1. Patrz [[#GRAFP0|GRAFP0]]. | Rejestr grafiki gracza 1. Patrz [[#GRAFP0|GRAFP0]]. | ||
- | |- | ||
- | |id="DISP2P"|$D00E (R/W)||DISP2P|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji gracza 2 z graczem. Patrz [[#DISP0P|DISP0P]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="KOLP3P"|$D00F (R)||KOLP3P, P3PL|| | |id="KOLP3P"|$D00F (R)||KOLP3P, P3PL|| | ||
Linia 209: | Linia 118: | ||
|id="GRAFP2"|$D00F (W)||GRAFP2|| | |id="GRAFP2"|$D00F (W)||GRAFP2|| | ||
Rejestr grafiki gracza 2. Patrz [[#GRAFP0|GRAFP0]]. | Rejestr grafiki gracza 2. Patrz [[#GRAFP0|GRAFP0]]. | ||
- | |- | ||
- | |id="DISP3P"|$D00F (R/W)||DISP3P|| | ||
- | [[Sophia|Sophia2]]: Blokuje testowanie kolizji gracza 3 z graczem. Patrz [[#DISP0P|DISP0P]]. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="TRIG0"|$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óro świetlne|pióra świetlnego]] lub [[XG-1|pistoletu świetlnego]] dołączonego do portu 0. | |id="TRIG0"|$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óro świetlne|pióra świetlnego]] lub [[XG-1|pistoletu świetlnego]] dołączonego do portu 0. | ||
Linia 266: | Linia 170: | ||
|id="COLPM2"|$D014 (W)||COLPM2|| | |id="COLPM2"|$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 opóźnioną fazę procedury [[SYSVBL]], która kopiuje tu zawartość cienia COLPM2S $02C2 za każdym wystąpieniem [[przerwania]] [[VBL]]. | 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 opóźnioną fazę procedury [[SYSVBL]], która kopiuje tu zawartość cienia COLPM2S $02C2 za każdym wystąpieniem [[przerwania]] [[VBL]]. | ||
- | |- | ||
- | |id="REV"|$D015 (R)||REV|| | ||
- | [[Sophia|Sophia2]]: Rewizja rdzenia. | ||
- | |||
- | Dostępna kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="COLPM3"|$D015 (W)||COLPM3|| | |id="COLPM3"|$D015 (W)||COLPM3|| | ||
Linia 322: | Linia 221: | ||
1111 = PF3, PF2, PM0, PM1, PM2, PM3, PF0, PF1, BAK | 1111 = PF3, PF2, PM0, PM1, PM2, PM3, PF0, PF1, BAK | ||
|} | |} | ||
- | |- | ||
- | |id="PRIOR"|$D01B (R/W)||PRIOR|| | ||
- | [[Sophia|Sophia2]]: Rejestr konfiguracji rozdzielczości i palety. Znaczenie bitów: | ||
- | * bit 7: VGA - ustawia wyjście analogowe RGB jako VGA (H:31kHz; V:60/50Hz); dostępny jest tylko tryb graficzny 480p/576p | ||
- | * bity 6-4: RESolution - wybór rozdzielczości ekranu | ||
- | {| border="1" | ||
- | |wartość||rozdzielczość||aspect-ratio | ||
- | |- | ||
- | |%000||480p<br/>576p||3:2<br/>5:4 | ||
- | |- | ||
- | |%001||1280x960||4:3 | ||
- | |- | ||
- | |%010||1280x1024||5:4 | ||
- | |- | ||
- | |%011||1344x960||14:10 | ||
- | |- | ||
- | |%100||1440x900||16:10 | ||
- | |- | ||
- | |%101||1536x960||16:10 | ||
- | |- | ||
- | |%110||1600x900||16:9 | ||
- | |- | ||
- | |%111||1704x960||16:9 | ||
- | |} | ||
- | * bity 3-0: PALEtte - wybór aktywnej palety; po resecie urządzenia ustawiana jest wbudowana paleta 0 (PAL lub NTSC zależnie od systemu TV); palety 1-15 są programowane przez użytkownika (patrz rejestr PALDATA); nie jest zapisywany do pamięci nieulotnej | ||
- | |||
- | Dostępne kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="VDELAY"|$D01C (W)||VDELAY|| | |id="VDELAY"|$D01C (W)||VDELAY|| | ||
Linia 355: | Linia 227: | ||
|id="PMCNTL"|$D01D (W)||PMCNTL, GRACTL|| | |id="PMCNTL"|$D01D (W)||PMCNTL, GRACTL|| | ||
Funkcje bitów: | Funkcje bitów: | ||
- | * bit 7 - w układzie [[Sophia|Sophia2]]: włączenie rejestrów rozszerzenia (1 - włączone) | + | * bit 7 - w układzie [[Sophia|Sophia2]]: włączenie [[Rejestry Sophia|rejestrów rozszerzenia]] (1 - włączone) |
* bit 6 - niewykorzystany | * bit 6 - niewykorzystany | ||
- | * bit 5 - w układzie [[Sophia|Sophia1]]: redukcja szerokości ekranu do 336 pikseli hires (1 - włączony) | + | * bity 3-5 - w układzie [[Sophia|Sophia1]]: [[Rejestry Sophia|konfiguracja ustawień wyświetlania]] |
- | * bit 4 - w układzie [[Sophia|Sophia1]]: aktywacja dodatkowego koloru w [[Tryby_monochromatyczne_ANTIC-a|trybach monochromatycznych]] (1 - włączony) | + | |
- | * bit 3 - w układzie [[Sophia|Sophia1]]: aktywacja najmłodszego bitu luminancji (1 - włączony) | + | |
* bit 2 - odczyt przycisków joysticków (1 - zatrzask) | * bit 2 - odczyt przycisków joysticków (1 - zatrzask) | ||
* bit 1 - DMA graczy (1 - włączone) | * bit 1 - DMA graczy (1 - włączone) | ||
Linia 368: | Linia 238: | ||
Bit 2 odpowiada za działanie rejestrów TRIG0-3: jego ustawienie powoduje, że po wciśnięciu spustu joysticka zwartość odpowiedniego rejestru TRIGx "zatrzaskuje się" i pokazuje cały czas, że spust jest wciśnięty, nawet jeśli ten w międzyczasie został już zwolniony. Skasowanie bitu 2 PMCNTL powoduje powrót do normalnego trybu pracy TRIGx odzwierciedlającego bieżący stan spustu joysticka. Mechanizm ten służy do wykrywania portu, do którego jest podłączone [[pióro świetlne]] lub [[XG-1|pistolet świetlny]]. Urządzenia te generują bardzo krótkie impulsy. | Bit 2 odpowiada za działanie rejestrów TRIG0-3: jego ustawienie powoduje, że po wciśnięciu spustu joysticka zwartość odpowiedniego rejestru TRIGx "zatrzaskuje się" i pokazuje cały czas, że spust jest wciśnięty, nawet jeśli ten w międzyczasie został już zwolniony. Skasowanie bitu 2 PMCNTL powoduje powrót do normalnego trybu pracy TRIGx odzwierciedlającego bieżący stan spustu joysticka. Mechanizm ten służy do wykrywania portu, do którego jest podłączone [[pióro świetlne]] lub [[XG-1|pistolet świetlny]]. Urządzenia te generują bardzo krótkie impulsy. | ||
Bit ten ma też wpływ na rejestry TRIG2 i TRIG3, które odzwierciedlają podłączenie klawiatury w modelu XEGS oraz obecność cartridge'a w gnieździe. | Bit ten ma też wpływ na rejestry TRIG2 i TRIG3, które odzwierciedlają podłączenie klawiatury w modelu XEGS oraz obecność cartridge'a w gnieździe. | ||
- | |- | ||
- | |id="GRACTL"|$D01D (R/W)||GRACTL|| | ||
- | [[Sophia|Sophia2]]: Rejestr konfiguracji. Znaczenie bitów: | ||
- | * bit 7: SPECial features ENable - 1: aktywuje rejestry układu Sophia2, 0: aktywuje rejestry układu GTIA i zeruje adres pamięci palety | ||
- | * bit 6: SYNC conTroL - ustawia wyjścia analogowych sygnałów synchronizacji | ||
- | {| border="1" | ||
- | |tryb||wartość||H||V | ||
- | |- | ||
- | |RGB||0||CSYNC 0.3Vpp@75Ω||RGB Blanking | ||
- | |- | ||
- | |RGB||1||HSYNC TTL||VSYNC TTL | ||
- | |- | ||
- | |VGA||x||HSYNC TTL||VSYNC TTL | ||
- | |} | ||
- | * bit 5: Visible playfield GATE - 1: ogranicza wyświetlany obraz do 336 pikseli na ekranie | ||
- | * bit 4: HIRES Bi-Color - 1: powoduje że w trybach wysokiej rozdzielczości kolor punktu zgaszonego brany jest z COLPF2 a punktu zapalonego z COLPF1 | ||
- | * bit 3: LUM0 bit ENable - 1: uaktywnia najmłodszy bit luminancji w rejestrze koloru | ||
- | * bit 2: INTERLACE - 1: włącza tryb z przeplotem | ||
- | * bit 1: YUVRGB - 1: kontroluje przestrzeń kolorów wyjścia analogowego 0: YPbPr, 1: RGB | ||
- | * bit 0: NonVolatile ENable: - 1: aktywuje zapis ustawień do pamięci nieulotnej; następujący w ciągu 4 cykli zapis wartości do rejestru GRACTL lub PRIOR Sophii zostanie utrwalony | ||
- | Dostępny kiedy bit SPECEN=1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
- | |- | ||
- | |id="SOPHIA"|$D01E (R)||SOPHIA|| | ||
- | [[Sophia|Sophia2]]: Identyfikator urządzenia - zawiera wartość $53 czyli 'S' | ||
- | |||
- | Dostępne kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | ||
|- | |- | ||
|id="HITCLR"|$D01E (W)||HITCLR|| | |id="HITCLR"|$D01E (W)||HITCLR|| | ||
Linia 410: | Linia 254: | ||
W konsoli 5200 wszystkie cztery bity służą jako wyjścia wybierające port joysticka, którego klawisze są skanowane przez POKEY. | W konsoli 5200 wszystkie cztery bity służą jako wyjścia wybierające port joysticka, którego klawisze są skanowane przez POKEY. | ||
- | |- | + | |} |
- | |id="PALDATA"|$D01F (W)||PALDATA|| | + | |
- | [[Sophia|Sophia2]]: Kolejne wpisy do tego rejestru zapisują odpowiednio składowe R, G i B koloru palety. | + | |
- | Dostępnych jest 16 palet, z czego ostatnia jest nieużywana. Na początku pamięci znajduje się paleta nr 1, potem 2, itd. Nie ma dostępu do wbudowanej palety nr 0. | + | == Zobacz też == |
- | + | * [[Rejestry Sophia]] | |
- | Każda paleta zawiera 256 kolorów definiowanych za pomocą 6-bitowych składowych (najstarsze bity w bajcie). | + | |
- | + | ||
- | Wewnętrzny adres wpisu palety resetowany jest w momencie wyzerowania bitu SPECEN rejestru GRACTL (czyli <b>wyłączenia</b> banku rejestrów Sophii). | + | |
- | + | ||
- | Dostępne kiedy SPECEN (GRACTL.7) jest ustawiony na 1 i bank rejestrów [[Sophia|Sophia2]] jest aktywny. | + | |
- | |} | + | |
- | {{stub}} | ||
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] |
Aktualna wersja
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 |
Znaczniki kolizji pocisku 0 z polem gry. Bity 0-3 oznaczają kolizje z polem gry 0-3 (COLPF0-COLPF3). Kolizja nastąpiła kiedy bit jest ustawiony.
| ||||||||||||||||||
$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 |
Znaczniki kolizji pocisku 1 z polem gry. Patrz KOLM0PF. | ||||||||||||||||||
$D001 (W) | HPOSP1 | Pozycja pozioma gracza nr 1. Patrz HPOSP0. | ||||||||||||||||||
$D002 (R) | KOLM2PF, M2PF |
Znaczniki kolizji pocisku 2 z polem gry. Patrz KOLM0PF. | ||||||||||||||||||
$D002 (W) | HPOSP2 | Pozycja pozioma gracza nr 2. Patrz HPOSP0. | ||||||||||||||||||
$D003 (R) | KOLM3PF, M3PF |
Znaczniki kolizji pocisku 3 z polem gry. Patrz KOLM0PF. | ||||||||||||||||||
$D003 (W) | HPOSP3 | Pozycja pozioma gracza nr 3. Patrz HPOSP0. | ||||||||||||||||||
$D004 (R) | KOLP0PF, P0PF |
Znaczniki kolizji gracza 0 z polem gry. Patrz KOLM0PF. | ||||||||||||||||||
$D004 (W) | HPOSM0 | Pozycja pozioma pocisku nr 0. Patrz HPOSP0. | ||||||||||||||||||
$D005 (R) | KOLP1PF, P1PF |
Znaczniki kolizji gracza 1 z polem gry. Patrz KOLM0PF. | ||||||||||||||||||
$D005 (W) | HPOSM1 | Pozycja pozioma pocisku nr 1. Patrz HPOSP0. | ||||||||||||||||||
$D006 (R) | KOLP2PF, P2PF |
Znaczniki kolizji gracza 2 z polem gry. Patrz KOLM0PF. | ||||||||||||||||||
$D006 (W) | HPOSM2 | Pozycja pozioma pocisku nr 2. Patrz HPOSP0. | ||||||||||||||||||
$D007 (R) | KOLP3PF, P3PF |
Znaczniki kolizji gracza 3 z polem gry. Patrz KOLM0PF. | ||||||||||||||||||
$D007 (W) | HPOSM3 | Pozycja pozioma pocisku nr 3. Patrz HPOSP0. | ||||||||||||||||||
$D008 (R) | KOLM0P, M0PL |
Znaczniki kolizji pocisku 0 z graczem. Bity 0-3 oznaczają kolizje z graczem 0-3 (COLPM0-COLPM3). Kolizja nastąpiła kiedy bit jest ustawiony.
| ||||||||||||||||||
$D008 (W) | SIZEP0 |
Szerokość gracza 0. Znaczenie:
| ||||||||||||||||||
$D009 (R) | KOLM1P, M1PL |
Znaczniki kolizji pocisku 1 z graczem. Patrz KOLM0P. | ||||||||||||||||||
$D009 (W) | SIZEP1 |
Szerokość gracza 1. Patrz SIZEP0. | ||||||||||||||||||
$D00A (R) | KOLM2P, M2PL |
Znaczniki kolizji pocisku 2 z graczem. Patrz KOLM0P. | ||||||||||||||||||
$D00A (W) | SIZEP2 |
Szerokość gracza 2. Patrz SIZEP0. | ||||||||||||||||||
$D00B (R) | KOLM3P, M3PL |
Znaczniki kolizji pocisku 3 z graczem. Patrz KOLM0P. | ||||||||||||||||||
$D00B (W) | SIZEP3 |
Szerokość gracza 3. Patrz SIZEP0. | ||||||||||||||||||
$D00C (R) | KOLP0P, P0PL |
Znaczniki kolizji gracza 0 z graczem. Patrz KOLM0P. | ||||||||||||||||||
$D00C (W) | SIZEM |
Szerokość pocisków. Znaczenie:
| ||||||||||||||||||
$D00D (R) | KOLP1P, P1PL |
Znaczniki kolizji gracza 1 z graczem. Patrz KOLM0P. | ||||||||||||||||||
$D00D (W) | GRAFP0 |
Rejestr grafiki gracza 0. Zazwyczaj zapisywany przez ANTIC kiedy włączony jest DMA dla graczy w rejestrze DMACTL. Ręczne zapisanie tego rejestru powoduje zmianę kształtu gracza 0. | ||||||||||||||||||
$D00E (R) | KOLP2P, P2PL |
Znaczniki kolizji gracza 2 z graczem. Patrz KOLM0P. | ||||||||||||||||||
$D00E (W) | GRAFP1 |
Rejestr grafiki gracza 1. Patrz GRAFP0. | ||||||||||||||||||
$D00F (R) | KOLP3P, P3PL |
Znaczniki kolizji gracza 3 z graczem. Patrz KOLM0P. | ||||||||||||||||||
$D00F (W) | GRAFP2 |
Rejestr grafiki gracza 2. Patrz GRAFP0. | ||||||||||||||||||
$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 |
Rejestr grafiki gracza 3. Patrz GRAFP0. | ||||||||||||||||||
$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 |
Rejestr grafiki pocisków. Zazwyczaj zapisywany przez ANTIC kiedy włączony jest DMA dla pocisków w rejestrze DMACTL. Ręczne zapisanie tego rejestru powoduje zmianę kształtu wszystkich pocisków. Znaczenie:
| ||||||||||||||||||
$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 opóźnioną fazę procedury 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 opóźnioną fazę procedury 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. Na podstawie tego rejestru XL OS ustawia znacznik PALNTS $0062 wartością:
| ||||||||||||||||||
$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 opóźnioną fazę procedury 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 opóźnioną fazę procedury SYSVBL, która kopiuje tu zawartość cienia COLPM3S $02C3 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D016 (W) | COLPF0, COLOR0 |
Kolor pola gry 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 opóźnioną fazę procedury SYSVBL, która kopiuje tu zawartość cienia COLPF0S $02C4 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D017 (W) | COLPF1, COLOR1 |
Kolor pola gry 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 natychmiastową fazę procedury SYSVBL w ramach obsługi trybu przyciągania uwagi (ang. "attract mode"), która kopiuje tu zawartość cienia COLPF1S $02C5 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D018 (W) | COLPF2, COLOR2 |
Kolor pola gry 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 opóźnioną fazę procedury SYSVBL, która kopiuje tu zawartość cienia COLPF2S $02C6 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D019 (W) | COLPF3, COLOR3 |
Kolor pola gry 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 opóźnioną fazę procedury SYSVBL, która kopiuje tu zawartość cienia COLPF3S $02C7 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D01A (W) | COLBAK, COLBK |
Kolor ramki ekranu (w trybach hires) lub tła (w pozostałych trybach). 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 opóźnioną fazę procedury SYSVBL, która kopiuje tu zawartość cienia COLBAKS $02C8 za każdym wystąpieniem przerwania VBL. | ||||||||||||||||||
$D01B (W) | GTIACTL, PRIOR |
Rejestr cień: GTIACTLS (GPRIOR) $026F. Służy do konfiguracji trybów wielokolorowych oraz PMG
| ||||||||||||||||||
$D01C (W) | VDELAY |
Bity 0-3 oznaczają pociski o numerach 0-3, bity 4-7 graczy o numerach 0-3. Ustawienie bitu powoduje, że pobieranie grafiki DMA odpowiedniego pocisku lub gracza odbywa się wyłącznie w nieparzystych liniach skaningowych. Mechanizm ten służy do obniżenia obiektu w rozdzielczości dwuliniowej o jedną linię skaningową. | ||||||||||||||||||
$D01D (W) | PMCNTL, GRACTL |
Funkcje bitów:
Bity 1 i 0 aktywują pobieranie grafiki odpowiednio graczy i pocisków z szyny danych w momentach kiedy ANTIC za pomocą DMA odczytuje z pamięci dane o kształcie odpowiedniego sprajta. Najczęściej ustawia się takie same wartości, jak w bitach 3 i 2 DMACTL. Ustawienie bitów w DMACTL, ale nie w PMCNTL powoduje że DMA ANTICa są ignorowane. Ustawienie bitów w PMCNTL ale nie w DMACTL z kolei powoduje pobieranie grafiki graczy lub pocisków z szyny danych 6502. Bit 2 odpowiada za działanie rejestrów TRIG0-3: jego ustawienie powoduje, że po wciśnięciu spustu joysticka zwartość odpowiedniego rejestru TRIGx "zatrzaskuje się" i pokazuje cały czas, że spust jest wciśnięty, nawet jeśli ten w międzyczasie został już zwolniony. Skasowanie bitu 2 PMCNTL powoduje powrót do normalnego trybu pracy TRIGx odzwierciedlającego bieżący stan spustu joysticka. 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. Bit ten ma też wpływ na rejestry TRIG2 i TRIG3, które odzwierciedlają podłączenie klawiatury w modelu XEGS oraz obecność cartridge'a w gnieździe. | ||||||||||||||||||
$D01E (W) | HITCLR |
Zapis dowolnej wartości pod ten adres kasuje stany wszystkich 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. |