SwissMicros DM42

Ich habe zu Weihnachten einen programmierbaren Taschenrechner der Firma SwissMicros geschenkt bekommen. Er heißt DM42 und ist ein Nachbau des HP-42S aus dem Jahr 1988. Hier erzähle ich Euch, warum ich Freude an einem Taschenrechner habe, der eigentlich längst veraltet ist. Dies ist wieder einmal ein ziemlich länglicher Artikel und er behandelt allerlei Randgebiete, die aber, meiner Meinung nach, alle wichtig sind, um die Faszination an diesem Gerät zu verstehen.

Als die CHIP noch wunderschöne Titelbilder hatte. Hier die Ausgabe Januar/Februar aus dem Jahr 1979. Der gemalte Taschenrechner ähnelt allerdings eher einem Modell der Konkurrenz, dem Texas Instruments TI-58/TI-58C bzw. TI-59.

Für mich ist der Computer eine der größten Erfindungen des letzten Jahrhunderts, wenn nicht überhaupt in der Geschichte der Menschheit. Starke Konkurrenten sind das Rad und die Dampfmaschine. Die durch den Computer entstandenen Möglichkeiten automatisiert komplizierteste Dinge maschinell erledigen zu lassen, seien es komplexe Rechnungen oder die Steuerung komplexer Maschinen, haben der Welt große Chancen verschafft. Ja, er hat und er wird Menschen Arbeit abnehmen und das bedeutet, dass sie so kein Geld mehr verdienen können. Aber auch für dieses Problem gibt es Lösungen, auf die ich vielleicht einmal in einem anderen Artikel eingehen werde. Mir hat der Computer in Form eines programmierbaren Taschenrechners das exakte Denken beigebracht. Solange meine Programme nicht korrekt waren, funktionierten sie halt nicht. Das ist tatsächlich etwas anderes, als das Funktionieren im richtigen Leben. Denn kleine Unsauberkeiten in Gesprächen werden oft toleriert und wer Deine Aussagen nicht gleich nachrechnet, entdeckt ihre Falschheit nicht.

In meinem Artikel betrachte ich den DM42 wie einen Computer. Darum kläre ich hier jetzt erst einmal, was für mich ein Computer ist. Da stellt sich zuerst die Frage, welche Eigenschaften ein Computer haben muss, damit er sich auch so nennen darf?

Kann ein Taschenrechner ein Computer sein und war die Zuse Z3 ein Computer?

Ursprünglich war ein Computer ein Mensch (engl. to compute) der Rechenarbeiten durchführte. Darum wurden wohl auch die ersten Maschinen, die das Gleiche konnten, so genannt. Für mich ist ein Computer eine elektronische Maschine, die eine von mir erstellte Liste mit Tätigkeiten automatisch durchführen kann. Sie muss dabei in der Lage sein, in Abhängigkeit der Ergebnisse einzelner Tätigkeiten, die nächste Position in der Liste beliebig wählen zu können. Letzteres nennt man in der Informatik auch eine bedingte Verzweigung und die Liste heißt Programm.

In der Wikipedia steht, dass ein universell programmierbarer Computer turingmächtig sein muss. Leider habe ich mich mit Turingmächtigkeit nicht genügend beschäftigt, so dass ich das nicht sicher nachvollziehen kann. Interessant an dieser Definition ist das Wort ‘universell’. Was ist ein Computer und was ist ein universeller Computer? Ich denke es hat mit der bedingten Verzweigung zu tun. Könnte sein, dass elektronische Rechenmaschinen, die keine bedingte Verzweigung besitzen, sich Computer nennen dürfen und wenn sie auch eine bedingte Verzweigung unterstützen, universell programmierbar sind.

Heutzutage ist ja angeblich selbst die Sitzheizung im Auto programmierbar. Ich kann ihr sagen, zu welcher Uhrzeit sie mit dem Heizen beginnen soll. Für mich hat allerdings das Einstellen einer Uhrzeit nichts mit Programmieren zu tun. Auch das Erstellen eines Lochstreifens für eine alte Pianola, den diese dann automatisch abläuft, hat für mich nur entfernt mit Programmieren zu tun. Gebe ich einer Maschine allerdings die Möglichkeit, diesen linearen Ablauf in Abhängigkeit der zu verarbeiteten Daten zu unterbrechen und an einer beliebigen anderen Stelle fortzusetzen, so ändern sich die damit verbundenen Möglichkeiten auf dramatische Art und Weise!

Vielleicht nur vergleichbar mit dem Einhauchen von Leben in einen toten Körper. Denn eigentlich ist das alles, was man tun muss, um eben dieser Maschine das Schach spielen oder maschinelles Lernen beizubringen, was ihr schließlich sogar zu künstlicher Intelligenz verhilft! Ob man da, wie in dem Roman von Mary Shelley, vielleicht ein Monster erschaffen hat? Manche würden das wahrscheinlich bejahen.

Das Krasse ist jetzt die Tatsache, das die oben erwähnte Zuse Z3, der angeblich erste Computer der Welt, eben genau diese Fähigkeit nicht hatte!!!

Mein erster programmierbarer Taschenrechner aber schon.

Wem das noch nicht genug faszinierend ist, der sollte sich einmal damit beschäftigen, dass Conways Zellulärer Automat Life ‘Lebensgrundlage’ für einen Computer sein kann, der sogar Turing Vollständig ist!

Kindheitserinnerungen

Der Kauf meines ersten programmierbaren Taschenrechners im Alter von 12 Jahren, einem Privileg PR 56 D-NC von Quelle, machte mich sehr glücklich. Das Gefühl, das ich damals hatte, kann vielleicht mit dem Gefühl verglichen werden, welches ich beim Kauf meines ersten Motorrades, oder mit dem Kauf meines ersten Quadcopters zum Filmen, hatte. Aber an die gedankliche Freiheit, die der PR 56 D-NC in mir auslöste, kommen beide nicht heran. Ich spürte, wie mich das kleine Gerät damals unaufhörlich dazu aufforderte immer neue Programme zu entwickeln und das es alle meine ausgedachten Algorithmen klaglos immer und immer wieder ausführen wird. Es war für mich, wie die anfangs noch leere Leinwand für einen Maler, ein leerer Raum, der darauf wartete, von mir mit unendlich vielen Ideen, in Form von programmierten Algorithmen, gefüllt zu werden.

Aber nach ein paar Wochen erkannte ich, dass die im Vergleich zu heutigen Programmiersprachen extrem armseligen Programmiermöglichkeiten mich zwar grundsätzlich in die Lage versetzten, tatsächlich vieles zu programmieren, der winzige Programmspeicher, die auch damals schon unglaubliche Langsamkeit und, vor allem anderen, dass ich nach jedem Einschalten alles neu eingeben musste, meinem jugendlichen Eifer klare Grenzen setzten. Auch wurden der Möglichkeit, einfach überall programmieren zu können, durch den extremen Stromhunger der Fluoreszenz-Anzeige enge Grenzen gesetzt.

Den PR 56 D-NC habe ich vermutlich 1975 oder 1976 gekauft, ich ersetzte ihn durch einen TI-58C und später durch einen TI-59. Noch etwas später bekam ich einen HP-41C in die Finger und damit den Urahn des DM42. Der 1979 erschienene HP-41C war natürlich noch einmal in allem etwas besser als meine vorhergehenden Modelle, das Bedeutendste war aber seine stromsparende LCD-Anzeige, die sogar alphanumerische Zeichen darstellen konnte. Und das war sehr wichtig, da man so den schon eingegebenen Programmcode besser lesen, als auch Programmein- und -ausgaben mit sprechenden Worten bezeichnen konnte! Als 1988 der HP-42S erschien, war ich schon längst weiter zu Homecomputern und PCs gewechselt, so dass ich das gar nicht mitbekommen habe. Über den HP-42S habe ich in einem anderen Artikel geschrieben. Jedenfalls verwendet der HP-42S das gleiche Programmiermodell wie der HP-41C und kann darum für den HP-41C geschriebene  Programme ausführen. Fast 10 Jahre nach der Veröffentlichung des HP-41C, in denen wirklich viel passiert ist, hat er noch einmal eine Möglichkeit geschaffen, den wertvollen Programmen für den HP-41C weitere Jahre eine Lebensumgebung zu bieten.

Der HP-42S wird von vielen als der beste Taschenrechner aller Zeiten angesehen. Warum das tatsächlich sein könnte, habe ich in einem anderen Artikel aufgeschrieben. Jedenfalls ist dies vermutlich der Grund, warum er ca. 30 Jahre nach seinem Debüt von einem Enthusiasten nach gebaut wurde. Und besser denn je!

Die wesentlichen Unterschiede

Der Hintergrund dieses Fotos ist ein Ausschnitt aus der CHIP vom Februar 1980. Aufgeschlagen ist die erste Seite des im Magazins veröffentlichten Artikels über den HP-41C.

Gehäuse

Das Gehäuse des DM42 ist geringfügig kleiner als dass des HP-42S und beinhaltet trotzdem eine Tastenreihe mehr. Beim Original HP-42S konnte eine der beiden Bildschirmzeilen zur Darstellung eines Menüs verwendet werden. Wurde es angezeigt, dann verlor die direkt darunter befindliche Tastaturzeile ihre aufgedruckten Funktionen und diente stattdessen zur Wahl der darüber angezeigten Menüpunkte. Dies ist beim DM42 durch die zusätzliche Tastaturzeile nicht mehr notwendig.  Die Rückseite ist aus dickem, satiniertem Stahlblech und darum unvergleichbar viel stabiler, als die des HP-42S. Die Vorderseite ist aus Kunststoff. Das Stahlblech macht den Taschenrechner sehr schwer und vermittelt ein sehr wertiges Gefühl.

Tastatur

Die Tastatur ist sehr gut. Sie hat einen festen Druckpunkt und bei mir bisher kein Prellen oder Nichtregistrieren eines Tastendrucks gezeigt. Im Vergleich zur Tastatur des HP-41CX und dem HP-42S finde ich die Tastatur etwas straffer. Die Tastatur des HP-41CX geht am leichtesten. Es scheint vom DM42 schon verschiedene Revisionen gegeben zu haben und frühere Modelle hatten möglicherweise eine schwergängigere Tastatur, die mit dem Erscheinen des DM41X ersetzt wurde. Käufer beider Geräte fanden die Tastatur des DM41X im Vergleich zum DM42 angenehmer zu verwenden. Woraufhin auch bei diesem die Tastatur geändert wurde. Meiner hat vermutlich schon die leicht gängigere Tastatur und damit auch eine gedruckte Zweitverwendung der Tasten, die nicht sauber zentriert ist. Ich finde die Tasten auch nicht so schön wie auf den beiden alten Geräten. Sie sind kantiger und haben keine völlig glatte Oberfläche – was aber auch gut sein kann. Die Tasten des alten HP-41CX sind außerdem deutlich höher. Man könnte auch knubbeliger sagen. Toll ist aber die ‘Shift’-Taste, die als Kennzeichen nicht einfach eine aufgedruckte orange Fläche hat, sondern aus gelb durch gefärbtem Kunststoff besteht.

Tasten des DM42.
Tasten des HP-41CX.
Tasten des HP-42S.

Display

Die originale Anzeige des HP-42S war zwar, im Gegensatz zum HP-41C, pixelbasierend, aber leider wenig kontrastreich. In diesem Punkt hat ihn der etwas später erschienene Casio FX-602P bei weitem übertroffen. Die Anzeige des alten HP-42S hatte eine Auflösung von 131×16 Pixeln und bot darum nur für zwei Textzeilen Platz. Der DM42 hat dagegen ein sehr kontrastreiches, sehr hoch aufgelöstes Display mit 400×240 Pixel! Dies ermöglicht es wesentlich mehr Zeilen anzuzeigen. So können auf Wunsch damit auch die Register Z und T dargestellt werden. So richtig nützlich ist das Display nach dem Umschalten in den Programmiermodus, denn dort können bis zu 10 Programmzeilen untereinander dargestellt werden! Das erleichtert das Editieren von Programmen auf dem DM42 enorm! Richtig cool ist die Möglichkeit, bei der normalen Anzeige als auch bei der Anzeige von Programmcode, zwischen ursprünglichen Pixel- und hochauflösenden Fonts hin- und herschalten zu können!

6 gleichzeitig dargestellte Zeilen Programmcode.
10 gleichzeitig dargestellte Zeilen des Programmcodes.

Das Display ist durch Gorilla-Glas geschützt und scheint sehr wenig Strom zu verbrauchen, da es auch im ausgeschalteten Zustand das zuletzt dargestellte Bild anzeigt.

Speicherkapazität

Der HP-42S hatte zum Programmieren 6977 Bytes frei. Der DM42 dagegen hat 75592 Bytes frei. Mehr als das Zehnfache!

Echtzeituhr

Interessanterweise hatte der alte HP-41CX eine eingebaute Echtzeituhr! Laut Wikipedia auf Wunsch von der NASA! Selbst für die Vorgänger des HP-41CX gab es ein einsteckbares Modul mit einer Echtzeituhr zum Nachrüsten. Der später erschienene HP-42S hat keine Echtzeituhr, obwohl er in nahezu allen anderen Punkten dem HP-41CX weit überlegen ist. Da er auch keine Slots zum Einstecken von Modulen hat, kann noch nicht einmal eine nachgerüstet werden. Programme für den HP-41C, die in irgendeiner Weise mit Zeit arbeiten, zum Beispiel zur Zeitnahme bei sportlichen Ereignissen, können darum auf dem HP-42S nicht verwendet werden! Der DM42 hingegen besitzt eine Echtzeituhr!

Rechengenauigkeit

Der DM42 wird als genauester Taschenrechner auf dem Markt beworben, da er eine spezielle Bibliothek von Intel zur Berechnung von Gleitkommazahlen verwendet. Ich denke, es ist diese hier. Ich besitze allerdings eine PCMCIA-Karte mit dem Computer Algebra System Derive, die in der alten HP Palmtop Serie, wie zum Beispiel dem HP-95LX eingesetzt werden kann und die eine beliebige Genauigkeit zur Berechnung von Werten besitzt! Die HP Palmtops sind zwar ein bisschen größer wie der DM42, aber dennoch mobil einsetzbar.

Geschwindigkeit

Mit einem kleinen Testprogramm habe ich überprüft, wie schnell die 3 Taschenrechner ungefähr sind. Vor allem wie viel schneller der DM42 im Vergleich zum HP-42 S ist:

00 { 25-byte Prgm }
01 LBL "TEST"
02 STO 01
03 0
04 STO 02
05 LBL 01
06 RCL 01
07 STO+ 02
08 1
09 STO- 01
10 RCL 01
11 X != 0?
12 GTO 01
13 RCL 02
14 .END.

Dieses Programm habe ich auf dem HP-41CX und dem HP-42S mit einem Eingabewert von 100 laufen lassen:

HP-41 CX ca. 27.0000 Sek.
HP-42 S ca. 15.0000 Sek.
Sharp PC-1261 ca.   3.0000 Sek.
DM42 ca.   0.0500 Sek.
Free42 auf Samsung S7 ca.   0.0001 Sek.

Damit ist der HP-42 S 1.5 Mal so schnell wie der HP-41 CX.

Der DM42 ist 300 Mal so schnell wie der HP-42 S und 540 Mal so schnell wie der HP-41 CX.

Der Free42 ist 270000 Mal so schnell wie der HP-41 CX.

Um den DM42 zu testen, habe ich ihn anstatt bis 100 bis 10000 rechnen lassen. Das hat ungefähr 5 Sekunden gedauert. Das Ergebnis habe ich anschließend umgerechnet. Den Free42 habe ich bis 1000000 zählen lassen, das hat ca. 8 Sekunden gedauert.

Ich habe das Programm auch einmal in das BASIC des Pocket Computer PC-1261 von Sharp umgesetzt. Dort benötigt es für die ersten 100 Werte 3 Sekunden und ist damit 6 mal so schnell wie der HP-41CX.

Übrigens ist der DM42 nochmals deutlich schneller (ca. bis zu 3 Mal) wenn ich ihn mit eingestecktem USB-Kabel verwende!

Mit dem Mikroprozessor kuscheln?

Der DM42 ist im Vergleich zu modernen Taschenrechnern ein sehr primitives Gerät. Er ist kein Grafikrechner und beinhaltet kein Computer Algebra System (CAS). Er versteht noch nicht einmal die Punkt-vor-Strich Rechnung. Aber genau dadurch ist er gut geeignet etwas über die Grundlagen aller Computer zu lernen. Denn die von ihm verwendete Methode einfache Rechnungen auszuführen und die damit einhergehenden Möglichkeiten Programme zu erstellen, erinnern an das Programmieren eines elektronischen Rechenwerks (ALU), wie es in alten und vermutlich auch neuen Mikroprozessoren enthalten ist.

Das ist schön zu sehen, wenn der DM42 mit FIX 00 auf 0 Nachkommastellen und mit der zweiten Taste von rechts oben auf rechtsbündige Anzeige eingestellt wird. Wähle ich dann noch aus dem ‘BASE’-Menü die ‘BINM’-Darstellung, kann ich direkt im Dualsystem arbeiten. Jetzt kann ich Dualzahlen mit 0 und 1 in das X- und das Y-Register eingeben und entweder arithmetisch addieren und subtrahieren oder mit dem ‘LOGIC’-Untermenü logisch verknüpfen. Wer sehen möchte, wie einzelne Bits verarbeitet werden, der sollte sich ein wenig Zeit nehmen und auf dieser Ebene mit dem DM42 experimentieren. Schreibe ich mit dem DM42 Programme, so erinnern die ‘STO’- und ‘RCL’-Befehle an die ‘LDA’- und ‘STA’-Mnemonics des alten Mikroprozessors 6502, nur dass ich anstatt den Speicher direkt zu adressieren, eine Registernummer angeben muss.

Das ähnelt alles dem Umgang mit einem alten Mikroprozessor, wie zum Beispiel dem 6502 mit seinem Akkumulator und den X- und Y-Registern. Ein Register ist ein Speicherbereich, auf den der Mikroprozessor besonders schnell zugreifen kann.

Zum Beispiel: Zuerst tippe ich einen Wert ein und sorge mit einem Druck auf die ‘Enter’-Taste dafür, dass dieser Wert in das X-Register des DM42 geladen wird. Anschließend tippe ich den zweiten Wert ein und drücke abermals die ‘Enter’-Taste. Damit wird der erste Wert ins Y-Register verschoben und der zweite Wert ins X-Register geschrieben. Drücke ich jetzt eine der 4 Tasten für die Grundrechenarten, werden X- und Y-Register entsprechend der gewählten Operation zusammen gerechnet, das Ergebnis in das X-Register geschrieben und das Y-Register – scheinbar – wieder gelöscht. In Wirklichkeit gibt es noch zwei Register, das Z- und das T-Register und nach der erfolgten Rechenoperation wird das Y-Register durch das Z-Register ersetzt und das Z-Register durch das T-Register. Man nennt das Ganze auch einen Stack.

Kurz: Um mit dem DM42 rechnen zu können, muss man sich genau mit seinen Registern und den damit möglichen Funktionen, auskennen. Da das eben auch dem Programmieren eines Mikroprozessors ähnelt, kann man dabei auch ein wenig über die Organisation von Rechnungen beim Programmieren von Mikroprozessoren lernen.

Auch die verwendeten Abkürzungen für Befehle ähneln mit ihren meist nur 3 Buchstaben sehr den damals verwendeten Assembler Mnemonics.

In einer modernen Programmiersprache, aber auch schon beim seit Jahrzehnten vorhandenen C, wird eine mathematische Rechenanweisung wie z.B. ‘y = (42 – 7)/5’ automatisch gemäß den üblichen Rechenregeln berechnet. Beim HP-42S muss ich selbst überlegen, wie ich das einzutippen habe, damit das korrekte Ergebnis heraus kommt. Ich muss also etwas mehr darüber verstehen, wie der Taschenrechner funktioniert, um mit seiner Hilfe rechnen zu können.

Warum ein alter programmierbarer Taschenrechner ideal zum Programmieren lernen geeignet ist

Heutzutage wird Programmieren lernen gerne auch mit dem Arduino oder Python in Verbindung gebracht. Aber es sind nicht unbedingt die Abfrage von Sensoren oder der Umgang mit mathematischen Bibliotheken, die das Programmieren ausmachen. Es ist der Algorithmus, der das Programm zu dem macht, was es ist. Und selbst die einfachste Programmiermaschine erlaubt es damit zu experimentieren.

Programmieren lernen

Von links nach rechts: HP-41CX, HP-42S und DM42.

Es gibt allerdings heutzutage nicht mehr viele Geräte, außer eben den alten programmierbaren Taschenrechnern, bei denen ich dem Programmieren so nahe bin! Einfach die Taste ‘PRGM’ drücken und schon kann ich beim DM42 zwischen Programmierung und normalem Rechnen hin und her wechseln!

Kein Download und Installation einer riesigen Entwicklungsumgebung wie Eclipse, Netbeans, Lazarus oder der Arduino IDE. Auch kein Kompilieren. Einfach ‘PRGM’ tippen und schon bin ich mitten im Programmcode!

Das Beispiel könnt Ihr auch mit dem kostenlosen Free42 ausprobieren!

Ich zeige Euch hier einmal, wie einfach es mit dem DM42 ist ein Programm zu schreiben. Mit ‘PRGM’, was zugegeben die Zweitbelegung der Taste ‘R/S’ ist, in den Programmmodus schalten, jetzt einmal die Taste ‘2’ und die Taste ‘X’ drücken. Jetzt mit nochmaligem Drücken von ‘PRGM’ wieder in den normalen Rechenmodus schalten. Das war es auch schon. Ihr habt Euer erstes Programm geschrieben!

Zum Ausprobieren gebt Ihr die Zahl 1 ein und drückt zwei Mal auf die Taste ‘R/S’. Das erste Mal wird benötigt, um den Programmzeiger auf den Anfang des Programms zu setzen. Mit dem zweiten ‘R/S’ wird ab dieser Stelle das Programm automatisch abgearbeitet. Die 2 sorgt dafür, dass die Zahl 2 in das X-Register eingegeben wird und das nachfolgende X-Zeichen löst die Rechenoperation Multiplizieren aus. Dabei passiert folgendes: Die schon eingetippte 1 wird in das Y-Register verschoben, die 2 in das X-Register, die Multiplikation multipliziert das X- mit dem Y-Register und das Ergebnis wird wieder in das X-Register geschrieben.

Drücke ich jetzt noch einmal auf die ‘R/S’-Taste, wird das Programm wiederholt ausgeführt und in der Folge erscheinen die Wertigkeiten der einzelnen Stellen des Dualsystems in der Anzeige!

Ich vermisse allerdings einen Schalter oder eine Taste, die ausschließlich für das Hin- und Herschalten zwischen Programmier- und Ausführungsmodus vorhanden ist. So wie es bei meinem zweiten programmierbaren Taschenrechner, dem TI-58C mit der Taste ‘LRN’ (‘Learn’)war.

Wer mit dem DM42 das Programmieren lernen möchte, kann versuchen Programme für den GGT, das KGV, die Primfaktorenzerlegung oder die Primzahlensuche zu entwickeln. Das sind kleine, überschaubare Probleme, die nicht viel Code erfordern. Wer schon etwas weiter ist, kann versuchen auf dem schönen Display die Mandelbrotmenge darzustellen oder mit Life den Ansteckungsmöglichkeiten von Corona näher zu kommen.

Einige Hinweise zum Programmiermodell

Die alten Taschenrechner kannten keine Programmiersprachen, wie wir sie heute kennen und normalerweise einsetzen. Das Grundprinzip der Taschenrechner-Programmierung ist schlicht und einfach das Aufzeichnen einer Tastensequenz! Möchte ich beispielsweise den Satz des Pythagoras anwenden und die Länge der Hypotenuse bestimmen, so tippe ich im Programmiermodus folgende Tastendrücke ein: x^2, x<>y, x^2, +, SQRT. Im Programmspeicher steht dann das folgende kleine Programm:

00 { 5-Byte Prgm }
01 x^2
02 X<>Y
03 x^2
04 +
05 SQRT
06 .END.

Wenn ich anschließend im Rechenmodus eine Zahl eintippe, einmal ‘ENTER’ drücke, eine zweite Zahl eintippe und dann die Taste ‘R/S’, wird das Programm gestartet, die eingetippten Tasten werden automatisch nacheinander ‘gedrückt’, bis das Ende des Programms erreicht ist. Anschließend steht die berechnete Länge der Hypothenuse im X-Register. Das scheint nun wirklich nicht sonderlich spektakulär und dennoch war dies in der Zeit der Rechenschieber und ohne Tabellenkalkulation eine riesige Erleichterung für alle Menschen, die häufig wiederkehrende Berechnungen durchzuführen hatten.

Manchmal ist aber Bedarf für mehr Variablen, als auf dem Stack mit seinen 4 Registern Platz ist. Dann kann man im Programmiermodus an diesen Stellen im Programm einfach die Taste ‘R/S’ drücken. Das Programm wird beim Ablauf an diesen Stellen anhalten und ich kann die passenden Werte eingeben. Mit einem weiteren Druck auf die ‘R/S’-Taste kann ich dann das Programm einfach weiter laufen lassen.

Es gab tatsächlich ein paar sehr einfache programmierbare Taschenrechner die außer diesem ‘Keystroke’-Programmieren nichts konnten! Sie hatten vielleicht Speicher für 30 bis 100 Tastendrücke. Das wars!

Aus meiner Sicht ist das dann kein Computer! Es ist nicht möglich damit universelle Algorithmen zu programmieren, da es keine Vergleichsbedingung gibt, mit der man in Abhängigkeit von einem Vergleich, zum Beispiel dem Vergleich zweier Werte, zu einer beliebigen anderen Stelle im Programm springen kann! Das ist wirklich wichtig, denn so eine klitzekleine Vergleichsbedingung ist alles, was so eine Tastendruckablaufmaschine benötigt, um sich vom Dasein als dumme Einen-Schritt-nach-dem-anderen Maschine zur KI zu entwickeln.

Aber schon mein erster programmierbarer Taschenrechner besaß diese entscheidende Funktion in Form der Taste ‘SKP(-)’. Die Funktion arbeitete mit der ‘GOTO’-Funktion Hand in Hand. Sie prüfte, ob der in der Anzeige befindliche Wert negativ war und falls ja, übersprang sie den nächsten Befehl! Da dieser der ‘GOTO’-Befehl sein konnte, war es damit möglich bedingte Verzweigungen zu programmieren.

Schlechteste Programmiermöglichkeiten meines Lebens

Um zu verstehen, wie viel besser der HP-42S war und der DM42 ist, erkläre ich Euch nachfolgend, wie schwierig die Programmierung mit meinem ersten programmierbaren Taschenrechner, dem Privileg PR 56 D-NC, war.

Grundlegendes

Der PR 56 D-NC hatte einen nur 72 Schritte großen Programmspeicher, ungefähr vergleichbar mit 72 Bytes. Dazu gab es noch 10 Register für Zwischenergebnisse. Wahrlich nicht viel, um ein Programm zu schreiben. Für ein paar einfache Formeln reichte es, aber für größere Programme war es viel zu wenig.

Keinerlei Programmierungskomfort

Er hatte keinerlei Möglichkeit mit Symbolen zu arbeiten. Weder mit sprechenden Variablennamen, noch mit Programmmarken (Labels), auf die man mit ‘GOTO’ hätte verzweigen können. Während die fehlenden Variablennamen bei nur 10 Registern noch tolerierbar waren, bedeutete das direkte Adressieren von Programmschritten (Sprungadresse) ein Riesenproblem: Fast jedes Mal, wenn das Programm einen Fehler beinhaltete der das Einfügen oder Löschen von Befehlen bedeutete, also eigentlich immer, mussten alle ‘GOTO’-Anweisungen angepasst werden! Das bedeutet Arbeit und neue Fehlerquellen.

Außerdem konnten neue Befehle nicht einfach eingefügt werden. Sie überschrieben schon vorhandenen Programmcode! Praktisch mussten komplette Programmteile neu eingegeben werden! Dieser Nachteil findet sich auch bei der Programmierung eines alten Mikroprozessors nur über den Maschinencode. Ein Assembler hat das natürlich vermieden.

Bedingte Verzweigung

Der ‘SKP(-)’-Befehl war wie geschaffen für Schleifen, bei denen man so lange etwas machen wollte, bis ein bestimmter Wert < 0 war. Aber alles andere wurde zur Qual. Es gab kein ‘X=0?’,  ‘X<>0?’,  ‘X<0?’,  ‘X>0?’,  ‘X<=0?’, ‘X>=0?’ und das alles noch einmal für ‘X ? Y?’. Wollte ich mit ‘SKP(-)’ prüfen, ob eine in der Anzeige befindliche Zahl ein bestimmter Wert ist, musste ich diesen Wert, um 1 erhöht,  erst vom Anzeigewert subtrahieren und prüfen ob er negativ ist. Falls ja, musste ich den Wert wieder um 1 erhöhen und noch einmal mit ‘SKP(-)’ prüfen, ob er positiv ist. Nur dann war der Wert identisch.

Im Programm sieht das dann so aus:

// Programm für den Privileg PR 56 D-NC

00 -
01 6 // 5 + 1 mehr, damit der Test negativ wird wenn der Wert stimmen könnte
02 =
03 SKP(-) // Wenn jetzt negativ, dann Sprung über das GOTO und nächster Test
04 GOTO
05 1
06 4
07 + // 1 dazu zählen
08 1
09 =
10 SKP(-) // Wenn jetzt positiv, dann Sprung zu 'Wert ist gleich 5'
11 GOTO
12 2
13 1
14 7 // Ab hier der Code für 'Wert ist ungleich 5'
15 7
16 7
17 R/S
18 GOTO
19 0
20 0
21 9 // Ab hier der Code für 'Wert ist gleich 5'
22 9
23 9
24 R/S
25 GOTO
26 0
27 0

Ihr seht, dass ich für diesen, eigentlich simplen, Vergleich, ungefähr 10 Schritte zusätzlich benötigt habe! Die gehen dann von den insgesamt nur 72 Schritten, die mir der Taschenrechner überhaupt nur für ein Programm zur Verfügung stellt, ab. Ihr könnt Euch wahrscheinlich nicht vorstellen, wie glücklich ich war, als ich den ersten Taschenrechner mit einem Befehl wie ‘X=Y?’ bekommen habe! Und der absolute Wahnsinn war dann natürlich BASIC, wo ich die Bedingungen mit ‘IF … THEN …’ einfach so aufschreiben konnte, wie ich sie mir dachte.

Aber es geht nicht nur um den begrenzten Speicher. Sondern auch darum, dass es mich jede Menge Gehirnschmalz gekostet hat, um die Bedingungen korrekt zu definieren.

Was kann der DM42 mehr?

Nachdem Ihr jetzt verstanden habt, warum das Programmieren auf einem der allerersten programmierbaren Taschenrechner so schwer war, werdet Ihr auch verstehen, was die nachfolgend aufgeführten Eigenschaften für enorme Vorteile brachten.

Labels

Anstatt bei Sprüngen direkt auf Schritte, bzw. beim DM42 kann man sogar schon von Zeilen sprechen, zu zeigen, ist es beim DM42 möglich Labels zu verwenden. Das sind alphanumerische Markierungen, die ich überall im Code platzieren kann. Sie können mit dem ‘GOTO’-Befehl direkt angesprungen werden. Dabei kann sogar zwischen lokalen alphanumerischen (A – J und a – e), lokalen 2-stelligen numerischen und globalen alphanumerischen (kleine und große Buchstaben, bis 7 Stellen) unterschieden werden! Es gibt sogar die indirekte Adressierung, bei der das aufzurufende Label in einer Variablen oder einem Register stehen kann!

Die Verwendung von Labels hat den enormen Vorteil, das ich mir beim Korrigieren von Programmen keinerlei Gedanken mehr um das durch Codeänderungen notwendige Anpassen von Sprungadressen machen musste!

Ein weiterer, nicht zu unterschätzender Vorteil, ist die Möglichkeit Labels mit alphanumerischen Bezeichnungen zu versehen. Da schon der HP-42S über 6000 Bytes und der DM42 sogar über 70000 Bytes frei zum programmieren hat, würde man ohne ‘sprechende’ Labels und Variablennamen im Programmcode hoffnungslos die Übersicht verlieren.

Indirekte Adressierung

Anstatt beim Ansprechen eines Labels oder Speicherregisters das Label oder Register direkt angeben zu müssen, kann der Name des Labels in einer Variablen oder die Nummer des Registers in einem anderen Register gespeichert werden. Nun wird beim Ansprechen dieses Register angegeben und der dort gespeicherte Wert als eigentliche Adresse verwendet. Das ist zum Beispiel gut, wenn ich automatisch eine Reihe von Registern bearbeiten will.

Schleifen

Neben den üblichen Methoden ein Stück des Codes mehrfach zu durchlaufen, unterstützt der HP42 so eine Art ‘for’-Schleifen. Die Funktionen dazu heißen ‘DSE’ (decrement; skip if less than or equal to) und ISG (increment; skip if greater than). Beide interpretieren eine Dezimalzahl in einer Variablen in der Form ‘ccccccc,fffii’ als Zähler (ccccccc), Endwert (fff) und Schrittweite (ii). Taucht eine der beiden Funktionen im Programmcode auf wird die passende Prüfung vorgenommen und falls wahr, der nächste Befehl übersprungen. Das heißt, der nächste Befehl sollte ein ‘GTO’ an den Anfang der Schleife sein.

Bedingungen

Wie schon beim Absatz über den PR 56 D-NC angedeutet, unterstützen modernere programmierbare Taschenrechner deutlich mehr als eine Vergleichsmöglichkeit. Beim DM42 ist alles enthalten, was das Herz begehrt. Das Register X kann mit 0 oder dem Register Y vergleichen werden und es stehen ‘gleich’ und ‘ungleich’, ‘kleiner’, ‘kleiner gleich’, ‘größer’, ‘größer gleich’ zur Verfügung. Das sollte reichen, jede gerade gedachte Bedingung, ohne sie umformen zu müssen, direkt zu prüfen.

Unterprogrammebenen

Der DM42 unterstützt bis zu 8 Unterprogrammebenen! Das macht es einfach ein Programm in viele Teilprogramme zu unterteilen oder sowieso oft verwendete Funktionen einmalig zu programmieren und anschließend in vielen anderen Programmen einfach wiederzuverwenden. Ich muss aber beim Programmieren von Unterprogrammen aufpassen, dass ich nicht Register verwende, die in anderen Unterprogrammen oder im Hauptprogramm verwendet werden.

Flags

Wenn ein Programm ein wenig komplizierter ist, als einfach nur eine Formel abzuarbeiten, kommt es oft vor, dass ich einen Status von ‘Irgendetwas’ festhalten will, um später im Programm auf ihn zu prüfen. In solchen Fällen nutze ich in modernen Programmiersprachen den ‘Boolean’-Datentyp. Beim PR 56 D-NC musste ich dazu ein ganzes Register ‘verbrauchen’. Ich speicherte 1 für True und 0 für False. Wenn ich den Status von zwei verschiedenen ‘Irgendetwas’ speichern will, benötige ich 2 Register oder ich denke mir einen mehr oder weniger tollen Code aus, um in einem Register 2 verschiedene ‘Irgendetwas’ speichern zu können. Beim DM42 könnte ich dazu die Bitfunktionen verwenden. Aber das ist gar nicht notwendig, weil der DM42 sogenannte Flags unterstützt, die genau für dieses Problem geschaffen worden sind. Ich kann Flags setzen (‘SF’), löschen (‘CF’) und abfragen (‘FS?’) und ‘FC?’).

Heutige Bedeutung

Ohne Frage ist der DM42 ein sehr guter Taschenrechner, der die an einen einfachen wissenschaftlichen Taschenrechner gestellten Aufgaben sehr genau lösen kann. Dabei können sogar komplexe Zahlen und Matrizen verwendet werden. Allerdings können Rechenausdrücke nur in UPN eingegeben werden. Dies und der recht hohe Preis sorgen dafür, dass der DM42 von niemandem gekauft wird, der gerade einen Taschenrechner für die Schule oder einfach nur zum Rechnen sucht.

Für die Schule

Angesichts moderner Taschenrechner wie dem TI-Nspire CX II-T CAS oder dem HP Prime mit ihren tollen, und im Falle des Prime sogar touchfähigen, Farbdisplays, sowie dem eingebauten CAS (Computer Algebra System), könnte es sein, das ein Taschenrechner wie der DM42 heutzutage relativ sinnlos ist. Ich kenne die beiden genannten Rechner nicht, meine aber gelesen zu haben, dass deren eingebaute Programmiersprachen heutzutage einer modernen Hochsprache ähnlich ist. Des weiteren denke ich, dass das Gesamtkonzept dieser Taschenrechner irgendeinem modernen pädagogischen Konzept folgt, anstatt einfach nur alles zu geben, was die aktuelle Technik her gibt. So wie es früher der HP-41C gemacht hat.

Eine nicht unerhebliche Schuld daran, trägt vermutlich das Schulsystem, da es mit dem technologischen Fortschritt, der Programmieren und CAS in Taschenrechnern ermöglichte, nicht Schritt halten konnte. Hier war eine grundsätzliche Modernisierung des Mathematik Lehrens notwendig, die aufgrund Dummheit oder Faulheit nicht erfolgt ist. Hier ist vermutlich die Chance auf eine gründliche Renovierung des Mathematikunterrichts gegeben gewesen, die vielleicht dazu geführt hätte, das mathematisches Wissen und Verständnis nicht von so vielen Menschen abgelehnt wird. Und sich damit heute eben mehr Menschen für MINT Fächer interessieren würden.

Wie moderne Helfer für den mathematischen Schulunterricht aber heute auch aussehen können, zeigt die faszinierende Photomath App. Ihr zeigt man mit Hilfe der Kamera einfach nur eine handgeschriebene Aufgabe und schon zeigt sie in einzelnen Schritten, wie man sie lösen kann. Mag sein, dass sie mathematisch noch nicht alles drauf hat, aber sie zeigt einen interessanten Weg für die Zukunft auf.

Für Ingenieure

Wie steht es mit der Eignung für Ingenieure? Ich denke dass diese Gruppe früher die Hauptabnehmer für programmierbare Taschenrechner waren. Anstatt Großrechnerzeit zu buchen und Programme auf Lochkarten zu stanzen, konnten sie mit dem eigenen oder in der Firma angeschafften programmierbaren Taschenrechner schnell komplizierte Rechnungen vollführen. In einer Zeit zwischen Einplatinen- und Homecomputern, noch vor den ersten PCs, konnten die programmierbaren Taschenrechner möglicherweise sinnvoller als Einplatinencomputer wie der KIM-1 oder der AIM-65 eingesetzt werden. Hatten sie doch oft eine bessere Anzeige und viele mathematische Funktionen fertig eingebaut.  Auch das Programmieren bedeutete im einfachsten Fall einfach nur, eine Rechnung im Programmiermodus, so wie beim normalen Rechnen, ein zu tippen. An der Stelle von variablen Werten einen Stopp-Befehl einzugeben und nach der Eingabe eines Wertes das Programm wieder zu starten.

Heutzutage dürften aber die meisten Formeln Bestandteil eines CAD Programms sein, welches beim Konstruieren automatisch dafür sorgt, das der Ingenieur keinen Fehler macht. Einen Taschenrechner benötigen Ingenieure nicht mehr.

Aber auch ein modernes kleines Notebook kann Mathematica ausführen bzw. Wolfram Alpha einfach über einen Browser aufrufen und ist damit jedem Taschenrechner bei weitem überlegen. Selbst als Open Source gibt es das schon in Form von Maxima und anderen Programmen. Sind Netbooks dann vielleicht die viel besseren programmierbaren Taschenrechner?

Vergleich mit dem TI-89

Ich habe mir vor ein paar Jahren für 25,- Euro auf eBay den 1998 erschienenen TI-89 gebraucht gekauft und ein wenig erforscht. Wenn meine Töchter in den letzten Jahren Hilfe für den Mathematik Unterricht benötigten, dann war es der auf dem Tisch herumliegende TI-89, der mir in allerlei mathematischen Fragestellungen geholfen hat. Das hat seine Gründe: Wer einmal schnell mit verschiedenen mathematischen Ausdrücken experimentieren möchte, will dies auf keinen Fall mit UPN machen! Denn dies bedeutet ja nur einen einzigen Ausdruck, der maximal in den 4 Registern gehalten werden kann. Wenn ich mich da vertippt habe und nicht mehr weiß in welchem Register ich gerade welchen Wert habe, kann ich gleich von Neuem anfangen.

Mit dem TI-89 kann ich mehrere Ausdrücke in einer Liste halten, die noch dazu in mathematischer Schreibwiese dargestellt werden. Das ermöglicht es Ausdrücke zu vergleichen und Fehler zu erkennen. Ich kann also schnell verschiedene Ausdrücke vergleichen und bei Bedarf aus einer Liste zur weiteren Verarbeitung verwenden. Dann ist mit Derive ein richtig gutes CAS direkt im Taschenrechner integriert! Ich kann Ausdrücke symbolisch vereinfachen, auflösen oder ableiten. Ich kann Teile von Ausdrücken herausnehmen und in andere Ausdrücke einbauen. Der TI-89 beinhaltet auch zahlreiche Grafikfunktionen, so dass ich mir Funktionen als Grafik anzeigen lassen kann und damit von Ausdrücken einen bildhaften Eindruck bekomme. Natürlich kann der TI-89 auch mit komplexen Zahlen und Matrizen umgehen.

Lediglich die Programmierung macht mir auf dem TI-89 nicht so viel Freude. Wobei ich nicht sicher bin, woran es liegt. Es ist ein wenig umständlicher, überhaupt in den Programmeditor zu kommen. Dort kann ich dann aber in einer halbwegs modernen, strukturierten Sprache programmieren. Das ist ja eigentlich eine gute Sache. Aber wenn ich die dann mit den Möglichkeiten einer modernen IDE vergleiche, ist es doch wieder umständlich.

Beim DM42 fühle ich mich im Programmiermodus wohler. Wahrscheinlich ist es aber nur die Nostalgie, die mich beim Ansehen der alten ‘Mnemonics’ im ‘PRGM’-Modus ergreift, Erinnerungen an vergangene Nächte hervorruft, in denen ich meinem Taschenrechner die letzten Geheimnisse entlockte und ich in mühevoller Auseinandersetzung mit meinem Code irgendwann mein Programm erfolgreich zum Laufen brachte, was immer ein großes Glücksgefühl in mir auslöste.

Die drei Musketiere – Einer für alle, alle für einen

Aus der Sicht der Taschenrechner Fans gibt es momentan mindestens 3 interessante Taschenrechner, die alle auf der Hardware des DM42 basieren:

Es sollte also meines Wissens nach möglich sein, auf der Hardware des DM42 auch die Firmware für den DM41X und den WP 43S zu flashen. Das Problem dabei sind die unterschiedlichen Tastaturen. Auch wenn der Rechner danach grundsätzlich in der Lage ist, als völlig anderer Taschenrechner zu agieren, so ist der Gebrauch doch praktisch unmöglich, da auf den Tasten jeweils unterschiedliche Funktionen liegen. Eine kleine Chance gibt es, wenn man sich zum einen ein Tastenoverlay für die Zweitfunktionen ausdruckt und auf den DM42 legt und zum anderen die Tasten selbst mit kleinen Aufklebern beklebt, die mit der richtigen Funktion beschriftet sind. Aber schön ist anders.

Warum ich mich für den DM42 entschieden habe

Dem Liebhaber alter Taschenrechner wird es momentan bei SwissMicros schwer gemacht, da es Nachbauten sowohl des alten HP-41CX, als auch des nicht ganz so alten HP-42S zu kaufen gibt. Für die Entscheidung zwischen den beiden Geräten sind darum ein paar Fakten nützlich.

Die für mich wesentlichen Unterschiede sind

  • Der DM41X besitzt spezielle Funktionen für den Umgang mit den vielen alten Software-Modulen des originalen HP-41C.
  • Die Nachbildung des originalen 16-Segment-Displays mit Hilfe des hochauflösenden Displays des DM41X.
  • Der große Geschwindigkeitsunterschied zwischen DM41X und DM42.

Letzteres ist vermutlich damit begründet, dass der DM41X den HP-41CX emuliert. Das heißt, auf dem DM41X befindet sich ein Programm, welches die Architektur des originalen HP-41CX nachmacht und darum auch in der Lage ist, den originalen Code auszuführen. Eine nicht real existierende Hardware bei Ausführung von Code per Software nachzumachen, kostet allerdings erheblich Zeit.

Der DM42 nutzt hingegen den von Thomas Okken in Form des Free42 entwickelten C-Code, der direkt auf dem DM42 ausgeführt werden kann. Damit ist letzterer erheblich schneller als der DM41X.

Ich schrieb ja in der Einleitung, das mir damals, bei meinem ersten programmierbaren Taschenrechner, vor allem Geschwindigkeit, Speicher und die fehlende Eigenschaft des Behaltens von eingegebenem Programmcode nach dem Ausschalten, die größten Makel waren. Alle diese Makel sind beim DM42 entfernt worden! Und hätte ich damals einen HP-41C gehabt, der 500 mal so schnell rechnet und so ein wundervolles Display besitzt – es ist nicht auszudenken, was ich damit alles hätte programmieren können…

Fazit

Ohne Zweifel ein solider kleiner Taschenrechner, mit einem kratzfesten, hochauflösenden und kontrastreichen Display, der sehr viel kann. Wer wirklich noch viel von Hand rechnet, ist mit dem Gerät bestens bedient. Auch wer einen interessanten Ausflug in die Vergangenheit der Programmierung machen möchte, kann mit dem Gerät viel Freude haben. Ich trage ihn gerne mit mir herum und stelle mir interessante Programmieraufgaben, egal wo ich gerade bin, während meine Frau Sudokus löst oder in Instagram stöbert.

Sonstiges

HP-42S Insiderwissen

Wer sich auf Hardwareebene tiefer gehend mit dem alten HP-42S beschäftigen möchte, sei auf diese japanische Webseite verwiesen. Dort gibt es Anleitungen, wie man mit einem höher taktenden Quarz die Geschwindigkeit verdoppeln oder mit einem anderen Speicherchip die Speicherkapazität erhöhen kann. Dort gibt es auch Reparaturanleitungen und zum ersten Mal habe ich dort davon gelesen, das es vielleicht möglich ist, den zu schwachen Kontrast des Displays zu erhöhen.

Auf Heise Telepolis:

Zuse und Turing: Der Draht des Mephistopheles

PDF Datei

Sechzig Jahre Computergeschichte – Die Architektur der Rechenmaschinen Z1 und Z3 von Raul Rojas

PDF Datei

How to Make Zuse’s Z3 a Universal Computer von Raul Rojas

 

 

6 Kommentare

  1. Hallo,
    schöner Artikel. Zwei Anmerkungen:
    1) Gerade Ingenieure brauchen Taschenrechner.
    Ich stehe häufiger noch “am Brett”, weil man da bei “großen Sachen” einfach schneller ist und mehr Übersicht hat.
    Oft “rechne ich etwas nach”, zur Kontrolle. Die “komplexen” Argumente in der polaren Notation (Versorschreibweise) sind un-be-zahl-bar.
    So einen Rechner nehme ich auch mit in die Werkstatt, wo kein Tablett überleben würde.
    2) CAS:
    Das will man in der Praxis nicht. Die Formel steht ja nicht auf dem Papier, sondern die Zusammenhänge zwischen den Werten sind im Kopf.
    Mit UPN sehe ich die Zwischenergebnisse. Und die will ich sehen.

    Ach, und noch etwas:
    Mit der aktuellen Softwareversion ist der Stack “nach oben offen”. Ein Segen für den, der auch einmal Zahlenkolonnen aufaddieren möchte oder eher: muß.
    Die haute ich beim HP-48 dann einfach nacheinander auf den Stack.
    Vor der Addition, jeweils dann mit ‘plus’, konnte ich jeden Wert nochmal sehen und ggfs. prüfen.
    Dieses Verhalten kann man beim DM 42 jetzt einschalten.

    Einen “HP Prime” habe ich mir gekauft und sofort wieder verschenkt. Und dann den DM 42 gekauft.

  2. Es heisst zwar “multiple exclamation marks are a sure sign of a diseased mind” (nach T. Pratchett) aber ich lege es hier mal als genuine Transliteration der inneren Freude aus 😉

    1. Das können zwar die meisten nicht nachvollziehen, aber wenn aus der sehr einfachen Grundlage von Conways Spiel des Lebens, durch den Einsatz der Vergleichsbedingung ein Programm entsteht, dass vielleicht sogar übermenschliche Intelligenz erzeugen könnte, finde ich 3 Ausrufezeichen angemessen.

      Was mich daran nur stört, ist, dass das ja von Menschen konstruiert wird und standardmäßig in Life kein Zufall integriert ist, der das zufällig erzeugen könnte.

      Aber die Möglichkeit an sich gibt einem auch schwer zu denken, ob nicht auch wir nur eine Simulation in jemand anderes Spielumgebung sind.

  3. Hallo, ich bin 1988 aus Versehen zum HP32s gekommen und ueberhaupt nicht damit klargekommen.
    Dann, Uni Dipl.Ing. im Zweitstudium, Beruf, Promotion und weiter viele Berufsjahre als MI Berechnungs-Ingenieur. Und dabei zum DM42 gekommen.
    Ich kann nur bestatigen, DM 42 simply the best.
    Noch ein heisser Tip wirklich fuer die Westentasche, der DM15 im Scheckkartenformat.
    Viele Gruesse

Schreibe einen Kommentar zu J. Heilingbrunner Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert