After Konrad Zuse died in 1995, all letters, drawings and mechanical prototypes held in his house were donated to Deutsches Museum in Munich. This institution started cataloguing Zuse’s papers with our help. With financing from the Deutsche Forschungsgemeinschaft, the museum worked on digitizing all the documents and blueprints recovered from Zuse’s estate, while my group in Berlin concentrated on the mechanical computer Z1. This was Zuse’s first computer but the last still waiting for a full description and documentation.
The website “Architecture and Simulation of the Z1 computer” (http://zuse-z1.zib.de/) was started in 2011 and was completed in 2014. It houses now three kinds of exhibits:
- A panorama of the mechanical Z1 consisting of 10.000 pictures taken from different perspectives around the machine. The pictures are of high-definition and the user can zoom in and out. The virtual visitor of the exhibit can move around the machine and inspect it closely.
- All available blueprints of the reconstruction of the Z1, digitized by Deutsches Museum during our collaboration.
- Two simulations of the mechanical addition unit of the Z1.
The website has been visited by thousands of Internet users who can experience and see the Z1, both as a museum’s exhibit, as well as a working model of part of its mechanics. Our Z1 project is an example of the way museums can present their collections over the Internet.
We now have a complete understanding of the mechanical architecture of the Z1 (which has been published both in German and in English). Future work aims at creating a complete 3D simulation of the complete machine using automatic CAD modeling based on photographs.
Motivation
The Z1 was the first computer built by the German inventor Konrad Zuse (from 1936 to 1938). However, it was also the “last frontier”, the only Zuse machine still awaiting a detailed analysis and description of its architecture. Although we knew that the Z3 was based on the Z1, and I worked implicitly from this hypothesis in several papers about the Z3, we could not be really sure until the blueprints of the Z1 would have been analyzed.
The Z1 was very similar to the Z3, finished in 1941, whose architecture was first described in [Rojas 1997, 1998]. However, the detailed high-level architecture of the Z1 had never been explained before. The original prototype was destroyed during a bombing raid in 1943. Only a few sketches and photographs of the mechanical components survived. In the 1980s, Konrad Zuse, who had retired many years earlier, obtained financing from Siemens and other German sponsors for building a full replica of the Z1 which is now housed in Berlin’s Technology Museum. Zuse built the machine with the help of two engineering students: He prepared a full set of blueprints, painstakingly drawing every single mechanical component (to be cut from sheets of steel), and supervising the construction over the course of several years at his own house in Hünfeld, Germany. The first sketches of the Z1 reconstruction were drawn in 1984. When the machine was delivered to the Berlin museum in 1989 it was shown running and computing some arithmetical operations on several occasions. However, the reconstructed Z1 was, like the original, never reliable enough to run unattended for long stretches of time. It even failed at the inauguration and Zuse spent months repairing the machine. After Konrad Zuse passed away in 1995, the machine was never restarted again.
Although we have a reconstruction of the Z1 in Berlin, fate struck twice. Other than drawing the blueprints, Zuse made no serious effort to write a complete top-down description of the reconstructed Z1 (he expected a local university to do it). This would have been necessary, because it is evident from comparing the reconstruction with old photographs of the Z1 built in 1938, that the new machine has been “streamlined”. The higher precision of the machining equipment available to Zuse in the 1980s allowed him to build the machine using layers of steel plates which could be placed tighter together. The new Z1 fills a significantly smaller volume than the old Z1. It is also not completely clear if the new Z1 is strictly a one-to-one logical and mechanical clone of the original machine, or if Zuse’s experience with the Z3 and later machines did not allow him to improve portions of the reconstructed Z1. In the set of mechanical blueprints drawn from 1984 to 1989, there are at least six different designs for the addition unit, having between five to eight, and finally up to 12 mechanical layers. Zuse left no detailed written record which could allow us to answer such questions. Still worse, he rebuilt the Z1 and left no comprehensive logical description of it – for the second time! He acted like those celebrated clockmakers who only draw the parts of their watches, leaving no further explanation: first-rate clockmakers would need no further clarifications. His two student assistants documented only the memory and the tape reader. Visitors to the Berlin museum can only wonder at the thousands of components visible in the machine. They can both wonder and despair, since it is almost impossible, even for professional computer scientists, to visualize the inner workings of this mechanical Leviathan. The machine is there — but unfortunately dead.
The Z1 Internet Archive
Our website is aimed at giving new life to the Z1. Fig. 2 shows the welcome screen of our repository. It is part of the Konrad Zuse Internet Archive started by the author around 1999. The new site dedicated to the Z1 was just completed in 2014.
The website contains three kinds of information:
- On the left, you can see a blueprint of part of the reconstructed Z1. Clicking on this image the user gains entrance to the set of 1500 digitized blueprints drawn by Zuse and his helpers in the 1990s. Each blueprint has been stored with a set of keywords (metainformation) which allows the interested visitor to search blueprints by keyword. For storing the data, a document management system from the Max-Planck-Institute for the History of Science in Berlin was adapted to the task.
- In the middle you can see a picture of the reconstructed Z1. Clicking on this image gives access to the full set of photographs of the Z1 arranged in such a way that the user can rotate the machine and can zoom-in and out. This set of photographs allows the museum visitor to sit at home and observe in detail all parts of the machine. We think that this is the way museums will exhibit artifacts over the Internet in the future.
- To the left there is an image of a simulation of the Z1. Clicking on this image starts a Java program which allows the interested visitor to simulate part of a mechanical addition unit and see the movement of the parts on the screen. The simulation can be run forward or backward, can be paused, and the different mechanical parts can be made transparent or not.
The best way to understand the scope of the project and the materials contained in the web site is for the reader to go to our archive and navigate it. In the following I just show some screenshots of the archive.
The blueprints
Fig. 3 shows the thumbnails of 18 blueprints together with a short description of their content. Clicking on any thumbnail retrieves the blueprint at full screen resolution.
Fig. 3 shows a blueprint as scanned and stored in the web site.
The panoramas
The set of panoramas and zoom-ins of the Z1 shown in Figs. 5, 6, 7, 8 were produced by taking thousands of photographs of the Z1 with a digital camera. The camera was mounted on a Dolly and was driven around the Z1, taking the pictures with different degrees of zooming. We took pictures from three different vertical angles (pitch angle) and hundreds of points of view around the machine.
The data base of Z1 images is arranged in such a way that the user can navigate with the mouse around the machine and select a new viewpoint. The computer selects the image that best matches the new point of view of the user and sows it. Since all pictures were taken at high resolution, it is possible to zoom-in in order to inspect details. Again, the best way to understand this exhibit is by experimenting it directly in the website.
The simulation
Two of my students at FU Berlin wrote simulations of the mechanics of the Z1 as bachelor thesis. The simulations were written in Java.
The simulations allow the user to set two registers of four bits each and then start a binary addition. Fig. 9 shows a screenshot of the simulation as documented in the thesis of my student Jakob Mischek. The simulation is available under www.zuse-z1.de. For this simulation the browser needs the Web GL plugin.
The second simulation is directly available from the Z1 archive website. Your browser needs to have Java activated.
Highlights of the Z1
Fig. 10 shows the abstract diagram of the reconstructed Z1. Notice the two main halves of the machine: the memory is in the upper half, and the processor in the bottom half. For a detailed description see my paper in arXiv [Rojas 2014].
Each half had its own rotating cycling unit, which further divided each cycle into four mechanical movements in the directions shown by the arrows. These four movements could be communicated to any part of the machine using the levers distributed under the computational components. The punched tape was read, one instruction at a time. The instructions had different durations. Load and store operations took one cycle, all other operations needed several cycles. The memory address was contained in the lower six bits of the 8 bit opcode, allowing the programmer to refer explicitly to 64 memory addresses.
The Z1 has a number of features later adopted in the Z3. From a modern perspective, the most important innovations in the Z1 (see Fig. 10) were the following:
- It was based on a fully binary architecture for the memory and the processor.
- The memory was separated from the CPU. The original Z1 had 16 words of memory, the reconstruction has 64.
- The machine was programmable: the program was read from punched tape using 8 bits (two bits for the opcode and six bits for memory addressing, or three bits for the opcode of the four arithmetical and the two I/O operations). Therefore there were only eight instructions: the four basic arithmetical operations, load-from and store-to memory, one instruction for reading data from a decimal panel, and another for showing the contents of the result register on a mechanical decimal display.
- Floating-point was used for internal data representation, in the memory and in the processor. Therefore, the processor was divided into two parts: one for handling the exponents, another for handling the mantissas.
- The special case of zero in arguments or results (which cannot be expressed with a normalized mantissa, where the leading bit is always 1) can be handled within the floating-point representation as special values of the exponent. This was done in the Z3 but not in the Z1, also not in its reconstruction. Therefore, neither the original Z1, nor the reconstruction, can work with zero as intermediate result. Zuse was aware of this shortcoming, but he left the solution to the relay machine, which was easier to wire.
- The CPU was microcoded: operations were broken into sequences of microinstructions, one for each machine cycle. The microinstructions produced a specific dataflow within the arithmetical-logical units (ALUs), which were running nonstop, adding whatever two numbers were stored in its two input registers, in every cycle.
- Curiously, memory and processor ran independently: the memory would put data at or collect data from the communication interface, whenever the punched tape gave the order. The processor would pick, or put data at the interface, when a load or store operation was executed. It was possible to run only the processor and shut-down the memory, in which case the data at the interface, supposedly coming from the memory, became zero. It was also possible to run only the memory and shut-down the processor. This allowed Zuse to debug each half of the machine independently. When running together, a shaft connecting the cycling units in each half synchronized both parts of the machine.
- Further innovations in the Z1 were similar to some of the ideas present later in the Z3. The instruction set was practically the same as in the Z3 but the Z1 could not extract square roots. The Z1 used discarded 35mm film tapes as punched tape.
Memory and processor communicated through the buffer between both units shown in Fig. 10. The decoder took an instruction from the punched tape reader, determined the operation, and started controlling the memory unit and the processor as needed. A number could be read from memory to the first of two CPU floating-point registers (using a load operation). A further load operation would read a number from memory to the second CPU register. The two registers could be added, subtracted, multiplied, or divided in the processor. Such operations require exponent addition or subtraction (with a two’s complement adder), as well as an adder for the mantissas. The sign of the result of a multiplication or division was handled in a “sign unit” connected directly to the decoder.
An input instruction from the punched tape stopped the machine and allowed the operator to enter data by pulling four decimal digits from a mechanical panel, entering the exponent of the floating point representation with a small lever, and also the sign of the number. The operator could then restart the machine. An output instruction stopped also the machine and showed the contents of the result register in a decimal mechanical panel, until the operator restarted the machine pressing a lever.
The microsequencer in Fig. 10 constitutes, together with the exponent and mantissa addition units, the core of the computation capabilities of the Z1. Each arithmetical or I/O operation was divided into “phases”. The microsequencer started counting and selected the appropriate microoperation in the corresponding layer, out of 12 possible layers of mechanical components in the addition units.
Therefore, a minimal program in a punched tape could be, for example: 1) Load number from address 1 (implicitly to the first CPU register), 2) Load number form address 2 (implicitly to the second CPU register), 3) add, 4) show result in decimal. This program could thus allow the operator to use the Z1 as a simple mechanical calculator for predefined operations. Of course, the sequence of computations could be much longer: automatic sequences of operations were programmed using the memory as storage for constants and intermediate results (in the latter Z4 computer, one tape used for mathematical computations was two meters long).
The architecture of the Z1 can be summarized using modern terminology as follows: it was a programmable normalized floating-point von Neumann machine (processor and memory were separate), with external read-only program, with a memory for sixteen 24-bit words. It was capable of accepting decimal numbers of four digits (and an exponent, as well as a sign) as input, for transforming them into binary. It was capable of performing the four arithmetical operations with the data. The binary floating-point result could be transformed back into decimal scientific notation readable by the user. There was no conditional, nor unconditional branching in the instruction set. Exception handling for zero results was lacking. Each instruction was broken into microinstructions “hardwired” in the machine. A microsequencer orchestrated the execution of the microinstructions. In the single surviving video of the machine operating, it looks to the eye as the moving parts of a heirloom. But this machine was weaving numbers.
Future Work
In the short term we would like to fully document the 3D mechanical structure of the Z1, so that future generations of scholars, and the public at large, can appreciate the historical value of the machine. The documentation will be done by capturing photographically every single part of the machine and writing a 3D simulation of the interplay of all parts.
The Z1 is built in layers (see Fig. 5). The different layers can be removed, starting from the top, one after another. We would position a digital camera above the machine and would take pictures of every single mechanical-logical component, before removing it from the machine. In order to have a 3D reference, we would stick four or more red points on the component in order to capture its exact placement. The camera will be calibrated so that pixel values can be associated with Euclidian coordinates in a reliable manner. The height of the component on the assembly will be measured manually (but can be also computed automatically). The thickness will be measured manually.
Once a component has been removed, it will be placed on a table below a second camera. An image will be taken. The background will have a salient color (blue, for example), so that all the edges of the components can be detected automatically. Since Zuse used only “flat” stripes of metal and some bars, there is no need to make a 3D measurement. The 2D image from the camera will be sufficient. Moreover, the dimensions of the parts were drawn using a grid (in the 1980s) so that the grid provides a very good reference a priori for the parts’ dimensions.
Calibrated camera on top of the Z1 | Calibrated camera on top of special measuring table |
Fig. 11: Digitizing all the mechanical parts with a digital camera |
Levers and bars will be handled as special cases. Some levers are composite assemblies of primitive forms. Vertical rods will be just entered by hand (their radius is everywhere the same, only their height is variable). Still unclear is how to capture the levers in the lowest part of the machine. Those levers are used to carry the machine cycling pulses. The levers are few in number and could possibly be measured by hand.
Assembling a model in the computer
A 2D-CAD model can be automatically generated from the images of the components. The position of the part in the machine is given by the image of the assembly taken with the above-the-Z1 camera. A computer can put together all CAD models and generate a genuine and accurate 3D model of the Z1. Some manual intervention might be needed to make all parts fit, but it would be minimal.
The most difficult part of the project is actually taking apart the machine, layer by layer, with so much care than it can be put together again. The generation of the CAD model could be done in parallel to the mechanical work. The time needed for capturing all parts is basically the time needed for disassembling and reassembling the machine.
Simulation
The different parts of the Z1 can adopt one of two positions (0 or 1). Only the pins used for connecting layers can have more than two positions. A simulation can be done with the CAD model, without having to simulate the physics of the mechanical parts, since all movements represent the logic of the data processing. If, for example, we know that a bit which was zero has been set to one, we know that the corresponding mechanical component has moved from its zero-position to its one-position. Therefore, we only need to develop a model of the logical interconnections of all parts in the machine (in fact, the detailed computational model). The movement of the parts is then produced by logical functions, and by the cycles of the machine.
It would be possible to simulate the 30.000+ parts of the machine in real time. The user could enter its own numerical data and “work” with the Z1. It might be possible to execute the simulation from a Browser, although we are aiming first for a desktop application.