PDP-11 in der Tasche

Karl Koch musste Anfang der 1980er Jahre physisch an eine PDP-11 kommen, mit allem, was dazugehörte: Geld, Kontakte, Misstrauen, dubiose Zwischenhändler, reale Maschinen, reale Risiken. Mein Vater hatte noch eine PDP-11 für das Wochenende mittels eines Fernschreibers heruntergefahren -- ein Verwaltungsakt von ca. einer halben Stunde.

frontpanel

Heute installiere ich mir sowas in einer Ecke meiner Fedora-Workstation, einem günstigen Lenovo Thinkpad E14. Nachfolgend einige Notizen meiner Experimente.

BASH
sudo dnf install -y simh
Klicken Sie zum Erweitern und mehr anzeigen

Das Disk-Image besorgen wir uns z.B. hier: https://ak6dn.github.io/PDP-11/2.11BSD/ Wir benötigen das Disk Image 2.11BSD_rq.dsk.zip und die cpu1144.ini. Nach dem unzippen haben wir folgendes

PLAINTEXT
.
├── 2.11BSD_rq.dsk
├── 2.11BSD_rq.dsk.zip
├── cpu1144.ini.txt
├── pdp-11.cast
├── rx0.dsk
└── rx1.dsk
Klicken Sie zum Erweitern und mehr anzeigen

Wir starten die PDP mit:

BASH
simh-pdp11 cpu1144.ini
[...Ausgabe gekürzt...]
sim> boot rq0
Klicken Sie zum Erweitern und mehr anzeigen

Das System bootet von ra(0,0,0), also von der ersten RA-Disk am Controller mit der Adresse 0172150; dort liegt der Kernel unix, der geladen wird.

2.11 BSD UNIX #19: laufender Kernel, Build-Nummer, Build-Datum und der Kernel-Name.

ra0: RA82 size=1954000 bedeutet: Die Systemdisk ist eine RA82 mit knapp 2 Millionen 512-Byte-Blöcken, also grob 1 GB – für eine PDP-11 absurd viel, aber typisch für Emulation.

Die drei Speicherzeilen sagen: – physisch ~3,75 MB RAM – davon ~3,4 MB nutzbar – ~300 KB pro User-Address-Space (PDP-11-Limit)

Die letzte Zeile erase, kill ^U, intr ^C zeigt die aktiven Terminal-Steuerzeichen – ab hier ist das System voll hochgefahren und benutzbar – allerdings nur im Single-User Modus (vgl. Runlevel 1). Mit CTRL+D signalisieren wir EOF auf der Konsole, womit /etc/rc weiß: keine weiteren Eingriffe, der Bootprozess darf weiterlaufen. Erst danach werden die restlichen Dateisysteme gemountet, die Geräte vollständig initialisiert, getty gestartet und der Übergang in den Multiuser-Betrieb vollzogen, der dann im login:-Prompt endet.

Historisches

Warum Unix-Befehle so kurz sind (ls, cp, rm): Auf einer ASR-33 Teletype (10 Zeichen pro Sekunde) wolltest du nicht list_files tippen. Jedes Zeichen war eine Qual und Zeitverschwendung.

Warum /bin und /usr/bin getrennt sind: Ken Thompson und Dennis Ritchie hatten eine RK05 Diskette (ca. 2 MB) für das Root-Dateisystem. Als die voll war, haben sie eine zweite RK05 gemountet – Für “User”, kurz /usr – und dort die restlichen Binaries (/usr/bin) und Home-Verzeichnisse (/usr/home -> /home) abgelegt. Linux schleppt diese Trennung bis heute mit, obwohl wir Terabyte an Platz haben. Erst moderne Distros wie Arch oder Fedora fangen an, das via UsrMerge wieder zu vereinen.

Internet

Der TCP/IP-Stack auf dem 2.11BSD ist ein Backport vom späteren BSD Unix. Wir können also kampferprobtes IP auf einer PDP-11 machen, besser als Linux 1993! Wir erstellen ein tap-Interface und konfigurieren NAT, damit der Host als Router fungiert.

BASH
# 1. TAP-Interface erstellen (für deinen User)
ip tuntap add dev tap0 mode tap user $(whoami)
ip link set tap0 up

# 2. IP-Adresse für das Gateway setzen (Das ist die Seite des Hosts)
ip addr add 192.168.123.1/24 dev tap0

# 3. Routing & NAT aktivieren (Damit die PDP ins Internet kommt)
# Ersetze 'eth0' durch dein echtes Internet-Interface (z.B. wlan0, enp3s0)
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 4. Firewall öffnen (Wichtig für Ping-Antworten)
iptables -A FORWARD -i tap0 -j ACCEPT
iptables -A FORWARD -o tap0 -j ACCEPT

# 5. WICHTIG: Checksum Offloading abschalten! (Der "SimH-Killer")
# Ohne das werden ARP-Pakete von der emulierten Karte verworfen.
ethtool -K tap0 tx off
Klicken Sie zum Erweitern und mehr anzeigen

SimH Konfiguration (cpu1170.ini)

Wir nutzen die PDP-11/70 (stabiler Unibus) und drosseln die CPU, um Timing-Probleme beim Interrupt-Handling zu vermeiden.

INI
; CPU Konfiguration
set cpu 11/70
set cpu 4096k
; Drosselung auf ca. 2 MHz - Wichtig für stabiles Netzwerk!
set cpu 2M

; Netzwerk (Unibus DEUNA/DELUA Karte)
set xu enabled
set xu address=17774510
set xu vector=120
; An das TAP-Interface binden
attach xu tap:tap0
Klicken Sie zum Erweitern und mehr anzeigen

Booten und als root einloggen. Wir bearbeiten die Startskripte, damit die Konfiguration permanent ist.

CONF
# /etc/netstart
hostname=pdp11.local
ifconfig de0 192.168.123.2 netmask 255.255.255.0 up
route add default 192.168.123.1 1

# WICHTIG: Routing Daemon (RIP) abschalten
routedflags="NO"
Klicken Sie zum Erweitern und mehr anzeigen
TEXT
# /etc/resolv.conf
domain local
nameserver 8.8.8.8
nameserver 1.1.1.1
Klicken Sie zum Erweitern und mehr anzeigen

Ich hatte noch damit experimentiert, den Kernel neu zu kompilieren und Backups auf Band zu machen. Das war beides bisher noch nicht erfolgreich. Vielleicht ein anderes Mal.

Kommentare

Suche starten

Geben Sie Schlüsselwörter ein, um Artikel zu suchen

↑↓
ESC
⌘K Tastenkürzel