Command: XMGR.SYS

  XMGR is an "XMS manager" for up to 4-GB of XMS memory, with support for
  V3.70+ UMBPCI by Uwe Sieber. XMGR can load directly to UMBPCI "Shadow
   RAM" upper memory, and it can "boot" into regular upper memory if using
   protected-mode.

Syntax:

  DEVICE[HIGH] = [path] XMGR.SYS [/B] [/Mn] [/Nnn] [/PA] [/PN] [/Rnn]
                 [/Tn] [/W] [/Z]

Options:

  XMGR usually needs only a /B switch, if "booting" with an "EMM" driver.
  All XMGR switches are:
  /B     Sets "boot" mode. XMGR uses a temporary area until an "EMM"
         driver enables upper memory. Without /B, XMGR loads into
         UMBPCI "Shadow RAM" or in low memory if UMBPCI is unused.
  /Mn    Sets a temporary area, for loading XMGR in "boot" mode or for
         UMBPCI "Shadow RAM" DMA until a workspace buffer gets set.
         /M values are:
         /M1 = 64KiB    /M3 = 192KiB   /M5 = 320KiB   /M7 = 448KiB
         /M2 = 128KiB   /M4 = 256KiB   /M6 = 384KiB   /M8 = 512KiB
         Without /M, the 320K area is used. Temporary system data
         can go anywhere in memory! /Mn helps to find a safe area
         for XMGR to use.
  /Nnn   Sets how many XMS "Handles" are available. The value nn may
         be 48, 80, or 128. The /B "boot" option permits /N24 and
         /N32 to save memory, but 24 or 32 "Handles" may be too few
         and should be tested! Without /N, 48 "Handles" are set.
  /PA    Specifies use or non-use of PS/2 Port 92h logic to handle the
  /PN    "A20" line. /PA means "Always" use Port 92h logic. /PN
         means "Never" use it and handle "A20" via normal keyboard-
         port logic. Without /P, XMGR "asks the BIOS" if Port 92h
         hardware is present. Keyboard-port logic is used if not.
         If "A20" is found "on" as XMGR loads, XMGR does not handle
         it at all.
  /Rnn   Reserves (skips above) low XMS memory needed for DOS "games",
         etc. Values are any number of megabytes from 2 thru 2048
         (2 Gigabytes) and specify the start of user XMS, e.g. /R16
         reserves all XMS up to the 16-MB area. If ".5" is given
         after a /R value, 0.5-MB more XMS is reserved, e.g. /R15.5
         reserves 15.5-MB of XMS, which may help in protected-mode.
         For an invalid /R value, XMGR will display "/R invalid; NO
         reserved XMS set!" but will proceed. The reserved XMS is
         held until the last of UHDD/UDVD2/RDISK to load issues /F
         to "free" it. So, other drivers using XMS cannot "steal"
         any XMS reserved for a DOS "game"!
  *** NOTE ***
         XMS handlers cannot get XMS from the BIOS before the first
         runtime XMS call. That is after XMGR's Init routines are
         dismissed! If /R asks for more XMS than a system has, no
         error message can be given; but XMGR will proceed, without
         ANY reserved XMS. Users must AVOID impossible /R values!
  /Tn    Sets the BIOS calls to use in getting extended memory:
         /T0   No "E820h" or "E801h" calls.
         /T1   Memory-list calls only (Int 15h, AX=E820h).
         /T2   A dual-area call only (Int 15h, AX=E801h).
         /T3   "E820h" calls first, then an "E801h" call.
         /T can usually be omitted, causing a /T3 default. An old
         64-MB call is also used for /T0 memory. Users might want
         to test /T1 and /T2, since a pre-1996 BIOS may not execute
         them properly. If so, /T0 will be required.
  /W     Requests using the system workspace buffer for UMBPCI "Shadow
         RAM" DMA. If /W is omitted, XMGR sets its own low memory
         buffer. /W may NOT be given with PC-DOS or EDR-DOS!
        /W is ignored if UMBPCI is not used.
  /Z     For XMGR or UHDD, moves protected-mode data in 8K blocks (not
         64K). /Z is unneeded with many "EMM" drivers or for real
         mode usage. With VCPI/DPMI/etc. drivers, a PC should be
         tested to find if /Z is needed. BAD schemes, which allow
         too few interrupts during XMS moves, may still be in use!

Comments:

  For all switches in each driver, a dash may replace the slash and lower
  case letters may be used if desired.
  UHDD and UDVD2 are Closed-Source DOS drivers for PCs with an 80386+
  CPU (UHDD requires an 80486+ CPU) and using MS-DOS V5.0+ or a
  fully compatible variant.
  The latest UHDD and UDVD2 are Open Source device drivers for PCs with
  an 80386+ CPU and using FreeDOS, whereas at XMGR, RDISK it depends on
  the version number if it is Open Source or Closed Source.
  For more information and if you are in doubt, read "README.txt" in
  "drivers.zip".

Examples:

  Comment: There are new closed source drivers for UHDD.SYS (=XHDD.SYS)
  and UVD2.SYS (=XDVD2.SYS) which may have other options. So please do
  not rely on the options in the examples!
  A) A small real-mode system that needs only XMS may use this
    CONFIG.SYS/FDCONFIG.SYS example file:
       ..
       ..
     DOS=HIGH
     DEVICE=C:\BIN\XMGR.SYS /Rnn              ;R if DOS "games" need it
       ..
       ..  Int 13h drivers cached by UHDD load now.
       ..
     DEVICE=C:\BIN\UHDD.SYS /S20 /H /O        ;Min. 20 MB recommended
     DEVICE=C:\BIN\UDVD2.SYS /D:BLURAY1 /H    ;Must load after UHDD
     DEVICE=C:\BIN\RDISK.COM /S5 /F           ;Optional. If not used,
                                              ; UHDD/UDVD2 can issue /F
       ..
       ..  Further CONFIG.SYS commands can be given here.
       ..
  B) Real-mode systems with V3.70+ UMBPCI and XMGR do not need the LOWDMA
     driver, as XMGR has an "I-O Catcher" for UMBPCI. This scheme takes
     NO low memory if /W can be used (MS-DOS etc.) or only 544 low memory
     bytes without /W (PC-DOS etc.). XMGR and other drivers load direct
     to UMBPCI "Shadow RAM"! Systems which permit multiple providers of
     upper memory (MS-DOS, PC-DOS, etc.) can also load an "EMM" driver as
     shown below, to map the B000-B7FFh "Monochrome Graphics" area as 32K
     more upper memory. An example CONFIG.SYS file is:
       ..
       ..
     DOS=HIGH,UMB
     DEVICE=C:\BIN\UMBPCI.SYS
     DEVICE=C:\BIN\XMGR.SYS /W /Rnn            ;W only when permitted!
                                               ;R <= 15.5 MB with JEMM!
     DEVICE=C:\BIN\JEMM386.EXE I=B000-B7FF X=C800-EFFF ...   ;Optional
       ..
       ..  Int 13h drivers cached via UHDD load now
       ..  and can be loaded in UMBPCI upper memory.
       ..
     DEVICEHIGH=C:\BIN\UHDD.SYS /S200 /H /O    ;Fast 200 MB cache
     DEVICEHIGH=C:\BIN\UDVD2.SYS /D:CDROM1 /H  ;Must load after UHDD
     DEVICEHIGH=C:\BIN\RDISK.COM /S50 /F       ;Optional. If unused,
                                               ; UHDD/UDVD2 can issue /F
       ..
       ..  Further CONFIG.SYS commands can be given here.
       ..
  C) A protected-mode system with XMGR and an "EMM" driver can use XMGR's
     "boot", taking a minimum 304 bytes of low memory for a 24-entry "XMS
     Handles" table, plus any low memory the "EMM" driver may need. A
     CONFIG.SYS example file is:
       ..
       ..
     DOS=HIGH,UMB
     DEVICE=C:\BIN\XMGR.SYS /B /N24 /R15.5     ;24 Handle XMGR "boot"
                                               ;R <= 15.5 MB with JEMM!
     DEVICE=C:\BIN\JEMM386.EXE I=B000-B7FF ...
     DEVICEHIGH=C:\BIN\XMGR.SYS                ;Loads the runtime XMGR
       ..
       ..  Int 13h drivers cached by UHDD load
       ..  now and can load into upper memory.
       ..
     DEVICEHIGH=C:\BIN\UHDD.SYS /S400 /H /O /P ;Optimal 400 MB cache
     DEVICEHIGH=C:\BIN\UDVD2.SYS /D:MYDVD /H   ;Must load after UHDD
     DEVICEHIGH=C:\BIN\RDISK.COM /S125 /F      ;Optional. If unused,
                                               ; UHDD/UDVD2 can issue /F
       ..
       ..  Further CONFIG.SYS commands can be given here.
       ..
  In each example above, UDVD2 must load after UHDD, so UDVD2 will "find"
  UHDD in memory and call it for CD/DVD file caching.

  Users that need RDISK with a specific drive letter may delay loading it
  until AUTOEXEC.BAT is run. If /F or /G are also needed for DOS games,
  RDISK must issue them from AUTOEXEC, since it is then the last of these
  drivers to load. Whenever RDISK is used, AUTOEXEC.BAT must also issue
  commands to copy all RDISK programs and data up to the RAM-disk, as XMS
  memory is LOST when PCs shut down! Such copies require little time.

  If UHDD and RDISK will both run, users must balance how much XMS memory
  the drivers take. UHDD can set a 400-MB cache, as in example C above,
  and RDISK can request 125-MB of XMS for its programs, "fast" data files
  and compiler TEMP files. Such sizes should be optimal on most systems
  but can be adjusted up or down, as desired. All remaining XMS memory
  is left free for use by other programs. The basic "plan" is for RDISK
  to hold programs and high-speed files, while UHDD then caches "regular"
  data files. Properly balanced use of XMS memory will give a VERY fast
  DOS system!

See also:

  autoexec.bat/fdauto.bat
  config.sys/fdconfig.sys
  device/devicehigh
  dos
 (fdxms)
 (fdxms286)
  himemx
  jemm386
  jemmex
  lastdrive
  rdisk
  rdiskon
  tdsk
  udvd2.sys
  uhdd.sys
  xmgr.sys

  Copyright © 2018 - 2022 Jack Ellis, updated 2022 by W. Spiegl.

  This file is derived from the FreeDOS Spec Command HOWTO.
  See the file H2Cpying for copying conditions.