 Der Rick wird euch erzählen, wie man mit ganz ganz wenig Witt und spielt irgendwelche Leite hier Chancen Ayo. Das von dort kommt das her, das verwendet eine Assembler Variante, die er hardwaremäßig nachgebaut hat und er hat um ganz ganz wenig Geld ein cooles Ding gebaut mit dem Kindern und Jugendlichen ganz einfach Assembler in seinen Basisstrukturen beibringern kann. Es soll sehr viel Spaß machen. Was ich mich so erinnere an Assembler, weil mir das nicht so spaßig, aber das mag ja verschieden sein. Anyhow, here we go, Rick, your stage. Moin, this is my talk, Chancen Ayo in real life, in dem ich mein aktuelles Projekt, das MC5000 Defkit vorstelle. Das ist ein elektronisches Puzzlespiel, bestehend aus einer Desktop-Applikation und einer dazu gehörigen Platine und in dem Spiel muss man Aufgaben in einer einfachen Assemblersprache lösen. Kurz zu mir, ich bastel seit ca. 15 Jahren innerhalb und außerhalb von Makerspaces an diversen Projekten und ja, hier sind ein paar Sachen, die ich in den letzten fünf Jahren gebaut habe. Zu dem aktuellen Projekt bin ich durch das Spiel Chancen Ayo von Zektronics aus 2016 gekommen. In dem Spiel ist man ein Elektronik-Ingenieur, der neu nach China, nach Chancen gekommen ist und in einer Firma für billige Hardware arbeitet. Und man bekommt da per E-Mail Aufträge wie Baume eine Fake Security Kamera mit zwei blinkenden LEDs und hat dann im Spiel ein Cut-Programm, in dem man ein oder mehrere Mikrocontroller und verschiedene andere Komponenten auf die Arbeitsfläche ziehen kann, kann dort Eingänge und Ausgänge mit Leiterbaren verbinden und muss dann in einer Pseudo-Assemblersprache Code direkt auf die Mikrocontroller schreiben, um die Aufgabe zu lösen. Man lässt dann ein Simulator laufen und wenn die Outputs den Vorgaben entsprechen, hat man das Level geschafft und bekommt eine schwerere Aufgabe. Die gesamte Dokumentation in dem Spiel ist komplett in der Form von Data Sheets, so wie sie auch bei elektronischen Komponenten vorkommen. Für die späteren Level sind die Data Sheets dann teilweise auch in chinesisch für einzelne Komponenten, dass man selber herausfinden muss, was die Komponenten überhaupt macht oder wie man sie benutzt. Es gibt zwei verschiedene Typen von Mikrocontrollern in dem Spiel, den MC4000 und MC6000, die sich unterscheiden durch die Anzahl der Programmzeilen. Also der 4000 kann nur neun Programmzeilen, woin gegen der 6000 mehr kann und der hat auch ein Register mehr, nämlich zwei, und zwei Pins mehr. Es gibt zwei verschiedene Arten von Pins an den Kontrollern, das sind SimpleIO und Exbus. SimpleIO ist wie ein Analogaport, dort kann man ein Wehr zwischen 0 und 100 setzen und das entspricht dem Signalpegel, der dort anliegt. Oder wenn ich Pin als Input benutze, dann bekomme ich ein Wehr zwischen 0 und 100 raus. Die kann ich aber jeder Zeit setzen und abfragen unabhängig davon, was an dem Pin gerade passiert. Und dann gibt es noch Exbus Pins, das ist mir wie eine serielle Schnittstelle. Dort kann ich Werte zwischen minus 999 und plus 999 schicken, aber dort muss auf der anderen Seite immer ein Gerät sein, was die Daten entgegen nimmt. Ist das nicht der Fall? Dann blockiert der Code an der Stelle, wo ich meinen Wert senden will, solange bis den jemand abholt. Die Assemblersprache ist relativ einfach gehalten. Es gibt nur 15 Instruktionen und ich kann einfache mathematische Berechnungen machen, mithilfe des Accumulator Registers und einfache Abfragen, wie ist A größer als B machen. In Hardware habe ich das Ganze nachgebaut, indem ich ein USB-Syrile Interface für die Programmierung gemacht habe. Ich habe eine Firma gebaut für einen sehr billigen chinesischen Controller, den Pedaug PFS173. Davon sind zwei drauf, das sind meine MC5000 CPUs. Ich kann mich beide über die serielle Schnittstelle programmieren und ich habe ein paar Input und Output Peripherie Geräte auf der Platine und diese werden mit den CPUs durch einfache Jumper-Wires verbunden. Das entspricht dann den Verbindungen, die man in Chansen-IO in dem CUT-Programm macht. Das Ziel bei diesem Projekt war, diese Platine möglichst billig zu bauen und die kann jetzt komplett bestückt bei einem chinesischen Platinproduzenten bestellt werden, wenn man 50 Stück bestellt, kostet die 6,50 Euro pro Platine inklusive Versand. Die Desktop-App ist in Qt5 geschrieben, ist cross-platform, läuft unter Windows MacOS Linux und muss nicht installiert werden, ist für alle Plattformen so gepackt, dass sie einfach nur runtergeladen werden kann und ausgeführt werden muss. Und jetzt zeige ich euch mal, wie das Ganze funktioniert. Das ist die Defkit-Platine. Hier sind die beiden Mikrocontroller, die MC5000, MC1 und MCO2 und die haben jeweils 4 IO-Pens, 2 Simple IO, P0 und P1 und 2 Exbus, X0 und X1. Hier sind die Anschlüsse für die Output-Peripherie Geräte, das Display, das ist ein dreistellen Siebensegment-Display, ist ein Exbus-Peripherie Gerät, der Wasser, auf dem ich Töne abspielen kann, ist ebenfalls Exbus. Dann habe ich 3 Simple IO Outputs, eine Rot LED, eine Gelbe LED und eine Grüne LED und als Inputs habe ich 2 Buttons, ein Temperatursensor und ein Lichtsensor. Das hier ist die Desktop-Applikation. Hier habe ich zwei Editor-Fenster, wo ich den Code für die beiden Mikrocontroller eingeben kann. Hier kann ich den Code für beide Mikrocontroller in der Datei abspeichern und wieder öffnen. Manual ist ein Link zur Handbuch auf GitHub und mit Upload speichere ich den eingegebenen Code auf die Mikrocontroller. Hier unten ist eine Anzeige für die Register. Die Register sind zum Programmstart immer mit Null initialisiert und werden hier unten, wenn ein Programm läuft, viermal die Sekunde abgedatet. Das rote Feld hier zeigt an, ob im Moment gerade ein Programm auf den Mikrocontroller geladen ist. Wenn ein, wenn eins drauf ist, dann wird das grün. Ich kann jetzt hier Assembler Befehle eingeben, um zum Beispiel den Move Befehl. Ich schreibe zum Beispiel in 42, in das Register drückt auf Upload. Das hier wird grün und ich habe eine 42 hier drin. Genauso kann ich etwas in das ACC Register reinschreiben und jetzt ist hier eine 23 drin. Das gleiche funktioniert natürlich auch für den anderen Mikrocontroller, also hat er auch Werte gesetzt. Wenn kein Code drin ist und nicht auf Upload drückt, dann wird das Programm wieder gelöscht, was drin ist. Jetzt verbinde ich mal einen Button mit P0 vom Mikrocontroller 1 und schreibe den Wert, der in P0 ist, in mein ACC Register rein. Drückt auf Upload, das Programm ist hochgeladen, ACC zeigt aber Null an. Wenn ich jetzt den Button drücke, geht ACC auf 100, also das Programm läuft im Loop und fragt halt ständig P0 ab, schreibt das in das Register rein und die Buttons funktionieren so, dass sie einfach den Output auf 5V setzen und hier in der Hardware Version ist der Wert zwischen 0 und 100 einfach eine Spannung zwischen 0 und 5V. Deswegen wenn ich hier drauf drücke, geht er auf 100. Jetzt mache ich noch eine zweite Verbindung und verbinde P1 mit der Roten LED und jetzt schreibe ich mein ACC Register in P1, na das Hoch. Wenn ich jetzt den Knopf drücke, dann geht die rote LED an, weil das ACC Register auf 100 gesetzt wird und das dann an den P1 geschrieben wird und der die LED leuchtend ist. Das ist jetzt natürlich ein bisschen umständlich, genauso könnte ich das direkt miteinander verbinden, na das wieder hoch, drückt den Knopf, passiert genau das Leiche. Das ist Simplio, Xbox funktioniert ähnlich, ich kann zum Beispiel den Wert von P0, von wo mein Button angeschlossen ist, jetzt an X0 ausgeben und verbinde X0 mit dem Display. Das Display zeigt einfach das an was es über den Xbox gesendet bekommt. Wenn ich das jetzt hochlade und den Knopf drücke, dann zeigt das Display, sieht man vielleicht auf dem Bildschirm ein bisschen schlecht, denn echt leuchtet es viel heller, aber zeigt dann 100 an. Genau, das ist der Xbox. Den Xbox kann ich auch nehmen, um zwischen zwei Mikrocontrollern zu kommunizieren. Ich nehme zum Beispiel X1 und verbinde das mit X0 am zweiten Mikrocontroller und jetzt schreibe ich P0 auf X1 und am zweiten Mikrocontroller, da ich den Dort mit X0 verbunden habe, nehme ich den Wert von X0 und schreibe ihn in mein DataRegister rein. Lad das hoch, wenn ich jetzt den Knopf drücke, dann sieht man hier unten, am DataRegister ist er auf 100 gesetzt, weil er den Wert von dem ersten Mikrocontroller über den Xbox übertragen bekommt. Wenn ich ihn loslasse, dann ist er auf 0. Ein Unterschied hier zum Shenzhen I.O. ist beim Shenzhen I.O. muss man zwingend irgendeinen Sleep drin haben, d.h. der Sleep-Befehl wartet einfach über gewisse Zeit-Einheiten. Bei mir ist das so, dass eine Zeit-Einheit in 100 Millisekunden, d.h. wenn ich hier einen Sleep von 10 einbaue, dann wartet er an dieser Zeile eine Sekunde. Jetzt gibt es teilweise eine leichte Verzögerung, wenn ich den Knopf drücke, weil die Verzögerung von einer Sekunde drin ist. Wahrscheinlich sieht man es besser, wenn ich da fünf Sekunden draus mache. Drücke jetzt den Knopf, jetzt dauert es eine Zeit und jetzt ist Data auf 100 und jetzt hängt er in dieser Zeit für fünf Sekunden. Dann kommt er wieder in die. P0 ist 0, schreibt das rüber und dann wird es erst resetted. Genauso kann ich etwas an den Buzzer schicken. Der Buzzer funktioniert so, dass der Werte entgegen nimmt zwischen 1 und 75 und das steigende Tonhöhen sind. Da können wir jetzt ein mathematisches Feature benutzen, z.B. add. Add1 heißt Rechner 1 auf ACC-Register auf. Da das immer mit 0 initialisiert wird, wenn ich das jetzt hoch lade, sieht man, dass ACC sofort auf 999 geht. Das ist, weil der Code relativ schnell ausgeführt wird, ohne dass ich ein Sleep drin habe. Wenn ich ein Sleep von 1 hinzufüge, das wieder hoch lade, sieht man hier, dass ACC langsam hoch geht. Tickt langsamer. Er zählt langsam von 1 hoch und diesen Wert kann ich jetzt an mein X0 übertragen. Dann sieht man es hier auf dem Display, wie er hochzählt. Wenn ich das Ganze jetzt auf dem Buzzer stecke, dann hören wir Folgendes. Damit kann man natürlich auch dann Melodien spielen, z.B. Kommen wir zu vergleichen. Jetzt ist es ja hier so, dass der ACC Wert immer hochgezählt wird und ich kann jetzt etwas machen, wie wenn ein Sleep ein, das nicht so schnell läuft, teq testet auf Gleichhalt, test equal und dann schauen wir auf ACC, sagen wir mal 50 ist. Und nach einem solchen Test kann ich weitere Zeilen mit einem Plus davor versehen. Das heißt, dann werden diese Zeilen nur ausgeführt, wenn diese Zeile wahr ist, also wenn ACC genau 50 ist. Und Zeilen, die ich mit einem Minus präfixe, die werden ausgeführt, wenn das falsch ist. Und wenn 50 ist, dann habe ich ja noch mein X1 mit X0 auf dem zweiten Controller verbunden. Das heißt, dann schicke ich einfach mal eine 23 auf X1. Und die zweite Kontrolle hat ja sowieso noch drin, dass er X0 in dat rein schreibt. Jetzt leide ich das hoch. Jetzt sehen wir, der ACC steigt an und sobald er bei 50 ist, wird diese Zeile ausgeführt und eine 23 wird rübergeschickt und hier im Data Register, zack, ist jetzt eine 23. So auf diese Art und Weise kann man jetzt eine ganze Menge Funktionalität implementieren. Und Sinn des Spieles ist Aufgaben, wie diese hier zu lösen. Dabei soll ich eine Ampelschaltung bauen. Die Ampel ist rot und dann kommt ein Fußgänger an, drückt einen Knopf und dann soll die Ampel über Geld nach Grün gehen. Der Fußgänger zeigt die Straße zu bequeren und dann wird die Ampel wieder rot. Außerdem soll in dem Moment, wo der Knopf gedrückt wird, noch ein Countdown von 9 auf 0 ziehen. Um die Aufgabe zu lösen, mache ich jetzt noch ein paar mehr Verbindungen. Ich verbinde noch die gelbe LED mit P1 auf dem zweiten Controller, die grüne mit P0, weil jeder Controller nur zwei Simple-Iopins hat. Ich kann Simple-Io nur mit Simple-Io verbinden. Das heißt, ich benutze hier den zweiten Controller als eine Art Port Expander und der Rest reicht eigentlich so. Das Programm habe ich schon geschrieben. Das ist jetzt ein bisschen komplexer und hier sind auch Labels drin. Das habe ich bisher noch nicht gezeigt. Man kann an jeder Stelle im Code solche Labels einfügen und dann mit dem Jump-Befil an die Stelle des Labels springen. Jetzt lad ich das Ganze hoch und wenn ich jetzt den Knopf drücke, dann zählt der Timer runter auf 0, dann wird die Ampel grün. Ich kann schneller über die Straße laufen und die Ampel wird wieder rot. Wenn wir das nochmal machen, Timer zählt runter auf 0, Ampel wird grün, ich gehe über die Straße, Ampel wird wieder rot. Das heißt, damit wäre die Aufgabe gelöst und im nächsten Level müsste ich dann noch zum Beispiel ein Piepen hinzufügen in dem Moment, wo die Ampel grün ist. Ich habe mit dem Projekt im letzten Jahr angefangen, nachdem ich mich mit den Pedaug Microcontroller beschäftigt habe. Das sind sehr, sehr günstige chinesische Microcontroller, die allerdings auch nicht besonders viel können. Aber im letzten Jahr kam ein Open Source Toolchain dafür raus. Vorher gab es nur properitäre Tools vom Hersteller und einen properitären Programmer, den man sich kaufen musste. Jetzt ist das aber unterstützt vom SDCC Compiler seit der Version 4 und es gibt ein Open Hardware Programmer dafür, den sich jeder nachbauen kann. Ich habe mir also so ein Programmer besorgt und eine ganze Menge von den Microcontrollern und bin ich damit rumgespielt und geschaut, was ich damit machen kann. Und gerade als ich mich näher mit den Data Sheets von diesem Hersteller beschäftigt habe, hat mich das sehr an Chans and IO erinnert und da bin ich auf die Idee gekommen, vielleicht könnte man die Dinger benutzen, um das Ganze in Hardware nachzubauen. Der Prozessor, der da am besten geeignet war, war dann der PFS 173, weil er ADC hat und auf denselben Pins, die der ADC hat, den ich benutzen kann für die Simpler Oports, auch ein PWM Output hat. Und er hat zwar keine Uratschnittstelle, aber er hat einen Pin, der interupt hat. Den kann man wunderbar benutzen für das Empfangen auf der seriellen Schnittstelle und dann gibt es einen Pin, der Open Drain ist, das heißt der ist quasi nur schaltbar gegen Ground, aber wenn der auf High ist, dann ist er sozusagen unbeschaltet und den kann man wunderbar nutzen für das Ansprechen von mehreren Controllern über einen seriellen Bus, weil ansonsten beim Senden, die sich gegenseitig stören würden, aber mit so einem Open Drain Port funktioniert das ganz wunderbar, dass solange nur einer zur Zeit sendet, ich beliebig viele Controller an einen seriellen Bus hängen kann. Für den Simpler IO habe ich dann an den beiden Pins, die einen ADC dran haben und einen internen PWM Generator, habe ich ein Lowpass Filter angebaut, was eigentlich nur ein Widerstand und ein Kompensator ist und dadurch kann ich mit einem hochfrequenten PWM Signal eine Spannung erzeugen am Ausgang. Das wird benutzt, wenn ich ein Signal auf ein Simpler IO Port schreibe, wenn ich den empfange, dann wird der Pin einfach umgeschaltet auf den ADC und ich messe die Spannung, die dort anliegt. Das hat für Simpler IO wunderbar funktioniert. Xbus war ein bisschen komplizierter, da es dort ein Signal geben muss, dass der Sender gerade bereit ist, Daten zu senden und der Empfänger muss dann sagen, ich möchte auch gerade Daten empfangen. So ist der Xbus einfach in Shenzhen IO implementiert. Dafür habe ich ein Feature benutzt, das der PFS 173 auf zwei Pinzen internen Pull-Up hat. Das heißt, ich kann den Pin als Input schalten, aber trotzdem den Pull-Up benutzen, um die Leitung hoch oder runter hoch zu ziehen und mit einem externen Pull-Up wird die dann runtergezogen, wenn der intern nicht geschaltet ist. Das benutze ich, um zwischen zwei Controllern zu signalisieren, ich bin jetzt bereit, Daten zu senden. Der andere Tipp sieht, dass die Leitung hochgezogen ist, also ist der Sender sendebereit, zieht dann die Leitung selber runter, indem er sich als Output schaltet und schaltet dann wieder als Input und der Empfänger schaltet um und sende dann 11 Bits Daten raus, die ich brauche, um Werte von minus 999 bis plus 999 zu übertragen. Das funktioniert allerdings, dadurch, dass die kein besonders gutes Timing haben, die Chips, sondern nur einen internen Oscillator, ist das relativ langsam. Das heißt, Xbus Transfer dauert ungefähr 50 Millisekunden, so wie es im Moment implementiert ist. Reicht aber in den meisten Fällen vollkommen aus und ist eigentlich genug, um die Aufgaben, die ich damit machen möchte, zu erledigen. Die Firmware waren ein ziemlicher Kampf aufgrund des geringen Speichers. Ich brauche schon mal 65 Bits, um die 14-Zahlen-Assembler-Code im Ramm zu speichern, die übertragen werden und der Rest ging mir ständig aus. Sehr geholfen hat da das Update auf den SCCC Compiler 4.1, weil da ein paar Sachen für die Badau-Architektur optimiert wurden, die gerade bei Funktionsaufrufen nicht mehr so viel Speicher verschwendet haben. Außerdem habe ich relativ viel darüber gelernt, wann man Funktionen inlayen sollte und wann nicht, damit sie nicht so viel Speicher belegen. Da ist der SCCC Compiler leider nicht sehr gut darin, dasselbe rauszufinden. Um den Assembler-Code aus dem Editor in die 65 Bits zu bekommen, mache ich folgendes. Ich nehme ein Kommando wie Move und benutze die obersten 6 Bits, um das in einem Beid zu probieren. Da es ja nur 15 Instructions gibt, reicht das vollkommen aus. Wenn es Zeilen gibt mit einem Plus und Minus davor, dann bedeutet das ja, dass die nur ausgeführt werden, wenn vorher ein Test Kommando true oder false war. Dann encode ich dieses Plus oder Minus in dasselbe Beid in die letzten beiden Bits, so dass egal ob ich eine Zeile von Plus vor ist oder nicht, verbraucht im Mikrocontroller nicht mehr Speicher. Um die Parameter sind immer fest, das heißt, ein Move Kommando hat immer zwei Parameter und der erste Parameter kann entweder ein Integer sein oder ein Register. Der zweite Parameter kann immer nur ein Register sein. Für Parameter, die Register oder ein Integer sein können, nämlich 16 Bits. Für einen Parameter, der nur ein Register sein kann, brauche ich nur 8 Bits. Das heißt, eine Zeile wie Move 42 P0 brauche ich 4 Bits im Speicher und ich habe dann in der Firmware einen Counter, der darauf zeigt, wo ich gerade bin in meinem Program Code und springe dann bei einem Move Befehl entsprechend drei Weis weiter, um zum nächsten Befehl zu kommen, wenn ich den abgearbeitet habe. Und dadurch passen die 14 Zeilen Assembler Code auf jeden Fall in meine 65 Byte Memory. Labels waren auch ein bisschen knifflig. Wenn man Label einträgt, dann pas ich einmal den kompletten Assembler Code vorher, hol alle Labels raus, was Strings, Info und Doppelpunkte am Ende steht und nummerier die durch, gibt denen also eine Nummer von 1 bis 255 und codiere dem Code, dass ich davor ein extra Kommando habe, was es eigentlich nicht gibt. Was heißt jetzt kommt Label und danach dann den Index vom Label und wenn ein Jump Befehl kommt und ich zu einem Label springen soll, dann gehe ich einmal den ganzen Programm Code durch, such nach dem Label Marker und schaue, ob danach der Index meines Labels ist und dann springe ich einfach eine Programmzeile dahinter. Das verbraucht dann auch kaum Speicher. Ein Trick, den man machen kann im Programm Code ist, man kann Label auf die gleiche Zeile schreiben wie weiteren Programm Code. Das heißt, ich kann sowas schreiben wie Foo, Doppelpunk, Move, 42, P0. Das habe ich so eingebaut, weil das in Chansen.io auch geht. Das ist zwar nicht dokumentiert, aber man kann es machen und ich dachte, mein Ziel war, dass Code, der in Chansen.io funktioniert, auch auf meinem Mikro-Kontroller funktioniert. Wenn ihr das jetzt auch mal ausprobieren wollt, dann solltet jetzt die GitHub-Seite freigeschaltet sein. Ich habe da relativ viel mit GitHub Actions gemacht, sodass die Binarys alle automatisch compiled werden für verschiedene Plattformen. Die Cut-Dateien aus Keycut werden auch alle aufbereitet. Das heißt, es werden automatisch Gerbers erzeugt, Baum und Pick-and-Place-Files. Die sind in einem Format, dass sie direkt bei JLCPCB hochladen können. Da sind auch alle Nummern für die Bauteile drin. Im Moment, jetzt Anfang April, ist es leider so, dass die Padaugchips nicht verfügbar sind, wie so viele andere. Ich finde etwas merkwürdig, dass sie auch ausverkauft sind, aber da muss noch ein bisschen warten, bis die wieder drin haben. Dann können aber alle Bauteile da bestückt werden. Ich habe das Layout extra so gemacht, dass alle Bauteile bei JLCPCB auf Lager sind. Insofern könnt ihr da einfach die Gerbers hochladen, sagen ihr wollt fünf oder fünfzig Stück. Dann kann man da auf Pick-and-Place klicken, die Pick-and-Place und Bomb-Dateien hochladen und dann bestücken die Platine für euch und schicken die euch zu. Hier sind die Links zu dem Git-Repot, zu FreePDK und Shenzhen I.O. Das letzte Mal, als ich geguckt habe auf Good Old Games, war Shenzhen I.O. gerade im Angebot für sechs Dollar zwanzig oder sechs Euro zwanzig. Falls ihr es noch nicht gespielt habt, sollt ihr es kaufen. Es ist für alle Plattformen verfügbar und es ist wirklich ein sehr, sehr schönes Spiel. Ja, das war mal ein cooles Spiel. Ich lasse mich gleich noch überlegen, wenn der einen Tag von der Shenzhen I.O. spielen könnte. Danke. Ja, wir haben natürlich noch eine Frage. Gut, die Frage, wo bekommst du das Board her? Sorry, für den technischen Glitch und muted in Mumble. Danke, wo bekommst du das Board her, bitte? Bin angemuted, hallo? Nein, du bist alles wunderbar. Okay, ich höre gerade, wir haben ein bisschen technische Probleme gehabt, tut uns leidrig. Wir müssen nochmal anfangen. Frage 1, wo hast du das Board her? Okay, kannst mich jetzt hören? Ja, okay. Ja, das Board, es gibt den chinesischen Produzenten JLCPCB, da habe ich das Board bestellt und auf der GitHub-Seite sind auch alle Produktionsdaten, die man braucht, um sich dort selber eins zu bestellen. Ich muss mal sehen, ob ich vielleicht, also wenn es viel Interesse gibt, ob ich eine Sammelbestellung mache, dass ich mal 50 Stück machen lasse, sobald die Mikrocontroller wieder verfügbar sind und dann die Bestelle und Weiterschicke. Cooles Projekt muss ich dazusagen, lässt bitte mich auf meine alten Tage noch davon überreden lassen, vielleicht doch noch was mit Assembler rumzuspielen. Bietet sich dann als nächste Frage an, ist das dein erstes cooles Projekt, hast du eine Liste? Was hast du denn alle schon gemacht? Ich habe schon eine ganze Menge gemacht, also die letzten zehn Jahre mache ich Professionellproduktentwicklung, da hat es ein bisschen nachgelassen, wenn man das sowieso den ganzen Tag macht. Aber ich habe eine zeitlang eine Webseite gepflegt, die heißt Flegmatic Prototyping, also wie Flegmatisch auf Englisch und Prototyping. Wenn man das Google sollte man es eigentlich finden und da habe ich ja ein paar Projekte dokumentiert. Dann ist eigentlich die logische nächste Frage und was machst du als nächstes? Ich hatte gerade von einem Projekt gehört, als wir gerade uns mit dem Operating und Alternaten haben, oder von einem Spiel, das heißt irgendwas mit, also man muss eine Bombe entschärfen und einer hat die Bombe und die anderen haben nur die Anleitung dafür und ich weiß jetzt nicht mehr genau wie der Name war, das hörte sich aber so an, als ob man eine sehr schöne Hardware-Version von bauen könnte, wo einer halt eine Platine hat, muss dort irgendwas entschärfen und die anderen müssen ihm über eine Videokonferenz sagen, wie das Ganze funktioniert. Das wäre ein schönes nächstes Projekt. So, die Frage ist jetzt von einer Person, die sich sichtlich mit Assemblers schon beschäftigt hat und ich lese sie mal vor, denn ansonsten kann ich sie nicht weiter kommentieren. Kann das führende Minuszeichen, auch als echtes Minuszeichen, also U++2212 geschrieben werden, damit es ordentlich mit den Pluszeichen ausgerichtet ist? Müsste ich mal schauen, ob der Pasa das macht. Ehrlich gesagt, die Desktop-Applikation ist so das, wo ich am wenigsten Arbeit reingesteckt habe, da ich nicht so der User-Interface-Typ bin, da das aber ein Open Source-Projekt ist, wenn jemand einen Pull Request machen möchte und da gerne die Einrückung und die Darstellung verbessern möchte, dann immerher damit. Ja, die Frage hat doch einen Smelly dabei, aber offenbar soll er einen Pull Request machen. Enzi, wo stehts denn dein Open Source-Projekt? Das ist auf GitHub, ist alles unter GPL3, ich glaube, wir können da auch den Link noch mal einblenden. Ich sehe leider den Stream nicht, kann sein, dass er jetzt eingeblendet ist. Dort sind, okay, da sind alle Source-Dateien und also sowohl für die Platine als auch für die Firmware und für die Desktop-Applikation, ja, es ist alles Open Source, kann jeder gerne mitmachen, was er möchte. Würde mich super freuen, wenn irgendein Makerspace oder so, da mal ein paar Stück macht, um vielleicht einen kleinen Kurs zu machen für Leute, die gerade erst anfangen mit der Programmierung. Ja, es wäre ein cooles CMS-Projekt, zum Beispiel für Chaoswalk-Schule, sogar schon für die Unterstufe, das müsste cool sein. Ja, die Frage, die sich auch aufdenkt, ist, wer ist Zaktronix von deinem Projekt? Ja, ich habe den Sack angeschrieben, weil ich auch ein paar Sachen einfach direkt aus der Dokumentation übernommen habe für meine Dokumentation, weil ich ja den Assembler-Dialekt einfach eins zu eins implementiert habe. Und er fand das super cool, das Projekt und hat gesagt, kannst du machen, kein Problem und ich werde dich nicht verklagen. Hast du das schriftlich? Das habe ich schriftlich per E-Mail, ja. Entschuldigung. Die Frage drängt sich... So, und die Frage, die als Elefant im Raum steht, schon die ganze Zeit, und die, wo jeder denkt, wann endlich stellt er Sie, also hiermit stelle ich Sie, wie hast du den Hut gemacht? Den habe ich gemacht mit einem Tool namens Snap Camera, was, glaube ich, von Snapchat kommt und dazu gehört ein Lens Creator, mit dem man diese Lenses bei Snapchat bauen kann und habe einfach ein Beispiel genommen, wo man eine Krone auf dem Kopf hat oder so und habe das mit einem Bild von dem Hut ersetzt, den ich vorher ein bisschen bearbeitet habe, um unten hier den Rand wegzunehmen, aber der ist auch sehr zweidimensional, wenn man mal von der Seite guckt. Also ich habe ihn nicht in 3D nachgebaut oder so, aber ich finde es sieht ganz nett aus. Also ja, Snap Camera. Sieht super toll aus. Endlich ist die Frage auch noch gestellt worden. So, das Fragenbett ist zu Ende. Jetzt könnt ich dich noch fragen, hast du vor mit dem Projekt irgendwie in Schulen zu gehen oder Sie, nee, da sollen sich die einzelnen Projekte selber machbaren. Du würdest da nicht irgendwie eine... Aber wenn du von einer Sammelbestellung hast du vorhin gesprochen, wie wir uns unterhalten haben. Genau, das würde ich dann wahrscheinlich nochmal auf die Webseite setzen. Das einfach ein Link, in dem man sagen kann, ich hätte Interesse, ein Board zu bestellen für Leute, die nicht gleich 30 oder 50 haben wollen. Dann würde ich das sammeln und wenn 50 zusammenkommen, würde ich 50 machen lassen und die dann weiter schicken. Das werde ich wahrscheinlich morgen oder so auf die Webseite setzen, auf die GitHub-Seite und ich bin auch selber hier in Hamburg, in zwei Makerspaces aktiv und wenn es denn hoffentlich irgendwann wieder möglich ist, dass wir da so ein paar Workshops machen können, dann würde ich das auch mal versuchen, ob da Interesse dran besteht, gerade bei Anfängern im Bereich Elektronik und Programmierung und würde dann mal ein paar Boards einfach auf meine Kosten machen und die dann im Makerspace weitergeben. Das klingt, wie gesagt, das klingt da einem coolen, sehr coolen Projekt im Rahmen von Chaos macht Schule und das würde mich interessieren. Ich will stehen, Kontakt. Ich habe das geistig schon notiert. So, wenn sonst keiner was will von uns, dann würde ich sagen, wir nennen das jetzt hier einen Tag.