home *** CD-ROM | disk | FTP | other *** search
/ Intermedia 1998 January / inter1_98.iso / www / rozi / RAW2.ZIP / XMS.PAS < prev   
Pascal/Delphi Source File  |  1995-02-18  |  3KB  |  115 lines

  1. {           Copyright 1995 by Ethan Brodsky.  All rights reserved.           }
  2. unit XMS;
  3.   interface
  4.    {Initialization}
  5.     function XMSInstalled: boolean;
  6.     procedure XMSInit;
  7.  
  8.    {Informational}
  9.     function XMSGetVersion: word;
  10.     function XMSGetFreeMem: word;
  11.  
  12.    {Allocation and deallocation}
  13.     function XMSAllocate(var Handle: word; Size: word): boolean;
  14.     function XMSReallocate(Handle: word; NewSize: word): boolean;
  15.     function XMSFree(Handle: word): boolean;
  16.  
  17.    {Memory moves}
  18.     type
  19.       PMoveParams = ^TMoveParams;
  20.       TMoveParams =
  21.         record
  22.           Length       : LongInt;
  23.           SourceHandle : word;
  24.           SourceOffset : LongInt;
  25.           DestHandle   : word;
  26.           DestOffset   : LongInt;
  27.         end;
  28.     function XMSMove(Params: PMoveParams): boolean;
  29.  
  30.   implementation  {██████████████████████████████████████████████████████████}
  31.     var
  32.       XMSDriver: pointer;
  33.  
  34. {════════════════════════════════════════════════════════════════════════════}
  35.  
  36.     function XMSInstalled: boolean; assembler;
  37.       asm
  38.         mov    ax, 4300h
  39.         int    2Fh
  40.         cmp    al, 80h
  41.         jne    @NoXMSDriver
  42.         mov    al, TRUE
  43.         jmp    @Done
  44.        @NoXMSDriver:
  45.         mov    al, FALSE
  46.        @Done:
  47.       end;
  48.  
  49. {────────────────────────────────────────────────────────────────────────────}
  50.  
  51.     procedure XMSInit; assembler;
  52.       asm
  53.         mov    ax, 4310h
  54.         int    2Fh
  55.         mov    word ptr [XMSDriver], bx
  56.         mov    word ptr [XMSDriver+2], es
  57.       end;
  58.  
  59. {════════════════════════════════════════════════════════════════════════════}
  60.  
  61.     function XMSGetVersion: word; assembler;
  62.       asm
  63.         mov    ah, 00h
  64.         call   XMSDriver
  65.       end;
  66.  
  67. {────────────────────────────────────────────────────────────────────────────}
  68.  
  69.     function XMSGetFreeMem: word; assembler;
  70.       asm
  71.         mov    ah, 08h
  72.         call   XMSDriver
  73.         mov    ax, dx
  74.       end;
  75.  
  76. {════════════════════════════════════════════════════════════════════════════}
  77.  
  78.     function XMSAllocate(var Handle: word; Size: word): boolean; assembler;
  79.       asm
  80.         mov    ah, 09h
  81.         mov    dx, Size
  82.         call   XMSDriver
  83.         les    di, Handle
  84.         mov    es:[di], dx
  85.       end;
  86.  
  87. {────────────────────────────────────────────────────────────────────────────}
  88.  
  89.     function XMSReallocate(Handle: word; NewSize: word): boolean; assembler;
  90.       asm
  91.         mov    ah, 0Fh
  92.         mov    bx, NewSize
  93.         mov    dx, Handle
  94.         call   XMSDriver
  95.       end;
  96.  
  97. {────────────────────────────────────────────────────────────────────────────}
  98.  
  99.     function XMSFree(Handle: word): boolean; assembler;
  100.       asm
  101.         mov    ah, 0Ah
  102.         mov    dx, Handle
  103.         call   XMSDriver
  104.       end;
  105.  
  106. {════════════════════════════════════════════════════════════════════════════}
  107.     function XMSMove(Params: PMoveParams): boolean; assembler;
  108.       asm
  109.         push   ds
  110.         mov    ah, 0Bh
  111.         lds    si, Params
  112.         call   XMSDriver
  113.         pop    ds
  114.       end;
  115.   end.  {████████████████████████████████████████████████████████████████████}