MOS (Mouse Operating System) Anleitung Was ist das MOS? Das MOS wurde geschrieben, um eine hardwaretechnisch nicht geaenderte ATARI-ST-Maus an die ATARI-8-Bit-Computer anschliessen zu koennen. Dieses erfolgt ueber eine Ergaenzung des Betriebssystems. Jeder Programmierer (Anfaenger oder Fortgeschrittener) kann das MOS benutzen, ohne die Maschinensprache des 6502 zu kennen, man benutzt einfache Eingabe- und Ausgaberoutinen. Das MOS ist auf einem 130XE unter Benutzung von MAC/65 entstanden. Was bietet das MOS? Man kann einen Pfeil oder jede andere Form des Mauszeigers in jeder Grafikaufloesung kontrollieren. Man kann die Koordinaten (Text oder Grafik) des Mauszeigers abfragen. Man kann die Koordinaten des Mauszeigers voellig frei setzen. Man kann die Geschwindigkeit, mit der die Maus gelesen wird, einstellen. Man kann den Mauszeiger blinken lassen (mit einstellbarer Verzoegerung), um Aufmerksamkeit zu erregen. Man kann dem Mauszeiger jede Farbe geben oder ihn langsam die Farbe aendern lassen. Man kann jeden Speicherbereich benutzen, um die Daten des Mauszeigers abzulegen. Man kann einen Druck auf den Mausknopf als Tastendruck interpretieren lassen. Man kann seinen eigenen VBI an den VBI des MOS anhaengen. Der Speicherbereich, den das MOS benutzt, ist gesichert und das MOS wird nach einem RESET neu installiert. Das MOS belegt nur 2KB Speicherplatz und benutzt weder Page 6 oder andere freie Speicherbereiche. Um Programme zu beschleunigen, kann man das MOS in einen Schlafmodus versetzen; es wacht von selbst auf, wenn die Maus bewegt wird. Wann kann ich das MOS benutzen? Unter ATARI-BASIC, mit jedem DOS und in Maschinenspracheprogrammen. Das MOS kann auch unter ACTION!, TurboBASIC oder PASCAL arbeiten, aber da diese Programme alle eine andere Speicherbelegung aufweisen, muss das MOS in einem solchen Fall mit einer hoeheren Basisadresse assembliert werden. Diese Versionen und bzw. oder den Sourcecode des MOS bekommt man beim ABBUC e.V. gegen Einsendung einer Leerdiskette und Rueckporto (1,--DM) Wie bekommt man das MOS zum Laufen? Zuerst sollte man sich eine ST-Maus kaufen oder jemand, der einen ST hat, fragen, ob man seine Maus benutzen darf, um die MOS-Programme zu testen und die Ergebnisse zu sehen. Dann sollte man MOS.COM auf einer neuen DOS-2.5-Diskette in AUTORUN.SYS umbenennen und diese Diskette mit BASIC booten. Die Einschraenkungen bzw. die Probleme des MOS Wenn die Maus aktiv ist, kann man die SIO-Routine nicht benutzen, d.h. dass man die Diskettenlaufwerke bzw. den Drucker nicht ansprechen kann. Bevor man z.B. etwas abspeichern will, muss man das MOS ausschalten, dann abspeichern und anschliessend das MOS wieder aktivieren. Aufgrund der Interrupts, die unter dem MOS laufen (1000 pro Sekunde!), laeuft das Hauptprogramm langsamer. Schaltet man die Maus ab oder bringt man das MOS in den Schlafmodus, so laeuft das Hauptprogramm wieder mit der normalen Geschwindigkeit. Man darf die Basisadresse der Player-Missile-Daten nicht aendern, oder der Mauszeiger verschwindet. Unter ATARI-BASIC sollte man fuer PMBASE (dez. 54279, hex. $D407) den Wert 32 benutzen. Man sollte den Player Nummer 3 nicht benutzen. Waehrend das MOS aktiv ist, sollte man kein BASIC-Programm starten, zuerst muss man das MOS ausschalten oder RESET druecken. Wenn man die Displaylist aendert, sollte man auf jeden Fall dafuer sorgen, dass die richtige Anzahl von Leerzeilen (24) am Anfang benutzt wird, ansonsten sind die Mauskoordinaten falsch, wenn sie abgefragt werden. Weil fuer die Interrupts zwei Frequenzzaehler des POKEY benutzt werden, koennen die Soundkanaele 0 und 1 nicht benutzt werden. Natuerlich kann der Speicherbereich von Adresse 7420 bis zu MEMLO nicht benutzt werden. Aus elektrischen Gruenden kann der rechte Knopf der Maus nicht abgefragt werden. Aber man kann dieses Problem loesen, indem man ein bisschen in seiner Maus herumschnippelt und ein Kabel einloetet. Tut man das, so muss man in der richtigen Adresse PEEKen, weil das MOS selbst den rechten Knopf nicht unterstuetzt. Die Adresse fuer den LINKEN Knopf ist STRIG0 (dez. 644, hex. $284). Anm.d.Uebers.: Wird Port 1 verwendet, so ist die Adresse STRIG1 (dez. 645, hex. $285). Wie benutzt man die Faehigkeiten des MOS? Jedes Beispielkommando wird in ATARI-BASIC gegeben. OPEN #KANAL,12,GESCHWINDIGKEIT,"M:" KANAL kann jeden Wert von 1 bis 7 annehmen, aber sollte bereits ein Kanal zum Maustreiber geoeffnet sein, wird ein ERROR 201 ausgegeben. Das AUX-Byte GESCHWINDIGKEIT ist sehr nuetzlich, es bestimmt, wie oft die Maus in eine Richtung bewegt werden muss, bis der Mauszeiger darauf anspricht. D.h. je groesser GESCHWINDIGKEIT ist, umso langsamer bewegt sich der Mauszeiger. CLOSE #KANAL Hiermit verschwindet der Mauszeiger und die Interrupts einschliesslich des vom MOS verwendeten deferred VBI. GET #KANAL,X:GET #KANAL,Y Damit erhaelt man die X- und Y-Koordinate des Mauszeigers. Der erste GET-Befehl liefert die X-Koordinate und der zweite GET-Befehl die Y-Koordinate. Es ist ziemlich sinnvoll, immer zweimal einen GET-Befehl auszufuehren. Die Koordinaten werden in GRAPHICS-15- oder in GRAPHICS-0-Koordinaten uebergeben. Welcher dieser beiden Modi aktiv ist, wird mit einem XIO-Befehl bestimmt. PUT #KANAL,X:PUT #KANAL,Y Das funktioniert aehnlich dem GET-Befehl (zuerst die X-, dann die Y-Koordinate usw.), aber hier setzt man die Koordinaten des Mauszeigers. Auch hierfuer gilt die Umschaltung zwischen GRAPHICS-15- und GRAPHICS-0-Koordinaten. Die XIO-Befehle NB bedeutet nicht benutzt, K bedeutet Kanal. XIO 14,#K,GESCHWINDIGKEIT,NB,"M:" Laesst den Mauszeiger blinken. GESCHWINDIGKEIT bestimmt die Anzahl der 50stel Sekunden, die zwischen jedem Blinken vergehen. XIO 15,#K,VON,BIS,"M:" Bewirkt einen kontinuierlichen Farbwechsel. Die Farbe des Mauszeigers wird hierbei von der Farbe VON zur Farbe BIS hin veraendert. VON sollte kleiner sein als BIS, da das MOS nur aufwaerts zaehlt. XIO 16,#K,LOW,HIGH,"M:" Setzt die Adresse, ab der die Daten des Mauszeigers abgelegt sind. Diese Adresse kann jeden beliebigen sinnvollen Wert annehmen. XIO 17,#K,X,Y,"M:" Setzt den 'aktiven Punkt' innerhalb des Mauszeigers. Schaut man auf den Pfeil, so ist der aktive Punkt die Spitze des Pfeils. Waere der Mauszeiger ein Kreuz, z.B. innerhalb eines Malprogrammes, so waere der aktive Punkt in der Mitte des Kreuzes. Der aktive Punkt ist also der Punkt innerhalb des Mauszeigers, mit dem man etwas auf dem Bildschirm anklickt. Das MOS liefert als Mauszeigerkoordinaten die Koordinaten des aktiven Punktes zurueck. Jedesmal, wenn man einen neuen Mauszeiger aufbaut, sollte man dem MOS den neuen aktiven Punkt mitteilen, ansonsten sind die Mauszeigerkoordinaten sehr wahrscheinlich falsch! XIO 18,#K,NB,NB,"M:" Setzt das MOS und damit den Mauszeiger auf seine Ursprungswerte (defeault) zurueck. Dieser XIO-Befehl darf nur bei NICHT aktivem MOS ausgefuehrt werden, andernfalls wird ein ERROR 204 ausgegeben. XIO 19,#K,LAENGE,NB,"M:" Setzt die Laenge des Mauszeigers. XIO 20,#K,TASCODE,NB,"M:" Sobald der Mausknopf gedrueckt wurde, legt das MOS den Wert von TASCODE in der Speicherzelle CH (dez. 764, hex. $2FC) ab. Anm.d.Uebers.: In CH legt das (normale) Betriebssystem des XL den Wert einer gedrueckten Taste ab. Dieser Wert hat keinerlei Vebindung mit dem ATASCII- oder internen Code des XL. Hier hilft nur probieren, z.B. hat das A immer den TasCode 63. Mit diesem XIO-Befehl kann man eine einfache Abfrage realisieren: 10 OPEN #1,12,0,"M:" 20 OPEN #2,4,0,"K:" 30 XIO 20,#1,63,0,"M:" 40 GET #2,TASTE 50 ?TASTE In Zeile 40 wartet das BASIC-Programm solange, bis der Mausknopf gedrueckt wurde, waehrend der Mauszeiger selbst voll beweglich bleibt, da er interruptgesteuert ist. Mit dieser Methode muss man die Mauskoordinaten nicht immer lesen und vergleichen, sondern kann erst reagieren, wenn etwas angeklickt wurde, dann aber sofort. XIO 21,#K,LOW,HIGH,"M:" Hiermit kann man einen eigenen VBI an den des MOS anhaengen; das MOS benutzt den deferred VBI. Will man nun beide (das MOS und den eigenen VBI) benutzen, so kann man hiermit den eigenen VBI anhaengen. LOW und HIGH sind das Low- und Highbyte der Startadresse des VBIs, der uebrigens mit einem JMP $E462 (und nicht etwa mit einem RTS) enden muss. XIO 22,#K,PL3,NB,"M:" Wenn PL3 ungleich Null ist, so benutzt das MOS den Player 3 nicht mehr, so dass man ihn selbst nutzen kann. Wenn man den Mauszeiger nicht auf dem Schirm haben will, ist PL3 ebenfalls ungleich Null zu setzen. Anm.d.Uebers.: Das MOS loescht den Mauszeiger nicht selbst, sondern laesst ihn einfach stehen. Das MOS bleibt aber aktiv und laesst die Koordinaten des Mauszeigers mitlaufen, schaltet man also irgendwann wieder zurueck, so taucht der Mauszeiger meist ganz woanders wieder auf, wenn man die Maus zwischenzeitlich bewegt hat. Siehe auch XIO-Befehl 24. XIO 23,#K,PORT,NB,"M:" Schaltet den Joystickport, mit dem die Maus kontrolliert wird, um. PORT kann die Werte 0 und 1 annehmen, wobei Port 0 der vordere ist. Anm.d.Uebers.: Als Programmierer sollte man sich angewoehnen, nur Port 1 als Mausport zu verwenden, weil man sich und den Usern damit eine ganze Menge Umsteckerei zwischen Joystick und Maus erspart. XIO 24,#K,NB,NB,"M:" Loescht den Mauszeiger (eigentlich wird die Page fuer die Daten des Players 3 geloescht). Siehe auch XIO-Befehl 22. XIO 25,#K,LOW,HIGH,"M:" Hiermit wird festgelegt, wie oft das MOS die Maus liest. LOW und HIGH ergeben zusammen ein 16-Bit-Wort (TIMER), mit dem der Timer des POKEY geladen wird. Hierbei gilt: f=1.790.000/TIMER. Daraus folgt: Je kleiner TIMER, umso oefter wird die Maus gelesen und umso langsamer laeuft das Hauptprogramm. XIO 26,#K,MODUS,NB,"M:" Hiermit wird der Koordinatenmodus ausgewaehlt. MODUS kann die Werte 0 und 1 annehmen, wobei MODUS = 0 die GRAPHICS-15- und MODUS = 1 die GRAPHICS-0-Koordinaten auswaehlt. XIO 27,#K,MODUS,ZEIT,"M:" Selektiert den Schlafmodus des MOS. MODUS kann die Werte 0 und 1 annehmen, wobei MODUS = 1 den Schlafmodus aktiviert und MODUS = 0 den Schlafmodus ausschaltet. Im Schlafmodus schlaeft das MOS nach ZEIT VBIs ein, die Maus wird nicht mehr gelesen und das Hauptprogramm laeuft mit normaler Geschwindigkeit. Wird die Maus bewegt, wacht das MOS auf und ist wieder aktiv. Nach ZEIT VBIs schlaeft es wieder ein, wenn die Maus nicht mehr bewegt wird. Dieser XIO-Befehl darf nur bei NICHT aktivem MOS ausgefuehrt werden, andernfalls wird ein ERROR 204 ausgegeben. Die Fehlermeldungen des MOS Die Fehlernummern sind alle groesser als 200. ERROR 201: Der Maustreiber wird bereits benutzt, d.h. es wurde bereits ein anderer Kanal auf den Maustreiber geoeffnet. ERROR 202: Die Nummer des XIO-Kommandos ist dem MOS unbekannt. ERROR 203: Der aktive Punkt wurde ausserhalb des Mauszeigers gesetzt, d.h. dass die X-Koordinate groesser als 7 und bzw. oder die Y-Koordinate groesser als die Laenge des Mauszeigers ist (siehe auch XIO-Befehl 19). ERROR 204: Um dieses Kommando auszufuehren, muss der Maustreiber zuerst mit einem CLOSE-Befehl geschlossen werden. Dann kann man das Kommando ausfuehren und den Maustreiber wieder oeffnen. ERROR 206: Die Koordinaten, die gePUTtet wurden, liegen ausserhalb der Grenzen des Bildschirms, den das MOS benutzt. Rudy Haegeman. Uebersetzt und ergaenzt: Winfried Piegsda. Buchheim, den 12.08.90.