Memory As DOS Sees It
by Lloyd Borrett
Technical Cornucopia, May–June 1989
DOS was designed to only be able to see the
1 MByte memory address range supported by the Intel 8088 and
8086 microprocessor chips. Most PC based systems provide us
with 640 KBytes of memory for DOS and our applications, and
reserve the remaining 384 KBytes of addressable space for
video memory, the system BIOS ROMs, disk controllers, etc...
To allow DOS programs to use more than 1 MByte of memory
we must employ a technique for swapping parts of a larger
memory space into the 1 Mbyte area DOS can actually see. We
must change the contents of this memory frequently and
efficiently so that DOS will appear to be working with much
more than 1 MByte of data and code.
The ideal arrangement would be if we could treat the
entire 1 MByte as a "window" area which could be
rapidly changed to view different portions of a much larger
"physical address space". In this way DOS programs
could have access to the contents of this larger address
space (say 16 MBytes) rather than just the contents of the 1
MByte space that it is normally restricted to.
There are two hardware mechanisms to perform this process
— mapping and bank switching. There is also one software
mechanism — overlays.
Overlaying is a slow, awkward process that requires data
to be moved to and from a storage device such as a hard or
floppy drive. Moving data is far from instantaneous and as a
result this technique is impractical in any environment
where constant changes are required to the content of the
"DOS 1 MByte space".
For completeness, we should add that another short lived
software solution has come to the market - software
emulation of EMS hardware on 8088 and 80286 based systems.
Products such as Above Disk fall into this category. Even
with EMS 3.2, this was a slow, and often impractical
solution. With EEMS and EMS 4.0 it is even slower and should
not be attempted.
With hardware solutions the process of memory swapping is
much faster because we are no longer moving data and code;
instead we are manipulating or switching the memory
addresses and causing different portions of a large memory
space (say 16 MBytes) to be viewed through the 1 MByte space
that DOS recognizes.
Expanded memory through bank switching
This technique of bank switching is used by all the slot
plug-in boards conforming to the EMS 3.2, EEMS and EMS 4.0
specifications. These include all the popular boards such as
Intel Above Board, Hypertec Hyperam, and AST RAMpage.
Bank Switching is an old and rather crude technique for
"switching" addresses. In its original form it used
one bank of memory space ("DOS 1 MByte space" in our
case) to serve as a "window" for switching in other
banks, one at a time, from an endless string of these banks
that are located externally. Externally in this context
means the memory is not located in the address space of the
computer but rather in I/O space -—which is not as readily
accessible or efficient.
Some computers like PC's and XT's (using 8088 or 8086
processors) have a 1 MByte address space. Other computers
like ATs, IBM PS/2 Model 30-286 and up (using 286 and 386
processors) have at least a 16 MByte address space — but the
"DOS 1 MByte space" remains restricted to the first
of these 16 MBytes (referred to as "Conventional
Memory" and the upper 15 MBytes (called "Extended
Memory") is not accessible through bank switching.
As a result, these computers may be purchased with a few
megabytes of memory chips installed into their 16 MByte
memory space but at most only 640 Kbytes is populated into
the first megabyte and the rest is wasted unless memory
management is added to the systems. In fact, for the most
efficient operation of EEMS 3.2 or EMS 4.0 specifications,
it is best if none of the initial 640 Kbytes of conventional
memory is used!
This is why advanced multitasking systems like DESQview
recommend that you depopulate or otherwise disable the
memory you get with your computer. On PS/2 models 50 & 60
for example, you must disable and waste the entire megabyte
that comes with the basic machine for optimum performance.
Expanded memory through mapping
This mapping technique requires a memory management unit
and is only provided for 286 based IBM and compatible
computers with the All Chargecard. It is automatically
available on 386 based computers and has also been provided
for many years on mainframes and minicomputers.
With mapping it is possible to map memory "out"
as well as "in". As a result, there is no need to
disable Conventional memory as in the case of bank
switching. You get to use all of your 640 KBytes with EEMS
and EMS 4.0 and still run efficiently.
Further you can map memory from any address in the
machine's natural 16 MByte space. This results in full use
of Extended as well as Conventional memory and no need to
add the more expensive and less accessible Expanded memory
for I/O space.
Larger conventional memory through mapping
The mapping technique provided by the All Chargecard
can also be used to increase the Conventional Memory by
using space in the 384 KBytes reserved area above 640
Most of the "DOS 1 MByte space" can now be used
rather than being limited to 640 KBytes. There are two
methods of using this extra memory space.
- Static — With the static method, we
do not move the 640 KByte barrier, but map Extended Memory
into the 640 KByte to 960 KByte region and manage things
automatically through the ALLEMM4.SYS driver (provided with
the All Chargecard). Now you can load FILES, BUFFERS, Device
Drivers, TSRs, Last Drive, COM and EXE files above the 640
KByte barrier out of the way, freeing up DOS space.
- Dynamic — With the Dynamic method,
we map out everything above 640 KBytes, providing 960 KBytes
of contiguous DOS space. The down side is that having moved
the video we must tell programs that write direct to video
that it has been moved and so these programs must be patched
using the ALLPREP utility.
Memory mapping in use
In one example of the use of the All Chargecard's mapping
abilities we installed one in an AT compatible system with a
Colour Graphics Adapter (CGA), 640 KBytes of conventional
memory and 384 KBytes of extended memory.
The CGA adapter uses the memory area B800 to BFFF as a
video buffer. We were able to lift the 640 KBytes limit to
736 KBytes by the "forefilling" of memory up to the
start of the video buffer. (Note: This is not possible with
VGA or EGA video adapters. Mono or Hercules adapters allow
the DOS limit to be increased to 704 KBytes.)
Then we were able to use the memory area E000 to EFFF to
"Shadow" the systems ROM BIOS for improved speed.
Finally we were able to use 100 KBytes of high memory for
programs that would normally sit in conventional memory.
This included, FILES=127, BUFFERS=99, ANSI.SYS, LASTDRIVE=G:,
DOSEDIT2 and BTRIEVE.
We were left with 30 Kbytes of high memory and 32 KBytes
of extended memory still unused. But most importantly CHKDSK
was now reporting 736 KBytes of total memory and 666 KBytes
free. We were able to run a program that required more than
640 KBytes of contiguous conventional memory with room to
Networking and memory mapping
With many network systems requiring 60 to 200 KBytes of
conventional memory for network drivers, memory space is
often a limited resource on network workstations. The memory
mapping abilities of the All Chargecard allows 80286 based
systems to load some network device drivers, and other
drivers, as well as TSRs up into the high memory area and
thus increase the amount of conventional memory available to
For many people this will greatly enhance their ability
to use and benefit from a network installation.
Memory mapping and 386 based systems
Memory mapping is automatically available on 386 based
computers, but a memory manager is required to enable us to
make use of this feature. Programs such as DESQview QEMM 386
and Qualitas 386max are memory managers for 386 based
systems with extended memory.
These programs let us take maximum advantage of the 386
systems memory mapping abilities. If you already own a 386
based system with extended memory and don't use a program
such as QEMM 386 or 386max you are not fully
exploiting the power of your system.
You should not install an EMS board in a 386 system.
Almost all EMS boards use the 16 bit data bus. Thus
accessing this memory will be much slower than accessing a
386 system's 32 bit memory. Instead, install more 32 bit
memory on the 386 system's motherboard or on a 32 bit
expansion card. This extended memory can then be managed and
used as expanded memory by QEMM 386 or 386max.
Currently many of us are asking DOS to do much more than
it was intended to manage, and we are encountering problems
doing so. Eventually, OS/2 will solve these problems, after
all that is its main purpose.
Meanwhile, we are faced with the need to make the most of
what is available. For users of 386 and 386SX based systems
all that is required is 32 bit extended memory and a
suitable memory manager program.
For those of us who need to make the most of existing 286
based systems, extended memory and the All Chargecard with
its ability to add a "386 like" memory management
unit should be considered.
Unfortunately there is no easy solution always guaranteed
to work. What is needed is the knowledge and understanding
to be able to try appropriate solutions.
Saturday, 15 October 2011