Motorola 68000 - Motorola 68000

Architektura Motorola 68000
Projektant Motorola
Bity 16/32-bitowy
Wprowadzono 1979 ; 42 lata temu ( 1979 )
Projekt CISC
Rozgałęzienia Kod stanu
Endianizm Duża
Rejestry
Procesor Motorola 68000
Informacje ogólne
Wystrzelony 1979
Zaprojektowany przez Motorola
Wydajność
Szerokość danych 16 bitów
Szerokość adresu 24 bity
Architektura i klasyfikacja
Zestaw instrukcji Seria Motorola 68000
Specyfikacje fizyczne
Tranzystory
Pakiet(y)
Historia
Następca Motorola 68010

Motorola 68000 ( sześćdziesiąt osiem tysięcy ; zwana także m68k , Motorola 68k , sześćdziesiąt osiem-Kay ) jest 16/32-bit złożony zestaw instrukcji komputera (CISC) mikroprocesor , wprowadzony w 1979 roku przez Motorola Semiconductor Products Sector.

Projekt implementuje 32-bitowy zestaw instrukcji , z 32-bitowymi rejestrami i 16-bitową wewnętrzną szyną danych . Autobus adres jest 24 bitów i nie używa segmentacja pamięci , która ułatwiła programu. Wewnętrznie wykorzystuje 16-bitową jednostkę arytmetyczno-logiczną danych (ALU) i dwie kolejne 16-bitowe jednostki ALU używane głównie do adresów i ma 16-bitową zewnętrzną szynę danych . Z tego powodu Motorola nazwała go procesorem 16/32-bitowym.

Jako jeden z pierwszych powszechnie dostępnych procesorów z 32-bitowym zestawem instrukcji i działający ze stosunkowo wysokimi prędkościami w tamtych czasach, 68k był popularnym projektem w latach 80. XX wieku. Był szeroko stosowany w nowej generacji komputerów osobistych z graficznym interfejsem użytkownika , w tym Macintosh , Amiga , Atari ST i X68000 . Konsola Mega Drive z 1988 roku jest również napędzana przez 68000.

68k wkrótce powiększono o kolejnych członków rodziny, wdrażając pełne 32-bitowe jednostki ALU w ramach rozwijającej się serii Motorola 68000 . Oryginalny 68k jest generalnie zgodny z oprogramowaniem w przód z resztą linii, mimo że jest ograniczony do 16-bitowej magistrali zewnętrznej.

Przedpremierowy układ XC68000 wyprodukowany w 1979 r.
Matryca Motoroli 68000

Po 42 latach produkcji architektura 68000 jest nadal w użyciu.

Historia

Motorola MC68000 ( pakiet bezołowiowego nośnika chipów (CLCC))
Motorola MC68000 ( pakiet plastikowych nośników chipów (PLCC))

Pierwszym szeroko produkowanym procesorem Motoroli był Motorola 6800 . Chociaż sprawny projekt, został przyćmiony przez mocniejsze konstrukcje, takie jak Zilog Z80 i tańsze konstrukcje, takie jak MOS Technology 6502 (MOS 6502). Gdy perspektywy sprzedaży modelu 6800 przygasły, Motorola rozpoczęła nowy projekt, aby go zastąpić. Stało się to projektem Motorola Advanced Computer System on Silicon, czyli MACSS, rozpoczętym w 1976 roku.

Celem MACSS było opracowanie całkowicie nowej architektury bez wstecznej kompatybilności z 6800. Ostatecznie zachowuje tryb zgodności protokołu magistrali dla istniejących urządzeń peryferyjnych 6800, a także stworzono wersję z 8-bitową magistralą danych. Jednak projektanci skupili się głównie na przyszłości lub kompatybilności naprzód , co daje projektowi 68000 przewagę nad późniejszymi 32-bitowymi architekturami zestawów instrukcji (ISA). Na przykład rejestry procesora mają szerokość 32 bity, chociaż niewiele samodzielnych struktur w samym procesorze działa jednocześnie na 32 bitach. Zespół MACSS w dużym stopniu wykorzystał wpływ konstrukcji procesorów minikomputerów , takich jak systemy PDP-11 i VAX , które są podobnie oparte na mikrokodzie .

W połowie lat 70. producenci mikroprocesorów 8-bitowych ścigali się, aby wprowadzić generację 16-bitową. National Semiconductor jako pierwszy wprowadził swoje procesory IMP-16 i PACE w latach 1973-1975, ale miały one problemy z szybkością. Intel pracował nad swoim zaawansowanym 16/32-bitowym Intel iAPX 432 (alias 8800) od 1975 roku, a Intel 8086 od 1976 (został wprowadzony w 1978, ale stał się powszechny w postaci prawie identycznego 8088 w IBM PC kilka lat później). Późne przybycie na arenę 16-bitową zapewnia nowemu procesorowi więcej tranzystorów (około 40 000 aktywnych w porównaniu do 20 000 aktywnych w 8086), 32-bitowe makroinstrukcje i ogólnie uznaną łatwość użytkowania.

Oryginalny MC68000 został wyprodukowany przy użyciu procesu HMOS o rozmiarze funkcji 3,5  µm . Formalnie wprowadzone we wrześniu 1979 r., pierwsze próbki zostały wydane w lutym 1980 r., a chipy produkcyjne były dostępne bez recepty w listopadzie. Początkowe stopnie szybkości to 4, 6 i 8  MHz . Układy 10 MHz stały się dostępne w 1981 r., a układy 12,5 MHz w czerwcu 1982 r. Wersja 16,67 MHz „12F” MC68000, najszybsza wersja oryginalnego układu HMOS, została wyprodukowana dopiero pod koniec lat 80. XX wieku.

IBM rozważał 68000 dla IBM PC, ale wybrał Intel 8088, ponieważ 68000 nie był gotowy; Walden C. Rhines napisał, że w ten sposób „Motorola, ze swoją doskonałą technologią, przegrała najważniejszy konkurs projektowy ostatnich 50 lat”. (IBM Instruments przez krótki czas sprzedał laboratoryjne systemy komputerowe IBM System 9000 oparte na 68000 ). Zestaw instrukcji 68k jest szczególnie dobrze przystosowany do implementacji Uniksa, a 68000 i jego następcy stały się dominującymi procesorami dla stacji roboczych opartych na systemie Unix, w tym stacji roboczych Sun i Apollo/ Stacje robocze domeny . 68000 jest również używany do komputerów masowych, takich jak Apple Lisa , Macintosh , Amiga i Atari ST . 68000 jest używany w systemach Microsoft Xenix , a także we wczesnym serwerze opartym na NetWare Unix. Model 68000 jest używany w pierwszej generacji stacjonarnych drukarek laserowych , w tym w oryginalnych drukarkach laserowych Apple Inc. LaserWriter i HP LaserJet .

W 1981 roku Motorola wprowadziła Motorolę 68000 Educational Computer Board , jednopłytkowy komputer do celów edukacyjnych i szkoleniowych, który oprócz samego 68000 zawierał pamięć, urządzenia I/O, programowalny timer i obszar do owijania przewodów dla niestandardowych obwodów. Płytka była używana w amerykańskich uczelniach jako narzędzie do nauki programowania w asemblerze do wczesnych lat 90-tych.

W 1982 roku 68000 otrzymał niewielką aktualizację architektury zestawu instrukcji (ISA) w celu obsługi pamięci wirtualnej i dostosowania do wymagań wirtualizacji Popka i Goldberga . Zaktualizowany układ nazywa się 68010 . Dodaje również nowy „tryb pętli”, który przyspiesza małe pętle i zwiększa ogólną wydajność o około 10% przy tych samych częstotliwościach zegara. Kolejna rozszerzona wersja, która eksponuje 31 bitów szyny adresowej, była również produkowana w niewielkich ilościach jako 68012 .

Aby obsługiwać tańsze systemy i aplikacje sterujące z mniejszymi rozmiarami pamięci, Motorola wprowadziła 8-bitowy kompatybilny MC68008 , również w 1982 roku. Jest to 68000 z 8-bitową magistralą danych i mniejszą (20-bitową) magistralą adresową. Po 1982 roku Motorola poświęciła więcej uwagi projektom 68020 i 88000 .

Drugie pozyskiwanie

Hitachi HD68000
Thomson TS68000

Kilka innych firm było producentami drugiego źródła HMOS 68000. Należą do nich Hitachi (HD68000), który zmniejszył rozmiar funkcji do 2,7 µm dla swojej wersji 12,5 MHz, Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson / SGS-Thomson (pierwotnie EF68000, a później TS68000) i Toshiba (TMP68000). Toshiba była również producentem drugiego źródła CMOS 68HC000 (TMP68HC000).

Zaszyfrowane warianty 68000, takie jak Hitachi FD1089 i FD1094, przechowują klucze deszyfrujące dla kodów operacji i danych kodów operacji w pamięci podtrzymywanej bateryjnie i były używane w niektórych systemach arkadowych Sega, w tym w Systemie 16, w celu zapobiegania piractwu i nielegalnym grom.

Wersje CMOS

Motorola MC68HC000LC8

68HC000, pierwsza wersja 68000 CMOS , została zaprojektowana przez Hitachi i wprowadzona wspólnie w 1985 roku. Wersja Motoroli nazywa się MC68HC000, a Hitachi to HD68HC000. 68HC000 oferuje prędkości 8–20 MHz. Z wyjątkiem użycia obwodów CMOS, zachowywał się identycznie jak HMOS MC68000, ale zmiana na CMOS znacznie zmniejszyła jego zużycie energii. Oryginalny HMOS MC68000 zużywał około 1,35  wata przy temperaturze otoczenia 25  °C , niezależnie od szybkości zegara, podczas gdy MC68HC000 zużywał tylko 0,13 wata przy 8 MHz i 0,38 wata przy 20 MHz. (W przeciwieństwie do obwodów CMOS, HMOS nadal pobiera energię w stanie bezczynności, więc zużycie energii niewiele się zmienia w zależności od częstotliwości zegara). Apple wybrał 68HC000 do użytku w przenośnym Macintoshu .

Motorola zastąpiła MC68008 MC68HC001 w 1990 roku. Ten chip przypomina 68HC000 pod wieloma względami, ale jego magistrala danych może działać w trybie 16-bitowym lub 8-bitowym, w zależności od wartości pinu wejściowego podczas resetowania. Tym samym, podobnie jak 68008, może być stosowany w systemach z tańszymi pamięciami 8-bitowymi.

Późniejsza ewolucja 68000 koncentrowała się na bardziej nowoczesnych wbudowanych aplikacjach sterujących i wbudowanych urządzeniach peryferyjnych. 68EC000 Chip i SCM68000 rdzeń usunąć autobus M6800 obwodowy i wyklucza przejście od SR instrukcją z programów trybu użytkownika, dzięki czemu 68EC000 i 68SEC000 jedyne 68000 CPU nie 100% kodu przedmiot zgodny z poprzednimi 68000 procesorów podczas uruchamiania w trybie użytkownika. Po uruchomieniu w trybie nadzorcy nie ma różnicy. W 1996 roku Motorola unowocześniła samodzielny rdzeń za pomocą w pełni statycznych obwodów, pobierając tylko 2  µW w trybie niskiego poboru mocy, nazywając go MC68SEC000.

Motorola zaprzestała produkcji HMOS MC68000 i MC68008 w 1996 roku, ale jej spółka spin-off Freescale Semiconductor nadal produkowała MC68HC000, MC68HC001, MC68EC000 i MC68SEC000, a także mikrokontrolery MC68302 i MC68306 oraz późniejsze wersje rodziny DragonBall . Potomkowie architektury 68000, rodziny 680x0 , CPU32 i Coldfire , również były nadal w produkcji. Niedawno, wraz z fabrycznym zamknięciem Sendai, wszystkie części 68HC000, 68020, 68030 i 68882 zostały wycofane z produkcji, pozostawiając tylko 68SEC000 w produkcji.

Jako rdzeń mikrokontrolera

Ponieważ został zastąpiony przez „prawdziwe” 32-bitowe mikroprocesory, 68000 jest używany jako rdzeń wielu mikrokontrolerów . W 1989 roku Motorola wprowadziła procesor komunikacyjny MC68302 .

Aplikacje

Dwa procesory Hitachi 68HC000 używane na płytce drukowanej do gier zręcznościowych

W momencie wprowadzenia 68000 był po raz pierwszy używany w systemach o wysokiej cenie, w tym w wieloużytkownikowych mikrokomputerach, takich jak WICAT 150, wczesne komputery Alpha Microsystems , Sage II/IV , Tandy 6000/ TRS-80 Model 16 i Fortune 32:16 ; pojedynczego użytkownika stacji roboczych , takich jak Hewlett-Packard jest HP 9000 Series 200 systemach pierwszych Apollo / domena systemów, Sun Microsystems ' SUN-1 i Corvus Pojęcie ; i graficzne terminale takie jak Digital Equipment Corporation „s VAXstation 100 i Silicon Graphics ” IRIS 1000 i 1200. uniksowych systemach szybko przeniósł się do bardziej zdolnych późniejszych pokoleń linii 68k, które pozostały popularne w tym rynku w 1980 roku.

W połowie lat 80. spadające koszty produkcji sprawiły, że 68000 stał się opłacalny do użytku w komputerach osobistych i domowych , zaczynając od Apple Lisa i Macintosha , a następnie Commodore Amiga , Atari ST i Sharp X68000 . Z drugiej strony, mikrokomputer Sinclair QL był najważniejszym komercyjnie rozwiązaniem 68008, wraz z jego pochodnymi, takimi jak terminal biznesowy ICL One Per Desk . Helix Systems (Missouri, Stany Zjednoczone) zaprojektował rozszerzenie magistrali SWTPC SS-50 , SS-64 i wyprodukował systemy oparte na procesorze 68008.

Podczas gdy przyjęcie RISC i x86 wyparło serię 68000 jako procesory do komputerów stacjonarnych/stacji roboczych, procesory te znalazły znaczne zastosowanie w aplikacjach wbudowanych . Na początku lat 90. ilość 68000 procesorów można było kupić za mniej niż 30  USD za część.

Producenci gier wideo wykorzystywali 68000 jako podstawę wielu gier arkadowych i domowych konsol do gier : Atari's Food Fight , od 1982 roku, była jedną z pierwszych gier arkadowych opartych na 68000. Inne zawarte Sega 's Systemu 16 , Capcom ' s systemu CP i CPS-2 oraz SNK „s Neo Geo . Pod koniec 1980 roku 68.000 był tani wystarczająco do konsol do domu moc grze, takie jak firmy Sega Mega jazdy / Genesis konsoli, a także Mega CD przywiązanie do niej (System Mega CD ma trzy procesory, dwa z nich 68000s). Wieloprocesorowa konsola Atari Jaguar z 1993 roku używała 68000 jako układu pomocniczego, chociaż niektórzy programiści używali go jako głównego procesora ze względu na znajomość. Wieloprocesorowa konsola Sega Saturn z 1994 roku używała 68000 jako koprocesora dźwięku (podobnie jak Mega Drive/Genesis używa Z80 jako koprocesora do celów dźwiękowych i/lub innych). Do 1995 roku 68000 stało się przenośną konsolą do gier Sega Genesis Nomad jako jej główny procesor.

Niektóre gry arkadowe (takie jak Steel Gunner i inne oparte na Namco System 2 ) używają konfiguracji z dwoma procesorami 68000, istnieją również systemy z potrójną konfiguracją procesorów 68000 (takie jak Galaxy Force i inne oparte na Sega Y Board), wraz z konfiguracja z czterema procesorami 68000, która była używana przez Jaleco (jeden 68000 do dźwięku ma niższe taktowanie w porównaniu do innych procesorów 68000) w grach takich jak Big Run i Cisco Heat ; inny, piąty 68000 (z inną częstotliwością taktowania niż pozostałe 68000 procesorów) został użyty w grze zręcznościowej Jaleco Wild Pilot do przetwarzania wejścia/wyjścia (I/O).

68000 odniósł również wielki sukces jako wbudowany kontroler. Już w 1981 r. drukarki laserowe, takie jak Imagen Imprint-10, były sterowane przez zewnętrzne płyty wyposażone w 68000. Pierwszy HP LaserJet , wprowadzony w 1984 r., miał wbudowany 8 MHz 68000. Inni producenci drukarek przyjęli 68000, w tym Apple wraz z wprowadzeniem LaserWriter w 1985 roku, pierwszej drukarki laserowej PostScript . Model 68000 był nadal szeroko stosowany w drukarkach przez resztę lat 80., utrzymując się w latach 90. w drukarkach z niższej półki.

Model 68000 odniósł również sukces w dziedzinie przemysłowych systemów sterowania. Wśród systemów, które skorzystały z posiadania procesora 68000 lub pochodnego, były rodziny programowalnych sterowników logicznych (PLC) wyprodukowanych przez Allen-Bradley , Texas Instruments, a następnie, po przejęciu tego oddziału TI, przez Siemensa . Użytkownicy takich systemów nie akceptują starzenia się produktów w takim samym tempie jak użytkownicy krajowi i jest całkiem prawdopodobne, że pomimo zainstalowania ich ponad 20 lat temu, wiele sterowników opartych na 68000 będzie nadal działać niezawodnie do końca XXI wieku.

W wielu oscyloskopach cyfrowych z lat 80. 68000 był używany jako procesor wyświetlania przebiegów; niektóre modele, w tym LeCroy 9400/9400A, wykorzystują również 68000 jako procesor matematyczny przebiegów (w tym dodawanie, odejmowanie, mnożenie i dzielenie dwóch przebiegów/odniesień/pamięci przebiegów), a niektóre oscyloskopy cyfrowe wykorzystujące 68000 (w tym 9400/9400A ) może również wykonywać funkcje szybkiej transformacji Fouriera na przebiegu.

W 683XX mikrokontrolery oparte na architekturze 68000, są wykorzystywane w sprzętu telekomunikacyjnego, telewizyjne dekodery, laboratorium i instrumentów medycznych, a nawet sieci i podręczne kalkulatory. MC68302 i jego pochodne zostały wykorzystane w wielu produktach telekomunikacyjnych Cisco, 3com, Ascend, Marconi, Cyclades i innych. Wcześniejsze modele Palm PDA i Handspring Visor wykorzystywały DragonBall , pochodną 68000. AlphaSmart używał rodziny DragonBall w późniejszych wersjach swoich przenośnych edytorów tekstu. Firma Texas Instruments wykorzystała 68000 w swoich wysokiej klasy kalkulatorach graficznych, seriach TI-89 i TI-92 oraz Voyage 200 .

Zmodyfikowana wersja 68000 stanowiła podstawę emulatora sprzętowego IBM XT/ 370 procesora System 370.

Architektura

Rejestry Motorola 68000
3 1 ... 2 3 ... 1 5 ... 0 7 ... 0 0 (pozycja bitowa)
Rejestry danych
D0 Dane 0
D1 Dane 1
D2 Dane 2
D3 Dane 3
D4 Dane 4
D5 Dane 5
D6 Dane 6
D7 Dane 7
Rejestry adresowe
  A0                           Adres 0
  A1                           Adres 1
  A2                           adres 2
  A3                           Adres 3
  A4                           Adres 4
  A5                           Adres 5
  A6                           Adres 6
Wskaźniki stosu
  A7 / USP                        Wskaźnik stosu (użytkownik)
  A7' / SSP                        Wskaźnik stosu (nadzorca)
Licznik programu
  PC                           Licznik programu
Rejestr kodów warunków
  1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (pozycja bitowa)
  T S m 0 i 0 0 0 x n Z V C CCR

Szyna adresowa

68000 ma 24-bitową zewnętrzną magistralę adresową i dwa sygnały wyboru bajtu „zastąpione” A0. Te 24 wiersze mogą zatem adresować 16 MB pamięci fizycznej z rozdzielczością bajtową. Przechowywanie i obliczanie adresów wykorzystuje wewnętrznie 32 bity; jednak 8 bitów adresu wyższego rzędu jest ignorowanych z powodu fizycznego braku pinów urządzenia. Pozwala to na uruchamianie oprogramowania napisanego dla logicznie płaskiej 32-bitowej przestrzeni adresowej , przy jednoczesnym dostępie tylko do 24-bitowej fizycznej przestrzeni adresowej. Intencją Motoroli z wewnętrzną 32-bitową przestrzenią adresową była kompatybilność naprzód, co umożliwiło napisanie oprogramowania 68000, które w pełni wykorzystywałoby późniejsze 32-bitowe implementacje zestawu instrukcji 68000.

Nie przeszkodziło to jednak programistom w pisaniu niekompatybilnego oprogramowania. Oprogramowanie „24-bitowe”, które odrzucało górny bajt adresu lub używało go do celów innych niż adresowanie, może zawieść w 32-bitowych implementacjach 68000. Na przykład wczesne (przed 7.0) wersje systemu Mac OS firmy Apple wykorzystywały wysoki bajt głównych wskaźników bloku pamięci do przechowywania flag, takich jak zablokowane i możliwe do usunięcia . Późniejsze wersje systemu operacyjnego przeniosły flagi do pobliskiej lokalizacji, a Apple rozpoczęło dostarczanie komputerów z „ 32-bitowymi czystymi ” ROM-ami, począwszy od wydania Mac IIci z 1989 roku.

Rodzina 68000 przechowuje w pamięci wielobajtowe liczby całkowite w kolejności big-endian .

Rejestry wewnętrzne

Jednostka centralna posiada osiem 32-bitowych rejestrów danych ogólnego przeznaczenia (D0-D7) i osiem rejestrów adresowych (A0-A7). Ostatnim rejestrem adresowym jest wskaźnik stosu , a asemblery akceptują etykietę SP jako równoważną A7. Pod wieloma względami była to wówczas duża liczba rejestrów. Był wystarczająco mały, aby umożliwić 68000 szybką reakcję na przerwania (nawet w najgorszym przypadku, gdy należało zapisać wszystkie 8 rejestrów danych D0–D7 i 7 rejestrów adresowych A0–A6, łącznie 15 rejestrów), a jednocześnie wystarczająco duży, aby wykonać większość obliczeń szybko, ponieważ można je wykonać w całości w procesorze bez zachowywania częściowych wyników w pamięci. (Należy zauważyć, że procedura wyjątku w trybie administratora może również zapisać wskaźnik stosu użytkownika A7, co łącznie daje 8 rejestrów adresów. Jednak konstrukcja wskaźnika podwójnego stosu (A7 i tryb administratora A7') w 68000 sprawia, że ​​jest to zwykle niepotrzebne, z wyjątkiem gdy przełączanie zadań jest wykonywane w systemie wielozadaniowym).

Posiadanie dwóch typów rejestrów pozwala na jednoczesny 32-bitowy adres i jedno 16-bitowe obliczanie danych. Powoduje to skrócenie czasu wykonywania instrukcji, ponieważ adresy i dane mogą być przetwarzane równolegle.

Rejestr statusu

68000 ma 16-bitowy rejestr stanu. Górne 8 bitów to bajt systemowy, a jego modyfikacja jest uprzywilejowana. Mniejsze 8 bitów to bajt użytkownika, znany również jako rejestr kodu warunku (CCR), a jego modyfikacja nie jest uprzywilejowana. Operacje porównawcze, arytmetyczne i logiczne 68000 modyfikują kody warunków w celu zapisania ich wyników do wykorzystania w późniejszych skokach warunkowych. Bity kodu warunku to „zero” (Z), „carry” (C), „przepełnienie” (V), „extend” (X) i „ujemne” (N). Na szczególną uwagę zasługuje flaga „extend” (X), ponieważ jest oddzielona od flagi przeniesienia . Pozwala to na oddzielenie dodatkowego bitu z operacji arytmetycznych, logicznych i przesunięcia od przeniesienia w celu zapewnienia przepływu sterowania i łączenia.

Zestaw instrukcji

Projektanci próbowali uczynić asembler ortogonalny . Oznacza to, że instrukcje są podzielone na operacje i tryby adresowania , a prawie wszystkie tryby adresowania są dostępne dla prawie wszystkich instrukcji. Istnieje 56 instrukcji i minimalny rozmiar instrukcji 16 bitów. Wiele instrukcji i trybów adresowania jest dłuższych i zawiera więcej bitów adresu lub trybu.

Poziomy uprawnień

Procesor, a później cała rodzina, implementuje dwa poziomy uprawnień. Tryb użytkownika daje dostęp do wszystkiego oprócz instrukcji uprzywilejowanych, takich jak kontrola poziomu przerwań. Uprawnienia nadzorcy dają dostęp do wszystkiego. Przerwanie zawsze staje się nadzorcą. Bit nadzorcy jest przechowywany w rejestrze stanu i jest widoczny dla programów użytkownika.

Zaletą tego systemu jest to, że poziom nadzorcy ma osobny wskaźnik stosu. Pozwala to systemowi wielozadaniowemu na używanie bardzo małych stosów do zadań, ponieważ projektanci nie muszą przydzielać pamięci wymaganej do przechowywania ramek stosu przy maksymalnym stosie przerwań.

Przerwania

CPU rozpoznaje siedem poziomów przerwań . Poziomy od 1 do 5 mają ściśle określone priorytety. Oznacza to, że przerwanie o wyższym numerze zawsze może przerwać przerwanie o niższym numerze. W rejestrze statusu instrukcja uprzywilejowana pozwala na ustawienie bieżącego minimalnego poziomu przerwań, blokując przerwania o niższym lub równym priorytecie. Na przykład, jeśli poziom przerwań w rejestrze stanu jest ustawiony na 3, wyższe poziomy od 4 do 7 mogą spowodować wyjątek. Poziom 7 to niemaskowalne przerwanie wyzwalane poziomem (NMI). Poziom 1 może zostać przerwany przez dowolny wyższy poziom. Poziom 0 oznacza brak przerwań. Poziom jest przechowywany w rejestrze stanu i jest widoczny dla programów poziomu użytkownika.

Przerwania sprzętowe są sygnalizowane do CPU za pomocą trzech wejść, które kodują najwyższy priorytet przerwań oczekujących. Oddzielny koder jest zwykle wymagany do kodowania przerwań, chociaż dla systemów, które nie wymagają więcej niż trzech przerwań sprzętowych, możliwe jest podłączenie sygnałów przerwań bezpośrednio do zakodowanych wejść kosztem większej złożoności oprogramowania. Kontroler przerwań może być tak prosty jak koder priorytetów 74LS148 lub może być częścią układu peryferyjnego o bardzo dużej skali integracji (VLSI), takiego jak MC68901 Multi-Function Peripheral (używany w komputerach Atari ST i Sharp X68000 ), który zapewniał również UART , zegar i równoległe wejścia/wyjścia.

„Tabela wyjątków” ( adresy wektorów przerwań tablicy wektorów przerwań) jest ustalona pod adresami od 0 do 1023, pozwalając na 256 wektorów 32-bitowych. Pierwszy wektor (RESET) składa się z dwóch wektorów, a mianowicie początkowego adresu stosu i początkowego adresu kodu. Wektory od 3 do 15 są używane do zgłaszania różnych błędów: błąd magistrali , błąd adresu, nieprawidłowa instrukcja , dzielenie przez zero , wektor CHK i CHK2, naruszenie uprawnień (w celu zablokowania eskalacji uprawnień ) i niektóre zarezerwowane wektory, które stały się emulatorem wiersza 1010, emulatorem wiersza 1111 oraz sprzętowy punkt przerwania . Wektor 24 rozpoczyna rzeczywiste przerwania: fałszywe przerwanie (brak potwierdzenia sprzętowego) i autowektory poziomu od 1 do 7, potem 16 wektorów TRAP, potem jeszcze kilka zarezerwowanych wektorów, a następnie wektory zdefiniowane przez użytkownika.

Ponieważ co najmniej wektor adresu kodu początkowego musi być zawsze ważny podczas resetowania, systemy zwykle zawierają pewną pamięć nieulotną (np. ROM ) zaczynając od adresu zero, aby zawierać wektory i kod ładowania początkowego . Jednak w przypadku systemu ogólnego przeznaczenia pożądane jest, aby system operacyjny mógł zmieniać wektory w czasie wykonywania. Często osiągano to poprzez wskazywanie wektorów w pamięci ROM na tablicę skoków w pamięci RAM lub przez użycie przełączania banków, aby umożliwić zastąpienie pamięci ROM pamięcią RAM w czasie wykonywania.

68000 nie spełnia wymagań wirtualizacji Popka i Goldberga dla pełnej wirtualizacji procesora, ponieważ ma pojedynczą nieuprzywilejowaną instrukcję „MOVE from SR”, która umożliwia dostęp tylko do odczytu oprogramowania trybu użytkownika do niewielkiej ilości uprzywilejowanego stanu. 68EC000 i 68SEC000, które są późniejszymi pochodnymi 68000, spełniają wymagania, ponieważ instrukcja "MOVE from SR" jest uprzywilejowana. Ta sama zmiana została wprowadzona w procesorach 68010 i nowszych.

68000 nie jest również w stanie łatwo obsługiwać pamięci wirtualnej , co wymaga możliwości przechwytywania i odzyskiwania po nieudanym dostępie do pamięci. 68000 zapewnia wyjątek błędu magistrali, który może być użyty do wyłapania, ale nie zapisuje wystarczającej ilości stanu procesora, aby wznowić błędną instrukcję, gdy system operacyjny obsłuży wyjątek. Kilku firmom udało się stworzyć uniksowe stacje robocze oparte na 68000 z pamięcią wirtualną, które działały przy użyciu dwóch chipów 68000 pracujących równolegle na różnych zegarach fazowych. Gdy „wiodący” 68000 napotkał zły dostęp do pamięci, dodatkowy sprzęt przerwałby „główny” 68000, aby zapobiec również napotkaniu złego dostępu do pamięci. Ta procedura przerwania obsłuży funkcje pamięci wirtualnej i zrestartuje „wiodący” 68000 we właściwym stanie, aby kontynuować właściwie zsynchronizowaną operację, gdy „główny” 68000 powróciłby z przerwania.

Problemy te zostały naprawione w kolejnej dużej rewizji architektury 68k, wraz z wydaniem MC68010. Wyjątki Bus Error i Address Error przesyłają dużą ilość stanu wewnętrznego do stosu nadzorcy w celu ułatwienia odzyskiwania, a instrukcja „MOVE from SR” została uprzywilejowana. Nowa nieuprzywilejowana instrukcja „MOVE from CCR” jest udostępniona do użytku w jej miejsce przez oprogramowanie trybu użytkownika; system operacyjny może przechwytywać i emulować instrukcje trybu użytkownika „MOVE from SR” w razie potrzeby.

Szczegóły zestawu instrukcji

Standardowe tryby adresowania to:

  • Zarejestruj się bezpośrednio
    • rejestr danych, np. „D0”
    • rejestr adresowy, np. „A0”
  • Zarejestruj się pośrednio
    • Prosty adres, np. (A0)
    • Adres z post-inkrementacją, np. (A0)+
    • Adres z pre-dekrementacją, np. −(A0)
    • Adres z 16-bitowym podpisanym offsetem, np. 16(A0)
    • Rejestr pośredni z rejestrem indeksowym i 8-bitowym przesunięciem ze znakiem np. 8(A0,D0) lub 8(A0,A1)
    Zauważ, że dla (A0)+ i -(A0) rzeczywista wartość przyrostu lub dekrementacji jest zależna od rozmiaru operandu: dostęp do bajtów dostosowuje rejestr adresu o 1, słowo o 2, a long o 4.
  • PC (licznik programu) w stosunku do przesunięcia
    • Względny 16-bitowy offset ze znakiem, np. 16(PC). Ten tryb był bardzo przydatny w przypadku kodu niezależnego od pozycji.
    • Względny z 8-bitowym przesunięciem ze znakiem z indeksem, np. 8(PC,D2)
  • Bezwzględna lokalizacja pamięci
    • Albo liczba, np. „$4000”, albo symboliczna nazwa przetłumaczona przez asembler
    • Większość asemblerów 68000 używa symbolu "$" dla szesnastkowego , zamiast "0x" lub końcowego H.
    • Istniały 16- i 32-bitowe wersje tego trybu adresowania
  • Tryb natychmiastowy
    • Dane przechowywane w instrukcji, np. „#400”
  • Szybki tryb natychmiastowy
    • 3-bitowy bez znaku (lub 8-bitowy podpisany za pomocą moveq) z wartością przechowywaną w kodzie opcode
    • W addq i subq 0 jest równoważne 8
    • np. moveq #0,d0 był szybszy niż clr.l d0 (chociaż oba uczyniły D0 równym 0)

Plus: dostęp do rejestru statusu , a w nowszych modelach do innych rejestrów specjalnych.

Większość instrukcji ma sufiksy kropkowo-literowe, umożliwiające wykonywanie operacji na 8-bitowych bajtach („.b”), 16-bitowych słowach („w”) i 32-bitowych długościach („l”).

Podobnie jak wiele procesorów w swojej epoce, taktowanie cyklu niektórych instrukcji różniło się w zależności od operandów źródłowych. Na przykład, wykonanie instrukcji unsigned multiply zajmuje (38+2n) cykli zegara, gdzie 'n' jest równe liczbie bitów ustawionych w operandzie. Stworzenie funkcji, która pobierała stałą liczbę cykli, wymagało dodania dodatkowego kodu po instrukcji mnożenia. Zwykle wymagałoby to dodatkowych cykli dla każdego bitu, który nie został ustawiony w oryginalnym operandzie mnożenia.

Większość instrukcji jest dwudniowa , to znaczy, że operacja ma źródło i cel, a cel jest zmieniany. Warte uwagi instrukcje to:

  • Arytmetyka: ADD, SUB, MULU (mnożenie bez znaku), MULS (mnożenie ze znakiem), DIVU, DIVS, NEG (negacja addytywna) i CMP (rodzaj porównania wykonywanego przez odjęcie argumentów i ustawienie bitów stanu, ale bez przechowywania wynik)
  • Arytmetyka dziesiętna kodowana binarnie: ABCD, NBCD i SBCD
  • Logika: EOR (wyłączne lub), AND, NOT (logiczne nie), OR (włącznie lub)
  • Przesunięcia: (logiczne, tj. przesunięcie w prawo ustawia zero w najbardziej znaczącym bicie) LSL, LSR, ( przesunięcia arytmetyczne , tj. przedłużenie znaku na najbardziej znaczący bit) ASR, ASL, (obraca się przez eXtend i nie) ROXL, ROXR, ROL, ROR
  • Test i manipulacja bitami w pamięci lub rejestrze danych: BSET (ustawiony na 1), BCLR (wyzerować), BCHG (odwrócony) i BTST (bez zmian). Wszystkie te instrukcje najpierw testują bit docelowy i ustawiają (czyszczą) bit CCR Z, jeśli bit docelowy wynosi odpowiednio 0 (1).
  • Sterowanie wieloprocesorowe : TAS, test-and-set , wykonuje niepodzielną operację magistrali, umożliwiając użycie semaforów do synchronizacji kilku procesorów współdzielących jedną pamięć
  • Przebieg sterowania: JMP (skok), JSR (skok do podprogramu), BSR (względny skok adresu do podprogramu), RTS (powrót z podprogramu ), RTE (powrót z wyjątku , czyli przerwania), TRAP (wyzwolenie wyjątku oprogramowania podobnego przerwania oprogramowania), CHK (warunkowy wyjątek oprogramowania)
  • Gałąź: Bcc (gdzie "cc" określa jeden z 14 testów kodów warunku w rejestrze statusu: równy, większy niż, mniejszy niż, carry oraz większość kombinacji i inwersji logicznych, dostępnych z rejestru statusu). Pozostałe dwa możliwe warunki (zawsze prawda i zawsze fałsz) mają oddzielne mnemoniki instrukcji, BRA (zawsze odgałęzienie) i BSR (odgałęzienie do podprogramu).
  • Dekrementacja i rozgałęzienie: DBcc (gdzie "cc" oznaczało instrukcje rozgałęzienia), które, pod warunkiem, że warunek był fałszywy , zmniejszało młodsze słowo rejestru D, a jeśli wynik nie był -1 ($FFFF) , rozgałęziony do miejsca docelowego. To użycie -1 zamiast 0 jako wartości końcowej pozwoliło na łatwe kodowanie pętli, które nie musiały nic robić, jeśli liczba wynosiła 0 na początku, bez potrzeby ponownego sprawdzania przed wejściem do pętli. Ułatwiło to również zagnieżdżanie DBcc.

68EC000

Kontroler Motorola 68EC000

68EC000 to niedroga wersja 68000 z nieco innym układem pinów, przeznaczona do zastosowań ze sterownikami wbudowanymi. 68EC000 może mieć 8-bitową lub 16-bitową magistralę danych , przełączaną podczas resetowania.

Procesory są dostępne w różnych szybkościach, w tym w konfiguracjach 8 i 16  MHz , każdy z nich wytwarza 2100 i 4376  Dhrystone . Procesory te nie mają jednostki zmiennoprzecinkowej i trudno jest zaimplementować z nią koprocesor FPU ( MC68881/2 ), ponieważ w serii EC brakuje niezbędnych instrukcji koprocesora.

68EC000 był używany jako kontroler w wielu aplikacjach audio, w tym w instrumentach muzycznych Ensoniq i kartach dźwiękowych, gdzie był częścią syntezatora MIDI . Na płytach dźwiękowych Ensoniq kontroler zapewniał kilka korzyści w porównaniu z konkurencją bez procesora na pokładzie. Procesor umożliwił skonfigurowanie płyty do wykonywania różnych zadań audio, takich jak synteza MPU-401 MIDI czy emulacja MT-32 , bez użycia programu TSR . To poprawiła kompatybilność oprogramowania, obniżyła użycie procesora i wyeliminowała użycie pamięci systemu hosta.

Rdzeń Motorola 68EC000 został później użyty w procesorach DragonBall opartych na m68k firmy Motorola/ Freescale .

Był również używany jako kontroler dźwięku w konsoli do gier Sega Saturn oraz jako kontroler dla kart kontrolera HP JetDirect Ethernet w drukarkach HP LaserJet z połowy lat 90. XX wieku .

Przykładowy kod

Poniższy kod zestawu 68000 dotyczy podprogramu o nazwie strtolower, który kopiuje ciąg 8-bitowych znaków zakończony znakiem null do ciągu docelowego, konwertując wszystkie znaki alfabetu na małe litery.

                     
                     
                     
                     
        
             
                     
                     
                     
00100000          
00100000  4E56 0000
00100004  306E 0008
00100008  326E 000C
0010000C  1018
0010000E  0C40 0041
00100012  6500 000E
00100016  0C40 005A
0010001A  6200 0006
0010001E  0640 0020
00100022  12C0
00100024  66E6
00100026  4E5E
00100028  4E75
0010002A
; strtolower:
; Copy a null-terminated ASCII string, converting
; all alphabetic characters to lower case.
;
; Entry parameters:
;   (SP+0): Source string address
;   (SP+4): Target string address

                org     $00100000       ;Start at 00100000
strtolower      public
                link    a6,#0           ;Set up stack frame
                movea   8(a6),a0        ;A0 = src, from stack
                movea   12(a6),a1       ;A1 = dst, from stack
loop            move.b  (a0)+,d0        ;Load D0 from (src), incr src
                cmpi    #'A',d0         ;If D0 < 'A',
                blo     copy            ;skip
                cmpi    #'Z',d0         ;If D0 > 'Z',
                bhi     copy            ;skip
                addi    #'a'-'A',d0     ;D0 = lowercase(D0)
copy            move.b  d0,(a1)+        ;Store D0 to (dst), incr dst
                bne     loop            ;Repeat while D0 <> NUL
                unlk    a6              ;Restore stack frame
                rts                     ;Return
                end

Podprogram ustanawia ramkę wywołania wykorzystując rejestr A6 jako wskaźnik ramki. Ten rodzaj konwencji wywoływania obsługuje kod wtórny i rekurencyjny i jest zwykle używany w językach takich jak C i C++ . Następnie podprogram pobiera ze stosu przekazane do niego parametry ( srci dst). Następnie wykonuje pętle, odczytując znak ASCII (jeden bajt) z srcciągu, sprawdzając, czy jest to duży znak alfabetyczny, a jeśli tak, konwertując go na małą literę, w przeciwnym razie pozostawiając go takim, jakim jest, a następnie zapisując znak dstciąg. Na koniec sprawdza, czy znak był znakiem null ; jeśli nie, powtarza pętlę, w przeciwnym razie przywraca poprzednią ramkę stosu (i rejestr A6) i powraca. Zauważ, że wskaźniki ciągu (rejestry A0 i A1) są automatycznie zwiększane w każdej iteracji pętli.

W przeciwieństwie do tego, poniższy kod dotyczy samodzielnej funkcji, nawet w najbardziej restrykcyjnej wersji AMS dla serii kalkulatorów TI-89 , niezależnej od jądra, bez sprawdzania wartości w tabelach, plikach lub bibliotekach podczas wykonywania, bez wywołań systemowych, bez przetwarzania wyjątków, minimalnych rejestrów do użycia, ani potrzeby zapisywania jakichkolwiek. Obowiązuje ona dla historycznych dat juliańskich od 1 marca n.e. lub dla dat gregoriańskich . W mniej niż dwóch tuzinach operacji oblicza numer dnia zgodny z ISO 8601 po wywołaniu z trzema danymi wejściowymi przechowywanymi w odpowiednich LOKALIZACJACH:

;
;  WDN, an address - for storing result d0
; FLAG, 0 or 2 - to choose between Julian or Gregorian, respectively
; DATE, year0mda - date stamp as binary word&byte&byte in basic ISO-format
;(YEAR, year ~ YEAR=DATE due to big-[[Endianness#Current_architectures|endianness]])
;
     move.l DATE,d0
     move.l d0,d1
;
; Apply step 1 - [[SuperBASIC#Example|Lachman's congruence]]
     andi.l #$f00,d0
     divu #100,d0
     addi.w #193,d0
     andi.l #$ff,d0
     divu #100,d0 ; d0 has the month index i in the upper word (mod 100)
;
; Apply step 2 - Using spqr as the Julian year of the leap day preceding DATE
     swap d0
     andi.l #$ffff,d0
     add.b d1,d0
     add.w YEAR,d0
     subi.l #$300,d1
     lsr  #2,d1
     swap d1
     add.w d1,d0 ; spqr/4 + year + i + da}}
;
; (Apply step 0 - Gregorian adjustment)
     mulu FLAG,d1
     divu #50,d1
     mulu #25,d1
     lsr  #2,d1
     add.w d1,d0
     add.w FLAG,d0 ; (sp32div16) + spqr/4 + year + i + da
;
     divu #7,d0
     swap d0  ;  d0.w becomes the day number
;
     move.w d0,WDN ; returns the day number to address WDN
     rts
;
; Days of the week correspond to day numbers of the week as:
; Sun=0  Mon=1  Tue=2  Wed=3  Thu=4  Fri=5  Sat=6
;

Zobacz też

Bibliografia

Dalsza lektura

Arkusze danych i instrukcje
Książki
  • 68000, 68010, 68020 Podkład ; 1-sze wydanie; Stan Kelly-Bootle i Bob Fowler; Howard Sams & Co; 370 stron; 1985; ISBN  978-0672224058 . (archiwum)
  • Opanowanie mikroprocesora 68000 ; 1-sze wydanie; Phillipa Robinsona; Książki zakładkowe; 244 strony; 1985; ISBN  978-0830608867 . (archiwum)
  • Język montażu przewodnika kieszonkowego dla serii 68000 ; 1-sze wydanie; Robert Erskine; Wydawnictwo Pitman; 70 stron; 1984; ISBN  978-0273021520 . (archiwum)
  • Schematy matryc Motorola M68000 [1]
  • 68000 programowanie kodów maszynowych (procesory 68000, 68008, 68010 i 68020); 1-sze wydanie; Davida Barrowa; książki zawodowe i techniczne Collinsa; 234 strony; 1985; ISBN  0-00-383163-9 .

Zewnętrzne linki