Mikroprocesor MC68000 - posiada niezależne magistrale danych (16 bitów) i adresową (24 bity) co poprzez mniejszą złożoność układu prowadzi do zwiększenia szybkości działania. 24-bitowa szyna adresowa umożliwia bezpośrednie adresowanie 16 MB pamięci.
Rodzina mikroprocesorów 68000 nie ma wyróżnionego wśród rejestrów akumulatora. Funkcje tę może pełnić dowolny z ośmiu dostępnych 32-bitowych rejestrów danych D0-D7. Dane przechowywane w tych rejestrach mogą być:
-niezależnymi bitami - 32 bity,
-liczbami BCD (4-bity) - 8 liczb,
-słowami words (16-bitów) - 2 słowa,
-podwójnymi słowami long words (32-bity) - 1 słowo.
Załadowanie danej do rejestru danych o rozmiarze mniejszym od 32 bitów nie powoduje (tak jak w rejestrach adresowych) znakowego rozszerzenia tej danej do 32 bitów. Oznacza to, że górna część rejestru pozostaje niezmieniona.
Rejestry danych nie mogą być wykorzystane do adresowania pamięci. Są one używane jako tymczasowe komórki pamięci, w których przechowywać można dane. Wiele instrukcji wymaga, aby rejestry danych zawierały jeden lub więcej operandów danej instrukcji.
Rejestry A0-A6 to 32-bitowe rejestry adresowe, które można adresować programowo. Rejestr A7 to de facto dwa rejestry 32-bitowe, z których tylko jeden działa w danym momencie. Podczas pracy procesora w trybie użytkownika oznaczenie A7 dotyczy tzw. wskaźnika stosu użytkownika (USP), natomiast podczas pracy procesora w trybie nadzorcy oznaczenie A7 dotyczy tzw. wskaźnika stosu nadzorcy (SSP). Tworzony stos rozciąga się w dół pamięci.
Rejestry adresowe mogą być również używane jako rejestry 16-bitowe. Podczas ładowania do rejestru adresowego 16-bitowego słowa, słowo to zostaje wcześniej znakowo rozszerzone do 32 bitów. Rejestry adresowe nie mogą być używane jako rejestry 8-bitowe.
Rejestry adresowe używane są jako tymczasowe miejsca przechowywania adresów pamięci. Mogą być one wykorzystane w instrukcjach odnoszących się do pamięci, w celu określenia adresu, pod którym znajduje się dana.
Kolejnymi rejestrami są:
- 32-bitowy licznik programu PC (Program Counter). Licznik programu zawsze zawiera adres następnej do wykonania instrukcji. W chwili wykonywania danej instrukcji zostaje on zwiększony o taką wartość, żeby wskazywać następną instrukcję, która ma być wykonana.
-16-bitowy rejestr statusowy (rejestr stanu) SR (Status Register) podzielony na dwa bajty :
systemowy i użytkownika. Bajt systemowy (bity od 8 do 15 rejestru statusowego) : -Bit 15 stanowi sprzętową pomoc dla debugerów. Zwany jest on bitem śledzenia (Trace bit). Umożliwia on przejmowanie sterowania przez debuger po wykonaniu każdej kolejnej instrukcji śledzonego programu. -Bit 13 używany jest do kontrolowania dostępu do określonych instrukcji i do bajtu systemowego rejestru statusowego. Bit ten jest nazywany bitem nadzorcy (Supervisor bit). Jeśli bit ten jest ustawiony, dostęp jest dozwolony. Gdy jest on wyzerowany oznacza to, że procesor pracuje w trybie użytkownika. -Bity 10 do 8 zwane są maską przerwań. Określają one priorytet obsługiwanego aktualnie przerwania. Pozostałe bity bajtu systemowego nie są w procesorze 68000 używane. -Bajt użytkownika (bity od 0 do 7 rejestru statusowego): Bajt ten zwany jest rejestrem kodów warunków CCR (Condition Codes Register). Bajt użytkownika zawiera zestaw bitów zwanych kodami warunków, które używane są do zapisywania informacji dotyczących poprzednio wykonywanych instrukcji. W bajcie użytkownika zdefiniowane są następujące bity: Bit 0, bit przeniesienia C (Carry). Bit 1, bit nadmiaru V (Overflow). Bit 2, bit zera (Zero). Bit 3, bit mniejszości od zera (Negative). Bit 4, bit rozszerzenia X (Extend). Jest on kopią bitu C.
Opis wyprowadzeń i sygnałów
Sygnał
Opis sygnału
Nr wyprowadzenia
A0-A23 Szyna adresowa, trzystanowa 29-48,50-52
D0-D15 Szyna danych, dwukierunkowa, trzystanowa 1-5,54-64
R/W Zapis/odczyt (zapis - niski poziom) - wejście 9
AS Strob adresu (wyjście) 6
UDS, LDS Stroby danych 7,8
DTACK Potwierdzenie transmisji danych (wyjście) 10
BR Żądanie dostępu do magistrali (wejście) 13
BG Potwierdzenie dostępu do magistrali (wyjście) 11
BGACK Potwierdzenie dostępu do magistrali (wejście) 12
IPL0-IPL2 Sterowanie przerwaniami (wejście) 23-25
BERR Błąd magistrali (wejście) 22
RESET Zerowanie systemu (wejście) 18
HALT Zatrzymanie (wejście) 17
E Akwizycja sygnału zegara (wejście) 20
VMA Adres ważny (wyjście) 19
VPA Ważne dane z układu peryferyjnego (wejście) 21
FC0-FC1 Stany procesora (wyjścia) 26-28
CLK Zegar systemowy (wejście) 15
Ucc, GND Zasilanie (wejścia) 49,16
Obsługa przerwań
Osługę zdarzeń wyjątkowych inicjują:
przerwania sprzętowe,
sygnały błędów układowych (np. BERR),
pułapki programowe (np. generowane automatycznie przy dzieleniu przez zero).
Następuje wówczas przełączenie w tryb systemowy i obsługa danego przerwania. Powrót do trybu użytkowego następuje po wystąpieniu rozkazu RET.
O priorytecie danego przerwania sprzętowego decydują sygnały na wejściach IPL0-IPL2.
Istnieje 256 lokacji wektorów przerwań, z których każda zajmuje po 4 bajty. Daje to zatem 1024 bajtów pamięci. Aktualny adres wektora przerwań otrzymuje się dodając do zawartości rejestru bazowego, przesunięcia.
Nr przerwania
Przesunięcie
Opis
0 000 Inicjacja wskaźnika stosu
1 004 Inicjacja licznika rozkazów
2 008 Błąd magistrali
3 00C Błąd adresu
4 010 Nieprawidłowa instrukcja
5 014 Dzielenie przez zero
6 018 Rozkazy CHK lub CHK2
7 01C Rozkazy TRAPcc, TRAPV
8 020 Naruszenie praw dostępu
9 024 Śledzenie
10 028 Emulator linii A (1010)
11 02C Emulator linii F (1111)
12 030 Zarezerwowane
13 034 Błąd protokołu koprocesora
14 038 Błąd formatu
15 03C Nie zainicjowany wektor przerwań
16-23 040-05C Zarezerwowane
24 060 Fałszywe przerwanie
25 064 Autowektor poziom 1
26 068 Autowektor poziom 2
27 06C Autowektor poziom 3
28 070 Autowektor poziom 4
29 074 Autowektor poziom 5
30 078 Autowektor poziom 6
31 07C Autowektor poziom 7
32-47 080-0BC Wektory rozkazów TRAP #0 - TRAP#15
48 0C0 Koprocesor, nie żądany skok / ustawienie
49 0C4 Koprocesor, nie dokładny wynik
50 0C8 Koprocesor, dzielenie przez zero
51 0CC Koprocesor , niedomiar
52 0D0 Koprocesor, błąd argumentu
53 0D4 Koprocesor, nadmiar
54 0D8 Koprocesor, sygnalizacja NAN
55 0DC Zarezerwowane
56 0E0 Błąd konfiguracji MMU (układu zarządzenia pamięcią)
57-63 0E4-0FC Zarezerwowane
64-255 100-3FC Definiowane przez użytkownika
Lista instrukcji
Procesor posiada 56 rozkazów o kodach 16-bitowych:
[rodzaj operacji] [adres źródłowy], [adres docelowy]
Instrukcje przesyłania danych przenoszą dane z jednego miejsca systemu 68000 do drugiego. Przesłaniu podlegają dane o rozmiarze jednego, dwóch lub czterech bajtów pomiędzy rejestrami, rejestrem i pamięcią oraz pomiędzy dwoma lokacjami pamięci. Do tej klasy należą instrukcje:
EXG
LEA
LINK
MOVE, MOVEM, MOVEP, MOVEQ
PEA
SWAP
UNLK
Instrukcje arytmetyki całkowitoliczbowej przeprowadzają podstawowe operacje w kodzie uzupełnienia do dwóch na danych binarnych. Należą do nich:
ADD, ADDA, ADDI, ADDQ, ADDX
CLR
CMP, CMPA, CMPI, CMPM
DIVS, DIVU
EXT
MULS, MULU
NEG, NEGX
SUB, SUBA, SUBI, SUBQ, SUBX
TAS
TST
Instrukcje logiczne. Grupa instrukcji logicznych obejmuje instrukcje wykonujące operacje w arytmetyce Boole'a na danych binarnych. Do grupy tej należą:
AND, ANDI
OR, ORI
EOR, EORI
Instrukcje przesunięć i obrotów obejmują przesunięcia i obroty arytmetyczne oraz logiczne:
ASL, ASR
LSL, LSR
ROL, ROR
ROXL, ROXR
Instrukcje manipulacji bitami operują na pojedynczym bicie określonego bajtu. Należą do nich:
BTST
BSET
BCLR
BCHG
Instrukcje BCD operują na liczbach zapisanych w kodzie BCD. Mikroprocesor 68000 używa tylko trzech tego typu instrukcji:
ABCD
SBCD
NBCD
Instrukcje sterowania programem modyfikują sposób realizacji programu, zmieniając kolejność wykonania poszczególnych segmentów programu. Grupa ta zawiera instrukcje:
Bcc
DBcc
Scc
BSR, JSR
RTS
JMP
RTR
Instrukcje kontroli systemu oddziałują na hardware systemu 68000. Są to instrukcje uprzywilejowane, co oznacza, że mogą być wykonane jedynie w trybie nadzorcy. Do grupy tej należą:
MOVE USP
RESET
RTE
STOP
CHK, TRAPV
TRAP
Organizacja danych w pamięci
Dane zapisane w postaci binarnej mogą mieć rozmiar 8, 16 lub 32 bitów. Tego typu dane nazywa się odpowiednio bajtami, słowami i długimi słowami. Większość instrukcji, które wykonują operacje na liczbach binarnych przyjmuje każdy z powyższych trzech rozmiarów danych. Na przykład instrukcja MOVE, przesyłająca daną binarną z jednego miejsca do drugiego, posiada trzy formy:
MOVE.B przesyła daną o długości bajtu,
MOVE.W przesyła daną o długości słowa,
MOVE.L przesyła daną o długości długiego słowa.
Zapis słowa lub długiego słowa w pamięci zorganizowany jest w ten sposób, że bajty danego słowa lub długiego słowa zapisywane są w kolejności malejącej. Najbardziej znaczący bajt słowa lub długiego słowa znajduje się pod najniższym adresem. Należy zwrócić na to uwagę, ponieważ wiele komputerów nie zapisuje wielobajtowych liczb binarnych w ten sam sposób. W szczególności 8080, Z80, 6502 i rodzina mikroprocesorów 8088/86 zapisuje słowa i długie słowa w zgoła odwrotnej kolejności, tzn. w ten sposób, że najmłodszy bajt zapisywany jest pod najniższym adresem.
Tryby adresowania
Mikroprocesor MC68000 dysponuje 8 trybami adresowania, zaś w obrębie niektórych z nich istnieją podtryby co prowadzi w konsekwencji do ogólnej liczby 14 trybów.
Lp. Nazwa trybu Działanie Przykład
1 Adresowania bezpośredniego rejestru danych D0 := D1 MOVE D1, D0
2 Adresowania bezpośredniego rejestru adresowego D0 := A1 MOVE A1, D0
3 Adresowania pośredniego rejestrem adresowym D0 := (A1) MOVE (A1), D0
4 Adresowania pośredniego rejestrem adresowym z postinkrementacją D0 := (A1) A1:= A1 + N; N=1,2,4 MOVE (A1)+, D0
5 Adresowania pośredniego rejestrem adresowym z predekrementacją A1:= A1 - N; N=1,2,4 D0 := (A1) MOVE -(A1), D0
6 Adresowania pośredniego rejestrem adresowym z przesunięciem D0 := (A1+4) MOVE 4(A1), D0
7 Adresowania pośredniego licznikiem programu z przesunieciem D0 := (PC+4) MOVE 4(PC), D0
8 Adresowania pośredniego rejestrem adresowym z indeksem D0 := (A1+4) + (D1) MOVE 4(A1,D1.L), D0
9 Adresowania pośredniego licznikiem programu z indeksem D0 := (PC+4) + (D1) MOVE 4(PC,D1.L), D0
10 Adresowanie absolutne krótkie D0 := ($1000) - 16 bitów MOVE $1000, D0
11 Adresowania absolutnego długiego D0 := ($10000) - 32 bity MOVE $10000, D0
12 Adresowanie natychmiastowe (proste) krótkie D0 := $10[zasłonięte]000, D0 MOVE #$10[zasłonięte]000, D0
13 Adresowanie natychmiastowe (proste) długie D0 := $10[zasłonięte]000, D0 MOVE #$10[zasłonięte]000, D0
14 Adresowanie implikowane (niejawne) D0 := SR, USP, SSP, PC