EMS Magic is an expanded memory (EMS) emulator that installs as a removable TSR and runs under DOS and Windows 9x/NTx, including XP and Vista. It provides a complete implementation of the Lotus-Intel-Microsoft (LIM) 4.0 EMS specification, including a contiguous 64K page frame. EMS Magic can also extend the NTVDM extended memory manager (XMM) to support XMS 3.0 functions.
Unlike EMM386 and NTVDM's EMM, EMS Magic will create the page frame wherever there is room, including lower memory if necessary. This allows it to provide EMS on systems where other expanded memory managers fail. EMS Magic is also the only solution which can provide EMS on Windows Vista, due to Microsoft removing all native EMS support.Why Is It Needed?
In order to cut costs, newer motherboards feature a lot of integrated devices. (LAN, RAID, SATA, etc.) The ROM for these devices is located in the upper memory area (UMA), where the EMS page frame typically resides. When EMM386 or the NTVDM EMM installs, it looks for a contiguous 64K block of free space in the UMA for a page frame. If there is no room in the UMA for a page frame, the EMM will not install and you have no EMS.
EMS Magic also tries to create a page frame in the UMA, but if there is no space, it will create the page frame in conventional memory. This ensures that all systems will have EMS support, at the possible expense of 64K conventional memory.
EMS Magic also allows you to place the page frame manually. For example, if you know you have space in the UMA for a page frame, but EMM386 or the NTVDM EMM will not install, you can force EMS Magic to install with a page frame at a set location in the UMA. (There must be RAM or unused UMBs at this location.)
The other use for EMS Magic is on Windows Vista systems. Although the 32-bit versions of Windows Vista can run DOS programs, there is no support for EMS regardless of the computer's hardware and memory configuration. In this case, EMS Magic is the only solution for providing EMS for DOS programs.How It Works
EMS Magic emulates EMS completely in software using extended memory (XMS). Unlike EMM386, EMS Magic does not use Virtual 8086 (V86) mode to enable hardware paging. Instead, data is copied to and from the page frame with XMS moves. Because hardware paging is not used, the page frame does not have to be aligned on a 4K/16K page boundary. Furthermore, because EMS Magic itself operates entirely in real mode, it does not cause problems when the CPU is already running in V86 or protected mode, as is the case with Windows.Limitations
EMS Magic cannot support data aliasing due to the pure software approach. According to the LIM EMS 4.0 specification, programs must check for hardware support before using data aliasing. In practice, however, this is not always the case. Fortunately, an intelligent page mapping algorithm is used which eliminates most inconsistencies caused by data aliasing.
Another limitation caused by the software approach is that software page mapping is significantly slower than hardware page mapping. When running a very mapping-intensive program, such as Impulse Tracker playing a 32-channel module, on a relatively slow CPU (200 MHz or less), slowdown may be experienced. However, all modern CPUs (1 GHz+) should have no problem keeping up with even the most demanding DOS applications.XMS Fix
Besides providing EMS emulation, EMS Magic can also patch XMS 2.0 managers at runtime to support XMS 3.0. The primary reason for this is that the HIMEM implementation provided by Windows NTx supports XMS 2.0 only. Some DOS programs check for XMS 3.0, even though they use less than 64 MB XMS. In this case, XMS 2.0 calls are sufficient. EMS Magic translates XMS 3.0 calls to XMS 2.0 calls, enabling these programs to run.
EMS Magic also patches a bug found in Windows NTx, where the amount of free XMS can be incorrectly reported as more than 16/32 MB when only 16/32 MB is actually free. (Windows XP supports 32 MB XMS; all other NTx supports 16 MB XMS only.)What's Changed?
The following has been changed in Version 2.1:
The following has been changed or added in Version 2.0:
The following features have been added in Version 1.1: