- if(emmcfems!=0) goto error;\r
- __asm and dx,0x80\r
- if (!CPURegs.x.dx)\r
- goto error;\r
-\r
- CPURegs.x.ax = 0x4407;\r
- geninterrupt(0x21); // get status\r
- __asm mov emmcfems,1\r
- if(emmcfems!=0) goto error;\r
-\r
- if (!CPURegs.h.al)\r
- goto error;\r
-\r
- CPURegs.h.ah = 0x3e;\r
- geninterrupt(0x21); // close handle\r
-\r
- CPURegs.h.ah = EMS_STATUS;\r
- geninterrupt(EMS_INT);\r
- if (CPURegs.h.ah)\r
- goto error; // make sure EMS hardware is present\r
-\r
- CPURegs.h.ah = EMS_VERSION;\r
- geninterrupt(EMS_INT);\r
- if (CPURegs.h.ah || (CPURegs.h.al < 0x32)) // only work on EMS 3.2 or greater (silly, but...)\r
- goto error;\r
-\r
- CPURegs.h.ah = EMS_GETFRAME;\r
- geninterrupt(EMS_INT);\r
- if (CPURegs.h.ah)\r
- goto error; // find the page frame address\r
- gvar->pm.emm.EMSPageFrame = CPURegs.x.bx;\r
-\r
- CPURegs.h.ah = EMS_GETPAGES;\r
- geninterrupt(EMS_INT);\r
- if (CPURegs.h.ah)\r
- goto error;\r
- if (CPURegs.x.bx < 2)\r
- goto error; // Require at least 2 pages (32k)\r
- gvar->pm.emm.EMSAvail = CPURegs.x.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