Im letzten Artikel habe ich kurz erklärt, dass man der PDP-8 händisch das Laufen bei bringen muss. In diesem Artikel schauen wir uns den RIM Loader etwas genauer an. Es gibt einiges zu entdecken… 🙂
Vom RIM Loader, wie er auf der Frontplatte der PDP-8/I aufgedruckt ist, gibt es eine kommentierte Version im “Commonly Used Utility Routines” Dokument (nachfolgend CUUR genannt).
Der Loader für ASR-33
Der “traditionelle” RIM Lader kommuniziert mit einer ASR-33 Teletype. Dieses Gerät hat eine Tastatur, einen Lochstreifenleser/-Stanzer sowie einen Drucker.
Der Anwender legt einen “BIN Loader” Lochstreifen ein und startet dann den RIM Loader an Adresse 7756:
Addr Cmd Mnemonic Kommentar aus CUUR ---- ---- --------- ------------------ 7756 6032 KCC clear AC and flag 7757 6031 KSF skip if flag=1 7760 5357 JMP 7757 looking for char 7761 6036 KRB read buffer 7762 7106 CLL RTL ch8 in AC0 7763 7006 RTL check for leader 7764 7510 SPA found leader 7765 5357 JMP 7757 ok, ch7 in link 7766 7006 RTL 7767 6031 KSF 7770 5367 JMP 7767 7771 6034 KRS read, do not clear 7772 7420 SNL checking for address 7773 3776 DCA I 7776 store contents 7774 3376 DCA 7776 store address 7775 5356 JMP 7756 next word 7776 0 temp storage 7777 0 start of BIN loader
Damit wir den Code verstehen können brauchen wir die Info zum “BIN” Format der Lochstreifen. Der Lochstreifen hat 8 Kanäle, überträgt also 8 Bits auf einmal. Diese werden über die IOT Kommandos (6xxx) in den AC übertragen.
Der AC ist allerdings 12 bit breit; die Daten werden in die niederwertigsten 8 Bits des AC geladen. Ich vermute dass die übrigen Bits im AC unverändert erhalten bleiben.
Das BIN Format auf dem Lochstreifen
Im bereits erwähnten CUUR wird auch auf die Formatierung eingegangen. Die oberen 2 Bits/Lochstellen werden verwendet um anzuzeigen, welche Art von Daten in den unteren 6 Bits/Löchern codiert sind.
10 xxx xxx – leader code
Dieses Bit- bzw. Lochmuster leitet ein Programm ein. CUUR definiert die x als 0en (kein Loch).
01 xxx yyy – octal adress
Dieses Muster leitet eine Speicheradresse ein. Auf der direkt nachfolgender Reihe sind zwei weitere Adressen codiert. Zusammen bilden sie die 12 Bit Adresse, an welche nachfolgende Daten (octal data) platziert werden.
00 xxx yyy – octal data
Null-Null leitet Daten ein, die im Speicher abgelegt werden. Auch hier sind 2 Reihen nötig, um den Inhalt einer 12 Bit Speicherzelle zu befüllen.
Lochmuster
Daraus können wir das Lochmuster ableiten (1: Loch, 0: kein Loch, “.” ist ein leerer Bereich auf den Lochstreifen, damit er “verpolungssicher” ist).
10 000 . 000 leader code 01 111 . 111 Adresse 77 00 101 . 110 Adresse 56 -> Startadresse 7756 00 110 . 000 Datum 60 00 011 . 010 Datum 32 -> 6032, Kommando KSF ... 10 000 . 000 trailer code
Im zweiten Teil schauen wir uns an, wie der RIM Loader den Lochstreifen einliest und damit den BIN Loader lädt.