Projektidee "USB RetroArduInput"

  • Hallo zusammen,


    sollte mir jetzt irgendwer die Idee klauen und schneller sein, nur zu ;-)


    Mir kam ein sehr verwegener Gedanke: Alte Eingabegeräte werden nicht besser und nicht häufiger. USB-Geräte werden uns aber noch lange begleiten... Aber die alte Hardware wollen wir trotzdem benutzen und ggf. wenn sie ohne Eingabegerät kommt, auch mal testen können.


    Na ja eigentlich fing die Idee schon etwas kleiner an: Mein großes Arbeitspferd hat eine Corsair K68 Tastatur (weil ich einfach die Cherry MX Red so liebe). Über einen USB Host Umschalter soll die aber auch bei Bedarf an meinem Legacy-Arbeitspferd (für Hardware, die an dem großen nicht mehr läuft) laufen. Das Legacy-Arbeitspferd hat zwar USB Tastatur-Support (wäre auch schlecht wenn nicht, bei einem Q6600), aber die Corsair Tastatur läuft, im Gegensatz zu anderen Billig-Tastaturen, nicht außerhalb von Windows. Heißt keine Möglichkeit, ins BIOS zu kommen oder im Dual Boot zwischen Win7 und XP zu wählen. PS/2 Tastatur zusätzlich geht, ist aber nervig, aktive USB zu PS/2 Converter gibt es (z.B. von Blackbox), aber die kosten ein Heiden Geld. Und Geld und Zeit investiere ich lieber initial einmal mehr, um dann in Masse für meinen Retro-Park günstiger wegzukommen (verwegene Idee: Alle Rechner via KVM am großen LCD, der Corsair Tastatur und der Logitech Maus).


    Weil letztlich... ehe ich jetzt für fast 100 Euro pro Stück mal min. 3 Blackbox USB zu PS/2 Converter kaufe und dann für die XTs immer noch nix hab, oder für 30-40 Euro pro Unit Arduino-Krams und Teile, die es mir sogar ermöglichen, bis zu XTs und sogar auf Nicht-DOSen rüberzugehen, dann investiere ich die Arbeit lieber, und wenn mal irgendwann irgendwas sinnvolles rauskommt, teile ich es mit der Community. Außerdem habe ich, 15 Jahre nach meiner Diplomarbeit (auf einem Altera Cyclone II Entwicklerboard mit FPGA (VHDL) und Embedded C Entwicklung) endlich mal wieder Bock auf Programmieren.


    Enter: USB-RetroArduInput. Die Idee war geboren.


    Das USB Host Shield bedarf ja eines Uno oder Mega. Ich bin gleich in die Vollen gegangen und hab den Mega 2560 genommen. Dann lange Zeit Stagnation: Viele Dienstreisen (eigentlich tolles Projekt für Dienstreise, einen Arduino und meine Funktastatur könnte ich ja im Koffer verstauen, und die Entwicklungsumgebung ist auf meinem Laptop) und keine Zeit, ein Problem zu beheben: Es müssen noch drei Lötbrücken auf dem USB Host Shield gebrückt werden. Für alle interessierte: Hier steht die Lösung Defective Arduino USB Host Shield Boards (esp8266-notes.blogspot.com)


    Jetzt endlich: Die Lötbrücken sind gesetzt und der Arduino gibt mir mit dem Host Shield Beispielprogramm für Maus und Tastatur Mausbewegungen und Tasten-Scancodes über die USB-Serial Debugging-Schnittstelle aus.


    Als nächsten Schritt kann ich also nun anfangen, Protokolle zu implementieren, frei verdrahtet auf den Pins zu testen und letztlich in ein weiteres PCB Shield zu gießen. Die Krönung wäre dann, wenn alles abgeschlossen ist, ein 3D-Druck-Gehäuse zu entwerfen. Aber bis dahin ist, wie ich meine Auslastung mit anderen Dingen sehe, 2022.


    Aber was habe ich vor? Weil der Mega mir so viele Pins zur Verfügung stellt, inkl. Analog (PWM), habe ich gleich groß gedacht. Das Ding wird ein Interface-Monster!


    Ports auf dem Arduino:

    - Barrel Jack für Power

    - USB Typ B für Power, Debug (ich gebe weiter Debug-Meldungen raus) und Software-Updates


    Ports auf dem Host Shield:

    - USB Typ A für eins oder mehrere Geräte (die Libraries unterstützen USB Hubs)


    Ports auf dem Output Shield:

    - PC-Kompatible Tastatur: 8-Pin DIN 270° - warum 8-Pin? Weil alles rein passt. 8-Pin DIN 270° ist Tandy 1000, außer beim SL, der hat 7,nur der mittlere Pin fehlt. Auch der 5-Pin 180° XT/AT passt und der lässt sich über einen mechanischen Adapter auf PS/2 anpassen. Somit lassen sich XT, AT/PS/2 und die verschiedenen Tandy 1000 auf einem Connector implementieren.

    - PS/2 Maus: 6-Pin Mini-DIN - selbsterklärend. Mal gucken, ob ich sogar Mausrad implementiert kriege, das Beispielprogramm gibt dafür keine Meldungen aus.

    - Seriell: SubD 9 und ein Max232 zur Pegelkonvertierung - soll umschaltbar zwischen Mouse Systems und Microsoft werden

    - Pulse Mouse: SubD 9 - Amiga und Atari Maus, die geben ja die Pulse von der Gabellichtschranke raus. Der Unterschied zwischen Atari und Amiga liegt wohl in zwei vertauschten Pins, die werde ich denke ich der Einfachheit halber über einen mechanischen Schalter drehen

    - Digital Joystick: SubD 9 - Kompatibel zu Amiga, Atari, C64... Ich werde denke ich auch eine 1350 C64 "Joystick-Maus" Funktion einbauen, wo die Ausgabe von der Maus und nicht mehr vom Joystick bestimmt wird. Von der 1351 C64-Maus mit Proportional-Modus nehme ich Abstand, die scheint etwas aufwendiger zu programmieren zu sein.

    - Analog Joystick: SubD 15 - die Analog-Signale generiere ich per PWM und glätte diese über Kondensatoren. Inkl. zuschaltbarer Begrenzung auf 3.3V (einige PCI Soundkarten hatten 3.3V Vref auf dem Joystick Port)

    - evtl. (muss mich noch einlesen) Apple ADB - es gibt schon entsprechende Libraries für ADB Ausgabe, daher kann ich es auf Best Guess implementieren, aber nicht testen, da ich keine Mac Classic oder Vergleichbare habe. Vielleicht bereite ich es auch nur pintechnisch vor oder lasse es ganz weg.

    Arbeitspferde: Xeon E5-2683v3/32GB/GTX1650 Super/1TB NVMe+8TB HDD und Q6600/8GB/GTX460/1TB SSD+4GB+2GB HDDs

    Retro Maschinen:

    P2-450/256MB/128GB SSD/TNT2-M64+2xVoodoo2/Soundblaster 16+Yamaha DB50XG

    Commodore PC20-II/V20+8087/XTCF lite 256MB/Tandy Sound

    286-16/287-8/4MB/256MB CF/ET3000/Aztech NX-II

    Amiga 500/1MB/Gotek/Vortex AT-once Plus 286 + Amiga 500/1MB

    Pentium 166/FAST Video Machine+DDPR+YUV Board

    Projekt-Rechner: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64

    Projekte: USB RetroArduInput

  • Ich habe sowas schon versucht, aber leider nicht sehr weit gekommen. Habe hier ein Arduino und einen passenden USB Host und nach etwas hin und her habe ich leider das Ding nicht überzeugen können meine USB HID Geräte zu erkennen. Ich musste das Projekt aus Zeitgründen etwas nach hinten schieben, aber die Idee war dieselbe. Jedoch fand ich, dass Arduino + USB Host eigentlich teuer sind und dachte, dass man mit einem Pi Zero und einem sehr stark reduziertem Linux drauf viel weiter und günstiger zum Ziel kommen würde, da man auch Joysticks und alles mögliche, was von Linux unterstützt wird sich nützlich machen könnte.

  • Mit dem Pi gibt es ja KVM Lösungen der kann also sich als USB Tastatur ausgeben, dann noch PS\2 über GPIOs soweit war ich auch schon mal zumal da sogar Netzwerk KVM mit drin wäre...

    386SX- 20 Mhz "Erster eigener Rechner!2" NoName Komponenten

    486DX -30 "Industrie PC" auf Steckkarte

    Super Sockel 7 Gigabyte GA-5AA 3Dfx Voodoo 3500 TV

    AMD "Geode" ebenfalls Steckkarte für Backplane

    3x IBM Netvista 8364 "ThinRetroSystem" 1-2 von denen würde ich tauschen...


    "und noch so einiges mehr... "

  • Es hat sich einiges getan in der letzten Zeit.


    USB Hub funktioniert mit dem Maus/Tastatur Sketch von Felis, der als Beispiel bei der USB Shield Library bei ist, und um den ich alles drumherum baue, out of the box. Allerdings ziemlich hakelig. Evtl. brauche ich dafür einen besonders kompatiblen Hub mit Netzteil (vielleicht ist die Last was hoch für den Arduino). Im Moment habe ich zwei Hubs, die funktionieren, wenn ich den Arduino mit eingestecktem Funk-Dongle meines Logitech Wireless Sets einschalte und dann nach und nach weitere USB-Geräte einstecke.


    Für den Joystick-Ausgang werde ich wohl ändern und mir zwei digitale Potis besorgen. Den Trick habe ich aus forum.classic-computing.de wo schon jemand einen USB auf Joystick Adapter mit dem Arduino Uno gebaut hat. Meine ursprüngliche Idee war, PWM mit einem RC-Tiefpass zu glätten, aber das hat entweder zu viel Ripple oder ist zu träge. Außerdem spare ich mir so die Umrechnung des Ausgangs zwischen 5V (für ISA Soundkarten) und 3.3V (für einige PCI Soundkarten). Und dann will ich mir noch ein paar USB-Joysticks zum Testen besorgen. Bisher habe ich mit einem Speedlink Competition Pro USB (verhält sich auch "analog" auf X1/X2, kennt aber nur Mitte und Vollausschlag, mit Tasten codiert auf X2) und einen Trio Linker Plus (Adapter von Playstation 1/2, Dreamcast und Gamecube, getestet mit PS2 und DC Pad), der das analoge Steuerkreuz auf X2/Y2 und die Feuertasten auf X1 codiert. Das muss ich noch was ausklamüsern, was da welcher Joystick macht und wie ich das sinnvollerweise umsetze.


    Aus Tastatur-Seite habe ich nun eine fast perfekt laufende XT-Tastatur inkl. zweitem Cursorblock (unabhängig vom Num-Lock des Ziffernblocks). Zwei, drei Scancodes sind noch nicht so, wie bei der Cherry G80-1000 im XT-Modus, da muss ich noch mal gegenprüfen. AT/PS/2 ist etwas aufwendiger, da hier eine größere Host zu Tastatur Kommunikation inkl. Selbsttest stattfindet. Aber nichts, das nicht lösbar ist. Auch das Setzen der Typematic Rate, das auch zu den Host Commands gehört, werde ich implementieren.


    Die serielle Maus, angesteuert über einen der seriellen UARTs des Mega, umgesetzt über einen Max232, verrichtet ihren Dienst auch. Allerdings werde ich wohl die RTS Low abfrage nicht mehr über einen Interrupt machen, sondern über eine Abfrage in der Loop. Der Maustreiber schickt regelmäßig RTS Low, die Interrupt-Routine antwortet mit M, und wenn das passiert, während gerade ein Paket übertragen wird, springt der Mauszeiger, wenn der Interrupt reingrätscht. Ist zumindest meine Vermutung, warum der ansonsten perfekt funktionierende Mauszeiger ab und zu mal springt (im zeitlichen Zusammenhang mit einem RTS Low Event) und oft genug aber auch nicht.


    "Plain Vanilla" Eingabegeräte sind gut kompatibel. Das geht von Billig-Einsteigergeräten bis zu einer Logitech MX500 Laser Maus. Mit Gaming-Tastaturen/Mäusen gibt es etwas Stress. Die Logitech G502SE Hero Maus und Corsair K68 Tastatur (in den BIOS-Modus gezwingen) von meinem Hauptrechner laufen jedenfalls beide nicht. Von der Corsair kenne ich das auch, wenn die an meinem Legacy-Workhorse (Q6600, Asus P5KR) hängt. Windows läuft (XP wie auch 7), aber für BIOS und um im Bootmenü von 7 auf XP zu wechseln brauche ich eine separate Tastatur am PS/2 Port.


    Aber das Projekt wächst und gedeiht und hat Potential, mal irgendwann fertig zu werden (inkl. vernünftigem PCB für die Ausgänge und 3D-Druck Gehäuse). Sobald es tageslichttauglich (fertig mit Restmängeln) ist, geht eine Vorstellung auf Youtube und Sourcecode, Gerber und STL Files auf Github, aber bis dahin ist noch ein langer Weg.

    Arbeitspferde: Xeon E5-2683v3/32GB/GTX1650 Super/1TB NVMe+8TB HDD und Q6600/8GB/GTX460/1TB SSD+4GB+2GB HDDs

    Retro Maschinen:

    P2-450/256MB/128GB SSD/TNT2-M64+2xVoodoo2/Soundblaster 16+Yamaha DB50XG

    Commodore PC20-II/V20+8087/XTCF lite 256MB/Tandy Sound

    286-16/287-8/4MB/256MB CF/ET3000/Aztech NX-II

    Amiga 500/1MB/Gotek/Vortex AT-once Plus 286 + Amiga 500/1MB

    Pentium 166/FAST Video Machine+DDPR+YUV Board

    Projekt-Rechner: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64

    Projekte: USB RetroArduInput

  • Das Board nimmt Gestalt an

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!