XMGR, RDISK, and UIDE -- DOS Device Drivers =============================================== 1. Description ----------- XMGR, RDISK, and UIDE are a "package" of DOS device drivers. They are for systems having an 80386+ CPU and using MS-DOS V5.0+ or equivalent. XMGR is a DOS driver that works as an XMS memory manager. It provides up to 4-GB of XMS memory and is written to the V3.0 XMS Specifications. XMGR has direct support for V3.70+ UMBPCI by Uwe Sieber. After UMBPCI enables upper-memory, XMGR can load there directly and offer both upper and XMS memory to a DOS system. XMGR uses an I-O catcher with UMBPCI, to "catch" hard-disk or diskette I-O above 640K. Such I-O goes thru a low memory area, to avoid DMA problems with UMBPCI "Shadow RAM". XMGR also works with JEMM386 and V4.49/V4.95 EMM386 (MS-DOS V6.22 or V7.10). With an EMM driver, XMGR using its /B switch first "boots" in temporary space. After the EMM driver enables upper-memory, XMGR can load there with no /B switch, copy all of its "boot" data, and take-over XMS work. Only its XMS "Handles" table remains in low memory. With a small XMS- only system, XMGR can also load entirely in low memory. RDISK is a DOS RAM-disk driver. It creates a "fast" disk drive using 2 Megabytes to 2 GIGABYTES of XMS memory! It loads as a system driver in CONFIG.SYS, or it can load later in AUTOEXEC.BAT or by user command. DOS can copy critical programs or data files to the RAM-disk and access them much faster. Other read or write directories needing fast access (compiler TEMP files, databases, etc.) can be set up in the RAM-disk as well. If loaded after CONFIG.SYS, RDISK files can now be assigned to any free DOS drive letter with its /: switch. RDISK can be used with V2.0 or V3.0 XMS managers (60-MB maximum with V2.0 XMS). As a system driver, RDISK takes only 656 bytes of upper-memory plus a drive control block of 48 to 96 bytes on some DOS systems. If loaded by AUTOEXEC or the user, RDISK takes 752 upper-memory bytes. If needed, RDISK can be loaded in 640K DOS memory. RDISK is a small "load it and forget about it" driver, for users who do not need resizing or other features. UIDE is a DOS "Universal IDE" caching driver. It intercepts "Int 13h" BIOS I-O requests and can cache data for up to 34 BIOS disks, including A: and B: diskettes, and including newer hard disks with over 128-GB of data. UIDE accepts 48-bit LBA or 24-bit CHS I-O calls from new or old DOS systems. It uses its own IDE logic for SATA or IDE hard-disks and runs up to 10 "Legacy" or "Native PCI" IDE controllers. All possible IDE I-O is done thru its cache buffers, for faster speed. UIDE "calls the BIOS" for diskettes, SCSI or other type disks, so it will cache ALL disks on a DOS system! "Int 13h" drivers can load before UIDE, and it will intercept and cache I-O for their disks, also. ("ASPI" and other drivers that do not use Int 13h I-O are unsupported). UIDE also supports up to 8 CD/DVD drives, including SATA, IDE, or older "PIO mode" drives. On loading, it checks up to 10 "Legacy" or "Native PCI" IDE controllers and runs the first 8 CD/DVD drives found. UIDE does file input for SHCDX33E or other "CD-ROM Redirectors" like MSCDEX, and it caches all file data and directories for faster speed! It also supports DOS "audio" requests and will "play back" an audio CD. Data, audio playback, and "trackwriter" programs can be handled by UIDE using multiple drives on one system. Audio and "trackwriting" is uncached. UIDE caches 5 Megabytes to 4 GIGABYTES of data! It uses 4800 bytes of upper-memory for any size cache. All its cache tables/data are now in XMS memory, unless the /P switch is specified, in which case its search table goes at the end of driver memory -- see the UIDE /P notes, below. The /B "stand alone" UIDE (no caching nor diskettes) uses 3856 bytes of upper-memory. UIDE can also load in 640K DOS memory and its /H switch can be used to load most of the driver into HMA space, thus taking only 944 bytes of upper- or DOS memory. UIDEJR ["junior" UIDE] is also available. UIDEJR omits caching but it still runs up to 10 SATA/IDE controllers, 32 SATA/IDE hard-disks, and 8 SATA/IDE/"PIO mode" CD/DVD drives. It uses only 3280 bytes of upper- memory. Its /N2 switch (no CD/DVD drives) dismisses all CD/DVD logic, giving a disk-only driver needing 1600 upper-memory bytes. UIDEJR can also load in 640K "DOS memory", and its /H switch will load most of the driver in HMA space, thus using only 768 bytes of upper- or DOS memory. UIDEJR usually sets a 128K XMS memory buffer, thus "misaligned" I-O can still be done at UltraDMA speeds. UIDEJR can play audio CDs and will also do "raw" (trackwriter) CD/DVD input. Except as noted, all UIDE comments in this README also apply to UIDEJR. The small RDISKON.COM program can "re-enable" a DOS drive used by RDISK if a "format" command is accidentally issued to it. This disables the drive on some systems! Entering RDISKON L at a DOS command-prompt, where L is the desired drive letter (A to Z), will re-enable the drive. The small CC.COM "Clear Cache" program can help verify files written by UIDE. Entering CC at the DOS command-prompt sends a BIOS "reset" to all disks, making UIDE discard its cache. Data on the disk (NOT data still in the cache!) can then be compared with the original output. 2. NO Warranties ------------- XMGR, RDISK, and UIDE are offered without charge, "as-is", and "use at your own risk", and with NO warranties, not even the implied warranties of FITNESS for ANY particular purpose nor of MERCHANTABILITY! Driver questions or comments may be addressed to the website of Johnson Lam, . 3. Revision Summary ---------------- 27-Nov-09 UIDE /HL switch added, for protected-mode caches to 255-MB on V7.10 MS-DOS and 425-MB+ on others. UIDE /N3 switch error fixed. Other drivers unchanged (re-dated only). 22-Nov-09 UIDE uses more-optimal cache blocks, UIDE /F switch added. UPX packing of UIDE/UIDEJR dropped (avoids loader woes). 16-Nov-09 UIDE now caches 4 GIGABYTES of data! UIDE /P switch added for more protected-mode speed. XMGR/UIDE/UIDEJR now run 32 BIOS disks (not 40) as DOS has only 32 drive letters. 4-Nov-09 Fixed UIDE "cache flush" error. Added UIDE /E switch and 25/50-MB caches, deleted reassembly options. 19-Oct-09 UIDEJR "VDS lock" error fixed: CD/DVD logic now dismissed only by its /N2 switch. UIDE logic reduced, reassembly options added. 15-Oct-09 XMGR/UIDE /K switch deleted re: Win95/98 trouble. Thanks to Japheth for his "warning"! 6-Oct-09 UIDE/UIDEJR are back to using normal memory, due to MS-DOS kernel ERRORS! /R deleted, /H requests HMA use "at the user's risk"! 3-Oct-09 Fixed UIDE handling of (rare) cache XMS errors. 7-Sep-09 BAD protected-mode cache init error fixed in UIDE! Real- mode UMBPCI users not affected. Protected-mode EMM386/ JEMM386 users should download the 7-Sep-09 drivers now!! 3-Sep-09 XMGR now does protected-mode move "calls" (as in UIDE) for faster speed using RDISK, etc. XMGR /K switch added. 2-Sep-09 README file updated -- FreeDOS users who desire full upper memory must omit UMBPCI and load JEMM386/JEMMEX only. 30-Aug-09 BAD "VDS init" ERROR fixed in UIDE/UIDEJR! Users of them should download the 30-Aug-09 drivers now!! 23-Jun-09 RDISK now a .COM file, loadable by CONFIG.SYS or AUTOEXEC. RDISK /: switch and 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. 1-Jun-09 UIDE optimized for JEMM386, UIDE /K switch added. JEMM386 is now recommended with UIDE. 27-May-09 UIDE now takes 992 upper-memory bytes. UIDE move-memory logic fixed for old CPUs. Improved UIDE/UIDEJR CD/DVD entry logic. 19-May-09 Fixed RDISK clear-memory error and added removable-inquiry support. 15-May-09 Added the RDISK driver. 6-May-09 Added the non-caching UIDEJR driver. UIDE and UIDEJR now run up to 10 controllers, 36 disks, 8 CD/DVD drives. 1-May-09 Fixed XMGR "Port 92h" logic error. Added XMGR /PA and /PN switches to control use of "Port 92h" logic. 25-Apr-09 XMGR/UIDE license and FreeDOS prohibition deleted, drivers and sources are again available to all. Corrected UIDE CD/DVD "return codes". UIDE /R switch re-added. 17-Apr-09 UIDE now caches 2-GB, using 1056 upper-memory and 3760 HMA bytes! /L deleted. Fixed BAD audio byte-count error. 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 will load stand-alone in low memory or directly in upper-memory with UMBPCI. See the CONFIG.SYS examples in section 5. /Mn Specifies the temporary area used to load XMGR in "boot" mode and used for UMBPCI upper memory I-O before DOS can post a "workspace" buffer. Values are: /M1 = 64K. /M3 = 192K. /M5 = 320K. /M7 = 448K. /M2 = 128K. /M4 = 256K. /M6 = 512K. /M8 = 512K. Without /M, /M5 is assumed and the 320K area will be used. NOTE: A DOS system often may NOT load at address 0 up and may put temporary data anywhere in memory! /Mn helps in finding a "safe" place for XMGR to use. /M is ignored if XMGR loads stand-alone. /Nnn Specifies how many XMS "Handles" can be used by DOS programs. The value nn may be 48, 80, or 128. If /N is omitted, 48 "Handles" are used. A big system doing much XMS work may need 80 or 128 "Handles". /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 normal keyboard-port logic. If /P is omitted, XMGR "asks the BIOS" if the system has Port 92h logic. If not, XMGR will use normal "A20" logic. NOTE: If "A20" was enabled by DOS before XMGR loads, XMGR does not handle it at all! /Tn Specifies the BIOS requests to use in getting extended memory as follows: /T0 Neither "E820h" nor "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, which causes /T3 to be assumed. In addition, XMGR always uses an old 64-MB request, to get extended memory for /T0, or if the requests specified with /T1 through /T3 are unsuccessful. Users may need to test /T1 and /T2 separately, to see if their BIOS accepts them. A pre-1994 BIOS may not "ignore" /T1 thru /T3 properly and may require /T0 to be used. For compatibility with older QHIMEM drivers, /T4 thru /T7 may be used and work the same as /T0 thru /T3. /W Specifies use of the DOS "workspace" buffer, for upper-memory I-O if loading with UMBPCI. If /W is omitted, or if the DOS system does not have proper workspace logic, XMGR will set its own buffer in low memory. For PC-DOS or EDR-DOS, /W must be omitted! Without UMBPCI, /W is ignored. -------------------- RDISK uses only /S size and /: drive-letter switches: /Sn Specifies a desired RAM-disk size in megabytes of XMS memory. Values may be any number from 2 to 2047. /S1024 or more creates a 1- to 2-GIGABYTE RAM-disk! If /S is omitted or invalid, a 25-MB RAM-disk is created by default. For old V2.0 XMS managers (ROM-DOS etc.) only /S2 through /S60 may be used. See section 5 below for more details. /: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 and UIDEJR usually need only a /D: switch to specify a device name for the SHCDX33E CD-ROM Redirector. UIDE also needs its /S switch to specify a cache size. UIDE and UIDEJR switch options are: /A Specifies use of ALTERNATE "legacy IDE" I-O addresses. The first legacy controller will use alternate 01E8h/03EEh and 0168h/036Eh addresses, and a second legacy controller will use normal 01F0h/03F6h and 0170h/0376h I-O addresses. If /A is omitted, the first legacy controller uses normal and the second legacy controller uses alternate addresses, the usual case with most mainboards and BIOS programs. /A is for "odd" cases where "legacy IDE" addresses are REVERSED. /A does not affect "native PCI" controllers. /B For UIDE only, requests a "basic" stand-alone UltraDMA driver for disks or CD/DVD drives (no cache or diskettes). This may help in tests or diagnostics. The basic UIDE can use 128K of XMS memory and can now load in HMA space. UIDEJR will ignore /B. /D: Specifies the desired device name, used by SHCDX33E to access the CD/DVD drives. Example: /D:CDROM1 /D:MYCDROM etc. Device names must be from 1 to 8 bytes O.K. for use in DOS filenames. If /D: is omitted, or the device name after a /D: is missing or invalid, UDVD1 is used as the default. When disks/diskettes are present but no CD/DVD drives, the name UIDE$ or UIDEJR$ shall override any /D: name. /E For UIDE only, lets "external" drivers call UIDE for caching. /E adds 48 bytes of upper-memory "entry" logic, if UIDE is loaded in HMA space. Without /E, or if /B is also given, external-unit support is omitted. UIDEJR will ignore /E. /F For UIDE only, disables new 16K/32K cache blocks and requests a "fast" XMS-memory cache, with 64K cache blocks as in all prior drivers. /F is only for "special cases" requiring absolute speed, as 16K/32K blocks may take a tiny bit more I-O time. If /F is omitted, 40-MB to 1023-MB caches will use 16K cache blocks, and 1-GB to 2-GB caches will use 32K cache blocks. These give up to 25% higher cache capacity than 64K blocks! /F is ignored for caches of 2-GB and up (they must use 64K blocks!) or if /P requests a "protected mode" cache. UIDEJR will ignore /F. /H Requests use of "free" HMA space for most of the driver. /H /HL will make UIDE use only 944 bytes and will make UIDEJR use only 768 bytes of upper-memory. For UIDE only, if /P is also given, /HL uses 3856 bytes of upper-memory but allows a 255-MB HMA cache for V7.10 MS-DOS (see /P below). With UIDEJR, or if /P is omitted with UIDE, /H and /HL work the same. /H or /HL may NOT be given with ROM-DOS, which has no HMA! If /N3 is also given, /H or /HL will be ignored. ***** NOTE ***** MS-DOS kernels have ERRORS in posting free HMA space which can give CRASHES! Specifying /H is "At the user's risk"! A few "DOS Extenders", etc. are proven to CRASH, when used with /H on an MS-DOS V7.10 system! No such crashes have been seen for other DOS kernels. Users should TEST their systems first, before using /H or /HL with UIDE or UIDEJR! /N1 Requests NO handling of any hard-disk drives. /N2 Requests NO handling of any CD/DVD drives. For UIDEJR only, all CD/DVD logic will be dismissed, saving 1680 HMA bytes! /N3 Requests no XMS memory. /N3 requires loading in low memory, or the driver aborts. For UIDE, its /B "basic" driver is used. /N3 loses much speed, as "misaligned" or other I-O unsuited to UltraDMA must use BIOS logic for disks or "PIO mode" for CD/DVD input. /P For UIDE only, places its binary-search table in memory after the driver, not in XMS! This allows about 10% more speed on protected-mode systems (JEMM386, etc.) due to fewer XMS calls. /P is not needed if using only UMBPCI or on other real-mode systems. With /P, a 5-MB HMA cache can be set, but if a larger HMA cache is desired and cannot fit in the HMA, UIDE tries to set 80-MB HMA, then 15-MB HMA, and then loads in upper or DOS memory. /P limits V7.10 MS-DOS HMA caches to 255-MB with /HL and 170-MB with /H. /HL allows 425-MB+ and /H 350-MB+ on most other systems. If neither /HL nor /H is given and UIDE loads in upper or DOS memory, /P limits caches to 1900-MB and adds 32 bytes per cache MB to UIDE's size -- a 100-MB cache takes 7.6K memory, 500-MB takes about 20K, and the 1900-MB cache takes 64K. UIDEJR will ignore /P. /Q Enables awaiting "data request" before starting UltraDMA disk transfers. /Q is for "old" systems and must be used only if UIDE loads O.K. but seems unable to transfer data. /Q must be OMITTED with a SATA-to-IDE adapter from Sabrent or others, as such cards do not emulate "data request" from a SATA disk! /Q does not affect CD/DVD drives. /Sn For UIDE only, specifies the desired cache size, in megabytes of XMS memory. Values for /S are 5, 15, 25, 40 , 50, and any number from 80 to 4093. /S1024 or more gives a 1- to 4-GIGABYTE cache! Use as much cache as possible, to deal with today's BIG data files -- Below 128-MB memory: Use /S5 /S15 /S25 or /S40 With 128-MB memory: Use /S25 /S40 /S50 or /S80 With 256-MB memory: Use /S80 up to /S127 With 512-MB memory: Use /S160 up to /S255 With 1-GB memory: Use /S320 up to /S511 With 2-GB memory: Use /S640 up to /S1023 With 4-GB memory: Use /S1280 up to /S3072 Small systems may prefer /S25 or /S50 which set 1600 cache blocks and are more efficient. If /S is omitted/invalid, an 80-MB cache is set. Except for 25 or 50, values below 80 are "rounded" to 40- 15- or 5-MB. UIDE displays "XMS init error" and aborts when not enough XMS memory is free! If so, a smaller cache must be requested. For older V2.0 XMS managers (ROM-DOS etc.), only /S5 to /S50 may be used. UIDEJR will ignore /S. /UX Disables all CD/DVD UltraDMA, even for drives that can do it. PIO-mode is then used on all CD/DVD requests. Except for some "unusual" drives by Sony, etc. that do not follow all ATAPI "rules", /UX is rarely needed. /UX does not affect hard-disks. -------------------- 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 and UIDE are loaded through the CONFIG.SYS file. Your CONFIG.SYS file should have command lines similar to the following examples: DEVICE=C:\DOSDVRS\XMGR.SYS /N128 /B DEVICEHIGH=C:\BIN\UIDE.SYS /S3072 /H /D:MYDVD ;3-Gigabyte cache! DEVICEHIGH=C:\MYSYSTEM\UIDEJR.SYS /D:TOSHIBA1 DEVICEHIGH=C:\DRIVERS\RDISK.COM /S500 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 want extra upper-memory or other items must omit UMBPCI and load JEMMEX or HIMEMX/JEMM386 per their instructions, or load XMGR/JEMM386 as shown in the 3rd example below. An example CONFIG.SYS file using V3.70+ UMBPCI and XMGR is as follows: SHELL=C:\DOS\COMMAND.COM C:\DOS /E:512 /P DEVICE=C:\BIN\UMBPCI.SYS DEVICE=C:\BIN\XMGR.SYS /W DOS=HIGH,UMB DEVICE=C:\BIN\JEMM386.EXE I=B000-B7FF X=C800-EFFF NOEMS ;Optional DEVICEHIGH=C:\BIN\UIDE.SYS /S500 /D:CDROM1 ;Or UIDEJR DEVICEHIGH=C:\BIN\RDISK.COM /S250 ;Optional .. .. Etc. .. XMGR can be used stand-alone, for 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: SHELL=C:\DOS\COMMAND.COM C:\DOS /E:512 /P DEVICE=C:\BIN\XMGR.SYS DOS=HIGH DEVICE=C:\BIN\UIDE.SYS /S80 /D:MYCDROM ;Or UIDEJR DEVICE=C:\BIN\RDISK.COM /S20 ;Optional .. .. Etc. .. With JEMM386 and XMGR, XMGR loads first in "boot" mode, then JEMM386, and then XMGR finally loads in upper-memory. JEMMEX can also be used, in which case XMGR can be totally omitted. In the following example, the UIDE command line shows its best settings if using V7.10 MS-DOS and loading the /P protected-mode driver in the HMA (for over 255-MB, /H or /P must be omitted). An example CONFIG.SYS file which uses the XMGR "boot" procedure is as follows: SHELL=C:\DOS\COMMAND.COM C:\DOS /E:512 /P DEVICE=C:\BIN\XMGR.SYS /B ;/B for "boot" DOS=HIGH,UMB DEVICE=C:\DOS\JEMM386.EXE I=B000-B7FF NOEMS ... ;Or JEMMEX here DEVICEHIGH=C:\BIN\XMGR.SYS ;No /B here! DEVICEHIGH=C:\BIN\UIDE.SYS /S255 /HL /P /D:MYDVD ;Or UIDEJR here DEVICEHIGH=C:\BIN\RDISK.COM /S500 ;Optional .. .. Etc. .. When other Int 13h DOS drivers will be used, UIDE must load after them, so it can cache disk I-O for the other drivers. When XMGR, other disk drivers, and UIDE have loaded, all other CONFIG.SYS drivers (RDISK.COM, SETVER.EXE, ANSI.SYS, etc.) can then be loaded in any desired order. 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 which copy all RDISK programs and 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 take little time. Examples of such commands in AUTOEXEC.BAT are: LH C:\BIN\RDISK.COM /S500 /:Q [Load RDISK, assign drive Q:] ... ... ... MD Q:\DOS [Create RAM-disk directories] MD Q:\USERPROG MD Q:\ ... COPY C:DOS\*.* Q:\DOS [Copy DOS files to RAM-disk] COPY C:\USERPROG\*.* Q:\USERPROG [Copy programs to RAM-disk] COPY C:\...\*.* Q:\... [Copy other files, as needed] ... ... [Optional: Verify RAM files] ... PATH Q:\DOS;Q:\USERPROG;Q:\... [Tell DOS "new directories!"] Where RDISK and UIDE are both loaded, users must "balance" how much XMS memory is taken by each driver. RDISK should request no more XMS than its files are expected to need. UIDE can then be given most remaining XMS memory, for better cache performance. Some XMS memory needs to be saved for other programs which need it! For example, users who have a 4-Gigabyte PC system might give 500-MB to RDISK, give 3-GB to UIDE, and save 500-MB of XMS memory for other programs. Users can adjust their values as needed, so that RDISK handles programs and "fast" data files, while UIDE caches all other "ordinary" files. Properly "balanced" use of XMS will create 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 "UDMA Capable" for a disk, enable it. Power-saving features such as a "drive spin-down timeout" should be DISABLED or driver I-O requests may time out! Also, be sure to use an 80-connector cable for any UltraDMA drive running in "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 one "end" and the middle connector! This avoids ERRORS as 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 return normal XMS or CD/DVD driver error codes if needed. These are shown in the V3.0 XMS Specification and the Microsoft "MS-DOS CD-ROM Extensions 2.1" documentation, available from Microsoft or other Internet sources. UIDE works as a "BIOS driver" and returns whatever codes the BIOS posts for its diskettes or hard-disks. For SATA or UltraDMA disks, UIDE can return 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 --------------- The JEMM386 or JEMMEX drivers are now recommended for use with UIDE, if using a DOS system that needs their extra upper-memory, DPMI/VCPI logic etc. Other EMM drivers are essentially "abandoned", some with still- uncorrected ERRORS, and those drivers are no-longer recommended! UIDE handles only "Legacy" or "Native PCI" IDE controllers. Old "RAID only" chipsets (Via VT6420, etc.), port-multiplier chips, and ADMA/AHCI chipsets are not currently supported. To use UIDE, the mainboard BIOS must set SATA controllers in "IDE" mode, not RAID/ADMA/AHCI! UIDE can then handle SATA drives properly, at full speed. Where no "IDE" BIOS setting for SATA is offered, a Sabrent converter card (or similar) will allow UIDE to run SATA hard-disks and CD/DVD drives from the "standard" IDE controller channels, at full UltraDMA speeds. It is NOT RECOMMENDED for UIDE to handle DOS disks using only the BIOS! Often a "cheap" BIOS will omit DOS "Virtual DMA" code. If so, when an EMM driver (JEMM386 etc.) enables "V86 protected-mode", the BIOS can do only PIO-mode transfers and LOSES much speed! If needed, get SATA-to- IDE adapters for SATA disks (as above), or get an "Int 13h" disk driver for SCSI or other disks, so UIDE can handle them at full speed! XMGR loads in UMBPCI upper-memory BEFORE that memory is declared to the DOS system! Memory displays using UMBPCI may not list XMGR, since its memory is not part of the DOS memory lists. Such memory displays will begin with a block having a 00A7h offset, or greater if using 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! Newer BIOS programs may use UltraDMA to load programs into upper memory. If this is UMBPCI "Shadow RAM", a CRASH will occur! To stop this, and handle new BIOS programs, users should follow these two RULES for running UMBPCI together with XMGR and UIDE: A) The loading "order" for V3.70+ UMBPCI and XMGR, shown in section 5 above, MUST be used! This lets the XMGR "I-O Catcher" intercept and process upper memory disk I-O, until the UIDE driver loads and takes-over disk UltraDMA. Older UMBPCI versions, or other UMBPCI loading schemes, are NOT recommended! B) When CHS I-O is done (MS-DOS V6.22 or older), every disk MUST have valid CHS parameters! If not, UIDE and the "I-O Catcher" let the BIOS handle CHS I-O. If BIOS UltraDMA is not disabled, a similar "Shadow RAM" CRASH will occur! Some "CD-ROM boot" programs handle the CD/DVD as a "fake" hard disk and provide incorrect EDD BIOS data for it! In scanning for disks to use, UIDE may display "EDD BIOS error! Unit ignored.", then go on searching for more UltraDMA disks. Users who did NOT "boot" from CD/DVD need to see which disk was passed-over and why. Users who DID "boot" from CD/ DVD, where all SATA/UltraDMA disks were found, may IGNORE this message! It is caused by an ERROR in the "CD-ROM boot" program, NOT by a problem with UIDE or its SATA/UltraDMA disks! Some BIOS programs do not "configure" a mainboard controller if no user drives are found! An unconfigured controller causes UIDE to display "BAD controller", then it goes on looking for others to use. If this message is displayed, users should verify that each SATA/UltraDMA drive was made "active" thru the BIOS set-up logic. If so, "BAD controller" says a chip was not set to both "Bus Master" and "I-O Space" modes, and the BIOS should be UPDATED!