logo Computermuseum der
Stuttgarter Informatik
english français

Intel 8008 Einplatinencomputer


Bild: Intel C8008

Pin-Out

        ---V---
Vdd   1[       ]18   interrupt        Man beachte:
 D7   2[       ]17   ready             Im Gegensatz zum i8080
 D6   3[       ]16   phi 1             braucht der 8008 nur eine
 D5   4[       ]15   phi 2             Betriebsspannung: -14V
 D4   5[       ]14   sync              Um ihn mit TTL-Schaltungen
 D3   6[       ]13   S0                zu kombinieren, wurde mit
 D2   7[       ]12   S1                zwei Spannungen gearbeitet:
 D1   8[       ]11   S2                +5V und -9V. 
 D0   9[       ]10   Vcc               Der Bezugspol ist dann Vdd
        -------

Erklärung der Anschlußpins:

Die 8008-States

Name S2 S1 S0    Funktion
T1    0  1  0    Niederwertiges Adressbyte
T1I   1  1  0    wie T1, aber Interrupt erkannt
T2    1  0  0    Höherwertiges Adressbyte + cc2 und cc1
wait  0  0  0    Warte auf langsamen Speicher
T3    0  0  1    Daten Ein- Ausgabe (Speicherzugriff)
stop  0  1  1    Warte auf Interrupt
T4    1  1  1    interner Datentransfer
T5    1  0  1    interner Datentransfer

Der T3-Status wird durch die in T2 ausgegebenen cc2 und cc1 weiter differenziert:

Name cc2 cc1     Funktion
PCI   0   0      Instruction Cycle. Das erste Byte (OPC) wird aus dem
                 Speicher gelesen.
PCR   1   0      Read Cycle. Daten oder weitere Teile des Befehls aus
                 dem Speicher lesen.
PCC   0   1      Command Cycle. Input-Output-Befehl.
                 Ob Input oder Output hängt von der Adresse ab.
PCW   1   1      Write Cycle. Daten in den Speicher schreiben.

Architektur des Intel 8008

Allgemeines

Entgegen anderslautender Gerüchte ist der i8008 weder eine 'Verdoppelung' des 4-Bitprozessors i4004, noch ist er vom PDP8 inspiriert. Das einzige, was gegenüber dem 4004 verdoppelt war, ist die Breite der Datenpfade. Ansonsten hat der 4004 eine Harvard-Architektur, der 8008 ist ein von-Neumann-Rechner. Der 4004 hat 16 Datenregister, der 8008 nur 7. Daß die Firma Intel in ihren alten Datenbüchern für beide Prozessoren das gleiche Blockdiagramm verwendete, und sich beide nur durch die Beschriftung unterscheiden, beweist nur wieder, daß der Spruch "Ein Bild sagt mehr als 1000 Worte" dumm und falsch ist. Bilder tragen i.A. wenig zur Information bei.

Zurück zum i8008:
Der Prozessor besitzt 7 für den Programmierer sichtbare Register: A, B, C, D, E, H und L. A ist ein Akkumulator, B-E sind Scratchpadregister zur Aufnahme von Zwischenwerten, H und L sind zwei Register mit Hilfe derer der Speicher adressiert werden kann. Die einzige Möglichkeit, Daten im Speicher zu erreichen, besteht darin, H und L als doppeltlanges Indexregister zusammenzufassen, und ein achtes virtuelles Register M anzusprechen, welches das Byte im Speicher darstellt, das durch HL adressiert wird. Eine direkte Speicheradressierung ist nicht möglich, für jeden Zugriff muß erst wenigstens das L-Register explizit geladen werden! Der Stack ist auf dem Chip, er besitzt acht Ebenen. Zugriff darauf ist nur durch CALL und RETURN-Befehle möglich. Es ist auch nicht möglich, z.B. bei einem Interrupt, den Prozessorstatus irgendwo abzuspeichern, genausowenig wie es möglich ist, alle Register zu retten. Um irgendeinen Registerinhalt retten zu können, muss ja wenigsten der Inhalt des L-Registers verändert werden. Dieses, und die umständliche Speicheradressierung über (HL) oder M machen den 8008 für allgemeine Anwendungen ziemlich ungeeignet.

Befehlssatz

Intel hat für den 8008 zwei Assemblerbefehlssätze definiert. Der binäre Maschinencode blieb natürlich bei beiden gleich. Der ältere Befehlssatz ist so konstruiert, daß der Assembler möglichst einfach wird: Alle Registeradressen sind im OPC enthalten, der stets aus drei Buchstaben besteht. Man kann drei Großbuchstaben in 16 Bits kodieren, was das Durchsuchen der OPC-Tabelle vereinfacht und beschleunigt. Außerdem gab Intel in den alten Beschreibungen den Maschinencode Oktal an, was dadurch gerechtfertigt war, daß die meisten Befehle zwei mit drei Bits kodierte Registeradressen beinhalten. Dadurch wird Handassemblieren und Disassemblieren des nackten Codes etwas erleichtert.