XMGR, RDISK, UIDE, and UHDD/UDVD2 -- DOS Device Drivers =========================================================== 1. Description ----------- XMGR, RDISK, UIDE, and UHDD/UDVD2 are a group of DOS device drivers for a PC system with an 80386+ CPU and using MS-DOS V5.0+ or equivalent. XMGR is an "XMS manager" handling up to 4-GB of XMS memory and directly supporting V3.70+ UMBPCI by Uwe Sieber. XMGR loads in low memory on a small system needing only XMS, in "Shadow RAM" upper memory on a larger system with UMBPCI, or it "boots" into normal upper memory on a JEMM386 protected-mode system. See the example CONFIG.SYS files in Section 5. RDISK is a RAM-disk driver. It creates a "fast" disk drive from up to 2-GB of XMS memory. Programs or data can be copied by AUTOEXEC to the RAM-disk and accessed at memory speeds. RDISK works with V2.0 or V3.0 XMS managers (60-MB maximum for V2.0). It is a simple RAM-disk driver without resizing or other options. UIDE is a DOS disk and CD/DVD caching driver. It intercepts "Int 13h" BIOS I-O and caches data for up to 22 BIOS disks on up to 9 "Legacy" or "Native PCI" SATA/IDE controllers, including A: or B: diskettes. UIDE handles hard-disks of any size (has full 48-bit LBA logic!) and accepts 48-bit LBA or 24-bit CHS I-O calls from a new or old DOS system. UIDE "calls the BIOS" for diskettes and intercepts I-O for "Int 13h" drivers loaded first, thus UIDE caches ALL drives on a DOS system! ("ASPI" or other "non Int 13h" drivers are unsupported). Up to 4 SATA/IDE or old PIO-mode CD/DVD drives are also handled. UIDE caches CD/DVD data and directories for MUCH greater speed, and it can play audio CDs and input "raw" trackwriter data (audio or trackwriting is not cached). UIDE caches 5 Megabytes to 4 GIGABYTES of data! All its cache tables and data are in XMS memory. UIDE uses 4448 bytes of upper/DOS memory for all cache sizes. A non-caching UIDE (/B switch, no diskettes nor caching) can be set for tests/diagnostics and uses 3472 bytes of upper/ DOS memory. UIDE's /H switch can load most of the driver in free HMA, thus using only 880 bytes of memory (768 non-cached)! UHDD is a small disk-only caching driver. It functions like UIDE and handles up to 22 BIOS disks of all sizes, including A: or B: diskettes, on up to 9 "Legacy" and Native-PCI SATA/IDE controllers. When loaded after UHDD, the UDVD2 driver (see below) will call UHDD to cache CD/DVD files and directories. With a 20-MB+ cache, UHDD uses Read-Ahead for its UltraDMA disks (10% faster speed than UIDE). UHDD takes 720 bytes of upper/DOS memory and 2032 HMA bytes with a /H switch, or 2752 memory bytes without /H, for all cache sizes. Its cache is in XMS memory and holds up to 4 Gigabytes of data. UHDD's /B switch also offers a basic UltraDMA disk driver (no cache) using 128K of XMS as its buffer for I-O unsuited to UltraDMA. The basic UHDD is for tests or other non-cached work and uses 576 bytes of upper/DOS memory and 752 bytes of HMA with a /H switch, or 1328 bytes of memory without /H. UDVD2 is a CD/DVD driver for up to 4 SATA, IDE, or old PIO-mode drives. It reads CD/DVD data files, plays audio CDs, and can read "raw" (track- writer) data. UDVD2 can work alone; or if the caching UHDD is in use, UDVD2 calls it to cache CD/DVD data. UDVD2 takes 144 bytes of upper/ DOS memory and 1824 bytes of HMA with a /H switch, or 1968 memory bytes without /H. Caching by UHDD adds 80 bytes, and UDVD2 "shares" UHDD's XMS buffer for input unsuited to UltraDMA. Without UHDD, UDVD2 takes 128K of XMS memory for its own input buffer. The small RDISKON.COM program will re-enable an RDISK drive if a format command is issued to it by mistake! Entering RDISKON L at a command prompt, where L is the drive letter (A to Z), re-enables the drive. The small CC.COM "Clear Cache" program can help verify files written by UHDD. Entering CC at a command prompt makes UHDD "flush" its cache. Disk data (NOT cache data) can then be compared to the original output. NOTE: Some CompactFlash cards cause CC to execute very slowly. 2. NO Warranties ------------- XMGR, RDISK, UIDE, and UHDD/UDVD2 are offered at no cost, "as is", "use at your own risk", and with NO warranties, not even an implied warranty of FITNESS for any particular purpose nor of MERCHANTABILITY! 3. Revision Summary ---------------- 31-Mar-19 UHDD now uses Read-Ahead for its UltraDMA disks with 20-MB+ caches (10% more speed than UIDE). The caching UHDD now uses 2752 bytes (720 upper/DOS memory + 2032 HMA); the /B non-cached UHDD is unchanged. README file updated. 16-Mar-19 README file updated. UHDD.ASM changed to note UDVD2 must load AFTER the UHDD driver (not before!) to cache CD/DVD data. No code changes, UHDD still dated 15-Feb-2019. 15-Feb-19 UHDD updated as follows: 2576 bytes (720 upper/DOS memory, 1856 HMA) for the caching driver and still 1328 bytes (576 + 752) for the /B non-cached driver. 10-MB and all 20-MB+ cache sizes added, for old systems with small memory. Default is still 80-MB if UHDD's /S switch is omitted or invalid. The 5-MB cache has 16K cache blocks, the 10- and 15-MB caches have 32K blocks, and the 20-MB+ caches use 64K blocks for faster speed. Maximum cache size is still 4 Gigabytes (really 4093-MB; 3-MB held for UHDD's cache tables [max. 1-MB] and mainboard control regs.). The 5-Mar-2015 UDVD2 can still call this UHDD to cache CD/DVD data files; no UDVD2 changes needed. If LBACache is wanted, the non-cached UHDD /B can still load first to provide disk UltraDMA. The "80386 errata" commands used by Ninho on his 386/SX are added. SSDs and CompactFlash cards with an ATAPI flag are run as UltraDMA disks, not as slower "Call the BIOS" drives like in UIDE. Disks over 128-GB now use only LBA48 commands, to stop disk ERRORS at exactly 128-GB when an LBA28 command "crosses OVER" that limit. All disks less than 128-GB still use LBA28 commands. NOTE: UIDE has not been so updated but can still be used on older systems. For newer systems, UHDD + UDVD2 are preferred. For earlier revision notes, see Section 8 below. 4. Switch Options -------------- XMGR usually needs only its /B switch, if "booting" with an EMM driver. All XMGR switch options are as follows: /B Specifies "boot" mode. XMGR loads in temporary memory until JEMM386 enables upper memory. Without /B, XMGR loads in UMBPCI "Shadow RAM" or in low memory if UMBPCI is unused. /Mn Specifies a temporary area for loading XMGR in "boot" mode or for UMBPCI "Shadow RAM" DMA before a workspace buffer gets posted. Values for /M are: /M1 = 64K. /M3 = 192K. /M5 = 320K. /M7 = 448K. /M2 = 128K. /M4 = 256K. /M6 = 384K. /M8 = 512K. Without /M, /M5 is assumed and the 320K area will be used. Temporary system data may be put 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. Without /N, 48 "Handles" are set. /PA Specifies use or non-use of PS/2 Port 92h logic to handle the /PN system's "A20" line. /PA indicates "Always" use Port 92h logic. /PN indicates "Never" use it and handle "A20" via standard keyboard-port logic. Without /P, XMGR "asks the BIOS" if the system supports Port 92h. If not, XMGR uses keyboard-port logic. If "A20" is found to be on as XMGR loads, XMGR does not handle it at all. /Tn Specifies the BIOS calls to use in getting extended memory: /T0 No "E820h" or "E801h" requests. /T1 Memory-list requests only (Int 15h, AX=E820h). /T2 A dual-area request only (Int 15h, AX=E801h). /T3 "E820h" requests first, then an "E801h" request. /T can usually be omitted, causing a /T3 default. An old 64-MB request is also used to get /T0 memory or if the /T1 to /T3 requests are unsuccessful. Users may need to test /T1 and /T2, as a pre-1996 BIOS might not handle them O.K. If so, /T0 will be required. /W Requests using the kernel 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 UHDD, moves protected-mode XMS data in 6K blocks (not 64K blocks), and for XMGR/UIDE, 2K blocks. With JEMM386, /Z is unneeded. With other EMM/VCPI/DPMI drivers, a PC must be tested to find if /Z is needed. BAD schemes, allowing too few interrupts during XMS moves, may still be in use! -------------------- RDISK uses only /S size and /: drive-letter switches: /Sn Specifies a desired RAM-disk size in megabytes of XMS memory. Values are any number from 2 to 2047. When /S is omitted or invalid, a 25-MB RAM-disk is set by default. /:L Specifies the DOS drive letter desired to access RDISK files. L may be any available drive letter from A to Z, e.g. /:N assigns drive N: to all RDISK files. If the drive letter is too high or already in use, RDISK will abort, and users may need "LASTDRIVE=" in CONFIG.SYS to set up more drives. If RDISK is loaded by CONFIG.SYS, or if /: is omitted, the next free drive letter will be used. -------------------- UIDE usually needs only a /H switch to use HMA space and a /S switch to specify its cache size. All UIDE switches are as follows: /A Specifies ALTERNATE addressing, for "legacy IDE" controllers. The first legacy controller uses 01E8h/0168h addresses and a second (if present!) uses 01F0h/0170h addresses. /A is only for "odd" mainboards with REVERSED addressing for the two legacy IDE controllers! Without /A, the first legacy controller uses 01F0h/0170H and a second uses 01E8h/0168h, as is normal for most PC mainboards. /B Requests a "basic" UltraDMA driver for disks and CDs/DVDs, no caching nor diskette handling. This may help in tests or diagnostics. The /B driver can request 128K of XMS as an UltraDMA I-O buffer, and it can load in the HMA. /D: Specifies the "device name", used by the CD/DVD Redirector to access CD/DVD drives. For example: /D:CDROM1 /D:SANYO1 etc. If /D: is not given, or the name following a /D: is missing/invalid, UDVD1 is set by default. If no CD/DVD drives were found, UIDE$ overrides any /D: name, for use with FreeDOS autoloader scripts. /E Makes the driver call the BIOS for any hard disk I-O request. /E avoids setup trouble on some DOS emulators (VirtualBox, etc.) that do not emulate all PC hardware logic! /E also allows using hard disks on 1994 or older PCs which have no PCI/EDD BIOS. /E still caches disk data, unlike /N1 that removes ALL disk support! If /B is given, /E is ignored. ***** NOTE ***** Using /E on protected-mode systems (JEMM386 etc.) may LOSE much speed! For full details, see section 7 below. If /E is necessary, the DOS system should be run in real-mode (UMBPCI, etc.) whenever possible. /H Loads most of the driver in "free HMA" space. UIDE will use only 880 bytes of upper/DOS memory (768 when /B is given). /H must not be used with ROM-DOS, which has no "free HMA"! MS-DOS kernels have ERRORS in posting free HMA space which can give CRASHES! Specifying /H is "At the user's risk!" and PCs should be tested before /H is used in any critical tasks. FreeDOS offers no "free HMA" before FDAUTO is run so using /H with FreeDOS requires the drivers to load from FDAUTO.BAT (not from FDCONFIG.SYS). /N1 Requests NO hard-disk handling by the driver. /N2 Requests NO CD/DVD handling by the driver. /N3 Requests no XMS memory. /N3 sets UIDE's /B "basic" driver. /N3 requires loading in low-memory, or UIDE aborts! /N3 can LOSE much speed, as misaligned or other I-O unsuitable for UltraDMA requires calling the BIOS for a disk or using PIO-mode for CD/DVD drives! /N4 See /Z for XMGR, above. /Q Awaits a "data request" before doing UltraDMA disk transfers. /Q is for "old" systems and may be used only if the driver loads O.K. but seems unable to transfer data. /Q must be OMITTED with SATA-to-IDE adapters from Sabrent and others, since they may not emulate "data request" from SATA disks! /Q does not affect CD/DVD drives. /R15 "Reserves" 15-MB or 63-MB of XMS, for old DOS "game" programs /R63 which require XMS memory below 16- or 64-MB. The drivers must be able to reserve this memory, reserve their own XMS memory beyond that, and then "free" the 15/63-MB XMS. If not, the drivers display "XMS init error" and abort! For further details, see section 7 below. /Snn Specifies the desired cache size, in megabytes of XMS memory. Values for /S can be 5, 15, 25, 40, 50, or any number from 80 to 4093. If /S is omitted/invalid, an 80-MB cache is set. Except for 25 or 50, values below 80 are cut to 40- 15- or 5-MB. UIDE displays "XMS init error" and aborts, if not-enough XMS memory is free! If so, a smaller cache must be set. Older V2.0 XMS managers (ROM-DOS, etc.) may use only /S5 to /S50. /UX Disables all CD/DVD UltraDMA, even for drives that can do it. CD/DVD data input then uses "PIO mode". Except for a few "odd" drives by Sony, etc. that do not obey ATAPI "rules", /UX is rarely needed. /UX does not affect hard disks. /Z See /Z for XMGR, above. -------------------- UHDD usually needs only a /H switch to load in free HMA and a /S switch to set its cache size. A summary of all UHDD switches is as follows: /A Sets ALTERNATE addressing for "Legacy" IDE controllers, same as UIDE /A above. Rarely necessary. /B Requests a 1328-byte "stand alone" driver (no caching), same as UIDE /B above. /E Makes the driver "call the BIOS" for hard disk I-O requests, same as UIDE /E above. With /E, UHDD omits all UltraDMA disk logic, saving 448 bytes. /H Loads all but 720 bytes of the driver (576 with /B) into HMA space. See the notes for UIDE /H above! /Q Awaits "data request" before beginning UltraDMA I-O with old controllers, same as UIDE /Q above. Rarely necessary. /R15 Reserves 15-MB or 63-MB of XMS, for old DOS "game" programs, /R63 same as UIDE /R above. /Snn Specifies the desired cache size in megabytes of XMS memory. /S values may be 5, 10, 15, or any number from 20 to 4093 (4 Gigabytes). If /S is omitted/invalid, an 80-MB cache is set. UHDD displays "XMS init error" and aborts, when not-enough XMS is free! If so, request a smaller cache. /Z See /Z for XMGR, above. -------------------- UDVD2 normally needs only a /H switch to use HMA space and a /D: switch to specify a driver "device name". A summary of all UDVD2 switches is as follows: /A Sets ALTERNATE addressing for "Legacy" IDE controllers, same as UIDE /A above. Rarely necessary. /D: Sets a "device name" used by the CD/DVD Redirector to access CD/DVD drives, same as UIDE /D: above. /H Puts all but 144 bytes of the driver in HMA space. See the notes for UIDE /H above! /Rnn Reserves 15-MB or 63-MB of XMS, for old DOS "game" programs, same as UIDE /R above. Rarely necessary. /UX Disables CD/DVD UltraDMA, same as UIDE /UX above. Rarely necessary. -------------------- For all switches in each driver, a dash may replace the slash and lower case letters may be used if desired. 5. Setup and Configuration ----------------------- XMGR, UIDE, UHDD, and UDVD2 all load thru the CONFIG.SYS file. RDISK loads via either the CONFIG.SYS or the AUTOEXEC.BAT file. Your CONFIG or AUTOEXEC should contain command lines similar to these examples: DEVICE=C:\DOSDVRS\XMGR.SYS /N128 /B DEVICEHIGH=C:\DRIVERS\RDISK.COM /S200 DEVICEHIGH=C:\SYSTEM\UIDE.SYS /D:TOSHIBA1 /S500 /H DEVICEHIGH=C:\USERDVRS\UHDD.SYS /S250 /H DEVICEHIGH=C:\MYDVRS\UDVD2.SYS /D:BLURAY1 /H Note that "Int 13h" BIOS drivers must be loaded first, so UIDE/UHDD can intercept and cache their I-O requests. Note also that if UDVD2 is to share UHDD's XMS buffer and/or call it for CD/DVD data caching, it must load after UHDD, so UDVD2 can locate UHDD in memory and "link" with it. See the CONFIG.SYS examples below. With V3.70+ UMBPCI and XMGR, a "boot" procedure is not needed! UMBPCI loads first to enable upper-memory, then XMGR loads to offer it and XMS to DOS, then other drivers may load. For V6.22/V7.10 MS-DOS, JEMM386 can also be loaded, to offer extra upper-memory in the "video graphics" areas, or if other JEMM386 features are desired. NOTE: FreeDOS and some other DOS variants will not "add up" the memory found by both UMBPCI and JEMM386, like MS-DOS does! FreeDOS users who desire more upper-memory or other protected-mode items must omit UMBPCI and load HIMEMX/JEMM386 per their instructions, or load XMGR/JEMM386 as shown in the third example below. An example CONFIG.SYS file using V3.70+ UMBPCI and XMGR is as follows: .. .. DOS=HIGH,UMB DOSDATA=UMB ;When available DEVICE=C:\BIN\UMBPCI.SYS DEVICE=C:\BIN\XMGR.SYS /W DEVICE=C:\BIN\JEMM386.EXE I=B000-B7FF X=C800-EFFF NOEMS ;Optional .. .. Int 13h drivers cached by UIDE/UHDD load now. .. DEVICEHIGH=C:\BIN\UHDD.SYS /S250 /H ;Or UIDE alone. Load via DEVICEHIGH=C?\BIN\UDVD2.SYS /H ; FDAUTO with FreeDOS DEVICEHIGH=C:\BIN\RDISK.COM /S125 ;Optional .. .. Etc. .. XMGR can be used "stand alone" on a small XMS-only system. It must be the first DOS system driver to load, and it must load in LOW memory, as in the following example: .. .. DOS=HIGH SHELL=C:\DOS\COMMAND.COM C:\DOS /E:512 /P DEVICE=C:\BIN\XMGR.SYS .. .. Int 13h drivers cached by UIDE/UHDD load now. .. DEVICE=C:\BIN\UHDD.SYS /S80 ;Or UIDE alone. Load via DEVICE=C:\BIN\UDVD2.SYS ; FDAUTO with FreeDOS DEVICE=C:\BIN\RDISK.COM /S20 ;Optional .. .. Etc. .. With JEMM386 and XMGR, XMGR loads first in "boot" mode, then JEMM386, then XMGR finally loads into upper-memory. An example CONFIG.SYS file which uses the XMGR "boot" procedure is as follows: .. .. DOS=HIGH,UMB DOSDATA=UMB ;When available DEVICE=C:\BIN\XMGR.SYS /B ;Loads only XMGR's "boot" DEVICE=C:\DOS\JEMM386.EXE I=B000-B7FF ... DEVICEHIGH=C:\BIN\XMGR.SYS ;Loads the runtime XMGR .. .. Int 13h drivers cached by UIDE load now. .. DEVICEHIGH=C:\BIN\UHDD.SYS /S250 /H ;Or UIDE alone. Load via DEVICEHIGH=C?\BIN\UDVD2.SYS /H ; FDAUTO with FreeDOS DEVICEHIGH=C:\BIN\RDISK.COM /S500 ;Optional .. .. Etc. .. After the above drivers are loaded, further CONFIG.SYS drivers (SETVER, ANSI.SYS, etc.) can then load in any desired order. FreeDOS users should load UIDE/UHDD/UDVD2 via FDAUTO.BAT (not FDCONFIG) using the DEVLOAD program, so the drivers can load in "free HMA" with a /H switch. Example FDAUTO command lines are: .. .. DEVLOAD /H C:\BIN\UHDD.SYS /S20 /H ;20-MB+ cache recommended DEVLOAD /H C:\BIN\UDVD2.SYS /H ;Must load after UHDD .. .. Etc. .. When a specific RDISK drive letter is required, RDISK can now be loaded by AUTOEXEC.BAT, and its /: switch can specify any "free" drive letter, e.g. /:Q assigns drive Q: for RDISK files. Whenever RDISK is used, AUTOEXEC.BAT should also include commands to copy all RDISK programs or data up to the RAM-disk. This is required each time DOS loads, as XMS memory is LOST when a system shuts down! Such copies usually require little time. If RDISK and UIDE/UHDD are used, users must balance how much XMS memory the drivers use. RDISK must take no more XMS than its files may need. UIDE/UHDD can take most remaining XMS for its caches. Some XMS memory must be saved for other programs needing it! As an example, on a 4-GB system, RDISK might use 500-MB, UIDE/UHDD might use 3-GB, and 500-MB is free for other programs. These values can be adjusted, so RDISK holds programs and "fast" data files, while UIDE/UHDD cache "ordinary" files. Properly balanced use of XMS will give a VERY high-speed DOS system! Please be sure to set each hard disk's geometry correctly in your BIOS. Set it to "Auto", "LBA" or "LBA Assisted", but NOT to "None", "Normal", "CHS", "ECHS". "User Cylinders/Heads/Sectors", "Revised ECHS" or "Bit Shift" should run but are NOT preferred. If a BIOS has a setting like "UltraDMA" or "UDMA Capable" for a disk, enable it. "Laptop" power-saving items like a "drive spin-down timeout" should run O.K. but must be TESTED before use! All these drivers allow 7 seconds for a disk or CD/DVD drive to spin-up, after being idle. More DRASTIC power-saving items like a "drive SHUTDOWN timeout" (may require "extra" logic to restart the drive!) should be DISABLED, or driver I-O requests may time out! Also, be sure to use an 80-pin IDE cable with any UltraDMA drive set to "mode 3" ATA-44 (44 MB/sec) or higher. When cabling a single drive to an IDE channel, note that you MUST use both "ends" of the cable, NOT an "end" and the middle connector! This prevents ERRORS, since an unused cable-end can pick up "noise", like a RADIO antenna! Be sure to enable all CD/DVD drive(s) through the BIOS set-up routines! A drive that is "disabled" may cause the BIOS to clear all its UltraDMA flags and force the drive into "PIO mode" zero, which is terribly SLOW! 6. Error Reporting --------------- XMGR and UIDE/UHDD/UDVD2 will return normal XMS and CD/DVD error codes, as needed. They are listed in the "V3.0 XMS Specification" and in the Microsoft "MS-DOS CD-ROM Extensions 2.1" document. Both are available from Microsoft or from other Internet sources. UIDE and UHDD work as "BIOS drivers" and return whichever codes are set for diskettes and hard-disks handled by the BIOS. For their SATA and IDE hard-disks, UIDE/UHDD can post the following error codes: Code 0Fh - DMA error. CCh - Disk is FAULTED. 20h - Controller busy. E0h - Hard I-O error. AAh - Disk not ready. FFh - XMS memory error. Many DOS programs display only "Disk Error" messages with NO code, thus disk errors may require running a diagnostic to get better information! 7. Technical Notes --------------- Protected-mode users must pretest "I=nnnn-nnnn" or "X=nnnn-nnnn" values for JEMM386, as its "I=TEST" or "X=TEST" options may fail on newer PCs. Protected-mode is unrecommended with old DOS games needing reserved XMS as JEMM386 takes some XMS memory first. Newer "cheap BIOS" mainboards now OMIT logic used only for DOS and need a disk UltraDMA driver loaded before JEMM386 sets its protected-mode! With such boards, CONFIG.SYS example C above will require Int 13h drivers cached via UHDD, then UHDD itself, to load only in LOW memory, after XMGR's "boot" provides XMS to the system. JEMM386 can then load and set its protected-mode safely. 2015 or older mainboards with a "regular" BIOS usually do not need this and can use example C as-is. Use of JEMMEX or other "EMM" drivers but JEMM386 should now be avoided. Other "EMM" drivers got abandoned long ago, some with leftover ERRORS! JEMMEX cannot be used on "cheap BIOS" boards with these drivers and has caused crashes on newer PCs, probably due to an old XMS detection scheme. If not updated, JEMMEX should now be viewed as "obsolete"! The drivers' /R15 or /R63 switch is for a real-mode system using UMBPCI and XMGR, to play old DOS games. Game players prefer real-mode, as it gives higher speed. If UIDE or UDVD2 are used alone, they can use the /R15 or /R63 switches with no problem. If UDVD2 is loaded after UHDD, only UHDD can "reserve" XMS memory, and UDVD2 must not use a /R switch. Note that NO other programs or drivers that require XMS memory can load before the "game", so the reserved XMS cannot be re-allocated to anyone else! Also note that if the "game" cannot be loaded and then "frozen" (not started immediately!), loading other programs and drivers AFTER it will be impossible! Both of these issues make using JEMM386/EMM386 or other "EMM" drivers difficult, so an old "game" program which must have XMS memory below 16- or 64-MB will usually need to be run in real-mode. XMGR and UDVD2 post normal XMS or CD/DVD error codes, as needed. They are listed in the "V3.0 XMS Specification" and in the Microsoft "MS-DOS CD-ROM Extensions 2.1" document, available from Microsoft or elsewhere. UHDD is a "BIOS driver" and returns the codes set by the BIOS for disks and diskettes run by it. For its own SATA/IDE disks, UHDD posts these error codes as needed: Code 0Fh - DMA error. CCh - Disk is FAULTED. 20h - Controller busy. E0h - Hard I-O error. AAh - Disk not ready. FFh - XMS memory error. Many DOS programs display only "Disk Error" messages with NO code, thus disk errors may require running a diagnostic to get better information! UHDD handles only "Legacy" or "Native PCI" IDE controllers. RAID-only chipsets, "port multiplier" chips, and ADMA chipsets are not supported. UHDD requires "Legacy", "Compatibility", or "Native IDE" mode with AHCI controllers. For mainboards with no such controller settings, Sabrent or similar SATA-to-IDE cards will let UHDD or UDVD2 run SATA disks/CDs/ DVDs from a parallel-port IDE controller (80-pin cable), at DMA speeds. "Add on" PCI-bus adapter cards, that can be detected via normal PCI-bus logic, may also be used for disks/CDs/DVDs. XMGR loads in UMBPCI upper memory that is not "provided" to the system. With UMBPCI, a "MEM" list may begin with a block having a 00A7h offset, or greater with 80 or 128 XMS "Handles". The upper memory skipped by this offset contains XMGR. The UMBPCI upper memory manager uses system "Shadow RAM" that cannot do DMA. A newer BIOS may use UltraDMA to load programs in upper memory. If this is "Shadow RAM", a HANG can occur! These two rules apply, if using UMBPCI with XMGR and UHDD: A) V3.70+ UMBPCI must load before XMGR, so XMGR finds UMBPCI and sets its "I-O Catcher", to handle diskette "Shadow RAM" DMA forever and to handle disk "Shadow RAM" UltraDMA until UHDD is loaded. Older UMBPCI drivers, or other UMBPCI load schemes, are not recommended! B) When CHS I-O is done (MS-DOS V6.22 or older), every disk must have valid CHS parameters set in the BIOS. If not, the "I-O Catcher" and UHDD let the BIOS handle CHS I-O. When BIOS UltraDMA is left enabled, a "Shadow RAM" HANG can occur! Old BIOS programs may not configure a mainboard controller when no user drives are on it! The drivers then display "BAD controller" and go on looking for others to use. If this message is given, users must check that all SATA/IDE drives are set "active" with the BIOS setup routines. If so, "BAD controller" means a chip is not using "Bus Master" and "I-O Space" modes, and a BIOS update is needed! 8. Earlier Revision History ------------------------ 5-Mar-15 UIDE/UHDD/UDVD2 now handle 9 controllers, 22 BIOS disks or diskettes, 4 CD/DVD drives. UHDD binary-search buffer is again 512 bytes. UIDE/UHDD "CD/DVD" cache deleted. Other drivers unchanged (re-dated only). 24-Nov-14 UIDE/UHDD "User" caches and UIDE user-cache logic deleted, due to non-use. UIDE now runs 26 disks/diskettes and 6 CD/DVD drives (same as UHDD + UDVD2) which saves memory. 14-Nov-14 UHDD now "overlaps" UltraDMA disk input AND output with as many caching tasks as possible, for much improved speed! 19-Oct-14 UHDD "overlaps" cache work during UltraDMA disk output and disk sector "gaps" at I-O end, for more speed! UHDD /M switch deleted, 256-byte search buffer is now permanent. 27-Sep-14 New UHDD /M switch sets a 512-byte binary search buffer. 26-Jan-14 UIDE error handling CD/DVD media-changes for "stand alone" mode is fixed. UHDD offers "Common" & "CD/DVD" caches. 12-Jan-14 UIDE /UD switch deleted (many problems!). "Stand alone" UHDD/UDVD2 re-added, for use as needed. 12-Dec-13 UHDD/UDVD2 deleted (low use). UIDE /N2 dismisses CD/DVD logic. UIDE /C switch added, user caching improved. 21-Nov-13 UHDD old style "stand alone" driver re-added. 25-Sep-13 BAD error fixed in UDVD2 re: locating UHDD! MANY Thanks to Japheth for his tests and exact analysis! 9-Sep-13 Possible but unlikely UHDD exit errors corrected. UDVD2/ UIDE now use all 32 CD/DVD LBA bits in caching calls. 2-Sep-13 Possible UDVD2 "media-change" error fixed. UHDD /N1 size reduced. 30-Apr-13 UHDD/UDVD2 can now run without XMS (lower speed) for tests and FreeDOS "scripts". UDVD2 can now do "raw" input. 15-Oct-12 UHDD/UIDE again detect A: and B: diskettes from BIOS data, NOT from "Int 13h" calls that FAIL with an LS-120 drive! 2-Aug-12 UHDD "disk only" caching driver added. UDVD2 caches CD/ DVD data if UHDD is also loaded! UIDEJR deleted. New /UD switch in UDVD2/UIDE, for CD/DVD directory caching. 9-Jul-12 UIDE/UIDEJR device select error, for master + slave CD/DVD units on one IDE channel, is corrected. Many Thanks to Doug Beneway for finding this error! 25-Jun-12 UIDE2 deleted: Not-enough added speed, complex to use. 17-Jun-12 UIDE/UIDE2/UIDEJR /A switch, init of 2 "Old IDE" channels, and CD-audio "Q"/status data corrected. Many Thanks to Japheth for his research and audio-test program! 29-May-12 UIDE and UIDE2 check for diskettes via Int 13h, avoid DPTE tests if no PCI BIOS, let the BIOS do I-O for disks with bad DPTE data, all re: VirtualBox BUGS! 16-Oct-11 UIDE /M switch deleted, search-buffer is always 512 bytes. UIDE.SYS back to 7.5K, UIDE-S dropped, UIDE2 improved. 7-Oct-11 All UIDE drivers updated to avoid BIOS "DPTE" ERRORS: Bad DPTE data for USB sticks! Many Thanks to Daniel Nice! 9-Sep-11 UIDE2 re-added. UIDE-S and UIDE2 handle 6 CD/DVD drives. 22-Jul-11 UIDE /E switch added for DOS emulators (VirtualBox, etc.). 20-May-11 UIDE-S ("short" UIDE) added, for systems with limited HMA. 25-Apr-11 BAD "code mods" init error corrected for UIDE, UIDEJR, and RDISK (XMGR not affected)! 5-Dec-10 UIDE/UIDEJR /R15 and /R63 switches added to handle old DOS "games" (Thanks, Guillermo Grana Gomez!). 28-Nov-10 Minor updates: UIDEJR audio track-number error corrected, XMGR faster in protected-mode. Added XMGR and UIDE /Z. 15-Aug-10 UIDE audio track-number error corrected (Thanks, Nagatoshi Uehara!). 10-Aug-10 UIDE/UIDEJR use of $ in CD/DVD names is fixed (Many Thanks to Japheth!). 4-Jul-10 README file update -- XMGR/UIDE can use "Native IDE" mode, same as "Legacy"/"Compatibility", for AHCI mainboards. 28-Jun-10 XMGR updated for AHCI, see the README sec. 7 for details. 10-Jun-10 UIDE now ignores "removable HARD disks", size reduced. 16-Nov-09 UIDE now caches 4 GIGABYTES of data! 6-Oct-09 UIDE and UIDEJR /H requests HMA use "at the user's risk"! 2-Sep-09 README file updated -- FreeDOS users who desire full upper memory must omit UMBPCI and load JEMM386/JEMMEX only. 23-Jun-09 RDISK now a .COM file. RDISK /: switch, RDISKON program added. Corrected UIDE CD/DVD handling of VDS errors. 9-Jun-09 UIDE/UIDEJR /N3 switch added for no XMS memory. Override of /D: name by UIDE$/UIDEJR$ added for no CD/DVD drives. 15-May-09 Added RDISK. 6-May-09 Added UIDEJR. 1-May-09 Fixed XMGR "Port 92h" logic error. Added XMGR /PA and /PN switches to control use of "Port 92h". 25-Apr-09 XMGR/UIDE license and FreeDOS prohibition deleted, drivers and sources are again available to all.