

Hoe een TSR ontwikkelen?

Hieronder volgt een zeer beknopte beschrijving van de structuur van een TSR
file, hoe deze aan te maken en waar een TSR programmeur rekening mee moet
houden.


De TSR file structuur

De .TSR file moet een bepaalde structuur om zo weinig mogelijk geheugen in
beslag te nemen. Hiervoor wordt de code van de TSR opgesplits in vijf stukken,
waarvan er aan het einde nog maar een in het geheugen achterblijft.

Om de globale gegevens over de TSR te weten te komen, begint iedere .TSR file
met een Header. De Header is alleen voor de TSRLOADER belangrijk en nadat de
gegevens ervan opgenomen zijn, wordt dit stuk weer weggegooid. Momenteel moet
de programeur de Header nog in zijn source opnemen. Later zal deze door de
linker zelf worden gegenereerd.

Na de Header volgt een tabel met alle adressen die aangepast moeten worden
om de TSR vanaf ieder adres te kunnen laten werken. Om deze tabel te genereren
is TSRLINK ontwikkelt. Deze koppelt de .REL output files van de compiler
tesamen tot de .TSR file met de REL tabel erin. Hoe deze tabel verder is
opgebouwd is niet zo interressant, de programmeur heeft er (gelukkig!) niets
mee te maken.

Het belangrijkste stuk van de TSR is de Code. In stuk staan de routines die
altijd in het geheugen aanwezig moeten zijn om de TSR goed te kunnen laten
werken. In dit stuk zitten naast de TSR code ook de routines om met de TSR
te kunnen communiceren en de vlak voor het verwijderen van de TSR nog even
wat zaken recht te zetten, de zogenaamde destructie routine(s).

Naast de Code is er ook een stuk met de initialisatie routine(s). Dit stuk
wordt door de loader, bij het inladen, achter de TSR geplakt en aangeroepen.

Als laatste kan er worden opgegeven welke hooks afgebogen moeten worden naar
de TSR. Een hook die afgebogen moet worden moet minimaal uit vijf bytes
bestaan. Na de uitvoer van de hook wordt de oude hook vanuit pagina 3, door
de TSR Manager, in pagina 3 uitgevoerd. De hooks worden pas geinitialiseerd
nadat het initialisatie stuk aangeroepen is.

Nog een keer de vijf stukken:

 - Header              - Informatie over de TSR
 - Rel-Tabel           - Aan te passen adressen
 - Code
   Bestaande uit: Code - Werkelijke code
                  Talk - Communicatie
                  Kill - Destructie routine
 - Init                - Initialisatie
 - Hooks               - Af te buigen hooks

In de bijgevoegde standaard TSR file zijn de vijf stukken ook terug te vinden.


Vlaggen bytes

De code en de initialisatie routines geven beide een vlaggenbyte terug aan
de TSR Manager. De initialisatie routine moet dit in register A doen. Momenteel
wordt dit byte nog niet gebruikt, maar moet wel 0 zijn na de initialisatie.
De code moet in A' een byte teruggeven. Hiervan is momenteel alleen bit 0
gedefinieerd: quitHook. Als dit bit gezet is, dan worden alle TSR die ook nog
aan dezelfde hooks hangen niet meer uitgevoerd. Dit lijkt op zich niet zo
handig, maar als er bijvoorbeeld twee TSR's aan de CMD hook hangen en de eerste
herkend het commando en voert het uit, dan hoeft de tweede TSR niet ook nog
eens te gaan zoeken, er kan rechtstreeks terug worden gekeerd.


Waar is al aan gedacht, maar nog niet beschikbaar

- De TSRLINKer moet meerdere rel-files in kunnen laden en deze kunnen koppelen.
  Het inladen kan ie al, alleen moet er nog een commandline uitsplits routine
  gemaakt worden.

- De TSRLINKer moet in .LIB files kunnen zoeken.

- De TSRLOADer moet meerdere TSR tegelijk in kunnen laden

- De TSRKILLer moet meerder TSR tegelijkertijd kunnen verwijderen.

