Zum Hauptinhalt springen

Eine PDP-10-Implementierung

Obwohl das Folgende entweder als eine Menge von Benutzerroutinen oder im Monitor als UUOs eingebettet implementiert werden kann (unsere erste Implementierung wird die erstere sein), wird für die Beschreibung die letztere Version verwendet. Die UUOs wären:

UUOOperandenBeschreibung
PUTFCH, EFlag setzen
PUTDCH, EDaten setzen
PUTCH, ESatz setzen
GETFDCH, EFlag oder Daten holen
GETCH, ESatz holen

Im Obigen ist „CH“ die logische Kanalnummer. Der übliche OPEN- oder INIT-UUO wird zum Öffnen des Kanals verwendet. Benutzerpuffer im Standardformat werden zugewiesen. Die Ring- und Pufferköpfe werden jedoch auf unübliche Weise verwendet, sodass Datenmodus 12 für die Verwendung mit Network-Pufferung zugewiesen wird und Dateistatus-Bit 31 bei der Eingabe gesetzt sein muss. (Jedes der Geräte DSK, DTA, MTA oder IMP kann in diesem Modus verwendet werden.)

In der Harvard-Implementierung von NCP und HOST-HOST-Protokoll entsprechen Benutzerpuffer nicht direkt Nachrichten. Bei der Ausgabe wird jeder Benutzerpuffer in eine Nachricht formatiert; bei der Eingabe kann eine Nachricht ein oder zwei Benutzerpufferfüllungen werden (es werden Puffer von 128 Wörtern verwendet, um die Einrichtungen der Plattendienst-Routinen maximal zu nutzen).

PUTF UUO​

Dieser UUO legt ein Flag in den Ausgabepuffer. Die effektive Adresse ist der Ort eines Wortes:

         XWD operation, count

Bei Block-Flags wird die Zählung ignoriert, da sie aus der Anzahl der tatsächlich im Puffer abgelegten Bytes vor der nächsten Verwendung von PUTF berechnet wird. PUTF und PUTD fügen automatisch EOM-Flags ein, sobald ein Puffer voll wird; wenn gerade durch PUTD Datenbytes in den Puffer gelegt werden, fügt es außerdem ein EOM-Flag ein, nachdem es die Zählung für das vorhergehende Block-Flag im Puffer berechnet hat, und legt ein neues Block-Flag desselben Typs am Anfang des nächsten Puffers ab, nachdem es ein SIZE-Flag eingefügt hat, das die dann aktuelle Bytegröße angibt.

PUTD UUO​

Dieser UUO legt Daten in den Ausgabepuffer. Die effektive Adresse ist der Ort des Datenbytes (wenn die Bytegröße kleiner als 36 ist) oder des nächsten 36-Bit-Datenwortes, das in den Puffer gelegt werden soll. Im ersten Fall wird angenommen, dass sich das Byte im niederwertigen Teil des adressierten Wortes befindet. Im zweiten Fall enthält das Datenwort, das die letzten Bits des Bytes enthält, diese im hochwertigen Teil des Wortes, und das nächste Datenbyte beginnt ein neues Wort im PDP-10-Speicher. Bei einer Bytegröße von 64 würden also zwei Eintritte in PUTD pro übertragenem Byte verwendet, der erste mit 36 Bits und der zweite mit 28 Bits, linksbündig. Diese Strategie erlaubt eine maximale Nutzung der Bytebehandlungsbefehle der PDP-10.

PUT UUO​

Dieser UUO legt einen ganzen logischen Satz in den Ausgabepuffer(n) ab. Die effektive Adresse ist die eines Wortes:

         IOWD count, location

Ein PUTF-UUO muss verwendet worden sein, um das richtige SIZE-Flag auszugeben. Danach gibt jede Verwendung von PUT ein BLOCK-Flag aus, [3] simuliert eine Anzahl von Aufrufen von PUTD unter Verwendung des IOWD, um Ort und Größe des Benutzerdatenbereichs zu ermitteln, und gibt dann ein RS-Flag aus, um das Satzende anzuzeigen.

Bei einer Bytegröße von weniger als 36 Bit verwendet PUT den ILDB-Befehl, um die von PUTD auszugebenden Bytes aufzunehmen. Daher wird das Standard-Bytebehandlungsformat der PDP-10 verwendet, und der Zählteil des IOWD ist die Gesamtbytezahl, nicht die Wortzahl.

Die obigen UUOs haben sowohl eine Fehlerrückkehr als auch eine normale Rückkehr.

GETFD UUO​

Die Aufrufsequenz für diesen UUO ist:

         GETFD CH, E
error return
whyte flag return
block flag return
data return

Die effektive Adresse ist der Ort, an dem das Flag oder die Daten zurückgegeben werden. Das Flag wird im selben Format wie bei PUTF zurückgegeben und die Daten im selben Format wie bei PUTD. Bestimmte Flags (NUL, IGNORE und EOM) werden vollständig innerhalb des UUO behandelt und dem Benutzer nicht gemeldet. SYS sollte schließlich auf diese Weise behandelt werden, wird aber anfangs vom Benutzer behandelt.

GET UUO​

Die Aufrufsequenz für diesen UUO ist:

         GET CH, E
error return
end of file return
end of group return
normal return

GET überträgt den nächsten logischen Satz an den Benutzer, wobei GETFD zusammen mit einem IOWD im selben Format wie bei PUT verwendet wird. Wenn die IOWD-Zählung vor dem Satzende erschöpft ist, wird der Rest des Satzes übersprungen. In jedem Fall wird der aktualisierte IOWD an der effektiven Adresse des UUO zurückgegeben, um den Benutzer darüber zu informieren, wie viele Daten übertragen oder übersprungen wurden.