Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File14.1.10 Die Zusammenarbeit von MagiC und MacOS TOS MagiC Mac hängt sich direkt in alle Interrupt-Vektoren, die der Macintosh benutzt. Wenn MagiC läuft und ein Hardware-Interrupt auftritt, schaltet MagiC Mac die MMU zurück in den normalen Macintosh-Modus. Am Ende der IntrRoutine wird zurück in den Atari- Modus gewechselt und das unter MagiC laufende Programm fortgeführt. Solange der Mac-Modus aktiv ist, mischt sich MagiC Mac nicht weiter in die Intr-Bearbeitung ein, sondern nur, solange der Atari-Modus aktiv ist. Immer dann, wenn vom Mac-Modus zurück in den Atari-Modus gewechselt wird, wird noch überprüft, ob eine bestimmte Zeit verstrichen ist (in Ticks gemessen; ein Tick ist ca. 1/60s), um dann ggf. periodische Aufgaben zu erledigen. Diese werden hier Mac-Tasks genannt. Mac-Tasks erledigen u.a. folgende Dinge: ∙ Pollen der Mac-Events (Funktionen GetOSEvent bzw. WaitNextEvent). ∙ Auswerten von Befehl-Q und Befehl-W. ∙ Auswerten externer Apple-Events, z.B. Suspend/Resume (MagiC Mac in den Hintergrund schalten) und externes Beenden. ∙ Rechenzeitabgabe an andere Mac-Applikationen (durch WaitNextEvent). Die Entscheidung, ob zum Pollen der Events GetOSEvent oder WaitNextEvent (WNE) benutzt wird, kann über die Preferences und auch eine Cookie-Funktion eingestellt werden. Nur, wenn WNE benutzt wird, wird auch Rechenzeit an andere Mac-Applikationen abgegeben. Mac-Tasks dürfen nur ausgeführt werden, wenn sicher ist, daß gerade keine andere MacOS-Funktion bearbeitet wird, denn das MacOS ist nicht reentrant. Mac-Tasks werden deshalb nur dann ausgeführt, wenn alle folg. Bedingungen zutreffen: ∙ Nach der Unterbrechung (Interrupt oder Aufruf von mode_atari) wird der Atari-Modus aktiv sein und die Interrupt-Level-Maske ist Null, d.h, es ist kein anderer Interrupt in Bearbeitung (um dies sicherzustellen, muß in Intr-Handlern, die vom Mac-Modus in den Atari-Modus wechseln, intrLock korrekt benutzt werden, s.u.). ∙ Es wird gerade keine Routine im Mac-Kontext ausgeführt (callMacContext). ∙ MagiC Mac ist nicht dabei, sich zu beenden.