The expanded memory specification (EMS) was initially developed by two companies, Lotus and Intel. Microsoft later joined the consortium, and the specification has since become known as LIM EMS.
A number of versions of the EMS specification have been produced. LIM EMS Version 3.0 required a 64KB window anywhere in the area between 640KB and 1MB, and provided up to 8MB of expanded memory. As more hardware adapters with their own ROM were installed, it was often difficult to find a free 64KB contiguous memory area for the mappable window.
A revised version of the EMS specification has been produced, known as LIM EMS Version 4.0. This version allows DOS applications to allocate and access up to 32MB of expanded memory in up to 255 expanded memory objects. Regions of these objects can be mapped into the 8086 address space (below 1MB) allowing DOS applications to access large address spaces at the cost of having to explicitly remap the memory that is to be accessed. Alternate page tables for quick switches among mappings, function calls with remapping, and numerous ways to save and update mappings or move or exchange memory contents are provided.