
     ۱  ۱  ۱    ۱
     ۱     ۱  ۱       ۱۱۱۱ ToolBox  - 1994 1995 -
     ۱  ۱  ۱  ۱  ۱          - Wagemakers Jan -
     ۱     ۱       ۱  ۱        ۱
     ۱     ۱  ۱  ۱        ۱

     U mag deze toolbox gebruiken  in  uw eigen programma's, zolang er voor
     deze programma's geen GELD betaald  moet  worden  !   M.a.w.   ;  deze
     programma's moeten PUBLIC-DOMAIN/FREEWARE/CARDWARE zijn!



Uitleg over ASM-toolbox :

Om het programmeren in  assembler  te  vereenvoudigen, heb ik zelf routines
gemaakt voor bepaalde veel voorkomende zaken.  Deze routines zijn misschien
niet 100% optimaal,  maar  het  werkt!   Hier  volgt  een  lijst  van  alle
instrukties :

- @init :

Aanroepen  aan  elk  begin  van  een programma.  Na @init wijst DS naar het
DATA-segment en ES naar het PSP van het programma.  @init test ook de P en
geeft een foutmelding bij een  XT-Komputer, waarbij het programma beindigd
wordt met errorlevel 0FFh.

- @cls :

Wist het gehele scherm (in attribuut ingesteld met @color.)

- @print tekst :

Print een tekst op scherm. (Tekst moet op 0 eindigen.)
Kontrole karakters :
         13      = Ga naar begin volgende regel
         255     = Ga naar volgende regel, X = X van de laatste @locate.

- @color c1,c2 :

Instellen van de kleur. ( C1 = voorgrond / C2 = achtergrond )

C1 : 0 - 15  : 16 kleuren
C2 : 0 - 7   : 8  kleuren
     8 - 15  : 8  kleuren knipperend

Grafisch : C2 = 8 : Voorgrond wordt achtergrond XOR C1,achtergrond veranderd
                    dan niet.

- @locate x,y :

Instellen waar de volgende @print moet verschijnen.

- @update_cursor :

Cursor op dezelfde plaats zetten als waar de volgende @print zal verschijnen.

- @exit :

Gebruiken om programma te eindigen.

- @Mode video :

Instellen van de videomode .

- @Print_Info :

Laat toe dat sommige andere instrukties tijdens het assembleren  informatie
op het scherm afdrukken die interessant kan zijn voor de programmeur.

- @DecToString dec,tekst :
- @HexToString hex,tekst :

Zet een decimaal of hexadecimaal getal om naar een string.
        - dec moet een 16-bits getal zijn.
        - hex moet een  8-bits getal zijn.

- @Exec programma,command :

Het  starten  van  het  opgegeven  programma  met de opgegeven commandlijn-
parameters.
        - programma = ASCIIZ prg-naam
        - command   = 1byte : Lengte commandlijn
                    = ASCII-commando (Beste afsluiten met 0Dh)

- @parameter tekst :

Zet  de  eerstvolgende  parameter  ingegeven  na  de  programmanaam  in  de
variabele TEKST.  Om  BV  3  parameters  in  te  lezen  moet  u dus 3* deze
instruktie gebruiken.  Parameters moeten gescheiden zijn door 1 of meerdere
spaties !!!  ES moet voor het aanroepen naar PSP wijzen (zie @init)

- @DiskErr :

Uit te voeren na een DISK-operatie.  In di komt een foutkode te staan.
             00h = alles O.K.
             01h = ongeldige disk parameter
             02h = adresmarkering niet gevonden
             03h = Schrijfbeveiliging
             04h = Sektor niet gevonden
             06h = Diskette wissel gededekteerd
             08h = DMA-fout bij bewerking
             09h = DMA-adressering over 64k-grens
             0Ch = Media-type niet gevonden
             10h = CRC - fout
             20h = Kontroller - fout
             40h = Fout bij seek-operatie
             80h = Schijfeenheid niet gereed

- @Write_Sector  drive,zijde,spoor,sector,aantal,tekst :
- @Read_Sector   drive,zijde,spoor,sector,aantal,tekst :
- @Verify_Sector drive,zijde,spoor,sector,aantal,tekst :

Lezen, schrijven of controleren van n of meerdere sektoren naar/van disk.
        - Drive  A: = 0
                 B: = 1
                 C: = 2
        - Zijde  0 > ...
        - Spoor  0 > ...
        - Sector 1 > ...
        Aantal  = aantal te lezen sektoren.

- @Program naam :

Geeft de naam van het lopende programma door met drive en  pathnaam  in  de
variabele naam.  Naam moet een lengte van 80H hebben.(Na 0 van ASCIIZ komen
random waarden !) ES moet voor het aanroepen naar PSP wijzen (zie @init)

- @Get_Dos_Var naam,waarde :

Geeft  de  inhoud  van  Dos-variable naam terug in waarde.  Waarde moet een
lengte van 80H hebben.(Na 0 van ASCIIZ komen random waarden !) ES moet voor
het aanroepen naar PSP wijzen (zie @init)

Di = statusvlag :       - 0     = Gevonden !
                        - FFFFh = Dos-variable bestaat niet !

- @chk_xms :

Aanroepen als men in een programma XMS-geheugen wenst te gebruiken.
Retourneert status in di:       0 = XMS-geheugen is beschikbaar.
                                1 = Geen xms-geheugen aanwezig.

- @open_xms kbytes :

Bezetten van een XMS-blok.
Retourneert status in di:       0 = Alles O.K.
                                X = foutkode
Retourneert HANDLE in DX

- @close_xms handle :

Het terug vrijgeven van een XMS-blok.
HANDLE = waarde bij @open_xms teruggekregen.
Retourneert status in di:       0  = Alles O.K.
                                X  = foutkode

- @move_xms aantal_l,aantal_h,Shand,Soffset,Ssegment,Dhand,Doffset,Dsegment :

Verplaatsen van geheugenblok.
        - aantal        = aantal te verplaatsen bytes.
                          aantal_l  = low_word (1ste 16bits)
                          aantal_h  = high_word
        - (D)(S)hand    = Handle nummer van te verplaatsen- (S) en                                                                bestemmingsblok (D).
                          Indien Handle = 0 dan gaat het om een blok in het
                          konv. geheugen.
        - (D)(S)offset  = low_word van plaats binnen XMS_block.
                          of offset in konventioneel geheugen.
        - (D)(S)segment = high_word van plaats binnen XMS-block.
                          of segment in konventioneel geheugen.

Retourneert status in di:       0  = Alles O.K.
                                X  = foutkode

- @xms_drv :

Roept de XMS-driver rechtstreeks aan. ( Zie int 2Fh )

- @Palette kleur,rood,groen,blauw :

Aanpassen van een kleur. (Rood,Groen,Blauw : 0 - 63 )

- @Border kleur :

Aanpassen van de schermrandkleur. ( Normaal schermrandkleur = 0)

- @Line x1,y1,x2,y2,kleur,funktie :

Trekken van een lijn met cordinaten (x1,y1)-(x2,y2)
Kleur           =       kleur van de lijn
Functie         =       00000000b = Vervang
                        00001000b = AND
                        00010000b = OR
                        00011000b = Xor

Funktie mag weggelaten worden ! (Vervang = Standaard)

- @box x1,y1,x2,y2,kleur1,kleur2,funktie :

Tekenen van een rechthoek .
Kleur1          =       Randkleur rechthoek.
Kleur2          =       Binnenkleur rechthoek.
Funktie         =       (Zie @Line .... )

Indien kleur2 wordt weggelaten, wordt alleen de rand getekend.

- @box3D x1,y1,x2,y2,kleur1,kleur2,kleur3,funktie :

Tekenen van een  3D-rechthoek.
Kleur1          =       Binnenkleur rechthoek.
Kleur2          =       Randkleur 1 rechthoek.
Kleur3          =       Randkleur 2 rechthoek.
Funktie         =       (Zie @Line .... )

- @charset karset :

Definiren van een karakterset te gebruiken met @VgaPrint.
Op "KarSet" begint de definitietabel.
        -  00h = Xbytes  : Aantal bytes in X-richting waaruit de karakters
                           bestaan.
        -  01h = Ypixels : Hoogte van de karakters.
        -  02h = Start definitie karakters , te beginnen met CHR$(32).
                 - 1 = Waarde bij X te tellen als karakter is geschreven.
                 - 2 = Begin DATA-tabel (lengte = Xbytes * Ypixels)
                   .       (Data is geschreven van links naar rechts en
                   .        van boven naar onder. )
                   .
        -  xxh = Einde tabel.

- @VgaPrint tekst,x,y,kleur :

Het  schrijven  van grafische karakters (Zie @CharSet ) op de plaats (X,Y).
De kleur wordt ingesteld met de variabele KLEUR.  Kontrole karakters : (Zie
@Print).

Opmerking: @VgaPrint houdt geen rekening  met het overschrijden van de X-as
           of Y-as.

- @MsgBox x1,y1,x2,y2,c1,c2,c3,c4,c5,lengte,c6,hoogte,tekst,c7,MSG :

Variabelen x1 tot en met c7 : zie VIEWBOX : VIEWINIT
MSG : berichtstring, regels gescheiden door  chr$(255).
Deze instructie tekent een berichten-box op het scherm.  De paramaters zijn
analoog met de VIEWBOX instructies, om  alles  eenvoudig  te  houden.   Dit
heeft wel het nadeel dat de berichten-box maar op karakterniveau nauwkeurig
te plaatsen is.

Indien MSG wordt weggelaten, wordt er een box zonder bericht afgedrukt.

- @View_Load file :

Laadt  een  tekstbestand  in  het geheugen van de komputer.  (Konventioneel
Geheugen) De programmeur  moet  er  wel  voor  zorgen  dat er vrij geheugen
aanwezig is .  (Bv.:  met  mem-resize:  int=21h  ah=4Ah)  Horizontale  TABS
(chr$(9)) in het tekstbestand zijn niet toegelaten !
DI = Foutvlag : 0FFh    : DiskFout
                0FEh    : GeheugenFout : Te weinig konventioneel geheugen
                0FDh    : GeheugenFout : Totaal geen konv. geheugen te vinden
                00h     : Alles is O.K.
Geeft in SI het aantal regels waaruit het tekstbestand bestaat terug.

Opmerking: Bestanden met regels langer als 80H worden niet juist getoond!

- @View_File file,attrib,BeginDrive,Ext.Drive_routine :

Laadt  een  direktorie  in  het  geheugen  van de komputer.  (Konventioneel
Geheugen)
        - File      = Bestandspattern waarop te zoeken (wildcards/path)
        - Attrib    = Wat in direktorie te tonen ?
                        - 0  = Enkel normale bestanden (Standaard)
                        - 1  = Ook drives (te beginnen vanaf BeginDrive)
                        - 2  = Ook HIDDEN
                        - 4  = Ook SYSTEM
                        - 8  = Vergeet bestanden (Enkel drives/direktorie)
                        - 16 = Ook direktories
                        Optellen om de gewenste kombinatie te bekomen.
        - Ext.DrvRT = Externe routine waarmee eventuele drives uitgesloten
                      kunnen worden.
                      Ontvangt  :   DL = Diskdrive (A:=0)
                      De routine moet via CF de status teruggeven :
                                    CF = 1  :   Drive is ongeldig
                                    CF = 0  :   Drive is geldig

Geeft in SI het aantal regels waaruit de direktorie bestaat terug.
Attrib, BeginDrive, Ext.DrvRT mogen eventueel weggelaten worden.

- @View_left         :
- @View_right        :
- @View_up   herhaal :
- @View_down herhaal :

Toont het bestand in  het  geheugen  van  de  computer  n hoger , lager ,
linkser of  rechtser  op  het  scherm.   (Up/Down/Left/Right  duidt  op  de
scroll-richting van het scherm.) Bij View_Up of View_Down mag eventueel nog
een  herhaal-waarde  opgegeven worden om zo meerdere regels te 'scrollen' .
(Simuleren van PgUp/PgDown)

Bij @View_up/down wordt in DI een status terug gegeven :
        DI = 0 : Alles normaal
        DI = 1 : Scrollen gefaalt (Begin/Einde bestand)

- @View_Get tekst,regelnr :

Haalt regelnummer x op en zet deze in tekst (80h Bytes)

- @View_Free :

Maakt het geheugen dat door @View_Load bezet werd weer vrij.

- @View_Intern tekst,regels :

Tegenhanger van @View_Load.  Echter  in  de  plaats  van dat er een bestand
wordt ingeladen , kan hiermee een tekst die rechtstreeks  in  het  geheugen
staat  ,  getoond  worden.  Er wordt dan geen vrij geheugen bezet.  Hiermee
kunnen enkel KLEINE teksten  mee  getoond  worden  !   De tekst MOET in het
.DATA segment staan en mag dit segment niet overschrijden.   De  tekst  mag
geen kontrole-karakters bevatten (ook geen RETURN) , en elke regel moet 80H
bytes lang zijn.
Variabelen : - tekst :       Begin tekst
             - regels:       Aantal regels dat de tekst lang is.

Indien  het  niet  nodig  is dat deze tekst kan scrollen in de box , is het
beter om de @MsgBox-instructie uit  VGABOX.xxx te gebruiken.  Deze gebruikt
een minder verspillend formaat en kan  alles  volledig  in  een  aangepaste
karakterset tonen.

- @View_Init x1,y1,x2,y2,c1,c2,c3,c4,c5,lengte,c6,hoogte,tekst,c7 :

Toont  het  bestand  dat  met @View_Load ingeladen werd of met @View_Intern
gedefinieerd werd op het beeldscherm.

x1..y2 = cordinaten box op scherm ( KARAKTERCOORDINATEN ! (0-79,0-29))
c1     = letter(voorgrond)kleur
c2     = achtergrondkleur
c3     = 3D-randkleur1
c4     = 3D-randkleur2
c5     = Omlijstingkleur           (indien weggelaten ==> geen omlijsting)
lengte = grootte van omlijsting    (indien weggelaten ==> geen omlijsting)
c6     = Titelbalkkleur            (indien weggelaten ==> geen titelbalk )
hoogte = hoogte van Titelbalk      (indien weggelaten ==> geen titelbalk )
tekst  = Eventuele tekst in titelbalk , gebruikt @VGAPRINT , dus moet er
         opvoorhand met @CHARSET een karakter gedefinieerd worden !!!!!!
c7     = Kleur van de tekst in de titelbalk.

- @Mouse_Init :

is gelijk aan int=33h ax=0000h
Geeft terug :   AX      =       status
                                0000h   = hardware/driver niet genstalleerd
                                FFFFh   = hardware/driver genstalleerd
                BX      =       aantal muisknoppen
                                0000h   = ander dan twee
                                0002h   = twee knoppen (vele drivers)
                                0003h   = drie knoppen
                                FFFFh   = twee knoppen

- @Mouse_Show :

is gelijk aan int=33h ax=0001h

- @Mouse_Hide :

is gelijk aan int=33h ax=0002h

- @Mouse_Status :

is gelijk aan int=33h ax=0003h
Geeft terug :   BX      =       knoppen-status
                                bit 0   = 1     : linkerknop ingedrukt
                                bit 1   = 1     : rechterknop ingedrukt
                                bit 2   = 1     : middenknop ingedrukt
                CX      =       kolom
                DX      =       rij

