Hersteller | Digital Equipment Corporation |
Typ | Minirechner |
Veröffentlichung | 22. März 1965 |
Produktionsende | 1979 |
Neupreis | 18.500 US-Dollar, entsprach 2019 etwa 135.000 Euro |
Prozessor | diskrete Schaltung |
Arbeitsspeicher | 4.096 × 12 Bit |
Grafik | keine |
Sound | keiner |
Datenträger | Lochstreifen |
Betriebssystem | diverse, meist OS/8 oder RTS-8 |
Vorgänger | LINC, PDP-5 |
Nachfolger | PDP-11 als Prozessrechner, PDP-12 |
Der PDP-8 (bei Anwendern meist 'die PDP-8') war ein 12-Bit Minirechner[1] aus der Reihe Programmed Data Processor von Digital Equipment Corporation (DEC). Es war der erste kommerziell erfolgreiche Minicomputer mit weit über 50.000 verkauften Exemplaren, Schätzungen gehen sogar von bis zu 300.000 Exemplaren aus bei Berücksichtigung von kompatiblen Nachbauten.
Das zugrunde liegende Design folgt dem des LINC, allerdings mit reduziertem Befehlssatz, der wiederum eine Erweiterung des Befehlssatz der PDP-5 ist.[2] Spätere, ähnliche Maschinen von DEC waren der PDP-12, der modernisierte Nachfolger der PDP-8, und das PDP-14 Industrial Control System.
Das Urmodell der PDP-8, später informell „Straight-8“ (engl., „straight“ = „astrein, unverfälscht“) genannt, wurde am 22. März 1965 vorgestellt mit einem Verkaufspreis von damals 18.000 US-Dollar, was Mitte 2019 einem Wert von etwa 135.000 Euro entsprach. Im Kern der Maschine arbeitete kein Mikroprozessor, stattdessen war die Zentraleinheit diskret in Diode-Transistor-Logik auf Steckkarten („Flip-Chip“ in der Bezeichnung von DEC) implementiert, die wiederum in einem Gehäuse vom Volumen eines übergroßen Haushalts-Kühlschranks verbaut waren (69⅛″×22¼″×27⅛″, etwa 176cm×57cm×69cm).[3] Es war der erste Computer, der für unter 20.000 US-Dollar verkauft wurde, was ihn schnell zum Verkaufsschlager machte.
Bereits 1966 wurde der Straight-8 die PDP-8/S zur Seite gestellt, die es sowohl in Versionen zum Einbau in ein Rack als auch für den Schreibtisch gab. Die Verwendung einer 1-Bit Arithmetikeinheit (ALU) im PDP-8/S erlaubte es DEC, das Gerät einfacher, kleiner und günstiger zu fertigen und somit als erster Computer überhaupt die Preismarke von 10.000 US-Dollar zu unterschreiten.[4] Zwar war die PDP-8/S aufgrund der einfacheren ALU deutlich langsamer als die Straight-8, ihre Verkaufszahlen waren aber dennoch gut.
Spätere Geräte der Reihe, die PDP-8/I und /L, die PDP-8/E, /F und /M sowie die PDP-8/A, verwendeten dann wieder vollwertig parallele 12-Bit Arithmetikeinheiten, wechselten aber zu günstigeren Transistor-Transistor-Logik (TTL) in integrierten Schaltungen (medium scale integration, MSI). Die meisten heute noch operablen PDP-8 stammen aus dieser Zeit. Darunter wiederum ist die PDP-8/E das verbreitetste Gerät, weil es die größte Anzahl an Speicher- sowie Ein-/ Ausgabegeräten für diesen Gerätetyp gab.
Die letzten kommerziell eingeführten Geräte der PDP-8-Familie kamen als VT78 bzw. DECmate ab 1979 auf den Markt und verwendeten dann CMOS-Mikroprozessoren. Da das Angebot allerdings preislich nicht bestehen konnte, floppten die Geräte. Die Firma Intersil verkaufte die Prozessoren unter der Bezeichnung Intersil 6100 bis 1982, auf Grund der sehr geringen Stromaufnahme der CMOS-Technologie fanden sich Einsatzgebiete in einigen militärisch genutzten Embedded Systems.
Der Chefentwickler und Designer der ersten Generation der PDP-8 war Edson de Castro, welcher später Data General gründete.[5]
Noch funktionsfähige Exemplare der PDP-8 können im Museum „technikum29“ bei Frankfurt am Main und in den Computermuseen der Fakultät Informatik an der Universität Stuttgart sowie der Universität Erlangen-Nürnberg besichtigt werden.[6][7][8]
Die Design-Ziele hinter der PDP-8 waren geringer Preis, einfacher Aufbau, Erweiterbarkeit und solide Konstruktion. Aus heutiger Sicht bedeutend sind hierbei der geringe Preis und die hohen Absatzzahlen – die PDP-8 war damit erstmals attraktiv für neue Kundenkreise und neue Anwendungsfelder.
Die geringe Komplexität des Aufbaus führte jedoch auch zu technischen Schulden: Die Programmierung der PDP-8 war umständlich und aufwändig, was sich vor allem aus dem kleinen Befehlssatz ergibt. Da es weder ein eingebautes Betriebssystem noch Bibliotheken gab, nicht einmal für einfache Aufgaben, musste ein wesentlicher Teil an Programmcode darauf verwendet werden, die Maschine selbst zu steuern, und die Implementierung von Geschäftslogik trat dem gegenüber oft in den Hintergrund.
Zum Beispiel gab es keinen eingebauten Befehl um zwei Zahlen zu subtrahieren. Stattdessen musste der Programmierer selbst zuerst das Zweierkomplement des Subtrahenden bestimmen und dann zum Minuenden addieren.
Viele ambitionierte Software-Projekte scheiterten dran, dass der verfügbare Speicher mit 4.096 Wörtern auch aufgrund dieser Umstände nicht ausreichend war oder aber dass der eingeschränkte Befehlssatz zu Software-Design-Einschränkungen führte, die nicht sauber programmatisch lösbar waren. Zum Beispiel führt das Fehlen eines Stacks dazu, dass versehentliche Rekursion zu Programmfehlern führte, die nur schwer aufzuspüren und zu beheben waren.
Da die fortschreitende Weiterentwicklung zu sinkenden Kosten für Prozessoren und Speicher führten, wurde der Aufwand, den ein Programmierer leisten musste, ein zunehmend relevanter Kostenfaktor.[9] Auch deshalb trugen spätere Computersysteme durch größere und funktional mächtigere Befehlssätze dem Rechnung, um die Programmierung der Systeme einfacher und weniger zeitintensiv zu gestalten.[10]
Über die Zeit wurden schließlich die meisten Programme über Compiler oder Reportgeneratoren erzeugt.
Register der PDP-8 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Technisch handelte es sich bei der PDP-8 um einen 12-Bit-Rechner. Der Hauptspeicher bestand aus 4.096 12-Bit-Wörtern in Form eines Core Stack aus einzelnen Miniatur-Ringmagneten (Kernspeicher), wobei ein Ring genau ein Bit aufnahm.[11] Ein Wort konnte zwei 6-Bit-Zeichen speichern. Waren die ersten PDP-8 noch in DTL-Logik verwirklicht, wurde bei späteren Versionen die Architektur in der schnelleren TTL-Logik implementiert. Mangels Bootloader wurde der Rechner zunächst über eine Maschinenkonsole mit Schaltern und LEDs («Blinkenlights») bedient. Lief die Anwendungssoftware ursprünglich direkt auf der Hardware, wurde später hauptsächlich das Betriebssystem OS/8, seltener RTS-8, verwendet. Programmiert wurde in Assembler, BASIC, Fortran, Focal und Dibol. Abgespeichert wurde die Software anfangs vornehmlich auf Lochstreifen, später auch auf Kleinmagnetbändern, 8-Zoll-Disketten und Festplatten.
Die Gesamtzahl verkaufter Geräte aus der PDP-8 Familie wird auf über 300.000 Exemplare geschätzt.[12] Dabei wurden etwa 3.000 bis 1970, 30.000 bis 1976 verkauft.
Über den Produktionszeitraum wurde die PDP-8 in verschiedenen Fassungen und Konfigurationen verkauft, wobei die PDP-8/E als das prägende Modell betrachtet werden kann.
Von DEC wurden in der erweiterten PDP-8-Familie diese Geräte gebaut:
Modell | Zeitraum | Anzahl | Preis | Technologie | Gewicht | Anmerkungen |
---|---|---|---|---|---|---|
PDP-5 | 1963–1965 | 116 | ? | DTL | Vorläufer mit einem Subset an Instruktionen | |
PDP-8 | 1965–1969 | 1.450 | $ 15.000,00 | DTL | 113 kg[3] | |
LINC-8 | 1966–1969 | 142 | $ 38.000,00 | DTL | Kombination einer LINC und einer PDP-8 in einem Gehäuse. | |
PDP-8/S | 1966–1970 | 1.024 | $ 10.000,00 | DTL | 38 kg[13] | Serielle Implementation, daher vergleichsweise langsam. |
PDP-8/I | 1968–1971 | 3.698 | $ 12.800,00 | TTL | 110 kg[14] | 55 ⨉ 76 ⨉ 181 cm. 32 kB RAM. |
PDP-8/L | 1968–1971 | 3.902 | $ 8.500,00 | TTL | 36 kg[15] | Verkleinerte Version der PDP-8/I |
PDP-12 | 1969–1973 (?) | 755 | $ 27.900,00 | TTL | Nachfolger der LINC-8 | |
PDP-8/E | 1970–1978 | > 10.000 (?) | $ 6.500,00 | TTL MSI Omnibus | 41 kg[16] | |
PDP-8/F | 1972–1978 (?) | > 10.000 (?) | < $ 5.000,00 | TTL MSI Omnibus | 26 kg[16] | Basiert auf der PDP-8/E CPU |
PDP-8/M | 1972–1978 (?) | > 10.000 (?) | < $ 5.000,00 | TTL MSI Omnibus | 26 kg[16] | OEM-Version der PDP-8/F |
PDP-8/A | 1975–1984 (?) | > 10.000 (?) | $ 1.317,00 | TTL LSI Omnibus | ||
VT78 | 1978–1980 | $ 7.995,00 | Intersil 6100 | kompatible Arbeitsplatz-Workstation | ||
DECmate | 1980–1984 | ? | Harris 6120 | kompatible Arbeitsplatz-Workstation | ||
DECmate II | 1982–1986 | $ 1.435,00 | Harris 6120 | kompatible Arbeitsplatz-Workstation | ||
DECmate III | 1984–1990 | $ 2.695,00 | Harris 6120 | kompatible Arbeitsplatz-Workstation | ||
DECmate III+ | 1985–1990 | ? | Harris 6120 | kompatible Arbeitsplatz-Workstation |
Im Ostblock entstanden schnell Nachbauten der PDP-Serie von Computern, die ungarischen TPA1001, TPA1001/i, TPA/l, TPA1/128H, TPA/s und TPA Quadro waren dort anfänglich auf Basis von Transistoren, später auch auf Basis der Intersil-6100-Prozessoren entwickelte Klone.[17][12]
Sowjetische Nachbauten waren die Electronica-100, Electronica-100I und Saratov-2-Geräte.[12] Ferner gab es auf Kuba die CID-201, von der mehr als 200 Exemplare gebaut wurden, sowie im damaligen Jugoslawien die Electrotechnica-100I (die eventuell technisch identisch zur sowjetischen Electronica-100I war).
Teilweise kompatible Geräte im Westen waren die SPEAR u-LINC 100 und SPEAR u-LINC 300, die DCC-112 und DCC-112H, sowie die von Intersil gebauten Intercept I und Intercept Jr.[12]
Basierend darauf, dass heutzutage selbst kleinste Rechner eine größere Leistungsfähigkeit haben als die originalen PDP-8-Modelle, gibt es eine Vielzahl von Emulatoren. Ein JAVA-Emulator in Form eines einzelnen JAR-Paketes visualisiert das gesamte Bediensystem (inkl. Frontpanel) sowie die Hardware[18]. Bei dem am weitesten verbreiteten Emulator dürfte es sich um SIMH[19] handeln; dieser Emulator ist in der Lage, eine Vielzahl historischer CPUs zu emulieren. Ein verkleinertes, jedoch authentisches Frontpanel der PDP-8 mit entsprechender Logik in Kombination mit einem Emulator, der auf einem Raspberry Pi läuft, lässt das ursprüngliche System wieder auferstehen.[20]
Befehlscodierung der PDP-8 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Der Befehlssatz der PDP-8 codiert Befehl und Operand in stets genau ein 12-Bit Wort, dabei ist es für einige Operationen sogar möglich, bei identischem Operanden mehrere Befehle in ein einziges 12-Bit Wort zu kodieren.
Die drei höchsten Bits des 12-Bit Worts (mit den Bits 0 bis 2 bezeichnet) sind der Befehlscode. Bei den sechs Operationen, die sich auf den Speicher beziehen, geben die Bits 5 bis 11 eine 7-Bit-Adresse an. Wenn Bit 4 gesetzt ist, bedeutet dies, dass die Adresse mit den 5 höchsten Bits des Programmzählerregisters (PC) vervollständigt werden soll, was bedeutet, dass sich die adressierte Stelle innerhalb der gleichen 128 Wörter wie der Befehl befindet. Wenn Bit 4 nicht gesetzt ist, werden Nullen verwendet, so dass die adressierte Stelle innerhalb der ersten 128 Wörter des Speichers liegt. Bit 3 spezifiziert "indirection"; wenn es gesetzt ist, verweist die so erhaltene Adresse auf einen 12-Bit-Wert im Speicher, der die tatsächliche effektive Adresse für die Anweisung angibt. Dadurch können die Operanden an einer beliebigen Stelle im Speicher liegen, was jedoch dann ein zusätzliches 12-Bit Wort kostet. Der JMP-Befehl operiert nicht mit einem Speicherwort, es sei denn, es ist "indirection" angegeben, nutzt aber die gleichen Bitfelder.
Die folgenden Beispiele zeigen Code in PDP-8 Assemblersprache, wie er mit dem PAL-III Assembler übersetzt werden könnte.
Wie im oben stehenden Abschnitt zur Bedeutung der PDP-8 erwähnt, war ein Programmierer für die PDP-8 sehr viel damit beschäftigt, einfache Dinge aufwändig selbst zu programmieren. Diese 6 Instruktionen sind notwendig, um zwei Zahlen in den Speicherstellen ORD1
und ORD2
zu vergleichen:
/Vergleich der Zahlen in OPD1 und OPD2
CLA CLL / Lösche Accumulator und Überflussbit
TAD OPD1 / Lade die erste Zahl in den Accumulator.
/ Es gibt keinen expliziten Ladebefehl,
/ also wird der Umweg über Addition gegangen.
CIA / Bilde das Zweierkomplement und addiere
/ eins. Damit steht jetzt der Negativwert
/ von OPD1 im Accumulator
TAD OPD2 / Addiere OPD2, damit enthält der Accumulator
/ jetzt OPD2-OPD1.
/ Wenn OPD2≥OPD1 gibt es einen Überlauf und
/ das Link-Flag wird gesetzt
SZL / Überspringe die nächste Anweisung wenn
/ kein Überlauf, also wenn OPD2<OPD1 …
JMP OP2GE / Springe irgendwohin falls Überlauf,
/ also falls OPD2≥OPD1
/ Hier geht dann der Fall OPD2<OPD1 weiter …
Eine mögliche Fassung von „Hello, world!“ mit Ausgabe auf dem Drucker, wobei hier zur Illustration der Befehlskodierung die Ausgabe des PAL
Assemblers gezeigt wird, also Speicherstelle (Spalte 1) und Speicherinhalt (Spalte 2), der eigentliche Programmcode steht ab Spalte 3:
0010 *10 / Set current assembly origin to address 10,
00010 0207 STPTR, STRNG-1 / An auto-increment register (one of eight
/ at 10-17)
0200 *200 / Set current assembly origin to program
/ text area
00200 7300 HELLO, CLA CLL / Clear AC and Link again (needed when we
/ loop back from tls)
00201 1410 TAD I Z STPTR / Get next character, indirect via
/ PRE-auto-increment address from the
/ zero page
00202 7450 SNA / Skip if non-zero (not end of string)
00203 7402 HLT / Else halt on zero (end of string)
00204 6046 TLS / Output the character in the AC to the
/ teleprinter
00205 6041 TSF / Skip if teleprinter ready for character
00206 5205 JMP .-1 / Else jump back and try again
00207 5200 JMP HELLO / Jump back for the next character
00210 0310 STRNG, 310 / H
00211 0345 345 / e
00212 0354 354 / l
00213 0354 354 / l
00214 0357 357 / o
00215 0254 254 / ,
00216 0240 240 / (space)
00217 0367 367 / w
00220 0357 357 / o
00221 0362 362 / r
00222 0354 354 / l
00223 0344 344 / d
00224 0241 241 / !
00225 0000 0 / End of string
$HELLO /DEFAULT TERMINATOR
Die Ausgabe von Speicheradresse und -inhalt ist oktal dargestellt, sodass diese leicht über die Schalter am Bedienfeld direkt in die Speicherstellen eingegeben werden können. Für oben stehendes Programm würde zunächst den Wert 0010
einstellen (oktal, also 000-000-00I-000
mit 0 bzw. I als Aus bzw. Ein) und dann mittels Load Add
als aktive Adresse setzen. Anschließend würde der Wert 0207
(000-0I0-000-III
) eingestellt und mittels Dep
im Speicher deponiert. Der Addresszähler springt dabei automatisch eine Stelle weiter (und zeigt dann auf 0011
). Als nächstes wird 0200
(000-0I0-000-000
) eingestellt und mit Load Add
geladen, dann 7300
(III-0II-000-000
) mit Dep
deponiert, anschließend ist der Adresszeiger korrekt und die nächste Instruktion kann sofort mit 1410 (00I-I00-001-000
) deponiert werden usf.
Am Ende wird erneut Adresse 0200
eingestellt und mit Start
gestartet. Das Programm gibt „Hello, world!“ auf dem Drucker aus und die Maschine geht in den Haltezustand.