File : MM2INTRO.TXT (c) MST
Datum: 21 Maart 1991
Door : Ries Vriend / Ramon van der Winkel / Robbert Wethmar
-----------------------------------------------------------


MST's MemMan 2, de MSX Memory Manager

Begin 1990 riep MSX Computer Magazine voor het eerst de beste 
MSX programmeurs van Nederland bij elkaar met de bedoeling de 
MSX wereld nieuw leven in te blazen. De programmeursgroep maak 
te kennis en er werden ideeen uitgewisseld. Er bleek behoefte 
aan een Memory Manager, een programma dat het geheugen van de 
MSX beheert.

Met de Memory Manager worden twee doelen nagestreefd:

1) Het zoeken en gebruiken van geheugen wordt eenvoudiger. Het 
   zoeken wordt door MemMan gedaan terwijl het gebruik van 
   geheugen zoveel mogelijk wordt losgekoppeld van de configu 
   ratie: 'oude' uitbreidingen, een, twee of meer mappers, 
   MemMan heeft er geen moeite mee.
2) Het wordt mogelijk meerdere programma's tegelijkertijd in 
   het geheugen te laden zonder dat ze elkaar in de weg zitten. 
   Hierbij wordt gedacht aan RAMdisk's, printerbuffers en op de 
   achtergrond werkende programma's.

Met versie 1 van MemMan - gentroduceerd op 9 september 1990 - 
is de eerste doelstelling bereikt. Nu is de tweede doelstelling 
ook bereikt.
MemMan versie 2 kan meerdere programma's 'ergens' in het geheu 
gen laden laten werken, zonder dat ze van elkaar last hebben. 
Op andere computer merken was deze techniek al langer bekend. 
Dergelijke programma's worden daar TSR's genoemd, vandaar ook 
hier: Terminate and Stay Resident programma's.

Hopelijk zullen nog meer programma's van MemMan gebruik gaan 
maken en bestaande programma's voor MemMan worden aangepast. 
Een direct voordeel is dat het programma dan ook direct met 
bijvoorbeeld 64 kB modules en zelfs met meerdere memory mappers 
kan werken, iets dat de meeste bestaande programma's niet of 
niet goed doen.

MemMan versie 2 zal net als de eerste versie als Public Domain 
de wereld in gestuurd worden. Dat wil zeggen dat iedereen vrij 
van MemMan gebruik mag maken. Het is zelfs toegestaan MemMan 
als onderdeel van een commercieel pakket te verkopen. Alleen zo 
kan het programma uitgroeien tot een aanvulling op de MSX stan 
daard. Er zullen twee pakketten uitgebracht worden. De eerst is 
voor de gebruiker van MemMan. Dit pakket zal MemMan en een 
aantal tools voor de TSR's bevatten. Het tweede pakket bevat 
ontwikkel tools en technische documentatie over het program 
meren van TSR's. Dit laatste pakket is geen Public Domain.


Aan MemMan werkten en dachten mee:

Ramon van der Winkel
Ries Vriend
Robbert Wethmar
Paul te Bokkel
Markus The
en een aantal anderen die met hun opbouwende kritiek MemMan 
hielpen worden tot wat het is.


Het configureren

MemMan is er in twee versies: een .BIN en een .COM file. Het 
zal duidelijk zijn dat de .BIN versie vanuit BASIC met een 
BLOAD"MEMMAN.BIN",R instructie geladen kan worden, terwijl de 
.COM vanuit MSXDOS gestart kan worden door simpelweg MEMMAN in 
te tikken. Beide versies keren na het laden - via een zogenaam 
de warm boot - automatisch terug naar BASIC. Als de .COM versie 
vanuit MSXDOS opgestart wordt, dan kan een commandline mee 
gegeven worden. Dit zijn commando's welke uitgevoerd zullen 
worden alsof ze ingetikt zijn. Een Return kan met het @ teken 
worden opgegeven. Er kunnen meerdere @ tekens in de commandline 
worden opgegeven, zodat meerdere commando's na elkaar uitge 
voerd kunnen worden.

Bijvoorbeeld:

A>MEMMAN _SYSTEM@TL CAPS@

Na het opstarten van MEMMAN zal naar MSXDOS teruggekeerd worden 
en de TSR "CAPS" ingeladen worden.

Met behulp van CFGMMAN is het mogelijk een aantal instellingen 
van MemMan en een default commandline op te geven. CFGMMAN kan 
zowel de .COM als de .BIN versie configureren. Met betrekking 
tot de TSR's kunnen de volgende instellingen veranderd worden:

- Default command line
  Hier kan de standaard commando-regel ingevoerd worden. Deze 
  commando-regel wordt uitgevoerd nadat MemMan genstalleerd 
  is. Na het laden van de .BIN versie van MemMan wordt altijd 
  de standaard commando-regel uitgevoerd. De standaard comman 
  do-regel wordt niet uitgevoerd indien MemMan vanuit DOS opge 
  start wordt met een commando regel als argument. Na foutmel 
  dingen van MemMan wordt geen commando regel uitgevoerd.

- Heap grootte
  Sommige TSR programma's hebben extra geheugen nodig in geheu 
  gen pagina 3, waar ze normaal gesproken geen toegang toe 
  hebben. De heap is een stuk geheugen in pagina 3 dat wel voor 
  TSR's toegankelijk is. Wanneer een TSR meldt dat er te weinig 
  heap geheugen beschikbaar is dient deze waarde verhoogd te 
  worden. Meestal zal het toevoegen van 100 extra bytes 
  heap-geheugen de problemen uit de wereld helpen. Wanneer een 
  TSR meer heap-ruimte nodig heeft dient de handleiding dat te 
  vermelden.
  Elke verandering van de heap-grootte heeft slechts effect na 
  het opnieuw laden van MemMan.

- Maximum aantal TSR's dat tegelijk aanwezig kan zijn
  Het aantal TSR's dat onder MemMan 2 geladen kan worden is 
  beperkt. Wanneer de TSR Loader (TL) de melding 'TSR Table 
  Full' geeft dient deze waarde verhoogd te worden.

- Maximum aantal hooks dat tegelijk afgebogen kan zijn
  Het aantal hooks dat door alle in het geheugen aanwezige 
  TSR's kan worden afgebogen is beperkt. Wanneer de TSR Loader 
  de melding 'Hook Table Full' geeft dient deze waarde verhoogd 
  te worden.

- Recursiediepte
  Wanneer TSR's elkaar of zichzelf te vaak aanroepen zal het 
  systeem op een gegeven moment vastlopen. Door de maximale 
  recursiediepte te verhogen kunnen deze problemen voorkomen 
  worden. TSR's die zichzelf aanroepen dienen dat - met de 
  benodigde recursiediepte - te vermelden in de handleiding.


Het installeren

Om MemMem vanuit MSX-DOS te laden is het intikken van `MEMMAN' 
achter de `>'-prompt voldoende. Vanuit BASIC dient het commando 
BLOAD "MEMMAN.BIN",R ingevoerd te worden. Na de installatie van 
MemMan wordt in beide gevallen BASIC gestart, waarna de stan 
daard commando regel uitgevoerd wordt, zoals opgegeven in het 
configuratie programma CFGMMAN. De standaard commando-regel 
wordt niet uitgevoerd indien MemMan vanuit DOS gestart wordt 
met een vervangende commando-regel als argument.

Versie 2 van MemMan neemt behalve een stuk BASIC-geheugen ook 
een 16 kB segment in beslag. Hierdoor blijft er onder BASIC en 
MSXDOS zoveel mogelijk geheugen beschikbaar. De ruimte die in 
het 16 kB segment over is wordt indien mogelijk gebruikt om 
TSR's in onder te brengen. De hoeveelheid BASIC-geheugen die 
MemMan gebruikt kan benvloed worden door middel van het confi 
guratieprogramma CFGMMAN.

Wanneer MemMan onder DOS2 genstalleerd wordt blijven alle 
segmenten - behalve die ene die MemMan zelf nodig heeft - ook 
voor DOS2 beschikbaar. Het is dus zonder meer mogelijk eerst 
MemMan te installeren en daarna een DOS2 RAMdisk.

Alvorens zichzelf in het RAM te nestelen controleert MemMan 
natuurlijk of er al een versie van MemMan aanwezig is. In dat 
laatste geval verschijnen de info-regels, aangevuld met de 
mededeling dat MemMan reeds genstalleerd is. Verder gebeurt er 
niets. De commandoregel wordt gewoon uitgevoerd.


Terminate and Stay Resident programma's

Gewoonlijk zal een programma na uitvoering niet in het geheugen 
achterblijven. Programma's die dat wel doen worden aangeduid 
met de afkorting TSR: Terminate and Stay Resident. Voorbeelden 
van dergelijke programma's zijn: printerbuffers en RAMdisks. 
Maar ook andere toepassingen, zoals een rekenmachine of een 
kalender die met een enkele toetsdruk opgeroepen kan worden 
zijn denkbaar.
In het verleden zijn TSR's voor de MSX een tamelijk zeldzaam 
verschijnsel geweest. Het probleem was namelijk dat het geheu 
gen dat de TSR gebruikt ook door andere programma's gebruikt 
kan worden. Er zijn in een standaard MSX machine geen mogelijk 
heden om een stuk geheugen voor een TSR te reserveren. Dit 
probleem wordt door MemMan uit de wereld geholpen. MemMan be 
heert het geheugen en zorgt er voor dat er geen geheugencon 
flicten optreden.
Dankzij MemMan is het mogelijk meerdere TSR's tegelijk in het 
geheugen te hebben, waarbij elke TSR maximaal 16 kB groot kan 
zijn. Op de standaard MSX is het laden van meer dan n TSR al 
lastig en alleen mogelijk als de TSR niet al te groot is. Met 
de invoering van MemMan 2 krijgt de MSX betere TSR mogelijkhe 
den dan de alom gewaardeerde PC. Bovendien doen ze niet onder 
voor de `Desktop Accesoires' zoals die op de Macintosh en de 
Atari ST gebruikt worden.
Bij MemMan worden twee eenvoudige voorbeeld TSR's geleverd. Ze 
doen weinig zinvols, maar demonstreren wel degelijk de kracht 
vn Terminate and Stay Resident programma's. De voorbeelden zijn 
CAPS.TSR en BEEP.TSR. De eerste laat het Caps lampje knipperen, 
de tweede maakt dat het Basic commando CMD BEEP een pieptoontje 
genereerd. In de toekomst zullen er echter meer en meer TSR's 
verschijnen, met mogelijkheden waar de MSX gebruiker tot voor 
kort alleen maar van kon dromen.


TSR's laden

TSR programma's zijn te herkennen aan de extensie van de 
bestandsnaam: ze eindigen op .TSR. Deze files bevatten naast de 
eigenlijke programmacode ook alle informatie die nodig is om de 
TSR goed in het geheugen te installeren.
Om bijvoorbeeld de demonstratie TSR 'CAPS' - die overigens 
niets anders doet dan het Caps lampje laten knipperen - te 
laden moet ingetikt worden:

TL CAPS

TL staat voor TSR-Load, het is het programma dat de TSR laadt 
en in het geheugen plaatst. Helaas werkt TSR-Load op dit moment 
alleen onder MSX-DOS. Vanuit Basic is het nog niet mogelijk TSR 
programma's te laden.
Zodra TL de TSR in het geheugen geinstalleerd heeft zal het 
programma actief worden. In bovenstaand voorbeeld wil dat zeg 
gen dat het CAPS lampje zal gaan knipperen en bij iedere toets 
aanslag het cassetterelais aan of uit geschakeld wordt.
TL is een slim programma. Zolang er in het MemMan segment nog 
ruimte is voor TSR's zullen ze daar geplaatst worden. Alleen 
als dat ook echt nodig is wordt een nieuw segment gebruikt, dat 
voor overige toepassingen dan onbereikbaar gemaakt wordt. Dat 
gebeurt bijvoorbeeld als er een uitzonderlijk groot TSR pro 
gramma wordt geladen. Wanneer er vervolgens weer een kleinere 
wordt geladen zal TL eerst alle bestaande TSR segmenten aflopen 
om te zien of er ergens nog ruimte is. De volgorde waarin de 
TSR's geladen worden zal dan ook geen invloed hebben op het 
geheugengebruik.



TSR's bekijken

Het is ten aller tijde mogelijk te kijken welke TSR's er op dit 
moment in het geheugen actief zijn. Daartoe bevat het MemMan 
pakket de utility TV, TSR-View. Het gebruik is de eenvoud zelf: 
gewoon achter de DOS prompt intikken:

TV

Er zal een overzicht verschijnen van de op dit moment actieve 
TSR's, compleet met hun volledige naam. Deze naam moet voor 
iedere TSR uniek zijn, en zal dan ook vrijwel altijd de initi 
alen van de programmeur bevatten. Deze naam is dus een andere 
dan de bestandsnaam!
Het is deze volledige naam - het TSR ID - die nodig is als een 
TSR uit het geheugen verwijderd moet worden. Ook programma's 
die direct met TSR's samenwerken kunnen deze naam gebruiken om 
te zien of een TSR in het geheugen aanwezig is.



TSR's verwijderen

Zoals gezegd is het ook mogelijk TSR programma's weer uit het 
geheugen te verwijderen. Het benodigde programma heet TK, 
TSR-Kill. TK zorgt er voor dat een TSR netjes verwijderd wordt. 
Alle andere TSR's blijven vlekkeloos doorwerken, als de TSR als 
enige in een segment stond wordt dat segment weer vrijgegeven 
voor gebruik door overige toepassingen.
Om bijvoorbeeld het het Caps lampje weer normaal te laten wer 
ken en het knipperen uit te schakelen is het verwijderen van de 
betrokken TSR voldoende. Daartoe tikt u:

TK "MJVcapsblink"

Waarbij de volledige naam van de TSR tussen aanhalingstekens 
opgegeven dient te worden.
TSR-Kill kan behalve geheugen weer vrijmaken voor gebruik ook 
gebruikt worden om vastgelopen TSR's uit het geheugen te 
verwijderen. Een TSR die om welke reden dan ook niet meer 
vlekkeloos functioneert zal met behulp van TK meestal nog wel 
verwijderd kunnen worden. Vervolgens kan de TSR met TL weer 
geladen worden, op dezelfde manier als het opnieuw starten van 
gewone programma's nog wel eens wil helpen geldt dat ook voor 
TSR's.

** Einde **
