Motorola 68000 - Motorola 68000


Aus Wikipedia, der freien Enzyklopädie
Motorola 68000 Architektur
Entwerfer Motorola
Bits 16/32-bit
Eingeführt 1979 ; Vor 39 Jahren ( 1979 )
Design CISC
Verzweigung Bedingungscode
endianness Groß
Register
Allgemeiner Zweck 8 × 32-Bit-Adreßregister + 7 auch verwendbar für die meisten Operationen + pointer stapeln
Motorola 68000 CPU
Anleitung 56
Datenbreite 16
Adreßbreite 24

Der Motorola 68000 ( " 'achtundsechzig tausend'"; auch als das m68k oder Motorola 68k " achtundsechzig Qi ") ist ein 16/32-Bit - CISC - Mikroprozessor , der einen implementiert 32-Bit - Befehlssatz , mit 32-Bit - Register und 32-Bit - interner Datenbus , aber mit einem 16-Bit - Daten ALU und zwei 16-Bit - Arithmetik ALUs und ein externen 16-Bit - Datenbus , entwickelt und vermarktet von Motorola Semiconductor Products Sector. Eingeführt im Jahr 1979 mit HMOS Technologie als erstes Mitglied der erfolgreichen 32-Bit Motorola 68000 Serie , ist es in der Regel Software aufwärtskompatibel mit dem Rest der Linie trotz eines breiten externen Bus 16 Bit beschränkt zu sein. Nach 39 Jahren in der Produktion , die 68000 - Architektur ist immer noch in Gebrauch ist .

Pre-Release XC68000 Chip im Jahr 1979 hergestellt
Die von Motorola 68000

Geschichte

Motorola MC68000 ( CLCC Paket)
Motorola MC68000 ( PLCC - Paket)

Die 68.000 wuchs aus dem MACSS (Motorola Advanced Computer Systems on Silicon) Projekt im Jahr 1976 damit begonnen , eine völlig neue Architektur ohne zu entwickeln , die Abwärtskompatibilität . Es wäre eine höhere Leistung Geschwister sein , die bestehenden 8-Bit - Ergänzung 6800 Linie anstatt einem kompatibeler Nachfolger. Am Ende hat der 68000 einen behalten Bus - Protokoll für bestehende 6800 Peripheriegeräte - Kompatibilitätsmodus und eine Version mit einem 8-Bit - Datenbus erzeugt wurde. Allerdings konzentrierte sich die Designer in erster Linie auf der Zukunft, oder Vorwärtskompatibilität , die das 68000 - Design einen Vorsprung gegen später 32-Bit gab Befehlssatz - Architekturen . Zum Beispiel sind die CPU - Register 32 Bit breit, obwohl nur wenige sich geschlossene Strukturen im Prozessor selbst auf 32 Bits gleichzeitig betreiben. Die MACSS Team zog sich stark auf den Einfluss von Minicomputer - Prozessor - Design, wie die PDP-11 und VAX - Systeme, die in ähnlicher Weise wurden Mikrocode -basierte.

In der Mitte der 1970er Jahre, die 8-Bit - Mikroprozessor - Hersteller rasten die 16-Bit - Generation einzuführen. National Semiconductor hatte zuerst gewesen mit seinen IMP-16 und PACE - Prozessoren in 1973-1975, aber diese hatten Probleme mit der Geschwindigkeit. Intel hatte auf ihrem erweiterten 16/32-Bit arbeitet Intel iAPX 432 seit 1975 (alias 8800) und ihre Intel 8086 seit 1976 (es im Jahr 1978 eingeführt wurde , wurde aber in der Form der fast identischen 8088 in den wirklich weit verbreiteten IBM - PC ein paar Jahre später). Sie kommen spät in die 16-Bit - Arena brachten die neuen Prozessor mehr Transistoren (rund 40.000 aktive gegenüber 20.000 aktiv in 8086), 32-Bit - Makrobefehle und gefeierte allgemeine Benutzerfreundlichkeit.

Die ursprüngliche MC68000 wurde hergestellt unter Verwendung eines HMOS Verfahrens mit einer 3,5  & mgr; m Strukturbreite. Formal im September 1979 auf dem Markt, Erstbemusterung wurde im Februar 1980 mit der Produktion Chips erhältlich über den Zähler im November veröffentlicht. Anfangsgeschwindigkeit Noten waren 4, 6 und 8  MHz . 10 MHz - Chips wurden im Jahr 1981 und 12,5 MHz Chips bis Juni 1982 16.67 MHz „12F“ -Version der MC68000, die schnellste Version des ursprünglichen HMOS Chips verfügbar, wurden erst in den späten 1980er Jahren produzieren.

Der 68k - Befehlssatz wurde besonders gut geeignet , Unix zu implementieren und die 68000 und seine Nachfolger wurden die dominierende CPUs für Unix-basierte Workstations einschließlich Sun - Workstations und Apollo / Domain Workstations. Die 68000 wurde auch für den Massenmarkt - Computern wie dem verwendeten Apple Lisa , Macintosh , Amiga und Atari ST . Die 68000 wurde in Microsoft verwendet Xenix - Systeme, sowie einem frühen NetWare Unix-basierten Server. Die 68000 wurde in der ersten Generation von Desktop verwendet Laserdruckern , einschließlich dem ursprünglichen Apple Inc. LaserWriter- und der HP LaserJet . Im Jahr 1982 erhielt die 68000 ein Update für seine ISA ermöglicht , sie zu unterstützen virtuelle Speicher und entsprechen die Popek und Goldberg Virtualisierungsanforderungen . Der aktualisierte Chip wurde die gerufene 68010 . Eine weitere erweiterte Version, die 31 Bit des Adreßbusses ausgesetzt ist , wurde auch in kleinen Mengen produziert als 68012 .

Um preiswertere Systeme und Steuerungsanwendungen mit kleineren Speichergrößen zu unterstützen, stellte Motorola den 8-Bit - kompatibel MC68008 , auch im Jahr 1982. Dies war ein 68000 mit ein 8-Bit - Datenbus und einer kleineren (20-Bit) Adressbus. Nach 1982 widmete Motorola mehr Aufmerksamkeit auf die 68020 und 88000 - Projekte.

Second-Sourcing

Hitachi HD68000
Thomson TS68000

Mehrere andere Unternehmen waren Second-Source - Hersteller der HMOS 68000. Dazu gehörten Hitachi (HD68000), der die Strukturgröße auf 2,7 & mgr; m für die 12,5 - MHz - Version schrumpfte, Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson / SGS-Thomson (ursprünglich EF68000 und später TS68000) und Toshiba (TMP68000). Toshiba war auch ein Second-Source - Hersteller des CMOS 68HC000 (TMP68HC000).

Verschlüsselte Varianten der 68000, wobei die Hitachi FD1089 und FD1094 speichern Entschlüsselungsschlüssel für OP - Codes und Opcode Daten in batteriegepufferten Speicher, wurde in bestimmten Sega Arcade - Systeme einschließlich verwendet Das System 16 , um die Piraterie und illegale Bootleg Spiele zu verhindern.

CMOS-Versionen

Motorola MC68HC000LC8

Der 68HC000, die erste CMOS - Version der 68000, wurde von Hitachi entwickelt und gemeinsam im Jahr 1985 von Motorola Version eingeführt wurde der MC68HC000 genannt, während Hitachi die HD68HC000 war. Der 68HC000 wurde schließlich mit einer Geschwindigkeit von 8-20 MHz angeboten. Mit Ausnahme von CMOS - Schaltungen verwendet wird , verhielt es sich identisch mit dem HMOS MC68000, aber die Änderung zu CMOS stark reduziert den Stromverbrauch. Die ursprüngliche HMOS MC68000 verbraucht rund 1,35  Watt bei einer Umgebungstemperatur von 25  ° C , und zwar unabhängig von Taktgeschwindigkeit, während die MC68HC000 nur 0,13 Watt bei 8 MHz und 0,38 Watt bei 20 MHz verbraucht. (Im Gegensatz zu CMOS - Schaltungen, HMOS zieht immer noch Leistung im Leerlauf, so den Stromverbrauch mit Taktrate wenig variiert.) Apfel ausgewählt , um den 68HC000 für die Verwendung in der Macintosh Portable .

Motorola MC68008 ersetzt die mit dem MC68HC001 1990. Dieser Chip den 68HC000 in fast jeder Hinsicht ähnelte, aber seine Datenbus in 16-Bit- oder 8-Bit-Modus bei einem Reset, je nach dem Wert eines Eingangsstift arbeiten könnte. So wie die 68008, könnte es in Systemen mit billigeren 8-Bit-Speichern verwendet werden.

Die spätere Entwicklung der 68000 auf modernere konzentriert Embedded - Control - Anwendungen und On-Chip - Peripherie. Der 68EC000 Chip und SCM68000 Kerne erweiterten den Adreßbus zu 32 Bits, entfernt , um den M6800 Peripheriebus, und ausgeschlossene die Bewegung von SR - Befehl vom Benutzermodus - Programmen. Im Jahr 1996 den Standalone - Kern mit voll statischer Schaltung, zeichnet nur 2 Motorola aktualisiert  uW in Low-Power - Modus, nennt es den MC68SEC000.

Motorola stellte die Produktion des HMOS MC68000 und MC68008 1996, aber seine Spin-off - Unternehmen Freescale Semiconductor noch wurde die Herstellung der MC68HC000, MC68HC001, MC68EC000 und MC68SEC000, sowie die MC68302 und MC68306 Mikrocontroller und spätere Versionen der Dragon Ball - Familie. Die 68000 architektonische Nachkommen, die 680x0 , CPU32 und Coldfire - Familien waren nach wie vor auch in der Produktion. Mit der Sendai fab Schließung, in jüngerer Zeit, alle 68HC000, 68020, 68030 und 68882 Teile wurden nur den 68SEC000 in Produktion eingestellt, zu verlassen.

Als Mikrocontrollerkern

Nachdem er von „true“ 32-Bit - Mikroprozessoren gelang, wurde die 68000 als Kern vieler verwendeten Mikrocontroller . 1989 führte Motorola den MC68302 Kommunikationsprozessor.

Anwendungen

Zwei Hitachi 68HC000 CPUs auf einem Arcade-Spiel PCB verwendet wird,

Bei seiner Einführung wurde das 68.000 erstmals in hochpreisigen Systemen verwendet werden, einschließlich Multi - User - Mikrocomputer wie der WICAT 150, frühe Alpha Microsystems Computer, Sage II / IV , Tandy TRS-80 Modell 16 und Fortune - 32:16 ; Single-User - Workstations wie Hewlett-Packard 's HP 9000 Series 200 Systeme, die ersten Apollo / Domain Systeme, Sun Microsystems ' Sun-1 und das Corvus Konzept ; und Grafik - Terminals wie Digital Equipment Corporation 's VAXstation 100 und Silicon Graphics IRIS 1000 und 1200. Unix - Systeme schnell bewegten auf die besser in der Lage späteren Generationen der 68k - Linie, die in diesem Markt in den 1980er Jahren populär geblieben.

Bis Mitte der 1980er Jahre gemacht fallenden Produktionskosten die 68000 rentabel für den Einsatz in persönlichem und Heimcomputer , beginnend mit dem Apple Lisa und Macintosh , gefolgt von dem Commodore Amiga , Atari ST und Sharp X68000 . Auf der anderen Seite, der Sinclair QL war Mikrocomputer die kommerziell wichtige Nutzung der 68008, zusammen mit seinen Derivaten, wie der ICL One Pro Desk Business - Terminal. Helix - Systeme (in Missouri, USA) entwickelt , um eine Verlängerung des SWTPC SS-50 - Bus , die SS-64 und erzeugen rund um den 68008 - Prozessor gebaut Systeme.

Während die Annahme von RISC und x86 die 68000 Serie als Desktop / Workstation - CPU verschoben, fand der Prozessor erheblichen Einsatz in Embedded - Anwendungen. In den frühen 1980er Jahren, Mengen von 68.000 CPUs werden könnten für weniger als 30 gekauft  USD pro Teil.

Videospiel - Hersteller verwendet , um die 68000 als das Rückgrat vieler Arcade - Spiele und Heimspielkonsolen : Ataris Food Fight von 1982, war einer der ersten 68000-basierten Arcade - Spiele. Andere enthalten Sega 's - System 16 , Capcom ' s CP - System und CPS-2 und SNK ‚s Neo Geo . Bis Ende der 1980er Jahre war die 68000 billig genug , um Energie zu Hause Spielkonsolen, wie Sega Mega Drive (Genesis) Konsole und auch die Sega CD Anlage für sie (A Sega CD - System verfügt über drei CPUs, zwei von ihnen 68000s). 1993 - Multiprozessor Atari Jaguar Konsole verwendet , um ein 68000 als Trägerchip, obwohl einige Entwickler es als der primäre Prozessor verwendet aufgrund Vertrautheit. Die 1994 Multi-Prozessor Sega Saturn Konsole verwendet , um die 68000 als Sound - Co-Prozessor (viel wie der Mega Drive / Genesis den verwendet Z80 als Co-Prozessor für Ton und / oder andere Zwecke).

Bestimmte Arcadespiele (wie Stahl Gunner und andere basierend auf Namco System 2 ) verwenden , um eine Dual - 68000 - CPU - Konfiguration, und Systeme mit einer Dreifach - 68000 - CPU - Konfiguration existieren auch (wie Galaxy Force und andere auf der Grundlage der Sega Y Board), zusammen mit a quad 68000 CPU - Konfiguration, die von verwendet wurde Jaleco (ein tragfähiger 68000 hat eine niedrigere Taktrate zu dem anderen CPUs im Vergleich 68000) für Spiele wie Big Run und Cisco Wärme ; ein fünfte 68000 (bei einer anderen Taktrate im Vergleich zu dem anderen CPUs 68000) wurde zusätzlich in dem Jaleco Arcadespiel verwendet Wilder Pilot für I / O - Verarbeitung.

Die 68000 sah auch sehr erfolgreich als Embedded Controller. Bereits 1981 Laserdrucker wie der Imagen abdruckarm 10 durch externe Platten mit dem 68000. Der erste HP ausgestattet gesteuert wurden LaserJet in -introduced ab 1984 kam mit einem eingebauten 8 MHz 68000. Andere Druckerhersteller nimmt den 68000, darunter Apple mit der Einführung des LaserWriter- 1985 die ersten Postscript - Laserdruckern. Die 68000 fortgesetzt weit über den Rest der 1980er Jahre in Druckern verwendet werden, persistierende in die 1990er Jahre in Low-End - Druckern.

Die 68000 sah auch Erfolg auf dem Gebiet der industriellen Steuerungssystemen. Unter den Systemen aus, die einen 68000 - Derivat oder profitieren als Mikroprozessor Familien waren speicherprogrammierbare Steuerungen (SPS) , hergestellt von Allen-Bradley , Texas Instruments und anschließend, nach der Übernahme dieser Division von TI, die von Siemens . Nutzer solcher Systeme nicht Produktveralterung mit der gleichen Rate wie inländische Nutzer, und es ist durchaus wahrscheinlich annehmen , dass trotz bereits vor mehr als 20 Jahren installiert zu haben, in zuverlässigem Service viele 68000-basierte Steuerungen weit ins 21. Jahrhundert fortsetzen werden.

In einer Reihe von digitalen Oszilloskopen aus den 80er Jahren hat sich die 68000 als ein Wellenformanzeige - Prozessor verwendet wird ; Einige Modelle einschließlich der LeCroy 9400 / 9400A auch die 68000 als Wellenform mathematischen Prozessor (einschließlich Addition, Subtraktion, Multiplikation und Division von zwei Wellenformen / references / Wellenformspeicher) verwendet werden , und einige digitalen Oszilloskope der 68000 (einschließlich des 9400 / 9400A unter Verwendung von ) kann auch durchführen FFT - Funktionen auf einer Wellenform.

Die 683xx Mikrocontroller, basierend auf der 68000 - Architektur werden in Netzwerk- und Telekommunikationsgeräte, TV - Set-Top - Boxen, Labor und medizinische Instrumente und sogar Taschenrechner verwendet. Der MC68302 und seine Derivate wurden in vielen Telekom - Produkte von Cisco, 3Com, Ascend, Marconi, Kykladen und andere. Frühere Modelle der Palm PDAs und Handspring Visor verwendete Dragon Ball , ein Derivat des 68000. Alpha die Dragon Ball Familie in späteren Versionen seiner tragbaren Textverarbeitungsprogramme verwendet. Texas Instruments verwendet die 68000 in seinem High-End - Grafikrechner, die TI-89 und TI-92 - Serie und Voyage 200 . Frühe Versionen von diesen verwendeten einen speziellen Mikrocontroller mit einem statischen 68EC000 Kern; spätere Versionen verwenden , um einen Standard MC68SEC000 Prozessor.

Eine modifizierte Version der 68000 die Basis des gebildeten IBM XT / 370 Hardware - Emulator des Systems 370 Prozessor.

Die Architektur

Motorola 68000-Register
3 1 ... 2 3 ... 1 5 ... 0 7 ... 0 0 (Bitstelle)
Datenregister
D0 Daten 0
D1 Data 1
D2 Data 2
D3 Data 3
D4 Daten 4
D5 Daten 5
D6 Daten 6
D7 Daten 7
Adressregister
  A0                           Die Adresse 0
  A1                           Adresse 1
  A2                           Adresse 2
  A3                           Adresse 3
  A4                           Adresse 4
  A5                           Adresse 5
  A6                           Adresse 6
Stapelzeiger
  A7 / USP                        Stapelzeiger (Benutzer)
  A7 / SSP                        Stack Pointer (Supervisor)
Programm zähler
  PC                           Programm zähler
Condition Code Registrieren
  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 (Bitstelle)
  T S M 0 ich 0 0 0 X N Z V C CCR

Adressbus

Der 68000 besitzt einen 24-Bit externen Adreßbus und zwei Byte-Auswahlsignale „ersetzt“ A0. Diese 24 Zeilen können also 16 MB physischer Speicher mit Byte Auflösung adressieren. Adressspeicher und Berechnung verwendet 32 Bits intern; jedoch werden die 8 höherwertigen Adreßbits auf Grund der physikalischen fehlenden Geräte - Pins ignoriert. Dies ermöglicht es , Software für einen logisch flachen 32-Bit geschrieben läuft Adressraum , während nur einen 24-Bit - physikalischen Adressraum zugreifen. Motorola Absicht mit dem internen 32-Bit - Adressraum war Vorwärtskompatibilität, es möglich zu machen 68000 Software zu schreiben , die alle Vorteile der späteren 32-Bit - Implementierungen des 68000 - Befehlssatzes nehmen würden.

Dies ist jedoch nicht verhindern , dass Programmierer von vorne inkompatible Software zu schreiben. „24-Bit“ Software, die das obere Adreßbyte verworfen oder es verwendet für andere Zwecke als zum Adressieren, könnte man auf 32-Bit - 68000 Implementierungen scheitern. Zum Beispiel früh (vor 7.0) Versionen von Apples Mac OS verwendet , um die High - Byte Speicher-Block Master - Zeiger - Flags wie zu halten gesperrt und bespülbare . Spätere Versionen des OS bewegten die Fahnen zu einem nahe gelegenen Standort und Apple begann Computer Versand , die „hatten 32-Bit - sauber mit der Veröffentlichung von 1989 Mac IIci Anfang“ ROMs.

Die 68000 - Familie speichert Multi-Byte - Zahlen im Speicher in Big-Endian - Reihenfolge.

interne Register

Die CPU hat acht 32-Bit - Allzweck-Datenregister (D0-D7) und acht Adreßregistern (A0-A7). Das letzte Adressregister ist der Stapelzeiger , und Montierer das Etikett SP als äquivalent zu A7 akzeptieren. Dies war eine gute Anzahl von Registern zu der Zeit in vielerlei Hinsicht. Es war klein genug , um die 68000 zu ermöglichen , schnell zu reagieren Interrupts (auch im schlimmsten Fall , in dem alle 8 Datenregister D0-D7 und 7 Adressregister A0-A6 gespeichert werden benötigt, 15 Register insgesamt), und doch groß genug , um macht die meisten Berechnungen schnell, weil sie ohne halten alle Teilergebnisse im Speicher vollständig innerhalb des Prozessors durchgeführt werden können. (Beachten Sie, dass eine Ausnahmeroutine im Supervisor - Modus auch die Benutzer Stapelzeiger A7 speichern kann, die 8 Adressregister insgesamt würden. Um jedoch den Dual - Stack - Zeiger (A7 und Supervisor-Modus A7' ) Design der 68000 macht dies in der Regel nicht erforderlich, es sei denn wenn ein Aufgabenwechsel wird in einem Multitasking - System durchgeführt.)

Mit zwei Arten von Registern war manchmal leicht ärgerlich, aber nicht in der Praxis schwierig zu verwenden. Wie verlautet, ist es erlaubt , die CPU - Designer einen höheren Parallelitätsgrad zu erreichen, durch eine Hilfs unter Verwendung der Ausführungseinheit für die Adressregister.

Statusregister

Die 68.000 Vergleich, Arithmetik und Logikoperationen gesetzt Bitflags in einem Statusregister , um ihre Ergebnisse für den Einsatz aufnehmen , indem Sie später bedingte Sprünge. Die Bit - Flags sind "Null" (Z) " Übertrag" (C) "Überlauf" (V) : "erweitern" (X) und "negative" (N). Die „verlängert“ (X) Flagge verdient besondere Erwähnung, weil sie getrennt von dem ist Carryflag . Dies erlaubt das zusätzliche Bit von Arithmetik-, Logik- und Schiebeoperationen aus dem Übertrag für die Strömungs-of-Control und Gestänge getrennt werden.

Befehlssatz

Die Designer versucht, die Assemblersprache zu machen orthogonal . Das heißt, werden die Befehle in Operationen und unterteilt Adreßmodi , und fast alle Adreßmodi sind für fast alle Anweisungen zur Verfügung. Es gibt 56 Anweisungen und eine minimale Befehlsgröße von 16 Bits. Viele Befehle und Adressierungsarten sind länger , um zusätzliche Adresse oder Modusbits zu umfassen.

Berechtigungsebenen

Die CPU und später die ganze Familie, implementiert zwei Ebenen von Privilegien. User-Modus ermöglicht den Zugriff auf alles, außer privilegierten Befehlen wie Interrupt-Pegelregler. Supervisor Privileg ermöglicht den Zugriff auf alles. Ein Interrupt wird immer Aufsichts. Der Supervisor-Bit im Statusregister gespeichert und ist auf Anwenderprogramme sichtbar.

Ein Vorteil dieses Systems ist , dass die Aufsichtsebene einen separaten Stapelzeiger hat. Dies ermöglicht ein Multitasking - System sehr kleine Stapel für Aufgaben zu verwenden, da die Designer müssen die Speicher nicht zuweisen erforderlich , um den Stapelrahmen von maximal Aufsummierung von Interrupts zu halten.

Unterbricht

Die CPU erkennt sieben Interrupt - Ebene. Stufen 1 bis 5 sind strikt priorisiert. Das heißt, ein höherer Nummer Interrupt kann immer unterbrechen einen niedrigeren Nummern Interrupt. In dem Statusregister ermöglicht ein privilegierter Befehl einen den aktuellen minimalen Unterbrechungspegel einzustellen, können niedrigere oder gleiche Priorität Interrupts blockiert. Zum Beispiel wird , wenn die Interrupt - Ebene in dem Statusregister auf 3 gesetzt, höhere Niveaus von 4 bis 7 können eine Ausnahme verursachen. Stufe 7 ist ein pegelgetriggert nicht maskierbare Unterbrechung (NMI). Stufe 1 kann von jedem höheren Niveau unterbrochen werden. Stufe 0 bedeutet keine Unterbrechung. Der Pegel wird in dem Statusregister gespeichert, und ist sichtbar auf Benutzerebene Programme.

Hardware - Interrupts werden zu der CPU signalisiert mit Hilfe von drei Eingängen, die die höchste anhängige Unterbrechungspriorität kodieren. Ein separater Encoder ist in der Regel erforderlich , um die Interrupts zu codieren, obwohl für Systeme , die unterbricht nicht mehr als drei Hardware erfordern es ist möglich , die Interrupt - Signale direkt an den codierten Eingänge auf Kosten der zusätzlichen Software - Komplexität zu verbinden. Der Interrupt - Controller kann als so einfach seine 74LS148 Prioritätscodierer , oder kann Teil eines VLSI peripheren Chips wie die MC68901 Multi-Function Peripheral (verwendet in der sein Atari ST Reihe von Computern und Sharp X68000 ), die auch eine vorgesehen UART , Timer und parallele I / O.

Die „Ausnahmetabelle“ ( Interrupt - Vektortabelle Interrupt - Vektor - Adressen) an den Adressen 0 bis 1023 fixiert, 256 32-Bit - Vektoren erlauben. Der erste Vektor (RESET) besteht aus zwei Vektoren, nämlich die Ausgangsstapeladresse, und der Startcode - Adresse. Vektoren , 3 bis 15 werden verwendet , um verschiedene Fehler zu melden: Busfehler , Adressfehler, illegale Instruktion , Null Division , CHK und CHK2 Vektor, Privilegverletzung (blockieren Privilegieneskalation ) und einige reservierten Vektoren , die 1010 wurde Linie Emulators, Zeile 1111 Emulator und Hardware- Haltepunkt . Vector 24 beginnt , die realen Interrupts: unechte Interrupt (keine Hardware - Quittierung) und Stufe 1 bis Stufe 7 Autovektoren, dann die 16 - Trap - Vektoren, dann etwas mehr reservierte Vektoren, dann die Benutzer definierten Vektoren.

Da bei einem Minimum an Rücksetzen der Startcode Adreßvektor immer gültig sein muß, Systeme üblicherweise einige nicht - flüchtigen Speicher (zB enthalten ROM ) Null bei der Adresse beginnen , die Vektoren und enthalten Bootstrap - Code. Jedoch für ein Allzwecksystem ist es wünschenswert , für das Betriebssystem in der Lage sein , die die Vektoren zur Laufzeit zu ändern. Dies wurde erreicht , indem entweder oft zeigt die Vektoren in ROM zu einer Sprungtabelle in RAM , oder durch die Verwendung von Schaltbank dem ROM ermöglichen durch RAM zur Laufzeit ausgetauscht werden.

Die 68000 erfüllt nicht die Popek und Goldberg Virtualisierungsanforderungen für volle Prozessor - Virtualisierung , da sie eine einzige unprivileged Anweisung „MOVE von SR“ hat, die User-Mode - Software nur lesenden Zugriff auf eine kleine Menge von privilegierten Zustand ermöglicht.

Die 68000 ist auch nicht in der Lage leicht zu unterstützen virtuelle Speicher , die die Fähigkeit zu stoppen erfordern und von einem ausgefallenen Speicherzugriff erholen. Die 68000 ist bieten eine Busfehlerausnahme , die zu stoppen verwendet werden können, aber es nicht genügend Prozessorzustand speichert die fehlerhafte Anweisung wieder auf, sobald das Betriebssystem die Ausnahme behandelt wird. Mehrere Unternehmen haben bei der Herstellung von 68000-basierten Unix - Workstations mit virtuellem Speicher gelingen, die mithilfe von zwei 68.000 Chips laufen parallel auf verschiedene phasengesteuerten Uhren gearbeitet. Wenn der „führenden“ 68000 einen schlechten Speicherzugriff auftrat, würde zusätzliche Hardware der „main“ 68000 unterbrechen , es zu verhindern , dass auch den schlechten Speicherzugriff zu stoßen. Diese Interrupt - Routine würde die virtuellen Speicherfunktionen verarbeiten und starten Sie die 68000 im richtigen Zustand „führenden“ Operation richtig synchronisiert fortzusetzen , wenn die „main“ 68000 von der Unterbrechung zurück.

Diese Probleme wurden in der nächsten größeren Revision der 68k-Architektur, mit der Veröffentlichung des MC68010 fixiert. Die Bus-Fehler und Address Error Ausnahmen drücken, um eine große Menge an internem Zustand auf den Supervisor-Stack, um Erholung zu erleichtern, und die MOVE von SR Anweisung wurde privilegiert gemacht. Eine neue unprivileged „MOVE von CCR“ Instruktion wird für die Verwendung an seinem Platz durch Benutzermodus-Software zur Verfügung gestellt; ein Betriebssystem kann Fall und Benutzermodus MOVE aus SR Anweisungen emulieren, falls gewünscht.

Befehlssatz Details

Die Standard - Adressierungsarten sind:

  • registrieren Direkt
    • Datenregister, zB „D0“
    • Adressregister, zB „A0“
  • registrieren indirekt
    • Einfache Adresse, zB (A0)
    • Adresse mit Post-Inkrement, zB (A0) +
    • Adresse mit Prä-Dekrement, zB - (A0)
    • Adresse mit einem 16-Bit signed versetzt, zB 16 (A0)
    • Registrieren indirekt mit Indexregistern und 8-Bit unterzeichnet Offset zB 8 (A0, D0) oder 8 (A0, A1)
    Man beachte, dass für (A0) + und - (A0), ist der tatsächliche Inkrement oder Dekrement-Wert abhängig von der Operandengrße: ein Byte-Zugriff inkrementiert das Adressenregister mit 1, einem Wort von 2 und eine langen Zeit von 4.
  • PC (Programmzähler) in Bezug mit der Verschiebung
    • Relative 16-Bit vorzeichenbehaftete Offset, beispielsweise 16 (PC). Dieser Modus ist sehr nützlich für die positionsunabhängigen Code.
    • Relative mit 8-Bit signed mit Index-Offset, zB 8 (PC, D2)
  • Absolute Speicherplatz
    • Entweder eine Zahl, zB „$ 4000“ oder ein symbolischer Name vom Assembler übersetzt
    • Die meisten 68000 Montierer verwendet , um das „$“ Symbol für hexadezimal , statt „0x“ oder einen nachgestellten H.
    • Es gab 16 und 32-Bit-Versionen dieser Adressierungsart
  • Immediate-Modus
    • Die Daten in der Anweisung gespeichert, zB „# 400“
  • Schnell unmittelbarer Modus
    • 3-bit unsigned (oder 8-Bit mit moveq signed) mit einem Wert, gespeichert in opcode
    • In addq und subq, 0 die äquivalent zu 8
    • zB moveq # 0, war d0 schneller als clr.l d0 (obwohl beide d0 gleich 0 gemacht)

Plus: Zugriff auf das Statusregister und in späteren Modellen, anderen speziellen Registern.

Die meisten Befehle haben Punkt-Buchstaben-Suffixe, Operationen ermöglicht auf 8-Bit-Bytes auftreten ( ".B "), 16-Bit-Wörter (" .w "), und 32-Bit-longs (" .L").

Wie viele CPUs seiner Zeit variierte die Zykluszeitsteuerung einiger Anweisungen auf dem Quellenoperand abhängig (s). Zum Beispiel nimmt der unsigned Multiplikationsbefehl (38 + 2n) Taktzyklen zu vollenden, wenn ‚n‘ gleich die Anzahl von Bits gesetzt in dem Operanden gleich ist. So erstellen Sie eine Funktion, die eine feste Zykluszahl nahm erforderlich, um die Zugabe von zusätzlichem Code nach dem Multiplikationsbefehl. Dies würde in der Regel verbraucht zusätzliche Zyklen für jedes Bit, die nicht in den ursprünglichen Multiplikationsoperanden gesetzt wurde.

Die meisten Befehle sind Dyade , das heißt, der Betrieb eine Quelle hat, und ein Ziel und das Ziel geändert wird. Bemerkenswerte Anweisungen waren:

  • Arithmetik: ADD, SUB, MULU (Multiplikation ohne Vorzeichen), MULS (Multiplikation mit Vorzeichen), DIVU, DIVS, NEG (additive Negation) und CMP (eine Art Vergleich gemacht, indem die Argumente Subtrahieren und die Statusbits Einstellung, aber nicht speichern das Ergebnis)
  • Binär codierten Dezimal - Arithmetik: ABCD und SBCD
  • Logic: EOR (exklusiv oder), AND, NOT (logisch nicht), OR (inklusive oder)
  • Verschiebung: (logisch, dh Rechtsverschiebungen setzen Null in der höchstwertigen Bit) LSL, LSR, ( arithmetische Verschiebungen , dh Vorzeichen erweitern die höchstwertigen Bit) ASR, ASL, (dreht durch eXtend und nicht) ROXL, ROXR, ROL, ROR
  • Bit - Test und Manipulation im Speicher: BSET (1), BCLR (auf 0), BCHG (Invert Bit) und BTST (den Null - Bit , wenn getestet Bit ist 0)
  • Multiprozessor - Steuerung: TAS, Test-und-Set durchgeführt , eine untrennbare Busbetrieb, ermöglicht Semaphore verwendet werden , um mehrere Prozessoren zu synchronisieren , einen einzelnen gemeinsamen Speicher
  • Ablauf der Steuerung: JMP (Sprung), JSR (Sprung zum Unterprogramm), BSR (relative Adresse Sprung zum Unterprogramm), RTS (Rückkehr aus der Subroutine ), RTE (Rückkehr von der Ausnahme , dh eine Unterbrechung), TRAP (triggern eine Software Ausnahme ähnlich Software - Interrupt), CHK (a bedingte Software Ausnahme)
  • Branche: Bcc (wo die „cc“ spezifizierte eine von 16 Tests des Bedingungscodes im Statusregister: gleich, größer als, weniger als, trägt sie, und die meisten Kombinationen und logische Umkehrungen, das von dem Statusregister).
  • Decrement-und-Zweig: DBCC (wobei „cc“ wie für die Verzweigungsbefehle war), die ein erniedrigte D-Register und verzweigt zu einem Ziel zur Verfügung gestellt die Bedingung noch wahr und das Register war nicht auf -1 verringert worden ist . Diese Verwendung von -1 statt 0 als Abschlusswert erlaubte die einfache Codierung von Schleifen , die nichts zu tun hatten , wenn die Zahl 0 ist mit, für eine zusätzliche Kontrolle , ohne die Notwendigkeit zu beginnen , bevor die Schleife eintritt. Dies auch erleichtert Verschachtelung von dbcc.

68EC000

Motorola 68EC000 Controller

Die 68EC000 ist eine Low-Cost - Version der für Embedded - Controller - Anwendungen konzipiert 68000. Die 68EC000 kann entweder einen 8-Bit oder 16-Bit - Datenbus , umschaltbar auf zurückgesetzt.

Die Prozessoren sind in einer Vielzahl von Drehzahlen einschließlich 8 und 16  MHz - Konfigurationen, die Herstellung von 2.100 und 4.376  Dhrystones jedes. Diese Prozessoren haben keine Floating-Point - Einheit , und es ist schwierig , eine FPU zu implementieren Coprozessor ( MC68881 / 2 ) mit einem , weil die EC - Serie notwendig Coprozessorinstruktionen fehlt.

Der 68EC000 wurde als Controller in vielen Audioanwendungen verwendet werden, einschließlich Ensoniq Musikinstrumente und Soundkarten, wo es Teil der war MIDI - Synthesizer. Auf Ensoniq Soundkarten, sofern der Controller mehrere Vorteile gegenüber Wettbewerbern ohne CPU an Bord. Verschiedene Audio - Aufgaben, wie zur Durchführung der Prozessor der Platine erlaubt konfiguriert wird MPU-401 MIDI - Synthese oder MT-32 - Emulation, ohne die Verwendung eines TSR - Programms. Diese verbesserte Software - Kompatibilität, verringert die CPU - Auslastung, und Host - System Speichernutzung eliminiert.

Das Motorola 68EC000 Kern wurde später in den m68k-basierte verwendet Dragon Ball - Prozessoren von Motorola / Freescale .

Es wurde auch als Sound - Controller in der verwendeten Sega Saturn Spielkonsole und als Controller für den HP JetDirect Ethernet - Controller - Karten für die Mitte der 1990er Jahre LaserJet Drucker.

Beispielcode

Der 68000 Assembler - Code ist unten für ein Unterprogramm genannt strtolower, das kopiert eine null-terminierte Kette von 8-Bit - Zeichen zu einem Zielzeichenfolge, alle alphabetischen Zeichen Umwandeln Fall zu senken.

                     
                     
                     
                     
        
             
                     
                     
                     
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

Das Unterprogramm wird einen Aufrufrahmen A6 als Zeiger Rahmen unter Verwendung registrieren. Diese Art der Aufrufkonvention unterstützt einspringende und rekursive Code und in der Regel von Sprachen wie verwendet wird , C und C ++ . Die Subroutine ruft dann die an sie übergebenen Parameter ( srcund dst) vom Stapel. Es macht dann eine Schleife, ein ASCII - Zeichen zu lesen (ein einzelnes Byte) aus dem srcString, zu prüfen , ob es ein alphabetisches Zeichen ist, und wenn ja, in ein Kleinbuchstabe Umwandlung, dann das Zeichen in das Schreiben von dstString. Schließlich prüft sie , ob der Charakter sei ein Null - Zeichen ; Wenn nicht, ist es die Schleife wiederholt, andernfalls stellt sie wieder her den vorherigen Stapelrahmen (A6 und Register) und kehrt zurück. Beachten Sie, dass die Zeichenfolge Zeiger (Register A0 und A1) auto-inkrementiert sind in jeder Iteration der Schleife.

Im Gegensatz dazu ist der Code unten für eine Stand-alone - Funktion, auch auf der restriktivsten Version von AMS für die TI-89 Serie von Taschenrechnern, wobei Kernel unabhängig, ohne Werte in Tabellen, Dateien oder Bibliotheken nachgeschlagen bei der Ausführung, keine Systemaufrufe, keine Ausnahme Verarbeitung, minimal - Register verwendet werden, noch die Notwendigkeit , jede zu speichern. Sie gilt für historische Julian Daten ab dem 1. März 1 AD, oder für Gregorian diejenigen. In weniger als zwei Dutzend Operationen berechnet sie eine Tagesnummer kompatibel mit ISO 8601 , wenn sie mit drei Eingängen gespeichert an ihren entsprechenden Stellen genannt:

;
;  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)
;
     move.l DATE,d0
     move.l d0,d1
;
; Apply step 1 - Lachman's method of congruence
     andi.l #$f00,d0
     divu #100,d0
     addi.w #193,d0
     andi.l #$ff,d0
     divu #100,d0 ; d0 contains the month index in the upper word
;
; Apply step 2 - Using spqr as the Julian year of the last leap day
     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 + mi + 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 + mi + 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
;

Siehe auch

Verweise

Weiterführende Literatur

Externe Links