https://de.wikipedia.org/w/index.php?action=history&feed=atom&title=TSR-Programm TSR-Programm - Versionsgeschichte 2025-05-06T06:54:30Z Versionsgeschichte dieser Seite in Wikipedia MediaWiki 1.44.0-wmf.27 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=246765095&oldid=prev Siegbert v2: …im Schach-Beispiel konnte man auch noch ein paar Artikel verlinken 2024-07-14T23:41:09Z <p>…im Schach-Beispiel konnte man auch noch ein paar Artikel verlinken</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. Juli 2024, 01:41 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 11:</td> <td colspan="2" class="diff-lineno">Zeile 11:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Bei Betriebssystemen mit änderbaren Sprungadressen im [[Random-Access Memory|RAM]]-Speicher (damals noch keine Selbstverständlichkeit) lenken residente Programme diese auf sich selbst um, erst danach erfolgt der Sprung zum Systemprozess, dessen Adresse aus der im RAM vor dem Umlenken gespeicherten Sprungadresse bekannt ist, welche sich das residente Programm merkt. Sie schalten sich also zwischen ein Anwendungsprogramm und den Systemprozess.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Bei Betriebssystemen mit änderbaren Sprungadressen im [[Random-Access Memory|RAM]]-Speicher (damals noch keine Selbstverständlichkeit) lenken residente Programme diese auf sich selbst um, erst danach erfolgt der Sprung zum Systemprozess, dessen Adresse aus der im RAM vor dem Umlenken gespeicherten Sprungadresse bekannt ist, welche sich das residente Programm merkt. Sie schalten sich also zwischen ein Anwendungsprogramm und den Systemprozess.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Dieselbe Möglichkeit kann auch bei einigen Homecomputern genutzt werden, deren gesamtes Betriebssystem, wie damals durchaus üblich, im Festspeicher ([[Festwertspeicher|ROM]]) untergebracht ist (so wie heute noch die [[Firmware]] des Systems). Sofern das Betriebssystem beim Systemstart Sprungvariablen in den RAM-Speicher schreibt, können diese Sprungadressen, wie zuvor beschrieben, geändert werden.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Dieselbe Möglichkeit kann auch bei einigen Homecomputern genutzt werden, deren gesamtes Betriebssystem, wie damals durchaus üblich, im Festspeicher ([[Festwertspeicher|ROM]]) untergebracht ist (so wie heute noch die [[Firmware]] des Systems). Sofern das Betriebssystem beim Systemstart Sprungvariablen in den RAM-Speicher schreibt, können diese Sprungadressen, wie zuvor beschrieben, geändert werden.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Wenn diese Sprungadressen direkt aus dem ROM aufgerufen werden, muss die Anwendung beim Start das eigentliche Betriebssystem vollständig ersetzen und die systemrelevanten Hintergrundprozesse im ROM selbst aufrufen, um sich selbst und das System lebensfähig zu halten. Ein anschauliches Beispiel dafür ist eine Stoppuhr im Schachprogramm des Sinclair ZX<del style="font-weight: bold; text-decoration: none;">-</del>Spectrum. Wenn der Spieler während eines Zuges den Assemblerteil stoppt, um den Spielstand unter einem <del style="font-weight: bold; text-decoration: none;">Basicprogramm</del> zwischenzuspeichern, gibt der Interpreter regelmäßig die Kontrolle an die Schachuhr zurück, die dadurch weiter läuft.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Wenn diese Sprungadressen direkt aus dem ROM aufgerufen werden, muss die Anwendung beim Start das eigentliche Betriebssystem vollständig ersetzen und die systemrelevanten Hintergrundprozesse im ROM selbst aufrufen, um sich selbst und das System lebensfähig zu halten. Ein anschauliches Beispiel dafür ist eine Stoppuhr im <ins style="font-weight: bold; text-decoration: none;">[[</ins>Schachprogramm<ins style="font-weight: bold; text-decoration: none;">]]</ins> des <ins style="font-weight: bold; text-decoration: none;">[[</ins>Sinclair ZX<ins style="font-weight: bold; text-decoration: none;"> </ins>Spectrum<ins style="font-weight: bold; text-decoration: none;">]]</ins>. Wenn der Spieler während eines Zuges den <ins style="font-weight: bold; text-decoration: none;">[[Assembler (Informatik)|</ins>Assemblerteil<ins style="font-weight: bold; text-decoration: none;">]]</ins> stoppt, um den <ins style="font-weight: bold; text-decoration: none;">[[Zwischenstand|</ins>Spielstand<ins style="font-weight: bold; text-decoration: none;">]]</ins> unter einem <ins style="font-weight: bold; text-decoration: none;">[[BASIC]]-Programm</ins> zwischenzuspeichern, gibt der Interpreter regelmäßig die Kontrolle an die <ins style="font-weight: bold; text-decoration: none;">[[</ins>Schachuhr<ins style="font-weight: bold; text-decoration: none;">]]</ins> zurück, die dadurch weiter läuft.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 18:</td> <td colspan="2" class="diff-lineno">Zeile 18:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|KiB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|KiB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein sehr beliebtes Beispiel ist der Timer-Interrupt (Interrupt 1Ch Timer) für eine residente Uhr. Dies geschieht fast genauso wie oben für Homecomputer beschrieben, aber mit Hilfe von Interrupts hardwaregesteuert und damit unabhängiger von Softwareschwächen. Damit laufen TSR-Programme wesentlich stabiler. Der unter DOS wahrscheinlich am häufigsten „verbogene“ Software-Interrupt ist der DOS-Funktions-Interrupt (Interrupt 21h DOS), der die meisten Betriebssystemfunktionen des DOS für andere Programme enthält. TSR-Programme können beispielsweise bestimmte Funktionen überwachen, aufzeichnen, verbieten oder auch im geladenen DOS eigentlich nicht vorhandene Funktionen hinzufügen.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein sehr beliebtes Beispiel ist der <ins style="font-weight: bold; text-decoration: none;">[[</ins>Timer<ins style="font-weight: bold; text-decoration: none;">]]</ins>-Interrupt (Interrupt 1Ch Timer) für eine residente Uhr. Dies geschieht fast genauso wie oben für Homecomputer beschrieben, aber mit Hilfe von Interrupts hardwaregesteuert und damit unabhängiger von Softwareschwächen. Damit laufen TSR-Programme wesentlich stabiler. Der unter DOS wahrscheinlich am häufigsten „verbogene“ Software-Interrupt ist der DOS-Funktions-Interrupt (Interrupt 21h DOS), der die meisten Betriebssystemfunktionen des DOS für andere Programme enthält. TSR-Programme können beispielsweise bestimmte Funktionen überwachen, aufzeichnen, verbieten oder auch im geladenen DOS eigentlich nicht vorhandene Funktionen hinzufügen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Gerätetreiber sind ein weiteres Anwendungsbeispiel für TSR-Programme. Einfache Beispiele hierfür sind DOS-Maustreiber (Hardware-Interrupt 14h – serielle Schnittstelle, sowie Software-Interrupt 33h – Mausfunktionen für DOS-Programme), sowie Tastatur- und [[Enhanced Graphics Adapter|EGA]]-Treiber, Treiber für den Erweiterungsspeicher usw.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Gerätetreiber sind ein weiteres Anwendungsbeispiel für TSR-Programme. Einfache Beispiele hierfür sind DOS-Maustreiber (Hardware-Interrupt 14h – <ins style="font-weight: bold; text-decoration: none;">[[</ins>serielle Schnittstelle<ins style="font-weight: bold; text-decoration: none;">]]</ins>, sowie Software-Interrupt 33h – Mausfunktionen für DOS-Programme), sowie Tastatur- und [[Enhanced Graphics Adapter|EGA]]-Treiber, Treiber für den Erweiterungsspeicher usw.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;!-- hilft so aber nicht immer [[Benutzer:Danimilkasahne|DMS]] 22:01, 29. Jul 2003 (CEST)//--&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;!-- hilft so aber nicht immer [[Benutzer:Danimilkasahne|DMS]] 22:01, 29. Jul 2003 (CEST)//--&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Beim Einrichten eines Computers sollte man aufgrund der besonderen Verhaltensweise von TSR-Programmen, die nur in den [[konventioneller Speicher|konventionellen Speicher]] geladen werden können, grundsätzlich größere TSR-Programme ''vor'' kleineren laden, da die Lücken, die ihre transienten Teile hinterlassen, möglicherweise von den kleineren TSR-Programmen ausgefüllt werden können – umgekehrt kann es passieren, dass die größeren nicht mehr in den Speicher passen, da die „Lücken“, die die transienten Teile der kleineren hinterlassen, nicht mehr für die größeren ausreichen. Manche TSRs vermeiden das Entstehen von Speicherlücken auch durch geschicktes Verschieben der zu installierenden Interruptvektoren.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Beim Einrichten eines Computers sollte man aufgrund der besonderen Verhaltensweise von TSR-Programmen, die nur in den [[konventioneller Speicher|konventionellen Speicher]] geladen werden können, grundsätzlich größere TSR-Programme ''vor'' kleineren laden, da die Lücken, die ihre transienten Teile hinterlassen, möglicherweise von den kleineren TSR-Programmen ausgefüllt werden können – umgekehrt kann es passieren, dass die größeren nicht mehr in den Speicher passen, da die „Lücken“, die die transienten Teile der kleineren hinterlassen, nicht mehr für die größeren ausreichen. Manche TSRs vermeiden das Entstehen von Speicherlücken auch durch geschicktes Verschieben der zu installierenden Interruptvektoren.</div></td> </tr> </table> Siegbert v2 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=246764920&oldid=prev Siegbert v2: Zwei Passagen mit Einzelnachweis versehen / Artikel verlinkt / Kleinigkeiten 2024-07-14T23:11:43Z <p>Zwei Passagen mit Einzelnachweis versehen / Artikel verlinkt / Kleinigkeiten</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. Juli 2024, 01:11 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 4:</td> <td colspan="2" class="diff-lineno">Zeile 4:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Entwicklungskonzepte für Hintergrundprozesse ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Entwicklungskonzepte für Hintergrundprozesse ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Möglich und effektiv wurde dies Ende der 1970er Jahre hauptsächlich durch die Entwicklung leistungsfähiger 16-Bit-<del style="font-weight: bold; text-decoration: none;">Prozessoren</del> und der [[Interrupt]]-Architektur, mit deren Hilfe eine Vielzahl von Geräten eines Rechners im regelmäßigen Takt relativ unabhängig vom Betriebssystem angesprochen werden können. Da eine Kommunikation zwischen diesen Geräten und dem Prozessor nicht ohne geeignete „Verwaltungsprogramme“ (Gerätetreiber) erfolgen kann, bot sich damit eine neue Möglichkeit, auch unabhängig von Hardwarekomponenten Programme zu schreiben, die im Speicher verbleiben und von den Interrupts immer wieder im Hintergrund aufgerufen werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Möglich und effektiv wurde dies Ende der 1970er Jahre hauptsächlich durch die Entwicklung leistungsfähiger <ins style="font-weight: bold; text-decoration: none;">[[</ins>16-Bit-<ins style="font-weight: bold; text-decoration: none;">Prozessor]]en</ins> und der [[Interrupt]]-Architektur, mit deren Hilfe eine Vielzahl von Geräten eines Rechners im regelmäßigen Takt relativ unabhängig vom Betriebssystem angesprochen werden können. Da eine Kommunikation zwischen diesen Geräten und dem Prozessor nicht ohne geeignete „Verwaltungsprogramme“ (<ins style="font-weight: bold; text-decoration: none;">[[</ins>Gerätetreiber<ins style="font-weight: bold; text-decoration: none;">]]</ins>) erfolgen kann, bot sich damit eine neue Möglichkeit, auch unabhängig von Hardwarekomponenten Programme zu schreiben, die im Speicher verbleiben und von den Interrupts immer wieder im Hintergrund aufgerufen werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Vorläufer bei Homecomputern ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Vorläufer bei Homecomputern ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Zwingend notwendig ist die Interrupt-Steuerung nicht. Bereits zuvor waren die meisten Betriebssysteme auf 8-<del style="font-weight: bold; text-decoration: none;">bit</del>-<del style="font-weight: bold; text-decoration: none;">Prozessoren</del> wie dem [[Zilog Z80]] mit modularen Prozessen z.&amp;nbsp;B. zur Speicher- und Bildverwaltung ausgestattet. Da diese über [[Sprunganweisung|Sprungadressen]] in regelmäßigem Rhythmus abgearbeitet werden, bieten sich für weitere Anwendungen grundsätzlich zwei Möglichkeiten, an diesem Konzept teilzunehmen (vereinfachte Beschreibung):</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Zwingend notwendig ist die Interrupt-Steuerung nicht. Bereits zuvor waren die meisten Betriebssysteme auf <ins style="font-weight: bold; text-decoration: none;">[[</ins>8-<ins style="font-weight: bold; text-decoration: none;">Bit</ins>-<ins style="font-weight: bold; text-decoration: none;">Prozessor]]en</ins> wie dem [[Zilog Z80]] mit modularen Prozessen z.&amp;nbsp;B. zur Speicher- und Bildverwaltung ausgestattet. Da diese über [[Sprunganweisung|Sprungadressen]] in regelmäßigem Rhythmus abgearbeitet werden, bieten sich für weitere Anwendungen grundsätzlich zwei Möglichkeiten, an diesem Konzept teilzunehmen (vereinfachte Beschreibung):</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Bei Betriebssystemen mit änderbaren Sprungadressen im [[Random-Access Memory|RAM]]-Speicher (damals noch keine Selbstverständlichkeit) lenken residente Programme diese auf sich selbst um, erst danach erfolgt der Sprung zum Systemprozess, dessen Adresse aus der im RAM vor dem Umlenken gespeicherten Sprungadresse bekannt ist, welche sich das residente Programm merkt. Sie schalten sich also zwischen ein Anwendungsprogramm und den Systemprozess.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Bei Betriebssystemen mit änderbaren Sprungadressen im [[Random-Access Memory|RAM]]-Speicher (damals noch keine Selbstverständlichkeit) lenken residente Programme diese auf sich selbst um, erst danach erfolgt der Sprung zum Systemprozess, dessen Adresse aus der im RAM vor dem Umlenken gespeicherten Sprungadresse bekannt ist, welche sich das residente Programm merkt. Sie schalten sich also zwischen ein Anwendungsprogramm und den Systemprozess.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 14:</td> <td colspan="2" class="diff-lineno">Zeile 14:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit [[Return Code|Rückgabewert]] möglich ab MS-DOS 2.0 oder ohne Rückgabewert und [[CP/M]] kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit [[Return Code|Rückgabewert]] möglich ab MS-DOS 2.0 oder ohne Rückgabewert und [[CP/M]] kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.<ins style="font-weight: bold; text-decoration: none;">&lt;ref name="Norton89"&gt;{{Literatur |Autor=Peter Norton, Richard Wilton |Titel=Peter Nortons Neues Programmierhandbuch für IBM PC &amp; PS/2 |Verlag=Vieweg+Teubner |Ort=Wiesbaden |Datum=1989 |Sprache=de |ISBN=3322938522 |Kapitel=Kapitel 15: DOS-Interrupts |Seiten=294f |Fundstelle=Interrupt 27H (dezimal 39): Beenden und im Speicher bleiben |Originaltitel=The New Peter Norton Programmer’s Guide to the IBM PC &amp; PS/2 |Originaljahr=1988 |Originalort=Redmond |Originalsprache=en |Übersetzer=Bert Gillert}}&lt;/ref&gt;</ins></div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|KiB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|KiB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 24:</td> <td colspan="2" class="diff-lineno">Zeile 24:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Beim Einrichten eines Computers sollte man aufgrund der besonderen Verhaltensweise von TSR-Programmen, die nur in den [[konventioneller Speicher|konventionellen Speicher]] geladen werden können, grundsätzlich größere TSR-Programme ''vor'' kleineren laden, da die Lücken, die ihre transienten Teile hinterlassen, möglicherweise von den kleineren TSR-Programmen ausgefüllt werden können – umgekehrt kann es passieren, dass die größeren nicht mehr in den Speicher passen, da die „Lücken“, die die transienten Teile der kleineren hinterlassen, nicht mehr für die größeren ausreichen. Manche TSRs vermeiden das Entstehen von Speicherlücken auch durch geschicktes Verschieben der zu installierenden Interruptvektoren.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Beim Einrichten eines Computers sollte man aufgrund der besonderen Verhaltensweise von TSR-Programmen, die nur in den [[konventioneller Speicher|konventionellen Speicher]] geladen werden können, grundsätzlich größere TSR-Programme ''vor'' kleineren laden, da die Lücken, die ihre transienten Teile hinterlassen, möglicherweise von den kleineren TSR-Programmen ausgefüllt werden können – umgekehrt kann es passieren, dass die größeren nicht mehr in den Speicher passen, da die „Lücken“, die die transienten Teile der kleineren hinterlassen, nicht mehr für die größeren ausreichen. Manche TSRs vermeiden das Entstehen von Speicherlücken auch durch geschicktes Verschieben der zu installierenden Interruptvektoren.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein weit verbreitetes Hilfsprogramm, das nach dem TSR-Prinzip arbeitete, war [[SideKick (Software)|SideKick]], mit dem es möglich wurde, Ausdrucke im Querformat auf das Papier zu bringen, auch wenn weder das jeweilige [[Anwendungsprogramm]] noch sein Druckertreiber diese Option anboten.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein weit verbreitetes Hilfsprogramm, das nach dem TSR-Prinzip arbeitete, war [[SideKick (Software)|SideKick]], mit dem es möglich wurde, Ausdrucke im Querformat auf das Papier zu bringen, auch wenn weder das jeweilige [[Anwendungsprogramm]] noch sein Druckertreiber diese Option anboten.<ins style="font-weight: bold; text-decoration: none;">&lt;ref name="Norton89" /&gt;</ins></div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> </tr> </table> Siegbert v2 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=245531441&oldid=prev Siegbert v2: Belege / Kommentar auf Diskussionsseite verschoben 2024-06-01T09:13:36Z <p>Belege / Kommentar auf Diskussionsseite verschoben</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 1. Juni 2024, 11:13 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 1:</td> <td colspan="2" class="diff-lineno">Zeile 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein '''TSR-Programm''' (im deutschsprachigen Raum oft ''speicherresidentes Programm'') ist ein [[PC-kompatibles DOS|DOS]]-Programm, das nach Ausführung weiterhin im Speicher verbleibt und bei Bedarf erneut aufgerufen werden kann.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein '''TSR-Programm''' (im deutschsprachigen Raum oft ''speicherresidentes Programm'') ist ein [[PC-kompatibles DOS|DOS]]-Programm, das nach Ausführung weiterhin im Speicher verbleibt und bei Bedarf erneut aufgerufen werden kann.<ins style="font-weight: bold; text-decoration: none;">&lt;ref&gt;{{Internetquelle |url=https://www.pcmag.com/encyclopedia/term/tsr |titel=Definition of TSR |werk=[[PC Magazine]] |hrsg=[[Ziff Davis]] |sprache=en |abruf=2024-06-01}}&lt;/ref&gt;</ins></div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Abkürzung ''TSR'' stammt aus dem [[Disk Operating System|DOS]]-Umfeld und steht für „{{lang|en|Terminate and Stay Resident}}“. Das Konzept der [[Speicherresidenz]] wurde als Vorläufer zu späteren [[Multitasking]]-Anwendungen entwickelt, damit bestimmte Aufgaben (Uhr, Treiber, Systemdienste) permanent als [[Hintergrundprozess]] ablaufen können, oder schlicht, um Funktionalität des Betriebssystems zu erweitern oder zu ersetzen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Abkürzung ''TSR'' stammt aus dem [[Disk Operating System|DOS]]-Umfeld und steht für „{{lang|en|Terminate and Stay Resident}}“. Das Konzept der [[Speicherresidenz]] wurde als Vorläufer zu späteren [[Multitasking]]-Anwendungen entwickelt, damit bestimmte Aufgaben (Uhr, Treiber, Systemdienste) permanent als [[Hintergrundprozess]] ablaufen können, oder schlicht, um Funktionalität des Betriebssystems zu erweitern oder zu ersetzen.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 27:</td> <td colspan="2" class="diff-lineno">Zeile 27:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* <del style="font-weight: bold; text-decoration: none;">[</del>https://web.archive.org/web/20170107002933/http://ece.wpi.edu/~wrm/Courses/EE3803/Labs/roehrl.html <del style="font-weight: bold; text-decoration: none;">Interrupts</del> <del style="font-weight: bold; text-decoration: none;">and</del> <del style="font-weight: bold; text-decoration: none;">DOS system programming] &lt;small&gt;(englisch; Memento auf archive.org)&lt;/small&gt;</del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* <ins style="font-weight: bold; text-decoration: none;">{{Internetquelle |autor=Gerhard Roehrl |url=http://ece.wpi.edu/~wrm/Courses/EE3803/Labs/roehrl.html |titel=8086/8088 Interrupts and DOS system programming |sprache=en |archiv-url=</ins>https://web.archive.org/web/20170107002933/http://ece.wpi.edu/~wrm/Courses/EE3803/Labs/roehrl.html <ins style="font-weight: bold; text-decoration: none;">|archiv-datum=2017-01-07</ins> <ins style="font-weight: bold; text-decoration: none;">|abruf=2024-06-01</ins> <ins style="font-weight: bold; text-decoration: none;">|abruf-verborgen=ja}}</ins></div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>== Einzelnachweise ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>&lt;!-- das geht schon alles mit io.sys, msdos.sys und command.com - dem MINI-DOS System [[Benutzer:Danimilkasahne|DMS]] 22:01, 29. Jul 2003 (CEST)</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>&lt;references /&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Für jedes I/O-Gerät wird ein Treiber benötigt. Immer benötigt werden die folgenden Treiber für Systemgeräte:</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>{|</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| CON || Console = Tastatur + Bildschirm</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| AUX || erste serielle Schnittstelle=COM1</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| PRN || erste parallele Schnittstelle=LPT1</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| CLOCK$ || Systemuhr (Timer)</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| A: - C: || Disketten-/Plattentreiber</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| LPT1 || erste parallele Schnittstelle</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| LPT2 || zweite parallele Schnittstelle</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| LPT3 || dritte parallele Schnittstelle</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| COM1 || erste serielle Schnittstelle</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| COM2 || zweite serielle Schnittstelle</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| COM3 || dritte serielle Schnittstelle</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|-----</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>| COM4 || vierte serielle Schnittstelle</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|}</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>//--&gt;</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{DEFAULTSORT:Tsr-Programm}}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{DEFAULTSORT:Tsr-Programm}}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:Softwarearchitektur]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:Softwarearchitektur]]</div></td> </tr> </table> Siegbert v2 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=245530104&oldid=prev Siegbert v2: Rückgabewert verlinkt 2024-06-01T08:32:17Z <p>Rückgabewert verlinkt</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 1. Juni 2024, 10:32 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 14:</td> <td colspan="2" class="diff-lineno">Zeile 14:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert möglich ab MS-DOS 2.0 oder ohne Rückgabewert und [[CP/M]] kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit <ins style="font-weight: bold; text-decoration: none;">[[Return Code|</ins>Rückgabewert<ins style="font-weight: bold; text-decoration: none;">]]</ins> möglich ab MS-DOS 2.0 oder ohne Rückgabewert und [[CP/M]] kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|KiB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|KiB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> </tr> </table> Siegbert v2 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=245270222&oldid=prev 93.229.175.119: /* Die TSR-Programme unter DOS */ Einheit 2024-05-24T09:44:16Z <p><span class="autocomment">Die TSR-Programme unter DOS: </span> Einheit</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 24. Mai 2024, 11:44 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 16:</td> <td colspan="2" class="diff-lineno">Zeile 16:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert möglich ab MS-DOS 2.0 oder ohne Rückgabewert und [[CP/M]] kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert möglich ab MS-DOS 2.0 oder ohne Rückgabewert und [[CP/M]] kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|<del style="font-weight: bold; text-decoration: none;">KB</del>]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|<ins style="font-weight: bold; text-decoration: none;">KiB</ins>]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein sehr beliebtes Beispiel ist der Timer-Interrupt (Interrupt 1Ch Timer) für eine residente Uhr. Dies geschieht fast genauso wie oben für Homecomputer beschrieben, aber mit Hilfe von Interrupts hardwaregesteuert und damit unabhängiger von Softwareschwächen. Damit laufen TSR-Programme wesentlich stabiler. Der unter DOS wahrscheinlich am häufigsten „verbogene“ Software-Interrupt ist der DOS-Funktions-Interrupt (Interrupt 21h DOS), der die meisten Betriebssystemfunktionen des DOS für andere Programme enthält. TSR-Programme können beispielsweise bestimmte Funktionen überwachen, aufzeichnen, verbieten oder auch im geladenen DOS eigentlich nicht vorhandene Funktionen hinzufügen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein sehr beliebtes Beispiel ist der Timer-Interrupt (Interrupt 1Ch Timer) für eine residente Uhr. Dies geschieht fast genauso wie oben für Homecomputer beschrieben, aber mit Hilfe von Interrupts hardwaregesteuert und damit unabhängiger von Softwareschwächen. Damit laufen TSR-Programme wesentlich stabiler. Der unter DOS wahrscheinlich am häufigsten „verbogene“ Software-Interrupt ist der DOS-Funktions-Interrupt (Interrupt 21h DOS), der die meisten Betriebssystemfunktionen des DOS für andere Programme enthält. TSR-Programme können beispielsweise bestimmte Funktionen überwachen, aufzeichnen, verbieten oder auch im geladenen DOS eigentlich nicht vorhandene Funktionen hinzufügen.</div></td> </tr> </table> 93.229.175.119 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=245270210&oldid=prev 93.229.175.119: /* Die TSR-Programme unter DOS */ Form 2024-05-24T09:43:50Z <p><span class="autocomment">Die TSR-Programme unter DOS: </span> Form</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 24. Mai 2024, 11:43 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 16:</td> <td colspan="2" class="diff-lineno">Zeile 16:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert möglich ab MS-DOS 2.0 oder ohne Rückgabewert und [[CP/M]] kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert möglich ab MS-DOS 2.0 oder ohne Rückgabewert und [[CP/M]] kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS<del style="font-weight: bold; text-decoration: none;">-Computern</del> immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein sehr beliebtes Beispiel ist der Timer-Interrupt (Interrupt 1Ch Timer) für eine residente Uhr. Dies geschieht fast genauso wie oben für Homecomputer beschrieben, aber mit Hilfe von Interrupts hardwaregesteuert und damit unabhängiger von Softwareschwächen. Damit laufen TSR-Programme wesentlich stabiler. Der unter DOS wahrscheinlich am häufigsten „verbogene“ Software-Interrupt ist der DOS-Funktions-Interrupt (Interrupt 21h DOS), der die meisten Betriebssystemfunktionen des DOS für andere Programme enthält. TSR-Programme können beispielsweise bestimmte Funktionen überwachen, aufzeichnen, verbieten oder auch im geladenen DOS eigentlich nicht vorhandene Funktionen hinzufügen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein sehr beliebtes Beispiel ist der Timer-Interrupt (Interrupt 1Ch Timer) für eine residente Uhr. Dies geschieht fast genauso wie oben für Homecomputer beschrieben, aber mit Hilfe von Interrupts hardwaregesteuert und damit unabhängiger von Softwareschwächen. Damit laufen TSR-Programme wesentlich stabiler. Der unter DOS wahrscheinlich am häufigsten „verbogene“ Software-Interrupt ist der DOS-Funktions-Interrupt (Interrupt 21h DOS), der die meisten Betriebssystemfunktionen des DOS für andere Programme enthält. TSR-Programme können beispielsweise bestimmte Funktionen überwachen, aufzeichnen, verbieten oder auch im geladenen DOS eigentlich nicht vorhandene Funktionen hinzufügen.</div></td> </tr> </table> 93.229.175.119 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=245270163&oldid=prev 93.229.175.119: /* Die TSR-Programme unter DOS */ interwiki link 2024-05-24T09:42:09Z <p><span class="autocomment">Die TSR-Programme unter DOS: </span> interwiki link</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 24. Mai 2024, 11:42 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 14:</td> <td colspan="2" class="diff-lineno">Zeile 14:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert möglich ab MS-DOS 2.0 oder ohne Rückgabewert und CP/M kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert möglich ab MS-DOS 2.0 oder ohne Rückgabewert und <ins style="font-weight: bold; text-decoration: none;">[[</ins>CP/M<ins style="font-weight: bold; text-decoration: none;">]]</ins> kompatibel über Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS-Computern immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS-Computern immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> </tr> </table> 93.229.175.119 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=245270124&oldid=prev 93.229.175.119: /* Die TSR-Programme unter DOS */ Formulierung. Das Programm muss für int21h geschrieben sein. 2024-05-24T09:40:30Z <p><span class="autocomment">Die TSR-Programme unter DOS: </span> Formulierung. Das Programm muss für int21h geschrieben sein.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 24. Mai 2024, 11:40 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 14:</td> <td colspan="2" class="diff-lineno">Zeile 14:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert ab MS-DOS 2.0 oder ohne Rückgabewert und CP/M kompatibel <del style="font-weight: bold; text-decoration: none;">nur</del> Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert<ins style="font-weight: bold; text-decoration: none;"> möglich</ins> ab MS-DOS 2.0 oder ohne Rückgabewert und CP/M kompatibel <ins style="font-weight: bold; text-decoration: none;">über</ins> Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS-Computern immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS-Computern immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> </tr> </table> 93.229.175.119 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=245270097&oldid=prev 93.229.175.119: /* Die TSR-Programme unter DOS */ Formulierung 2024-05-24T09:39:17Z <p><span class="autocomment">Die TSR-Programme unter DOS: </span> Formulierung</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 24. Mai 2024, 11:39 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 14:</td> <td colspan="2" class="diff-lineno">Zeile 14:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert ab MS-DOS 2.0 oder<del style="font-weight: bold; text-decoration: none;"> einfach</del> ohne Rückgabewert und CP/M kompatibel nur Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch mit Rückgabewert ab MS-DOS 2.0 oder ohne Rückgabewert und CP/M kompatibel nur Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS-Computern immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS-Computern immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> </tr> </table> 93.229.175.119 https://de.wikipedia.org/w/index.php?title=TSR-Programm&diff=245270088&oldid=prev 93.229.175.119: /* Die TSR-Programme unter DOS */ Beleg: Rolf Browns Interrupt List 2024-05-24T09:38:57Z <p><span class="autocomment">Die TSR-Programme unter DOS: </span> Beleg: Rolf Browns Interrupt List</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 24. Mai 2024, 11:38 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 14:</td> <td colspan="2" class="diff-lineno">Zeile 14:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Die TSR-Programme unter DOS ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch oder einfach nur Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein TSR-Programm wird geladen und, vorerst wie jedes normale Programm, abgearbeitet. Normalerweise beendet sich ein DOS-Programm durch Aufruf der DOS-Betriebssystemfunktion (Teil des [[Softwareinterrupt|Software]]-[[Interrupt]]s 21h) Interrupt 21h, Funktion 4Ch<ins style="font-weight: bold; text-decoration: none;"> mit Rückgabewert ab MS-DOS 2.0</ins> oder einfach<ins style="font-weight: bold; text-decoration: none;"> ohne Rückgabewert und CP/M kompatibel</ins> nur Interrupt 20h. DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27h oder Interrupt 21h, Funktion 31h. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS-Computern immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS-Computern immer im ersten [[Byte|KB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.</div></td> </tr> </table> 93.229.175.119