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 is a FREEware MS-DOS 5/6/7/8, FreeDOS, DR-DOS/OpenDOS, 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:
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.
New supported
chipsets + UMBPCI.SYS version updates:
3.90:
Intel 7th Gen
SiS550
3.89: Intel XEON E3-1200 family3.88: Intel 430VX with PIIX2 (for
PCem)3.87: Intel Core 6th Gen CPUs3.86: More Intel Core Mobile 4th Gen CPUs3.85: Intel Core 4th Gen CPUs3.84: Intel Core 3rd Gen
CPUs3.83:
Intel 5400, 7300
VIA CX700, VX800, VX820, VX855, VX875, VX900
maybe some Core i3/i5/i7 CPUs
3.81: extended list of unsupported
chipsets3.80: Intel X58 marked as unsupported because the memory controller is now in the Core i7 CPU; I need information about how to deal with the Core i7; The PCI devices for configuring the memory
controller which the Core i7 is documented to expose are not seen on real live systems3.79:
Intel Q33, Q35, 3100 (may not work because of trusted
platform stuff - TPM)
3.73: tested some ALi chipsets3.72: Intel G/P 31, 33 + 353.71:
Intel 946, 965M
extended list of unsupported
chipsets
3.70:
adds an UMB table into upper memory for XMGR [free, open source] when no HIMEM found
chipset detection routine changed
Intel
965
3.67:
Intel 975
extended list of unsupported chipsets
3.66:
Parameter /S to skip the "unknown chipset" break
Intel
945GM, 955
Intel 7210, 7221, 7230, 7525
Some VIA P4 chipsets (untested, may not work)
SiS 656
ALi i1 CyberBlade (untested)
ALi M1644
(untested)
3.65:
Intel 945
extended list of unsupported
chipsets
3.64:
scan for free areas accepts only ranges filled with FFh
Intel
915GM, 7520, 7350
VIA PT880, PM880
SIS 655
extended list of unsupported chipsets
3.63: Intel 430FX
works again3.62:
Fixed loading without HIMEM.SYS bug (thanks to Robert
Riebisch)
VIA EPIA-M tested (thanks to Zig Burak)
3.61: Internal RAM initialization bug
fixed3.60:
Reduced resident memory usage from 208 to 160 Bytes (thanks to Nagatoshi
Uehara)
4K blocks on AMD K7/K8 instead of 16K blocks
Intel 915 + 925 support
3.56: Reduced resident
memory usage from 240 to 208 Bytes (thanks to Nagatoshi Uehara)3.55: Intel 848P3.54: Works with VMware
on AMD K7/K8 (VMware always simulates an Intel chipset)3.53:
Intel E7500
tested
VIA Apollo PLE133 tested
SiS 660, 661, 662 + 663 (untested, strange reports: RAM available but no
UMBs)
Extended list of unsupported chipsets
New DMACHK version (does not freeze anymore)
3.51: Intel
855xX tested3.50: All AMD K7 and K8 CPUs (work chipset independent): Athlons, Durons, Opterons (thanks to Sergei
Shtylyov and Serg Svetlov)3.49:
VIA P4N266, P4X333, P4N333, P4X600
SiS
651
3.48:
Intel 865G/865P
VIA P4X266 tested
3.47:
Intel E7201, E7205
Intel 852GM, 855GM, 855PM, 875P (all untested)
Extended list of unsupported
chipsets
3.45: Extended list of unsupported chipsets3.44: VIA MVP3 with device ID 597h and south
bridge 6863.43:
ALi Aladdin II tested (thanks to Robert Riebisch and Jack Liu)
ALi
Aladdin Pro V (untested) (thanks to Jack Liu)
SiS 645DX
3.41: Intel 845G tested (thanks to Roland
Zauner)3.40: SiS 645 tested (thanks to John Richardson)3.39: VIA P4X266 and P4M266
(untested)3.38:
Intel 860 tested
(thanks to Gary Zinn)
Extended list of unsupported chipsets
3.37:
VIA Apollo Pro
with South bridge 586A tested (thanks to Danijel Mehic)
Extended list of unsupported chipsets
3.36: Intel
830MP tested, ISA DMA OK, DMACHK hangs (thanks to Niklas Andersson)3.35:
Intel 845 works and tested including ISA DMA (thanks to Michael A.
Shiels)
Intel 830MP (not tested but should work)
3.34: Intel 845 tested (wrong report, didn't
work)3.33: Intel 850 tested (thanks to Dirk Reetz)3.32: Intel 845 (not tested)3.31: Extended
list of unsupported chipsets3.30: VIA MVP3 with device ID 597h and south bridge 6863.29: Intel 850 (not
tested)3.28: Intel 810 and 815 with different device IDs (partially untested)3.27: Intel 440MX
tested3.26: Intel 820 tested, ISA DMA works (thanks to Marco Terno)3.25: exdended list of unsupported
chipsets3.24: SiS 630 tested (thanks to Matjaz Pavel)3.23: Intel 820 with different device ID (not
tested)3.22: Intel 810E tested3.21: Intel 815 tested, ISA DMA works (thanks to Robert
Riebisch)3.20: VIA Apollo PM601 and PM133 tested (thanks to Charles Wright)3.19:
VIA Apollo PM601 and PM133 (not tested)
unknown VIA chipsets no longer found as MVP3+
better feedback
on non-PCI chipsets
3.18:
Intel 430NX Neptune with EISA Bridge (no ISA DMA) (thanks
to Bernd Krueger-Knauber)
Intel 815 (not tested)
better feedback on unsupported chipsets
3.17: SiS 540
(not tested)3.16:
Identifies some VIA P2 chipsets correctly so it can activate the
cache for the UMBs
Shows vendor and device ID if chipset is unknown
3.15: Intel 810 DC-100
tested3.14: VIA MVP4 tested3.12: VIA MVP4 (not tested), VIA KX133 (doesn't work)3.13: VIA
KX133 removed (didn't work)3.10: SiS 530 tested3.11: Intel 820, 840, 440MX (all untested, no ISA
DMA)3.08: SiS 600 tested3.09: SiS 620 tested, no ISA DMA at E000-EFFF3.07: ALi Pro 2 tested
(thanks to Stuart Dunlop)3.06: bug fixed: unloads from memory if loaded before HIMEM.SYS (thanks to Martin
Eckel)3.05: ALi III and IV tested (thanks to Robert Riebisch)3.04: i440BX/ZX no longer marked as
"untested" (was by mistake in v3.03)3.03: UMBs no longer cacheable on ALi III and IV3.02: SiS 600 and
620 (not tested)3.01: Break pause with invitation for feedback on untested chipsets3.00:
Autoscans for free upper memory ranges
/I=xxxx-yyyy parameter no longer needed
Upper memory enabled
even if HIMEM.SYS not found (useful for DR-DOS/OpenDOS, Novell DOS and HIRAM.SYS only)
2.24: VIA MVP3 596
with southbridge (works now)2.22: VIA MVP3 596 with southbridge (was buggy)2.21: Intel 810. UMBs no
longer cacheable on SiS 59x2.20: ALi Alladin III, IV, V and Pro 2 (not tested)2.19: FIC VIA 691 "Apollo
Pro" and 693 "Pro Plus" (not tested)2.18: SiS 530 (not tested)2.17: Intel 440ZX (not
tested)
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:
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].
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:
Using a real mode UMA driver
like UMBPCI.SYS.
The UMA on your chipset is NOT capable of DMA transfers: see "Known Chipset Problems" for details.
Loading DOSLFN or a disk cache program (e.g. SMARTDRV.EXE) high into
the UMBs.
Accessing floppy disks (NOT LS-120 drives!) in real MS-DOS mode.
Loading UMBPCI.SYS from a bootable floppy disk.
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.SYSLOWDMA 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-EFFFUMBPCI'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.TXTDMACHK 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.TXTCTLOAD.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=0under 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 UMBFILLHThanks to Serg Svetlov
for UMBFILLH.EXE.
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]:
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 XDVD2.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.
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!
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.
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.
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.
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.
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
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):
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 /LThis 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 /Nto 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\XDVD2.SYS /D:MYCDROMIn 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: XDVD2.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 /Nto 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-EFFFThen 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 /NThis 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-EFFFwhich 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.
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!
HIRAM.EXEv1.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 /QTIP: 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
UMBPCIGuess what..."UMBPCI is not currently in memory."Wow! ;-)Similar DOS
memory tools (freeware):
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 AUTOWindows 9x/ME
users:; DEVICE=C:\WINDOWS\EMM386.EXE I=B000-B7FF RAM D=256 AUTOIf 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.
MSD.EXE
v2.14 is located on the Win98/98 SE(U)/ME Setup CD-ROM in the \TOOLS\OLDMSDOS folder.
MSD.EXE v2.13 is
located on the Win95/OSR1/OSR2 Setup CD-ROM in the \OTHER\MSD folder.
MSD.EXE v2.11 (MS-DOS 6.00/6.20/6.21/6.22
users) is located in your DOS directory (default is C:\MSDOS or C:\DOS). If you can't find it, extract it (using
EXPAND.EXE) from your MS-DOS 6.xx SETUP floppies, and place it into your DOS directory.
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:
Option 5 on Win9x machines without Networking or/and TCP/IP installed, or
Option 6 on Win9x
Networked systems and/or TCP/IP enabled,
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 AUTOTo
become familiar with HIMEM.SYS and EMM386.EXE command line parameters:
Windows 9x/ME users: use
Notepad to read the "HIMEM.SYS" and "EMM386.EXE" topics in MSDOSDRV.TXT, a text file located in your Windows
folder.
MS-DOS 6.xx users: run these commands from any DOS prompt: HELP HIMEM.SYS and
then: HELP EMM386.EXE and read the related topics.
Beginning with v3.00 UMBPCI is compatible with FreeDOS, Lineo DR-DOS, DR-DOS/OpenDOS, 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-EFFFThe /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
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.EXE = Main executable.
Read FASTVID.TXT, and then see details further below.
FINDLFB.EXE = Finds and displays the LFB (if any) RAM address.
VSPEED.EXE = Benchmark tool used to test
FASTVID. Similar benchmark @ c't Magazine: ctcm17a.zip [98 KB, German].
FAQ.TXT = Please see the FASTVID FAQ, it may help.
FASTVID.TXT = FASTVID manual: must read it to learn how to use FASTVID.EXE.
INSTALL.TXT = FASTVID installation guidelines.
VSPEED.TXT = VSPEED.EXE brief manual.
FastVid 1.10 ZIP archive also
contains (must read respective text/help documents included with each program!):
6X86OPT.ZIP = 6x86opt v0.78 for DOS (nag shareware).
BOOTHD.ZIP = BootHD v1.01 for Windows NT4/2000/XP/2003 (freeware). Recommended: use
together with DirectNT (see below).
CTPPRO.ZIP = ctppro V1.1/A for DOS (freeware). Also here
and here [17 KB].
CTU.ZIP = CTU (Central Tweak Utility) v0.8 for AMD K6 series CPUs for Windows 95/98/ME + DOS (freeware) [196 KB].
Home page.
DIRECTNT.ZIP = DirectNT v1.00 for Windows
NT4/2000/XP/2003 (free). Also here [96 KB]. Recommended: use together with BootHD (see above).
K6DOSSYS.ZIP = K6DOS.SYS v1.0
CONFIG.SYS Driver for AMD K62+ + AMD K63+ series CPUs for DOS (freeware) [3 KB].
K6SPDLUX.ZIP = K6SPEED v1.0 for AMD K62+ + AMD K63+ series CPUs for Linux (freeware) [7 KB]. Home page.
K6SPEED.ZIP = K6SPEED v0.87 for AMD K62+ + AMD K63+ series CPUs for Windows
95/98/ME + NT4/2000/XP/2003 (freeware) [20 KB].
MTRRLFBE.ZIP = MTRRLFBE.EXE v1.3 for DOS (freeware). Also here [54 KB]. Home page.
OS2.ZIP = fstorion v1.0 for OS/2 (freeware).
S3SPDUP.ZIP = S3
Speed Up v3.11 for DOS (freeware).
WAMO2057.ZIP = Write Allocate Monitor II v0.57 for AMD K5 (Step 4) + AMD K6 series CPUs for Windows 95/98/ME + NT4/2000/XP/2003 (freeware) [500 KB]. Home page
(Japanese).
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:
Adjust these BIOS settings in your CHIPSET FEATURES SETUP/Advanced Chipset Features Menu (or similar) for FastVid to work properly:
DECREASEAGP
Aperture/Memory Size/Range to MINIMUM (usually 4 MB), if you have an AGP motherboard and if your (primary) video controller is PCI based!
ENABLEVideo RAM Cacheable for MAXimum FastVid speed in
native/real/true/pure DOS/MS-DOS! Note however, that enabling Video RAM Cacheable attracts slower Windows 9x/ME DirectX/Direct3D video speed (especially if using a newer PCI/AGP video controller), and decreases
slightly overall CPU performance, by dedicating 64 KB of Level 2 cache (only 128 - 512 KB on Pentium II/III/IV and Celeron CPUs) to video buffering. See TechArp: Video RAM Cacheable (WinNTx OSes) + Adrian Rojak's
Pot: Video RAM Caching (Win9x OSes) for more info.
DISABLEPCI/VGA Palette Snoop if NOT using a pass-through DVD/MPEG/Video Editing add-in card!
DISABLEBanked VGA Write Combining (BVGAWC)
FastVid feature on PCI/AGP video cards powered by 3dfx, ATI or NVidia chipsets, to avoid garbled screens IF USING ANY graphical VGA DOS programs/games in 640x480 resolution!
Run FastVid without command line parameters from
the native/real/true/pure DOS/MS-DOS prompt to redetect the PROPER settings EVERY TIME after:
Upgrading, changing or moving your video card to a different (PCI) slot.
Changing the AGP
Aperture/Memory Size/Range BIOS setting (see above), if using an AGP video controller.
Flashing/upgrading your motherboard/video card (ROM) BIOS to a new release.
FastVid is NOT COMPATIBLE with Microsoft EMM386.EXE or ANY other 3rd party upper/expanded/extended memory managers: Quarterdeck QEMM386.SYS, Helix NetRoom RM386.EXE, Lineo
(Caldera) DR-DOS EMM386.EXE, Qualitas 386MAX.SYS etc. Therefore you must use HIMEM.SYS by itself in your CONFIG.SYS [without upper memory support :(], or BETTER, install UMBPCI.SYS, to provide
access to the Upper Memory Area (UMA) and load ALL your devices/drivers/TSRs "high"!
Owners of Intel 440BX/440GX/8xx/9xx Pentium II/III/IV motherboards do NOT need to activate FastVid Write Posting (WP) function,
because it is already ENABLED into these chipsets. In case FastVid displays something like this:Write Posting UNKNOWN (xxxxxxxx)whenever trying to enable Write Posting
(WP), your motherboard chipset already has some of FastVid functions built-in. Such FastVid error can be safely ignored because motherboard chipset functions take precedence, and most of them cannot (and should not) be disabled
from BIOS Setup.
If you do not see any vertical stripes covering your entire screen in native/real/true/pure DOS/MS-DOS mode, you can safely disable the vertical stripe fix, by removing the minus sign
(−) in front of the video memory number. Example with vertical stripe setting enabled:C:\3D\FASTVID.EXE
1X1 −128 C0000000Same example with vertical stripe setting disabled:C:\3D\FASTVID.EXE 1X1 128
C0000000
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 WCEnable VGA WC (Banked
VGA Write Combining):MTRRLFBE VGA WCor 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)]: