•  Back 
  •  MagiC Mac-Spezifika 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
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.