 ͻ
                                                                          
                   DOS 5.0 and the High Memory Area                       
                                                                          
 ͼ

 DOS 5.0 AND THE HIGH MEMORY AREA

     DOS 5.0 is the first DOS version to make use of the High Memory Area
     (HMA), loading a significant portion of the DOS system files into this
     memory. As a result, a 286 or later PC can show as much as a 46k gain
     in free conventional memory after upgrading to DOS 5.0, simply because
     much of resident DOS is now using HMA instead of conventional memory.

     History, Background

     Because DOS is essentially a REAL mode operating system, it limits
     users to accessing only the address range below 1024k.  Even on systems
     with 286 or later processors that can access megabytes of memory, the
     640K limit still exists in the DOS world.

     There is, however, one small portion of EXTENDED memory (the memory
     above 1024k) that 286 or later processors can access - even with the
     processor in REAL mode.  This is the 64k of memory from 1024-1068k.

     To understand how this memory is accessed, it is necessary to look at
     PC memory addressing in general.  The PC in REAL mode addresses memory
     through a combination of a SEGMENT and an OFFSET. You could think of
     this as giving a location by saying it was a certain number of yards
     away (the segment) plus a certain number of feet (the offset).
     Therefore, something that is at a segment of 7 yards and an offset of 2
     feet would have an absolute distance (or address) of 23 feet.  Of
     course you coud express the same location as a segment of 6 yards and
     an offset of 5 feet.

     In REAL mode operation, any memory that can be addressed can be
     described in a similar fashion.  The memory is located in a particular
     SEGMENT, at a particular OFFSET from that segment.

     On 8086/8088-based computers, there is a maximum to the absolute
     address of FFFFF.  This could be expressed as a location of SEGMENT
     F000 plus OFFSET FFFF (F000:FFFF), or as a location of SEGMENT FFFF
     with an OFFSET of 000F (FFFF:000F).  The question became, if you could
     have a SEGMENT address of FFFF with an OFFSET address of 000F, what
     happened when you added 1 to the OFFSET address, and it became 0010?
     This was acceptable register math, but it exceeded the maximum memory
     the CPU could address.

     The answer was, you "wrapped" back into the bottom of conventional
     memory.  Consequently, this was a boundary condition that became known,
     and the PCs using the 8086 and 8088 processors were designed with this
     in mind.

     When the 80286 processor was introduced into the PC market, there was a
     new variable.  It could address memory above one megabyte, that is
     above an absolute address of FFFFF.  There was now the possibility that
     FFFF:0010 could describe a unique and valid memory location - something
     that couldn't happen on the 8086/8088.  In order to insure backward
     compatibility, the AT and subsequent computers were designed to
     "uncouple" the addressing of the processor from the addressing on the
     motherboard.  This meant that ATs could be expected to behave the same
     as PCs. If you exceeded FFFF:000F, you would "wrap" to the bottom of
     conventional memory.

     As memory below 1024k became more and more precious, it came to the
     attention of inventive folks in the PC industry that the 64k of memory
     from 1024 to 1068k was accessible to 286 or later CPUs in REAL mode -
     if only the CPU could be "re-coupled" to motherboard addressing.  Of
     course, the "re-coupling" needed to be selective, so that any code
     relying on the "wrap" at the end of memory would still function.  The
     address line responsible for allowing this access to take place is A20,
     and soon A20 handlers began to appear, such as QEXT.SYS and HIMEM.SYS.

     What these A20 handlers do is allow some programs to couple or de-
     couple the addressing between the motherboard and the CPU, thereby
     allowing that program access to the 64k of memory between 1024k and
     1068k without the need to go into PROTECTED mode CPU operation.  This
     64k is referred to as the HMA, or High Memory Area - and to date it may
     be controlled by one client only.

     DOS 5.0 is the first DOS version to make use of the HMA for DOS itself,
     though DOS 4.01 shipped with an HMA manager - HIMEM.SYS.  DOS 5.0 does
     much more than provide HIMEM, it uses HIMEM (or a HIMEM compatible XMS
     driver such as QEMM386 v5.12 or 386MAX v5.1) to manage the HMA and load
     a significant portion of the DOS system files into this memory. This is
     done by placing the DOS=HIGH command in the CONFIG.SYS file.

     As a result, a 286 or later PC can show as much as a 46k gain in free
     conventional memory after upgrading to DOS 5.0, simply because much of
     resident DOS is now using HMA instead of conventional memory. DOS=HIGH
     will also load BUFFERS into the HMA area.

     Because the means of coupling and de-coupling the CPU's addressing from
     the motherboard's addressing is system-specific, and was never
     standardized, the driver must accommodate the various methods that
     computer manufacturers have used.  In order to do this, some drivers,
     such as HIMEM.SYS, require "switches" for particular machines.

     Be sure to check the documentation for your software to determine how
     to configure it for your particular machine.  If you are uncertain, or
     if your computer behaves oddly when using the DOS=HIGH command, you
     should check with your computer manufacturer to find out the
     appropriate setup.  The README file with DOS 5.0 lists many of the
     popular computers that require special switches for HIMEM.SYS.

     Requirements for HMA use: 286, i386, or i486 CPU-based PC XMS (Extended
     Memory Specification) driver - HIMEM, QEMM386, 386MAX, etc. At least
     64k of extended memory - addressed from 1024k to 1068k.



End of file                 Intel FaxBack # 1250          June 24,1992
