Informacje dodatkowe     Wyjątki procesora MC68000


Procesor 68000 zawsze znajduje się w jednym z trzech stanów działania: normalnym, wyjątkowym
lub zatrzymania (instrukcja STOP) oraz pracuje w jednym z dwóch trybów dostępu (Privilege mode):
"użytkownika" (User mode) - w tym trybie procesor ma niższy poziom dostępu. Korzysta z oddzielnego stosu
(wskaźnik A7=USP) i nie może wykonywać kilku instrukcji. Jeśli bit 13 ("S")
rejestru SR jest zerem, to tryb "użytkownika" jest włączony.
"nadzorcy" (Supervisor mode) - w tym trybie procesor ma wyższy poziom dostępu. Korzysta z oddzielnego stosu
(wskaźnik A7=SSP) i może wykonywać wszystkie instrukcje. Jeśli bit 13 ("S")
rejestru SR jest jedynką, to tryb "nadzorcy" jest włączony.
Tryb dostępu to mechanizm zapewniający bezpieczeństwo w systemie komputerowym (określa, które
operacje są dozwolone). System operacyjny działa w trybie "nadzorcy", co zapewnia mu pełny dostęp
do wszystkich zasobów komputera. Natomiast zwykłe programy pracują w trybie "użytkownika", dlatego
nie mają dostępu do zarezerwowanych obszarów systemowych, których nie powinny modyfikować.
Kiedy procesor działa w trybie "użytkownika", przejście do trybu "nadzorcy" jest możliwe tylko po wystą-
pieniu wyjątku (Exception processing). Natomiast przejście z trybu "nadzorcy" do trybu "użytkownika"
jest możliwe po wykonaniu jednej z 4 instrukcji: "ANDI to SR", "EORI to SR", "MOVE to SR" lub RTE.

Opis rejestru stanu SR (Status Register):



16-bitowy rejestr SR pełni funkcję kontrolno-sterowniczą i dzieli się na dwa bajty:
młodszy (użytkownika) - rejestr kodów warunkowych CCR (Condition Code Register),
który zawiera kody warunkowe ustawiane przez instrukcje.
starszy (systemowy) - zawiera ustawienia procesora. Dostęp do niego w trybie "użytkownika" jest możliwy
poprzez instrukcję "MOVE from SR", ale tylko na procesorze 68000. Na procesorze
68010/20/30/40/60 dostęp do tego bajtu jest możliwy tylko w trybie "nadzorcy".
Bity rejestru SR oznaczone szarym kolorem, nie są używane i mają wartość 0
(na procesorach 68020 i nowszych, bity 14 i 12 są używane).

Wyjątek (Exception) występuje, gdy procesor wykryje nietypową sytuację (stan wyjątkowy), np.
kod nieobsługiwanej instrukcji, dzielenie przez 0, czy błąd adresu (skok pod nieparzysty adres). Mechanizm wyjątków pozwala na programową obsługę takich sytuacji. Po wystąpieniu wyjątku
normalne wykonywanie kodu zostaje przerwane i są wykonywane następujące operacje:
Włączany jest tryb "nadzorcy", a wartości rejestrów SR i PC są odkładane na stosie (A7=SSP).
W zależności od wyjątku, który wystąpił oraz od modelu procesora, wcześniej na stosie są odkładane
różne dodatkowe dane. Następnie jest generowany numer wektora wyjątku, który wystąpił. Numer ten
jest mnożony przez 4, aby uzyskać adres wektora wyjątku (na procesorze 68010/20/30/40/60 do tak
obliczonego adresu jest dodawana wartość rejestru VBR). Wektor ten zawiera 32-bitowy adres
procedury, która obsługuje dany wyjątek (powinna być zakończona instrukcją RTE). Po wykonaniu
instrukcji RTE kończącej procedurę obsługi wyjątku, wartości rejestrów SR i PC (oraz ewentualnie
dodatkowe dane) są przywracane ze stosu. Są to wartości, jakie te rejestry miały przed wystąpieniem
wyjątku. Zwykle wartość rejestru PC wskazuje na instrukcję następną po tej, która wywołała wyjątek.
Jednak wartość tą można zmodyfikować na stosie tak, aby zawierała adres dowolnego kodu.
Przywrócony rejestr SR wyłącza tryb "nadzorcy", a rejestr PC zawiera adres kodu, który zostanie
wykonany po zakończeniu obsługi wyjątku.

Wektor wyjątku to miejsce w pamięci, z którego procesor odczytuje 32-bitowy adres procedury,
obsługującej dany wyjątek. Jest 255 wektorów wyjątków, które są zapisane jako tablica (Vector table)
w pierwszych 1024 bajtach pamięci operacyjnej:

Numer wektora
(dziesiętnie)
Adres wektora
(szesnastkowo)
Wyjątek
0
1
0000
0004
  Reset: initial SSP
  Reset: initial PC
20008  Bus error
3000C  Address error
40010  Illegal instruction
50014  Zero divide
60018  CHK instruction
7001C  TRAPV instruction
80020  Privilege violation
90024  Trace
100028  Line 1010 emulator
11002C  Line 1111 emulator
12...140030...0038  Reserved (1)
15003C  Uninitialized interrupt
16...230040...005C  Reserved (1)
240060  Spurious interrupt (2)
250064  Level 1 interrupt autovector  
260068  Level 2 interrupt autovector
27006C  Level 3 interrupt autovector
280070  Level 4 interrupt autovector
290074  Level 5 interrupt autovector
300078  Level 6 interrupt autovector
31007C  Level 7 interrupt autovector
32...470080...00BC  TRAP instruction (3)
48...6300C0...00FC  Reserved (1)
64...2550100...03FC  User interrupt (4)

OBJAŚNIENIA:
(1) - zarezerwowane wektory procesora 68000 (użytkownik nie powinien ich wykorzystywać).
        Kolejne procesory z rodziny 680x0 obsługują dodatkowe wyjątki, używając tych wektorów.
(2) - wyjątek wystąpi, jeśli podczas wykonywania przerwania pojawi się błąd szyny (Bus error).
(3) - instrukcja "TRAP #n" używa wektora wyjątku nr 32+n (n=0...15).
(4) - wektory przeznaczone do wykorzystania przez użytkownika.

Wszystkie wektory wyjątków mają rozmiar 4 bajtów i znajdują się w obszarze danych "nadzorcy"
(Supervisor data space). Odstępstwem od tej reguły jest wektor wyjątku nr 0 (Reset), który zajmuje
8 bajtów i znajduje się w obszarze programu "nadzorcy" (Supervisor program space). Po każdym
zresetowaniu systemu procesor pracuje w trybie "nadzorcy" (na procesorze 68010/20/30/40/60
wartość rejestru VBR jest zerowana). Z wektora wyjątku nr 0 (Reset), czyli z komórki pamięci
o adresie $00000000 jest odczytywana, początkowa wartość wskaźnika stosu "nadzorcy" (A7=SSP),
a z komórki $00000004 - początkowa wartość rejestru PC (adres pierwszej instrukcji, która zostanie
wykonana przez procesor).

Grupy wyjątków i priorytet (kolejność) ich wykonywania:

GRUPAWYJĄTEKWYKONYWANIE
0Reset
Bus error
Address error
  w ciągu 2 cykli zegarowych
1Trace
Interrupt
Illegal instruction
  Privilege violation  
  przed następną instrukcją
2TRAP
TRAPV
CHK
Zero divide
  podczas wykonywania instrukcji  

Grupa wyjątków nr 0 ma najwyższy, a grupa nr 2 - najniższy priorytet. Wyjątki w każdej grupie są
zapisane w kolejności ich priorytetów (od najwyższego). Wyjątki w grupie nr 2 mają równy priorytet,
ponieważ tylko jedna instrukcja może być wykonywana w określonym czasie. Najwyższy priorytet
ma wyjątek "Reset", który występuje podczas włączania/resetowania systemu lub po całkowitej
i nieodwracalnej jego awarii.

Wyjątki dzieli się na dwa podstawowe rodzaje: programowe (wewnętrzne) oraz sprzętowe (zewnętrzne).