Rejestry GTIA

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 18:37, 13 lut 2011
Daniel Koźmiński (Dyskusja | wkład)
(Lista rejestrów)
← Previous diff
Wersja z dnia 15:35, 12 cze 2011
Krótki (Dyskusja | wkład)
(Przeróbka składni tabeli z HTML na MediaWiki)
Next diff →
Linia 3: Linia 3:
===Lista rejestrów=== ===Lista rejestrów===
-<table border = 1 cellpadding = 5>+{| border="1" cellpadding="5"
-<tr><td><b>Adres</b></td><td><b>Etykieta</b></td><td><b>Opis</b></td></tr>+! Adres !! Etykieta !! Opis
 +|-
 +|id="KOLM0PF"|$D000 (R)||KOLM0PF, M0PF||
 +|-
 +|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.
 +|-
 +|id="KOLM1PF"|$D001 (R)||KOLM1PF, M1PF||
 +|-
 +|id="HPOSP1"|$D001 (W)||HPOSP1||Pozycja pozioma gracza nr 1. Patrz [[#HPOSP0|HPOSP0]].
 +|-
 +|id="KOLM2PF"|$D002 (R)||KOLM2PF, M2PF||
 +|-
 +|id="HPOSP2"|$D002 (W)||HPOSP2||Pozycja pozioma gracza nr 2. Patrz [[#HPOSP0|HPOSP0]].
 +|-
 +|id="KOLM3PF"|$D003 (R)||KOLM3PF, M3PF||
 +|-
 +|id="HPOSP3"|$D003 (W)||HPOSP3||Pozycja pozioma gracza nr 3. Patrz [[#HPOSP0|HPOSP0]].
 +|-
 +|id="KOLP0PF"|$D004 (R)||KOLP0PF, P0PF||
 +|-
 +|id="HPOSM0"|$D004 (W)||HPOSM0||Pozycja pozioma [[pocisk]]u nr 0. Patrz [[#HPOSP0|HPOSP0]].
 +|-
 +|id="KOLP1PF"|$D005 (R)||KOLP1PF, P1PF||
 +|-
 +|id="HPOSM1"|$D005 (W)||HPOSM1||Pozycja pozioma pocisku nr 1. Patrz [[#HPOSP0|HPOSP0]].
 +|-
 +|id="KOLP2PF"|$D006 (R)||KOLP2PF, P2PF||
 +|-
 +|id="HPOSM2"|$D006 (W)||HPOSM2||Pozycja pozioma pocisku nr 2. Patrz [[#HPOSP0|HPOSP0]].
 +|-
 +|id="KOLP3PF"|$D007 (R)||KOLP3PF, P3PF||
 +|-
 +|id="HPOSM3"|$D007 (W)||HPOSM3||Pozycja pozioma pocisku nr 3. Patrz [[#HPOSP0|HPOSP0]].
 +|-
 +|id="KOLM0P"|$D008 (R)||KOLM0P, M0PL||
 +|-
 +|id="SIZEP0"|$D008 (W)||SIZEP0||
 +|-
 +|id="KOLM1P"|$D009 (R)||KOLM1P, M1PL||
 +|-
 +|id="SIZEP1"|$D009 (W)||SIZEP1||
 +|-
 +|id="KOLM2P"|$D00A (R)||KOLM2P, M2PL||
 +|-
 +|id="SIZEP2"|$D00A (W)||SIZEP2||
 +|-
 +|id="KOLM3P"|$D00B (R)||KOLM3P, M3PL||
 +|-
 +|id="SIZEP3"|$D00B (W)||SIZEP3||
 +|-
 +|id="KOLP0P"|$D00C (R)||KOLP0P, P0PL||
 +|-
 +|id="SIZEM"|$D00C (W)||SIZEM||
 +|-
 +|id="KOLP1P"|$D00D (R)||KOLP1P, P1PL||
 +|-
 +|id="GRAFP0"|$D00D (W)||GRAFP0||
 +|-
 +|id="KOLP2P"|$D00E (R)||KOLP2P, P2PL||
 +|-
 +|id="GRAFP1"|$D00E (W)||GRAFP1||
 +|-
 +|id="KOLP3P"|$D00F (R)||KOLP3P, P3PL||
 +|-
 +|id="GRAFP2"|$D00F (W)||GRAFP2||
 +|-
 +|id="TRIG0"|$D010 (R)||TRIG0||Stan spustu joysticka nr 0 (0 - wciśnięty).
 +|-
 +|id="GRAFP3"|$D010 (W)||GRAFP3||
 +|-
 +|id="TRIG1"|$D011 (R)||TRIG1||Stan spustu joysticka nr 1 (0 - wciśnięty).
 +|-
 +|id="GRAFM"|$D011 (W)||GRAFM||
 +|-
 +|id="TRIG2"|$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.
 +|-
 +|id="COLPM0"|$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]].
 +|-
 +|id="TRIG3"|$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).
-<tr><td id="KOLM0PF">$D000 (R)</td><td>KOLM0PF, M0PF</td><td> </td></tr>+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 [[cykl koloru|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.
-<tr><td id="HPOSP0">$D000 (W)</td><td>HPOSP0</td><td>+Metoda obejścia tego problemu:
-<p>Pozycja pozioma [[gracz]]a nr 0, mierzona w [[cykl koloru|cyklach koloru]]. Można wpisywac 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.</p> +
-</td></tr>+
- +
-<tr><td id="KOLM1PF">$D001 (R)</td><td>KOLM1PF, M1PF</td><td> </td></tr>+
- +
-<tr><td id="HPOSP1">$D001 (W)</td><td>HPOSP1</td><td>Pozycja pozioma gracza nr 1. Patrz [[#HPOSP0|HPOSP0]].</td></tr>+
- +
-<tr><td id="KOLM2PF">$D002 (R)</td><td>KOLM2PF, M2PF</td><td> </td></tr>+
- +
-<tr><td id="HPOSP2">$D002 (W)</td><td>HPOSP2</td><td>Pozycja pozioma gracza nr 2. Patrz [[#HPOSP0|HPOSP0]].</td></tr>+
- +
-<tr><td id="KOLM3PF">$D003 (R)</td><td>KOLM3PF, M3PF</td><td> </td></tr>+
- +
-<tr><td id="HPOSP3">$D003 (W)</td><td>HPOSP3</td><td>Pozycja pozioma gracza nr 3. Patrz [[#HPOSP0|HPOSP0]].</td></tr>+
- +
-<tr><td id="KOLP0PF">$D004 (R)</td><td>KOLP0PF, P0PF</td><td> </td></tr>+
- +
-<tr><td id="HPOSM0">$D004 (W)</td><td>HPOSM0</td><td>Pozycja pozioma [[pocisk]]u nr 0. Patrz [[#HPOSP0|HPOSP0]].</td></tr>+
- +
-<tr><td id="KOLP1PF">$D005 (R)</td><td>KOLP1PF, P1PF</td><td> </td></tr>+
- +
-<tr><td id="HPOSM1">$D005 (W)</td><td>HPOSM1</td><td>Pozycja pozioma pocisku nr 1. Patrz [[#HPOSP0|HPOSP0]].</td></tr>+
- +
-<tr><td id="KOLP2PF">$D006 (R)</td><td>KOLP2PF, P2PF</td><td> </td></tr>+
- +
-<tr><td id="HPOSM2">$D006 (W)</td><td>HPOSM2</td><td>Pozycja pozioma pocisku nr 2. Patrz [[#HPOSP0|HPOSP0]].</td></tr>+
- +
-<tr><td id="KOLP3PF">$D007 (R)</td><td>KOLP3PF, P3PF</td><td> </td></tr>+
- +
-<tr><td id="HPOSM3">$D007 (W)</td><td>HPOSM3</td><td>Pozycja pozioma pocisku nr 3. Patrz [[#HPOSP0|HPOSP0]].</td></tr>+
- +
-<tr><td id="KOLM0P">$D008 (R)</td><td>KOLM0P, M0PL</td><td> </td></tr>+
- +
-<tr><td id="SIZEP0">$D008 (W)</td><td>SIZEP0</td><td> </td></tr>+
- +
-<tr><td id="KOLM1P">$D009 (R)</td><td>KOLM1P, M1PL</td><td> </td></tr>+
- +
-<tr><td id="SIZEP1">$D009 (W)</td><td>SIZEP1</td><td> </td></tr>+
- +
-<tr><td id="KOLM2P">$D00A (R)</td><td>KOLM2P, M2PL</td><td> </td></tr>+
- +
-<tr><td id="SIZEP2">$D00A (W)</td><td>SIZEP2</td><td> </td></tr>+
- +
-<tr><td id="KOLM3P">$D00B (R)</td><td>KOLM3P, M3PL</td><td> </td></tr>+
- +
-<tr><td id="SIZEP3">$D00B (W)</td><td>SIZEP3</td><td> </td></tr>+
- +
-<tr><td id="KOLP0P">$D00C (R)</td><td>KOLP0P, P0PL</td><td> </td></tr>+
- +
-<tr><td id="SIZEM">$D00C (W)</td><td>SIZEM</td><td> </td></tr>+
- +
-<tr><td id="KOLP1P">$D00D (R)</td><td>KOLP1P, P1PL</td><td> </td></tr>+
- +
-<tr><td id="GRAFP0">$D00D (W)</td><td>GRAFP0</td><td> </td></tr>+
- +
-<tr><td id="KOLP2P">$D00E (R)</td><td>KOLP2P, P2PL</td><td> </td></tr>+
- +
-<tr><td id="GRAFP1">$D00E (W)</td><td>GRAFP1</td><td> </td></tr>+
- +
-<tr><td id="KOLP3P">$D00F (R)</td><td>KOLP3P, P3PL</td><td> </td></tr>+
- +
-<tr><td id="GRAFP2">$D00F (W)</td><td>GRAFP2</td><td> </td></tr>+
- +
-<tr><td id="TRIG0">$D010 (R)</td><td>TRIG0</td><td>+
-<p>Stan spustu joysticka nr 0 (0 - wciśnięty).</p> +
-</td></tr>+
- +
-<tr><td id="GRAFP3">$D010 (W)</td><td>GRAFP3</td><td> </td></tr>+
- +
-<tr><td id="TRIG1">$D011 (R)</td><td>TRIG1</td><td>+
-<p>Stan spustu joysticka nr 1 (0 - wciśnięty).</p> +
-</td></tr>+
- +
-<tr><td id="GRAFM">$D011 (W)</td><td>GRAFM</td><td> </td></tr>+
- +
-<tr><td id="TRIG2">$D012 (R)</td><td>TRIG2</td><td>+
-<p>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.</p> +
-</td></tr>+
- +
-<tr><td id="COLPM0">$D012 (W)</td><td>COLPM0</td><td>+
-<p>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]].</p>+
-</td></tr>+
- +
-<tr><td id="TRIG3">$D013 (R)</td><td>TRIG3</td><td>+
-<p>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).</p>+
-<p>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 [[cykl koloru|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.</p>+
-<p>Metoda obejścia tego problemu:</p>+
<code> <code>
sei ;zablokuj drugą fazę SYSVBL sei ;zablokuj drugą fazę SYSVBL
Linia 105: Linia 100:
cli cli
</code> </code>
-</td></tr>+|-
- +|id="COLPM1"|$D013 (W)||COLPM1||
-<tr><td id="COLPM1">$D013 (W)</td><td>COLPM1</td><td>+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]].
-<p>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]].</p>+|-
-</td></tr>+|id="PAL"|$D014 (R)||PAL||
- +Znacznik systemu TV. Znaczenie bitów:
-<tr><td id="PAL">$D014 (R)</td><td>PAL</td><td>+
-<p>Znacznik systemu TV. Znaczenie bitów:</p>+
* bity 7-4: nieużywane, zawsze 0 * bity 7-4: nieużywane, zawsze 0
* bity 3-1: wartość 000 dla systemu PAL/SECAM oraz 111 dla [http://pl.wikipedia.org/wiki/NTSC NTSC] * bity 3-1: wartość 000 dla systemu PAL/SECAM oraz 111 dla [http://pl.wikipedia.org/wiki/NTSC NTSC]
* bit 0: zawsze 1. * bit 0: zawsze 1.
-<p>Wynika z tego, że w systemie PAL i SECAM wartość rejestru to $01, a w NTSC $0F.</p>+Wynika z tego, że w systemie PAL i SECAM wartość rejestru to $01, a w NTSC $0F.
-</td></tr>+|-
- +|id="COLPM2"|$D014 (W)||COLPM2||
-<tr><td id="COLPM2">$D014 (W)</td><td>COLPM2</td><td>+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]].
-<p>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]].</p>+|-
-</td></tr>+|id="COLPM3"|$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]].
-<tr><td id="COLPM3">$D015 (W)</td><td>COLPM3</td><td>+|-
-<p>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]].</p>+|id="COLPF0"|$D016 (W)||COLPF0||
-</td></tr>+|-
- +|id="COLPF1"|$D017 (W)||COLPF1||
-<tr><td id="COLPF0">$D016 (W)</td><td>COLPF0</td><td> </td></tr>+|-
- +|id="COLPF2"|$D018 (W)||COLPF2||
-<tr><td id="COLPF1">$D017 (W)</td><td>COLPF1</td><td> </td></tr>+|-
- +|id="COLPF3"|$D019 (W)||COLPF3||
-<tr><td id="COLPF2">$D018 (W)</td><td>COLPF2</td><td> </td></tr>+|-
- +|id="COLBAK"|$D01A (W)||COLBAK, COLBK||
-<tr><td id="COLPF3">$D019 (W)</td><td>COLPF3</td><td> </td></tr>+|-
- +|id="GTIACTL"|$D01B (W)||GTIACTL, PRIOR||
-<tr><td id="COLBAK">$D01A (W)</td><td>COLBAK, COLBK</td><td> </td></tr>+
- +
-<tr><td id="GTIACTL">$D01B (W)</td><td>GTIACTL, PRIOR</td><td>+
Rejestr cień: GTIACTLS (GPRIOR) $026F Rejestr cień: GTIACTLS (GPRIOR) $026F
-<table border="1">+{| border="1"
-<tr><td>bit</td><td>7</td><td>6</td><td>5</td><td>4</td><td>3</td><td>2</td><td>1</td><td>0</td></tr>+|bit||7||6||5||4||3||2||1||0
-<tr>+|-
-<td>znaczenie</td>+|znaczenie||colspan="2"|tryby GTIA:<br />
-<td colspan="2">+
-tryby GTIA:<br />+
00 = tryby GTIA wyłączone<br /> 00 = tryby GTIA wyłączone<br />
01 = 1 barwa, 16 jasności<br /> 01 = 1 barwa, 16 jasności<br />
10 = 9 barw/jasności<br /> 10 = 9 barw/jasności<br />
11 = 16 barw, 1 jasność 11 = 16 barw, 1 jasność
-</td>+|gracze wielokolorowi:<br />
-<td>+
-gracze wielokolorowi:<br />+
1 = włączone 1 = włączone
-</td>+|4 pociski jako 5 gracz:<br />
-<td>4 pociski jako 5 gracz:<br />+
1 = włączone 1 = włączone
-</td>+|colspan="4"|priorytety graczy i pocisków:<br />
-<td colspan="4">+
-priorytety graczy i pocisków:<br />+
0001 = P0, P1, P2, P3, PF0, PF1, PF2, PF3, BAK<br /> 0001 = P0, P1, P2, P3, PF0, PF1, PF2, PF3, BAK<br />
0010 = P0, P1, PF0, PF1, PF2, PF3, P2, P3, BAK<br /> 0010 = P0, P1, PF0, PF1, PF2, PF3, P2, P3, BAK<br />
0100 = PF0, PF1, PF2, PF3, P0, P1, P2, P3, BAK<br /> 0100 = PF0, PF1, PF2, PF3, P0, P1, P2, P3, BAK<br />
1000 = PF0, PF1, P0, P1, P2, P3, PF2, PF3, BAK 1000 = PF0, PF1, P0, P1, P2, P3, PF2, PF3, BAK
-</td>+|}
-</tr>+|-
-</table>+|id="VDELAY"|$D01C (W)||VDELAY||
-</td></tr>+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 [[Rejestry_ANTIC-a#DMACTL|DMACTL]].
 +|-
 +|id="PMCNTL"|$D01D (W)||PMCNTL, GRACTL||
 +Ustawienie bitu 0 powoduje włączenie wyświetlania pocisków, bitu 1 - włączenie wyświetlania graczy.
-<tr><td id="VDELAY">$D01C (W)</td><td>VDELAY</td><td>+Bit 2 odpowiada za działanie rejestrów TRIG0-3: jego ustawienie powoduje, że po wciśnięciu spustu joysticka rejestr "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 omawianego tu rejestru. Mechanizm ten służy do łapania stanów spustów joysticka bez konieczności ich nieustannego monitorowania.
-<p>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 [[Rejestry_ANTIC-a#DMACTL|DMACTL]].</p>+|-
-</td></tr>+|id="HITCLR"|$D01E (W)||HITCLR||
- +Zapis dowolnej wartości pod ten adres kasuje stany rejestrów kolizji.
-<tr><td id="PMCNTL">$D01D (W)</td><td>PMCNTL, GRACTL</td><td>+|-
-<p>Ustawienie bitu 0 powoduje włączenie wyświetlania pocisków, bitu 1 - włączenie wyświetlania graczy.</p>+|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:
-<p>Bit 2 odpowiada za działanie rejestrów TRIG0-3: jego ustawienie powoduje, że po wciśnięciu spustu joysticka rejestr "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 omawianego tu rejestru. Mechanizm ten służy do łapania stanów spustów joysticka bez konieczności ich nieustannego monitorowania.</p>+
-</td></tr>+
- +
-<tr><td id="HITCLR">$D01E (W)</td><td>HITCLR</td><td>+
-<p>Zapis dowolnej wartości pod ten adres kasuje stany rejestrów kolizji.</p>+
-</td></tr>+
- +
-<tr><td id="CONSOL">$D01F (R/W)</td><td>CONSOL</td><td>+
-<p>Bity 0-3 tego rejestru reprezentują stan nóżek S0-S3 układu [[GTIA]], a pozostałe bity sa niewykorzystane. Znaczenie:</p>+
* bit 3 - jednobitowe wyjście dźwiękowe * bit 3 - jednobitowe wyjście dźwiękowe
* bit 2 - stan klawisza OPTION (0 - naciśnięty) * bit 2 - stan klawisza OPTION (0 - naciśnięty)
* bit 1 - stan klawisza SELECT (0 - naciśnięty) * bit 1 - stan klawisza SELECT (0 - naciśnięty)
* bit 0 - stan klawisza START (0 - naciśnięty) * bit 0 - stan klawisza START (0 - naciśnięty)
 +"Jednobitowe wyjście dźwiękowe" wykorzystywane jest do generowania kliku klawiatury oraz dźwięku brzęczyka systemowego urządzenia "E:" (zob. [[CIO]]). W serii [[400/800]] służy do tego osobny głośniczek, w [[XL]] i [[XE]] natomiast jest to podłączone do ogólnego wyjścia audio.
-<p>"Jednobitowe wyjście dźwiękowe" wykorzystywane jest do generowania kliku klawiatury oraz dźwięku brzęczyka systemowego urządzenia "E:" (zob. [[CIO]]). W serii [[400/800]] służy do tego osobny głośniczek, w [[XL]] i [[XE]] natomiast jest to podłączone do ogólnego wyjścia audio.</p>+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]].
- +|}
-<p>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]].</p>+
- +
-</td></tr>+
- +
-</table>+
{{stub}} {{stub}}
[[Kategoria:Programowanie Atari 8-bit]] [[Kategoria:Programowanie Atari 8-bit]]

Wersja z dnia 15:35, 12 cze 2011

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)HPOSP1Pozycja pozioma gracza nr 1. Patrz HPOSP0.
$D002 (R)KOLM2PF, M2PF
$D002 (W)HPOSP2Pozycja pozioma gracza nr 2. Patrz HPOSP0.
$D003 (R)KOLM3PF, M3PF
$D003 (W)HPOSP3Pozycja pozioma gracza nr 3. Patrz HPOSP0.
$D004 (R)KOLP0PF, P0PF
$D004 (W)HPOSM0Pozycja pozioma pocisku nr 0. Patrz HPOSP0.
$D005 (R)KOLP1PF, P1PF
$D005 (W)HPOSM1Pozycja pozioma pocisku nr 1. Patrz HPOSP0.
$D006 (R)KOLP2PF, P2PF
$D006 (W)HPOSM2Pozycja pozioma pocisku nr 2. Patrz HPOSP0.
$D007 (R)KOLP3PF, P3PF
$D007 (W)HPOSM3Pozycja 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)TRIG0Stan spustu joysticka nr 0 (0 - wciśnięty).
$D010 (W)GRAFP3
$D011 (R)TRIG1Stan spustu joysticka nr 1 (0 - wciśnięty).
$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.

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

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:

  • bity 7-4: nieużywane, zawsze 0
  • bity 3-1: wartość 000 dla systemu PAL/SECAM oraz 111 dla NTSC
  • bit 0: zawsze 1.

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

bit76543210
znaczenietryby GTIA:

00 = tryby GTIA wyłączone
01 = 1 barwa, 16 jasności
10 = 9 barw/jasności
11 = 16 barw, 1 jasność

gracze wielokolorowi:

1 = włączone

4 pociski jako 5 gracz:

1 = włączone

priorytety graczy i pocisków:

0001 = P0, P1, P2, P3, PF0, PF1, PF2, PF3, BAK
0010 = P0, P1, PF0, PF1, PF2, PF3, P2, P3, BAK
0100 = PF0, PF1, PF2, PF3, P0, P1, P2, P3, BAK
1000 = PF0, PF1, P0, P1, P2, P3, PF2, PF3, BAK

$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

Ustawienie bitu 0 powoduje włączenie wyświetlania pocisków, bitu 1 - włączenie wyświetlania graczy.

Bit 2 odpowiada za działanie rejestrów TRIG0-3: jego ustawienie powoduje, że po wciśnięciu spustu joysticka rejestr "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 omawianego tu rejestru. Mechanizm ten służy do łapania stanów spustów joysticka bez konieczności ich nieustannego monitorowania.

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

  • bit 3 - jednobitowe wyjście dźwiękowe
  • bit 2 - stan klawisza OPTION (0 - naciśnięty)
  • bit 1 - stan klawisza SELECT (0 - naciśnięty)
  • bit 0 - stan klawisza START (0 - naciśnięty)

"Jednobitowe wyjście dźwiękowe" wykorzystywane jest do generowania kliku klawiatury oraz dźwięku brzęczyka systemowego urządzenia "E:" (zob. CIO). W serii 400/800 służy do tego osobny głośniczek, w XL i XE natomiast jest to podłączone do ogólnego wyjścia audio.

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.


Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.

Personal tools