Einleitung
Den Komfort-Gewinn moderner optischer Mäuse möchte man gern auch an klassischen Computern bekommen, um sich insbesondere nicht mehr mit den Kugeln und Rollen der alten Mäuse herumzuärgern. Entsprechend gab es schon lange entsprechende Adapter-Lösungen, die PS/2 Mäuse aus dem PC-Bereich auch mit anderen klassischen Computern nutzbar zu machen. Leider sind auf dem Markt dieser Tage kaum noch Mäuse zu bekommen, die auch das PS/2-Protokoll noch unterstüzen. Demzufolge sind Lösungen auf USB-Basis erforderlich.
USB-Mausadapter werden auch für die Amiga-Plattform angeboten, sowohl über Händler als auch in Form von OpenSource Projekten, wie z.B. SmallyMouse. Leider basieren alle mir bekannten USB-Lösungen für Amiga Computer auf dem USB Boot Protokoll, welches keine Unterstützung für das Scrollrad (bzw. Wheel) bietet.
Aus diesem Grund habe ich mich dazu entschlossen, eine eigene Lösung zu bauen, welche anstelle des andernorts zu findenden USB Boot Modus den vollständigen USB HID Modus (bzw. Report Modus) implementiert.
An allen meinen eigenen Amiga Computern (A500/A1200/A3000/A4000, Akiko32) habe ich diese Lösung seit ca. einem Jahr in Betrieb, teils mit kabelgebundenen und teils kabellosen Mäusen. Auch der USB-seitig recht schwierige Logitech Unified Receiver funktioniert nach meinen Erfahrungen zuverlässig.
Hardware und Aufbau
Dieser USB-Adapter basiert auf dem Mikrocontroller ATMega AT90USB1287, welcher USB sowohl als Device als auch als Host abbilden kann. Ich habe beim Controller und den weiteren Bauteilen darauf geachtet, dass diese auch noch bei den üblichen Distributoren (z.B. Digikey, Mouser) gelistet sind. Mein Entwurf für das PCB findet sich unten im Download-Bereich im Gerber Format.
In diesem Ansatz bleibt die Funktion der drei Maustasten hardwareseitig erhalten, sodass insbesondere in Bezug auf die mittlere Maustaste kein spezieller Treiber laufen muss und damit auch NetBSD oder Linux wie gewohnt/erwartet funktionieren. Die beiden Signale für das Scrollrad werden über den Joystick-Port in den Amiga gespeist. Diese Lösung über zwei Ports besitzt zwar in optischer Hinsicht nicht die Eleganz von 1-Port Ansätzen wie Cocolino (serielle Abfrage von Zusatzinformationen) oder Micromys (analoge Zusatzdaten), kann aber jedoch mit Vorteilen in Bezug auf Kompatibilität (s.o.), geringstmöglichen Rechenzeitbedarf und Robustheit bei der Abfrage des Mausrades punkten. Um Joysticks dennoch betreiben zu können, besteht die UWMouse aus zwei Teilen: dem Mausadapter und einem automatischen Joystick-Umschalter namens UWAutoJoy.
Da auf dem PCB der Platz um den Mikroprozessor recht knapp ist, würde ich empfehlen, mit dem ATMega zu beginnen. Da Teilbestückung heutzutage in Mode ist: die minimal benötigten Teile zur Programmierung des ATMega sind neben dem Mikrocontroller selbst C1,C2,Y1 und R3. Für den Anfang empfiehlt es sich natürlich auch, den Programmieranschluss J5 mit der 2x3-Stiftleiste zu bestücken. Auf dem Silkscreen habe ich zusätzlich zum Kicad-Strich einen kleinen Kreis platziert, der die markierte Ecke zur korrekten Platzierung des ATMega noch einmal hervorhebt. Hinweis: die nachfolgenden Bilder zeigen V0.3 der Platine. Die V0.4 der SB hat 3 Pins an J3 (vRnL): W1,W2,+5V.
Danach folgen R1,R2,R4,R8,R9,C4 und die beiden LEDs. Vor dem Anlöten von J1 und J2 würde ich empfehlen, die 100nF-Kondensatoren und beiden letzten Widerstände auf der Unterseite zu ergänzen. Ein Ergebnis des Betatests war, dass R8/R9 für sicheres Schalten der Mausbuttons doch besser ohne zwischenliegenden Schutzwiderstand bzw. mit 0 Ohm bestückt werden sollten.
Der Adapter kann auch ohne die DIP-Switches getestet werden (falls noch etwas nachzulöten ist). Die DIP-Switches schalten optionale Features und sind zur Inbetriebnahme nicht unbedingt erforderlich. Beim Anschluss eines USB-Gerätes an den Adapter wird zunächst die rote LED für etwa 2-3 Sekunden aufleuchten. Wird eine Maus erkannt und komplett konfiguriert, geht die rote LED danach aus und die grüne LED an. Sollte der Adapter mit dem Report-Format der Maus nicht klar kommen, wird er versuchen, in den Notfall-Modus (=USB Boot Protokoll) zu wechseln und lässt in diesem Fall beide LEDs leuchten. Aktuell kenne ich keine Maus, die den Notfall-Modus brauchen würde.
Auf J4 sind RX und TX des UART herausgeführt, um Debug-Ausgaben über die serielle Schnittstelle (Achtung: TTL-Pegel, d.h. entweder FT232R-Board oder Pegelwandler zum RS232) mit 9k6 8N1 mitschneiden zu können.
Die DIP-Switches sind per Default "OFF". Es gilt folgende Belegung der Switches, wenn eingeschaltet:
- DPI bzw. Mausgeschwindigkeit halbieren
- USB Boot Protokoll forcieren (nur für störrische Mäuse, da dann das Mausrad nicht verfügbar ist)
- aktuell keine Funktion
- Richtung des Rollrades umkehren (das ginge auch in Software, siehe README zum UWMouse Commodity)
Der Autojoy-Adapter ist noch einfacher: ATTiny auflöten, C1/R1 dazu und dann die drei Verbinder, fertig. Auf dem PCB ist beschriftet, wo die Buchse (weiblich) hingehört. Das gleiche gilt für den Joystick-Anschluss in Form des männlichen Gegenstücks.
Programmierung
Pin1 des ISP-Headers ist auf beiden Boards mit einer Aussparung auf dem Silkscreen markiert. Es sind alle 6 Pins mit den gleichnamigen Pins des Programmers zu verbinden. Meist besitzen die Programmer das ICSP1-Format mit 10 Pins. Bei den Angeboten in der Bucht ist dieser Tage oft ein Adapter vom 10-Pin auf das 6-Pin Layout dabei. Ansonsten tun es auch Dupont Kabel. Als Programmiersoftware eignet sich z.B. der kostenfreie AVRDude. Im Bild unten sind noch RXD,TXD des USBasp mit aufgeführt, die in diesem Anwendungsfall keine Rolle spielen.
In Verbindung mit einem USBasp ist das Kommando zur Programmierung von UWMouse mittels AVRDude wie folgt:
<code>avrdude -c usbasp -p at90usb1287 -U flash:w:UWMouse.hex:i</code>
Da der Autojoy mit dem internen Takt des ATTiny läuft, ist u.U. die Standard-Taktrate des Programmers zu hoch. Daher ist -B 30 in der Kommandozeile vorgeschlagen, um den Programmiertakt zu senken.
<code>avrdude -B 30 -c usbasp -p attiny44 -U flash:w:AutoJoy.hex:i</code>
Kabel
Das Verbindungskabel zwischen UWMouse und UWAutojoy ist ab Version 0.4 dreipolig. Es ist 1:1 auszulegen. Die drei Pins haben auf dem Silkscreen beider Boards die gleichen Bezeichnungen (W1,W2 und +5V). Die Länge des Kabels hängt vom Amiga ab. Bei A500, A1200 und A3000 liegt die Joystick-Buchse so neben dem Mausport, dass die Verbindung auf dicht gegenüber liegenden Positionen zustande kommt. Beim A4000 sind Maus- und Joystick-Buchsen vertauscht, was in Bezug auf die Länge des Kabels zu beachten ist. IIRC gilt letzteres auch beim A2000. Anbei ein Bild zur Verkabelung:
Inbetriebnahme
Wenn der Programmiervorgang sauber durch läuft, dann gibt es auf den Boards auch keinen Kurzschluss zwischen 5V und GND. Beim Anschluss des UWMouse ohne USB-Gerät wird keine LED leuchten. Sobald ein Gerät an der USB-Buchse klemmt, leuchtet während der Gerätekonfiguration für ca. 2-3s die rote LED auf. Nach erfolgreich abgeschlossenem Konfigurationsvorgang geht die rote LED danach aus und die grüne LED an. Sollte DIP-Switch 2 aktiv sein (ON) oder der Adapter nicht mit den Config-Descriptoren der Maus umgehen können, wechselt der Adapter in den Modus für das Boot Protokoll, was durch gleichzeitiges Leuchten beider LEDs signalisiert wird. In beiden Fällen sind Maus-Bewegung und die drei Tasten verfügbar. Im USB Report-Modus (= grüne LED) wird auch das Mausrad ausgewertet und dessen Bewegung an den Amiga übertragen.
Ein Test des Mausrades und gleichzeitig des Autojoy ist recht bequem in Programmen wie Advanced Amiga Analyzer (AAA) oder Keirf's Systest möglich. Bei Bewegung des Mausrades sind die Signalabfolgen an Pin 1 und Pin 3 des Joystick-Ports sichtbar. Bei Bewegung des Joysticks bzw. Betätigung des Feuerknopfes wird dazu führen, dass die Pins1/3 auf den Joystick umgelegt werden und dessen Schaltzustand anzeigen.
Software
Die Grundfunktionen bilden klassische Amiga-Mäuse nach, sodass weder in Spielen noch auf dem Desktop ein Treiber notwendig wäre. Lediglich für die Mausrad-Funktion ist zusätzliche Software nötig.
Die erste Komponente ist der Treiber, der die Signale vom Joystick-Port ausliest und dem input.device als Mouse Wheel Events weiter reicht. Dies kann entweder über WBM (Aminet, siehe dortige Anleitung) oder mein Commodity erfolgen. Letzteres ist auch im Download-Bereich verlinkt. Das UWMouse Commodity kann nach dem Entpacken einfach in SYS:WBStartup abgelegt werden.
Da die meisten Amiga-Programme (Ausnahme: MUI und einige wenige weitere Tools wie z.B. Eagleplayer 2.06) keine eigene Unterstützung für Mouse Wheel Events besitzen, empfiehlt sich bis einschließlich OS3.1.4 die Installation von FreeWheel.
In OS3.2 wird FreeWheel nicht mehr benötigt. Dort kann die Mausrad-Unterstützung bequem in SYS:Prefs/IControl aktiviert werden. Lediglich der UWMouse Treiber muss nach wie vor gestartet werden.
Kompatibilität
Aufgrund der Vielzahl von Geräten auf dem Markt und teils (vorsichtig ausgedrückt) eigenwilligem Verhalten kann ich keine Garantie übernehmen, dass alle Mäuse auch funktionieren. Anbei findet sich eine Liste der bei mir getesteten Mäuse, in die ich auch positive Rückmeldungen von anderen Nutzern ergänzt habe. Es ist zu beachten, dass nur Direktverbindungen zu Mäusen bzw. deren Wireless Dongles unterstützt werden. Der Anschluss über USB-Hubs funktioniert nicht.
Bisher ist mir nur die Logitech MX900 als nicht funktionierend bekannt, da diese einen USB Hub besitzt, der vom verwendeten ATMega nicht unterstützt wird.
- Logitech iFeel Mouse (46d/c030)
- Logitech Wheel Mouse M-BD69 (46d/c00c)
- Logitech Wheel Mouse M-BJ58 (46d/c00e)
- Logitech Wheel Mouse M-BT58 (46d/c03e)
- Logitech M110 (46d/c064)
- Logitech Cordless Mouseman Optical (46d/c504)
- Logitech M335 (46d/c52b Wireless Unifying Receiver)
- Microsoft Intellimouse Optical (45e/39)
- PS/2 USB Adapter (4b4/8081)
- Logilink ID0011 (1c4f/34)
- Razer Abyssus V2 (1532/005b)
- Steelseries RIVAL 650 (1038/172b)
- Apple Mighty Mouse (5ac/304)
- Cherry MC1000 (46a/b091)
- Roccat Kone AIMO (1E7D/2E27)
- Logitech MX1000 Bluetooth Laser Mouse (46d/c70e, Apex)
- Microsoft Comfort Mouse 6000 (Apex)
- Logitech Mouseman M-BA47 (Marmacc)
- Logitech Corded Mouse M500 M-U0007 (Marmacc)
- Logitech MX Anywhere 2S Bluetotth M-R0067 (Marmacc)
- Logitech Optical Mouse MX500 M-BP81A (Marmacc)
Downloads
THIS MATERIAL IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS HARDWARE AND SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
The following material may be used under the terms of the Attribution-NonCommercial-ShareAlike 4.0 International creative commons license. Please refer to creativecommons.org for details.
AmigaOS 2.0+ WheelBusMouse Treiber, als bequemes Commodity |
Gerber-Dateien zur PCB-Bestellung für UWMouse |
BOM für UWMouse und UWAutojoy mit Digikey/Mouser Bestellnummern |
Gerber-Dateien zur PCB-Bestellung für UWAutojoy |
3D Druck Gehäuse-Designs: generisch mit zwei Gehäusen sowie A500/1200 Design (zusätzlich werden M2,5 Zylinderschrauben 10/12mm und M2,5 Muttern benötigt) |
UWMouse_Autojoy_Firmware13a.zip Firmware für AT90USB1287 und ATTiny44A |