Neue Erkenntnisse zur Mikroprogrammsteuerung der Z1
Konrad Zuses Nachbau des Computers Z1 ist eines der Highlight-Objekte des Deutschen Technikmuseums. Seit 2022 wird der Computerprototyp dort genauer erforscht, dokumentiert, restauriert und zum Teil wieder lauffähig gemacht. In der Artikelserie werden im Projekt gewonnene Ergebnisse sukzessiv publiziert. Zum Hintergrund und Ziel des Gesamtprojektes vgl. den Artikel „Wo hakt’s bei Zuses Z1?“.
Dieser erste Artikel befasst sich mit einem kleinen Teil des Nachbaus des Computers Zuse Z1 im Deutschen Technikmuseum in Berlin. Die grundsätzliche Architektur der Maschine soll hier nicht rekapituliert werden, sondern wird als bekannt vorausgesetzt. Einen groben Überblick kann man sich zum Beispiel in den Büchern Die Rechenmaschine von Konrad Zuse1, Konrad Zuse’s Early Computers2 oder im Bericht Funktions- und Konstruktionsprinzipien der programmgesteuerten mechanischen Rechenmaschine Z13 verschaffen.
Gliederung
Die Idee der Mikroprogrammsteuerung
Die Mikroprogrammsteuerung in der Z1
Abbau des Mikroprgrammspeichers
Ein Vorschlag zur Sanierung des Mikroprgrammspeichers
Die Rohdaten im Mikroprogrammspeicher und deren Interpretation als Programm
Liste der Bleche im Mikroprogrammspeicher
Vorab
Ein Problem, über die Z1 zu schreiben oder zu reden, besteht darin, dass Konrad Zuse die Bauteile oder Blöcke, aus denen die Maschine aufgebaut ist, im Allgemeinen nicht mit Namen, sondern lediglich mit Nummern identifiziert hat. In unserem Spezialfall – der Analyse der Mikroprogrammsteuerung – kommt dazu, dass der in der üblichen Dokumentation als „Block 17, Mikroprogrammsteuerung“ bezeichnete Block in mehrere Unterblöcke unterteilt ist, die getrennt untersucht werden müssen.
Wir haben den Block 17 daher in verschiedene Funktionseinheiten aufgeteilt. Der eigentliche Mikroprogrammspeicher, das Adressierwerk und die beiden Steuerblöcke für Exponent und Mantisse. Diese Unterteilung findet sich in der Bezeichnung der Fotoserien bei der Dokumentation wieder:
bl17mpg… für Fotoserien des eigentlichen Speichers
bl17adr… für Fotos des Adressierwerkes
bl17sbm… für Fotos des Steuerblocks zum Mantissenwerk
bl17sbe… für Fotos des Steuerblocks zum Exponentenwerk
In diesem Bericht geht es praktisch ausschliesslich um diesen Mikroprogrammspeicherblock. Zur Rekapitulation folgend eine Zeichnung (Zeichnung 1), die die Blöcke, aus denen die Z1 aufgebaut ist, darstellt. Der Block 17, von dem im Folgenden die Rede ist, ist grün eingefärbt, darin – noch etwas intensiv grüner – der eigentliche Mikroprogrammspeicher.

Die drei niederwertigsten Bits des Befehlscodes (Listing 1) werden über den Block 16 an das Adressierwerk in Block 17 weitergeleitet und liefern dort als Op2, Op1 und Op0 die jeweilige Startadresse des Mikroprogramms. Die Befehle Addition und Subtraktion werden zusammengefasst zu einem Befehl SUM.

Die Idee der Mikroprogrammsteuerung
Eine Mikroprogrammsteuerung zerlegt komplexe Befehle, die die Hardware des Rechenwerkes nicht in einem Zug erledigen kann, in einzelne Schritte. Im Mikroprogramm sind nicht einzelne Befehle des Computers festgelegt und gespeichert, sondern Informationen zu Datentransporten innerhalb des Rechenwerkes oder zu Grundoperationen des Rechenwerkes, ob dieses zum Beispiel addieren, subtrahieren oder schieben soll. Außerdem gehen Statusmeldungen aus dem Rechenwerk in die Steuerung des Mikroprogramms ein, die dessen weiteren Ablauf steuern. Aus einer solchen Sequenz von zum Beispiel: „1. Addieren wenn ein Bit gesetzt ist, 2. Verschieben zweier Register, 3. das Ganze in einer Schleife n‑mal“, kann eine Multiplikation zusammen gesetzt werden, die ein einfaches Rechenwerk nicht durchführen kann.
Bei der Z1 werden so die 4 Grundrechenarten in die Berechnung der Mantisse und des Exponenten aufgeteilt und mit den Mitteln, die das Rechenwerk durchführen kann, erledigt, wobei die Programmteile für Mantisse und Exponent natürlich interagieren müssen und sich gegenseitig beeinflussen. Zusätzlich gibt es auch noch zwei Mikroprogramme, die die Dezimalzahlen bei der Eingabe ins Binärsystem umwandeln und die umgekehrt die Binärzahlen, mit der die Maschine rechnet, zur Ausgabe wieder in das Dezimalsystem zurückwandelt.
Die erste Publikation zum Konzept der Mikroprogrammierung veröffentlichte Maurice Wilkes 1951 unter dem Titel The Best Way to Design an Automated Calculated Machine. Auf die Idee der Mikroprogrammierung gebracht hatte ihn eine Besichtigung des amerikanischen “Whirlwind”-Computers ein Jahr zuvor. Bei diesem wurden Datenpfade über eine Diodenmatrix in Abhängigkeit von inneren Stationen, Zuständen und Ausführungsphasen eines komplexeren Befehls geschaltet. Konrad Zuse, der autodidaktisch mit der Entwicklung seiner Z1 im Jahr 1935 und dem Bau von 1936–1938 begann, hatte diese Idee offensichtlich bereits zu dieser Zeit.
Die Mikroprogrammsteuerung der Z1

Foto 1 zeigt vereinfacht den Informationsfluss in der Mikroprogrammsteuerung der Z1. Im ersten Takt werden Operationscode, Situationsbits und Mikroprogrammadresse an den Mikroprogrammspeicher übergeben (roter Pfeil 1). Im zweiten Takt werden die Steuersignale über die Schaltkanten der Programmbleche an die Steuerblöcke für Exponent und Mantisse weitergeleitet (grüne Pfeile 2). Im dritten Takt werden die Steuersignale noch mit aus der Maschine kommenden Statusleitungen verknüpft und an die Steuerleitungen der Rechenwerke weitergegeben (violette Pfeile 3). Im vierten Takt werden die Steuersignale in die Rechenwerke übertragen (blaue Pfeile 4), wo dann die Daten aus den Registern verarbeitet werden (roten Pfeile 1f). Dies ist der klassische Fall der mechanischen Zuse-Schaltgliedtechnik: Mit jedem Taktschritt wird der Informationsfluss um 90 Grad gedreht weitergeleitet.

Auf Foto 2 sieht man die Eingangsignale für den Mikroprogrammspeicher, wie sie auf dem teilabgebauten Adressierwerk, das nicht Bestandteil dieses Berichtes ist, notiert wurden. Das Adressierwerk ist, was die Steuersignale Op2, Op1, Op0 sowie S0 und S1 betrifft, abgebaut. Die Steuersignale kommen von links vom Block 16. Der Adresszähler ist hier noch nicht abgebaut, aus ihm kommen die Mikroprogrammschritte 16, 8, 4, 2, 1. Die Eingangssignale für das Adresswerk „Op2,Op1,Op0, S1, S0, löschen, zählen“ sind nicht Teil dieser Darstellung. Zur Klarstellung: Die Begriffe S0 und S1 wurden von Konrad Zuse benutzt, um einen bestimmten Status (bei Zuse „Situation“) zu benennen.
Die Realisation des Mikroprogrammspeichers in der Z1 und deren Dokumentation im Nachlass von Konrad Zuse
Die Originalzeichnungen von Konrad Zuse zum Nachbau der Z1 lagern im Archiv des Deutschen Museums in München. Diese Pläne sind online im Konrad Zuse Internet Archive einsehbar. Spätere Versionen eines Teils der Pläne mit Korrekturen von Konrad Zuse, Ursula Schweier und Dietmar Saupe sind unter der Signatur IV.2.003 im Historischen Archiv des Deutschen Technikmuseums in Berlin verfügbar. Darüber hinaus sind wir im Rahmen des Projektes noch auf einen kleinen zusätzlichen Bestand von 22 Mappen zum Z1-Nachbau im Historischen Archiv des Deutschen Technikmuseums gestoßen, der unter I.NL 363 Slg. Zuse einsehbar ist.
Um die Bildunterschriften nicht zu umfänglich werden zu lassen und den Lesefluss zu behindern, sind die Bildquellen im Anhang aufgeführt. Bei einigen wenigen Zeichnungen wurde eine sichtbare Fotomontage durchgeführt. Diese ist dann als solche gekennzeichnet. Alle verwendeten Bildunterschriften sind im Anhang aufgeführt und die „Originale“ und deren Quellen sind eindeutig identifizierbar.
Leider ist in der Dokumentation zur Z1 keine Rücksicht auf eine feinere Unterteilung der Maschine genommen worden. Alleine der Block 17, von dem hier ein Teil untersucht wird, ist in eine ganze Reihe Unterblöcke aufgeteilt: Der eigentliche Speicherblock, die Steuerblöcke für Exponent und Mantisse neben dem Speicher und das Mikroprogramm-Adressierwerk. Dazu gibt es noch eine etwas „frei“ aufgebaute Logik, die die Verbindung zwischen Block 16 und Block 17 herstellt (vgl. die sich daraus ergebenden File-Namen oben).
Prinzipielle Funktionen des Mikroprogrammspeichers
Durch die Glasabdeckung der Z1 im Deutschen Technikmuseum kann man die oberste Schicht des Mikroprogrammspeichers sehen. Das handbeschriftete Blech 21a gehört zu dem Teil, der den Exponenten steuert. Auf dem oberen kann man im schrägen Licht bei genauem Hinsehen von Hand eingraviert „Krit 73a“ erkennen. Im Mantissenspeicher liegen 51 Bleche, im Exponentenspeicher liegen 50 Bleche. Zur Beschriftung beziehungsweise Kennzeichnung der einzelnen Blech weiter unten mehr.

In den Zeichnungen des Konrad Zuse Internet Archive sieht das so aus:

Die Bleche der beiden Speicherhälften liegen um 180 Grad verdreht einander gegenüber. Die Schaltkanten von oben A, B, C und D führen auf der Mantissenseite nach rechts in den Steuerblock für die Mantisse. Die Schaltkanten links von unten nach oben A, B, C und D führen nach links in den Steuerblock für den Exponenten. Die Adressierkanten sind oben von links nach rechts mit 1, 2, 3 … 10 durchnummeriert. Unten ist es umgekehrt, also 1, 2, 3 … 10 von rechts nach links. Analoges gilt für die Adressierkanten a und b. Die äußeren Adressierkanten sind mit b, die inneren mit a bezeichnet.

Auf Foto 4 sind die beiden Bleche 63 und 71 aus der Schicht 12 zu sehen. Die Adress-Schaltbleche liegen unter – beziehungsweise zur Visualisierung – auf den Speicherblechen. Logisch spielt das keine Rolle. Schaltbleche 4 und 5 sind nicht dargestellt. In der dargestellten Position der Adress-Schaltbleche kann sich das Speicherblech 63 im nächsten Takt von der Feder (grüner Pfeil) nach links bewegen und die Schaltkante D fährt heraus. Das obere Speicherblech 71 wird in Bit 9 durch den Selektorstab gesperrt. Dieses Speicherblech wird also nicht selektiert, weil es das Adresskriterium nicht erfüllt.
Zuse verlässt hier sein sonst in der Maschine realisiertes Schaltstiftkonzept, bei dem ein UND-Gatter aus drei bewegten, mindestens einem Maskenblech sowie einem Schaltstift besteht und entsprechend groß und aufwendig ist, zugunsten eines anderen Aufbaues. Jedes UND-Gatter besteht aus nur noch einem Blech, dessen 10 Adressierkanten durch Ausknipsen von a oder b oder beiden als „0 oder 1“ oder „don’t care“ programmiert werden kann. Alle Bleche der Mantisse werden durch je eine Schraubenfeder nach rechts gezogen. Die Bewegung wird begrenzt durch den Aktionsstab AS. Alle 50 Mantissenbleche drücken nach rechts auf den Aktionsstab, alle 50 Exponentenbleche drücken in analoger Weise nach links auf den unteren Aktionsstab.
Zum Auslesen des Mikroprogrammwortes wird der obere Aktionsstab nach rechts und der untere nach links verschoben. Die Bleche, bei denen alle Selektorstäbe vor einer Lücke der ausgeknipsten Adressierkanten stehen, können – durch ihre Feder gezogen – dem Aktionsstab folgen. Die Schaltkanten der selektierten Bleche schieben dann die Schaltklötze in den seitlichen Steuerblöcken in diese hinein. Die Schaltklötze in den Steuerblöcken bilden also logische ODER, deren Eingänge die Schaltkanten der jeweiligen Speicherbleche sind.
Zuse erreicht auf diese Weise eine extrem hohe Speicherdichte, die aber mit einigen maschinenbautechnischen Problemen erkauft wird. Jedes Speicherblech, 51 auf der Mantissenseite und 50 auf der Exponentenseite, wird von einer Schraubenfeder gegen den jeweiligen Aktionsstab gezogen. Jede der Schraubenfedern übt in dieser Konstellation eine Kraft von mit einer Federwaage gemessenen circa 2 N, also
auf jeden Aktionsstab aus. Das ist etwa die Kraft, die ein Gebinde von zehn 1 Liter-Mineralwasserflaschen auf den Arm ihres Trägers ausübt. Das ist angesichts der sonstigen Filigranität der Zuseschen Schaltlogik enorm. Diese Kraft muss aufgebracht werden, um alle Programmbleche soweit zur Seite zu schieben, dass die Selektorstäbe ohne zu streifen ihre Position einnehmen können. In der Auslesephase müssen die Aktionsstäbe und die Speicherbleche aber einen größeren Weg von circa 6 bis 7 mm zurücklegen. Hier ist weit weniger Kraft nötig, weil der größte Teil der nicht selektierten Bleche von den Selektorstäben aufgehalten wird.

Das Problem wird mithilfe einer massiven Kurvenscheibe gelöst, die die Bewegung der Aktionsstäbe am Anfang, wenn alle Federn gespannt werden müssen, mittels einer flachen Steigung, also einer großen Untersetzung, betätigt und am Ende, wenn nur noch wenige Bleche auf die Aktionsstäbe drücken, mit einer größeren Steigung, also einer geringeren Untersetzung, ausgeführt ist. Auf dem Umfang der Kurvenscheibe rollt ein Kugellager ab, das über eine Hebeluntersetzung die beiden Schaltstangen R20‘ und R21‘ betätigt, die den Aktionsstab für die Mantissenbleche auf dem letzten Stück der Bewegung maximal nach links drücken (R20‘) – also komplettes Abheben der Adresskanten von den Selektorstäben. R21‘ für die Exponentenbleche arbeitet genau invers (vgl. Zeichnung 2).


In Zuses Nachlass gibt es zwei Zeichnungen, in denen der Inhalt des Mikroprogrammspeichers dokumentiert ist. Der Lesbarkeit wegen sind sie in Zeichnung 6 und 7 nur im Ausschnitt wiedergegeben. Im Konrad Zuse Internet Archive kann man sie im Ganzen studieren und herunterladen. Vorab:

Die Schaltkanten A, B, C, D rechts und unten die Adresskanten. In dieser Lage bedeutet ein weggeknipstes b, dass das Blech bei logisch 1 selektiert und ein weggeknipstes a, dass das Blech bei logisch 0 selektiert wird. Sind beide Adresskanten weggeknipst, dann wird das entsprechende Bit ignoriert – also die Bedingung S0 oder S1 muss nicht erfüllt sein –, oder wenn bei einer der Adress-Leitungen beide Kanten weggeknipst sind, dann führt das Mikroprogramm eine Art Schleife aus.
Die Bezeichnung S0 und S1 leitet sich von dem Begriff „Situation“ ab, der verschiedentlich in der schriftlichen Dokumentation zur Funktion der Z1-Arithmetik erwähnt wird und entspricht einer logischen Bedingung. Die logische Funktion der einzelnen Bits kann man im Foto 2 weiter oben erkennen. Eine logische 1 ist dort mit einer Bewegung der Adress-Selektoren in Pfeilrichtung nach unten kodiert. Wenn man vor der Maschine steht, bedeutet ein auf den Betrachter hin gezogener Selektor ebenfalls logisch 1.


Oben ausschnittsweise zwei der Tabellen, in denen der Inhalt des Mikroprogramms im ZA dokumentiert ist. Es gibt aber Unterschiede zu dem Mikroprogramm, das tatsächlich in der Maschine realisiert ist. Der Hinweis auf die beiden in den Tabellenausschnitt einmontierten Datumsangaben aus dem jeweiligen Scan soll darauf hindeuten, dass die beiden Tabellenteile zu unterschiedlichen Versionen der gleichen Tabelle gehören könnten: Der logisch niedrigere Tabellenteil ab Blech 1 hat ein ein späteres Datum als der
höhere Tabellenteil ab Blech 73.
Der Aufbau der Tabellen p00595 und p00596
Man erkennt links in der dritten Spalte eine fortlaufende Numerierung der Bleche, in der ersten Spalte die Schicht, in der die Bleche liegen und in der zweiten Spalte das Kriterium. In den Tabellen ist nicht markiert, ob ein Blech für die Mantisse oder für den Exponenten vorgesehen ist. Blech Nr. 4 und Blech Nr. 13 kodieren das gleiche Kriterium, sind aber komplementär kodiert, weil Nr. 4 ein „Exponentenblech“ und Nr.13 ein „Mantissenblech“ ist. Die Schaltkante ist bei beiden Blechen unterschiedlich. Die „Schaltkanten“ sind die Ausgänge des Speichers, sie verschieben die Schaltklötzchen am Eingang der seitlichen Steuerblöcke. Jedes Blech hat nur eine Schaltkante A, B, C oder D. Dies ist durch ein nicht vorhandenes X in der Tabelle gekennzeichnet.
Die logische Bedeutung der einzelnen Kriteriumsbits kann man an der Beschriftung in Foto 2 erkennen. Die Bleche 1 bis 12 sind die Exponentenbleche für das Mikroprogramm SUM, die Bleche 12 bis 21 sind die Mantissenbleche für SUM. SUM wird bei Zuse mit Σ bezeichnet. Diese Operation fasst die beiden Z1-Befehle ADD und SUB zusammen. Das hängt mit der von Zuse so genannten befohlenen und der tatsächlich ausgeführten Operation zusammen:
-3 + 5 befohlene Addition wird wegen unterschiedlichen Vorzeichen zur Subtraktion
-3 — 5 befohlene Subtraktion wegen unterschiedlicher Vorzeichen wird zur Addition
-3 — ‑5 befohlene Subtrakton bei gleichen Vorzeichen bleibt Subtraktion
Diese und andere Funktionen werden von dem bisher noch kaum erwähnten Block 16, dem „Planwerk und Vorzeichenwerk“ gesteuert. Übrigens muss sich der Block 16 auch auf der Rechenwerkseite um die im Mikroprogramm nicht auftauchenden Lese- und Schreibbefehle kümmern, indem er dafür sorgt, dass eine aus dem Speicher gelesene Information in die Register des Rechners übernommen wird und dass umgekehrt beim Speichern die zu speichernde Zahl aus dem Rechenwerk an den Speicher übergeben wird.
Neben der Ersetzung des Σ‑Symbols durch die Abkürzung SUM wurden auch die beiden Symbole ↗ (hochübersetzen) und ↘ (runterübersetzen) durch die Abkürzung toBIN und toDEC ersetzt.
Zusätzlich zur Dokumentation im Konrad Zuse Internet Archive gibt es auch noch einen kleinen Bestand zu Zuses Nachbau im Historischen Archiv des Deutschen Technikmuseums, in dem die Tabellen zum Mikroprogramm in einer weiteren Version eingetragen sind. Allerdings fehlt hier der zweite Teil von Blech 75 aufwärts und die Unterlagen sind undatiert, sodass nicht klar ist, in welchem zeitlichen Bezug diese Tabellen mit ihren handschriftlichen Änderungen zu den vorher gezeigten Tabellen stehen. Nur der Vollständigkeit halber ist hier eine der beiden Tabellen eingefügt.

Es war nicht das primäre Ziel dieser Projektphase, einen Abgleich der nicht vollständigen Dokumentation aus den diversen Archiven mit der realen Maschine zu machen, sondern es sollte das Mikroprogramm in der realen Maschine dokumentiert werden. Daher bleiben diese Scans im Weiteren außer Betrachtung. Solange nicht noch irgendwo eine originale Dokumentation der Kriterien und der Blechnummern auftaucht, spielen auch die Kriterien-Nummern in dieser Arbeit keine Rolle. Die Bleche werden über ihre Nummern identifiziert.
Kriterien contra Blechnummer

In Doku 1 zu sehen: Die Handgravur wurde im oberen Blech im Kontrast verstärkt. Es gehört zum OpCode 110 (toDEC). Das untere Blech ist nur mit Filzstift beschriftet. Es gehört zum OpCode 100 (MLT).

Doku 2 zeigt ein Beispiel für Konflikte, die durch die „Kriterien“ entstehen können. Beide Bleche tragen handgraviert die Kennung „Kr. 73b“, haben unterschiedliche Schaltkanten und unterschiedliche Adresskanten. Das obere ist ein Mantissenblech. Dreht man das untere Exponentenblech um, sieht man, dass es komplementär zum oberen kodiert ist, und also tatsächlich das gleiche Kriterium erfüllt. Die Schaltkanten sind unterschiedlich. Die Gravuren sind auch hier kontrastverstärkt.
Abbau und Dokumentation
Der Mikroprogrammspeicher wurde im Rahmens des aktuellen Projektes zweimal abgebaut. Zum ersten Mal 2025 und zum zweiten Mal 2026. Der Komplettabbau scheiterte beim ersten Mal daran, dass nicht genug Zeit war, auch das Adressierwerk mit dem Phasenzähler abzubauen, weswegen die unterste Schicht nicht erreicht werden konnte. 2026 war mehr Zeit und es wurden der Mikroprogrammspeicher zusammen mit dem Adressierwerk abgebaut. Der Abbau wurde mit drei Kameras dokumentiert. Über dem abzubauenden Werk lag auf einer Plattform ein Handy, das bei jedem Abbauschritt, also bei jedem entnommenen Teil – beziehungsweise einer Gruppe gleichartiger Teile, wie beispielsweise Unterlagsscheiben – ein Foto macht. Der besseren Sichtbarkeit wurden auf die wegzunehmenden Teile blaue Punkte aufgelegt, da auf den Fotos die Kanten einzelner Bleche schlecht erkennbar sind und man manchmal fast raten musste, was nun eigentlich weggenommen wurde. Die entnommenen Teile wurden auf einer schwarzen Unterlage mit einer Reprokamera fotografiert. Zusätzlich war auch noch eine „Freihandkamera“ sowie ein zweites Handy im Einsatz, mit dem dann spezielle Details, die aus der Vogelperspektive schlecht zu erkennen sind, sowie Beschädigungen, deren Ursachen und möglich Beseitigungen dokumentiert wurden.

Durch den Einsatz von bis zu 4 Kameras kam das Problem auf, dass jede der Kameras die erzeugten Files nach eigenem Schema benennt. Manche Kameras erzeugen File-Namen wie IMG0001 oder DSC0001, andere setzen das Datum und die Uhrzeit in einer für Menschen schwer lesbaren Form als File-Namen fest: 20260617_153202 ist nur schwer zu erfassen. Gerade bei parallel mit verschiedenen Kameras gemachten Aufnahmen ist es dann nur schwer möglich, die zusammenhängenden Fotos von der Abbausituation und zum Beispiel den entnommenen Teilen zusammen zu bringen. Aus diesem Grund wurde ein Schema für eine einheitliche Benennung aller File-Namen festgelegt, hier am Block 17 erklärt.
Grundsätzlich gilt: Alle File-Namen haben die gleiche Länge, alle funktionalen Spalten im File-Namen haben die gleiche Position, keine Leerzeichen, keine Großbuchstaben. Vor der Bearbeitung aller Files werden mit einem speziellen Programm, zum Beispiel „exiftool“ unter Linux die Metadaten der Fotos ausgelesen und gespeichert. Darin sind unter anderem das Aufnahmedatum, die verwendete Kamera und die Daten wie Belichtungszeit und Brennweite bei der Aufnahme enthalten. Diese Daten können verwendet werden, um in File-Namen der Form “IMG0001..” das Aufnahmedatum in den Namen selbst einzufügen. Die beim Block 17 angewandten File-Namen haben, wie bereits oben schon erwähnt, diese Form:
bl17mpg_0000_20260617_100304_et.jpg
bl17mpa_0000_20260617_133304_et.jpg
bl17mpa_0000_20260617_133104_si.jpg
bl17mpa_0000_20260617_133204_si.jpg
Bleibt die Ordnungszahl bei 0000, dann werden die Files sowohl bei numerischer, als auch bei datumsmäßiger Anzeige im Directory in der gleichen Reihenfolge angezeigt. Das Kürzel “_et” hinten bedeutet „Einzelteil“, also Aufnahme von der Reprokamera. Das Kürzel “_si” bedeutet Situation, also Lage des Teils in der Maschine, Aufnahme mit dem Handy auf dem Stativ. Sowohl bei Sortierung nach Datum, als auch nach File-Namen werden dann die beiden Aufnahmen mit dem “_si” vor der Aufnahme mit “_et” liegen, was die Zuordnung der “_si” und der “_et” erleichtert. Diese Ordnung kann durch Setzen einer Ordnungszahl aufgehoben werden. Wenn also zwischen zwei et-Bildern zwei si-Bilder liegen, und es nicht klar ist, welches der beiden Bilder genommen werden soll, kann eines der beiden Bilder nach bl17mpg_9000_2026 umbenannt werden, oder es können im Listing der File-Namen beliebige Paarungen zwischen Bilder unterschiedlicher Herkunft erzeugt werden. Wichtig ist auch die Möglichkeit, wenn zum Beispiel aus einem Bild ein Ausschnitt erzeugt wurde, dieser auch wieder das Datum des Originalbildes bekommt, falls das Bildbearbeitungsprogramm beim Abspeichern das ursprüngliche Aufnahmedatum auf das Bearbeitungsdatum setzt. Beim Erhalt des originalen Datums ist es auch in weit verzweigten Directory-Strukturen möglich, nach zur selben Zeit entstandenen Bildern zu suchen.
Abbau des Mikroprogrammspeichers


















Grau, teurer Freund, ist alle Theorie –
doch hart im Raume stossen sich die Sachen
(frei nach Johann Wolfgang von Goethe)
Die Frage stellt sich, was hier schief läuft. Schaut man in die Zeichnungen im Konrad Zuse Internet Archive, dann sieht man:

Das Skelett des Mikroprogrammspeichers wird folgendermaßen gebildet:

Stünden diese Scheiben tatsächlich zur Verfügung, dann wäre Auf- und Abbau des Mikroprogrammspeichers sehr einfach: Man würde drei 20 mm-Scheiben pro Blech, darauf je eine 0,7 mm-Scheibe und das betreffende Speicherblech legen. Wenn weniger als 7 Bleche in einer Schicht liegen, würde man mit der zweituntersten Schicht beginnen. Bei in der Schicht nicht vorhandenen Blechen würde der Stapel eben nur aus den Scheiben bestehen. Damit wäre der Scheibenstapel 7 x 0,9 mm hoch, also 6,3 mm. Man könnte dann obendrauf noch eine 20 mm-Scheibe als oberes Ende legen und hätte immer noch 0,2 mm Luft. Man würde etwas Flexibilität beim Aufbau gewinnen, wenn anstelle der 0,7 mm Distanzscheiben Scheiben mit 0,5 mm und 0,2 mm zur Verfügung stünden.
In diesem Fall könnte man ganz schematisch folgende Schichtung vornehmen:

Die Höhe mit 7 x 3 Scheiben (von 0,2 + 0,5 + 0,2 mm) ergibt eine rechnerische Höhe 6,3 mm. Hierauf läge noch eine 20 mm-Scheibe mit 0,2 mm als Abschluss. Dies ließe oben 0,2 mm Luft für eventuell eine 0,2 mm-Scheibe.
Ein Vorschlag zur Sanierung des Mikroprogrammspeichers
Zunächst ist festzustellen, dass der Mikroprogrammspeicher nicht nur mit den im ZA präzise definierten Distanzscheiben zusammen gebaut wurde. Es wurde ein offensichtlich zusammengesuchtes Sammelsurium an Scheiben verwendet, teilweise wurden auch Ausschussbleche eingebaut. Das macht den Auf- und Abbau sehr zeitaufwendig, weil jede Scheibe einzeln vermessen und dokumentiert werden muss.
Dann bleibt noch das Problem der durch die 4 mm-Phenolharzplatte verursachte 1,3 mm Höhendifferenz. Diese lässt sich recht einfach kompensieren, indem man die 6,7 mm-Distanzhülsen 267.43 in einer Schicht des Mikroprogrammspeichers durch solche mit einer Höhe von 5,4 mm ersetzt. Die unteren 4 Schichten sind mit 2 (Schicht 1) und je 4 Schichten (Schicht 2 bis 4) nicht voll besetzt. Würde man also die Schicht 4 mit den niedrigeren Hülsen zusammensetzen, dann lägen ab Schicht 5 alle Grundbleche des Speichers und die der Steuerblöcke auf gleichem Niveau. Insbesondere die Schichten 6, 8 und 9, die mit 7 Lagen voll bestückt sind, würden ihre Probleme verlieren. Eine weitere Verbesserung könnte erreicht werden, indem man in Schicht 8 im Exponententeil die Bleche 10 und 11 vertauscht. Dann lägen hier nicht zwei mal die Schaltkanten A direkt übereinander und man könnte die Schaltkante A von 73b etwas nach unten biegen. Das gleiche käme für die Bleche 97 und 06 in Schicht 9 des Exponententeils und für die Bleche 53 und 100 / 42a des Mantissenteils infrage.
Die Speicherbleche in einer Speicherschicht sind untereinander austauschbar, ohne dass dies eine Änderung in der Logik bewirkt. An der vorgefundenen Lage der Bleche in den Schichten darf natürlich keinesfalls etwas geändert werden, denn die Bleche wirken ja auf einen Schaltklotz in den seitlichen Steuerblöcken, die dann wiederum auf die Bleche im Rechenwerk wirken. Wenn man also, wie Zuse es in einer Aktennotiz vorschlug, Bleche aus einer Schicht in eine andere verlagerte, dann muss natürlich auch eine entsprechende Umschichtung im Steuerblock und im zugehörigen Addierwerk vorgenommen werden.
In dem Mikroprogrammlisting im ZA gibt es nur eine Schicht mit 7 Blechlagen, wohingegen es in dem realen, jetzt abgebauten Speicher drei Schichten mit 7 Blechlagen gibt. Allerdings sind 7 Lagen Speicherbleche in einer Schicht des Speichers eigentlich unproblematisch, wenn die Grundbleche von Speicher und Steuerblock sich auf gleichem Niveau befinden. Die Aluklötzchen, die die Bewegung der Bleche aufnehmen, sind 6,9 mm hoch, genug für 7 Bleche.
Die Probleme treten auf, wenn bei der jetzt existierenden Höhendifferenz von 1,3 mm 6 oder 7 Bleche in einer Schicht liegen. Durch Herunterbiegen der Schaltkanten wurde versucht, diesen Höhenunterschied zu kompensieren, was aber vermutlich immer problematisch blieb.
Auf der folgenden Seite ist der Mikroprogrammspeicher der Z1 so dargestellt, wie er beim Abbau vorgefunden wurde. Das weist sehr beträchtlich von der Schichtung ab, wie sie im ZA dokumentiert ist. Die Zahl der Blechlagen in einer Schicht ist farbig kodiert. Sieben Schichten sind violett, 6 Schichten sind blau unterlegt. Die problematischen Schichten sind demnach: 9 Exponent, 8 Mantisse und 7 Mantisse.
Die Idee zur Abhilfe besteht nun darin, die 6 Distanzhülsen in der Schicht 4, die nur vier Blechlagen enthält, um 1,3 mm zu kürzen, sodass diese Schicht nur 5,3 mm hoch wäre und die Grundbleche der darüber liegenden Schichten dann das gleich Niveau wie die der Steuerblöcke haben. Benutzte man dafür nicht die originalen Hülsen, sondern fertigt oder besorgt neue Hülsen mit h=5,3 mm und bewahrt die jetzt verwendeten wild gemixten Unterlagsscheiben in der richtigen Reihenfolge auf, dann liesse sich diese Änderung jederzeit wieder rückgängig machen. Zu prüfen bleibt, ob die derzeit zur Kompensation des Höhenversatzes nach unten verbogenen Bleche wieder flachgebogen werden müssten, oder ob sie unverändert verwendet werden könnten.
Die Rohdaten im Mikroprogrammspeicher und deren Interpretation als Programm
Im folgenden sind drei Tabellen aufgeführt, die das vorläufige Ergebnis des Abbaus des Mikroprogrammspeichers darstellen. Die erste Tabelle zeigt die Lage und Schichtung der einzelnen Bleche wie sie derzeit angeordnet sind. Sie können für den eventuellen Auf- und Abbau verwendetet werden und geben Ideen für die weiter oben vorgeschlagenen Stabilisierungsmaßnahmen. Die zweite Tabelle zeigt die Ansicht der Bleche als „Programm“. Die Bleche sind nach OP-Code und innerhalb der 5 einzelnen Programme nach Adresse, beginnend jeweils von oben mit Adresse 0, sortiert. Bei Blechen, die einzelne Adressbits ausgeknipst haben, ist der Adressbereich zum Beispiel 0–3 oder oder 2+6 angegeben. Es ist auch erkennbar, dass innerhalb eines solchen Programms teilweise nur die Exponentenwerke und teilweise nur die Mantissenwerke aktiv sind. In der dritten Tabelle sind die Schleifen abgewickelt. Das heißt, aus den Schleifen wird ein lineares Programm, was natürlich nur möglich ist, wenn wie hier die einzelnen Schleifen eine feste Durchlaufzahl haben. Dadurch wird die Tabelle so lang, dass sie nicht mehr auf eine Seite passt.
Zu den Spalten in den Tabellen: Links sind die Bleche für den Exponententeil, rechts die für den Mantissenteil aufgeführt. In der Mitte befindet sich eine sechsstellige Nummer, die das Foto der beiden in einer Lage liegenden Bleche beim Abbau des Speichers identifiziert. Da bei jedem Blech jeweils nur eine Schaltkante aktiv ist, reicht es auch, wenn nur die aktive Schaltkante A, B, C, oder D aufgeführt ist. Die (Auswahl-)Kriterien sind zweimal aufgeführt, sie sind einhaltlich identisch. „Exponent a“ und „Mantisse b“ geben die Notation im ZA wieder, wobei allerdings die drei Bits des Opcodes in Goßbuchstaben dargestellt sind, was das automatische Durchsuchen der Tabellen erleichtert. Die Spalten „Exponent 0“ und „Exponent 1“ zeigen die Darstellung der Adress- und Kriteriumsspalten in binärer Form, was dem Informatiker entgegen kommt. Die drei Bits des Opcodes sind gleich disassembliert und es wird das Mnemonic des Codes dargestellt.
Es sei extra darauf hingewiesen, dass die Kodierung der Adresskanten bei dieser Dokumentation nicht dem ZA entnommen wurden, sondern den bei der Demontage gemachten Einzelteilbildern.
In „p00595“ und „p00596“ gibt es diverse Ungereimtheiten, die hier zu diskutieren zu weit führen würde und die auch nicht zum Verständnis der real existierenden Maschine beitragen können.
Liste der Bleche im Mikroprogrammspeicher




Vorläufiges Resümee
Der Mikroprogrammspeicher der Z1 ist jetzt vollständig dokumentiert, und es entstand eine Idee, wie man ihn zuverlässiger machen und den Auf- und Abbau schematisieren und beschleunigen kann. Es kann auch ein Listing der 5 im Mikroprogrammspeicher enthaltenen Mikroprogramme abgeleitet werden.
Allerdings fehlt zum weiteren Verständnis der Aufbau der beiden seitlichen Blöcke, des Steuerblocks Exponent SBE und des Steuerblocks Mantisse SBM. In beiden Steuerblöcken befinden sich umfängliche logische Funktionen, die von Status-Signalen aus dem Rechenwerk und der Ein-Ausgabe gesteuert werden. Die eigentlichen Ausgänge des Mikroprogrammspeichers werden also noch von diesen Steuerblöcken beeinflusst. Zudem zeigte ein allerletzter Blick auch den Zusammenbau des Speichers, dass vom Steuerblock Mantisse rechts mindestens oben in Schicht 12 ein Signal in das Exponentenwerk links führt. Sollte so etwas – was nicht auszuschliessen ist – weiter unten ebenfalls auftreten, dann wäre damit die strikte Trennung von Exponenten- und Mantissenhälfte hinfällig. Bisher konnte nur der Steuerblock Mantisse vollständig abgebaut und dokumentiert werden. Weiterhin besteht die Möglichkeit, dass über Block 16 der Mikroprogrammzähler für einige Takte angehalten wird, wodurch dann eine 1‑Wort-Schleife realisiert werden könnte. Und gänzlich unbekannt ist natürlich auch der Aufbau der Rechenwerke für Mantisse und Exponent.
Das Restaurierungsprojekt zur Z1 bringt mit jedem auseinander gebauten Block der Maschine viele neue Erkenntnisse hervor. Allerdings mehren sich auch die neuen Fragen zur tatsächlichen Funktionsweise der Maschine. Das Projekt entwickelt sich von der zunächst geplanten Reparatur des Z1-Nachbaus zum Forschungsprojekt über die Anfänge des Computings.
Liste der verwendeten Fotos und Zeichnungen
| Zeichnung 1 | IV.2.003_B_0003_xm.jpg | Historisches Archiv SDTB, IV.2.003, Bl. 0003 (beschnitten, bearbeitet) |
| Listing 1 | befehlscode_z1.jpg | aus: Dietmar Saupe, Ursula Schweier: Funktions- und Konstruktionsprinzipien der programmgesteuerten mechanischen Rechenmaschine Z1. Gesellschaft für Mathematik und Datenverarbeitung, Arbeitspapiere der GMD 321. Sankt Augustin 1988, S. 91. |
| Foto 1 | z1_pfeile.jpg | SDTB |
| Foto 2 | bl17adr_0000_20260616_105254_si.jpg | SDTB |
| Foto 3 | mikroprogramm.jpg | SDTB |
| Zeichnung 2 | zuse_archive_p00578_x.jpg | Konrad Zuse, Leitwerk der Z1, 01.05.1988, CC BY-NC-SA, beschnitten, https://zuse.zib.de/item/b1O2m7jTn960k37 |
| Foto 4 | kriterium_1.jpg | SDTB |
| Foto 5 | blk17_0929.jpg | SDTB |
| Zeichnung 3 | zuse_archive_p00587_xk.jpg | Dietmar Saupe, Bauteile des Leitwerks der Z1, 10.06.1988, CC BY-NC-SA, beschnitten, https://zuse.zib.de/item/3f9nyUn9PRs3uDeG |
| Zeichnung 4 | zuse_archive_p00586_xk.jpg | Dietmar Saupe, Hebelwirkung im Leitwerk der Z1, 09.06.1988, CC BY-NC-SA, beschnitten, https://zuse.zib.de/item/JsrJfcSKrPLw308w |
| Zeichnung 5 | zuse_archive_p00595_x1.jpg | Ursula Schweier, Übersicht zu Schaltgliedern und Schaltkanten im Leitwerk der Z1, 24.08.1988, CC BY-NC-SA, beschnitten, https://zuse.zib.de/item/Bn0_GPl2TaMjA1K9 |
| Zeichnung 6 | zuse_archive_p00596_xm.jpg | Ursula Schweier, Schaltbleche und Schaltglieder des Leitwerks der Z1, 12.07.1988, zuse_archive_p00596.jpg, CC BY-NC-SA, beschnitten, bearbeitet https://zuse.zib.de/item/hnE5ZtoJAYNUBfZN |
| Zeichnung 7 | zuse_archive_p00595_xm.jpg | Ursula Schweier, Übersicht zu Schaltgliedern und Schaltkanten im Leitwerk der Z1, 24.08.1988, CC BY-NC-SA, beschnitten, bearbeitet https://zuse.zib.de/item/Bn0_GPl2TaMjA1K9 |
| Zeichnung 8 | dtm_B_0010_Mikroprogramm_tabelle2.jpg | Historisches Archiv SDTB, I.NL 363 Slg. Zuse, Mappe 10 |
| Doku 1 | bl17mpg_0000_20260617_103202_et_x.jpg | SDTB |
| Doku 2 | bl17mpg_0000_20260617_123956_et_cx.jpg | SDTB |
| Foto 6 | bl17_abbau_1308.jpg | SDTB |
| Foto 7 | bl17mpg_1002_20260617_103331_si_xk.jpg | SDTB |
| Foto 8 | bl17mpg_1002_20260617_103615_et_xk.jpg | SDTB |
| Foto 9 | bl17mpg_1011_20260617_111049_si_xk.jpg | SDTB |
| Foto 10 | bl17mpg_1011_20260617_111300_et_xk.jpg | SDTB |
| Foto 11 | bl17mpg_1012_20260617_111527_si_xk.jpg | SDTB |
| Foto 13 | bl17mpg_1039_20260617_143517_si_xk.jpg | SDTB |
| Foto 14 | bl17mpg_1039_20260617_143807_et_xk.jpg | SDTB |
| Foto 15 | bl17mpg_1066_20260617_165626_et_xk.jpg | SDTB |
| Foto 16 | bl17mpg_1072_20260617_173653_si_xk.jpg | SDTB |
| Foto 17 | bl17mpg_1073_20260617_174050_et_xk.jpg | SDTB |
| Foto 18 | bl17mpg_1073_20260617_174132_si_sk.jpg | SDTB |
| Foto 20 | vier_20260619_143105_dt_xk.jpg | SDTB |
| Foto 21 | vier_20260619_120258_dt_xk.jpg | SDTB |
| Foto 22 | vier_20260619_142740_dt_xk.jpg | SDTB |
| Foto 23 | vier_20260616_095101_dt_xk.jpg | SDTB |
| Foto 25 | bl17_abbau_1319_x.jpg | SDTB |
| Foto 24 | bl17_abbau_1320_x.jpg | SDTB |
| Zeichnung 9 | zuse_archive_p00606_x.jpg | Ursula Schweier, Bauteil aus Aluminium für das Leitwerk der Z1, 24.10.1988, CC BY-NC-SA, beschnitten https://zuse.zib.de/item/yLJPXEjsc7k7S3dV |
| Zeichnung 10 | zuse_archive_p00547_x.jpg | Dietmar Saupe, Ursula Schweier, Übersichtszeichnung des Rechenwerks der Z1, 22.02.1988, CC BY-NC-SA, beschnitten https://zuse.zib.de/item/blsjxoHmIEuwPxwy |
| Zeichnung 12 | zuse_archive_p00603_x.jpg | Ursula Schweier, Plexiglasplatten, Distanzhülsen u. ‑scheibe u. Stift; Materialangaben, 23.08.1988, CC BY-NC-SA, beschnitten https://zuse.zib.de/item/QVD9ztBuUH8EVvE7 |
| Zeichnung 13 | bl17_ideale_schichtung.jpg | Klemens Krause |
| Tabelle 1 | bl17mpg_sch_02_c.jpg | Klemens Krause |
| Tabelle 2 | bl17mpg_pgm_04_c.jpg | Klemens Krause |
| Tabelle 3 | bl17mpg_pgm_06_c_1.jpg | Klemens Krause |
| Tabelle 4 | bl17mpg_pgm_06_c_2.jpg | Klemens Krause |
- Raúl Rojas (Hrsg.): Die Rechenmaschinen von Konrad Zuse, Berlin et al. 1998. ↩︎
- Raúl Rojas: Konrad Zuse’s Early Computers. The Quest for the Computer in Germany, 2023. ↩︎
- Dietmar Saupe, Ursula Schweier: Funktions- und Konstruktionsprinzipien der programmgesteuerten mechanischen Rechenmaschine Z1. Gesellschaft für Mathematik und Datenverarbeitung, Arbeitspapiere der GMD 321. Sankt Augustin 1988. ↩︎