Matthias Paul posted in the OpenDOS mailing list:
(Jan. 15, 2002)
Does EMS max out at 32MB?
Offically yes. According to the LIM EMS 4.0 specification, the
maximum amount of available EMS memory is in fact 32 Mb.
This is also what the MS-DOS/PC DOS EMM386.EXE memory manager
provides. You can allocate up to 32 Mb total in chunk(s) up to
32 Mb each. This still applies to the EMM386.EXE shipping with
MS-DOS 7.10 (Windows 98 SE) and IBM PC DOS 2000, and probably
is the same for MS-DOS 8.0 (Windows ME), but I haven?t checked
A cursory look at the EMS 4.0 spec, however, leads to the
assumption that the specification could be easily expanded
up to something as impressive as 1 Gb of EMS memory.
I just ran some tests under the DR-DOS 7.03 EMM386.EXE 3.27,
which is available for download from ftp://ftp.lineo.com (and
free for personal use), and in fact it does support much more:
If you only run EMM386.EXE (without HIMEM.SYS as it is normal
with the DR-DOS EMM386.EXE), it will detect "only" up to 64 Mb
of system memory. This is only a limitation in the detection
method (a different BIOS function is used to query more than
64 Mb of memory, and the DR-DOS EMM386.EXE does not currently
query this new function). Therefore it will allow "only" up to
64 Mb of total EMS memory, which, however, can be allocated in
chunk(s) up to 64 Mb (not only 32 Mb). For compatibility with
the standard it still reports that it would only support up
to 32 Mb max.
However, if you load a 3rd party XMS-provider which detects more
than 64 Mb of memory, the DR-DOS EMM386.EXE will also be able to
handle more memory and provide this as EMS from a shared pool
with XMS memory.
For example, if you load the MS-DOS 7.10 HIMEM.SYS before the
DR-DOS 7.03 EMM386.EXE, HIMEM.SYS will detect more than 64 Mb of
memory (256 Mb on my system) and provide this as XMS memory.
DR-DOS EMM386.EXE will then happily take over this memory and
provide means to allocate up to this much memory as VCPI or EMS
memory in chunks with up to 64 Mb each. Using the QEMM EMS.COM
utility I just tried this up to ca. 250 Mb EMS memory on my system,
but I guess even more would be possible on a system equipped with
more physical memory.
Under the DR-DOS multitasker (EMM386.EXE /MULTI + TASKMGR), you
are limited to the amount of memory specified in TASKMGR.INI
[Memory] Limit=value. If you set this value to something like
65534 (some strange effects occured with 65535), you can allocate
up this much memory (even in one chunk if you like) as XMS or
EMS per each running task.
If you run Windows 9x or PC DOS 2000, you can replace Microsoft?s/
IBM?s EMM386.EXE with the (not only in this discipline) much more
powerful DR-DOS equivalent. This should work without problems,
except for the sometimes different command line switches.
I know of at least one DOS program (SemWare?s editor TSE 2.5 for
DOS), which can allocate up to 64 Mb of EMS memory, so it appears
as if more DOS memory managers support this extension.
If you fire up a DOS box under Windows 9x (98 SE in my case) you can
configure it to provide at least up to 64 Mb total EMS memory which
can be allocated in chunks up to 16 Mb each. To achieve this, right
click on the DOS box window and check Properties->Memory->EMS to be
set to "Auto". I think, Windows 3.1 has a similar option, but I haven?t
tested it there. (BTW. You do not need the DR-DOS EMM386 to be loaded
to achieve this, as the DOS memory manager loaded before Windows has
passed control over to the Windows memory manager, anyway.)
If someone knows of other memory managers which support more EMS
memory I would be interested in this.
Hope it helps,