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".
And now, try out software which was written in the fifties and early sixties of the last century and probably has not been run for 60 years now!

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.
Und jetzt probiere Software aus, die in den Fünfziger- und Sechziger-Jahren des vorigen Jahrhunderts geschrieben wurde und wahrscheinlich 60 Jahre lang nicht mehr gelaufen ist!

Viel Spaß wünscht euch Norbert!