Ja, so einen würde ich auch gerne von Zeit zu Zeit verleihen…
Kategorie: Geek
Hier stehen ‚geeky‘ Inhalte.
Neues Hackmaterial
In den letzten Wochen habe ich mich wieder verstärkt um mein Projekt Dulcimer gekümmert. Seit Gestern habe ich ein neues benutzbares Hackbrett. Diesmal keine Model M, aber nichtsdestotrotz ein erlesenes Gerät. Ausführliches schreibe ich dann die Tage mal, wenn ich ein neues Paket online stelle. Wer sich für die Fortschritte interessiert kann auch einen Blick auf die Entwicklung werfen — das dürfte allerdings wohl eher was für den Connoisseur sein.
Und ich habe Heute neue Rohlinge für solche Basteleien bekommen. Zwei Model M, eine von 1991 und eine von 1995. Ob ich letztere wirklich zerlegen sollte muss ich mir noch überlegen. Das scheint irgendwie ein Sondermodell zu sein. Das Kabel ist — untypisch für die Serie — fest angebaut, und was das eigentlich merkwürdige ist: die hat keine LEDs. Sieht man auch auf dem Foto. Eigentlich ideal für meine Bastelidee. Kann mir jemand sachdienliche Hinweise zu dem Ding geben?
Taschenrechner für Fortgeschrittene
OK, als ‚Fortgeschrittenen‘ würde ich mich im Bereich Mathematik nicht sehen. Absolut nicht. Ich kann nicht mal mehr schriftlich multiplizieren, geschweige denn dividieren. Aber dafür weiß ich wie man einen Taschenrechner bedient. Dachte ich…
Bislang habe ich auf dem Computer immer gcalctool benutzt. Das ist übersichtlich und kann eigentlich alles was man so dauernd braucht. Zufällig habe ich vor ein paar Tagen einen Emulator für einen real existierenden Taschenrechner gefunden. Emulator? Für einen verdammten Taschenrechner?!? Ja, genau. Free42 heißt das dann.
Bei dem Vorbild handelt es sich um das Modell HP-42S, das wurde 1988 von Hewlett Packard vorgestellt und — ich glaube — bis 1994 gebaut. Das Ding findet man natürlich im Taschenrechner-Museum von HP, aber auch in der Wikipedia. Ein programmierbarer Taschenrechner, Umgekehrte polnische Notation, etwa 600 eingebaute Funktionen und 7200 Bytes Platz für eigene Programme. Ich weiß nicht warum, aber das hat mich irgendwie fasziniert. Und nicht nur mich: bei Online-Versteigerungen wird das Ding offenbar teilweise mit über 200 Euro gehandelt. Das ist deutlich mehr als der originale Verkaufspreis vor 15 Jahren, als man das noch im Laden kriegen konnte. Der lag soweit ich weiß bei 130 Dollar.
Wie sieht jetzt so ein Taschenrechner-Programm aus? Was kann man damit machen? Man kann damit eine ganze Menge tun, wie man schnell sieht wenn man sich ansieht was es an Beispielen im Netz gibt. Ich habe mir mal das Alternative Manual durchgelesen und losgespielt. Ein Beispiel muss her…
Das erste was ich benutzt habe ist die Solver-Funktion. Dabei programmiert man eine Funktion mit mehreren Unbekannten (z. B. das Ohmsche Gesetz: U=R*I) die man umgestellt hat so dass 0 rauskommt (also U-R*i=0). Dann kann man die Variablen der Reihe nach mit Werten belegen und den unbekannten berechnen lassen. Man gibt also Spannung und Strom an die für eine LED benötigt werden und kriegt direkt den Widerstand, ohne selbst zu rechnen. Oder Man gibt den gewünschten Strom und den Widerstand an und bekommt die Spannung an der das betrieben werden muss. Nett, aber trivial. Ein komplizierteres Beispiel muss her…
Die Aufgabenstellung habe ich aus einem Podcast ueber Leonhard Euler, allerdings habe ich als Laie wohl was falsch verstanden. Wahrscheinlich ging es um die Euler-Mascheroni-Konstante oder um das Basel-Problem, mein Programm ist vermutlich total uninteressant. Trotzdem taugt es als Beispiel. Die Aufgabe besteht darin, die Kehrwerte von ganzen Zahlen zu addieren. Also 1/1 + 1/2 + 1/3 + 1/4 und so weiter. Mittlerweile weiß ich, dass man das auch mit Logarithmen berechnen kann, aber wie angedeutet würde ich da von alleine nicht drauf kommen.
LBL "EULER"
STO 01
0
STO 02
RCL 01
LBL A
1/x
STO+ 02
RCL 01
1
-
STO 01
x>0?
GTO A
RCL 02
Das Programm arbeitet wie folgt:
- aktuellen Wert des X-Registers (also die letzte eingegebene Zahl) in Speicher 01 sichern
- 0 in Speicher 02 schreiben
- Speicher 01 wieder herstellen
- Sprungmarke A setzen
- von der wiederhergestellten Zahl den Kehrwert bilden und zu Speicher 02 addieren
- Speicher 01 wieder herstellen
- 1 subtrahieren und den neuen Wert wieder in 01 speichern
- wenn der Wert groesser 0 ist, nach A springen
- ansonsten das Ergebnis aus Speicher 02 anzeigen
Also quasi folgendes, nur halt im Taschenrechner (und nicht nur fuer 100):
perl -e "$j=0;for($i=1;$i<=100;$i++){$j+=1/$i};print$j;
In einer Tabellenkalkulation habe ich das auch mal gemacht um die Werte zu kontrollieren, aber da kann man das (ohne wirklich zu programmieren) nur bis knapp ueber 60.000 machen, weil dann die Tabelle am Ende ist. Das Ergebnis fuer 999.999.999 ist 21,3004815013 (da hat der Taschenrechner aber auch eine Weile drauf rumgekaut).
Ich bin einfach mal weiter fasziniert, vielleicht konnte ich ja irgendwen anstecken…
C für Geisteskranke
Das erinnert mich daran warum ich die Sprache C nach Möglichkeit nur auf Mikrocontrollern benutze:
rschaten% cat array.c
#include <stdio .h>
int main(int argc, char **args) {
char *string = "abc";
printf("%c %c %cn", string[0], string[1], string[2]);
printf("%c %c %cn", 0[string], 1[string], 2[string]);
return 0;
}
rschaten% gcc -o array array.c
rschaten% ./array
a b c
a b c
rschaten%
Das habe ich aus dem Unix Haters Handbook, ich hätte nicht gedacht dass das wirklich funktioniert…
grep
Um die Mikrocontroller-Einöde der letzten Tage mal etwas aufzulockern: ich habe mich fast gewundert als ich gelesen habe wofür ‚grep‚ steht. Also nicht was man damit macht, sondern dass das Wort tatsächlich eine Bedeutung hat, beziehungsweise eine Abkürzung ist.
Das steht für Global Regular Expression Printer. Auch wenn man es fast täglich nutzt, ich behaupte mal dass das kaum jemand weiß.
Dulcimer
Dieses Projekt war 2008 noch nicht im Blog, ich habe es 2015 aus dem alten CMS kopiert.
Die Version, die sich in Frankreich aus dem Psalterium entwickelte, wurde auf französisch ‚doulcemér‘ genannt, dieser Name stammt vermutlich vom lateinischen ‚dulce melos‘, ’süßes Lied‘ oder ‚lieblicher Klang‘. In England heißt das Hackbrett heute noch ‚hammered dulcimer‘.
Wikipedia — ‚Hackbrett‚
Eine Tastatur kann eine sehr persönliche Sache sein. Insbesondere wenn es sich dabei um ein sehr gut gebautes Modell handelt, wie zum Beispiel eine IBM Model M. Das Design der Model M stammt von 1984, sie hat aber auch Heute noch eine grosse Fangemeinde. Sie hatte die üblichen Anschlüsse für alte Tastaturen: erst den 5poligen DIN-Stecker, später einen PS/2-Stecker. Zumindest meines Wissens nach wurde dieses Modell nie in einer USB-Variante herausgebracht.
Ein Bekannter wusste dass ich schon öfter Geräte mit USB-Anschluss gebastelt habe, und eines davon verhält sich sogar wie eine Tastatur (Es ist nicht wirklich eine Tastatur… aber das ist eine andere Geschichte… ). Er ist ein grosser Freund der Model M, also fragte er ob ich einer Tastatur mit kaputter Elektronik neues Leben einhauchen könnte. Dies ist das Ergebnis…
Hard- und Software
Der grösste Teil der Elektronik in einer Tastatur ist die Tastenmatrix. Man kann sich das so vorstellen dass die Tasten auf einem Raster aus horizontalen (Reihen) und vertikalen (Spalten) Leiterbahnen verteilt sind. Im Fall einer Model M haben wir es mit einer 8×16-Matrix zu tun. Acht Spalten in 16 Reihen, oder anders rum, je nachdem wie man sich das vorstellt. Jede Taste ist mit einer Reihe und einer Spalte verbunden. Wenn man drauf drückt wird die Verbindung an dieser Kreuzung hergestellt.An dieser Matrix hängt ein Tastaturcontroller. Das ist ein Chip mit einer Reihe von I/O-Pins die den Zustand der Matrix überwachen. Am anderen Ende ist ein Interface mit dem der Chip dem Computer seine Befunde mitteilt. Ach ja, und nicht zu vergessen: der Chip hat auch drei Ausgänge zur Ansteuerung der LEDs für Num-, Caps- und Scroll-Lock.
In diesem Projekt habe ich den Tastaturcontroller und seine Schaltung durch einen ATmega32 und eine eigene Schaltung ersetzt. Der ATmega scannt die Matrix, steuert die LEDs und spricht mit dem Computer.
Für die angenehme Weiterentwicklung habe ich einen Boot-Loader in dem Chip untergebracht. Damit ist es möglich, der Tastatur eine neue Firmware zu verpassen ohne sie auseinander nehmen zu müssen. Und ohne einen speziellen Programmer zu brauchen.
Andere Hardware?
Wie geschrieben hängt der Controller in diesem Projekt nur an einer Tastaturmatrix. Diese Art von Matrix findet man in allen möglichen Tastaturen, von Tastentelefonen über klassische Computer wie den C=64 oder den Schneider CPC, Tastaturen wie die von Sun, mit Anschlüssen die nicht an PC passen, bis hin zu modernen Tastaturen die ein paar zusätzliche Features brauchen könnten.Ein Layout habe ich zwar bislang nur für die IBM Model M gemacht, aber ich will zumindest noch eine Sun-Tastatur umbauen. Ich schätze dass ich dazu den Scan-Algorithmus umbauen muss, weil die Matrix bei Sun nicht in 16×8-Form angeordnet ist. Die Positionen der Tasten auf der Matrix werden wahrscheinlich auch anders sein, die werde ich rausfinden müssen. Und natürlich wird dann eine Platine mit anderem Layout fällig.
Features
Im Moment macht die Tastatur alles was man von einer Standard-Tastatur erwarten kann die man irgendwo aus dem Regal zieht. Aber da sich der ATmega32 in der Tastatur die meiste Zeit einfach nur langweilt sind einige zusätzliche Features denkbar. Man denke an ‚magische Tastendrücke‘ die einige versteckte Funktionen an- oder ausschalten können, so etwas wie:- komplette Sätze oder Phrasen auf einzelne Tastendrücke abschicken
- ‚Autofeuer‘-Funktion auf Tasten die sowas normalerweise nicht haben, beispielsweise Alt+F4
- Tastaturlayout umstellen ohne den Computer umzukonfigurieren
- prellende Tasten ein- oder ausschalten, um Leute zu verwirren die den Computer benutzen wollen
- zufälliges Auslösen von Caps-Lock
- Die Pfeiltasten zu einem Mausersatz machen, ohne dafür spezielle Software zu brauchen
Mit ein paar Änderungen an der Hardware würden sogar noch deutlich mehr Möglichkeiten offen stehen:
- die Oldtimer-Tastatur in eine supermoderne kabellose Bluetooth-Tastatur umbauen
- Keylogger-Funktionen einbauen, zum Beispiel auf SD-Karte
- einen USB-Hub in die Tastatur einbauen
Wer nur ein wenig so darüber denkt wie ich wird nicht lange brauchen um selbst auf nützliche — oder besser: unnütze — Ideen zu kommen.
Benutzung
Die fertige Tastatur wird einfach an USB angeschlossen. Alle LEDs blinken kurz auf um zu zeigen dass das Gerät initialisiert ist.
Dann kann die Tastatur wie immer benutzt werden. Wenn zusätzliche Features eingebaut werden wird es zusätzliche Bedienungsanleitungen geben.
Nachteile
Ich weiss nicht wie die Hersteller von Tastaturen mit dem Problem der Geister-Tasten umgehen. Ich habe keine speziellen Massnahmen zu deren Verhinderung getroffen. Ich hoffe einfach mal, dass die Ingenieure bei IBM die Tasten in einer Weise auf der Matrix verteilt haben die das Problem minimiert. Aufgetreten sind solche Probleme bei mir bislang zwar nicht, aber ich wollte darauf hinweisen dass ich keine Gegenmassnahmen getroffen habe.
Danke!
Ich danke wieder mal Objective Development für die Möglichkeit, den USB-Treiber in meinem Projekt benutzen zu können.Ich habe mich sehr stark von Spaceman Spiff’s c64key inspirieren lassen. Diese Software basiert auf seinen Ideen.
Dann geht Dank an xleave, der mir die Platine geätzt hat (von den vielen blöden Elektronikfragen mal ganz abgesehen die er schon von mir vor den Latz gekriegt hat…).
Und ich danke natürlich FaUl vom Chaostreff Dortmund für die Idee zu dem Projekt.
Lizenz
Meine Arbeit, also alles außer dem USB-Treiber, fällt unter die GNU General Public License (GPL). Eine Kopie der GPL liegt dem Projekt bei. Der USB-Treiber untersteht einer gesonderten Lizenz von Objective Development. In firmware/usbdrv/License.txt befinden sich weitere Informationen dazu.
Download
- dulcimer_080712.tar.gz – Sourcecode und Dokumentation, 877kB
Siehe auch…
- clickykeyboards.com – eine Seite zur IBM Model M
- RUMP – praktisch das gleiche Projekt, eine parallele Entwicklung
- Geekhack – Lochraster-Version, basiert auf Dulcimer
ladyada’s ranting
Ich weiß auch nicht warum ich den Feed von ladyada noch nicht im Reader hatte. Dass es da interessante Projekte gibt weiß ich schon seit Jahren. Mit diesem Satz hat sie mich jetzt doch überzeugt:
I remember a few years ago I went to a party and ended up talking to Mar about how much I hated Chapter 9 of the USB standard. USB is pretty much a perfect example of what happens when committees design protocols: its bad enough that it will ruin a party.
Kein Wunder, nachdem ich wieder das ganze Wochenende mit Controllern verbracht habe. Unter anderem auch, um die USB sprechen zu lassen…
ASCII-Art 2.0
Zumindest in meinem Firefox sieht es noch ein wenig merkwürdig aus, aber dieser Homer Simpson aus ASCII-Zeichen und CSS ist einen Blick wert. Nette kranke Idee.
Y2K-Fehler
Argh. Neun Jahre zu spät, aber ich hab’s gerade erst gelesen. In der Man-Page zur Perl-Shell, auf die ich über einen Blog-Eintrag geraten bin.
Da findet sich folgendes Beispiel, samt Kommentar:
ls | s/y/k/ # Substitution. Example is a Y2K fix.
Die Shell ist eine Kuriosität am Rande, ich werde wohl bei meiner zsh bleiben. Aber der Kommentar ist nicht schlecht.
Neue und alte Technik mobilisiert
Cool sind beide Umbauten, auch wenn die Innereien aus völlig verschiedenen Zeitaltern stammen: Benjamin Heckendorn hat nicht nur eine Playstation 3 zu einem Portable umgebaut, sondern jetzt auch einen Apple IIgs. Ich bin schwer beeindruckt!