MWheel der ATARI dreht am Rad

Ein weiteres Projekt, welches mir sehr am Herzen lag, war MWheel. Der ATARI hatte standardmäßig eine 2-Tasten-Maus. Und mit der Zeit kamen Mäuse auf den Markt, die hatten da ein seltsames Rad. Ein Scrollrad. Heute Standard. Aber für den ATARI gab es solche Mäuse nicht. Warum auch? Das Betriebssystem konnte damit nichts anfangen und die Schnittstelle war nicht darauf vorbereitet. Das wollte ich nicht hinnehmen. Ich wollte unbedingt auch eine Scroll-Maus am ATARI betreiben. Üblicherweise waren die Scroll-Mäuse für PCs gedacht. Und diese wurden an die serielle Schnittstelle (später PS/2 und viel später USB) angeschlossen. Zum Glück war der ATARI ST mit sehr viele Schnittstellen ausgestattet. Darunter eine oder je nach Model auch mehrere serielle Schnittstellen.

Mein Ziel/Aufgabe bestand nun darin, einen Treiber zu schreiben, der es

  1. erlaubt eine serielle Maus an den ATARI anzuschließen und sowohl die Bewegungs- als auch die Scrolldaten auszulesen. Und
  2. die ausgelesenen Bewegungsdaten so an das Betriebssystem weiterzuleiten als ob die Original-Maus bewegt wurde. Und
  3. was der schwierigere Teil war: Die Scrolldaten als Fenster-Scroll-Ereignisse einschleusen als ob man auf die Scrollpfeile am Fensterrand geklickt hätte.

Mir war von Anfang an klar, dass ich den Treiber in 2 Teile aufteilen muss. Der Hauptteil war für das Einschleusen der Bewegungs- und Scrollereignisse zuständig. Und der 2. Teil sollte für die Verbindung mit der Hardware zuständig sein. Die wurde als Modul realisiert, welches von MWheel selbständig geladen wurde. Das hatte den großen Vorteil, dass Hardware-Teil einfach ausgetauscht werden konnte. Das war später wichtig, als serielle Mäuse immer rarer wurden und durch Mäuse mit PS/2-Anschluß ersetzt wurden.

Jetzt kommt auch ein Hardware-Projekt von mir ins Spiel. Ich mein JerryST. Das war ein Adapter, der es Erlaubte PS/2-Mäuse direkt ATARI zu betreiben. Und wenn ich sage direkt, dann meine ich das auch so. Man konnte tatsächlich PS/2-Mäuse ohne Treiber am ATARI betreiben. Optional konnte man MWheel einsetzen und hatte dann die Scroll-Funktionalität

MWheel ist Freeware und das Archiv kann hier heruntergeladen werden: mwheel.zip und enthält neben MWheel auch folgende Module:

  • mwhl-joy.mwx: mit einem Joystick kann man scrollen
  • mahl-ser.mwx: für Mäuse am seriellen Port (RS232)
  • mahl-eif.mwx: spezieller Treiber für das EIFFEL-Tastatur-Interface
  • mwhl-mpc.mwx: dieser Treiber ist dahingehend speziell, dass er ausschließlich für MagiC PC geeignet ist. Dabei werden die Mausräder des Wirtssystems benutzt
  • Außerdem befindet sich im Archiv ein Archiv WEIFFEL.zip. Darin ein weiterer Treiber für das EIFFEL-Tastatur-Interface. Zur Verfügung gestellt von RGF-Software / Rüdiger Solbach

XaAES ist ein freier GEM-/MULTITOS-Ersatz, der auf MiNT aufsetzt. Und seit es ein Kernel-Modul ist, ist es quasi Bestandteil von MiNT. XaAES ist das erste AES, das Mauswheels unterstützt (seit dem Release vom 1. November 2004). Leider haben sich die XaAES-Entwickler nicht um MWheel geschert und haben alles ganz anders gemacht.

Doch ich bin für alles offen. Also habe ich MWheel zu XaAES kompatibel gemacht. Außerdem habe ich eine spezielles Mwheel für XaAES (xaMWheel) entwickelt. Damit konnten dann alle vorhandenen Hardware-Module auch mit XaAES benutzt werden.

Wenn dich Einzelheiten interessieren, dann kannst du mehr erfahren.

  • Die Emulation des 2. Rades (z.B. für horizontales scrollen) wird nicht mehr standardmäßig mit der CNTRL–Taste bestimmt sondern mit der ALT–Taste. Eine Umstellung auf den Old–Style (also mit CNTRL) ist aber immer noch möglich.
  • evnt_multi erhält den neuen Ereignistyp MU_WHEEL (0x40). Ist MU_WHEEL gesetzt, dann wird beim Eintreffen von WHEEL–Ereignisse in int_out[4] die Radnummer und int_out[6] die Drehweite gemeldet. MWheel sorgt dafür, dass Button– und Wheel–Ereignisse nicht gemeinsam gemeldet werden. Wie bereits beim erweiterten evnt_multi (evnt_wulti) kann auch das MU_WHEEL–Ereignis per wind_update(BEG_MCNTRL) eingefangen werden.
  • Ohne evnt_wulti bzw. ohne MU_WHEEL bekommen Fenster wie bisher WM_ARROWED Nachrichten. Mit gedrückter SHIFT–Taste wird jetzt seitenweise (WA_xxPAGE) gescrollt.
    Im Gegensatz zu XaAES kann MWheel so eingestellt werden, dass nur WM_ARROWED Ereignisse verschickt werden, wenn das Fenster unter der Maus mindesten einen SLIDER oder ARROW hat. Anderenfalls werden dann Cursor-Tasten simuliert.
  • per wind_set(wi_handle, WF_WHEEL (40), wi_sw1, wi_sw2, ...) kann für ein Fenster (wi_handle!=0) bzw. für alle künftigen Fenster der Applikation (wi_handle=0) eine erweiterte Wheel–Behandlung eingeschaltet (wi_sw1=1) bzw. ausgeschaltet (wi_sw1=0) werden. Wenn die erweiterte Wheel–Behandlung eingeschaltet (wi_sw1=1) ist, dann wird mit wi_sw2 der Modus festgelegt (die Simulation der Cursor-Tasten wird in diesem Fall deaktiviert).
    Bisher existieren 3 Modi:
    • WHL_RAWWHEEL (wi_sw2 = 0)
      Wenn WHL_RAWWHEEL gewählt wird, dann wird beim Eintreffen von Wheelereignissen eine WM_WHEEL–Message verschickt:
      Message[0] = WM_WHEEL (345)
      Message[1] = ID des Senders
      Message[2] = ...
      Message[3] = Fenster Handle
      Message[4] = Maus X
      Message[5] = Maus Y
      Message[6] = Status der Umschalttasten
      Message[7] = Wheel–Info
      Wheel–Info:
      • Bits 15–12 Wheel ID
      • Bits 11–8 Richtung und Orientierung: Up (0); Down (1); Left (2); Right(3) keine Zuordnung (15)
      • Bits 7–0 Drehweite
      MWheel benutzt Rad-1 für Up/Down und Rad-2 für Left/Right.
      Die Drehweite ist, unabhängig von den Bits 8–11, immer mit Vorzeichen behaftet (XaAES und MWheel).
    • WHL_ARROWWHEEL (wi_sw2 = 1) (Dieser Modus standardmäßig aktiv)
      Bei WHL_ARROWWHEEL wird eine erweiterte ARROWED–Nachrichten verschickt:
      Message[0] = WM_ARROWED (24)
      Message[1] = ID des Senders
      Message[2] = ...
      Message[3] = Fenster Handle
      Message[4] = HI–Byte Drehweite / LO–Byte WA_xxxxxx & 0x07
      Message[5] = Maus X
      Message[6] = Maus Y
      Message[7] = Status der Umschalttasten
    • WHL_ SLDRWHEEL (wi_sw2 = 2)
      Ich bin ganz ehrlich. Ich habe nicht genau verstanden, was dieser Modus genau macht. Daher wird der Modus SLDRWHEEL von MWheel nicht unterstützt.
  • per wind_get(wi_handle, WF_WHEEL (40), wi_sw1, wi_sw2, ...) kann die für ein Fenster (wi_handle!=0) bzw. die für alle künftigen Fenster der Applikation (wi_handle=0) eingestellte Wheel–Behandlung erfragt werden.

MWheel und Trapper: MWheel benutzt Trapper von Manfred Lippert um sich in das System zu hängen. Unter bestimmten Umständen benötigt Trapper Starthilfe für Trapper mehr. Warum Starthilfe? Unter bestimmten Umständen kann es passieren, dass Trapper durch andere Programme (wie z.B. MiNT oder NVDI unter TOS) außer Gefecht gesetzt wird. MWheel enthielt bisher eine Starthilfe, die in einem solchen Fall den Trapper wieder reanimiert. Unter MiNT und XaAES halft aber auch dies nicht mehr. Jetzt musste ein eigenes Starthilfe–Programm her. Dieses Starthilfe–Programm heißt “xaTrapper.prg” und ist auch im MWheel-Packet enthalten.Die Weiterentwicklung wurde völlig eingestellt.

Wheelan.mwx das Milan-Modul

Wheelan.mwx: Der Milan war ein ambitioniertes Hardwareprojekt um die Computer-Reihe, die mit dem ATARI ST begonnen hat, fortzusetzen. Die MILAN-Computersystems GbR hat es geschafft einen Computer zu entwickeln, der sowohl moderne Hardware verwendete als auch TOS-kompatible war. Eine Maus fand über eine moderne PS/2-Schnittstelle Anschluss. Auch für den Milan gibt es ein Treiber-Modul. Da die Entwicklung eine wilde Odyssee war, konnte man dieses Modul nur extra kaufen und war nicht im MWheel-Archiv enthalten. Da ich keinen Milan hatte programmierte ich blind. Ich hatte Hilfe von eine Milan-Besitzer. Unzählige Modulversionen, meist Fehlversuche, habe ich ihm geschickt. Bis endlich eine zufriedenstellende lauffähige Version herausgekommen war. Leider weiß ich nicht mehr, wem die helfende Hand gehörte (wenn du das liest: melde dich mal). Auch Wheelan ist mittlerweile Freeware und kann heruntergeladen werden: wheelan.zip.