File:  TSRFILE.TXT
Door:  Ries Vriend - (c) MSX Software Team
Datum: 14 maart jan 1991
==========================================


Indeling van MSX .TSR files, versie 0000
==========================================================
			 Qualified document - MST use only


  Deze tekst bevat de definitie van de door LinkTsr versie 1.00 aangemaakte 
TSR files. Dit is dus NIET de indeling van de TSR header die in de 
source-listing van de TSR's geplaatst moet worden. Zie hiervoor de 
specificaties in de file MM2SPECS.


Indeling als volgt:

Offset | Omschrijving
  [len]|
-------+--------------------------

0000[9]  TSR file ID, 9 kars.

	 DEFB 'MST TSR',Cr,Lf


0009[D]  TSR naam, een zo uniek mogelijke ID-tekst gekozen door de 
	 programmeur. Toepassingen kunnen door middel van deze naam met de 
	 TSR communiceren.
	 Afsluitend staat altijd Control-Z (^Z), voor het geval TYPE commando 
	 losgelaten wordt op de TSR programmacode.

	 bijv.: DEFB 'MSTs TSRname',CtrlZ


0016[2]  Vereiste versie nummer van de TSR-Loader. De loader controleert dit 
	 nummer, om te voorkomen dat een `verouderde' loader een TSR file in 
	 wil lezen die een niet-compatible struktuur heeft. De TSR-loader is 
	 upward-compatible, zodat ook eventuele TSR's van een vorige versie 
	 geinstalleerd kunnen worden. Gebruikers kunnen dan volstaan met het 
	 updaten van de loader en kunnen dezelfde TSR's blijven gebruiken.

	 DEFW 0000


0018[2]  Base-adres van de TSR programmacode, oftewel het adres van het 
	 eerste byte in de TSR. Deze waarde wordt door de loader gebruikt om 
	 de programma relatieve adressen aan te passen.

	 Bijv.: DEFW TsrCode	;Eerst byte van de tsr-code


001A[2]  Initialisatie adres, wordt aangeroepen tijdens de installatie van de 
	 TSR. De Init-routine MOET helemaal achteraan de TSR-programma staan, 
	 zodat de loader de ruimte van de INIT routine weer eenvoudig kan 
	 vrijgeven nadat de TSR geinstalleerd is.

	 Bijv.: DEFW TsrInit	;Start van de initialisatie routine

	 Na de aanroep moet de initroutine in register A een vlag teruggeven.
	 De definitie van dit vlaggenregister is als volgt:

		 reg   bit | functie
	       ------------+------------------------------
	 uit:	  A	0  | 0 = Initialisatie gelukt
			   | 1 = Initialisatie mislukt
			1  | 0 = Geen intro-tekst
			   | 1 = Pointer naar intro-tekst in [DE]
		       2-7 | Altijd nul in deze versie

	 Indien de TSR initialisatie routine met bit 0 van het A register 
	 aangeeft dat de installatie niet gelukt is, verwijdert de TSR-Loader 
	 de gehele TSR weer. Als de TSR met bit 1 aangeeft dat er een intro 
	 tekst afgedrukt is, dan wordt deze door de TSR-Loader afgedrukt. 
	 TSR's mogen NOOIT zelf teksten op het scherm afdrukken. Hierdoor is 
	 mogelijk om in de toekomst ook in grafische omgevingen de intro 
	 tekst af te kunnen drukken. Ook het onderdrukken van de intro 
	 teksten is dan eenvoudiger.

	 De hooks worden pas NA de aanroep van de initialisatie routine 
	 genstalleerd.


001C[2]  Destruktie adres, wordt aangeroepen bij verwijderen van de TSR.

	 Bijv.: DEFW TsrKillAd


001E[2]  Driver entry adres, wordt aangeroepen via driver-entry van de TSR
	 manager.

	 Bijv.: DEFW TsrTalk


0020[2]  Lengte van de TSR-code (zonder de Initialisatie routine)

	 Bijv.: DEFW TsrLen


0022[2]  Lengte van de Initialisatie routine. Deze routine staat helemaal 
	 achteraan de TSR, en wordt bij de initialisatie van de TSR in 
	 hetzelfde segment gezet als de TSR code zelf. De ruimte die de 
	 initialisatie routine in beslag neemt wordt na de aanroep ervan 
	 weer vrij gegeven.

	 Bijv.: DEFW TsrInitLen


0024[n]  RelTabel, Adressen met programma-relatieve gegevens, zoals CALLs.

	 n = RelTabLength = 2 + Aantal RelAdressen * 2

	 Ex.: DW RelTabelLength  ;Lengte van de RelTab (in bytes, inclusief
	      DW reladres1	 ; het lengte-word).
	      DW reladres2
	      DW etc.


0024 + RelTabLength[TsrLength]

	 De TSR programma code

	 Ex.: TSR: DS TsrLength


0024 + RelTabLength + TsrLength[InitLength]

	 De initialisatie programmacode

	 Ex.: INIT: DS InitLength


0024 + RelTabelLength + TsrLength + InitLength[m]

	 m = HookTabelLengte = 2 + Aantal af te buigen hooks * 4

	 HookTabel, Af te buigen hooks tabel

	 Ex.: DW HookTabelLength  ;Lengte van de hookTabel (in bytes)
	      DW hook1
	      DW routine voor hook1
	      DW etc.


0024 + RelTabLength + TsrLength + InitLength + HooktabelLengte[0]

	 Tsrfile end.

