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-A23Szyna adresowa, trzystanowa29-48,50-52
D0-D15Szyna danych, dwukierunkowa, trzystanowa1-5,54-64
R/WZapis/odczyt (zapis - niski poziom) - wejście9
ASStrob adresu (wyjście)6
UDS, LDSStroby danych7,8
DTACKPotwierdzenie transmisji danych (wyjście)10
BRŻądanie dostępu do magistrali (wejście)13
BGPotwierdzenie dostępu do magistrali (wyjście)11
BGACKPotwierdzenie dostępu do magistrali (wejście)12
IPL0-IPL2Sterowanie przerwaniami (wejście)23-25
BERRBłąd magistrali (wejście)22
RESETZerowanie systemu (wejście)18
HALTZatrzymanie (wejście)17
EAkwizycja sygnału zegara (wejście)20
VMAAdres ważny (wyjście)19
VPAWażne dane z układu peryferyjnego (wejście)21
FC0-FC1Stany procesora (wyjścia)26-28
CLKZegar systemowy (wejście)15
Ucc, GNDZasilanie (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
0000Inicjacja wskaźnika stosu
1004Inicjacja licznika rozkazów
2008Błąd magistrali
300CBłąd adresu
4010Nieprawidłowa instrukcja
5014Dzielenie przez zero
6018Rozkazy CHK lub CHK2
701CRozkazy TRAPcc, TRAPV
8020Naruszenie praw dostępu
9024Śledzenie
10028Emulator linii A (1010)
1102CEmulator linii F (1111)
12030Zarezerwowane
13034Błąd protokołu koprocesora
14038Błąd formatu
1503CNie zainicjowany wektor przerwań
16[zasłonięte]23040CZarezerwowane
24060Fałszywe przerwanie
25064Autowektor poziom 1
26068Autowektor poziom 2
2706CAutowektor poziom 3
28070Autowektor poziom 4
29074Autowektor poziom 5
30078Autowektor poziom 6
3107CAutowektor poziom 7
32-47080-0BCWektory rozkazów TRAP #0 - TRAP#15
480C0Koprocesor, nie żądany skok / ustawienie
490C4Koprocesor, nie dokładny wynik
500C8Koprocesor, dzielenie przez zero
510CCKoprocesor , niedomiar
520D0Koprocesor, błąd argumentu
530D4Koprocesor, nadmiar
540D8Koprocesor, sygnalizacja NAN
550DCZarezerwowane
560E0Błąd konfiguracji MMU (układu zarządzenia pamięcią)
57-630E4-0FCZarezerwowane
64-[zasłonięte]100-3FCDefiniowane 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 trybuDziałaniePrzykład
1Adresowania bezpośredniego rejestru danychD0 := D1MOVE D1, D0
2Adresowania bezpośredniego rejestru adresowegoD0 := A1MOVE A1, D0
3Adresowania pośredniego rejestrem adresowymD0 := (A1)MOVE (A1), D0
4Adresowania pośredniego rejestrem adresowym z postinkrementacjąD0 := (A1)A1:= A1 + N; N=1,2,4 MOVE (A1)+, D0
5Adresowania pośredniego rejestrem adresowym z predekrementacjąA1:= A1 - N; N=1,2,4D0 := (A1) MOVE -(A1), D0
6Adresowania pośredniego rejestrem adresowym z przesunięciemD0 := (A1+4)MOVE 4(A1), D0
7Adresowania pośredniego licznikiem programu z przesunieciemD0 := (PC+4)MOVE 4(PC), D0
8Adresowania pośredniego rejestrem adresowym z indeksemD0 := (A1+4) + (D1)MOVE 4(A1,D1.L), D0
9Adresowania pośredniego licznikiem programu z indeksemD0 := (PC+4) + (D1)MOVE 4(PC,D1.L), D0
10Adresowanie absolutne krótkieD0 := ($1000) - 16 bitówMOVE $1000, D0
11Adresowania absolutnego długiegoD0 := ($10000) - 32 bityMOVE $10000, D0
12Adresowanie natychmiastowe (proste) krótkieD0 := $10[zasłonięte]000, D0MOVE #$10[zasłonięte]000, D0
13Adresowanie natychmiastowe (proste) długieD0 := $10[zasłonięte]000, D0MOVE #$10[zasłonięte]000, D0
14Adresowanie implikowane (niejawne)D0 := SR, USP, SSP, PC