# PDP-10

Die PDP-10 war die 36-Bit-Rechnerfamilie von DEC. Sie wurde 1966 als aufwärtskompatible Weiterentwicklung der PDP-6 auf den Markt gebracht und später als DECSystem-10 oder DECSystem-20 vermarktet. Die Systeme konnten sowohl von ihren Leistungsdaten als auch von ihren äußeren Abmessungen her als Mainframe eingestuft werden.
Innerhalb der Produktreihe gab es vier verschiedene Zentraleinheiten (KA10, KI10, KL10 und KS10). Die Beendigung der Entwicklungsarbeiten an einer weiteren Zentraleinheit („Projekt Jupiter“) war das erste Anzeichen für eine Einstellung der gesamten Produktreihe; die PDP-10 wurde 1983 nicht mehr fortgeführt.
Betriebssysteme waren u. a. TOPS-10 (Time Sharing Operating System 10, ein interaktives Multiuser-Betriebssystem), ITS, TENEX, TOPS-20 (auch als TWENEX bezeichnet), sowie das auf Basis von TOPS-10 selbstentwickelte Betriebssystem von Compuserve.
PDP-10-Rechner waren besonders im akademischen Umfeld beliebt, weil sie anders als die vorherrschenden IBM- oder CDC-Anlagen anstatt für Batchverarbeitung hauptsächlich für den interaktiven Betrieb vorgesehen waren. Gut ausgebaute Systeme verfügten über 150 oder mehr angeschlossene Terminals, die im Time-Sharing-Betrieb gleichzeitig aktiv sein konnten.
PDP-10en ließen sich unter TOPS-10, Version 7 und höher zu symmetrischen Multiprozessoranlagen von bis zu acht Rechnern zusammenschließen, die ununterbrochenen Betrieb trotz eventueller Hardwareausfälle ermöglichten.

## Architektur
### Wortgröße und Datenformate

Die PDP-10 hat eine Wort-orientierte Architektur mit einer Wortgröße von 36 Bit. Alle Instruktionen haben eine Länge von 36 Bit. Bits sind in der Dokumentation von Bit 0 (höchstwertiges Bit) bis Bit 35 (niederwertigstes Bit) nummeriert.
Unterstützte Datenformate sind:$^{:10–12}$
* 36-Bit-Ganzzahlen im Zweierkomplement
* Zwei 18-Bit-Ganzzahlen pro Wort im Zweierkomplement
* Gleitkommazahlen mit einem Vorzeichenbit, einem 8-bit-Exponenten mit einem Bias von 128 und einer 27-Bit Mantisse.

### Register und Befehle

Die PDP-10 hat keine Register im eigentlichen Sinn. Stattdessen dienen die Speicherworte der Adressen 0 bis 15 als Akkumulatoren, die Speicherworte 1 bis 15 können als Index-Register verwendet werden.$^{:14–15}$
Auf der PDP-10 existieren nur zwei Befehlsformate, ein normales („BASIC“) und eines für Ein- und Ausgabe („input-output instruction“). Die normalen Befehle haben folgendes Format:
* Neun Bits Anweisungstyp („instruction code“), Bit 0–8, genannt
* Vier Bit Akkumulatoraddresse („accumulator address“), Bit 9–12, A
* Ein Bit Addresstyp, I, Bit 13
* Vier Bit Indexregisteraddresse („index register address“), Bit 14–17, X
* 18 Bit Speicheradresse („Memory address“), Bit 18–35, Y
Ein- und Ausgabe-Befehle waren typischerweise dem Betriebssystem vorbehalten.

### Effektive Adresse

Jede Instruktion der PDP-10 berechnet eine effektive Adresse aus den Bits 13 bis 35 der Instruktion. Falls die Adresse des Indexregisters X ungleich Null ist, wird der Inhalt von X zu der Konstanten Y addiert. Falls der Adresstyp I 0 ist, ist dies die effektive Adresse, die weiter verwendet wird. Ist I jedoch 1, so wird das so adressierte Speicherwort geladen und daraus X und Y neu bestimmt, was die neue effektive Adresse ergibt. Die Überprüfung von I wird wiederum durchgeführt. Dieses Verfahren wird solange fortgeführt, bis bei einem Speicherwort I Null ist.$^{:13–14}$
Die effektive Adresse kann als Speicheradresse oder als Datenwert verwendet werden.

### Beispiel für eine Instruktion

Die Dokumentation der PDP-10 verwendet ausschließlich Oktal-Darstellung, die folgenden Beispiele folgen dieser Konvention. In dem verwendeten Pseudocode ist CL(x) bezeichnet den Inhalt des linken Halbwortes des Registers x, entsprechend CR(x) den Inhalt des rechten Teils und C(x) den ganzen Inhalt.AC ist ein Akkumulator, E die effektive Adresse und CR(E) der Inhalt der Speicheradresse bei E.
Die HRR-Instruktion kopiert das rechte (höherwertige) Halbwort der Quelle zum rechten Halbwort des Zieles. Hierfür gibt es vier Varianten:
Beispiel für die HRR-Instruktion der PDP-10 :
| Code | Abkürzung | Bedeutung | Pseudocode |
| 540 | HRR | Half Right to Right | CR(AC) = CR(E) |
| 541 | HRRI | Half Right to Right Immediate | CR(AC) = E |
| 542 | HRRM | Half Right to Right Memory | CR(E) = CR(AC) |
| 543 | HRRS | Half Right to Right Self | if (AC!=0) then CR(AC) = CR(E) |

## Zentraleinheiten und Systeme

* KA10 (die ursprüngliche PDP-10), nur TOPS-10
** 1040
** 1050
** 1055 (Doppelprozessor)
* KI10 (das erste DECSystem10), nur TOPS-10
** 1060
** 1070
** 1077 (Doppelprozessor)
* KL10 (die erste CPU, die für TOPS-10 und TOPS-20 entwickelt wurde, mikroprogrammiert)
** 1080 TOPS-10
** 1088 (Doppelprozessor) TOPS-10
** 1090 TOPS-10
** 2080 TOPS-20
** 2088 (Doppelprozessor) TOPS-20
* KS10 (mikroprogrammiert)
** DECSystem2020 (TOPS-10 und TOPS-20)

## Ausrüstung und Peripherie

Zur normalen Peripherieausrüstung zählten anfangs 16 KWorte Kernspeicher (= 16 K 36-Bit-Worte, entspr. 88 KByte), Wechselplattenlaufwerk, DEC-Tape Magnetbandsystem, Falt-Lochstreifen-Einheit, Magnetbandlaufwerk, Walzendrucker und elektro-mechanischer Fernschreiber. Zum Anschluss von Echtzeit-Steuerungskomponenten war ein frei programmierbares Analog-Digital-Schnittstellensystem verfügbar. Die Laufwerke waren i. d. R. in einem Schrank mit Kühlung untergebracht. Die Kommunikation der interaktiven Nutzer erfolgte in den ersten Jahren ausschließlich über elektro-mechanische Fernschreiber (Typ Teletype) mit einer Geschwindigkeit von 110 Baud, also 10 Zeichen/s.

## Emulation bzw. Simulation

Im Rahmen der Software zur Simulation historischer Computer SIMH existiert auch ein Modul, das die PDP-10 auf einem Windows- bzw. Unix-artigen-Rechner emuliert. Es wird die CPU KS10 nachgebildet. Mit Hilfe im Internet verfügbarer Kopien der Original-Magnetbänder von DEC kann ein lauffähiges TOPS-10- oder TOPS-20-System aufgebaut werden.
Es gibt auch eine Hardware-Replik der Konsole, die auf einem Raspberry Pi mithilfe von SIMH die PDP-10 emuliert.