Skip to content

Latest commit

 

History

History
242 lines (197 loc) · 13.4 KB

memman_problemen.md

File metadata and controls

242 lines (197 loc) · 13.4 KB
                     M E M M A N 
      
              I N   T H E O R I E   E N   P R A K T I J K 
                                                           
      
                           I N L E I D I N G 
      
      Onder  MSX-DOS  1  laat  het  geheugenbeheer,  met  name bij 
      aanwezigheid van een memory mapper, veel te wensen over. Met 
      de  komst van  MSX-DOS 2 is dat sterk verbeterd, daar zitten 
      immers routines  in om een pagina uit de memory mapper op te 
      roepen  en weer vrij te geven. Volgens de deskundigen zit er 
      echter   een   bug  in   deze  routines,   waardoor  eenmaal 
      opgevraagde pagina's  nooit meer  vrijgegeven kunnen worden, 
      tenzij de machine wordt gereset.
      
      Zo is MEMory MANager geboren. De programmeurs van MST hadden 
      de behoefte aan een stel goed werkende routines, waarmee het 
      gehele geheugen  benut kan  worden. Ze gingen echter verder. 
      Meerdere  memory mappers,  externe geheugen modules (16 & 64 
      kB)  en  TSR's. Welnu  over dit  laatste onderwerp  gaat dit 
      artikel.
      
      
                     W A T   I S   E E N   T S R ? 
      
      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 toetscombinatie 
      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 
      geheugen dat  de TSR  gebruikt, ook  door andere programma's 
      gebruikt  kan worden.  Er zijn  in een standaard MSX machine 
      geen  mogelijkheden  om een  stuk geheugen  voor een  TSR te 
      reserveren. Dit  probleem wordt  door MemMan  uit de  wereld 
      geholpen.  MemMan beheert  het geheugen en zorgt er voor dat 
      er geen geheugenconflicten 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  MemMan krijgt de MSX betere 
      TSR  mogelijkheden 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.
      
      Dit  hoofdstuk is  regelrecht overgenomen uit de handleiding 
      van MemMan, zoals die is geschreven door het MST.
      
      
                      N U   D E   P R A K T I J K 
      
      Dat klinkt  natuurlijk mooi,  maar werkt  het in de praktijk 
      ook zo soepel. Ik hoop in de rest van dit artikel een aantal 
      problemen  boven water  te halen,  waaruit blijkt dat MemMan 
      heel  leuk  is, maar  nog niet  af. Daarentegen  wil ik  wel 
      iedereen blijven  aanmoedigen om MemMan te blijven (of gaan) 
      gebruiken, want werken zonder MemMan is helemaal een gruwel.
      
      
                          P R O B L E E M   1 
      
      Een hoop  bestaande programma's werken niet samen met MemMan 
      en  profiteren dus  niet van  het bereikbaar worden van meer 
      geheugen. Bovendien  werken veel  programma's niet  eens als 
      MemMan actief is.
      
      Het eerste gedeelte van het probleem is lastig op te lossen. 
      Het  betekent dat  ïf het programma herschreven moet worden, 
      ïf er  moet een  alternatief programma  gebruikt worden, dat 
      wel met MemMan samenwerkt.
      
      Het  tweede gedeelte  van het  probleem is  veel leuker. Ook 
      hier herken je weer twee probleemgroepen.
      
      De eerste  groep zijn  de vastlopers.  Als je je bedenkt dat 
      MemMan  binnen  de  grenzen  van  de  MSX  standaard  werkt, 
      betekent  dit dat  de vastlopende  programma's dat  dus niet 
      doen. Programma's  die het  gehele systeem voor zich opeisen 
      en  denken dat  ze ermee  mogen doen  wat ze  willen. Helaas 
      bestaan ze.
      
      De  tweede   groep  is   het  absolute   toppunt  voor   m'n 
      lachspieren.  Het programma  geeft kort na het opstarten een 
      'Not  enough  memory'  error  en  het  programma stopt.  Het 
      probleem ligt hier in het TPA geheugen.
      
      Wat is  TPA geheugen?  Dat is de 64 kB die voor de processor 
      direct  zichtbaar is.  De rest  van het geheugen is, net als 
      deze 64  kB, onderverdeeld in blokken van 16 kB. Door nu ÇÇn 
      van  die blokken uit het TPA geheugen te verwisselen met een 
      blok uit  de memory mapper, ziet de processor weer een ander 
      stukje data of programma. Om dit in goede banen te leiden is 
      MemMan ontwikkeld. Maar om goed te kunnen functioneren heeft 
      MemMan  permanent  een  stukje  geheugen  nodig,  zoals  ook 
      MSXDOS(2).SYS   en  COMMAND(2).COM   zich  in  dit  geheugen 
      bevinden, maar  ook de stack e.d.. Wat er nu nog overblijft, 
      is  voor  een  in te  laden programma  en z'n  te declareren 
      variabelen.  Door MemMan  is dat  vrije TPA geheugen nu zo'n 
      1,5  kB  kleiner geworden.  Voor sommige  programma's genoeg 
      voor de eerder genoemde error.
      
      Dit  laatste  is  alleen  te  verhelpen  door het  programma 
      opnieuw te  compileren, met een verkleind vrij TPA geheugen. 
      Hiervoor heb je dan wel de source van het programma nodig en 
      dat  is vaak een probleem. Als het om een commercieel pakket 
      gaat,  is   die  source   simpelweg  onbereikbaar   voor  de 
      eindgebruiker. Het bedrijf wenst niet meer aan het programma 
      te  sleutelen (veel voorkomend commentaar nu MSX commercieel 
      niet meer  interessant is)  en wil  alleen voor grof geld de 
      source verkopen. Als het om een PD of shareware pakket gaat, 
      zou  je de  schrijver ervan  kunnen benaderen met het eerder 
      genoemde  verzoek.  Sommigen  zullen  er  gehoor  aan  geven 
      anderen niet.  Persoonlijk vind ik dat elke programmeur hier 
      vooraf  rekening mee  moet houden  en dus  standaard met een 
      verkleind TPA geheugen moet compileren.
      
      Dit probleem  is dus  niet de schuld van de programmeurs van 
      MST.  Programma's welke  voor het MemMan tijdperk geschreven 
      zijn, kunnen moeilijk verweten worden dat ze niet met MemMan 
      samenwerken. Maar  de overige moeilijkheden van dit probleem 
      zijn simpel te wijten aan het niet naleven van de standaard, 
      of  het  niet  wensen  rekening  te houden  met MemMan.  Die 
      programmeurs  welke in  deze categorie thuis horen, zijn wat 
      mij betreft amateurs.
      
      Nvdr.  Er is  natuurlijk ook  nog een categorie: programma's 
      waarvoor het samenwerken met MemMan onzin is. Bijv. spellen, 
      demo's en ook deze Special! Al zou de printerbuffer wel leuk 
      zijn bij het uitprinten.
      
      
                          P R O B L E E M   2 
      
      TSR's zijn  vaak op te roepen d.m.v. een toetscombinatie. In 
      diverse  programma's  wordt  ook  gebruik  gemaakt  van  een 
      toetscombinatie. Wanneer er een TSR actief is welke dezelfde 
      toetscombinatie  gebruikt als  een bepaalde  functie uit het 
      lopende programma,  heb je  een probleem.  Welke van de twee 
      wint  nu het  gevecht, het  programma of  de TSR.  Oplossing 
      hiervoor is simpel. Toetscombinaties zijn voor TSR's. In een 
      normaal programma  is het  gebruik van  toetscombinaties dus 
      uit den boze.
      
      Ook hier geldt hetzelfde als bij probleem 1. Programma's van 
      voor  het MemMan  en TSR  tijdperk, kunnen dit niet verweten 
      worden. Maar  programma's die ontwikkeld zijn toen MemMan en 
      TSR's  wel reeds  bestonden, hadden  er rekening  mee moeten 
      houden. De  programmeurs van  deze programma's zijn dus hier 
      egoãstisch bezig geweest.
      
      
                          P R O B L E E M   3 
      
      TSR's  die elkaar  in de haren vliegen, of de combinatie van 
      programma  en  TSR die  elkaar niet  liggen. Oorzaak:  de al 
      eerder  genoemde  toetscombinaties,  maar  ook  het  actieve 
      SCREEN speelt  een rol.  Dit laatste  punt heb  ik lang over 
      nagedacht,  maar ik  denk dat  hier, in tegenstelling tot de 
      andere  moeilijkheden,   een  taak   is  weggelegd  voor  de 
      programmeurs van MemMan.
      
      Sommigen  van jullie kennen ongetwijfeld de TSR Micro Music. 
      Deze TSR zet na een bepaalde toetscombinatie een menu op het 
      scherm.  Welnu  de  programmeur  heeft  hier  geen  rekening 
      gehouden met het actieve screen en gaat er simpel vanuit dat 
      SCREEN  0  actief  is.  Gelukkig is  hij niet  de enige  TSR 
      programmeur  die  deze fout  maakt en  het is  dus ook  geen 
      persoonlijke aanval  op de programmeur van Micro Music. Deze 
      TSR wordt alleen als voorbeeld genomen.
      
      Maar  ga eens  in de positie van de programmeur staan. Eerst 
      uitzoeken  welk  SCREEN  actief  is, vervolgens  kijken welk 
      gedeelte je  daarvan wil  gebruiken, dan  de aanwezige  info 
      ergens  opslaan en de nieuwe info plaatsen. Bij het verlaten 
      van de  TSR, moet  dan de omgekeerde weg gevolgd worden. Als 
      je  dan ook nog eens toevallig in een modem programma zit en 
      het scherm  is constant aan verandering onderhevig, dan zijn 
      de rapen helemaal gaar.
      
      Het is dus veel eenvoudiger om te zeggen dat zo'n TSR alleen 
      werkzaam is  in SCREEN  0. Sommige  programmeurs kunnen  dit 
      zelfs niet eens goed (Micro Music laat bij een actieve jANSI 
      een  paar gekleurde  blokjes zien boven in het scherm), maar 
      dat is een ander verhaal. MST zou hier kunnen helpen.
      
      Wanneer er  in MemMan  een routine  zit, die  voor TSR's een 
      universele   manier  aanbiedt  voor  het  plaatsen  van  een 
      karakter op  een op te geven positie op het scherm, ongeacht 
      welk  SCREEN actief is en de oude informatie van die positie 
      bewaart,  zijn  we  al  een  hele  stap  verder.  Nu kan  de 
      programmeur van  een TSR  simpel tegen MemMan zeggen: ik wil 
      dit  karakter op  die positie.  Wanneer MemMan  dan bijhoudt 
      welke  posities   gebruikt  worden   door  de  TSR,  kan  de 
      programmeur  van de  TSR voor  het verlaten  van de TSR deze 
      posities weer herstellen door aan MemMan de opdracht daartoe 
      te geven.
      
      De  ideale   oplossing  voor   bijna  alle  problemen.  Veel 
      programma's  wijzigen niets  op het  scherm, wanneer een TSR 
      actief is. Voor die gevallen dat zowel een programma als een 
      TSR  actief   zijn,  die   beiden  het   scherm  geheel   of 
      gedeeltelijk wijzigen, wordt het praktisch onmogelijk om dit 
      af  te  vangen.  Die  programma's  die intensief  met MemMan 
      samenwerken,  zouden  aan  MemMan de  door de  TSR gebruikte 
      posities  kunnen opvragen  en deze  dan niet gebruiken, maar 
      dat kan  soms onoplosbare  problemen met  zich mee  brengen. 
      Denk hierbij alleen maar aan de pulldown menu's e.d..
      
      Dus  de  hier  voorgestelde uitbreiding  van MemMan  is niet 
      alles  dekkend,  maar  is een  hele grote  stap in  de goede 
      richting.
      
      
                           C O N C L U S I E 
      
      Wat is het leven met MemMan en speciaal hiervoor ontwikkelde 
      programma's   toch   een   genot.   Helaas   laten   diverse 
      programmeurs  nog wel eens een steekje vallen. Wanneer ze de 
      inhoud van  dit artikel  nu eens  als wet gaan beschouwen en 
      wanneer  MST de  voorgestelde uitbreiding van MemMan nu eens 
      bewerkstelligt, zijn we bijna waar we zijn moeten:
      
              Een systeem wat op een bijna optimale manier gebruik 
              maakt van alle mogelijkheden die het systeem bied.
      
      Tot  slot nog ÇÇn extra opmerking voor de programmeurs. Wees 
      nu eens  niet zo  eigenwijs door  er van  uit te gaan dat de 
      aangesloten diskdrives A: en B: heten, maar vraag dit gewoon 
      aan het systeem. Harddisk gebruikers hebben A: en B: vaak in 
      gebruik  als een  partitie van  de harddisk en de diskdrives 
      heten dan  (in mijn  geval) F:  en G:.  Maar het gebruik van 
      vele kopieerprogramma's is hierdoor niet meer mogelijk.
      
                                                   Henk Hoogvliet