- long size;\r
-\r
- EMSPresent = false; // Assume that we'll fail\r
- EMSAvail = 0;\r
-\r
- _DX = (word)EMMDriverName;\r
- _AX = 0x3d00;\r
- geninterrupt(0x21); // try to open EMMXXXX0 device\r
-asm jnc gothandle\r
- goto error;\r
-\r
-gothandle:\r
- _BX = _AX;\r
- _AX = 0x4400;\r
- geninterrupt(0x21); // get device info\r
-asm jnc gotinfo;\r
- goto error;\r
-\r
-gotinfo:\r
-asm and dx,0x80\r
- if (!_DX)\r
- goto error;\r
-\r
- _AX = 0x4407;\r
- geninterrupt(0x21); // get status\r
-asm jc error\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
- 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
- EMSAvail = _BX;\r
-\r
- // Don't hog all available EMS\r
- size = EMSAvail * (long)EMSPageSize;\r
- if (size - (EMSPageSize * 2) > (ChunksInFile * (long)PMPageSize))\r
+ //long size;\r
+ byte err=0, str[64];\r
+\r
+ boolean errorflag=false;\r
+ static char emmname[] = "EMMXXXX0"; //fix by andrius4669\r
+ unsigned int EMSVer = 0;\r
+ unsigned totalEMSpages,freeEMSpages,EMSPageFrame,EMSHandle=0,EMSAvail=0;\r
+ totalEMSpages = freeEMSpages = EMSPageFrame = 0;\r
+ gvar->pm.emm.EMSPresent = false; // Assume that we'll fail\r
+ gvar->pm.emm.EMSAvail = 0;\r
+ gvar->mmi.EMSmem = 0;\r
+\r
+ __asm {\r
+ mov dx,OFFSET emmname //fix by andrius4669\r
+ mov ax,0x3d00\r
+ int EMM_INT // try to open EMMXXXX0 device\r
+ jc error1\r
+\r
+ mov bx,ax\r
+ mov ax,0x4400\r
+\r
+ int EMM_INT // get device info\r
+ jc error1\r
+\r
+ and dx,0x80\r
+ jz error1\r
+\r
+ mov ax,0x4407\r
+\r
+ int EMM_INT // get status\r
+ jc error1\r
+ or al,al\r
+ jz error1\r
+\r
+ mov ah,0x3e\r
+ int EMM_INT // close handle\r
+ jc error1\r
+\r
+ mov ah,EMS_STATUS\r
+ int EMS_INT\r
+ jc error1 // make sure EMS hardware is present\r
+\r
+ mov ah,EMS_VERSION\r
+ int EMS_INT // only work on EMS 3.2 or greater (silly, but...)\r
+ or ah,ah\r
+ jnz error1\r
+ mov [EMSVer],ax // set EMSVer\r
+ cmp al,0x32 // only work on ems 3.2 or greater\r
+ jb error1\r
+\r
+ mov ah,EMS_GETFRAME\r
+ int EMS_INT // find the page frame address\r
+ or ah,ah\r
+ jnz error1\r
+ mov [EMSPageFrame],bx\r
+\r
+ mov ah,EMS_GETPAGES\r
+ int EMS_INT // find out how much EMS is there\r
+ or ah,ah\r
+ jnz error1\r
+ or bx,bx\r
+ jz noEMS // no EMS at all to allocate\r
+ cmp bx,2\r
+ jl noEMS // Require at least 2 pages (32k)\r
+ mov [totalEMSpages],dx\r
+ mov [freeEMSpages],bx\r
+ mov [EMSAvail],bx\r
+ jmp End1\r
+#ifdef __BORLANDC__\r
+ }\r
+#endif\r
+ error1:\r
+#ifdef __BORLANDC__\r
+ __asm {\r
+#endif\r
+ mov err,ah\r
+ mov errorflag,1\r
+ jmp End1\r
+#ifdef __BORLANDC__\r
+ }\r
+#endif\r
+noEMS:\r
+End1:\r
+#ifdef __WATCOMC__\r
+ }\r
+#endif\r
+/*\r
+ if(errorflag==false)\r