Tajemnice ATARI

MAPA PAMIĘCI


$0200,$0201 00512,00513 VDSLST
    Wektor przerwania NMI Display List (DLI). Gdy odpowiedni bit recepty dla układu wyświetlającego obraz (DL) jest ustawiony, to może być wywołane przerwanie. Aby uaktywnić ten rodzaj przerwania, należy ustawić 7 bit komórki NMIEN (lokacja 54286 $d40e). System operacyjny nie korzysta z tego przerwania, lecz ustawia ten wektor przy inicjalizacji systemu, aby wskazywał instrukcję RTI. Tak też powinna się kończyć procedura obsługi przerwania DL napisana przez użytkownika. Oto przykładowy przepis instalacji i uruchomienia programu:

   1. Ustawić 7 bit w DL, w linii, która ma uaktywniać przerwanie

   2. Ustawić wektor VDSLST: 00512 ($0300) na adres początku procedury

   3. Upewnić się, że procedura przerwania nie zmienia wartości rejestrów S, A, X i Y, rejestru flag oraz że kończy się ona instrukcją RTI

   4. Zezwolić na przerwanie DL poprzez ustawienie komórki NMIEN: wpisujemy tam wartość 192 ($c0).

   Przerwanie jest wykonywane przed wyświetleniem linii wywołującej je. Przerwanie Display List Interrupt nie jest blokowane ustawieniem komórki CRITIC (lokacja 00066 $0042), nawet komunikacja z urządzeniami zewnętrznymi nie jest w stanie go zdezaktywować. Zwykle DLI używa się do przełączenia generatora znaków (dzięki czemu na ekranie mamy jednocześnie kilka krojów znaków), do zmiany kolorów, itd. Naciśnięcie klawisza RESET powoduje przywrócenie systemowej wartości wektora VDSLST. Program powodujący wyświetlanie tła ekranu w 2 kolorach (wywoływany z poziomu asemblera):
       ORG $600
* Instalacja przerwania
       LDA $230  ; Krok pierwszy
       STA $CB
       LDA $231
       STA $CC
       LDY #8
       LDA ($CB),Y
       ORA #$80
       STA ($CB),Y
       LDA PROC
       STA $201
       LDA #$CO  ; Krok czwarty
       STA $D40E
       RTS

       * Procedura przerwania
PROC   PHP
       PHA
       LDA #0
       STA $D018
       PLA
       PLP
       RTI
Program wywoływany z poziomu języka Basic:
10 FOR Q=1536 TO 1580
20 READ A:POKE Q,A
30 NEXT Q
40 I=USR(1536)
50 DATA 173,48,2,133,203,173,49,2,133
60 DATA 204,160,8,177,203,9,128,145
70 DATA 203,169,35,141,0,2,169,6,141
80 DATA 1,2,169,192,141,14,212,104,96
90 DATA 8,72,169,0,141,24,208,104,40,64
   Kolejne dwa przerwania wywoływane są przez układ PIA i normalnie nie są wykorzystywane przez system operacyjny (standardowo ich wektory przerwań są ustawiane na adres, pod którym znajduje się rozkaz powrotu z przerwania).

$0202,$0203 00514,00515 VPRCED
    Wektor przerwania wywołanego przez port A.

$0204,$0205 00516,00517 VINTER
    Wektor przerwania wywołanego przez port B.

$0206,$0207 00518,00519 VBREAK
    Wektor przerwania wywołanego przez instrukcję BRK mikroprocesora 6502. Nie jest to wektor obsługi przerwania klawisza BREAK, jak sugeruje to nazwa. System operacyjny ustawia standardowo wektor na adres, pod którym znajdują się instrukcje PLA RTI, czyli rozkazy powrotu z przerwania. Najczęściej tego rodzaju przerwanie wykorzystywane jest do poszukiwania błędów występujących w programie maszynowym. Praktycznie dzieje się to w następujący sposób: programista tworzy procedurę obsługi przerwania, w której zwykle sprawdza stan rejestrów procesora oraz zawartość niektórych komórek pamięci, następnie ustawia wektor VBREAK wskazujący na tę procedurę, a na końcu wstawia w swoim programie pułapkę BRK. Należy pamiętać, że przerwanie powinno kończyć się rozkazami PLA RTI. Uwaga: Niektóre programy użytkowe, nn. Quick Assembler posiadają własną obsługę przerwania BRK.

$0208,$0209 00530,00521 VKEYBD
    Wektor przerwania klawiatury. Przerwanie takie jest wywoływane po naciśnięciu dowolnego klawisza za wyjątkiem klawisza BREAK. Również klawisze konsoli nie powodują wywołania tego przerwania. Przerwanie klawiatury może być używane np. do obsługi pewnej kombinacji klawiszy, której system operacyjny nie obsługuje. Przykładowo z przerwania tego korzysta wspaniały program XLFriend, którego programy są wywoływane kombinacją klawiszy Shift/Option/1-4.

Kolejne trzy wektory przerwań kontrolują transmisję danych poprzez port szeregowy. Wektory te są wykorzystywane przez SIO, przerwania są wywoływane przez układ POKEY.

$020a,$020b 00522,00523 VSERIN
    Wektor przerwania szeregowego portu wejścia/wyjścia. Przerwanie to jest wywoływane podczas transmisji danych z urządzenia zewnętrznego do bufora komputera. System operacyjny ma wbudowaną obsługę tego przerwania, ale ze względu na jej małą efektywność (stosunkowo wolna transmisja) programy współpracujące z urządzeniami zewnętrznymi, np. DOS 2.5 firmy Atari Corporation, używają własnych procedur obsługi przerwania VSERIN.

$020c,$020d 00524,00525 VSEROR
    Wektor przerwania szeregowego portu wejścia/wyjścia. Jest ono wywoływane podczas transmisji danych z bufora komputera do urządzenia zewnętrznego. Wektor ten jest najczęściej zmieniany przez Dyskowe Systemy Operacyjne.

$020e,$020f 00526,00527 VSEROC
    Wektor przerwania końca transmisji szeregowej. Jeżeli komórka CHKSNT (lokacja 00059 $003b) jest równa 0, to systemowa procedura tego przerwania jest kończona (suma kontrolna nie została wysłana). Jeżeli komórka ta ma wartość różną od zera (transmisja szeregowa została zakończona), to procedura przerwania informuje system operacyjny o zakończonej operacji poprzez skasowanie 3 bitu komórki IRQEN (lokacja 53774 ($d20e) odpowiedzialnego za zezwolenie na przerwanie końca transmisji.

$0210,$0211 00528,00529 VTIMR1
    Wektor przerwania zegara pierwszego. Przerwanie jest wywoływane przez układ POKEY. System operacyjny ustawia ten wektor na adres, pod którym znajdują się rozkazy powrotu z przerwania. Jeżeli zawartość komórki AUDF1 (lokacja 53760 $d300) odliczy się do zera, to następuje przerwanie zegara numer 1.

$0212,$0213 00530,00531 VTIMR2
    Wektor przerwania zegara drugiego, wywołane jest, gdy komórka AUDF2 (lokacja 53762 $d202) osiągnie wartość zero.

$0214,$02l5 00532,00533 VTIMR4
    Wektor przerwania czwartego zegara, wywołane jest, gdy komórka AUDF4 (lokacja 53766 $d206) osiągnie wartość równą 0.

$0216,$0217 00534,00535 VIMIRQ
    Globalny wektor przerwania IRQ. Jeżeli wystąpi przerwanie IRQ, to jest wywoływana procedura przerwania (przez wektor zapisany w VIMIRQ), która wywołuje właściwe przerwanie. Jest to przerwanie kontrolujące i uaktywniające inne przerwania IRQ, np. klawiatury, transmisji danych, itp.

   VTIMR1-4 (lokacje od 00528 do 00533 ($0810-$0815)) są zegarami sprzętowymi, obsługiwane są przez układ POKEY i rejestry AUDF. Natomiast lokacje pamięci od 00536 do 00558 ($02l8-$02ae) są używane przez zegary programowe, obsługuje je przerwanie VBLANK Ich zawartość jest zmniejszana co 1/50 sekundy (dla pierwszej fazy przerwania VBLANK). Odliczanie czasu przez te zegary nie jest wykonywane, gdy ich wartość osiągnie 0 lub przerwanie VBLANK zostanie zablokowane. Zwykle przerwania zegarowe wykorzystywane są przez programy wymagające wykonania pewnych operacji co pewien określony okres, np. migotanie kursora, wydawanie dźwięku.

$0218,$219 00536,00537 CDTMV1
    Wartość pierwszego zegara, zmniejszana jest o jeden po każdym przerwaniu wywołanym przez pierwszą fazę VBLANK. W chwili, gdy osiągnie wartość 0 jest wykonywane przerwanie, którego wektor znajduje się pod adresem 00550 ($0226). Ponieważ wystąpienie operacji czasowo krytycznej (patrz lokacja 00066 ($0042), komórka CRITIC) nie powoduje wstrzymania realizacji pierwszej części przerwania VBLANK, zegar numer 1 jest nadal aktywny. Należy z tego powodu umiejętnie korzystać z przerwania pierwszego zegara, gdyż może to doprowadzić do zakłóceń pracy systemu operacyjnego, z jego "zawieszeniem" włącznie.

$021a,$021b 00538,00539 CDTMV2
    Wartość drugiego zegara, zmniejszana jest o jeden przez drugą część przerwania VBLANK. Po osiągnięciu zerowej zawartości jest wykonywane przerwanie tego zegara, system wykonuje skok przez lokacje 00552,00553 ($0228, $0229). Wystąpienie operacji czasowo krytycznej (patrz CRITIC) wstrzymuje działanie zegara numer 2.

$021C,$021d 00540,00541 CDTMV3
    Wartość trzeciego zegara, który obsługiwany jest przez drugą część przerwania VBLANK Konsekwencje: patrz CDTMV2 powyżej. Gdy CDTMV3 osiągnie wartość 0 to jest ustawiana flaga w komórce 00554 ($022a).

$02le,$021f 00542,00543 CDTMV4
    Wartość czwartego zegara, patrz lokacja 00538 ($021a). Gdy CDTMV4 zostanie odliczona do 0 to ustawiana jest flaga w komórce 00556 ($022c).

$0220,$0221 00544,00545 CDTMV5
    Wartość piątego zegara, patrz lokacja 00538 ($021a). Gdy CDTMV5 osiągnie wartość 0 to jest ustawiana flaga w komórce 00558 ($22e).

   Krótka uwaga dotycząca działania zegarów 3-5: flagi odpowiadające poszczególnym zegarom są ustawione aż do czasu, gdy przerwanie VBLANK rozpozna, że wartość któregoś z tych zegarów jest różna od zera. Wtedy odpowiednia flaga jest kasowana.

opracował: Leon



Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2001