MDGx
Complete UMBPCI.SYS Guide

  I have compiled this guide from Uwe Sieber's UMBPCI English web page and documents [all rights reserved] included with UMBPCI.SYS English release [freeware], and used related information in these text files: MEMORY.TXT, MYTIPS95.TXT/MYTIPS31.TXT, REGIONS.TXT, SECRETS.TXT + EMM386.TXT, included with my ©Tricks + Secrets files [freeware].
For questions/comments regarding UMBPCI.SYS, please e-mail Uwe Sieber.
For questions/comments regarding this page, please e-mail me.
For further MS-DOS + Windows memory technical details and optimization guidelines, please refer to the text files listed above, included with my ©Tricks + Secrets Files [FREEware]:
Windows 9x/NT4/2000/ME/XP/2003 + DOS 7.xx/8.00: W95-11D.EXE
Windows/WfWG 3.1x + DOS 6.xx: W31-11D.ZIP
For terms definitions and explanations, please see my Glossary.
FYI: The purpose of this guide is to familiarize the reader with the features and advantages of using what I consider the best and fastest FREEware upper memory manager available for MS-DOS 5/6/7/8 + Windows 3.xx/95/98/ME, and to share my personal experience using UMBPCI.SYS since version 2.17.
Enjoy. ;)

UMBPCI.SYS v3.85
by Uwe Sieber - English Release

    Contents:

Overview

  UMBPCI.SYS is a FREEware MS-DOS 5/6/7/8, FreeDOS, Open DOS, Novell DOS, Lineo (Caldera) DR-DOS and Windows 3.xx/95/98/ME Upper Memory Area (UMA) access driver (HIMEM.SYS, HIMEMX.EXE, XMGR.SYS or FDXMS.SYS extender) for Intel, FIC VIA (Apollo), ALi (Alladin) and SiS PCI/AGP chipsets, supporting Intel Pentium, Pentium Pro, Pentium II/III/IV, Celeron, Xeon, AMD and Cyrix CPUs.

It is based on the German c't Magazine's free source code. The original UMBPCI (German version) was written by the c't Magazine editor Andreas Stiller in 1995, based on UMBADD developed by Peter Siering (c't) in 1991. Original UMBPCI had several problems, supported only Intel chipsets up to the 430FX, and there were no free updates. Andreas further developed CTUMB, which is only available to c't subscribers, on c't Magazine Utilities CD-ROM. :(

UMBPCI.SYS is also included with FreeDOS as the official FDXMS.SYS upper memory driver.

NOTE: UMBPCI.SYS is an unofficial release, unsupported by c't Magazine!
If you have problems, read this guide FIRST. Only if that doesn't help, please e-mail Uwe Sieber.

Uwe Sieber's official UMBPCI.SYS web pages:

Download UMBPCI.SYS [freeware] only from Uwe Sieber's web site:

To make UMBPCI available for download at your web site, please use only links above, due to frequent updates.
If including UMBPCI into a package of any kind, please ensure it is always the newest version.

Source code (TASM 3.x) available upon request.

Back 2 Contents

Disclaimer

  This program and the accompanying documentation are offered "as is".
The user bears the entire risk of this software not performing as expected.

Back 2 Contents

Version History

  New supported chipsets + UMBPCI.SYS version updates:

Back 2 Contents

Requirements

FYI: Chipset Specs.

Back 2 Contents

Features + Advantages

  UMBPCI.SYS extends Microsoft's HIMEM.SYS by enabling the "Request XMS-UMB" function. Microsoft's EMM386.EXE does the same, when loaded with the "NOEMS" or "RAM" parameters from CONFIG.SYS.

UMBPCI.SYS creates UMBs (Upper Memory Blocks) using the existing system memory intended to be used as Shadow RAM, but disabled by default, ONLY in the C800-EFFF range, NOT at B000-B7FF. The B000-B7FF area is normally used for monochrome video (used by older graphics adapters), NOT for BIOS (ROM) extensions, therefore X86 chipsets canNOT enable shadow RAM within this region. UMBPCI.SYS enables this memory and disables its write protection.

UMBPCI.SYS takes ONLY 160 Bytes of conventional RAM (144 Bytes code + 16 Bytes environment), while providing up to 629 KiloBytes (KB) of FREE conventional ("low") memory, IF loading ALL devices/drivers/TSRs "high"!
Microsoft EMM386.EXE also creates UMBs from the computer's physical XMS (eXtended Memory Specifications) by virtually remapping XMS to the Upper Memory Area (UMA) using the Memory Management Unit (MMU) of the 80386 and newer CPUs, but needs an additional 150 KB of XMS, 4 KB of low memory and 7 KB of UMA when loaded, and it also switches the CPU into "protected mode" (slower) used by the MMU. Thus EMM386.EXE forces DOS to run in Virtual 80X86 machine (V86) mode.
UMBPCI.SYS leaves the CPU in "real mode", for better compatibility and faster performance.
Take a look at these diagrams for memory requirements and performance comparison:

UMBPCI
Diagram by Ralf Buschmann

FYI: More info on X86 CPU modes.

Beginning with v3.00 you can simply try loading UMBPCI without any checking.
Because it is an extension to HIMEM.SYS under MS-DOS/Windows, UMBPCI.SYS •must• be loaded AFTER HIMEM.SYS. CONFIG.SYS example assuming Windows 9x/ME resides in C:\WINDOWS and UMBPCI.SYS in C:\UMBPCI:

DOS=HIGH,UMB
DEVICE=C:\WINDOWS\HIMEM.SYS /TESTMEM:OFF /Q
DEVICE=C:\UMBPCI\UMBPCI.SYS
DEVICEHIGH=...
INSTALLHIGH=...
SET=...
etc...

If UMBPCI is properly loaded, you'll see a message like this:

UMBPCI c't 11/95 - Siering/Schaepers/Stiller
V3.84 - support for new chipsets, Intel PPro, AMD K7
Uwe Sieber 04/1996-01/2013
Using C800-EFFF
Intel 440BX/ZX found
Program installed

If your chipset is NOT supported, you'll see this message:

No supported chipset found.
Problem programming the chipset.

If your chipset is supported but UNTESTED, you'll see this message:

This chipset is untested!
Mail me the name of the chipset and if it works
so I can remove this break.
Press any key...

Uwe Sieber will remove this pause screen as soon as he'll find out if your (untested) chipset works.

If you get other messages, please e-mail Uwe Sieber.

You can determine your motherboard chipset brand + type by using PCI for DOS [165 KB, freeware].

Back 2 Contents

Extra Tools

  FREEware DOS tools included with UMBPCI.SYS:

      LOWDMA.COM + LOWDMA.SYS:

    LOWDMA is a memory resident driver for handling floppy disk sectors in non-DMA UMBs, part of DOSLFN [free, open source]. It takes only 700 - 800 Bytes of low RAM.
    You •must• use LOWDMA IF:

    LOWDMA •must• be loaded BEFORE DOSLFN or SMARTDRV, as early as possible in the boot sequence, preferably right AFTER your CONFIG.SYS UMBPCI.SYS line.
    You can load it either as a TSR (LOWDMA.COM) from AUTOEXEC.BAT or from native/real/true/pure MS-DOS, or (better) as a device driver (LOWDMA.SYS) from CONFIG.SYS, in which case you •must• reboot (example):

    DEVICE=C:\UMBPCI\UMBPCI.SYS
    DEVICE=C:\UMBPCI\LOWDMA.SYS

    LOWDMA •must• be loaded in conventional (low) RAM!

    Internal operation
    : Current LOWDMA release (included with DOSLFN) hooks Interrupt 40 (Int40) for floppy sector operations, avoiding "MS-DOS Compatibility Mode" errors in Windows 9x/ME, and thus making the need for a lowdma.* line under the [SafeList] section of %windir%\IOS.INI unnecessary.
    It copies the sector from the risky UMA to the safe conventional memory below 640K before issuing Int40, and vice versa for disk read access. This is done only for floppy disks and for data in UMA. Otherwise calls to Int40 are passed through.
    In case of an empty Int40 vector (due to missing hard disk BIOS), LOWDMA uses Int13 instead, but this alternative is neither "bullet-proof" nor tested.

    LOWDMA seems to have problems with complex directory structures, usually not found on boot disks.

      UMBCHK.EXE:

    UMBCHK is needed ONLY IF using UMBPCI 2.xx, because the /I=xxxx-yyyy parameter is not enabled.
    UMBPCI 3.xx includes this function, and properly autodetects and maps all available (free) UMA ranges (UMBs).
    UMBCHK checks each 16 KB block between C000 and EFFF if it contains either 00 only or FF only, lists a block as OK (not in use) or used (in use), and then calculates a suitable command line for UMBPCI.
    UMBCHK •must• be executed ONLY from native/real/true/pure MS-DOS, ONLY after a "clean" boot, without ANY memory managers loaded.

    Reboot WITHOUT processing the startup files (AUTOEXEC.BAT + CONFIG.SYS): press F8 during the bootup POST (Power On Self Test) routine (MS-DOS 6.xx or Windows 9x). This is similar with the "Command prompt only" option from the Windows 95/98 Startup Menu. Then run UMBCHK to view all UMA ranges available to UMBPCI, and to display the suggested command line for use with UMBPCI. UMBCHK recommends the same ranges as the ones used by UMBPCI when loaded without parameters.
    If UMBCHK suggests /I=C800-EFFF, add this line to your CONFIG.SYS, right AFTER the HIMEM.SYS line (example):

    DEVICE=C:\WINDOWS\HIMEM.SYS /TESTMEM:OFF /Q
    DEVICE=C:\UMBPCI\UMBPCI.SYS /I=C800-EFFF

    UMBPCI's boot message displays the same information, therefore UMBCHK is NOT needed.

      DMACHK.COM:

    Uwe Sieber added DMACHK thanks to Heiko Nocon who made it possible.
    Use DMACHK to check and display the UMB ranges in which ISA DMA works, eventually redirecting its output to a text file. Example:

    drive:\path\DMACHK > drive:\path\UMBRANGE.TXT

    DMACHK works ONLY in native/real/true/pure MS-DOS mode with UMBPCI loaded, without EMM386.EXE or similar memory managers.
    Better to boot WITHOUT ANY memory managers (except HIMEM.SYS), and then load UMBPCI.SYS using CTLOAD.COM [23 KB, free] from native MS-DOS (example):

    drive:\path\CTLOAD drive:\path\DMACHK > drive:\path\UMBRANGE.TXT

    CTLOAD.COM doesn't work with Windows ME. Use LOADSYS.EXE [78 KB, free] or DEVLOAD.EXE [6 KB, free] instead.

    This way nothing will load high, but the UMA is enabled and DMACHK can test it safely.

      UMBFILL.COM + UMBFILLH.EXE:

    UMBFILL.COM occupies all free UMBs. This may slow down your machine if the UMBs are not cacheable, or even crash it if ISA DMA does NOT work within the UMBs.
    Windows 9x/ME takes over all remaining UMBs (not occupied by drivers or TSRs) and uses them as normal RAM. But the memory created by UMBPCI is sometimes not seen as "normal" by MS-DOS/Windows. It may not be cacheable and/or ISA DMA may not work. With the exception of the very first Intel PCI chipsets, the only really normal UMBs UMBPCI creates, are at E000-EFFF on Intel chipsets up to the 440xX (and some 8xX series) and the UMBs of the VIA Apollo P2 chipsets.
    To prevent Windows 9x/ME from using this remaining critical memory in such cases, use UMBFILL to allocate ALL remaining UMBs before Windows GUI loads.
    Add a line for UMBFILL AFTER ALL your devices/drivers/TSRs lines, and BEFORE the line that starts Windows in your AUTOEXEC.BAT, IF you load Windows from AUTOEXEC.BAT.

    Another way to prevent Windows 9x/ME from taking over all remaining UMBs is to add/modify this line to read:

    LocalLoadHigh=0

    under your SYSTEM.INI [386enh] section.
    This way Windows occupies only a small part of the UMBs which seem to be uncritical.

    UMBFILL •must• be loaded in conventional (low) RAM!
    UMBFILL occupies only 800 Bytes of conventional memory.

    UMBFILLH.EXE does the same but •must• be loaded high. If there are more than 1 UMBs UMBFILLH •must• be loaded into the first block (example):

    LH /L:1 UMBFILLH

    Thanks to Serg Svetlov for UMBFILLH.EXE.

Back 2 Contents

Restrictions

  ISA (Industry Standard Architecture) DMA (Direct Memory Access) is critical in the created UMBs. ISA involves ANY 8-bit ISA expansion cards you might have on your computer (modem, sound card, network card etc), and the Floppy Drive Controller (FDC). A typical PC/AT IBM compatible clone has one (primary, 3.5", 1.44 MB, drive letter A, default bootable drive), or two (secondary, 5.25", 1.2 MB, drive letter B, optional) floppy drives.
Such devices •must• use the DMA controller (built into the motherboard chipset), thus relieving the CPU of time consuming routine tasks (requiring extra CPU cycles), so your processor can proceed with other operations at the same time (multitasking).

Known Chipset Problems [depending on your motherboard chipset type]:

  1. PCI Bus Mastering: does NOT work with AMD K7/K8 CPUs (Athlon, Duron, Opteron), and you should NOT load PCI network cards drivers in the UMA.
    This technique is used by PCI IDE controllers with their own BIOS from Promise, HighPoint, Silicon Image and others.
    Sometimes this can be fixed by setting DoubleBuffer=1 in MSDOS.SYS if using Windows 95/98/ME [a.k.a. MS-DOS 7/8].
    To force Win9x/ME not to use UMA, use UMBFILL to allocate all remaining UMBs.
    If using older DOS versions you canNOT load devices/drivers/TSRs in UMBs from a hard disk connected to such add-on controllers, or if using real DOS mode Ultra DMA/ATA (UDMA/UATA) drivers, such as UIDE.SYS [free, open source] with the /L parameter to force loading into UMBs which are not PCI Bus Mastering capable, because they use PCI Bus Mastering in pure DOS mode. This is similar with the ISA DMA problem.

  2. 80486 and earlier chipsets: UMBPCI does NOT work with 486 class (or earlier) PCs even if they have a PCI chipset, because their PCI BIOS doesn't support read and write access to the PCI configuration registers.
    If you own a 286, 386 or 486 class CPU try the older HIRAM.EXE, similar to UMBPCI. HIRAM works also with Intel 430xX and 440xX chipsets, allowing HIMEM.SYS to load in Upper Memory, ONLY IF used in combination with UMBPCI.SYS!
    Read HIRAM.TXT included with UMBPCI.SYS for usage guidelines!

  3. Power Management: "Suspend to Disk/RAM" does NOT work with UMBPCI. The UMBs created by UMBPCI aren't saved/restored by the power management routines because UMBPCI is not recognized.

  4. ISA DMA function: may NOT be available in certain UMA regions, because the memory provided by UMBPCI is intended as "shadow RAM", NOT as "normal RAM". This has nothing to do with PCI Bus Mastering.

  5. Level 2 (L2) CPU cache: may be write-protected, in which case UMBPCI canNOT make the UMBs cacheable (on non-Intel Socket 7 chipsets).
    Windows 95/98/ME loads into high memory blocks depending on these CONFIG.SYS commands: SWITCHES, BUFFERS, FILES, LASTDRIVE, STACKS...
    To force Win9x to load them into low memory, you can use the "DOS=HIGH,UMB,NOAUTO" switch in CONFIG.SYS. But then Win9x doesn't load the •needed• IFSHLP.SYS driver. To allow IFSHLP.SYS to load anyway, try these CONFIG.SYS lines in this EXACT ORDER:

    DOS=HIGH,UMB,NOAUTO
    FILES=60
    BUFFERS=11
    STACKS=0,0
    FCBS=1,0
    DEVICE=C:\WINDOWS\IFSHLP.SYS
    DEVICE=C:\WINDOWS\HIMEM.SYS /TESTMEM:OFF /Q
    DEVICE=C:\UMBPCI\UMBPCI.SYS
    DEVICEHIGH=...
    INSTALLHIGH=...
    SET=...
    etc...

    More info @ MSKB.

  6. There are reports about crashes involving CMOS/BIOS corruption on some Compaq Presarios. Maybe the reason is simply a wrong parameter, but there is no further information available.

  7. Some USB (Universal Serial Bus) keyboards use the C800-CBFF area, therefore you need to restrict UMBPCI.SYS to the CC00-EFFF region in CONFIG.SYS, when using the /I=xxxx-yyyy parameter (example):

    DEVICE=C:\UMBPCI\UMBPCI.SYS /I=CC00-EFFF

  8. No program that needs ISA DMA should be loaded, especially disk (floppy) cache TSRs (Terminate and Stay Resident programs) like Microsoft SMARTDRV.EXE.
    But you can use the /L parameter with SMARTDRV to force it to load partially into conventional memory, with LOADHIGH in AUTOEXEC.BAT, or INSTALLHIGH in CONFIG.SYS. The result will be a "splitted load", exactly what UMBPCI needs. In this case SMARTDRV takes 16384 Bytes of low memory (examples):

    • AUTOEXEC.BAT SMARTDRV line:

      SMARTDRV 2048 16 /L

    • CONFIG.SYS SMARTDRV line:

      INSTALLHIGH=C:\WINDOWS\SMARTDRV.EXE 2048 16 /L

    Smartdrv's low memory requirement can be reduced by using the /E:xxxxx and /B:xxxxx parameters. Default values are /B:16384 and /E:8192, which causes SMARTDRV to take 16384 Bytes of low memory in the example above.

    For absolute minimum memory usage at the expense of some disk performance loss in real DOS mode, you can combine the /B and /E parameters (example):

    SMARTDRV 2048 16 /B:1024 /E:1024 /L

    This takes only 1 KB of low and about 16 KB of upper memory.

    The B(uffer) value •must• be at least equal to or a multiple of the E(lement) value. Try NOT to use the SAME value for both /E: and /B: switches, because it may cause sporadic data errors!

    1024 is a bit extreme and prevents SMARTDRV from caching CD/DVD drives, because a sector on a CD-ROM disk has 2048 Bytes. /B:4096 and /E:4096 should be a good compromise.

    You can also disable the SMARTDRV floppy cache by adding the A- and B- parameters (depending on how many floppy drives you have), or by loading SMARTDRV into the upper memory E segment [E000-EFFF], if you have an Intel 430xX or 440xX chipset (tricky).
    Example of AUTOEXEC.BAT SMARTDRV line:

    SMARTDRV.EXE 2048 16 A- B- C+ D /N

    to disable read and write caching on both floppy drives (A and B), enable read and write caching on the hard drive (C), and enable read-only caching on the CD/DVD drive (D).

    Another way to force SMARTDRV to load into the E segment (ONLY IF you have an Intel 430xX or 440xX chipset), at least at E000-E3FF, is to load MSCDEX (MicroSoft Compact Disk EXtensions) with LOADHIGH, BEFORE the SMARTDRV line in AUTOEXEC.BAT.

    NOTE: You also need to load your DOS mode CD/DVD (supplied) driver in CONFIG.SYS, if you want to have your CD/DVD available in native MS-DOS, AND to have it cached by SMARTDRV the same time (example):

    DEVICEHIGH=C:\CDROM\UIDE.SYS /D:MYCDROM

    In case SMARTDRV loads partially at E000 or below E000, the floppy disk becomes UNREADABLE IF the read/write floppy cache is enabled by the SMARTDRV A+ and/or B+ switches!

    FIX: See LOWDMA.COM + LOWDMA.SYS!

    NOTE: UIDE.SYS is the "universal" CD/DVD DOS driver [free GPL], and works with most popular (E)IDE/ATAPI internal CD/DVD drives. More details at my "CD-ROM DRIVERS 4 DOS" page.

    Example of MSCDEX v2.25 and SMARTDRV v5.02 "combo" in AUTOEXEC.BAT, using Windows 9x/ME:

    LOADHIGH=C:\WINDOWS\COMMAND\MSCDEX.EXE /D:MYCDROM /M:20
    SMARTDRV.EXE 2048 16 A+ B+ C+ D /N

    to force SMARTDRV to load at E000, and occupy the UMA at and above E3FF.

    Another method is to create two UMB regions, by adding this line in CONFIG.SYS:

    DEVICE=C:\UMBPCI\UMBPCI.SYS /I=C800-DFFF /I=E000-EFFF

    Then you can choose to load a program in one of the 2 created regions: #1 (C800-DFFF) or #2 (E000-EFFF), by using the /L:x parameter (example):

    LOADHIGH /L:2 C:\WINDOWS\SMARTDRV 2048 16 A+ B+ C+ D /N

    This places SMARTDRV into the second region which starts at E000.

    BTW: INSTALLHIGH does NOT support the /L:x parameter. Ask Microsoft why...

    These are the ONLY ways to make floppy cache possible, other than restricting UMBPCI's available UMA to E000-EFFF (example):

    DEVICE=C:\UMBPCI\UMBPCI.SYS /I=E000-EFFF

    which defeats the purpose of using UMBPCI.SYS for providing as much UMA as possible.

    TIP: MSCDEX provides support for accessing CD/DVD drives in native DOS mode. Run MSCDEX /? from native MS-DOS prompt to display its command line switches.

    Observe also the different DOS (2048) and Windows (16) SMARTDRV cache sizes (in KiloBytes). You want to allocate a large SMARTDRV cache in real MS-DOS mode (but not more than 1/6 of your installed memory, especially if you only have 16 MB or less), and the smallest SMARTDRV cache size in Windows, because Windows 9x/ME and WfWG 3.1x provide their own 32-bit protected mode virtual cache algorithms, and do NOT need SMARTDRV to cache ANY drives.

    Observe also the /N switch, which allows the return to the DOS prompt BEFORE SMARTDRV's temporary memory cache buffer is flushed and data permanently written to disk. Use /N with CAUTION, because you may experience DATA LOSS in case of a sudden power outage!
    SMARTDRV's buffer loads into the UMA in the example above, using the MS-DOS built-in LOADHIGH command.
    But if an upper memory manager (like EMM386, QEMM, NetRoom, 386MAX etc) enables access to the UMA, SMARTDRV doesn't need LOADHIGH (or a similar 3rd party "loader"), being capable of placing itself in the upper memory if it can fit into a free contiguous UMB.

    TIPS:
    • Run:
      SMARTDRV /?
      from any DOS prompt to display all available command line parameters.
    • For more SMARTDRV info + usage details, see my "OUTSMART SMARTDRIVE" article.

  9. If loading UMBPCI from a bootable floppy disk, you should ONLY use UMA ranges that can handle ISA DMA. For example on 430xX and 440xX Intel chipsets load it with /I=E000-EFFF.
    Do NOT load UMBPCI from boot disks on chipsets that cannot handle ISA DMA in the UMBs!

    FIX: See LOWDMA.COM + LOWDMA.SYS!

Back 2 Contents

HIRAM.EXE

  HIRAM.EXE v1.9 is an older (1993) freeware Upper Memory Extender for 80x86 CPUs: 80286, 80386 and 80486, intended for users who really want to free the last byte of low memory, similar to UMBPCI.SYS.
Download:

The functions of UMBPCI are splitted here into two programs: one enables the memory and the other makes it visible to DOS. The latter is called HIRAM.EXE, and doesn't use ANY memory.
HIRAM.EXE works fine with MS-DOS 5.00 - 7.xx [Windows 95/98] and the memory enabled by UMBPCI, at least on Intel 430xX (Pentium/Pentium Pro) and 440xX (Pentium II/III) chipsets.
It may also work with other chipsets (but I haven't tested it), because it is CPU/chipset independent.

NOTE: HIRAM.EXE does NOT work with Windows Millennium Edition (ME) [a.k.a. MS-DOS 8.00] because HIMEM.SYS loads automatically in conventional memory from IO.SYS at boot time BEFORE the CONFIG.SYS file is processed. :(

To make this work, you need these CONFIG.SYS commands in this EXACT ORDER (example):
[all lines preceded by a semicolon (;) are comments]

; To load DOS high and to enable the Upper Memory Blocks:
DOS=HIGH,UMB
; To enable the Upper Memory Area:
DEVICE=C:\UMBPCI\UMBPCI.SYS
; To make the UMA visible to DOS through a small XMS 2.0 handler:
DEVICE=C:\UMBPCI\HIRAM.EXE
; Yes, now you can load HIMEM.SYS "high":
DEVICEHIGH=C:\WINDOWS\HIMEM.SYS /TESTMEM:OFF /Q

TIP: Take a look at my "MS-DOS 7.xx MEMory Specs" for an example using HIRAM.EXE with an Intel 440BX Pentium II/III chipset.

The trick is that HIRAM implements the function "Request XMS-UMB" without HIMEM.SYS, while UMBPCI does it the "official" way, by extending HIMEM.SYS with this function.
When HIMEM.SYS loads, DOS takes all XMS UMBs from HIRAM.EXE, and HIRAM deactivates its XMS function to allow HIMEM.SYS to load.
Without "DOS=HIGH,UMB" HIMEM.SYS would stop with an error message like:

"Another XMS driver is already installed"

because HIRAM has no reason to deactivate its small XMS handler.

Therefore by using HIRAM.EXE you can save 1 KB of low memory in comparison to loading UMBPCI.SYS by itself.
Moreover, the CONFIG.SYS lines "combo" above allow saving 160-240 Bytes (depending on which UMBPCI.SYS version is used) of conventional RAM by forcing UMBPCI.SYS to use NO memory. You can verify this by running the command below from any DOS prompt (valid for MS-DOS 6.xx/7.xx):

MEM /M UMBPCI

Guess what...

"UMBPCI is not currently in memory."

Wow! ;-)

Similar DOS memory tools (freeware):

Back 2 Contents

Known Chipset Problems

Back 2 Contents

Usage Guidelines

  If you want to use UMBPCI's /I=xxxx-yyyy parameter, make sure to check the free UMA before loading UMBPCI.SYS, by running UMBCHK (see "Extra Tools" section above).

To visualize the DOS memory allocation, the Microsoft MEM.EXE command is certainly not of prime quality. :( I suggest using MI.COM [9 KB, freeware, English]. MI stands probably for Memory Information.

If you use EMM386.EXE, you can "borrow" its /I=xxxx-yyyy parameter(s) for use with UMBPCI.SYS v2.24 and older ONLY (UMBPCI v3.00 and newer do NOT need the /I=xxxx-yyyy parameter), but this •must• be limited to the range C800-EFFF, which is valid for ALL UMBPCI releases.
After adding a line for UMPCI.SYS to your CONFIG.SYS, disable the EMM386.EXE line by placing REM or a semicolon (;) followed by a space in front of it. Examples:

MS-DOS 5/6 users:

REM DEVICE=C:\DOS\EMM386.EXE I=B000-B7FF RAM D=256 AUTO

Windows 9x/ME users:

; DEVICE=C:\WINDOWS\EMM386.EXE I=B000-B7FF RAM D=256 AUTO

If you don't want to use UMBPCI's /I=xxxx-yyyy parameter (needed ONLY if you want to enable EMS) you can skip to the following section: "Additional OS Compatibility".

UMBPCI.SYS accepts and recognizes only the I=xxxx-yyyy command line switch preceded by a forward slash (/), which •must• be used with UMBPCI v2.24 and older. UMBPCI supports multiple /I=xxxx-yyyy parameters.
UMBPCI uses ONLY contiguous 16 KB Upper Memory Blocks. You may have to increase the start address or decrease the end address to the nearest 16 KB border for UMBPCI.SYS to operate properly!

In MSD's Memory chart (displayed by pressing M at the MSD main screen), look at your upper memory range. Every caret (square) stands for 1 KB of memory, therefore each entire line stands for 16 KB. Because UMBPCI.SYS can use ONLY whole (contiguous) free 16 KB blocks, you have to look for lines that are COMPLETELY available (unused).

  MSD.EXE is the MS-DOS based MicroSoft Diagnostics utility, included with Windows 95/98 [a.k.a. MS-DOS 7.00/7.10] and Windows ME [a.k.a. MS-DOS 8.00], that you might need one day (hope not) to see how your System, OS, Memory, Devices, TSRs, Video, Mouse, Disks, Network, Ports etc... are configured and to detect eventual hardware conflicts: IRQ (Interrupt ReQuest line), BA (hex Base Address), I/O Port, COMx Port etc. Although a primitive, old style "legacy" tool, MSD can be quite useful sometimes in "sniffing" (low level) hardware problems.

MS-DOS 5.00 - 6.22 users can download the updated MSD.EXE v3.01.
MSD.EXE is NOT installed by Windows 95/98/ME Setup! Copy MSD.EXE manually from your Win9x/ME Setup CD-ROM to a folder in your path (I recommend C:\WINDOWS\COMMAND), or run MSD directly from the CD, at any DOS prompt.
Or download + install MSD.EXE v2.13.

HINT: Try first to run MSD from outside the Windows GUI, in native/real/true/pure MS-DOS mode, by choosing to boot with the "Command prompt only" option from the Windows 95/98 Startup Menu:to see what lies under your PC's "hood".

When deciding which lines to use with UMBPCI's /I=xxxx-yyyy parameter, take the starting upper memory address from the left side of the lowest line and the end address from the right side of the highest line, as shown on your MSD free upper memory screen.

Your Windows 9x (typically installed in C:\WINDOWS) CONFIG.SYS file should look something like this, assuming the entire UMB area is contiguous and free:

DOS=HIGH,UMB
DEVICE=C:\WINDOWS\HIMEM.SYS /TESTMEM:OFF /Q
DEVICE=C:\UMBPCI\UMBPCI.SYS /I=C800-EFFF
DEVICEHIGH=...
INSTALLHIGH=...
SET=...
etc...

You •must• place HIMEM.SYS in CONFIG.SYS (using the DEVICE command), because UMBPCI.SYS is an extension to HIMEM.SYS. Windows 9x loads HIMEM.SYS automatically, but later in the sequence. Therefore HIMEM.SYS •must• be loaded BEFORE the UMBPCI.SYS line!

EMM386.EXE is no longer needed, unless you need Expanded Memory (EMS) for running DOS applications/games.
If you DO need EMS, you •must• reserve 64 KB of contiguous upper memory for the EMS Page Frame, and place the EMM386.EXE DEVICE line AFTER UMBPCI.SYS in your CONFIG.SYS.
Also, you •must• exclude the contiguous Upper Memory Region (UMR) used by EMM386.EXE's Page Frame from UMBPCI's /I=xxxx-yyyy range. This 64 KB area is located by default between addresses C800-D7FF. EMM386.EXE tries to place its Page Frame in this region upon loading. You can also force EMM386.EXE to "fit" its Page Frame into the C800-D7FF region by adding the Mx switch on the EMM386.EXE line (M3 in this case), ONLY IF this area is NOT used by ROM/BIOS. Example of such CONFIG.SYS lines, combining UMBPCI.SYS and EMM386.EXE to provide EMS, and to load ALL devices/TSRs "high" the same time:

DOS=HIGH,UMB
DEVICE=C:\WINDOWS\HIMEM.SYS /TESTMEM:OFF /Q
DEVICE=C:\UMBPCI\UMBPCI.SYS /I=D800-EFFF
DEVICE=C:\WINDOWS\EMM386.EXE X=D800-EFFF X=B800-C7FF I=C800-D7FF I=B000-B7FF RAM M3 D=256 AUTO
DEVICEHIGH=...
INSTALLHIGH=...
SET=...
etc...

If your VGA controller has a 48K Video BIOS area (e.g. NVidia GeForce/Quadro chipsets) you canNOT use C800-CBFF. In this case try:

DEVICE=C:\WINDOWS\HIMEM.SYS /TESTMEM:OFF /Q
DEVICE=C:\UMBPCI\UMBPCI.SYS /I=DC00-EFFF
DEVICE=C:\WINDOWS\EMM386.EXE X=DC00-EFFF X=B800-C7FF I=CC00-DBFF I=B000-B7FF RAM M3 D=256 AUTO

To become familiar with HIMEM.SYS and EMM386.EXE command line parameters:TIP: See also the HIMEM.SYS + EMM386.EXE related topics in MEMORY.TXT, REGIONS.TXT, EMM386.TXT + SECRETS.TXT, all part of my ©Tricks + Secrets files.

Alternatively you can load EMM386.EXE without a Page Frame by adding the "FRAME=NONE" parameter to your EMM386.EXE CONFIG.SYS line, while still providing EMS. Example:

DEVICE=C:\WINDOWS\EMM386.EXE FRAME=NONE X=D800-EFFF X=B800-C7FF I=C800-D7FF I=B000-B7FF RAM D=256 AUTO

But BEWARE of program errors, because older EMS DOS programs were not designed to work properly WITHOUT a Page Frame.

Another method is to reserve the 64 KB Page Frame area and let Windows 9x/ME GUI provide EMS in its DOS boxes/sessions. This SYSTEM.INI [386enh] section line:

[386enh]
EMMPageFrame=C800

does the trick, provided that the 64 KB upper memory region at C800-D7FF is CONTIGUOUS and FREE (unused) when Windows 9x/ME starts, and that EMM386.EXE (or ANY other memory manager besides HIMEM.SYS) does NOT load from CONFIG.SYS.
Note that EMM386.EXE settings in CONFIG.SYS take precedence over the SYSTEM.INI lines. If EMM386.EXE is set to provide expanded memory (EMS), with the "RAM" or "HIGHSCAN" switch in CONFIG.SYS, the SYSTEM.INI line above has NO effect.
Use this workaround ONLY IF you have ANY DOS based programs/games that need EMS to run in a DOS box/session.

Alternatively you can disable the Windows 9x/ME search for free (unused) RAM in the UMA, by adding/changing this line under the [386enh] section of your SYSTEM.INI, to avoid incompatibilities with DOS mode drivers/TSRs or/and 3rd party upper/extended/expanded memory managers loaded from your startup files (CONFIG.SYS and AUTOEXEC.BAT):

[386enh]
EMMExclude=A000-FFFF

TIP: For more SYSTEM.INI settings dedicated to fine tune your Windows machine for optimal performance, see my "SYSTEM.INI TWEAKS" article.

Back 2 Contents

Additional OS Compatibility

  Beginning with v3.00 UMBPCI is compatible with FreeDOS, Lineo DR-DOS, Novell DOS and Caldera Open DOS.

When UMBPCI doesn't find an XMS driver (i.e. HIMEM.SYS or FDXMS.SYS), it only enables (maps) the upper memory and ends.

DR-DOS users: HIDOS.SYS can create UMBs from this memory afterwards (example):

DEVICE=C:\UMBPCI\UMBPCI.SYS
DEVICE=C:\DRDOS\HIMEM.SYS /CHIPSET=RAM /USE=C800-EFFF

The /USE parameter should enable the same areas UMBPCI reports when it loads. Best to test it beforehand with UMBCHK.

FreeDOS users may find these CONFIG.SYS lines helpful (example):

DEVICE=C:\FREEDOS\BIN\FDXMS.SYS
DEVICE=C:\FREEDOS\BIN\UMBPCI.SYS
DOS=HIGH,UMB,CLAIMINIT
SHELLHIGH=C:\COMMAND.COM /E:512 /P

Back 2 Contents

Fast Video

FastVid | MTRRLFBE | VESAMTRR

FastVid

  FastVid.exe: UMBPCI.SYS is the ideal Memory Manager when using FastVid to maximize your PCI/AGP Video performance, only on Intel Pentium Pro, Pentium II, III, IV, Celeron and Xeon class CPUs.

FastVid v1.10 PCI/AGP DOS Video accelerator [1.26 MB, free(ware)] is a native/real/true/pure DOS/MS-DOS mode tool.

FastVid enables the Write Posting (WP), Banked VGA Write Combining (BVGAWC) and Linear Frame Buffer Write Combining (LFBWC) modes in the BIOS for ALL PCI/AGP video cards in DOS/MS-DOS 5/6/7/8 and Windows 3.1x/95/98/ME.
Does not use any memory.
More info.
Original FastGraphics FASTVID page (archived).

    FastVid 1.10 FASTVID files (can be used only in native/real/true/pure DOS/MS-DOS mode):

    FastVid 1.10 ZIP archive also contains (•must• read respective text/help documents included with each program!):

Run FastVid for the first time without ANY parameters, only from the native/real/true/pure DOS/MS-DOS mode. It will configure itself for your primary PCI/AGP video controller. All you have to do is answer Yes (type Y) or No (type N) to FASTVID step-by-step questions. After that, just add the suggested FASTVID line to your AUTOEXEC.BAT file (found in C:\ root), to reload its settings every time you reboot.
Edit your AUTOEXEC.BAT using EDIT in DOS or Notepad in Windows.
Backup original file first.

These are my FastVid AUTOEXEC.BAT command lines (examples), using these 2D+3D primary video adapters:

FastVid works with all PCI + AGP video cards I know of, but I did not test any newer PCI-X (PCI Express) controllers.

    IMPORTANT:

MTRRLFBE

  MTRRLFBE.EXE: Another similar tool is MTRRLFBE.EXE v1.3 [54 KB, freeware] = see RayeR's Programming page for details.
Run MTRRLFBE by itself from any DOS prompt to view its command line parameters. Then either run desired command(s) only from native/real/true/pure DOS/MS-DOS (examples):
Enable LFB WC (Linear Frame Buffer Write Combining):

MTRRLFBE LFB WC

Enable VGA WC (Banked VGA Write Combining):

MTRRLFBE VGA WC

or add desired line(s) above to your AUTOEXEC.BAT file (found in C:\ root).
Edit your AUTOEXEC.BAT using EDIT in DOS or Notepad in Windows.
Backup original file first.

Same as FastVid, MTRRLFBE does not occupy any memory.

    IMPORTANT:
    MTRRLFBE (starting with version 1.3) is compatible with Microsoft EMM386.EXE and most other 3rd party upper/expanded/extended memory managers (not tested): Quarterdeck QEMM386.SYS, Helix NetRoom RM386.EXE, Lineo (Caldera) DR-DOS EMM386.EXE, Qualitas 386MAX.SYS etc.
    In case you would like to use some of these memory managers, please see MEMORY.TXT, part of W95-11D (freeware).
    In case you would like to use UMBPCI.SYS, please see the UMBPCI Guide.

VESAMTRR

  VESAMTRR.EXE: Another useful tool for native/real/true/pure DOS/MS-DOS is VESAMTRR.EXE v1.3, available as part of HDPMI GUI (HXGUI) (free), a real-mode emulator interface which loads in memory additional binaries for running simple Win32 GUI (Graphical User Interface) applications + games from native DOS, while using HDPMI Server (HXRT) DOS extender (free).
VESAMTRR does this by setting a MTRR for VESA LFB to memory type 01 (WC) on Intel Pentium Pro, Pentium II, III, IV, Celeron and Xeon class CPUs.

    More VESA/VBE/VGA drivers + tools [free(ware)]:

TIP: To learn how to properly manage, optimize and MAXimize your DOS memory resources (conventional, upper, extended and expanded), see MEMORY.TXT, REGIONS.TXT + EMM386.TXT, all part of my ©Tricks + Secrets files [freeware].

Back 2 Contents

Back!