• 20Minuten
blank

Interrupts und Vektoren

Die CPU kennt sieben Interrupt-Levels. Die Stufen 1 bis 5 sind streng priorisiert. Das heißt, ein Interrupt mit höherer Nummer kann immer einen Interrupt mit niedrigerer Nummer unterbrechen. Im Statusregister kann mit einem privilegierten Befehl die aktuelle Mindestunterbrechungsstufe eingestellt werden, wodurch Unterbrechungen mit niedrigerer oder gleicher Priorität blockiert werden. Wenn beispielsweise der Interrupt-Level im Statusregister auf 3 gesetzt ist, können höhere Level von 4 bis 7 eine Ausnahme auslösen. Level 7 ist ein Level-ausgelöster nicht-maskierbarer Interrupt (NMI). Stufe 1 kann durch jede höhere Stufe unterbrochen werden. Stufe 0 bedeutet keine Unterbrechung. Die Stufe wird im Statusregister gespeichert und ist für Programme auf Benutzerebene sichtbar.

Hardware-Interrupts werden der CPU über drei Eingänge signalisiert, die die höchste anstehende Interrupt-Priorität kodieren. Für Systeme, die nicht mehr als drei Hardware-Interrupts benötigen, ist es allerdings möglich, die Interrupt-Signale direkt an die kodierten Eingänge anzuschließen, was jedoch zu einem höheren Softwareaufwand führt.

Die „Ausnahmetabelle“ (Interrupt-Vektor-Tabelle/Interrupt-Vektor-Adressen) ist auf die Adressen 0 bis 1023 festgelegt, was 256 32-Bit-Vektoren ermöglicht. Der erste Vektor (RESET) besteht aus zwei Vektoren, nämlich der Start-Stack-Adresse und der Start-Code-Adresse. Die Vektoren 3 bis 15 werden zur Meldung verschiedener Fehler verwendet: Busfehler, Adressfehler, illegaler Befehl, Null-Division, CHK- und CHK2-Vektor, Privilegienverletzung (um eine Privilegienerweiterung zu verhindern) und einige reservierte Vektoren, die zu Zeile 1010-Emulator, Zeile 1111-Emulator und Hardware-Haltepunkt wurden. Vektor 24 startet die echten Interrupts: Spurious Interrupt (keine Hardware-Quittierung) und die Autovektoren der Stufen 1 bis 7, dann die 16 TRAP-Vektoren, dann einige weitere reservierte Vektoren und schließlich die benutzerdefinierten Vektoren.

Da der Vektor mit der Startadresse beim Zurücksetzen immer gültig sein muss, enthielten die Systeme üblicherweise einen nichtflüchtigen Speicher (z. B. ROM), der mit der Adresse Null beginnt und die Vektoren und den Bootstrap-Code enthält. Für ein Allzwecksystem ist es jedoch wünschenswert, dass das Betriebssystem die Vektoren zur Laufzeit ändern kann. Dies wurde oft dadurch erreicht, dass die Vektoren im ROM auf eine Sprungtabelle im RAM verwiesen wurden, oder durch Bank-Switching, damit das ROM zur Laufzeit durch RAM ersetzt werden konnte.

Nicht ganz perfekt

Der 68000 erfüllt nicht die Anforderungen von Popek und Goldberg für eine vollständige Prozessorvirtualisierung, da er nur einen einzigen unprivilegierten Befehl, „MOVE from SR“, besitzt, der der Software im Benutzermodus einen Lesezugriff auf einen kleinen Teil des privilegierten Status ermöglicht. Die 68EC000 und 68SEC000, die späteren Derivate des 68000, erfüllen die Anforderungen.

Der 68000 ist auch nicht in der Lage, virtuellen Speicher zu unterstützen, was die Fähigkeit erfordert, einen fehlgeschlagenen Speicherzugriff zu trappen und wiederherzustellen. Der 68000 bietet zwar eine Busfehler-Ausnahme, die zum Trappen verwendet werden kann, aber sie speichert nicht genug Prozessorstatus, um die fehlerhafte Anweisung wieder aufzunehmen, sobald das Betriebssystem die Ausnahme behandelt hat. Einige Firmen haben es geschafft, 68000-basierte Unix-Workstations mit virtuellem Speicher zu bauen, die mit zwei parallel laufenden 68000-Chips mit unterschiedlichen Taktfrequenzen arbeiteten. Wenn der „führende“ 68000er auf einen fehlerhaften Speicherzugriff stieß, wurde der „Haupt“-68000er durch zusätzliche Hardware unterbrochen, um zu verhindern, dass er ebenfalls auf den fehlerhaften Speicherzugriff stieß. Diese Unterbrechungsroutine wickelte die virtuellen Speicherfunktionen ab und setzte den „führenden“ 68000 in den richtigen Zustand zurück, um den synchronisierten Betrieb fortzusetzen, wenn der „Haupt“-68000 von der Unterbrechung zurückkehrte.

Diese Probleme wurden bei der nächsten größeren Revision der 68k-Architektur mit der Veröffentlichung des MC68010 behoben. Die Ausnahmen „Bus Error“ und „Address Error“ schoben einen großen Teil des internen Zustands auf den Supervisor-Stack, um die Wiederherstellung zu erleichtern, und die Anweisung „MOVE from SR“ wurde privilegiert. Ein neuer unprivilegierter „MOVE from CCR“-Befehl steht zur Verfügung, der von Software im Benutzermodus verwendet werden kann. Ein Betriebssystem kann „MOVE from SR“-Befehle im Benutzermodus trappen und emulieren, falls gewünscht.

68EC000

Der 68EC000 ist eine kostengünstige Version des 68000 mit einer leicht veränderten Pinbelegung, die für eingebettete Steuerungsanwendungen entwickelt wurde. Er kann entweder einen 8-Bit- oder einen 16-Bit-Datenbus haben, der bei Reset umschaltbar ist.

Die Prozessoren sind in verschiedenen Geschwindigkeiten erhältlich, darunter 8- und 16-MHz-Konfigurationen, die jeweils 2.100 und 4.376 Dhrystones erzeugen. Diese Prozessoren haben keine Gleitkommaeinheit, und es ist schwierig, einen FPU-Coprozessor (MC68881/2) mit einem solchen zu implementieren, da der EC-Serie die notwendigen Coprozessorbefehle fehlen.

Der 68EC000 wurde als Controller in vielen Audioanwendungen eingesetzt, u. a. in Musikinstrumenten und Soundkarten von Ensoniq, wo er Teil des MIDI-Synthesizers war. Auf den Soundkarten von Ensoniq bot der Controller mehrere Vorteile gegenüber den Mitbewerbern ohne CPU an Bord. Der Prozessor ermöglichte es, die Karte so zu konfigurieren, dass sie verschiedene Audioaufgaben ausführen konnte, z. B. die MPU-401-MIDI-Synthese oder die MT-32-Emulation, ohne dass ein Terminate-and-Stay-Resident-Programm erforderlich war. Dies verbesserte die Softwarekompatibilität, senkte den CPU-Verbrauch und eliminierte den Speicherbedarf des Host-Systems.

Der Motorola 68EC000-Kern wurde auch später in den m68k-basierten DragonBall-Prozessoren von Motorola/Freescale verwendet. Er wurde ebenso als Sound-Controller in der Spielkonsole Sega Saturn und als Controller für die HP JetDirect-Ethernet-Controller-Karten für die HP LaserJet-Drucker Mitte der 1990er Jahre eingesetzt.

Autor

Abonnieren
Benachrichtige mich bei
guest

0 Comments
Inline Feedbacks
Alle Kommentare anzeigen