- if(emmcfems!=0) goto error;\r
- __asm and dx,0x80\r
- if (!_DX)\r
- goto error;\r
-\r
- _AX = 0x4407;\r
- geninterrupt(0x21); // get status\r
- __asm mov emmcfems,1\r
- if(emmcfems!=0) goto error;\r
-\r
- if (!_AL)\r
- goto error;\r
-\r
- _AH = 0x3e;\r
- geninterrupt(0x21); // close handle\r
-\r
- _AH = EMS_STATUS;\r
- geninterrupt(EMS_INT);\r
- if (_AH)\r
- goto error; // make sure EMS hardware is present\r
-\r
- _AH = EMS_VERSION;\r
- geninterrupt(EMS_INT);\r
- if (_AH || (_AL < 0x32)) // only work on EMS 3.2 or greater (silly, but...)\r
- goto error;\r
-\r
- _AH = EMS_GETFRAME;\r
- geninterrupt(EMS_INT);\r
- if (_AH)\r
- goto error; // find the page frame address\r
- gvar->pm.emm.EMSPageFrame = _BX;\r
-\r
- _AH = EMS_GETPAGES;\r
- geninterrupt(EMS_INT);\r
- if (_AH)\r
- goto error;\r
- if (_BX < 2)\r
- goto error; // Require at least 2 pages (32k)\r
- gvar->pm.emm.EMSAvail = _BX;\r
-\r
- // Don't hog all available EMS\r
- size = gvar->pm.emm.EMSAvail * (long)EMSPageSize;\r
- if (size - (EMSPageSize * 2) > (gvar->pm.fi.ChunksInFile * (long)PMPageSize))\r