  ͻ
                                                                           
                        DOS 5.0 Upper Memory Blocks                        
                                                                           
  ͼ

DOS 5.0 UPPER MEMORY BLOCK SUPPORT

  DOS 5.0 is the first version of DOS to recognize and make use of Upper
  Memory Blocks, or UMBs.  To understand what that means, it is first
  necessary to understand UMBs.

  All PC compatible computers are based on one of the x86 family of Intel
  microprocessors.  This family includes the 8086, 8088, 80286, i386 SX,
  i386 DX, i486 SX and i486 DX.  DOS works on all these CPUs, but in order
  to maintain backward compatibility with the 8086/8088, DOS is limited to
  REAL mode on all these processors.

  This means the processor is essentially limited to addressing 1024k, or
  one megabyte, of memory address space.  (For an interesting exception,
  refer to our article on DOS 5.0 and the High Memory Area, FaxBACK document
  number 1250.)

  Design decisions made when the original PCs were being created caused this
  one-megabyte address range to be divided into 640k address space for user
  addressable RAM, and 384k address space for system ROM BIOS, video buffer
  memory and add-in boards.  Common uses of this memory area include network
  card ROMs and RAM, EGA or VGA card ROMs and the 64k address range used by
  an EMS board such as the Above Board Plus or Above Board MC.

  This 384k address range, while not "conventional" DOS memory, is
  addressable by the CPU in REAL mode and can be used for either RAM or ROM.
  As the 640k of "conventional" memory became more and more crowded with
  TSRs, network drivers, mouse drivers and other utilities, and as DOS
  applications required more and more memory, the PC industry began looking
  at this 384k address range for potential help in making all the pieces
  fit.

  UMBs are blocks of RAM that have been "mapped" into unused address space
  in the "reserved" 384k from 640 to 1024.  This is done in two different
  ways, depending on the CPU in the specific PC.

  PCs based on the 8086/8088 or the 286 processor will require hardware that
  actually decodes RAM at the address range where the UMBs are being
  provided.  This can be on the motherboard, although relatively few
  motherboards implement this feature, or it can be on an add-in board. Both
  the Above Board Plus and the Above Board MC can map memory into the
  address spaces where UMBs are provided.

  PCs based on i386 SX or later processors have a unique ability.  The
  processor on these PCs has an internal mapping capability that allows any
  of the memory that the CPU can access to be remapped at any address. This
  allows the CPU to "fill" the unused address ranges between 640k and 1024k
  with RAM if two conditions are met:

       1.   There must be sufficient EXTENDED memory.
       2.   The PC must be running a 386 control program that implements
            this feature.

  Previous to DOS 5.0, there was no support or even recognition of UMBs in
  DOS itself.  To take advantage of this address range, the PC owner was
  required to purchase separate utilities that would map and manage the
  memory.

  Such utilities as QRAM and MOVE'M worked with EMS boards, such as the
  Above Board product line, to "capture" pages of RAM mapped into the
  reserve address range and then to load TSRs, drivers, etc into this RAM.
  Utilities like QEMM386 or 386MAX worked in PCs based on i386 SX or later
  CPUs to accomplish the same tasks, without the need for EMS boards,
  providing the PC had sufficient EXTENDED memory.

  DOS 5.0 supports the use of UMBs.  It does this through essentially two
  means:

  EMM386.EXE
       EMM386.EXE is a 386 control program that runs on most i386 or i486
       systems with sufficient EXTENDED memory and that provides support
       for both EMS applications and UMBs.
       (Note - this is the only provision built into DOS 5.0 for
       providing UMBs, and it only works on i386 SX or later systems.)

  DOS=UMB
       This statement, added to your CONFIG.SYS file, causes DOS to take
       control of any DOS 5.0 compatible UMBs that exist in your system,
       and allow DOS to load code into those UMBs via the DOS internal
       commands DEVICEHIGH and LOADHIGH.

       DEVICEHIGH is used in the CONFIG.SYS instead of DEVICE as in:
       DEVICEHIGH=C:\DOS\ANSI.SYS.

       LOADHIGH is used anywhere a TSR would be executed as if from the
       command line. Therefore you would use LOADHIGH on the command line
       or in batch files such as the AUTOEXEC.BAT file. LOADHIGH can be
       abbreviated to LH as in: LOADHIGH MOUSE.COM or  LH MOUSE.COM.

  It is important to remember that DOS 5.0, with the exception of
  EMM386.EXE, makes no provision for providing UMBs. In other words, PCs
  based on the 8086, 8088 or 286 CPU will still require an EMS board, and a
  utility such as QRAM or MOVE'M to map memory into the reserved memory
  address ranges used for UMBs.  Also, since the UMBs provided by such a
  utility may not be DOS 5.0 compatible, you may not be able to use the
  DOS=UMB command.

  This will not keep you from taking advantage of UMBs on such systems. The
  utilities that provide UMB support come with their own equivalent of
  DEVICEHIGH or LOADHIGH that allows TSRs and drivers to be loaded into
  these UMBs.  Even better, these utilities usually come with an
  installation program that optimizes the use of UMBs, matching appropriate
  blocks of memory with appropriate files.  At this point, DOS 5.0 provides
  no such utility.

  Some day, no doubt, TSRs and drivers will be written to work directly with
  DOS in the use of UMBs.  Some day DOS may even load some of its own system
  files into UMBs, instead of just allowing drivers or TSRs to be loaded
  there.  Until this happens, however, the DOS 5.0 user is better off to use
  the utilities provided with his UMB software to manage the UMBs in the
  system, and not use the DOS=UMB command. The exception is the EMM386.EXE
  user, who must use the DOS=UMB command to gain access to UMBs.

  REQUIREMENTS for Upper Memory Blocks:

  8086/8088/286 based systems
  1.   Hardware (Above Board) that decodes memory in the reserved range
  2.   Software (such as QRAM or MOVE'M) that will manage this memory

  i386 SX or later systems
  1.   Sufficient EXTENDED memory
  2.   386 control software (such as EMM386.EXE, QEMM386 or 386MAX)

  There is a third requirement in all systems - free address space!  Keep in
  mind:

  Video Buffer area - A000 to BFFF
  EGA card ROMS    C000 to C3FF
  VGA card ROMS    C000 to C7FF
  Network cards    32k to 64k of ROM and RAM in C000-DFFF range
  System BIOS      Ranges from 32k to 128k, ending at FFFF
  Unused ROM sites IBM AT, as well as others, have sockets on the
                   motherboard for ROMs that would decode in the E000-EFFF 
                   range. Therefore on these computers, that range can not 
                   be used for UMBs.
  Hard Disk ROMS   XT-type controllers, as well as ESDI controllers
                   for ATs and Micro Channel machines, have ROM that 
                   decode in this range.
  EMS page frame   If your system has LIM Expanded memory, there will
                   most likely be a 64k page frame somewhere in this 
                   area.
  
  Remember, UMBs CAN NOT be provided in address space already used by other
  devices - either for RAM or ROM.



End of file                 Intel FaxBack # 1158          December 2,1992
