EMS requires a 64KB block of contiguous free memory in the address range 640KB to 1MB for its page frame. As we can see from Figure "General Overview of Different Types of Memory for DOS Applications" this memory range is shared with BIOS, hardware buffers and device drivers. If your application reports that no EMS memory is available, even if you have used the DOS Settings option EMS_MEMORY_LIMIT to set a non-zero value, it could be that a 64KB page frame location could not be found. See Expanded Memory (EMS) and Upper Memory (UMB) on how to resolve this contention.
If a program returns an error due to insufficient expanded memory, the following points should be addressed:
VEMM for OS/2 was designed to install for EMS only when the DOS application makes its first EMS request. This was done for two reasons. First, it saves time and memory. Second, it gives the DOS drivers or applications a chance to access adapters in the EMS page frame address space. OS/2 V2.0 will recognize adapters with the ROM signature header, but will not see adapter RAM/MMPIO areas.
VEMM determines that it has space available during DOS Session creation but a DOS program/driver could cause EMS to not install by accessing memory in the page frame before calling the EMS driver. Lotus 1-2-3 Version 2.3 was found to access the adapter space BEFORE calling EMS. On some machines, this caused no EMS to be present for Lotus 1-2-3.
To satisfy this situation, VEMM has than been changed (after GA) to not wait for the first EMS call. This should clear up the EMS problems related to programs accessing the adapter address space (X'C0000'-X'E0000'). However, it should be known that it is now possible for VEMM to claim areas that could actually be adapter address space. In general, the user should be aware of this situation. To resolve this we suggest to use the MEM_EXCLUDE property to force EMS not to use the desired address space.