Der Intel 8085 ist ein 1976 eingeführter 8-Bit-Mikroprozessor von Intel. Als Nachfolger des Intel 8080 war er zu diesem binär-kompatibel, integrierte jedoch Taktgenerator (8224) und Buscontroller (8228) und besaß eine leistungsfähigere Interrupt-Behandlung. Die 5 im Namen bezog sich auf den Fakt, dass der Prozessor nur eine 5-Volt-Betriebsspannung benötigte. Am Markt konkurrierte der Intel 8085 mit dem im selben Jahr erschienenen Zilog Z80, der ebenfalls binär abwärtskompatibel zum Intel 8080 war. Zum Einsatz kam der Chip in verschiedenen CP/M-Computern, bei der Ausbildung von Elektronikern sowie als Mikrocontroller in Büroschreibmaschinen, Oszilloskopen, aber auch im Rover der Marssonde Pathfinder.

Technische Daten mini|hochkant=1.9|Intel 8085: Funktionsblockschaltbild Taktfrequenz: 5 MHz (andere Versionen mit 3 MHz oder 6 MHz) Anzahl Transistoren: 6500 bei 3 µm Strukturgröße Datenbus: 8 Bit Adressbus: 16 Bit in der AH Version 20 % weniger Stromverbrauch gegenüber dem normalen 8085 Direkt adressierbarer Speicher von 64 KB 1,33 µs Befehlszyklus (0,80 µs beim 8085AH-2 / 0,67 µs beim 8085AH-1) 4 vektorisierte Interrupt-Inputs (einer davon ist nicht maskierbar und ein anderer ist ein 8080A-kompatibler Interrupt) binäre 8-Bit- und 16-Bit-Addition, Unterstützung von 8-Bit-BCD-Addition und -Subtraktion (DAA-Befehl) 40-Pin-DIL-Package

Neben dem Intel-Original wird der Prozessor auch von anderen Herstellern, teilweise mit verbesserten Eigenschaften, hergestellt. Der schnellste 8085-Prozessor stammt mit 8 MHz vom US-amerikanischen Unternehmen Tundra Semiconductor.

Aufbau Anschlussbelegung und Funktion

Bezeichnung(Symbol) Pin (E)ing.(A)usg. Funktion A8...A15 (AH) 21...28 A Adressbus höherwertige 8 Bit der Speicher- oder Portadresse AD0...AD7(AL oder D0...D7) 12...19 E / A Gemultiplexter Adress- und Datenbus (Zeitmultiplexer) 1. Taktperiode eines Zyklus → Low-Byte einer Adresse 2. und 3. Taktperiode → DatenbusALE30AAdress Latch Enable, Adressenspeicher FreigabeSignal 1: AD0–AD7 führen Adresse, ist aktiv beim ersten Taktzyklus während des ersten Maschinenzyklus. Dadurch wird der Adresszwischenspeicher freigegeben.S0, S129, 33AMaschinenstatussignale, Anzeigen des Betriebszustandes der CPU S1 S0 Betriebszustand00Warten durch HOLD01Operand schreiben10Operand lesen11Befehlscode holen definiert so zusammen mit IO/ den laufenden MaschinenzyklusIO/M34AInput-Output/Memory, I/O-Port-Zugriff/Speicher-ZugriffUnterscheidet zwischen Speicher- und I/O-Port-Zugriff0 → Speicher-Zugriff1 → I/O-Port-ZugriffRD32ARead, Lesen (Low-aktiv)0 → CPU hat den Datenbus freigegeben und erwartet Daten vom Speicher oder Eingabeport0 ↑ 1 (steigende Flanke) → CPU übernimmt die Daten vom DatenbusWR31AWrite, Schreiben (Low-aktiv)0 → CPU zeigt an, dass gültige Daten auf dem Datenbus liegenREADY35EReady, Bereitschaft1 → Speicher- oder Portbausteine sind bereit zum Datentransfer0 → CPU wartet mit Schreib- oder LesezyklusHOLD39EHold, Anhalten1 → eine andere Einheit fordert die Busse an, CPU gibt den Bus frei, sobald die laufende Busoperation beendet ist.HLDA38AHold Acknowledge, Bestätigung des HOLD-ZustandesHLDA ← 0 wenn HOLD-Aufforderung == 0Eine halbe Taktperiode später übernimmt die CPU den Bus wieder.INTR10EInterrupt Request, Unterbrechungsanforderungallgemeiner Interrupt-Eingang zum Auslösen von Programmunterbrechungen von externen Signalen, wird per Software gesperrt oder freigegebenINTA11AInterrupt Acknowledge, Unterbrechungsannahmewird nach Annahme eines INTR anstelle von RD verwendet → Aktivierung eines InterruptbausteinesRST5.5RST6.5RST7.5987ERestart-Interrupts, Neustartunterbrechungendie durch die Befehle SIM und DI maskierbar sind. Alarmmeldung bei 0-1-Übergang. Hier wird nach 3Ch verzweigt. RST7.5 höchste Priorität der RSTs, RST5.5 die niedrigste.TRAP6ENicht maskierbarer Restart-Interrupt-EingangRESIN36EReset Input, Rücksetz-EingangDurch einen Reset wird der Programmzähler auf Null gesetzt. Außerdem werden die HLDA und HOLD Flip-Flops zurückgesetzt. Während des Resets sind Daten-, Adress- und Meldeleitungen hochohmig geschaltet. Da es sich hierbei um eine asynchrone Leitung handelt, können die internen Register in einen undefinierten Zustand gelangen.RESOUT3AReset Output, System-Rücksetz-SignalKann als Systemreset benutzt werden. Dieses Signal ist mit dem Prozessortakt synchronisiert.X1, X21, 2ETakteingangCLK37AClock, Taktausgang zur Verwendung als Systemtakt. Dieser ist halb so hoch als der an X1, X2 eingestellteSID5ESerial Input Data, Eingang für serielle Datenübertragung durch Ausführung des RIM-Befehls wird der Wert in den Akkumulator übernommen.SOD4ASerial Output Data, Ausgang für serielle Daten-Übertragung serieller Datenausgang, wird gesetzt oder zurückgesetzt durch einen SIM Befehl.VCC +5 V40Versorgungsspannung (+5 V)VSS GND20Masse (0 V)

Register Die 8-Bit-Register können für 16-Bit-Befehle zu Registerpaaren zusammengenommen werden, dies sind A/FLAG, B/C, D/E und H/L. Die Bildung der Registerpaare ist bei den Stackbefehlen PUSH und POP und bei Adressierungs- und Adressrechnungsbefehlen bedeutsam.

Register Reg Funktion / Bedeutung A  Akkumulator (8 Bit) B  allg. Register (8 Bit) C  allg. Register (8 Bit) D  allg. Register (8 Bit) E  allg. Register (8 Bit) H  allg. Register (8 Bit) L  allg. Register (8 Bit) FLAG  Zustandsregister (8 Bit) INT  Interruptregister (8 Bit) IC  Befehlszähler (16 Bit) SP  Stackpointer (16 Bit) Die allgemeinen Register B, C, D und E dienen im Wesentlichen den logischen und arithmetischen 8-Bit-Operationen, die auch mit den Registern H und L möglich sind, aber vermieden werden sollten. Die letztgenannten Register spielen bei den 16-Bit-Operationen eine gewisse Sonderrolle. Die Ergebnisse der meisten Operationen stehen im Akkumulator A.

Registerpaare Den Registerpaaren kommen dabei besondere Aufgaben zu, je nach der Art der Adressierung. So können die Registerpaare BC, DE und 'HL' benutzt werden, um in indizierter Adressierung Daten vom Arbeitsspeicher in den Akkumulator A zu lesen oder dorthin zu schreiben. Das Paar HL erlaubt neben dem Akkumulator den Einsatz aller 8 bit-Register A, B, C, D, H oder L als Quelle oder Ziel. Weitere Befehle erlauben den direkten Austausch der Inhalte der Registerpaare DE und HL, den Austausch des Inhalts der aktuellen Stapelspitze (SP+1)(SP) mit HL, den Inhalt von HL in den Stackpointer und auch den Inhalt von HL in den Befehlszähler zu kopieren. Die Registerpaare können inkrementiert, dekrementiert und zum Registerpaar HL addiert werden.

Die Technik mit den Registerpaaren wurde im Nachfolgemodell 8086 wesentlich erweitert.

Zustandsregister Im Zustandsregister sind fünf der acht Bits belegt. Diese haben bei bedingten Sprüngen und Aufrufen die Aufgabe, zu entscheiden, ob eine Sprung- oder Aufrufbedingung erfüllt ist. Dies sind im Einzelnen N (negativ) bzw. S (sign), Z (zero – Null), H (half carry – Halbübertrag) bzw. AC (Auxiliary Carry – Hilfsübertrag), P (parity – Parität) und C (Carry – Übertrag).

Zustandsregister 7 6 5 4 3 2 1 0 N/S Z – H/AC – P – C Gesetzt werden die Bits bei allen logischen und arithmetischen 8-Bit-Operationen, nicht jedoch bei Kopier- und Austauschbefehlen. Von den 16-Bit-Befehlen setzt nur die Addition eines Registerpaares zum Paar H/L das Carry-Bit. Wichtig bei Increment- und Decrement-Befehlen ist das Fehlen des C-Bits (Carry), bei 8-Bit-Operationen kann ein Überlauf nur mit dem Z-Bit (Zero) überprüft werden, bei 16-Bit-Operationen nur durch nachgeschaltete OR-Befehle.

Interruptregister Interruptregister (Schreiben und Lesen) 7 6 5 4 3 2 1 0 – 0 – R7.5 MSE M7.5 M6.5 M5.5 – I7.5 I6.5 I5.5 INTE M7.5 M6.5 M5.5

Die Belegung des Interruptregisters ist abhängig von Schreib- oder Lesezugriff und Betriebsart unterschiedlich. Das Register dient im Wesentlichen zur Abfrage und Überprüfung von Interruptzuständen und der Maskierung (Sperrung) einzelner Interrupts. Beim Schreiben (SIM-Befehl) in das Register muss Bit 6 immer 0 sein, um das Register zu verändern, darüber hinaus muss Bit 3 (MSE) auf 1 gesetzt sein, um die Interruptmaskierung in den Bits 0 bis 2 zu übernehmen.

Interrupts und Reset Hardwareinterrupts Int. Funktion / Bedeutung TRAP  (Pin 6) – positiv flankengetriggert RST 5.5  (Pin 9) – positiv pegelgetriggert RST 6.5  (Pin 8) – positiv pegelgetriggert RST 7.5  (Pin 7) – positiv flankengetriggert /RESIN  (Pin 36) – negativ pegelgetriggert InterruptvektorenAdresse Auslösung 0000h  RESIN / RST 0 0008h  RST 1 0010h  RST 2 0018h  RST 3 0020h  RST 4 0024h  TRAP 0028h  RST 5 002Ch  RST 5.5 0030h  RST 6 0034h  RST 6.5 0038h  RST 7 003Ch  RST 7.5 kursiv = Softwareinterrupt

Gegenüber dem Vorgänger 8080 wurde die Interruptsteuerung deutlich erweitert. Neben dem ursprünglichen Interrupt (durch Interrupt-Controller gesteuert) verfügt der 8085 über vier weitere Interrupteingänge. Die vektorisierten Interrupts und der Reset steuern im 8085 feste Adressen an, ein Konzept, das bei den Nachfolgertypen aufgegeben wurde. Ab dem 8086 werden die Interruptadressen in einer Tabelle in den ersten 1024 Bytes gespeichert.

Adressierung Der 8085 verfügt über einen Adressraum von 64 KBytes für Speicherzugriffe und 256 Adressen für Portzugriffe. Die Unterscheidung zwischen Speicher- und Portzugriff wird durch einen Ausgang IO/ geregelt, bei Portzugriffen liegt hier ein H an, bei Speicherzugriffen ein L. Als Besonderheit gilt, dass bei Portzugriffen die Portadresse sowohl an AD0 bis AD7 als auch an A8 bis A15 anliegen. Die niederwertigen 8 Bits der Adresse sind gemeinsam mit den Datenbus gemultiplext, das bedeutet, sie teilen sich die gleichen Anschlüsse AD0 bis AD7. Die höherwertigen 8 Bits haben eigene Anschlüsse A8 bis A15. Um anzuzeigen, dass eine gültige Adresse am Bus anliegt, gibt der Prozessor am Ausgang ALE (Address Latch Enable) ein H aus. Die Adresse kann dann in einem externen Speicher zwischengespeichert werden, dabei übernimmt ein negativ flankengetriggerter oder positiv pulsgetriggerter externer Speicherbaustein (meist ein D-Flipflop) den Inhalt von AD0 bis AD7 und gibt dies an die niederwertigen acht Bits des reinen Adressbusses aus. In manchen Schaltungen wird zur Verbesserung des Zeitverhaltens auch das höherwertige Adressbyte A8 bis A15 ebenfalls zwischengespeichert, auch wenn dies für den 8085 eigentlich nicht zwingend erforderlich ist.

Über die Ausgänge S0 und S1 wird darüber hinaus der Status des laufenden Maschinenzyklus ausgegeben (siehe Tabelle oben). Durch externe Bausteine kann hiermit eine Adresserweiterung aufgebaut werden, die aber nicht an die Segmentsteuerung der Nachfolgemodelle heranreicht.

Maschinenbefehle mini|hochkant=2|Schematischer Aufbau eines Maschinenbefehls Befehlsaufbau Ein Assembler-Programm besteht aus einer Folge von 8-Bit-Befehlen, in Ausnahmefällen auch Befehlen, die aus 2 aufeinanderfolgenden Bytes bestehen. Die Abarbeitung erfolgt stets sequentiell. Bei einer Wortbreite von 8 Bit sind maximal 256 verschiedene Befehle möglich, von denen beim 8085 aber nur 246 implementiert sind. Bei jedem Befehl enthält das erste Byte den Operationscode (Op-Code), ist also der Operator. Oft ist der Operand, also z. B. der Akkumulator, schon implizit enthalten, dann ist der ganze Befehl nur ein Byte lang. Der Befehl insgesamt kann aber auch 2 oder 3 Byte lang sein: 1-Byte-Befehl: Nur Operationscode 2-Byte-Befehl: Operationscode + Operand (8-Bit-Konstante oder 8-Bit-Portadresse) 3-Byte-Befehl: Operationscode + Operand (16-Bit-Konstante oder 16-Bit-Adresse). Der Befehlsablauf im Mikroprozessor entspricht dem Von-Neumann-Schema. Zunächst wird der Befehl, auf den der Inhalt des Befehlszählregisters (Program Counter, PC, IC) zeigt, geholt und in den Befehlsdekoder gespeichert. Dort wird er dann dekodiert. mini|hochkant=1.2|Abarbeitungsschritte eines Maschinenbefehls des 8085 Ein Befehl benötigt 1 bis 5 Maschinenzyklen (Maschine Cycle, Operationszyklen) M1 – M5 Ein Maschinenzyklus besteht aus 3 bis 6 Taktzyklen (States, Operationschritte) T1 – T6.