
                UNREAL.LIB s UNREAL.H
               

   Egy, a 80386-os s vele fellrl kompatibilis processzorok igen
 meglep tulajdonsga hasznlhat fl e knyvtr segtsgvel. Ha
 tkapcsolunk vdett zemmdba, ott a szegmensdeszkriptorok hatrt
 trjuk 4GByte-ra, majd visszatrnk vals zemmdba, akkor meg-
 marad a 4GByte-os cmtartomnyunk! Teht 32 bites eltolsokat
 hasznlhatunk brmilyen adatelrsre! Az tkapcsols sorn csak
 rvid ideig maradunk vdett mdban, gy nem kell a megszakts-
 deszkriptorokat belltani (meg sok egyb bonyolult mveletet el-
 vgezni), hanem egyszeren letilthatjuk a megszaktsokat, majd
 a vals mdba trtn visszakapcsolskor jra engedlyezzk azokat.
 A knyvtrba az tkapcsolshoz szksges minden funkci bele van
 ptve.
   Termszetesen a mdszer nem mkdik akkor, ha mr vdett vagy
 virtulis (V86-os) mdban van a processzor, teht a szmtgpet
 EMM386, QEMM, s egyb V86-os zemmdot ad programok nlkl
 kell indtani. Ugyanezrt nem mkodik a mdszer Windows DOS-ablak
 alatt sem.


                Vltozk:
               

   _sysbyte0  - memriakezel tpusa.
                0=nincs memriakezel
                1=XMS (pl. HIMEM.SYS) van installlva
   _himembase - fels memria alja (32 bites abszolt cm)
   _himemtop  - fels memria teteje (32 bites abszolt cm)


                Eljrsok s fggvnyek:
               

        UNREAL_INIT::
       ---------------
   Inicializl rutin, csak egyszer szabad hvni, a program elejn.
 Bekapcsolja az A20-as cmvonalat (ha ki volt kapcsolva), hiszen
 enlkl hibs memriahivatkozsok lphetnek fl. Ezutn bekapcsolja
 a 32 bites cmzst a CS, DS, ES, FS s GS szegmensekre.
 Inicializlja a vltozkat:

    BE: -
    KI: CF=1 ha hiba volt. V86-os zemmdban van a processzor, vagy
        nem tudta bekapcsolni az A20-as vonalat.


        UNREAL_UNINIT::
       -----------------
    Kilps eltt kell meghvni, csak XMS-nl van jelentsge.
 Felszabadtja a lefoglalt fels memrit.

        _getmem::
       -----------
    Memriafoglals. Elszr alst, aztn felst prblja.
    BE:  EAX=mret byteban  (16 tbbszrse kell legyen)
    KI:  CF=1 - hiba trtnt (nincs elg memria)
         CF=0 -> sikerlt,  EAX=32 bites abszolt cm

    UNREAL.H hasznlata esetn fggvnyknt is hvhatjuk:
       #GETMEM(EAX):EAX
       pl.:  VAR MEMSG1=GETMEM(20000h)

        _getlomem::
       -------------
    Memriafoglals. Csak als
    Fggvnyknt:  #GETLOMEM(EAX):EAX

        _gethimem::
       -------------
    Memriafoglals. Csak fels
    Fggvnyknt:  #GETHIMEM(EAX):EAX


        Bels rutinok, UNREAL_INIT hvja ket:
       ----------------------------------------

   enableA20::
 Bekapcsolja az A20-as (1MB feletti cmzs-) vonalat

   testA20::
 Megnzi hogy be van-e kapcsolva az A20-as vonal

   NSK_INIT::
 tlp vdett mdba, trja a szegmenshatrokat 64KByte-rl
 4GB-ra, s visszalp vals mdba.

                Makrk:
               
 Az UNREAL.H tartalmaz nhny j utastst a 32 bites programozs
 megknnytsre:
    LODSB32     -  a LODSB 32 bites megfelelje, AL:=[DS:ESI]//++ESI
    LODSW32     -  a LODSW 32 bites megfelelje, AX:=[DS:ESI]//ESI+=2
    LODSD32     -  a LODSD 32 bites megfelelje, EAX:=[DS:ESI]//ESI+=4
    s ugyanilyen mdon:  STOSx32, MOVSx32 utastsok.
    LOOP32 xx   -  a LOOP 32 bites verzija,  --ECX//JNZ xx
    REP32 xx    -  a REP 32 bites verzija

 Megjegyzs: a BAssPasC v2.3 mg nem tmogatja a felbvtett
 stringmveletek 32 bites vltozatt, teht a "REP32*n STOSxy32 d1[,d2]"
 nem mkdik. De sajnos mg a "REP STOSW32" sem. De ez hamarosan ki
 lesz javtva!


