Joachim Breitner

Das Tiptoi-Projekt

Published 2020-07-16 in sections Deutsch, Tiptoi.

Der folgende Text ist kürzlich in Ausgabe 102 der Datenschleuder, dem Fachmagazin des Chaos Computer Clubs, erschienen. Wer ihn lieber auf Papier und mit weniger Tippfehlern lesen will, Interesse an den anderen Themen des Magazins hat oder einfach den CCC unterstützen will sollte erwägen, die Ausgabe zu bestellen, das Heft zu abonnieren oder gleich Mitglied im CCC zu werden. Vielen Dank an der Stelle an den Datenschleuder-Redakteur Philipp Matthias Schäfer für diese Gelegenheit und die Betreuung.


Mit dem tiptoi-Stift bespaßt Ravensburger seit einem Jahrzehnt erfolgreich Kinder im Alter von vier bis zehn, ganz wie geplant. Dass sie damit aber auch erfolgreich ausgewachsene Hacker bespaßen würden, die lieber eigene tiptoi-Werke kreieren, war vermutlich nicht vorgesehen. Doch wie kam es eigentlich dazu?

Der tiptoi-Stift ist ein grell-orangenes, leicht klobiges Gerät, mit dem man die vielen speziell dafür veröffentlichten Bücher, Spiele, Figuren etc. erkundet. Tippt man zum Beispiel die Kuh im Stall an, so hört man ein Muhen oder erfährt etwas Wissenswertes über die Kuh. Auch komplexere Interaktionen, bis hin zu kompletten Brettspielmechaniken, sind dabei möglich. Schnell stellt sich die Frage: Wie funktioniert das? Und dannn natürlich auch: kann ich das selber machen?

Der Tiptoi-Stift in Aktion -- hier schon mit der Monkey-Island-Adaption von Carsten Podszun.

Der Tiptoi-Stift in Aktion -- hier schon mit der Monkey-Island-Adaption von Carsten Podszun.

Getrieben von dieser Frage haben sich ein paar technisch Interessierte gefunden um die Funktionsweise des Stiftes zu reverse-engineeren und so die Werkzeuge zu schaffen, mit der jeder die Produkte von Ravensburger neu vertonen oder komplett neue Werke für den tiptoi erstellen kann. Wie man das selber macht ist in Handbüchern, Zeitschriftenartikeln und Videos beschrieben (siehe https://tttool.nomeata.de/). In diesem Artikel hier erzähle ich -- aus meiner persönlichen Perspektive -- wie dieses Projekt zu Stande kam, welche Hürden es zu nehmen gab und wo wir heute stehen.

Was davor geschah

Im Frühling 2013, mein Neffe ist gerade voll im tiptoi-Fieber, gehe ich auf erste Recherchen. Einiges über die Funktionsweise des Stiftes kann man sich selber erschließen: Die Bücher selbst enthalten keine Elektronik (auch keine RFID-Chips, wie manche erstmal vermuten), sondern sind mit einem feinen schwarzen Punktmuster überzogen, was man mit Lupe oder guten Augen erkennen kann, und das der Stift mit einer Kamera in der Spitze einliest. Zu jedem Produkt, das man kauft, lädt man eine .gme-Datei, etwa 10-100MB groß, auf den Stift, der sich als USB-Massenmedium ausgibt. Dies legt nahe, dass diese GME-Datei die Audiodateien und Spiellogik enthält. Bei jedem Produkt muss man erst ein dediziertes Anschaltfeld antippen; vermutlich lässt das den Stift wissen, welche Datei er laden muss.

Ich war natürlich nicht der erste, der sich so mit dem tiptoi-Stift beschäftigt hat, und fand weitere Informationen auf dem Blog „Geeky Thinking“ und im Mikrocontroller-Forum. Die erste Frage, die sich stellt, ist: kann man die Audio-Snippets in den GME-Dateien finden, um sie zu extrahieren oder gar zu ersetzen?

So hat Martin Oberhuber einfach mal dreist Ravensburger gefragt und erfahren:

Wir verwenden für die GME-Dateien ein proprietäres Format. Mir ist nicht bekannt, dass es möglich ist die eigentlichen Audiodaten (OGG Vorbis Komprimierung) daraus zu extrahieren

Auch wenn Ravensburger sicherlich nicht vorhatte, der Entschlüsselung des Formates Vorschub zu leisten, war das tatsächlich sehr hilfreich: Wie auch andere Binärformate beginnen OGG-Dateien immer mit den gleichen vier Bytes, den sogenannten magic bytes, hier OggS. Diese Bytefolge müssten ja demnach oft in der GME-Datei zu finden sein… war sie aber nicht. Zumindest nicht direkt, denn die ganze Datei ist „verschlüsselt“. Verschlüsselt nur in Anführungszeichen, denn es schien als ob jedes Byte der Audio-Dateien mit einem festen Wert ge-XOR-t wird (z.B. mit 0xAD - der Wert unterscheidet sich von GME-Datei zu GME-Datei). Diesen „Schlüssel“ kann man einfach durch Ausprobieren aller 256 möglichen Werte herausfinden: Der, der die meisten OggS-Strings in der Datei produziert ist wohl der richtige.

Nun wusste man, wo die Audio-Dateien liegen. Und man fand auch eine einfach gestrickte Tabelle in der Datei, in der alle Audio-Dateien mit Offset und Länge aufgeführt werden, so dass man sie gut einzeln extrahieren kann. Doch die Dateien waren irgendwie korrupt. Viktor fand noch heraus, dass wohl Nullbytes (0x00) nicht ge-XOR-t werden, und ich folgerte daraus, dass auch das Magic-Bytes selbst in Ruhe gelassen wird. Aber auch damit funktionierten die Audio-Dateien nicht, und für den Rest des Jahres passierte nichts mehr.

Ich hatte für meine Experimente ein bisschen Haskell-Code geschrieben, den ich auf dem Github-Bereich des Karlsruher entropia.de veröffentlichte.

Der Hahn macht Kuckuck

Das Projekt ruhte – bis kurz nach Weihnachten 2013. Jedes Jahr ist das eine spannende Zeit: Ein neuer Schwung tiptoi-Stifte schwappt in die Kinderzimmer, und die zugehörigen technikinteressierten Eltern haben ein paar Tage Zeit. Diese stießen nun auf mein GitHub-Projekt, fragten ob ich inzwischen weiter gekommen sei und schauten sich selber nochmal die Dateien an. Und endlich fand Matthias Weber den fehlenden Puzzlestein: Auch das Byte 0xFF sowie das Komplement des Schlüssels werden von der „Verschlüsselung“ in Ruhe gelassen! Damit ließen sich erstmal erfolgreich die Audio-Samples aus den GME-Dateien extrahieren und abspielen.

Die nächsten Tage waren spannend: Fünf Bastler, die sich nicht kannten, tauschten per E-Mail immer weitere Funde aus: Wir entdecken eine Art Tabelle, in der -- gemischt mit noch nicht verstandenen Steuerbefehlen -- die Audiodateien referenziert werden. Da wir nun die Audio-Dateien anhören konnten, konnten wir abschätzen, zu welcher Stelle im tiptoi-Buch die entsprechende Befehle gehören, und es entstanden erste Theorien, was die Steuerbefehle (Audio abspielen, Arithmetik, Sprünge) bedeuten und wie sie aufgebaut sind -- insbesondere Ulrich Sibiller ist hier viel zu verdanken. Ich selbst hatte zu der Zeit keine tiptoi-Hardware zur Hand und arbeitete bloß mit dem Hexeditor und den Beobachtungen der anderen. Die neusten Theorien baute ich stets in den Haskell-Code ein. Bisweilen nahmen diese Theorien absurde Züge an, die mit allerlei Sonderfällen und -regeln versuchten, sich den Beobachtungen anzupassen. Analogien zu den Epizykel der Astonomie vor der heliozentrischen Wende dürfen gezogen werden.

Aber bald gab es Erfolge zu vermelden. Am 5.1.2014 meldete Björn Grothkast, dass er erfolgreich eine Audio-Datei austauschen konnte, so dass der Hahn nun Kuckuck krähte. Eine Woche später war das Befehlsformat fast vollständig verstanden. Am 24.1. konnten wir erstmals eine funktionierende GME-Datei erzeugen und Anfang Februar habe ich meinem Neffen den tiptoi-Weltatlas mit Familiengeschichten neu vertont!

Muster gültig?

Die tiptoi-Produkte umzuprogrammieren macht schon Spaß, aber das nächste Ziel war natürlich, auch eigene Produkte zu gestalten. An sich klingt das einfach: Man gestaltet sein Buch, legt das OID-Muster aus feinen schwarzen Punkten darüber, druckt es aus, und erstellt eine dazu gehörigen GME-Datei.

Die Muster selbst sind nicht sehr kompliziert: alle Millimeter wiederholt sich ein Quadrat bestehend aus 4×4 Punkten. Sieben dieser 16 Punkte benutzt der Stift um sich zu orientieren, die anderen 9 sind jeweils in eine der vier Diagonalen verschoben, was somit – abzüglich 2 Bit für eine Checksumme – eine 16-Bit-Zahl kodiert. Bereits im Januar steuerte Tobias Bäumer ein (in JavaScript geschriebenes) Werkzeug bei, das diese Muster dekodiert und auch entsprechende Bilddateien erzeugen kann.

Ein OID-Muster. Die obere Zeile und linke Spalte dienen zur Orientierung, der Rest kodiert eine 16-Bit-Zahl

Ein OID-Muster. Die obere Zeile und linke Spalte dienen zur Orientierung, der Rest kodiert eine 16-Bit-Zahl

Diese werden sogar vom Stift erkannt, wenn man sie auf einem guten Laserdrucker ausdruckt! Allerdings liest der Stift eine andere Zahl aus als das Muster selbst kodiert. Der Stift unterstützt dankenswerterweise eine Art Debug-Modus, in dem er stets den eingelesenen Code -- auf Chinesisch -- vorliest. In mühsamer Kleinarbeit begannen nun @Ol-li, Patrick Spendrin und andere die OID-Muster unter der Lupe zu dekodieren, sich vom Stift die tatsächlich gelesene Zahl vorlesen zu lassen, und das in einer Tabelle zu sammeln. Leider ohne eine Regelmäßigkeit dahinter zu erkennen.

Massenmedien

Davon ließ Carsten Podszun sich nicht abschrecken und veröffentlichte im September 2014 ein Video-Tutorial auf YouTube, in dem er beschrieb, wie er eine Seite eines eigenen tiptoi-Buches komplett selber gestaltet hatte: von der Bildbearbeitung (Sättigung raus!), der Mustergenerierung (10×10 Pixel pro Muster), dem Druck (Farben und Muster gentrennt drucken) und der Programmierung mittels meines tttool.

So kam wieder neuer Schwung ins Projekt. Das tttool lernte die Muster als PNG- oder SVG-Datei auszugeben und dabei – zumindest für die uns bekannten Codes – zwischen den vom tiptoi-Stift und den im Muster kodierten Zahlen umzurechnen.

Inspiriert durch eine Anfrage vom Fablab Karlsruhe, ob Carsten und ich nicht dort einen Workshop anbieten wollten, spielten wir mit der Idee, einen Artikel über das tiptoi-Basteln zu schreiben. Wir erwägten damals tatsächlich die Datenschleuder, zielten dann aber doch nicht ganz so hoch und schrieben einen Text für die c't.

Weitere Publicity bekam das Projekt auf der Gulaschprogrammiernacht 2015 in Karlsruhe, auf der ich einen Vortrag gehalten und ein Workshop angeboten habe. Der Vortrag – eigentlich für die etwa 40 Technikaffinen im Publikum gedacht – wurde wie beim CCC üblich auch online gestellt, und inzwischen allein auf YouTube über 250.000 mal angeschaut. Wenn sich auch nur 1% davon inspirieren ließ, etwas mit dem tttool zu basteln, sind das 2500 Kinder, denen meine Bastelei Freude bereitet hat. Das ist ein sehr schöner und motivierender Gedanke.

Reifeprozess

Sehr hilfreich war auch dass Patrick Frey den “OidProducer” fand, ein chinesische Programm das OID-Muster für verschiedene Systeme erstellt. Darin fand er vollständige Tabelle, die der im Muster kodierte Zahl den vom Stift erkanntem Wert zuordnet. So müssen sich die Bastler mit dieser Komplikation nun nicht mehr herumschlagen.

Auch sonst wurde das Basteln mit dem tttool immer komfortabler: Um die Entwicklung zu beschleunigen kann das tttool die benötigten Audiodateien auch erstmal selbst per Text-to-Speech zu erzeugen, und einen übersichtlichen Bogen mit allen Felden eines Projekts erstellen. Mit ttaudio von Andreas Grimme und ttmp32gme von @thawn entstanden grafische Anwendungen, die auf das tttool aufbauen. Wir richteten eine Mailingliste ein, auf der sich über Tricks, Probleme und Projekte ausgetauscht wird. Eine stetig wachsende Galerie mit Erfolgsgeschichten schmückt die tttool-Webseite, und ein unfassendes Handbuch entstand.

Haskell?

Die Wahl von Haskell als Programmiersprache war eher dem Zufall geschuldet – es war einfach das geschickteste für meine ersten Experimente. Anfangs war ich selbst noch positiv überrascht, wie gut man mit Haskell auch binäre Daten verarbeiten kann und wie schnell ich neue Erkenntnisse meiner Mitstreiter umsetzen konnte. Inzwischen bin ich positiv überrascht, wie zuverlässig das Programm jetzt schon mehrere Jahre arbeitet, und es werden fast keine Bugs gemeldet, die an Programmierfehlern liegen. Auch die Plattformunabhängigkeit ist hervorragend: Selbst nur auf Linux unterwegs, konnte ich trotzdem auch Windows-Benutzer versorgen (anfangs per WINE, inzwischen per Cross-Compilation unter Nix). Inzwischen bestehen die tttool-Releases aus einer einzelnen ZIP-Datei, die unter Windows, OSX und (statisch gelinkt) allen Linuxen funktioniert – und das mit eingebautem Support für die Erzeugung von PNG, SVG und PDF.

Andererseits bedeutete die Wahl von Haskell sicherlich auch, dass ich weniger Code-Contributions bekommen habe und manches selber machen musste (oder durfte). Insgesamt habe ich es nie bereut, hier Haskell benutzt zu haben.

Darf man das denn?

Die wahrscheinlich häufigste Frage zu dem Projekt ist sicherlich: Darf ich das? Ist das legal? Bekomme ich Ärger von Ravensburger? Gibt es da Patente? Teilweise berichteten mir Leute nur in privaten Mails von ihren Projekten, statt sie auf der Mailingliste mit allen zu teilen.

Natürlich bin ich kein Anwalt und habe mich auch nur auf mein Bauchgefühl verlassen, aber meine Devise dabei war immer: wenn man niemanden stört, bekommt man auch kein Ärger. Welche Motivation sollte Ravensburger denn haben, Hobbyisten zu belangen? Das macht doch schon aus Publicity-Gründen keinen Sinn.

Tatsächlich wurden Mitarbeiter von Ravensburger auf das Projekt aufmerksam, und luden mich Anfang 2015 auf die Nürnberger Spielemesse ein. Für einen Brettspieler wie mich ist es natürlich ein schönes Schmankerl, diese für die Öffentlichkeit nicht zugängliche Fachmesse zu besuchen. Dort traf ich mich mit zwei Redakteuren (nicht Anwälten!), die sich sehr dafür interessierten, was wir da da so machen. Sie wollten wohl prüfen, ob Ravensburgers Interessen irgendwie berührt werden. Dies scheint nicht der Fall zu sein, und ich verlies das Treffen mit dem guten Gefühl, dass wir wohl ruhig so weiter machen können, solange nichts ruf- oder geschäftsschädigendes damit angestellt wird. Tatkräftige Hilfe, etwa mehr technische Information, ist von Ravensburger allerdings auch nicht zu erwarten.

Carston Podszun hatte mit seinen Basteleien ebenfalls die Aufmerksamkeit von Ravensburger geweckt und berichtet auch von stets wohlwollendem Interesse. Ich hoffe diese Erfahrungen nehmen einigen Bastlern ihre Sorge.

Um auch die letzten Sorgen zu nehmen wäre eine Einschätzung von jemand mit entsprechender Ahnung und Ausbildung sehr interessent. Kommentare bitte als Leserbrief an die Datenschleuder-Redaktion!

Ausblick

Die letzten Jahre ist es etwas ruhiger um das Projekt geworden. Das Dateiformat ist soweit entschlüsselt, dass auch komplexe Projekte umgesetzt werden können, etwa ein Taschenrechner, Geburtags-Schnitzeljagden oder ein Monkey-Island-Spiel zum Ausschneiden und Antipppen, und die Software wird immer wieder mal leicht verbessert.

Doch es gibt noch offene Baustellen: Manche GME-Dateien von Ravensburger enthalten ARM-Binärcode, der auf dem Stift direkt ausgeführt wird. Wenn wir verstehen würden, wie man solchen korrekt erzeugt und die Hardware anspricht, könnte man deutlich aufwendigere Logiken umsetzen. Oder vielleicht kann man auch die komplette Firmware des Stiftes durch eine eigene ersetzen – erste Erfolge, den tiptoi-Stift zu Flashen und eigenen ARM-Code auszuführen, sind vielversprechend und werden von Matthias Weber im snowbirdopter-Projekt vorangetrieben. Wem es nach diesem Text unter den Nägeln juckt, mal wieder ein bischen Reverse-Engineering zu betreiben, darf uns hier gerne unter die Arme greifen.

Selber basteln!

Lust auf eigene Basteleien? Auf https://tttool.entropia.de/ findest du die Galerie mit existierenden Projekten, das tttool zum Herunterladen, das „tttool-Handbuch“ sowie Links zu Videos und Magazinartikeln. Auf der tiptoi-Mailingliste helfen wir gerne weiter und freuen uns über Erfolgsberichte.

Comments

Have something to say? You can post a comment by sending an e-Mail to me at <mail@joachim-breitner.de>, and I will include it here.