| Zeile 22: | Zeile 22: | ||
Es ist auch nicht unüblich, BIOS- oder DOS-Funktionen zu "überladen", indem der passende IVT-Eintrag auf eine Funktion des TSR-Programms geändert wird. Besonders in diesen Fällen wird das TSR-Programm sich den alten IVT-Eintrag merken und den ursprünglichen Interrupthandler aufrufen, sobald es seine Aufgabe erledigt hat (oder wenn es nur eine Unterfunktion des Interrupts ändert). Auf diese Weise können ganze Ketten von Interrupthandlern zu einem einzigen Interrupt entstehen. | Es ist auch nicht unüblich, BIOS- oder DOS-Funktionen zu "überladen", indem der passende IVT-Eintrag auf eine Funktion des TSR-Programms geändert wird. Besonders in diesen Fällen wird das TSR-Programm sich den alten IVT-Eintrag merken und den ursprünglichen Interrupthandler aufrufen, sobald es seine Aufgabe erledigt hat (oder wenn es nur eine Unterfunktion des Interrupts ändert). Auf diese Weise können ganze Ketten von Interrupthandlern zu einem einzigen Interrupt entstehen. | ||
| + | |||
| + | ==Speicherverwaltung== | ||
| + | Der konventionellen Speicher (also die untersten 640 kB die mal für alles reichen sollten) werden als einfach verkettete Liste verwaltet. DOS verwaltet diesen Speicher mit einer Granularität von 16 Bytes, dort Paragraph genannt, und auch mit einem Alignment von 16 Bytes. Vor jedem Speicherblock, egal ob ein belegter oder ein unbelegter, liegt immer ein 16 Byte großer Header der MCB (Memory Control Block). In diesem MCB ist neben einer Markierung vermerkt ob der folgende Block belegt oder frei ist, wem er gehört und wie groß er ist. Über die Größe erkennt man dann wo der nächste MCB liegt. Der letzte Block, dessen Ende normalerweise bei 0x9FFFF ist, wird mit einem Z markiert wogegen alle anderen MCBs mit einem M markiert werden. Die DOS-Speicherverwaltung ist in der Lage freie Blöcke zu teilen um einen neuen Block mit einer bestimmten Größe zu bekommen aber auch nebeneinander liegende freie Blöcke zusammenzufassen. Die Adresse des ersten MCB, der Start der verketteten Liste, bekommt man mit einen undokumentierten Trick über eine Int-21h-Funktion (dieser Trick funktioniert aber unter allen DOS-Versionen und weil er von so vielen Programmen benutzt wird konnte Microsoft ihn auch nicht mehr ändern, er gehört quasi zur offiziellen API dazu). Diese Liste ist in keinster Weise geschützt so das viele DOS-Programme da nach eigenem Gutdünken frei dran rum fummeln. | ||
==Zugriff auf hohen Speicher== | ==Zugriff auf hohen Speicher== | ||