![]() |
|
Eigentlich sollte es ein USB-Keyboard werden... aber dann kam wieder alles anders. Der Analysator für USB-Keycodes compilierte und lief noch einwandfrei aus der Arduino IDE, aber nach einem Update der Libs war es Essig damit - keine brauchbare Fehlermeldung, nur einfach sinnfreie Rückmeldungen der Transportschicht. Der ESP32-WROOM emulierte das USB-Hostprotokoll für eine Tastatur ohne Probleme, aber bis zur Simulation des TI-Keyboards war noch ein langer Weg... na dann wird es eben die PS/2-Variante - da ist das Protokoll relativ einfach "händisch" umzusetzen. Es gibt ja kritische Stimmen, die das USB-Protokoll als "overengineered" ansehen... muss man nicht auch so sehen (kann man aber). | |||
Nostalgie | |||
|
Im Prinzip muss es dieses Teil dann auch in einer PS/2-Variante geben, daher erst mal das Bild der USB-Fassung mit angeschlossenem Keyboard. Ein wenig schmerzt das schon, aber wer mal auf der PS/2-Tastatur geklimpert hat, wird wohl so schnell mit keiner USB-Tastatur mehr fremdeln... Und meine ist NOS, New Old Stock - eine absolut unbenutzte AT-Version in Originalverpackung - ein Träumchen in Sachen Haptik für nur EUR 65,-! |
| ||
Adapter | |||
|
Adapter gibt es diverse, aber welchen nehmen? Der Linke ist die Komfort-Variante mit Parallel-I/O, UART und SPI (ob er auch senden kann? Die Doku schweigt dazu.) sowie angeblich auch IIC - Mal sehen, vielleicht ist das die beste Variante zur Keycode-Analyse, aber das Protokoll ist hier komplett hinter dem Käfer versteckt. Der in der Mitte ist an sich nicht mehr als eine Buchse mit Stiftleiste - mehr die Sorte aus der "Makerbox", wo man sich seinen Prototyp per Breadboard zusammensteckt. Hey - warum auch nicht?! Und rechts, naja - seht selbst. Alles sogenannte "Pfennig-Artikel" aus dem Reich der - nee, nicht Mitte, das wäre Israel - naja, egal, eben da, wo die heutigen 40 Räuber zu finden sind. Naja, am Ende hängt die Wahl des Adapters davon ab, welche Software zum Einsatz kommt. |
| ||
Was sagen denn die anderen? | |||
|
Solch ein Projekt ist nicht neu - so schön das TI-Keyboard auch ist - für Vielschreiber ist es eher ungeeignet.
Daher findet man, so man denn sucht, beim netten Inder viele Umsetzungen, die überwiegend auch im Quellcode und mit Beschreibung der entsprechenden Hardware vorliegen.
Aber wehe man geht in die Details... Dieses kann nur das Typ I Protokoll, jenes kann nur empfangen, aber nicht die LEDs steuern, das hier läuft nur auf einem (überteuerten) Teensy V3, den es nicht mehr gibt, die Software läuft aber nicht auf V4 und Nachfolger, und noch eins macht nur Umsetzung von PS/2 auf USB (echt jetzt? Dafür gibt es doch die netten Adapter...), und auf die TI-Matrix adaptieren auch nicht viele. Und wer es ganz historisch haben will, schaut sich das Rave Keyboard an, das es schon 1988 erlaubte, ein PS/2 Keyboard anstelle der normalen Tastatur zu benutzen. Der Aufwand rund um den kleinen 24-beinigen Mikroprozessor ist schon respektabel. | |||
Die Klassifikation | |||
|
Ist das eigentlich ein Hardware- oder ein Software-Projekt? Die Hardware besteht ja lediglich aus dem Keyboard (fertig gekauft) und einem Anschluss für den PS/2-Stecker (fertig gekauft), dem Micro der die Umsetzung macht, und der Adaption an den Tastaturanschluss der Konsole. Daher mache ich das so: hier in der Hardware-Ecke betrachte ich die reine Umsetzung in den 3 funktionalen Blöcken E-V-A (Eingabe-Verarbeitung-Ausgabe), Details zum Code kommen dann in der Rubrik "Software Projekte" - OK? | |||
Kommen wir nun zu etwas völlig anderem: Software-Engineering | |||
1. Requirements | |||
Zunächst die essentiellen Requirements:
| |||
2. Aktueller Stand der Dinge, oder: DER GLITCH! | |||
|
Das PS/2-Protokoll ist definiert und dokumentiert, da gibt es nichts zu untersuchen,
lediglich die aus der Tatsache, daß die Tastatur Clock-Master ist, resultierende Anforderung an die Antwortzeit des Micros ist relevant,
aber in der Regel reicht ein mit 16 MHz laufender ATMega328 aus, um schnell genug zu reagieren.
Das ist aber nicht der Punkt: die Clock-Frequenz liegt irgendwo zwischen 10 und 17 kHz, entsprechend einer Periodendauer von ca. 60 bis 100 Mikrosekunden.
In dieser Zeit wird 1 Bit übertragen, insgesamt sind es pro Byte jeweils 12 Bit, also zwischen 720 und 1200 Mikrosekunden.
Wie wir unten sehen werden, sind das fast exakt die 1,17 Millisekunden, die der TI zwischen 2 Abfragen braucht,
wenn der Monitor läuft (Titelbild) und keine Taste gedrückt ist. Kniffliger ist in jedem Fall der TI, wie sich nach einigen Messungen herausstellte, nachdem ich im ersten Ansatz plante, die Ausgänge des 74LS156 als Interruptquellen eines Arduino Every zu verwenden, und dazu das Oszilloskop an die Tastatur-Stiftleiste anschloss... AU WEIA! Aber der Reihe nach - erst mal herausfinden, welches Timing wir da haben, denn die an sich sehr guten Sams Computerfacts existieren im Netz nur in absolut unbrauchbaren Auflösungen, wodurch man die Oszillogramme nicht lesen kann... Bild 1: Man schließe ein paar Kanäle an die Strobe-Signale vom Decoder 74LS156 und schaue nach. Und da ist er auch schon - der Glitch. Mist, wenn ich hier Interrupts zulasse, dann ist der Micro immer auf dem Holzweg... also mal genauer reingezoomt... schließlich soll ja erstmal das generelle Timing analysiert werden. Bild 2: Der Glitch ist systembedingt, da die CRU schließlich eine serielle Schnittstelle ist, und die Bits nacheinander einlaufen - Abhilfe ist ohne größeren Aufwand nicht möglich. Leben wir halt damit... wobei uns genau diese Eigenart der CRU ein klein wenig hilft: das Programm macht erst dann weiter, wenn der Befehl abgearbeitet ist, die Bits also stabil sind. Interessant mag sein, daß zwischen den Bits mehr oder weniger exakt 660ns vergehen - 2 Clocks pro Bit, denn erst muss die Adresse auf den Bus, zusammen mit CRUOUT, und dann noch ein Clock-Impuls. Bild 3: Man sieht (Die Traces bilden A, B und C von oben nach unten ab), daß von 5 bis 0 gezählt wird (6 und 7 fragen die Joysticks ab), daß aber zwischen den Abfrageblöcken selbstredend eine 0 verbleibt, d.h. eine Scan-Spalte ist immer aktiv! Und wenn man sich anstrengt, kann man 6 Kästchen zählen, entsprechend 1,2ms Periodendauer der Abfragen, wenn nur das Titelbild angezeigt wird. Interessanterweise ist das 2Y0, von dem man normalerweise annehmen würde, daß es NACH System 1 kommt - tut es aber nicht! Bild 4: Wahrheitstabelle aus dem Datenblatt, mit exakt demselben use-case, mit dem wir es hier zu tun haben. Bild 5: Man sieht die Dauer der Abfrage, wobei ich im TI-99/4A Intern mal nachsehen muss, wo und wie da gesampelt wird - eine Low-Phase von etwa 66 Mikrosekunden ist zwar lang (und wird länger, wenn Tasten erkannt werden, aber das spielt weniger eine Rolle - das zu entwickelnde System muss mit den Minimal-Timings klarkommen), aber wo wird gesampelt? Bild 6: Ein Blick in den Quellcode ergibt, daß etwa 32 Ticks (ca. 10 Mikrosekunden) nach Setzen der Strobes der Pegel eingelesen wird. (Sorry wegen der schlechten Masse auf Kanal 2...) |
![]()
| ||
3. Das 2Y0-Problem, oder: Danke Herr M. | |||
Eine etwas genauere Analyse der Oszillogramme, des Schaltplans sowie der KEYSCAN-Routine des Monitors zeigt zweierlei:
Aber warum die Referenz auf Herrn Martin? Wer mich kennt weiß, daß mein Verhältnis zu ihm immer etwas ambivalent war. Und so auch hier: Man ist dankbar für TI 99/4A Intern (wenn auch mit Schreibfehler), aber wenn man dort genauer hineinsieht, stellt man schnell fest: der überwiegende Teil der ROM-Listings besteht aus der 1:1 Vertonung der Assembler-Syntax - Semantik? Viel zu oft Fehlanzeige, so auch bei der Keyscan-Routine. Naja, egal - da gibt's von mir irgendwann was besseres... | |||
HALT - und was ist mit dem Joystick? | |||
| Dazu muss das System in den Zustand gebracht werden, den Joystick abzufragen, vielleicht durch ein kleines BASIC Programm... Das wird wohl in einem separaten oder verlängerten 2Y0-Zyklus resultieren. Da aber jetzt schon klar ist, daß die Strobe-Leitungen die Zieladressen vorgeben, ist das wohl nicht mehr als eine Fingerübung. Der Messaufbau kann bleiben - die Messung kommt später... |
| ||
4. Die Konsequenz: proof of concept - Rel. 0.2 | |||
Fassen wir zusammen:
Stay tuned, denn sobald das geklärt ist, geht es in der Rubrik "Software" weiter! | |||
| Kontakt: {anyname}@{use_the_url}.net |
Alle Bilder auf diesen Webseiten wurden von mir erstellt. Findet ihr sie anderswo, wurden sie hier geklaut! |
Letzte Aktualisierung: 2025-11-21 CW |