home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / pascal / visionix / vemsu.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-12-23  |  33.4 KB  |  1,753 lines

  1. {
  2.  ════════════════════════════════════════════════════════════════════════════
  3.  
  4.  Visionix Expanded Memory Services Unit (VEMS)
  5.    Version 0.7
  6.  Copyright 1991,92,93 Visionix
  7.  ALL RIGHTS RESERVED
  8.  
  9.  ────────────────────────────────────────────────────────────────────────────
  10.  
  11.  Revision history in reverse chronological order:
  12.  
  13.  Initials  Date      Comment
  14.  ────────  ────────  ────────────────────────────────────────────────────────
  15.  
  16.  mep       03/30/93  Moved EMS 4.0/3.2 code from VMemLow as replacement
  17.  
  18.  lpg       03/15/93  Added Source Documentation
  19.  
  20.  mep       02/11/93  Cleaned up code for beta release
  21.  
  22.  jrt       02/08/93  Sync with beta 0.12 release
  23.  
  24.  jrt       12/07/92  Sync with beta 0.11 release
  25.  
  26.  jrt       11/21/92  Sync with beta 0.08
  27.  
  28.  jrt       11/18/92  First logged revision.
  29.  
  30.  ────────────────────────────────────────────────────────────────────────────
  31.  
  32. }
  33.  
  34. (*-
  35.  
  36. [TEXT]
  37.  
  38. <Overview>
  39.  
  40. This unit implements a function for all commands in the EMS
  41. specification.
  42.  
  43. The documentation for this unit will be enhanced in the next release.
  44.  
  45. <Interface>
  46.  
  47. -*)
  48.  
  49.  
  50. Unit VEMSu;
  51.  
  52. Interface
  53.  
  54. Uses
  55.  
  56.   VTypesu,
  57.   DOS;
  58.  
  59. {────────────────────────────────────────────────────────────────────────────}
  60.  
  61. Type
  62.  
  63.   TEMSError  = BYTE;
  64.  
  65.   {-----------------------------}
  66.  
  67.   TEMSHandle = WORD;
  68.   PEMSHandle = ^TEMSHandle;
  69.  
  70.   {-----------------------------}
  71.  
  72.   TEMMHandle = WORD;
  73.   PEMMHandle = ^TEMMHandle;
  74.  
  75.   {-----------------------------}
  76.  
  77.   TEMSMapArr = RECORD
  78.  
  79.     LogicPage    : WORD;  { $FFFF = unmap physical pg }
  80.     PhysicalPage : WORD;  { segment address }
  81.  
  82.   END;
  83.   PEMSMapArr = ^TEMSMapArr;
  84.  
  85.   {-----------------------------}
  86.  
  87.   TEMSHandleName = Array[1..8] of BYTE;
  88.   PEMSHandleName = ^TEMSHandleName;
  89.  
  90.   {-----------------------------}
  91.  
  92.   TEMSHandleDir = RECORD
  93.  
  94.     Handle     : WORD;
  95.     HandleName : TEMSHandleName;
  96.  
  97.   END;
  98.   PEMSHandleDir = ^TEMSHandleDir;
  99.  
  100.   {-----------------------------}
  101.  
  102.   TEMSMapAddr = RECORD
  103.  
  104.   END;
  105.   PEMSMapAddr = ^TEMSMapAddr;
  106.  
  107.   {-----------------------------}
  108.  
  109.   TEMSCopyData = RECORD
  110.  
  111.     RegionLen       : LONGINT;
  112.     SourceMemType   : BYTE;     { 0 = conventional, 1 = expanded }
  113.     SourceHandle    : WORD;     { 0 if conventional memory       }
  114.     SourceInitOfs   : WORD;     { within page if EMS,            }
  115.                                 { within segment if conventional }
  116.     SourceInitSegPg : WORD;     { segment if conventional memory,}
  117.                                 { logical page if EMS            }
  118.     DestMemType     : BYTE;     { 0 = conventional, 1 = expanded }
  119.     DestHandle      : WORD;
  120.     DestInitOfs     : WORD;
  121.     DestInitSegPg   : WORD;
  122.  
  123.   END;
  124.   PEMSCopyData = ^TEMSCopyData;
  125.  
  126.   {-----------------------------}
  127.  
  128.   TEMSMapPhyAddr = RECORD
  129.  
  130.     PhysicalPgSeg : WORD;
  131.     PhysicalPgNum : WORD;
  132.  
  133.   END;
  134.   PEMSMapPhyAddr = ^TEMSMapPhyAddr;
  135.  
  136.   {-----------------------------}
  137.  
  138.   TEMSHardwareCfgArr = RECORD
  139.  
  140.     SizeRawEMMPg       : WORD;  { in paragraphs }
  141.     NumAlternRegSet    : WORD;
  142.     SizeSaveMapContext : WORD;  { in bytes }
  143.     NumRegSetAssignDMA : WORD;
  144.     DMAOperationType   : WORD;  { 0 = DMA w/alternate register sets,  }
  145.                                 { 1 = only one DMA register set       }
  146.  
  147.   END;
  148.   PEMSHardwareCfgArr = ^TEMSHardwareCfgArr;
  149.  
  150. {────────────────────────────────────────────────────────────────────────────}
  151.  
  152. {----------}
  153. { EMS 3.2+ }
  154. {----------}
  155.  
  156. Function  VEMSErrorToStr(             Status       : TEMSError  ) : STRING;
  157.  
  158. Function  VEMSInstalled                            : BOOLEAN;
  159.  
  160. Function  VEMSGetManagerStatus                     : TEMSError;
  161.  
  162. Function  VEMSGetPgFrameStatus(   Var PgFrameSeg   : WORD       ) : TEMSError;
  163.  
  164. Function  VEMSGetFreePg(          Var UnallocPg    : WORD;
  165.                                   Var TotalPg      : WORD       ) : TEMSError;
  166.  
  167. Function  VEMSNewHandle(              LogicalPg    : WORD;
  168.                                   Var EMSHandle    : TEMSHandle ) : TEMSError;
  169.  
  170. Function  VEMSMapMemory(              EMSHandle    : TEMSHandle;
  171.                                       PhysicalPg   : BYTE;
  172.                                       LogicalPg    : WORD       ) : TEMSError;
  173.  
  174. Function  VEMSDisposeHandle(          EMMHandle    : TEMMHandle ) : TEMSError;
  175.  
  176. Function  VEMMGetVersion(         Var EMMVersion   : BYTE       ) : TEMSError;
  177.  
  178. Function  VEMSSaveMapContext(         EMSHandle    : TEMSHandle ) : TEMSError;
  179.  
  180. Function  VEMSRestoreMapContext(      EMSHandle    : TEMSHandle ) : TEMSError;
  181.  
  182. Function  VEMMGetNumHandles(      Var NumHandles   : WORD       ) : TEMSError;
  183.  
  184. Function  VEMSPgsOwnedByHandle(       EMMHandle    : TEMMHandle;
  185.                                   Var LogicalPgs   : WORD       ) : TEMSError;
  186.  
  187. Function  VEMSGetPgAllHandles(        EMMInfo      : POINTER;
  188.                                   Var NumHandles   : WORD       ) : TEMSError;
  189.  
  190. Function  VEMSGetPgMap(               OutMapReg    : POINTER    ) : TEMSError;
  191.  
  192. Function  VEMSSetPgMap(               InMapReg     : POINTER    ) : TEMSError;
  193.  
  194. Function  VEMSGetSetPgMap(            InMapReg     : POINTER;
  195.                                       OutMapReg    : POINTER    ) : TEMSError;
  196.  
  197. Function  VEMSGetSizePgMapArr(    Var Size         : BYTE       ) : TEMSError;
  198.  
  199.  
  200. {────────────────────────────────────────────────────────────────────────────}
  201.  
  202. {---------}
  203. { EMS 4.0 }
  204. {---------}
  205.  
  206. Function  VEMSGetPartPgMap(           InPartMap    : POINTER;
  207.                                       OutPartMap   : POINTER    ) : TEMSError;
  208.  
  209. Function  VEMSSetPartPgMap(           InPartMap    : POINTER    ) : TEMSError;
  210.  
  211. Function  VEMSGetSizePartPgMap(       NumMapSeg    : WORD;
  212.                                   Var Size         : BYTE       ) : TEMSError;
  213.  
  214. Function  VEMSMapMultiHandlePg(       EMSHandle    : TEMSHandle;
  215.                                       UseSegAddr   : BOOLEAN;
  216.                                       NumInArr     : WORD;
  217.                                       EMSMapArr    : PEMSMapArr ) : TEMSError;
  218.  
  219. Function  VEMSReallocatePg(           EMSHandle    : TEMSHandle;
  220.                                       NumPg        : WORD;
  221.                                   Var RealNumP     : WORD       ) : TEMSError;
  222.  
  223. Function  VEMSGetHandleAttr(          EMSHandle    : TEMSHandle;
  224.                                   Var HandleAttr   : BYTE       ) : TEMSError;
  225.  
  226. Function  VEMSSetHandleAttr(          EMSHandle    : TEMSHandle;
  227.                                       HandleAttr   : BYTE       ) : TEMSError;
  228.  
  229. Function  VEMSGetHandleCapable(       EMSHandle    : TEMSHandle;
  230.                                   Var AttrCapable  : BYTE       ) : TEMSError;
  231.  
  232. Function  VEMSGetHandleName(          EMSHandle    : TEMSHandle;
  233.                                       HandleName   : POINTER    ) : TEMSError;
  234.  
  235. Function  VEMSSetHandleName(          EMSHandle    : TEMSHandle;
  236.                                       HandleName   : POINTER    ) : TEMSError;
  237.  
  238. Function  VEMSGetHandleDir(           HandleDir    : PEMSHandleDir;
  239.                                   Var NumEntries   : BYTE       ) : TEMSError;
  240.  
  241. Function  VEMSSearchNamedHandle(      HandleName   : PEMSHandleName;
  242.                                   Var Value        : WORD       ) : TEMSError;
  243.  
  244. Function  VEMSGetTotalHandles(    Var TotalHandles : WORD       ) : TEMSError;
  245.  
  246. Function  VEMSAlterPgMapJump(         EMSHandle    : TEMSHandle;
  247.                                       UseSegAddr   : BOOLEAN;
  248.                                       MapAddr      : PEMSMapAddr) : TEMSError;
  249.  
  250. Function  VEMSAlterPgMapCall(         EMSHandle    : TEMSHandle;
  251.                                       UseSegAddr   : BOOLEAN;
  252.                                       MapAddr      : PEMSMapAddr) : TEMSError;
  253.  
  254. Function  VEMSGetPgMapStackReq(   Var StackSpaceReq: WORD       ) : TEMSError;
  255.  
  256. Function  VEMSMoveMemRegion(          EMSCopyData  : PEMSCopyData): TEMSError;
  257.  
  258. Function  VEMSExchangeMemRegion(      EMSCopyData  : PEMSCopyData): TEMSError;
  259.  
  260. Function  VEMSGetMapPhyAddrArr(       MapPhyAddr   : PEMSMapPhyAddr;
  261.                                   Var NumEntries   : WORD       ) : TEMSError;
  262.  
  263. Function  VEMSGetEntriesMPAArr(   Var NumEntries   : WORD       ) : TEMSError;
  264.  
  265. Function  VEMSHardwareCfgArr(         EMSHardwareCfgArr : PEMSHardwareCfgArr ) : TEMSError;
  266.  
  267. Function  VEMSGetUnallocRawPg(    Var UnallocRawPg : WORD;
  268.                                   Var TotalRawPg   : WORD       ) : TEMSError;
  269.  
  270. Function  VEMSAllocStandardPg(        NumPg        : WORD;
  271.                                   Var EMSHandle    : TEMSHandle ) : TEMSError;
  272.  
  273. Function  VEMSAllocRawPg(             NumPg        : WORD;
  274.                                   Var EMSHandle    : TEMSHandle ) : TEMSError;
  275.  
  276. Function  VEMSGetAltMapRegSet(    Var AltMapRegSet : BYTE;
  277.                                       SaveMapContxt: POINTER    ) : TEMSError;
  278.  
  279. Function  VEMSSetAltMapRegSet(        AltMapRegSet : BYTE;
  280.                                       SaveMapContxt: POINTER    ) : TEMSError;
  281.  
  282. Function  VEMSGetAltMapSaveArrSize(Var ArrSize     : WORD       ) : TEMSError;
  283.  
  284. Function  VEMSAllocAltMapRegSet(  Var AltMapRegSet : BYTE       ) : TEMSError;
  285.  
  286. Function  VEMSDeallocAltMapRegSet(    AltMapRegSet : BYTE       ) : TEMSError;
  287.  
  288. Function  VEMSAllocDMARegSet(     Var DMARegSet    : BYTE       ) : TEMSError;
  289.  
  290. Function  VEMSEnabDMAAltMapRegSet(    DMARegSet    : BYTE;
  291.                                       DMAChannel   : BYTE       ) : TEMSError;
  292.  
  293. Function  VEMSDisabDMAAltMapRegSet(   DMARegSet    : BYTE       ) : TEMSError;
  294.  
  295. Function  VEMSDeallocDMARegSet(       DMARegSet    : BYTE       ) : TEMSError;
  296.  
  297. Function  VEMSPrepWarmBoot                         : TEMSError;
  298.  
  299. Function  VEMSEnabOSFuncSet(      Var AccessKey    : LONGINT    ) : TEMSError;
  300.  
  301. Function  VEMSDisabOSFuncSet(     Var AccessKey    : LONGINT    ) : TEMSError;
  302.  
  303. Function  VEMSRetAccessKey(       Var AccessKey    : LONGINT    ) : TEMSError;
  304.  
  305. {────────────────────────────────────────────────────────────────────────────}
  306.  
  307. Implementation
  308.  
  309. {────────────────────────────────────────────────────────────────────────────}
  310.  
  311. Function  VEMSErrorToStr(             Status       : TEMSError  ) : STRING;
  312.  
  313. Var
  314.  
  315.   S : STRING;
  316.  
  317. BEGIN
  318.  
  319.   S := '';
  320.  
  321.   Case (Status SHR 8) Of
  322.  
  323.     $80 : S := 'Internal error';
  324.     $81 : S := 'Hardware malfunction';
  325.     $82 : S := 'Expanded memory manager is busy';
  326.     $83 : S := 'Invalid handle';
  327.     $84 : S := 'Undefined function requested';
  328.     $85 : S := 'No more handles available';
  329.     $86 : S := 'Error saving or restoring mapping context';
  330.     $87 : S := 'Insufficient memory pages in system';
  331.     $88 : S := 'Insufficient memory pages available';
  332.     $89 : S := 'Attempt to allocate 0 pages';
  333.     $8A : S := 'One or more logical pages are invalid';
  334.     $8B : S := 'One or more physical pages are invalid';
  335.     $8C : S := 'Page-mapping hardware state save area is full';
  336.     $8D : S := 'Save area already contains this handle';
  337.     $8E : S := 'Save area does not contain this handle';
  338.     $8F : S := 'Undefined subfunction';
  339.     $90 : S := 'Undefined attribute type';
  340.     $91 : S := 'Feature not supported';
  341.     $92 : S := 'Successful, but a portion of source region has been overwritten';
  342.     $93 : S := 'Length of source or destination region exceeds length of region allocated to either handles';
  343.     $94 : S := 'Conventional and expanded memory regions overlap';
  344.     $95 : S := 'Offset within logical page exceeds size of logical page';
  345.     $96 : S := 'Region length exceeds one megabyte';
  346.     $97 : S := 'Source and destination EMS regions have same handle and overlap';
  347.     $98 : S := 'Memory source or destination type undefined';
  348.     $9A : S := 'Specified DMA or alternate map register set not supported';
  349.     $9B : S := 'All DMA or alternate map register set currently allocated';
  350.     $9C : S := 'Alternate DMA or map register sets not supported';
  351.     $9D : S := 'Undefined or unallocated DMA or alternate map register set';
  352.     $9E : S := 'Dedicated DMA channels not supported';
  353.     $9F : S := 'Specified dedicated DMA channel not supported';
  354.     $A0 : S := 'No such handle name';
  355.     $A1 : S := 'Handle found has no name or duplicate handle name';
  356.     $A2 : S := 'Attempted to wrap around one-megabyte conventional address space';
  357.     $A3 : S := 'Contents of source array/partial page map corrupted; ' +
  358.                'Count of mappable segments exceeds total number of mappable segments in system';
  359.     $A4 : S := 'Access denied by operating system';
  360.  
  361.   End;
  362.  
  363.   VEMSErrorToStr := S;
  364.  
  365. END;
  366.  
  367. {────────────────────────────────────────────────────────────────────────────}
  368.  
  369. (*-
  370.  
  371. [FUNCTION]
  372.  
  373. Function  VEMSInstalled                            : BOOLEAN;
  374.  
  375. [PARAMETERS]
  376.  
  377. (None)
  378.  
  379. [RETURNS]
  380.  
  381. Whether EMS Support is Available
  382.  
  383. [DESCRIPTION]
  384.  
  385. [SEE-ALSO]
  386.  
  387. [EXAMPLE]
  388.  
  389. -*)
  390.  
  391. Function  VEMSInstalled                            : BOOLEAN;
  392.  
  393. Type
  394.  
  395.   TEMSSignature = Array[1..8] of Char;
  396.   PEMSSignature = ^TEMSSignature;
  397.  
  398. Var
  399.  
  400.   TempPtr : PEMSSignature;
  401.  
  402. BEGIN
  403.  
  404.   GetIntVec( $67, Pointer(TempPtr) );
  405.  
  406.   TempPtr := Ptr( Seg( TempPtr^ ), 10 );
  407.  
  408.   VEMSInstalled := (TempPtr^='EMMXXXX0');
  409.  
  410. END;
  411.  
  412. {────────────────────────────────────────────────────────────────────────────}
  413.  
  414. Function  VEMSGetManagerStatus                     : TEMSError;
  415.  
  416. Assembler;
  417.  
  418. ASM
  419.  
  420.   MOV  AH, $40
  421.   INT  $67
  422.  
  423. END;
  424.  
  425. {────────────────────────────────────────────────────────────────────────────}
  426.  
  427. Function  VEMSGetPgFrameStatus(   Var PgFrameSeg   : WORD       ) : TEMSError;
  428.  
  429. Assembler;
  430.  
  431. ASM
  432.  
  433.   MOV  AH, $41
  434.   INT  $67
  435.  
  436.   CMP  AH, 0
  437.   JE   @SUCCESS
  438.  
  439.  @NEXT:
  440.  
  441.   JMP  @EXIT
  442.  
  443.  @SUCCESS:
  444.  
  445.   LES  DI, PgFrameSeg
  446.   MOV  ES:[DI], BX
  447.  
  448.  @EXIT:
  449.  
  450. END;
  451.  
  452. {────────────────────────────────────────────────────────────────────────────}
  453.  
  454. Function  VEMSGetFreePg(          Var UnallocPg    : WORD;
  455.                                   Var TotalPg      : WORD       ) : TEMSError;
  456.  
  457. Assembler;
  458.  
  459. ASM
  460.  
  461.   MOV  AH, $42
  462.   INT  $67
  463.  
  464.   CMP  AH, 0
  465.   JE   @SUCCESS
  466.  
  467.  @NEXT:
  468.  
  469.   JMP  @EXIT
  470.  
  471.  @SUCCESS:
  472.  
  473.   LES  DI, UnallocPg
  474.   MOV  ES:[DI], BX
  475.  
  476.   LES  DI, TotalPg
  477.   MOV  ES:[DI], DX
  478.  
  479.  @EXIT:
  480.  
  481. END;
  482.  
  483. {────────────────────────────────────────────────────────────────────────────}
  484.  
  485. Function  VEMSNewHandle(              LogicalPg    : WORD;
  486.                                   Var EMSHandle    : TEMSHandle ) : TEMSError;
  487.  
  488. Assembler;
  489.  
  490. ASM
  491.  
  492.   MOV  AH, $43
  493.   MOV  BX, LogicalPg
  494.   INT  $67
  495.  
  496.   CMP  AH, 0
  497.   JE   @SUCCESS
  498.  
  499.  @NEXT:
  500.  
  501.   JMP  @EXIT
  502.  
  503.  @SUCCESS:
  504.  
  505.   LES  DI, EMSHandle
  506.   MOV  ES:[DI], DX
  507.  
  508.  @EXIT:
  509.  
  510. END;
  511.  
  512. {────────────────────────────────────────────────────────────────────────────}
  513.  
  514. Function  VEMSMapMemory(              EMSHandle    : TEMSHandle;
  515.                                       PhysicalPg   : BYTE;
  516.                                       LogicalPg    : WORD       ) : TEMSError;
  517.  
  518. Assembler;
  519.  
  520. ASM
  521.  
  522.   MOV  AH, $44
  523.   MOV  DX, EMSHandle
  524.   MOV  AL, PhysicalPg  { [0..3] }
  525.   MOV  BX, LogicalPg
  526.   INT  $67
  527.  
  528. END;
  529.  
  530. {────────────────────────────────────────────────────────────────────────────}
  531.  
  532. Function  VEMSDisposeHandle(          EMMHandle    : TEMMHandle ) : TEMSError;
  533.  
  534. Assembler;
  535.  
  536. ASM
  537.  
  538.   MOV  AH, $45
  539.   MOV  DX, EMMHandle
  540.   INT  $67
  541.  
  542. END;
  543.  
  544. {────────────────────────────────────────────────────────────────────────────}
  545.  
  546. Function  VEMMGetVersion(         Var EMMVersion   : BYTE       ) : TEMSError;
  547.  
  548. Assembler;
  549.  
  550. ASM
  551.  
  552.   MOV  AH, $46
  553.   INT  $67
  554.  
  555.   CMP  AH, 0
  556.   JE   @SUCCESS
  557.  
  558.  @NEXT:
  559.  
  560.   JMP  @EXIT
  561.  
  562.  @SUCCESS:
  563.  
  564.   LES  DI, EMMVersion
  565.   MOV  ES:[DI], AL
  566.   XOR  AL, AL
  567.  
  568.  @EXIT:
  569.  
  570. END;
  571.  
  572. {────────────────────────────────────────────────────────────────────────────}
  573.  
  574. Function  VEMSSaveMapContext(         EMSHandle    : TEMSHandle ) : TEMSError;
  575.  
  576. Assembler;
  577.  
  578. ASM
  579.  
  580.   MOV  AH, $47
  581.   MOV  DX, EMSHandle
  582.   INT  $67
  583.  
  584. END;
  585.  
  586. {────────────────────────────────────────────────────────────────────────────}
  587.  
  588. Function  VEMSRestoreMapContext(      EMSHandle    : TEMSHandle ) : TEMSError;
  589.  
  590. Assembler;
  591.  
  592. ASM
  593.  
  594.   MOV  AH, $48
  595.   MOV  DX, EMSHandle
  596.   INT  $67
  597.  
  598. END;
  599.  
  600. {────────────────────────────────────────────────────────────────────────────}
  601.  
  602. Function  VEMMGetNumHandles(      Var NumHandles   : WORD       ) : TEMSError;
  603.  
  604. Assembler;
  605.  
  606. ASM
  607.  
  608.   MOV  AH, $4B
  609.   INT  $67
  610.  
  611.   CMP  AH, 0
  612.   JE   @SUCCESS
  613.  
  614.  @NEXT:
  615.  
  616.   JMP  @EXIT
  617.  
  618.  @SUCCESS:
  619.  
  620.   LES  DI, NumHandles
  621.   MOV  ES:[DI], BX
  622.  
  623.  @EXIT:
  624.  
  625. END;
  626.  
  627. {────────────────────────────────────────────────────────────────────────────}
  628.  
  629. Function  VEMSPgsOwnedByHandle(       EMMHandle    : TEMMHandle;
  630.                                   Var LogicalPgs   : WORD       ) : TEMSError;
  631.  
  632. Assembler;
  633.  
  634. ASM
  635.  
  636.   MOV  AH, $4C
  637.   MOV  DX, EMMHandle
  638.   INT  $67
  639.  
  640.   CMP  AH, 0
  641.   JE   @SUCCESS
  642.  
  643.  @NEXT:
  644.  
  645.   JMP  @EXIT
  646.  
  647.  @SUCCESS:
  648.  
  649.   LES  DI, LogicalPgs
  650.   MOV  ES:[DI], BX
  651.  
  652.  @EXIT:
  653.  
  654. END;
  655.  
  656. {────────────────────────────────────────────────────────────────────────────}
  657.  
  658. Function  VEMSGetPgAllHandles(        EMMInfo      : POINTER;
  659.                                   Var NumHandles   : WORD       ) : TEMSError;
  660.  
  661. Assembler;
  662.  
  663. ASM
  664.  
  665.   MOV  AH, $4D
  666.   MOV  ES, word PTR [EMMInfo+2]
  667.   MOV  DI, word PTR [EMMInfo]
  668.  
  669.   INT  $67
  670.  
  671.   CMP  AH, 0
  672.   JE   @SUCCESS
  673.  
  674.  @NEXT:
  675.  
  676.   JMP  @EXIT
  677.  
  678.  @SUCCESS:
  679.  
  680.   LES  DI, NumHandles
  681.   MOV  ES:[DI], BX
  682.  
  683.  @EXIT:
  684.  
  685. END;
  686.  
  687. {────────────────────────────────────────────────────────────────────────────}
  688.  
  689. Function  VEMSGetPgMap(               OutMapReg    : POINTER    ) : TEMSError;
  690.  
  691. Assembler;
  692.  
  693. ASM
  694.  
  695.   MOV  AH, $4E
  696.   MOV  AL, 0
  697.   MOV  ES, word PTR [OutMapReg+2]
  698.   MOV  DI, word PTR [OutMapReg]
  699.  
  700.   INT  $67
  701.  
  702. END;
  703.  
  704. {────────────────────────────────────────────────────────────────────────────}
  705.  
  706. Function  VEMSSetPgMap(               InMapReg     : POINTER    ) : TEMSError;
  707.  
  708. Assembler;
  709.  
  710. ASM
  711.  
  712.   PUSH DS
  713.  
  714.   MOV  AH, $4E
  715.   MOV  AL, 1
  716.   MOV  DS, word PTR [InMapReg+2]
  717.   MOV  SI, word PTR [InMapReg]
  718.  
  719.   INT  $67
  720.  
  721.   POP  DS
  722.  
  723. END;
  724.  
  725. {────────────────────────────────────────────────────────────────────────────}
  726.  
  727. Function  VEMSGetSetPgMap(            InMapReg     : POINTER;
  728.                                       OutMapReg    : POINTER    ) : TEMSError;
  729.  
  730. Assembler;
  731.  
  732. ASM
  733.  
  734.   PUSH DS
  735.  
  736.   MOV  AH, $4E
  737.   MOV  AL, 2
  738.   MOV  DS, word PTR [InMapReg+2]
  739.   MOV  SI, word PTR [InMapReg]
  740.   MOV  ES, word PTR [OutMapReg+2]
  741.   MOV  DI, word PTR [OutMapReg]
  742.  
  743.   INT  $67
  744.  
  745.   POP  DS
  746.  
  747. END;
  748.  
  749. {────────────────────────────────────────────────────────────────────────────}
  750.  
  751. Function  VEMSGetSizePgMapArr(    Var Size         : BYTE       ) : TEMSError;
  752.  
  753. Assembler;
  754.  
  755. ASM
  756.  
  757.   MOV  AH, $4E
  758.   MOV  AL, 3
  759.   INT  $67
  760.  
  761.   CMP  AH, 0
  762.   JE   @SUCCESS
  763.  
  764.  @NEXT:
  765.  
  766.   JMP  @EXIT
  767.  
  768.  @SUCCESS:
  769.  
  770.   LES  DI, Size
  771.   MOV  ES:[DI], AL
  772.   XOR  AL, AL
  773.  
  774.  @EXIT:
  775.  
  776. END;
  777.  
  778.  
  779. {────────────────────────────────────────────────────────────────────────────}
  780.  
  781. Function  VEMSGetPartPgMap(           InPartMap    : POINTER;
  782.                                       OutPartMap   : POINTER    ) : TEMSError;
  783.  
  784. Assembler;
  785.  
  786. ASM
  787.  
  788.   PUSH DS
  789.  
  790.   MOV  AH, $4F
  791.   MOV  AL, 0
  792.   MOV  DS, word PTR [InPartMap+2]
  793.   MOV  SI, word PTR [InPartMap]
  794.   MOV  ES, word PTR [OutPartMap+2]
  795.   MOV  DI, word PTR [OutPartMap]
  796.  
  797.   INT  $67
  798.  
  799.   POP  DS
  800.  
  801. END;
  802.  
  803. {────────────────────────────────────────────────────────────────────────────}
  804.  
  805. Function  VEMSSetPartPgMap(           InPartMap    : POINTER    ) : TEMSError;
  806.  
  807. Assembler;
  808.  
  809. ASM
  810.  
  811.   PUSH DS
  812.  
  813.   MOV  AH, $4F
  814.   MOV  AL, 1
  815.   MOV  DS, word PTR [InPartMap+2]
  816.   MOV  SI, word PTR [InPartMap]
  817.  
  818.   INT  $67
  819.  
  820.   POP  DS
  821.  
  822. END;
  823.  
  824. {────────────────────────────────────────────────────────────────────────────}
  825.  
  826. Function  VEMSGetSizePartPgMap(       NumMapSeg    : WORD;
  827.                                   Var Size         : BYTE       ) : TEMSError;
  828.  
  829. Assembler;
  830.  
  831. ASM
  832.  
  833.   MOV  AH, $4F
  834.   MOV  AL, 2
  835.   MOV  BX, NumMapSeg
  836.   INT  $67
  837.  
  838.   LES  DI, Size
  839.   MOV  ES:[DI], AL
  840.   XOR  AL, AL
  841.  
  842.  @EXIT:
  843.  
  844. END;
  845.  
  846. {────────────────────────────────────────────────────────────────────────────}
  847.  
  848. Function  VEMSMapMultiHandlePg(       EMSHandle    : TEMSHandle;
  849.                                       UseSegAddr   : BOOLEAN;
  850.                                       NumInArr     : WORD;
  851.                                       EMSMapArr    : PEMSMapArr ) : TEMSError;
  852.  
  853. Assembler;
  854.  
  855. ASM
  856.  
  857.   POP  DS
  858.  
  859.   MOV  AH, $50
  860.   MOV  DX, EMSHandle
  861.  
  862.   CMP  UseSegAddr, 1
  863.   JE   @SegAddr
  864.  
  865.  @PhysicalPage:
  866.  
  867.   XOR  AL, AL
  868.   JMP  @NextPreInt
  869.  
  870.  @SegAddr:
  871.  
  872.   MOV  AL, 1
  873.  
  874.  @NextPreInt:
  875.  
  876.   MOV  CX, NumInArr
  877.   MOV  DS, word PTR [EMSMapArr+2]
  878.   MOV  SI, word PTR [EMSMapArr]
  879.  
  880.   INT  $67
  881.  
  882.   PUSH DS
  883.  
  884. END;
  885.  
  886. {────────────────────────────────────────────────────────────────────────────}
  887.  
  888. Function  VEMSReallocatePg(           EMSHandle    : TEMSHandle;
  889.                                       NumPg        : WORD;
  890.                                   Var RealNumP     : WORD       ) : TEMSError;
  891.  
  892. Assembler;
  893.  
  894. ASM
  895.  
  896.   MOV  AH, $51
  897.   MOV  DX, EMSHandle
  898.   MOV  BX, NumPg
  899.  
  900.   INT  $67
  901.  
  902.   LES  DI, RealNumP
  903.   MOV  ES:[DI], BX
  904.  
  905.  @EXIT:
  906.  
  907. END;
  908.  
  909. {────────────────────────────────────────────────────────────────────────────}
  910.  
  911. Function  VEMSGetHandleAttr(          EMSHandle    : TEMSHandle;
  912.                                   Var HandleAttr   : BYTE       ) : TEMSError;
  913.  
  914. Assembler;
  915.  
  916. ASM
  917.  
  918.   MOV  AH, $52
  919.   MOV  AL, 0
  920.   MOV  DX, EMSHandle
  921.  
  922.   INT  $67
  923.  
  924.   LES  DI, HandleAttr
  925.   MOV  ES:[DI], AL
  926.   XOR  AL, AL
  927.  
  928. END;
  929.  
  930. {────────────────────────────────────────────────────────────────────────────}
  931.  
  932. Function  VEMSSetHandleAttr(          EMSHandle    : TEMSHandle;
  933.                                       HandleAttr   : BYTE       ) : TEMSError;
  934.  
  935. Assembler;
  936.  
  937. ASM
  938.  
  939.   MOV  AH, $52
  940.   MOV  AL, 1
  941.   MOV  DX, EMSHandle
  942.   MOV  BL, HandleAttr
  943.  
  944.   INT  $67
  945.  
  946. END;
  947.  
  948. {────────────────────────────────────────────────────────────────────────────}
  949.  
  950. Function  VEMSGetHandleCapable(       EMSHandle    : TEMSHandle;
  951.                                   Var AttrCapable  : BYTE       ) : TEMSError;
  952.  
  953. Assembler;
  954.  
  955. ASM
  956.  
  957.   MOV  AH, $52
  958.   MOV  AL, 2
  959.   MOV  DX, EMSHandle
  960.  
  961.   INT  $67
  962.  
  963.   CMP  AH, 0
  964.   JE   @SUCCESS
  965.  
  966.  @NEXT:
  967.  
  968.   JMP  @EXIT
  969.  
  970.  @SUCCESS:
  971.  
  972.   LES  DI, AttrCapable
  973.   MOV  ES:[DI], AL
  974.   XOR  AL, AL
  975.  
  976.  @EXIT:
  977.  
  978. END;
  979.  
  980. {────────────────────────────────────────────────────────────────────────────}
  981.  
  982. Function  VEMSGetHandleName(          EMSHandle    : TEMSHandle;
  983.                                       HandleName   : POINTER    ) : TEMSError;
  984.  
  985. Assembler;
  986.  
  987. ASM
  988.  
  989.   MOV  AH, $53
  990.   MOV  AL, 0
  991.   MOV  DX, EMSHandle
  992.   LES  DI, HandleName
  993.  
  994.   INT  $67
  995.  
  996. END;
  997.  
  998. {────────────────────────────────────────────────────────────────────────────}
  999.  
  1000. Function  VEMSSetHandleName(          EMSHandle    : TEMSHandle;
  1001.                                       HandleName   : POINTER    ) : TEMSError;
  1002.  
  1003. Assembler;
  1004.  
  1005. ASM
  1006.  
  1007.   PUSH DS
  1008.  
  1009.   MOV  AH, $53
  1010.   MOV  AL, 1
  1011.   MOV  DX, EMSHandle
  1012.   LDS  SI, HandleName
  1013.  
  1014.   INT  $67
  1015.  
  1016.   POP  DS
  1017.  
  1018. END;
  1019.  
  1020. {────────────────────────────────────────────────────────────────────────────}
  1021.  
  1022. Function  VEMSGetHandleDir(           HandleDir    : PEMSHandleDir;
  1023.                                   Var NumEntries   : BYTE       ) : TEMSError;
  1024.  
  1025. Assembler;
  1026.  
  1027. ASM
  1028.  
  1029.   MOV  AH, $54
  1030.   MOV  AL, 0
  1031.   LES  DI, HandleDir
  1032.  
  1033.   INT  $67
  1034.  
  1035.   CMP  AH, 0
  1036.   JE   @SUCCESS
  1037.  
  1038.  @NEXT:
  1039.  
  1040.   JMP  @EXIT
  1041.  
  1042.  @SUCCESS:
  1043.  
  1044.   LES  DI, NumEntries
  1045.   MOV  ES:[DI], AL
  1046.   XOR  AL, AL
  1047.  
  1048.  @EXIT:
  1049.  
  1050. END;
  1051.  
  1052. {────────────────────────────────────────────────────────────────────────────}
  1053.  
  1054. Function  VEMSSearchNamedHandle(      HandleName   : PEMSHandleName;
  1055.                                   Var Value        : WORD       ) : TEMSError;
  1056.  
  1057. Assembler;
  1058.  
  1059. ASM
  1060.  
  1061.   PUSH DS
  1062.  
  1063.   MOV  AH, $54
  1064.   MOV  AL, 1
  1065.   LDS  SI, HandleName
  1066.  
  1067.   INT  $67
  1068.  
  1069.   CMP  AH, 0
  1070.   JE   @SUCCESS
  1071.  
  1072.  @NEXT:
  1073.  
  1074.   JMP  @EXIT
  1075.  
  1076.  @SUCCESS:
  1077.  
  1078.   LES  DI, Value
  1079.   MOV  ES:[DI], DX
  1080.  
  1081.  @EXIT:
  1082.  
  1083.   POP  DS
  1084.  
  1085. END;
  1086.  
  1087. {────────────────────────────────────────────────────────────────────────────}
  1088.  
  1089. Function  VEMSGetTotalHandles(    Var TotalHandles : WORD       ) : TEMSError;
  1090.  
  1091. Assembler;
  1092.  
  1093. ASM
  1094.  
  1095.   MOV  AH, $54
  1096.   MOV  AL, 2
  1097.  
  1098.   INT  $67
  1099.  
  1100.   CMP  AH, 0
  1101.   JE   @SUCCESS
  1102.  
  1103.  @NEXT:
  1104.  
  1105.   JMP  @EXIT
  1106.  
  1107.  @SUCCESS:
  1108.  
  1109.   LES  DI, TotalHandles
  1110.   MOV  ES:[DI], BX
  1111.  
  1112.  @EXIT:
  1113.  
  1114. END;
  1115.  
  1116. {────────────────────────────────────────────────────────────────────────────}
  1117.  
  1118. Function  VEMSAlterPgMapJump(         EMSHandle    : TEMSHandle;
  1119.                                       UseSegAddr   : BOOLEAN;
  1120.                                       MapAddr      : PEMSMapAddr) : TEMSError;
  1121.  
  1122. Assembler;
  1123.  
  1124. ASM
  1125.  
  1126.   PUSH DS
  1127.  
  1128.   MOV  AH, $55
  1129.   CMP  UseSegAddr, 1
  1130.   JE   @SegAddr
  1131.  
  1132.  @PhysicalPage:
  1133.  
  1134.   XOR  AL, AL
  1135.   JMP  @NextPreInt
  1136.  
  1137.  @SegAddr:
  1138.  
  1139.   MOV  AL, 1
  1140.  
  1141.  @NextPreInt:
  1142.  
  1143.   MOV  DX, EMSHandle
  1144.   LDS  SI, MapAddr
  1145.  
  1146.   INT  $67
  1147.  
  1148.   POP  DS
  1149.  
  1150. END;
  1151.  
  1152. {────────────────────────────────────────────────────────────────────────────}
  1153.  
  1154. Function  VEMSAlterPgMapCall(         EMSHandle    : TEMSHandle;
  1155.                                       UseSegAddr   : BOOLEAN;
  1156.                                       MapAddr      : PEMSMapAddr) : TEMSError;
  1157.  
  1158. Assembler;
  1159.  
  1160. ASM
  1161.  
  1162.   PUSH DS
  1163.  
  1164.   MOV  AH, $56
  1165.   CMP  UseSegAddr, 1
  1166.   JE   @SegAddr
  1167.  
  1168.  @PhysicalPage:
  1169.  
  1170.   XOR  AL, AL
  1171.   JMP  @NextPreInt
  1172.  
  1173.  @SegAddr:
  1174.  
  1175.   MOV  AL, 1
  1176.  
  1177.  @NextPreInt:
  1178.  
  1179.   MOV  DX, EMSHandle
  1180.   LDS  SI, MapAddr
  1181.  
  1182.   INT  $67
  1183.  
  1184.   POP  DS
  1185.  
  1186. END;
  1187.  
  1188. {────────────────────────────────────────────────────────────────────────────}
  1189.  
  1190. Function  VEMSGetPgMapStackReq(   Var StackSpaceReq: WORD       ) : TEMSError;
  1191.  
  1192. Assembler;
  1193.  
  1194. ASM
  1195.  
  1196.   PUSH DS
  1197.  
  1198.   MOV  AH, $56
  1199.   MOV  AL, 2
  1200.  
  1201.   INT  $67
  1202.  
  1203.   CMP  AH, 0
  1204.   JE   @SUCCESS
  1205.  
  1206.  @NEXT:
  1207.  
  1208.   JMP  @EXIT
  1209.  
  1210.  @SUCCESS:
  1211.  
  1212.   LES  DI, StackSpaceReq
  1213.   MOV  ES:[DI], BX
  1214.  
  1215.  @EXIT:
  1216.  
  1217.   POP  DS
  1218.  
  1219. END;
  1220.  
  1221. {────────────────────────────────────────────────────────────────────────────}
  1222.  
  1223. Function  VEMSMoveMemRegion(          EMSCopyData  : PEMSCopyData): TEMSError;
  1224.  
  1225. Assembler;
  1226.  
  1227. ASM
  1228.  
  1229.   PUSH DS
  1230.  
  1231.   MOV  AH, $57
  1232.   MOV  AL, 0
  1233.   LDS  SI, EMSCopyData
  1234.  
  1235.   INT  $67
  1236.  
  1237.   POP  DS
  1238.  
  1239. END;
  1240.  
  1241. {────────────────────────────────────────────────────────────────────────────}
  1242.  
  1243. Function  VEMSExchangeMemRegion(      EMSCopyData  : PEMSCopyData): TEMSError;
  1244.  
  1245. Assembler;
  1246.  
  1247. ASM
  1248.  
  1249.   PUSH DS
  1250.  
  1251.   MOV  AH, $57
  1252.   MOV  AL, 1
  1253.   LDS  SI, EMSCopyData
  1254.  
  1255.   INT  $67
  1256.  
  1257.   POP  DS
  1258.  
  1259. END;
  1260.  
  1261. {────────────────────────────────────────────────────────────────────────────}
  1262.  
  1263. Function  VEMSGetMapPhyAddrArr(       MapPhyAddr   : PEMSMapPhyAddr;
  1264.                                   Var NumEntries   : WORD       ) : TEMSError;
  1265.  
  1266. Assembler;
  1267.  
  1268. ASM
  1269.  
  1270.   MOV  AH, $58
  1271.   MOV  AL, 0
  1272.   LES  SI, MapPhyAddr
  1273.  
  1274.   INT  $67
  1275.  
  1276.   CMP  AH, 0
  1277.   JE   @SUCCESS
  1278.  
  1279.  @NEXT:
  1280.  
  1281.   JMP  @EXIT
  1282.  
  1283.  @SUCCESS:
  1284.  
  1285.   LES  DI, NumEntries
  1286.   MOV  ES:[DI], CX
  1287.  
  1288.  @EXIT:
  1289.  
  1290. END;
  1291.  
  1292. {────────────────────────────────────────────────────────────────────────────}
  1293.  
  1294. Function  VEMSGetEntriesMPAArr(   Var NumEntries   : WORD       ) : TEMSError;
  1295.  
  1296. Assembler;
  1297.  
  1298. ASM
  1299.  
  1300.   MOV  AH, $58
  1301.   MOV  AL, 1
  1302.  
  1303.   INT  $67
  1304.  
  1305.   CMP  AH, 0
  1306.   JE   @SUCCESS
  1307.  
  1308.  @NEXT:
  1309.  
  1310.   JMP  @EXIT
  1311.  
  1312.  @SUCCESS:
  1313.  
  1314.   LES  DI, NumEntries
  1315.   MOV  ES:[DI], CX
  1316.  
  1317.  @EXIT:
  1318.  
  1319. END;
  1320.  
  1321. {────────────────────────────────────────────────────────────────────────────}
  1322.  
  1323. Function  VEMSHardwareCfgArr(         EMSHardwareCfgArr : PEMSHardwareCfgArr ) : TEMSError;
  1324.  
  1325. Assembler;
  1326.  
  1327. ASM
  1328.  
  1329.   MOV  AH, $59
  1330.   MOV  AL, 0
  1331.   LES  SI, EMSHardwareCfgArr
  1332.  
  1333.   INT  $67
  1334.  
  1335. END;
  1336.  
  1337. {────────────────────────────────────────────────────────────────────────────}
  1338.  
  1339. Function  VEMSGetUnallocRawPg(    Var UnallocRawPg : WORD;
  1340.                                   Var TotalRawPg   : WORD       ) : TEMSError;
  1341.  
  1342. Assembler;
  1343.  
  1344. ASM
  1345.  
  1346.   MOV  AH, $59
  1347.   MOV  AL, 1
  1348.  
  1349.   INT  $67
  1350.  
  1351.   CMP  AH, 0
  1352.   JE   @SUCCESS
  1353.  
  1354.  @NEXT:
  1355.  
  1356.   JMP  @EXIT
  1357.  
  1358.  @SUCCESS:
  1359.  
  1360.   LES  DI, UnallocRawPg
  1361.   MOV  ES:[DI], BX
  1362.  
  1363.   LES  DI, TotalRawPg
  1364.   MOV  ES:[DI], DX
  1365.  
  1366.  @EXIT:
  1367.  
  1368. END;
  1369.  
  1370. {────────────────────────────────────────────────────────────────────────────}
  1371.  
  1372. Function  VEMSAllocStandardPg(        NumPg        : WORD;
  1373.                                   Var EMSHandle    : TEMSHandle ) : TEMSError;
  1374.  
  1375. Assembler;
  1376.  
  1377. ASM
  1378.  
  1379.   MOV  AH, $5A
  1380.   MOV  AL, 0
  1381.   MOV  BX, NumPg
  1382.  
  1383.   INT  $67
  1384.  
  1385.   CMP  AH, 0
  1386.   JE   @SUCCESS
  1387.  
  1388.  @NEXT:
  1389.  
  1390.   JMP  @EXIT
  1391.  
  1392.  @SUCCESS:
  1393.  
  1394.   LES  DI, EMSHandle
  1395.   MOV  ES:[DI], DX
  1396.  
  1397.  @EXIT:
  1398.  
  1399. END;
  1400.  
  1401. {────────────────────────────────────────────────────────────────────────────}
  1402.  
  1403. Function  VEMSAllocRawPg(             NumPg        : WORD;
  1404.                                   Var EMSHandle    : TEMSHandle ) : TEMSError;
  1405.  
  1406. Assembler;
  1407.  
  1408. ASM
  1409.  
  1410.   MOV  AH, $5A
  1411.   MOV  AL, 1
  1412.   MOV  BX, NumPg
  1413.  
  1414.   INT  $67
  1415.  
  1416.   CMP  AH, 0
  1417.   JE   @SUCCESS
  1418.  
  1419.  @NEXT:
  1420.  
  1421.   JMP  @EXIT
  1422.  
  1423.  @SUCCESS:
  1424.  
  1425.   LES  DI, EMSHandle
  1426.   MOV  ES:[DI], DX
  1427.  
  1428.  @EXIT:
  1429.  
  1430. END;
  1431.  
  1432. {────────────────────────────────────────────────────────────────────────────}
  1433.  
  1434. Function  VEMSGetAltMapRegSet(    Var AltMapRegSet : BYTE;
  1435.                                       SaveMapContxt: POINTER    ) : TEMSError;
  1436.  
  1437. Assembler;
  1438.  
  1439. ASM
  1440.  
  1441.   MOV  AH, $5B
  1442.   MOV  AL, 0
  1443.   LES  DI, SaveMapContxt
  1444.  
  1445.   INT  $67
  1446.  
  1447.   CMP  AH, 0
  1448.   JE   @SUCCESS
  1449.  
  1450.  @NEXT:
  1451.  
  1452.   JMP  @EXIT
  1453.  
  1454.  @SUCCESS:
  1455.  
  1456.   LES  DI, AltMapRegSet
  1457.   MOV  ES:[DI], BL
  1458.  
  1459.  @EXIT:
  1460.  
  1461. END;
  1462.  
  1463. {────────────────────────────────────────────────────────────────────────────}
  1464.  
  1465. Function  VEMSSetAltMapRegSet(        AltMapRegSet : BYTE;
  1466.                                       SaveMapContxt: POINTER    ) : TEMSError;
  1467.  
  1468. Assembler;
  1469.  
  1470. ASM
  1471.  
  1472.   MOV  AH, $5B
  1473.   MOV  AL, 1
  1474.   MOV  BL, AltMapRegSet
  1475.   LES  DI, SaveMapContxt
  1476.  
  1477.   INT  $67
  1478.  
  1479. END;
  1480.  
  1481. {────────────────────────────────────────────────────────────────────────────}
  1482.  
  1483. Function  VEMSGetAltMapSaveArrSize(Var ArrSize     : WORD       ) : TEMSError;
  1484.  
  1485. Assembler;
  1486.  
  1487. ASM
  1488.  
  1489.   MOV  AH, $5B
  1490.   MOV  AL, 2
  1491.  
  1492.   INT  $67
  1493.  
  1494.   CMP  AH, 0
  1495.   JE   @SUCCESS
  1496.  
  1497.  @NEXT:
  1498.  
  1499.   JMP  @EXIT
  1500.  
  1501.  @SUCCESS:
  1502.  
  1503.   LES  DI, ArrSize
  1504.   MOV  ES:[DI], DX
  1505.  
  1506.  @EXIT:
  1507.  
  1508. END;
  1509. {────────────────────────────────────────────────────────────────────────────}
  1510.  
  1511. Function  VEMSAllocAltMapRegSet(  Var AltMapRegSet : BYTE       ) : TEMSError;
  1512.  
  1513. Assembler;
  1514.  
  1515. ASM
  1516.  
  1517.   MOV  AH, $5B
  1518.   MOV  AL, 3
  1519.  
  1520.   INT  $67
  1521.  
  1522.   CMP  AH, 0
  1523.   JE   @SUCCESS
  1524.  
  1525.  @NEXT:
  1526.  
  1527.   JMP  @EXIT
  1528.  
  1529.  @SUCCESS:
  1530.  
  1531.   LES  DI, AltMapRegSet
  1532.   MOV  ES:[DI], BL
  1533.  
  1534.  @EXIT:
  1535.  
  1536. END;
  1537.  
  1538. {────────────────────────────────────────────────────────────────────────────}
  1539.  
  1540. Function  VEMSDeallocAltMapRegSet(    AltMapRegSet : BYTE       ) : TEMSError;
  1541.  
  1542. Assembler;
  1543.  
  1544. ASM
  1545.  
  1546.   MOV  AH, $5B
  1547.   MOV  AL, 4
  1548.   MOV  BL, AltMapRegSet
  1549.  
  1550.   INT  $67
  1551.  
  1552. END;
  1553.  
  1554. {────────────────────────────────────────────────────────────────────────────}
  1555.  
  1556. Function  VEMSAllocDMARegSet(     Var DMARegSet    : BYTE       ) : TEMSError;
  1557.  
  1558. Assembler;
  1559.  
  1560. ASM
  1561.  
  1562.   MOV  AH, $5B
  1563.   MOV  AL, 5
  1564.  
  1565.   INT  $67
  1566.  
  1567.   CMP  AH, 0
  1568.   JE   @SUCCESS
  1569.  
  1570.  @NEXT:
  1571.  
  1572.   JMP  @EXIT
  1573.  
  1574.  @SUCCESS:
  1575.  
  1576.   LES  DI, DMARegSet
  1577.   MOV  ES:[DI], BL
  1578.  
  1579.  @EXIT:
  1580.  
  1581. END;
  1582.  
  1583. {────────────────────────────────────────────────────────────────────────────}
  1584.  
  1585. Function  VEMSEnabDMAAltMapRegSet(    DMARegSet    : BYTE;
  1586.                                       DMAChannel   : BYTE       ) : TEMSError;
  1587.  
  1588. Assembler;
  1589.  
  1590. ASM
  1591.  
  1592.   MOV  AH, $5B
  1593.   MOV  AL, 6
  1594.   MOV  BL, DMARegSet
  1595.   MOV  DL, DMAChannel
  1596.  
  1597.   INT  $67
  1598.  
  1599. END;
  1600.  
  1601. {────────────────────────────────────────────────────────────────────────────}
  1602.  
  1603. Function  VEMSDisabDMAAltMapRegSet(   DMARegSet    : BYTE       ) : TEMSError;
  1604.  
  1605. Assembler;
  1606.  
  1607. ASM
  1608.  
  1609.   MOV  AH, $5B
  1610.   MOV  AL, 7
  1611.   MOV  BL, DMARegSet
  1612.  
  1613.   INT  $67
  1614.  
  1615. END;
  1616.  
  1617.  
  1618. {────────────────────────────────────────────────────────────────────────────}
  1619.  
  1620. Function  VEMSDeallocDMARegSet(       DMARegSet    : BYTE       ) : TEMSError;
  1621.  
  1622. Assembler;
  1623.  
  1624. ASM
  1625.  
  1626.   MOV  AH, $5B
  1627.   MOV  AL, 8
  1628.   MOV  BL, DMARegSet
  1629.  
  1630.   INT  $67
  1631.  
  1632. END;
  1633.  
  1634. {────────────────────────────────────────────────────────────────────────────}
  1635.  
  1636. Function  VEMSPrepWarmBoot                         : TEMSError;
  1637.  
  1638. Assembler;
  1639.  
  1640. ASM
  1641.  
  1642.   MOV  AH, $5C
  1643.   INT  $67
  1644.  
  1645. END;
  1646.  
  1647. {────────────────────────────────────────────────────────────────────────────}
  1648.  
  1649. Function  VEMSEnabOSFuncSet(      Var AccessKey    : LONGINT    ) : TEMSError;
  1650.  
  1651. Assembler;
  1652.  
  1653. ASM
  1654.  
  1655.   MOV  AH, $5D
  1656.   MOV  AL, 0
  1657.   LES  DI, AccessKey
  1658.   MOV  BX, ES:[DI]
  1659.   MOV  CX, ES:[DI+2]
  1660.  
  1661.   INT  $67
  1662.  
  1663.   CMP  AH, 0
  1664.   JE   @SUCCESS
  1665.  
  1666.  @NEXT:
  1667.  
  1668.   JMP  @EXIT
  1669.  
  1670.  @SUCCESS:
  1671.  
  1672.   LES  DI, AccessKey
  1673.   MOV  ES:[DI], BX
  1674.   MOV  ES:[DI+2], CX
  1675.  
  1676.  @EXIT:
  1677.  
  1678. END;
  1679.  
  1680. {────────────────────────────────────────────────────────────────────────────}
  1681.  
  1682. Function  VEMSDisabOSFuncSet(     Var AccessKey    : LONGINT    ) : TEMSError;
  1683.  
  1684. Assembler;
  1685.  
  1686. ASM
  1687.  
  1688.   MOV  AH, $5D
  1689.   MOV  AL, 1
  1690.   LES  DI, AccessKey
  1691.   MOV  BX, ES:[DI]
  1692.   MOV  CX, ES:[DI+2]
  1693.  
  1694.   INT  $67
  1695.  
  1696.   CMP  AH, 0
  1697.   JE   @SUCCESS
  1698.  
  1699.  @NEXT:
  1700.  
  1701.   JMP  @EXIT
  1702.  
  1703.  @SUCCESS:
  1704.  
  1705.   LES  DI, AccessKey
  1706.   MOV  ES:[DI], BX
  1707.   MOV  ES:[DI+2], CX
  1708.  
  1709.  @EXIT:
  1710.  
  1711. END;
  1712.  
  1713. {────────────────────────────────────────────────────────────────────────────}
  1714.  
  1715. Function  VEMSRetAccessKey(       Var AccessKey    : LONGINT    ) : TEMSError;
  1716.  
  1717. Assembler;
  1718.  
  1719. ASM
  1720.  
  1721.   MOV  AH, $5D
  1722.   MOV  AL, 2
  1723.   LES  DI, AccessKey
  1724.   MOV  BX, ES:[DI]
  1725.   MOV  CX, ES:[DI+2]
  1726.  
  1727.   INT  $67
  1728.  
  1729.   CMP  AH, 0
  1730.   JE   @SUCCESS
  1731.  
  1732.  @NEXT:
  1733.  
  1734.   JMP  @EXIT
  1735.  
  1736.  @SUCCESS:
  1737.  
  1738.   LES  DI, AccessKey
  1739.   MOV  ES:[DI], BX
  1740.   MOV  ES:[DI+2], CX
  1741.  
  1742.  @EXIT:
  1743.  
  1744. END;
  1745.  
  1746. {────────────────────────────────────────────────────────────────────────────}
  1747. {────────────────────────────────────────────────────────────────────────────}
  1748. {────────────────────────────────────────────────────────────────────────────}
  1749.  
  1750. BEGIN
  1751. END.
  1752.  
  1753.