Die Abläufe bei der Aktivierung des TSR-Programms bezeichnet man in der Sprache der Informatiker als einen Kontextwechsel. Zum Kontext, oder einfacher gesagt zur Umgebung eines Programms zählen dabei alle Informationen, die zum Betrieb des Programms benötigt werden. Dazu zählen zum Beispiel der Inhalt der Prozessor-Register, wichtige Informationen des Betriebssystems, aber auch der vom Programm belegte Speicher. Um letzteren muß man sich beim Kontextwechsel in TSR-Programmen jedoch nicht kümmern, weil ein TSR-Programm bei seiner Installation als resident markiert wird und der von ihm belegte Speicher vom Betriebssystem deshalb nicht mehr an andere Programme vergeben wird.
Die Prozessor-Register, allen voran die Segmentregister, müssen jedoch mit den Werten geladen werden, die das TSR-Programm bei seiner Ausführung erwartet. Dazu sind sie bei der Installation des TSR-Programms in interne Variablen gespeichert worden und können nun mit Hilfe dieser Variablen wieder restauriert wrden. Da der Inhalt dieser, aber auch der Inhalt aller anderen Register bei der Ausführung des TSR-Programms verändert wird, müssen sie zuvor jedoch gesichert werden, da sie zum Kontext des unterbrochenen Programms gehören und bei seiner Wiederaufnahme nicht verändert worden sein dürfen.
Gleiches gilt für die kontextabhängigen Betriebssysteminformationen, wobei für DOS hier lediglich der PSP (Program Segment Prefix) des Programms und der DTA (Disk Transfer Area) von Bedeutung ist. Die Adressen beider Strukturen müssen bei der Installation des TSR-Programms ermittelt, gespeichert und beim Kontextwechsel zum TSR-Programm dann wieder gesetzt wrden. Nicht vergessen darf man hier natürlich die Adresse des PSP und der DTA des unterbrochenen Programms vor dem Kontextwechsel zum TSR-Programm zu sichern, damit sie nach dessen Beendigung wieder auf ihren ursprünglichen Wert zurückgesetzt werden können.
Während die Adresse des DTA mit Hilfe zweier DOS-Funktionen gesetzt (Funktion 1Ah) und ermittelt (Funktion 2Fh) werden kann, existieren entsprechend dokumentierte Funktonen für den PSP nicht in allen DOS-Versionen. Zwar gibt es ab der DOS-Version 3.0 die dokumentierte Funktion 62h, mit der die Adresse des aktuellen PSP ermittelt werden kann, doch fehlt weiterhin eine Funktion, mit der diese Adresse gesetzt werden kann. Im Bereich der undokumentierten Funktionen finden sich jedoch die benötigten Funktionen bereits seit der DOS-Version 2.0. Es handelt sich dabei um die Funktion 50h (Adresse des PSP sezten) und um die Funktion 51h (Adresse des PSP ermitteln).
Eine letzte Vorsichtsmaßnahme muß in bezug auf die Aktivierung des Programms über den Interrupt 28h getroffen werden. Geht die Aktivierung von diesem Interrupt aus, wird sehr wohl eine aktive DOS-Funktion unterbrochen, deren Stack-Inhalt nicht zerstört werden darf. Aus diesem Grund werden generell die obersten 64 Words vom aktuellen Stack geholt und auf dem Stack des TSR-Programms gesichert. Damit ist der Kontextwechsel zum TSR-Programm vollzogen, und das TSR-Programm kann gestartet werden.
Von diesem Moment an kann das TSR-Programm als ganz normales Programm betrachtet werden, das beliebige DOS- und BIOS-Funktionen aufrufen darf. Von den vielen Gegenspielern innerhalb des Systems ist jetzt nur noch das Vordergrundprogramm übrig, mit dem sich das TSR-Programm insofern arrangieren muß, als daß es seinen Bildschirminhalt nicht zerstören bzw. bei seiner Beendigung nicht verändert hinterlassen darf.
|