•  Back 
  •  Der Cookie von MagiC Mac 
  •  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.11.19  stackLoad                                              TOS

stackLoad aktiviert einen neuen CPU-Stack (A7).

Dies ist dann nötig, wenn aus einem Mac-Kontext, bei dem ein 
beliebiger CPU-Stack aktiv ist, eine Routine im ATARI-Kontext 
aufgerufen werden soll, also, bevor ein Modus-Wechsel mit "modeAtari" 
erfolgt. Das Wechseln auf einen anderen Stack ist dann nötig, weil 
evtl. der Bereich, den A7 gerade benutzt, durch den Wechsel zum 
Atari-Modus ausgeblendet wird und es dann zu einem CPU-Stillstand käme 
(siehe auch Kap. "Interrupt-Handler unter MagiC Mac").

Anstatt einfach selbst den A7 azf den neuen Stack zu setzen, sollte 
'stackLoad' benutzt werden. Diese Funktion tut im Grunde das selbe, 
jedoch informiert sie zusaetzlich das MacOS davon (durch Setzen 
weniger globaler Variablen). Damit wird erreicht, dass das MacOS 
waehrenddessen nicht den A7 periodisch überprüft. Denn sonst könnte es 
auf bestimmten MacOS-Versionen (vor 7.5 und wieder ab 7.5.3) zur 
Meldung eines Stack-Überlaufs durch das MacOS kommen, obwohl dies gar 
nicht der Fall ist.

Falls Virtual Memory aktiviert ist, wird hiermit außerdem erreicht, 
daß dieser Stack-Bereich nicht ausgelagert werden kann, was sonst u.U. 
einen Rechnerstillstand zur Folge haben kann.

Benutzung: In A0 ist ein Zeiger auf ein MemArea-Struktur (s.o.) zu 
übergeben. Darin muß der Zeiger auf den Beginn (niedrigste Adresse) 
des Stacks sowie seine Länge (beachte 'minStackSize'!) enthalten sein. 
Die Routine zerstört die Register A0 und A1 und setzt A7 auf den Wert 
von <MemArea.start+MemArea.length>.