*** HANDLEIDING MDL-LIB ***

- COPYRIGHT 1990 BY MDL-SOFT -

Uitleg van de procedures in het bestand MDLLIB.

Als u dit nog niet gedaan heeft, lees dan eerst het  bestand
INLEIDNG.TXT!

Als u deze Pascal-bibliotheek  gebruikt,  moet  het  bestand
MDLLIB  ALTIJD,  ongeacht  wat  u  gaat  doen,  als   eerste
gencludeerd worden (met {$I filenaam}). Dit  bestand  bevat
namelijk een aantal basisprocedures en -typedefinities,  die
door de  procedures  in  de  rest  van  de  bibliotheek  ook
gebruikt worden. Deze worden hieronder besproken.

----

Naam      : LibStr
Actie     : geen
Computer  : MSX1 en MSX2
Soort     : Type-identifier
Declaratie: Type LibStr = string[80]; { default }
BASIC     : geen

Dit type wordt  door  sommige  procedures  (b.v.  Gwrite  in
GRAPMSX1.LIB en GRAPMSX2.LIB) om strings door- of  terug  te
geven. De lengte ervan kunt u aan uw wensen aanpassen.  Tip:
als opeens blijkt dat delen van stringparameters niet  door-
gegeven worden, probeer dan de lengte  van  LibStr  eens  te
ver- hogen.

----

Naam      : Reg_pack
Actie     : geen
Computer  : MSX1 en MSX2
Soort     : Record-type
Declaratie: Type Reg_pack=record
              Case Boolean of
                True  : AF, BC, DE, HL     : integer;
                False : F,A, C,B, E,D, L,H : byte;
            end;
BASIC     : geen

Dit type wordt gebruikt door de procedures Bios,  Subrom  en
CalBas, om de inhoud van de registers door te geven  aan  de
machinetaalroutines in de ROM. Na aanroep wordt de variabele
LibRegs (die van dit type is) automatisch bijgewerkt.  Zoals
u  ziet,   is   dit   type   een   zogenaamd   "Free   Union
variant-record". Dit wil zeggen dat AF hetzelfde is als A en
F samen, dat BC hetzelfde is als B en  C  samen,  enzovoort.
Als  u  dus  bijvoorbeeld  in  een  Reg_pack   variabele   B
verandert, verandert u tevens het  hoge  deel  van  BC.  Dit
maakt  een  goede  simulatie  van  de  echte  Z80  registers
mogelijk, die ook in twee delen verdeeld kunnen  worden.  In
MDLLIB.VAR zelf is al een  register-variabele  gedefinieerd,
genaamd LibRegs. Hieruit lezen de procedures Bios, Subrom en
CalBas   hun    registerwaarden.    U    kunt    zelf    een
reserve-registersetje  definiren   met   bijvoorbeeld   VAR
RESERVE_REGS : REG_PACK.

----

Naam      : Bios
Actie     : Roept BIOS aan
Computer  : MSX1 en MSX2
Soort     : procedure
Declaratie: procedure Bios(adres:integer);
BASIC     : DEFUSR=adres:A=USR(0)

Deze procedure is voor u alleen nuttig als u een  BIOS-tabel
bij de hand  hebt,  want  hiermee  kunt  u  de  ROM-routines
gebruiken, die in de Bios-ROM staan. In  'adres'  staat  het
adres van de  aan  te  roepen  routine.  De  inhoud  van  de
registers wordt  uit  de  variabele  "LibRegs"  (zie  boven)
gelezen. Na aanroep wordt de  BIOS  tijdelijk  ingeschakeld,
waarna de door u uitgekozen BIOS-routine wordt  aangeroepen.
(De BASIC-ROM wordt NIET ingeschakeld: zie daarvoor CalBas).
Vervolgens wordt de BIOS weer uitgeschakeld,  waarna  in  de
variabele "LibRegs" de registerwaarden die  de  BIOS-routine
teruggegeven heeft staan.

----

Naam      : SubRom
Actie     : Roept de SUBROM aan
Computer  : MSX2
Soort     : Procedure
Declaratie: Procedure SubRom(adres:integer);
BASIC     : geen

Deze routine werkt hetzelfde als Bios, alleen  wordt  nu  de
MSX2  SUBROM  aangeroepen  (dat  is   een   stuk   ROM   met
Bios-achtige routines, dat alleen op MSX2 en MSX2+  aanwezig
is).

----

Naam      : BiosMem
Actie     : Leest byte uit de BIOS
Computer  : MSX1 en MSX2
Soort     : Functie
Declaratie: Function BiosMem(adres:integer):byte;
Basic     : PEEK(adres)

Deze functie leest een byte uit de BIOS  uit  het  opgegeven
adres. Verder hetzelfde als Bios.

----

Naam      : CalBas
Actie     : Roept BASIC-ROM aan
Computer  : MSX1 en MSX2
Soort     : Procedure
Declaratie: Procedure CalBas(adres:integer);
Basic     : DEFUSR=adres:A=USR(0)

Deze procedure werkt bijna hetzelfde als BIOS, maar  nu  met
het verschil dat de BASIC-ROM ook ingeschakeld wordt,  zodat
ook routines uit  de  BASIC-interpreter  aangeroepen  kunnen
worden. Doe dit echter alleen als u voor de volle 100% zeker
bent dat de betreffende routine MSX-standaard is!  (Vaak  is
dit  zo  met  adressen  die  (in  hexadecimaal)  met  een  4
beginnen). Dit laatste gaat natuurlijk niet op  als  u  heel
zeker weet dat dit programma niet  op  een  andere  computer
gebruikt gaat worden.

CalBas heeft nog een extraatje, dat  BIOS  niet  heeft:  het
vangt Basic-foutmeldingen af, en voorkomt zo hang-ups. Als u
de volgende melding tegenkomt:

BASIC ERROR <foutnummer>
PROGRAM ABORTED

dan heeft de BASIC-ROM een foutmelding gegeven. Aan de  hand
van het nummer kunt u in een BASIC-handboek opzoeken welke.

----

Naam      : WaitForInt
Soort     : Procedure
Declaratie: Procedure WaitForInt;
BASIC     : Geen

Deze procedure stopt het programma totdat de  Video  Display
Processor de volgende interrupt aan de  Z80  doorgeeft.  Dit
gebeurt  50x  per  seconde,  precies  even  vaak   als   het
beeldscherm geprojecteerd wordt. Als u WaitForInt opneemt in
een lus waarbinnen b.v. sprites worden verplaatst, wordt  de
beweging erg vloeiend.

Overigens: op Japanse computers (b.v.  gemporteerde   MSX2+
computers) gaat de interrupt 60x per seconde.

====

SYSTEEMVARIABELEN

In MDLLIB.VAR (die in de variabelen-lijst gencludeerd  moet
worden) worden een aantal systeemvariabelen gedeclareerd.  U
kunt  ze  herkennen  aan   het   voorvoegsel   'sys_'.   Dit
voorvoegsel is toegevoegd om te voorkomen dat u in een ander
programma  toevallig  variabelen  met  dezelfde  namen  gaat
gebruiken.

De  variabelen  zijn  met  ABSOLUTE  <adres>   gedeclareerd.
Programmeert u ook in BASIC, dan kunt u uit dit bestand heel
handige PEEKs en POKEs halen!

----

Var sys_textwidth:byte;

Bevat de huidige breedte van het tekstscherm. Kan  veranderd
worden, je krijgt dan een breedte-verandering zonder dat het
scherm schoongemaakt wordt.

----

Var sys_textlines:byte;

Bevat het aantal regels van het tekstscherm. Ook  handig  om
te veranderen.

----

Var sys_width0:byte;

Bevat  de  breedte  van  scherm  0.  Kan  veranderd  worden,
wijzigingen gaan echter pas in na een ScrMode. (VRAM1/2.LIB)

----

Var sys_width1:byte;

Idem, voor scherm 1.

----

Var sys_whereX:byte;

Bevat  de huidige X positie van de tekstcursor.  Beter  niet
veranderen,  doet  u dat liever met GotoXY.  De  linkerkolom
heeft  nummer  1, net als gebruikelijk  in  Pascal.  (Basic-
programmeurs  moeten hier wel op letten, als ze deze PEEKen.
Maar die kunnen beter POS(0) gebruiken).

----

Var sys_whereY:byte;

Idem, voor de Y positie.

----

Var sys_timer:integer;

Deze  systeemvariabele  wordt om de 50ste  seconde  door  de
interrupt  van de computer verhoogd. Als hij de waarde 32767
heeft gekregen, daat hij over naar -32768 en dan verder naar
-32767, enz. Erg handig voor tijdmetingen. Kan ook veranderd
worden,  maar  verhoging blijft dan  natuurlijk  automatisch
plaatsvinden.

Let op: op Japanse 60MHz  computers  (b.v.  MSX2+  computers)
wordt de timer om de 60ste seconde verhoogd!

----

Var sys_scrmod:byte;

Bevat  het  nummer van het huidige schermtype. Verander  hem
alleen als u precies weet wat u doet.

----

Var sys_forclr:byte;

Bevat huidige voorgrondkleur.

----

Var sys_bakclr:byte;

Bevat huidige achtergrondkleur.

----

Var sys_bdrclr:byte;

Bevat huidige border (rand-) kleur.

----

Var sys_cursor:boolean;

Als deze TRUE is, is de  cursor  continu  zichtbaar,  anders
alleen bij ingave. Op FALSE zetten verhoogt de snelheid  van
de scherm-output aanzienlijk. (Tip: als de scherm-uitvoer nu
nog  te  langzaam  gaat,  zet  dan  ook  {$C-}  vooraan   uw
programma. Hier wordt de schermuitvoer ook sneller van.)

----

Var sys_click:boolean;

Als deze TRUE is, staat de toetsklik aan,  anders  uit.  Kan
zonder problemen veranderd worden.

----

**** EINDE MDLLIB.TXT ****
                                                  