
Heute installiere ich mir sowas in einer Ecke meiner Fedora-Workstation, einem günstigen Lenovo Thinkpad E14. Nachfolgend einige Notizen meiner Experimente.
sudo dnf install -y simhDas 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
.
├── 2.11BSD_rq.dsk
├── 2.11BSD_rq.dsk.zip
├── cpu1144.ini.txt
├── pdp-11.cast
├── rx0.dsk
└── rx1.dskWir starten die PDP mit:
simh-pdp11 cpu1144.ini
[...Ausgabe gekürzt...]
sim> boot rq0Das 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.
# 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 offSimH Konfiguration (cpu1170.ini)
Wir nutzen die PDP-11/70 (stabiler Unibus) und drosseln die CPU, um Timing-Probleme beim Interrupt-Handling zu vermeiden.
; 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:tap0Booten und als root einloggen. Wir bearbeiten die Startskripte, damit die Konfiguration permanent ist.
# /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"# /etc/resolv.conf
domain local
nameserver 8.8.8.8
nameserver 1.1.1.1Ich 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