Rejestry PIA

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 11:14, 8 sty 2006
KMK (Dyskusja | wkład)
(Lista rejestrów)
← Previous diff
Aktualna wersja
Krótki (Dyskusja | wkład)
(Nieprawda, PORTB jest inicjowany jako "all output" we wszystkich modelach XL.)
Linia 1: Linia 1:
 +Układ [[PIA]], sześć rejestrów.
 +
==Lista rejestrów== ==Lista rejestrów==
Linia 5: Linia 7:
<tr><td id="PORTA" rowspan = 2>$D300</td><td rowspan = 2>PORTA</td><td> <tr><td id="PORTA" rowspan = 2>$D300</td><td rowspan = 2>PORTA</td><td>
-<p>Rejestr porządkowania danych: Ustawienie bitu na 0 programuje odpowiedni bit w rejestrze przesyłania danych jako bit wejścia danych, w przeciwnym wypadku - jako bit wyjścia danych. System programuje wszystkie linie portu jako wejście.</p></td></tr>+Jako rejestr kierunku przepływu danych: ustawienie bitu na 0 programuje odpowiedni bit w rejestrze przesyłania danych jako bit wejścia, w przeciwnym wypadku - jako bit wyjścia danych. System programuje wszystkie linie portu jako wejście.</td></tr>
<tr><td> <tr><td>
-<p>Rejestr przesyłania danych. Przypisany jest do dwóch pierwszych (w [[XL]]/[[XE]]: dwóch jedynych) portów joysticka, młodsze 4 bity przekazują stany joysticka nr 1, starsze - joysticka nr 2.</p>+Jako rejestr przesyłania danych: przypisany jest do dwóch pierwszych (w [[XL]] i [[XE]]: dwóch jedynych) gniazd joysticka, młodsze 4 bity przekazują stany joysticka nr 1, starsze - joysticka nr 2.
 + 
 +Znaczenie bitów kiedy do gniazd podłączone są joysticki (cień dla dolnego nibble znajduje się odpowiednio pod JSTICK0 ($0278), a dla górnego pod JSTICK1 ($0279)):
 +* bit 7: joystick 1 w prawo (0 = tak, 1 = nie)
 +* bit 6: joystick 1 w lewo (0 = tak, 1 = nie)
 +* bit 5: joystick 1 w dół (0 = tak, 1 = nie)
 +* bit 4: joystick 1 w górę (0 = tak, 1 = nie)
 +* bit 3: joystick 0 w prawo (0 = tak, 1 = nie)
 +* bit 2: joystick 0 w lewo (0 = tak, 1 = nie)
 +* bit 1: joystick 0 w dół (0 = tak, 1 = nie)
 +* bit 0: joystick 0 w górę (0 = tak, 1 = nie)
 + 
 +Znaczenie bitów kiedy do gniazd podłączone są paddles (cienie dla odpowiednich przycisków znajdują się od PTRIG0 ($027C) do PTRIG3 ($027F)):
 +* bit 7: przycisk potencjometru 3 (0 = wciśnięty, 1 = zwolniony)
 +* bit 6: przycisk potencjometru 2 (0 = wciśnięty, 1 = zwolniony)
 +* bit 5: nieużywany (1)
 +* bit 4: nieużywany (1)
 +* bit 3: przycisk potencjometru 1 (0 = wciśnięty, 1 = zwolniony)
 +* bit 2: przycisk potencjometru 0 (0 = wciśnięty, 1 = zwolniony)
 +* bit 1: nieużywany (1)
 +* bit 0: nieużywany (1)
 + 
 +Znaczenie bitów kiedy do gniazd podłączone jest [[Pióro świetlne|pióro świetlne]] (dedykowanych rejestrów cieni dla przycisków pióra nie ma, lecz z powodzeniem można posłużyć się rejestrami położenia joysticków JSTICK0, oraz JSTICK1) lub [[XG-1|pistolet świetlny]]:
 +* bit 7: nieużywany (1)
 +* bit 6: nieużywany (1)
 +* bit 5: nieużywany (1)
 +* bit 4: przycisk pióra 1 (0 = wciśnięty, 1 = zwolniony)/przycisk pistoletu 1 (0 = zwolniony, 1 = wciśnięty)
 +* bit 3: nieużywany (1)
 +* bit 2: nieużywany (1)
 +* bit 1: nieużywany (1)
 +* bit 0: przycisk pióra 0 (0 = wciśnięty, 1 = zwolniony)/przycisk pistoletu 0 (0 = zwolniony, 1 = wciśnięty)
 + 
</td></tr> </td></tr>
<tr><td id="PORTB" rowspan = 2>$D301</td><td rowspan = 2>PORTB</td><td> <tr><td id="PORTB" rowspan = 2>$D301</td><td rowspan = 2>PORTB</td><td>
-<p>Rejestr porządkowania danych: Ustawienie bitu na 0 programuje odpowiedni bit w rejestrze przesyłania danych jako bit wejścia danych, w przeciwnym wypadku - jako bit wyjścia danych. System w 400/800 programuje wszystkie linie portu jako wejście, w [[XL]]/[[XE]] - wszystkie jako wyjście, za wyjątkiem [[1450XLD]], gdzie bity 4 i 5 są programowane jako wejściowe (aczkolwiek nie wiadomo, po co).</p></td></tr>+Jako rejestr kierunku przepływu danych: ustawienie bitu na 0 programuje odpowiedni bit w rejestrze przesyłania danych jako bit wejścia, w przeciwnym wypadku - jako bit wyjścia danych. System w [[400/800]] programuje wszystkie linie portu jako wejście, w [[XL]]/[[XE]] - wszystkie jako wyjście.</td></tr>
<tr><td> <tr><td>
-<p>Rejestr przesyłania danych. W serii 400/800 przypisany jest do drugiej (nieistniejącej w [[XL]]/[[XE]]) pary portów joysticka, młodsze 4 bity przekazują stany joysticka nr 3, starsze - joysticka nr 4.</p>+Jako rejestr przesyłania danych: w serii 400/800 przypisany jest do drugiej (nieistniejącej w [[XL]]/[[XE]]) pary gniazd joysticka, młodsze 4 bity przekazują stany joysticka nr 3, starsze - joysticka nr 4. Cienie znajdują się odpowiednio pod JSTICK2 ($027A) i JSTICK3 ($027B). W serii [[XL]]/[[XE]] są to duplikaty cieni portu A.
-<p>W serii [[XL]] rejestr ten steruje układem zarządzania pamięcią oraz (istniejącymi w niektórych modelach) diodami konsoli. Przypisanie bitów:</p>+ 
 +W serii [[XL]] rejestr ten steruje układem zarządzania pamięcią oraz (istniejącymi w niektórych modelach) diodami konsoli. Przypisanie bitów:
* bit 7: RAM w obszarze $5000-$57FF (1) lub SELF TEST tamże (0) * bit 7: RAM w obszarze $5000-$57FF (1) lub SELF TEST tamże (0)
* bit 6: nieużywany * bit 6: nieużywany
* bit 5: nieużywany * bit 5: nieużywany
* bit 4: nieużywany * bit 4: nieużywany
-* bit 3: LED 2 (1 - świeci się)+* bit 3: LED 2 (0 - świeci się)
-* bit 2: LED 1 (1 - świeci się)+* bit 2: LED 1 (0 - świeci się)
* bit 1: RAM w obszarze $A000-$BFFF (1) lub [[Atari BASIC]] tamże (0) * bit 1: RAM w obszarze $A000-$BFFF (1) lub [[Atari BASIC]] tamże (0)
* bit 0: ROM systemu operacyjnego w obszarze $C000-$CFFF i $D800-$FFFF (1) lub RAM tamże (0) * bit 0: ROM systemu operacyjnego w obszarze $C000-$CFFF i $D800-$FFFF (1) lub RAM tamże (0)
-<p>Wartością domyślną jest $FF.</p>+Wartością domyślną jest $FF.
-<p>W serii [[XE]] rejestr ten steruje układem zarządzania pamięcią. Przypisanie bitów:</p>+ 
 +W serii [[XE]] rejestr ten steruje układem zarządzania pamięcią. Przypisanie bitów:
* bit 7: RAM w obszarze $5000-$57FF (1) lub SELF TEST tamże (0) * bit 7: RAM w obszarze $5000-$57FF (1) lub SELF TEST tamże (0)
-* bit 6: nieużywany+* bit 6: w [[XEGS]] gdy BASIC jest wyłączony (bit 1=1), ustawienie tutaj 0 włącza ROM wbudowanej gry [[Missile Command]]. W pozostałych modelach nieużywany.
-* bit 5: w obszarze $4000-$7FFF [[ANTIC]] widzi pamięć główną (1) lub dodatkową (0)+* bit 5: w obszarze $4000-$7FFF [[ANTIC (układ)|ANTIC]] widzi pamięć główną (1) lub dodatkową (0)
* bit 4: w obszarze $4000-$7FFF CPU widzi pamięć główną (1) lub dodatkową (0) * bit 4: w obszarze $4000-$7FFF CPU widzi pamięć główną (1) lub dodatkową (0)
* bit 3: wybór banku pamięci dodatkowej 16k w obszarze $4000-$7FFF * bit 3: wybór banku pamięci dodatkowej 16k w obszarze $4000-$7FFF
Linia 32: Linia 67:
* bit 1: RAM w obszarze $A000-$BFFF (1) lub [[Atari BASIC]] tamże (0) * bit 1: RAM w obszarze $A000-$BFFF (1) lub [[Atari BASIC]] tamże (0)
* bit 0: ROM systemu operacyjnego w obszarze $C000-$CFFF i $D800-$FFFF (1) lub RAM tamże (0) * bit 0: ROM systemu operacyjnego w obszarze $C000-$CFFF i $D800-$FFFF (1) lub RAM tamże (0)
-<p>Wartością domyślną jest $FF.</p>+Wartością domyślną jest $FF.
 +<p>Działanie bitu 7 jest uzależnione od stanu bitu 0: bit 7 włącza i wyłącza SELF TEST tylko wtedy, kiedy bit 0 jest ustawiony na 1. W przeciwnym razie zmiany stanu bitu 7 są ignorowane.</p>
 +<p>Działanie tego rejestru modyfikują [[Obsługa standardowego rozszerzenia pamięci RAM|standardowe rozszerzenia pamięci]] oraz [[MapRAM]].</p>
 +<p>Skonfigurowanie linii PORTB (w rejestrze kierunku przepływu danych) jako wejściowych powoduje, że takie linie PIA pozostają w stanie logicznej "1" niezależnie od tego jaka wartość została zapisana do rejestru przesyłania danych PORTB (co może powodować problemy z konfiguracją pamięci w XL/XE).</p>
 +</td></tr>
 +<tr><td id="PACTL">$D302</td><td>PACTL</td><td>
 +Rejestr kontroli portu A. Znaczenie bitów:
 +* bit 7: status przerwania IRQ portu A (1 - wystąpiło)
 +* bit 6: nieużywany (zawsze 0)
 +* bit 5: nieużywany (zawsze 1)
 +* bit 4: nieużywany (zawsze 1)
 +* bit 3: sterowanie silnikiem magnetofonu (0 - włączony, 1 - wyłączony)
 +* bit 2: bit wyboru funkcji rejestru PORTA: 0 - rejestr kierunku przepływu danych, 1 - rejestr przesyłania danych
 +* bit 1: nieużywany (zawsze 0)
 +* bit 0: zezwolenie na przerwanie IRQ portu A (1 - dozwolone)
 +Przerwanie IRQ portu A podłączone jest do linii PROCEED [[gniazdo SIO|gniazda SIO]]. System programuje tu domyślnie brak zezwolenia na jego wystąpienie. Status IRQ kasowany jest automatycznie po odczycie PORTA.
 +</td></tr>
 +<tr><td id="PBCTL">$D303</td><td>PBCTL</td><td>
 +Rejestr kontroli portu B. Znaczenie bitów:
 +* bit 7: status przerwania IRQ portu B (1 - wystąpiło)
 +* bit 6: nieużywany (zawsze 0)
 +* bit 5: nieużywany (zawsze 1)
 +* bit 4: nieużywany (zawsze 1)
 +* bit 3: sterowanie linią COMMAND [[gniazdo SIO|gniazda SIO]] (0 - aktywna)
 +* bit 2: bit wyboru funkcji rejestru PORTB: 0 - rejestr kierunku przepływu danych, 1 - rejestr przesyłania danych.
 +* bit 1: nieużywany (zawsze 0)
 +* bit 0: zezwolenie na przerwanie IRQ portu B (1 - dozwolone)
 +Przerwanie IRQ portu B podłączone jest do linii INTERRUPT [[gniazdo SIO|gniazda SIO]]. System programuje tu domyślnie brak zezwolenia na jego wystąpienie. Status IRQ kasowany jest automatycznie po odczycie PORTB.
</td></tr> </td></tr>
-<tr><td id="PACTL">$D302</td><td>PACTL</td><td> </td></tr> 
-<tr><td id="PBCTL">$D303</td><td>PBCTL</td><td> </td></tr> 
- 
</table> </table>
- 
-{{stub}} 
[[Kategoria:Programowanie Atari 8-bit]] [[Kategoria:Programowanie Atari 8-bit]]

Aktualna wersja

Układ PIA, sześć rejestrów.

Lista rejestrów

AdresEtykietaOpis
$D300PORTA Jako rejestr kierunku przepływu danych: ustawienie bitu na 0 programuje odpowiedni bit w rejestrze przesyłania danych jako bit wejścia, w przeciwnym wypadku - jako bit wyjścia danych. System programuje wszystkie linie portu jako wejście.

Jako rejestr przesyłania danych: przypisany jest do dwóch pierwszych (w XL i XE: dwóch jedynych) gniazd joysticka, młodsze 4 bity przekazują stany joysticka nr 1, starsze - joysticka nr 2.

Znaczenie bitów kiedy do gniazd podłączone są joysticki (cień dla dolnego nibble znajduje się odpowiednio pod JSTICK0 ($0278), a dla górnego pod JSTICK1 ($0279)):

  • bit 7: joystick 1 w prawo (0 = tak, 1 = nie)
  • bit 6: joystick 1 w lewo (0 = tak, 1 = nie)
  • bit 5: joystick 1 w dół (0 = tak, 1 = nie)
  • bit 4: joystick 1 w górę (0 = tak, 1 = nie)
  • bit 3: joystick 0 w prawo (0 = tak, 1 = nie)
  • bit 2: joystick 0 w lewo (0 = tak, 1 = nie)
  • bit 1: joystick 0 w dół (0 = tak, 1 = nie)
  • bit 0: joystick 0 w górę (0 = tak, 1 = nie)

Znaczenie bitów kiedy do gniazd podłączone są paddles (cienie dla odpowiednich przycisków znajdują się od PTRIG0 ($027C) do PTRIG3 ($027F)):

  • bit 7: przycisk potencjometru 3 (0 = wciśnięty, 1 = zwolniony)
  • bit 6: przycisk potencjometru 2 (0 = wciśnięty, 1 = zwolniony)
  • bit 5: nieużywany (1)
  • bit 4: nieużywany (1)
  • bit 3: przycisk potencjometru 1 (0 = wciśnięty, 1 = zwolniony)
  • bit 2: przycisk potencjometru 0 (0 = wciśnięty, 1 = zwolniony)
  • bit 1: nieużywany (1)
  • bit 0: nieużywany (1)

Znaczenie bitów kiedy do gniazd podłączone jest pióro świetlne (dedykowanych rejestrów cieni dla przycisków pióra nie ma, lecz z powodzeniem można posłużyć się rejestrami położenia joysticków JSTICK0, oraz JSTICK1) lub pistolet świetlny:

  • bit 7: nieużywany (1)
  • bit 6: nieużywany (1)
  • bit 5: nieużywany (1)
  • bit 4: przycisk pióra 1 (0 = wciśnięty, 1 = zwolniony)/przycisk pistoletu 1 (0 = zwolniony, 1 = wciśnięty)
  • bit 3: nieużywany (1)
  • bit 2: nieużywany (1)
  • bit 1: nieużywany (1)
  • bit 0: przycisk pióra 0 (0 = wciśnięty, 1 = zwolniony)/przycisk pistoletu 0 (0 = zwolniony, 1 = wciśnięty)
$D301PORTB Jako rejestr kierunku przepływu danych: ustawienie bitu na 0 programuje odpowiedni bit w rejestrze przesyłania danych jako bit wejścia, w przeciwnym wypadku - jako bit wyjścia danych. System w 400/800 programuje wszystkie linie portu jako wejście, w XL/XE - wszystkie jako wyjście.

Jako rejestr przesyłania danych: w serii 400/800 przypisany jest do drugiej (nieistniejącej w XL/XE) pary gniazd joysticka, młodsze 4 bity przekazują stany joysticka nr 3, starsze - joysticka nr 4. Cienie znajdują się odpowiednio pod JSTICK2 ($027A) i JSTICK3 ($027B). W serii XL/XE są to duplikaty cieni portu A.

W serii XL rejestr ten steruje układem zarządzania pamięcią oraz (istniejącymi w niektórych modelach) diodami konsoli. Przypisanie bitów:

  • bit 7: RAM w obszarze $5000-$57FF (1) lub SELF TEST tamże (0)
  • bit 6: nieużywany
  • bit 5: nieużywany
  • bit 4: nieużywany
  • bit 3: LED 2 (0 - świeci się)
  • bit 2: LED 1 (0 - świeci się)
  • bit 1: RAM w obszarze $A000-$BFFF (1) lub Atari BASIC tamże (0)
  • bit 0: ROM systemu operacyjnego w obszarze $C000-$CFFF i $D800-$FFFF (1) lub RAM tamże (0)

Wartością domyślną jest $FF.

W serii XE rejestr ten steruje układem zarządzania pamięcią. Przypisanie bitów:

  • bit 7: RAM w obszarze $5000-$57FF (1) lub SELF TEST tamże (0)
  • bit 6: w XEGS gdy BASIC jest wyłączony (bit 1=1), ustawienie tutaj 0 włącza ROM wbudowanej gry Missile Command. W pozostałych modelach nieużywany.
  • bit 5: w obszarze $4000-$7FFF ANTIC widzi pamięć główną (1) lub dodatkową (0)
  • bit 4: w obszarze $4000-$7FFF CPU widzi pamięć główną (1) lub dodatkową (0)
  • bit 3: wybór banku pamięci dodatkowej 16k w obszarze $4000-$7FFF
  • bit 2: wybór banku pamięci dodatkowej 16k w obszarze $4000-$7FFF
  • bit 1: RAM w obszarze $A000-$BFFF (1) lub Atari BASIC tamże (0)
  • bit 0: ROM systemu operacyjnego w obszarze $C000-$CFFF i $D800-$FFFF (1) lub RAM tamże (0)

Wartością domyślną jest $FF.

Działanie bitu 7 jest uzależnione od stanu bitu 0: bit 7 włącza i wyłącza SELF TEST tylko wtedy, kiedy bit 0 jest ustawiony na 1. W przeciwnym razie zmiany stanu bitu 7 są ignorowane.

Działanie tego rejestru modyfikują standardowe rozszerzenia pamięci oraz MapRAM.

Skonfigurowanie linii PORTB (w rejestrze kierunku przepływu danych) jako wejściowych powoduje, że takie linie PIA pozostają w stanie logicznej "1" niezależnie od tego jaka wartość została zapisana do rejestru przesyłania danych PORTB (co może powodować problemy z konfiguracją pamięci w XL/XE).

$D302PACTL

Rejestr kontroli portu A. Znaczenie bitów:

  • bit 7: status przerwania IRQ portu A (1 - wystąpiło)
  • bit 6: nieużywany (zawsze 0)
  • bit 5: nieużywany (zawsze 1)
  • bit 4: nieużywany (zawsze 1)
  • bit 3: sterowanie silnikiem magnetofonu (0 - włączony, 1 - wyłączony)
  • bit 2: bit wyboru funkcji rejestru PORTA: 0 - rejestr kierunku przepływu danych, 1 - rejestr przesyłania danych
  • bit 1: nieużywany (zawsze 0)
  • bit 0: zezwolenie na przerwanie IRQ portu A (1 - dozwolone)

Przerwanie IRQ portu A podłączone jest do linii PROCEED gniazda SIO. System programuje tu domyślnie brak zezwolenia na jego wystąpienie. Status IRQ kasowany jest automatycznie po odczycie PORTA.

$D303PBCTL

Rejestr kontroli portu B. Znaczenie bitów:

  • bit 7: status przerwania IRQ portu B (1 - wystąpiło)
  • bit 6: nieużywany (zawsze 0)
  • bit 5: nieużywany (zawsze 1)
  • bit 4: nieużywany (zawsze 1)
  • bit 3: sterowanie linią COMMAND gniazda SIO (0 - aktywna)
  • bit 2: bit wyboru funkcji rejestru PORTB: 0 - rejestr kierunku przepływu danych, 1 - rejestr przesyłania danych.
  • bit 1: nieużywany (zawsze 0)
  • bit 0: zezwolenie na przerwanie IRQ portu B (1 - dozwolone)

Przerwanie IRQ portu B podłączone jest do linii INTERRUPT gniazda SIO. System programuje tu domyślnie brak zezwolenia na jego wystąpienie. Status IRQ kasowany jest automatycznie po odczycie PORTB.

Personal tools