Seit einer Woche habe ich eine neue Maus an meinen ST angschlossen, die komplett funktioniert, nur einen Nachteil hat: Ihr Kugeldurchmesser ist um einiges kleiner, so daß ich fast nur mit Fingerbewegungen den Pfeil über den ganzen Bildschirm bewegen kann. Bei der Original ATARI ST Maus mußte ich wenigstens meine Hand zwischen 5 und 10 cm über den Schreibtisch bewegen.
Bei einer zügigeren Mausbewegung (wie ich es von früher gewohnt bin) macht nun die neue Maus nicht mehr mit, der Pfeil wandert aus oder bleibt ganz stehen.
Um dieses Problem zu beheben, muß ich Verzögerungswerte für X und Y im TOS finden und ändern. Und genau das ist der Kern meines Problems: Wo stehen diese Werte im TOS ? Nun, solltet Ihr das Problem lösen können, wäre ich Euch unendlich dankbar.
(Robert Heinhaus, 8600 Augsburg)
Red.: Leider müssen wir ein weiteres Mal darauf hinweisen, daß es nicht sehr sinnvoll ist, bestimmte absolute Adressen im Betriebssystem zu ändern, da diese mit großer Wahrscheinlichkeit in der nächsten Betriebssystemversion nicht mehr an der gleichen Stelle sein werden. Da es für solche Probleme viel elegantere Lösungen gibt und wegen des vorhergenannten Grundes, vermeiden wir es, solche Adressen bekanntzugeben.
Aber nun zu Ihrem Problem: Im Betriebssystem gibt es Routinen, die die Bearbeitung von Joystick und Maus übernehmen. Die Adressen dieser Routinen sind ganz legal über die XBIOS-Routine KBDVBASEQ zu erfahren. Diese Funktion liefert einen Zeiger auf eine Tabelle, deren Inhalt die verschiedensten Zeiger, unter anderem auch einen auf die Mausroutine, enthält. Dieser Zeiger liegt 16 Bytes vom Anfang der Tabelle entfernt, ist also der fünfte Vektor. Diese Routine bekommt nun auf dem Stack - in dieser Reihenfolge - den Befehlscode mit Maustastenstatus, die relative X-Mausbewegung und die relative Y-Bewegung geliefert. Manipuliert man nun die relativen Mausbewegungen, indem man sie verdoppelt, und dann in die Originalroutine weiterspringt, so bewegt sich die Maus doppelt so schnell. Bei Ihrem Problem scheint es so zu sein, daß die Verschiebungen, die von Ihrer Maus kommen, einfach zu groß sind. Führt man eine Division der Werte durch, so müßte ihr Problem eigentlich gelöst sein. Ein ausprogrammiertes Beispiel, in der die Mausgeschwindigkeit verdoppelt wird, welches auch leicht zu ändern ist, finden Sie in der ST-Ecke der ST-COMPUTER-Ausgabe vom Februar 1988.
Liebe Freunde,
ein “Techniker’' der Firma ATARI erklärte mir auf meine Anfrage (während der CeBit in Hannover), daß es ohne weitere Änderungen möglich sei, die 20 MB-Festplatte gegen eine 40 MB-Platte zu tauschen. Das wäre natürlich ein tolles Ding, ich kann das aber so einfach nicht glauben. Die Beantwortung dieser Frage würde sicher einen großen Leserkreis interessieren.
(Frank Heinevetter, Celle)
Red.: Einige unserer Leser dürften die Antwort auf Ihre Frage schon wissen, denn genau dieses “Problem” sind wir im Mai dieses Jahres angegangen. Im Rahmen unseres im Dezember begonnenen Festplattenkurses wurde in der ST-Computer Mai 1988 ausführlich beschrieben, wie man aus einer 20MB-Festplatte (SH204 und SH205) eine 40MB-Festplatte macht. Sicherlich wäre es untertrieben “ohne weitere Änderungen” zu sagen, aber der Aufwand hält sich tatsächlich im engen Rahmen. Es ist aber in dieser Kolumne nicht möglich, wie Sie sicherlich verstehen werden, den Vorgang zu beschreiben.
Letzten Monat wurden wir gefragt, wie man eine Meßgenauigkeit von einer Millisekunde in GFA-Basic erreichen kann. Obwohl wir dieses Thema in näherer Zukunft noch einmal genauer betrachten wollen, möchten wir eine von unserem Leser Rainer Kracht eingeschickte Lösung nicht unveröffentlicht lassen. Hier nun der Brief:
Ein GFA-BASIC-Programm, das eine genaue Millisekunden-Uhr in der “toten Ecke” des VIDEO-RAM installiert, könnte zum Beispiel wie im Listing aussehen.
Die DO-Loop-Schleife zeigt, wie die Uhr gelesen wird. Mit der Korrektur hat es folgende Bewandtnis. Der Quarz des MFP macht in einer Millisekunde 2457,6 Schwingungen. Der am nächsten liegende Wert, auf den sich der TIMER-A-Interrupt-Vektor einstellen läßt, ist 2460. Die damit gestellte Uhr läuft damit etwas zu langsam. Der Korrekturfaktor ist gleich 24600/24576 oder einfacher 1024/ 1025. Um die Rechnung weiter zu vereinfachen, läßt sich 1025/1024 auch als 1+1/ 1024 schreiben.
(Rainer Kracht, 2085 Quickhorn)
Diese Routine unserer Leser (vielen Dank) müßte reichen, um sie vernünftig einsetzen zu können. Trotzdem werden wir uns in einem der nächsten Monate noch einmal ausführlich mit diesem Thema beschäftigen.
' millisec, R. Kracht, Cärtnerwiete 9, 2085 Quickborn, 29.5.88
Bild%=Xbios(2) ! Adresse des Bildschirmspeichers
Zeit%=Bild%+322000 ! Adresse der Timer-A-Interrupt-Routine
Uhr%=Zeit%+20 ! Adresse der Uhr
Lpoke Zeit%, &H8B90005 ! Anfang der Interrupt-Routine
Lpoke Zeit%+4, &HFFA8F !
Lpoke Zeit%+8, &H27CF3FF !
Dpoke Zeit%+12, &H52B9 !
Lpoke Zeit%+14, Uhr% ! Adresse der Uhr übergeben
Dpoke Zeit%+18, &H4E73 ! rte (Ende)
Lpoke Uhr%,0
A%=Xbios(31,0,2,246,L:Zeit%) ! Uhr starten
Do
Void Inp(2)
U=Lpeek (Uhr%) ! Uhr lesen
U=U+U/1024 ! Uhr korrigieren
U=Int(U+0.5) ! auf volle Millisekunden
Print U;" msec seit Uhrenstart"
Loop