Norbert's Emulators
Mailüfterl Emulator
The Mailüfterl was the first fully transistorized computer on continental Europe. It was built at the Technical University of Vienna (Austria) from 1956 to 1958 by Dr. Heinz Zemanek and his team. The machine was very reliable and was in operation until about 1966 :-).This is my JavaScript emulator of the machine written in 2017. It is based on my Java version from 2007. Start it here:
Find out more about the machine and the emulator usage in the following English/German text.
Mailüfterl machine
The Mailüfterl was a fully transistorized, serial, decimal-and-binary drum computer with 50 words of immediate-access core storage. The 3,000-rpm drum stored 10,000 48-bit words. Instructions were of the one-address type, fully utilizing a whole word, as they included references to the core store, condition on execution, and indication of how the address is to be modified or interpreted, etc. Addition took 0.8 ms. Multiplication and division were effected by subroutines, multiplication taking 26 ms.The machine was built by Dr. Heinz Zemanek and his team in Vienna/Austria from 1956 to 1958. The Team members were Heinz Zemanek, Kurt Bandat, Rudolf Bodo, Viktor Kudielka, Kurt Walk, Peter Lucas, and Eugen Mühldorf.
Das Mailüfterl war ein volltransistorisierter, serieller, dezimal-binärer Trommelspeicherrechner mit 50 Worten Kernspeicher für den Schnellzugriff. Die mit 3.000 Umdrehungen pro Minute rotierende Trommel konnte 10.000 48-Bit-Worte speichern. Die Befehle waren vom 1-Adress-Typ und nutzten das gesamte Maschinenwort aus, weil sie Referenzen auf den Kernspeicher, eine Bedingung für die Ausführung und Angaben zur Adressmodifikation und -interpretation usw. beinhalteten. Die Addition dauerte 0,8 Millisekunden. Multiplikation und Division waren als Unterprgramme realisiert. Eine Multiplikation dauerte dadurch 26 Millisekunden.
Der Rechner wurde von Dr. Heinz Zemanek und seinem Team in Wien/Österreich zwischen 1956 und 1958 gebaut. Die Teammitglieder waren Heinz Zemanek, Kurt Bandat, Rudolf Bodo, Viktor Kudielka, Kurt Walk, Peter Lucas und Eugen Mühldorf.
Registers / Register
Registers are 48 bits wide. / Register sind 48 Bit breit.
AK | ... | Accumulator / Akkumulator |
MR | ... | Multiplicator / Multiplikator |
MD | ... | Multiplicand / Multiplikand |
BR | ... | Instruction register / Befehlsregister |
BZ | ... | Program counter / Befehlszähler |
RS | ... | Return address / Rückkehradresse |
Instruction format / Befehlsformat
47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 | 39 | 38 | 37 | 36 | 35 | 34 | 33 | 32 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Tab | Q | Condition Bedingung |
Main instr. Hauptbefehl |
Additional instr. Zusatz |
X | K | B | H | G | S | V | W | M | Index | Address Adresse |
Conditions / Bedingungen
0 | ... | Z0 | ... | Unconditional / ohne Bedingung |
1 | ... | Z1 | ... | LSD(MR) ≠ 0 |
2 | ... | Z2 | ... | (AK) ≥ (MD) |
3 | ... | Z3 | ... | (AK) ≥ 0 |
4 | ... | Z4 | ... | (AK) < 0 |
5 | ... | Z5 | ... | unused / unbenutzt |
6 | ... | Z6 | ... | unused / unbenutzt |
7 | ... | Z7 | ... | Tetrade 11 of MR ≥ 5 |
8 | ... | Z8 | ... | (MD) < 0 |
9 | ... | Z9 | ... | (AK) contains Q mark / (AK) enthält Q-Zeichen |
10 | ... | Z10 | ... | unused / unbenutzt |
11 | ... | Z11 | ... | (AK) ≠ (MD) |
12 | ... | Z12 | ... | (AK) = 0 |
13 | ... | Z13 | ... | Switch Z13 is on / Schalter Z13 eingeschaltet |
14 | ... | Z14 | ... | Switch Z14 is on / Schalter Z14 eingeschaltet |
15 | ... | Z15 | ... | Switch Z15 is on / Schalter Z15 eingeschaltet |
Main instructions / Hauptbefehle
0 | ... | N | ... | Zero operation / keine Operation |
1 | ... | A | ... | Decimal Addition / Dezimale Addition |
2 | ... | E | ... | Extraction / Extraktion |
3 | ... | I | ... | Conjunction / Konjunktion |
4 | ... | D | ... | Disjunction / Disjunktion |
5 | ... | OA | ... | Binary Addition / Binäre Addition |
6 | ... | F | ... | Not equivalence / Antivalenz |
7 | ... | TI | ... | Transfer to core / Kernspeichertransport |
8 | ... | TN | ... | Transfer to drum / Trommelspeichertransport |
9 | ... | YA | ... | Recurrent addition / Wiederholte Addition |
10 | ... | U | ... | Write to memory / In den Speicher schreiben |
11 | ... | YN | ... | Recurrent zero operation / Wiederholtes Nichtstun |
12 | ... | J | ... | Read from memory / Aus dem Speicher lesen |
13 | ... | ... | unused / unbenutzt | |
14 | ... | ... | unused / unbenutzt | |
15 | ... | ... | unused / unbenutzt |
Additional instructions / Zusätze
0 | ... | ... | No additional operation / keine zusätzliche Operation | |
1 | ... | C | ... | Clear accumulator / Akkumulator löschen |
2 | ... | L | ... | Shift accumulator left / Akkumulator nach links verschieben |
3 | ... | R | ... | Shift accumulator right / Akkumulator nach rechts verschieben |
4 | ... | OL | ... | Shift accumulator left binary / Akkumulator binär nach links verschieben |
5 | ... | OR | ... | Shift accumulator right binary / Akkumulator binär nach rechts verschieben |
6 | ... | PQ | ... | Set Q mark / Q-Zeichen setzen |
7 | ... | PP | ... | Clear Q mark / Q-Zeichen löschen |
Functional bits / Funktionale Bits
X | ... | Jump / Sprung |
K | ... | Address is core store address / Adresse ist Kernspeicheradresse |
B | ... | Address is pseudo address / Adresse ist Pseudoadresse |
H | ... | Address addition (Effective address = index + address) / Adressaddition (Effektive Adresse = Index + Adresse) |
G | ... | Address substitution (Effective address = contents of address) / Adresssubstitution (Effektive Adresse = Inhalt der Adresse) |
S | ... | Subtraction / Subtraktion |
V | ... | Clear MR / MR löschen |
W | ... | Add 1 to (MR) / 1 zu (MR) addieren |
M | ... | Add -1 to (MR) / -1 zu (MR) addieren |
Special combinations / Spezielle Kombinationen
XA | ... | Jump with addition in the MR / Sprung mit Addition |
XB | ... | Recurrent jump / Wiederholungssprung |
XAB | ... | Block transfer / Blocktransport |
ZkXB | ... | Recurrent jump with condition / Bedingter Wiederholungssprung |
XU | ... | Jump with storing return instruction / Sprung mit automatischer Notierung des Rückkehrbefehls |
XUB | ... | Recurrent jump with storing return instruction / Wiederholungssprung mit automatischer Notierung des Rückkehrbefehls |
ZkXUB | ... | Conditional recurrent jump with storing return instruction / Bedingter Wiederholungssprung mit automatischer Notierung des Rückkehrbefehls |
Using the Emulator / Bedienung des Emulators
Do this:- Select and load a pre-stored paper tape in the punched tape reader window (button "Load"), or type in your own program there.
- Assemble the program with the button "Assemble".
- Then, go to the control desk window and enter the command "Jump to start address of the program" like so:
- Select in the address area the four digits of the start address of the program (e.g. 1000).
- Set the condition, the main and additional instructions, and all functional bits to "empty".
- Mark the functional bit "X", i.e. Jump.
- Press the button "BÜ", i.e. take over the instruction from the control desk into the instruction register.
- Press the button "ST", i.e. start the machine.
- Watch the output of the program in the teleprinter, control desk, or relay window.
- To stop the machine press the button "MS".
Mache das:
- Wähle ein Programm eines vorgespeicherten Lochstreifens und lade es in das Lochstreifenabtasterfenster (Schalter "Load"), oder tippe ein Programm dort ein.
- Übersetze das Programm mit dem Schalter "Assemble".
- Dann gehe zur Schalttafel und gib den Befehl "Springe zur Startadresse des Programms" so ein:
- Wähle im Adressfeld die vier Ziffern der Startadresse des Programms aus (z.B. 1000).
- Setze Bedingung, Hauptbefehl, Zusätze und alle funktionalen Bits auf "leer".
- Setze das funktionale Bit "X", d.h. Sprung.
- Drücke den Schalter "BÜ", d.h. übernimm den Befehl von der Schalttafel ins Befehlsregister.
- Drücke den Schalter "ST", d.h. starte den Rechner.
- Sieh dir die Ausgabe des Programms im Fernschreiber-, Schalttafel- oder Relais-Fenster an.
- Drücke den Schalter "MS" zum Anhalten des Rechners.
Viel Spaß wünscht euch Norbert!
There is an old audio recording of a talk about the Austrian "Mailuefterl" computer I gave ten years ago in German language on the Vintage Computer Festival Europe in Munich (May 1, 2009). I created a video out of that audio file by adding the slides I showed on the talk, and by replacing the live demo with my old Java-based emulator by a demo on my new JavaScript-based Mailuefterl emulator.
Here is the video: