It is fairly obvious that Compaq’s Deskpro 386 changed the PC hardware and was probably one of the major reasons why we aren’t using PS/2 compatibles today. It may be less obvious that CEMM, an offshoot of the Deskpro 386 better known in its later incarnation as EMM386, also significantly shaped the PC software landscape.
When the Deskpro 386 appeared, it faced an interesting problem: There was no popular operating system capable of utilizing the advanced features of the i386 processor. Compaq marketed the Deskpro 386 simply as a very fast (and quite expensive) PC compatible designed for running DOS applications. Even after the first UNIX ports appeared, DOS was so popular and ubiquitous that users did not feel sufficiently enticed to switch. That was compounded by the fact that RAM was very expensive and systems with more memory than DOS could handle were rare around 1987.
CEMM/EMM386 ensured that DOS could handle quite a lot of memory. CEMM, or Compaq Expanded Memory Manager, was a very innovative piece of software. By utilizing the virtual 8086 (V86) mode of the i386, CEMM could provide 8086-compatible expanded memory (EMS) to existing DOS applications without requiring special hardware (as an 8086 would).
The idea was simple in principle, but quite complex in its implementation. The V86 mode requires the CPU to be in protected mode, but DOS is not a protected-mode operating system. Therefore, EMM386 had to include a miniature 32-bit protected-mode operating system; that was a necessity, not a feature. One of the most important tasks of this mini-OS was setting up page tables and enabling paging, a major new feature of the i386 CPU
Paging was how EMM386 did its magic. Swapping memory blocks in an out of the EMS page frame (located in the first megabyte of RAM and directly accessible by real-mode DOS applications) was accomplished by reprogramming the page tables and thus controlling which physical memory pages mapped to a given linear address. No memory copying was involved and the mechanism was very similar to how 8086 EMS boards worked, but used only the CPU’s built-in memory management facilities instead of relying on external hardware.
EMS support was very important in the late 1980s and early 1990s when software using EMS could run on anything from 8088 PCs up to the latest and greatest 486s. An alternative to EMS, called XMS (eXtended Memory Specification), had several drawbacks. XMS required at least a 286. Worse yet, real-mode programs could not access XMS memory directly; blocks had to be constantly swapped in an out of the first megabyte of RAM and the memory had to be physically copied.
EMM386 had another feature which was in the long run perhaps even more important than EMS support: UMBs, or Upper Memory Blocks. Most PCs had about 100-200 KB of unused space in the region between 640 KB and 1 MB. Some of this memory was taken by the BIOS, video memory, and adapter ROMs, but something like 180 KB RAM was a significant chunk compared to the grand total of 640 KB conventional memory. EMM386 used its paging magic again to remap extended memory (RAM above 1 MB) into the DOS-accessible UMB region.
This feature became extremely important when DOS machines started supporting networks, CD-ROMs, and numerous TSRs. All those goodies took up precious memory and without EMM386, a fully configured DOS system might easily end up with perhaps 350-400 KB of free conventional memory. That was a big problem because many applications simply refused to run if less than 400-450 KB memory was available. With EMM386, the drivers and TSRs could be moved into upper memory, and the difference between 350 KB and 500 KB of free conventional memory was huge.
Newer EMM386 versions could provide UMB support only, without also providing EMS, thus freeing up additional memory in the lowest megabyte. This became very important in the early to mid-1990s. By that time, relatively few applications required EMS; many supported XMS, either exclusively or as an option. Most applications requiring large amounts of memory (that is, several megabytes) used DOS extenders and avoided the 640 KB barrier entirely. But DOS extenders did not help with all the drivers and TSRs. EMM386 made it possible to load drivers for mice, networking, SCSI, CD-ROMs, sound cards, and still have a reasonable amount of free conventional memory left.
This probably prolonged the useful life of DOS as a mainstream operating system by several years. Without EMM386, DOS users couldn’t utilize all their hardware in DOS because the drivers would left no room for applications. They would be forced to run Windows 3.x with all its ugly warts, or switch to a full protected-mode operating system such as OS/2 2.x with its increased memory requirements. EMM386 slowed down the adoption of 32-bit protected-mode operating system by making DOS a viable environment into the mid-1990s.
Needless to say, EMM386 was neither the only nor the best program in its category. Quarterdeck’s QEMM and Qualitas’s 386MAX offered numerous additional features, but EMM386 set the industry standard and made 386 memory managers a force to be reckoned with.