UMBPCI V3.85 - c't magazine's hardware-UMB-driver for DOS and Win95/98

  This page is available in German language too
 
  Introduction
 
UMBPCI is a hardware-UMB-driver for DOS and Win95/98. Windows ME ignores the CONFIG.SYS, so there is no chance to load UMBPCI.SYS except you reactivate the CONFIG.SYS with a patch.

UMBPCI is a hardware specific UMB driver with some limitations and problems, so don't use it without a good reason, especially not on boot disk which shall work on many different computers.

UMBPCI extends the HIMEM.SYS of DOS or Win95/98 by the function 'Request XMS UMB' (These are the 160 Bytes which stay in memory). That's the same thing that EMM386 does, if you load it with the parameter 'noems' or 'ram'. 

UMBPCI makes UMBs from disabled memory that is intended as Shadow-RAM. UMBPCI enables this memory and disables its write protection.
It needs only 160 Bytes of low memory, that's all!
EMM386 works on all machines with 386 cpu or higher and provides usually more UMBs than UMBPCI but it creates the UMBs from the computer's physical XMS (eXtended Memory Specifications) by virtually remapping XMS to the upper memory area using the Memory Management Unit (MMU) of 386 and higher CPUs. It needs an additional 150 KB of XMS, 4 KB of low memory and 7 KB of UMA (Upper Memory Area) when loaded, and it also switches the CPU into "protected mode" (slower) because it's necessary to use the MMU. DOS then runs in virtual 8086 machine (V86 mode):

Diagramm mit Speichernutzung und INT-8-Latecy
Diagramm by Ralf Buschmann

UMBPCI is chipset dependent and brings several restrictions. Don't use it without a good reason, especially not on boot media which shall work on several different computers.

Some information about protected mode:
http://www.deinmeister.de/x86modes.htm

UMBPCI can only use the range C800-EFFF but NOT B000-B7FF. This range is normally reserved for monochrome text graphics and not for BIOS extensions, so the chipsets are not able to enable shadow RAM there which UMBPCI could use.

Because the memory UMBPCI uses is intended as shadow RAM and not as normal RAM there are several problems:
Suspend to disk usually doesn't work because the UMBs aren't saved and restored.
ISA-DMA may not work, the L2-Cache may be write protected or it simply doesn't work...

As I said ISA-DMA is critical in the created UMBs, so SMARTDRV's floppy cache may not work if it is loaded high. Read the instructions for additional information! 
To check if ISA-DMA works there is DMACHK.COM (thanks to Heiko Nocon). To use it you must be in pure DOS (without EMM386) and UMBPCI must be loaded. But there is no need to load UMBPCI thru the CONFIG.SYS. You can use CTLOAD to load UMBPCI.SYS from the DOS prompt. Then nothing is loaded high but the memory is enabled and DMACHK can test it safely. It shows in which ranges ISA-DMA works. The program is within the UMBPCI.ZIP. On some machines it crashes... CTLOAD doesn't work with Windows ME. Here you can use LOADSYS or DEVLOAD instead.

Read the READ.ME for details!

When you use UMBPCI on a bootdisk you should use only ranges that can handle ISA-DMA. E.g. on most Intel chipsets of the 400 series (430xX, 440xX) you should load it with /I=E000-EFFF, on chipsets that cannot handle ISA-DMA in the UMBs you should not use UMBPCI on bootdisks.

To visualize the memory allocation of DOS the MEM command is certainly not prime quality. I suggest MI_E.ZIP (MI stands for Memory Information I think).

Win9x takes all remaining UMBs and uses them as normal memory. But as you just read the memory created by UMBPCI is often not normal. It may be not cacheable or ISA-DMA or PCI busmastering may not work.
PCI busmastering doesn't work on AMD K7/K8 computers. So you cannot load high drivers or programs from a harddisk that uses busmastering which is usually the case if it is plugged onto a PCI IDE controller, e.g. from Promise, Silicon Image, Highpoint and others. You can fix this sometimes by setting DoubleBuffer=1 in the MSDOS.SYS of Windows 95 and higher.

On AMD K7/K8 you should not load high drivers of PCI network cards.
To avoid Win9x using this critical memory I made the new program UMBFILL. It allocates all remaining UMBs. Put it to the end of your AUTOEXEC.BAT. Caution: LOADHIGH and LH don't work with UMBFILL. To load it high use UMBFILLH instead.

Another way to prevent Win95 from taking all remaining UMBs is to add the line LocalLoadHigh=0 to your SYSTEM.INI section [386enh].
Then Win9x takes only a small part of the UMBs which should be uncritical, but I have no reliable information about this.

On chipsets with non-cacheable UMBs you should force the DOS buffers into low memory because they can slow down Win9x. Set DOS=high, umb, noauto in your CONFIG.SYS and load IFSHLP.SYS there in addition to HIMEM.SYS.

 

  Chipsets and their known problems in the UMBs
 
AMDs K7, K8 and K10 CPUs (all Athlons, Durons, Semprons, Opterons, Phenoms) and the Intel Core i3, i5, i7 and newer Xeon CPUs control the Shadow-RAM chipset independent. Therefore they are not listed separately in the table.

This list is no more updated since about 2004.

AMD K7, K8 CPUs (all Athlons, Durons, Semprons, Opterons) no ISA-DMA, no PCI busmastering (try to set DoubleBuffer=1 in the MSDOS.SYS and don't load high drivers of PCI network cards) Intel Core i3, i5, i7 CPUs no feedback yet
Intel
Saturn, Mercury, Neptune
430xX, 440xX
420EX, 4x0MX, 450xX
810
815, 820, 840, 845xx, 855,
850, 860, 865, 875, 750x, 9xx
 
no problems
ISA-DMA only in E-Segment
no ISA-DMA
no ISA-DMA
no problems
untested
VIA up to VP2/97
VIA VP3, MVP3, MVP4
VIA Pro Series
VIA P4X266, P4M266, P4N266,
P4X333, P4N333, P4X600
not cacheable, no ISA-DMA
not cacheable
no problems
no problems
 
ALI II, III, IV, V
ALI Pro2
 
not cacheable
ISA-DMA untested
SiS 591/592/597
SiS other Socket7
SiS Pentium2
SiS Pentium4
not cacheable
not cacheable, ISA-DMA untested
ISA-DMA untested
untested

Generally it seems that UMBPCI doesn't work on 486 class computers even they have a PCI chipset. That's because their PCI BIOS doesn't support read and write access to the PCI configuration registers.

 

  Testing
 
For a quick test if UMBPCI works on a computer, you can load it from the command line by means of the tool CTLOAD.
Of cousre in plain DOS and without EMM386 loaded.

 

  News
 
V2.18 
- support for SiS530 (untested) 
V2.19 
 - support for VIA 691 "Apollo Pro" and 693 "Pro Plus" (untested) 
V2.20
- support for Ali Aladdin V
- support for Ali Aladdin III, IV and Pro2  - (untested) 
V2.21
- support for Intel 810 (untested) 
- UMBs not longer cacheable on SiS 59x
V2.22
- support for new VIA MVP3 with southbridge 596 - (buggy) 
V2.24
- VIA MVP3 with southbridge 596 works now

V3.00
- autoscan for free ranges, parameter no longer needed
- memory is enabled when no HIMEM is found (for DR-DOS and HIRAM)
V3.01
- break with invitation for feedback on untested chipsets
V3.02
- Support for SiS 600 and 620 - (untested)
V3.03
- UMBs not longer cacheable on ALi III and ALi IV
V3.04
- i440BX/ZX not longer marked as 'untested' - was by mistake in V3.03
V3.05
- ALi III and IV tested (Thanks to Robert Riebisch)
V3.06
- Bugfix: When UMBPCI is loaded before HIMEM it removes from memory
  (Thanks to M. Eckel)
V3.07
- ALi III and IV tested (Thanks to Stuart Dunlop)
V3.08
- SiS 600 tested
V3.09
- SiS 620 tested (Thanks to Robert Riebisch)
V3.10
- SiS 530 tested
V3.11
- Intel 820, 840 (all untested, probably no ISA-DMA)
- Intel 440MX (untested, no ISA-DMA)
V3.12
- VIA MVP4 (untested), VIA KX133  (doesn't work)
V3.13
- VIA KX133 removed - didn't work
V3.14
- VIA MVP4 tested
V3.15
- Intel 810 DC100 tested
V3.16
- identifies some VIA P2 chipsets correct so it can activate the cache for the UMBs
- Shows vendor and device ID if chipset is unknown
V3.17 
- support for SiS540 (untested)
V3.18
- Intel Neptune with EISA-Bridge (no ISA-DMA) (Thanks to Bernd Krueger-Knauber)
- Intel 815 (untested)
- better feedback on unsupported chipsets
V3.19
- VIA Apollo PM601 and PM133 (untested)
- unknown VIA chipsets not longer found as 'MVP3+'
- better feedback on non PCI chipsets
V3.20
- VIA Apollo PM601 and PM133 tested (Thanks to and Charles Wright)
V3.21
- Intel 815 tested, ISA DMA works (Thanks to Robert Riebisch)
V3.22
- Intel 810E (tested)
V3.23
- Intel 820 with different device ID (untested)
V3.24
- SiS 630 tested (Thanks to Matjaz Pavel)
V3.25
- exdended list of unsupported chipsets
V3.26
- Intel 820 tested, ISA DMA works (thanks to Marco Terno)
V3.27
- Intel 440MX tested
V3.28
- Intel 810 and 815 with different device IDs (untested partwise)
V3.29
- Intel 850 (untested)
V3.30
- VIA MVP3 with device ID 597h and south bridge 686
V3.31
- extended list of unsupported chipsets
V3.32
- Intel 845 (untested)
V3.33
- Intel 850 tested (thanks to Dirk Reetz)
V3.34
- Intel 845 tested (was by a wrong report, it didn't work)
V3.35
- Intel 845 works now and its tested incl. ISA DMA (thanks to Michael A. Shiels)
- Intel 830MP (untested but should work)
V3.36
- Intel 830MP tested, ISA-DMA ok, DMACHK hangs (thanks to Niklas Andersson)
V3.37
- VIA Apollo Pro with Southbridge 586A tested (thanks to Danijel Mehic)
- extended list of unsupported chipsets
V3.38
- Intel 860 tested (thanks to Gary Zinn)
- extended list of unsupported chipsets
V3.39
- VIA P4X266 and P4M266 (untested)
V3.40
- SiS 645 tested (thanks to John Richardson)
V3.41
- Intel 845G tested (thanks to Roland Zauner)
V3.42
- not released
V3.43
-ALi Aladdin II, tested (thanks to Robert Riebisch and Jack Liu)
-ALi Aladdin Pro V (untested), (thanks to Jack Liu)
-SiS 645DX
V3.44
- extended list of unsupported chipsets
V3.45
- VIA MVP3 with device ID 597h and south bridge 686 (now really...)
V3.47
- Intel E7201, E7205
- Intel 852GM, 855GM, 855PM, 875P (all untested)
- extended list of unsupported chipsets
V3.48
- Intel 865G/865P
- VIA P4X266
V3.49
- VIA P4N266, P4X333, P4N333, P4X600
- SiS 651
V3.50
- all AMD K7 and K8 CPUs (Athlons, Durons, Opterons);
   many thanks to Sergei Shtylyov and Serg Svetlov;
   Sergei wrote me in 2001 how it works but I didn't belive it :-(
   Serg sent me the program code that make me belive :-)
V3.51
- Intel 855xx tested
V3.53
- Intel E7500 (tested)
- VIA Apollo PLE133 (tested)
- SiS660,661,662,663 (untested, strange reports: RAM there but no UMBs...)
- extended list of unsupported chipsets
- new version of DMACHK (doesn't freeze anymore)
V3.54a
- works with VMware on AMD K7 (VMware always simulates an Intel chipset)
V3.55
- Intel 848P
V3.56
- used memory reduced from 240 to 208 Bytes
   (as with versions before 3.0 - thanks to Nagatoshi Uehara)
V3.60
- 4K blocks instead of 16K blocks on AMD K7+K8 CPUs
   thanks to Nagatoshi Uehara - he found the crucial bug of the 3.57betas
- used memory reduced to 160 Bytes - thanks again to Nagatoshi Uehara
- Intel 915, 925
V3.61
- internal bug (RAM initialisation) fixed - thanks to Nagatoshi Uehara
V3.62
- bug when loaded without HIMEM.SYS fixed - thanks to Robert Riebisch
- VIA EPIA-M tested - thanks to Zig Burak
V3.63
- i430FX works again
V3.64
- search for free areas more strict: only areas filled with FFh are used
- Intel 915GM, 7520, 7350
- VIA PT880, PM880
- SIS 655
- extended list of unsupported chipsets
V3.65
- Intel 945
- extended list of unsupported chipsets
V3.66
- Paramter /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)
V3.67
- Intel 975
- extended list of unsupported chipsets
V3.70
- puts an UMB table into the upper memory for QXHIMEM when no HIMEM found
- chipset detection routine changed
- Intel 965
V3.71
- Intel 946, 965M
- extended list of unsupported chipsets
V3.72
- Intel G/P 31, 33, 35
V3.73
- some ALi chipset no more 'untested'
V3.74
- Intel 945GME
- Intel Q33, Q35, 3100 (may not work because of trusted platform stuff - TPM)
V3.75
- Intel X38
V3.76
- Intel 4 series
V3.77
- SiS 671
V3.78
- Intel GM45
V3.79
- Intel Q4 Series
- extended list of unsupported chipsets
V3.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 systems.
V3.81
- extended list of unsupported chipsets
V3.83
- Intel 5400, 7300
- VIA CX700, VX800, VX820, VX855, VX875, VX900
- maybe some Core i3/i5/i7 CPUs
V3.84
- Intel Core 3rd Gen CPUs
V3.85
- Intel Core 4th Gen CPUs

 

  Conditions and Download

The original version came from the german magazine c't, but there were several problems and no free updates. This version is based upon the source-code published by c't in 1995 which supported only intel chipsets up to the 430FX.

It's Freeware.

Download:
http://www.uwe-sieber.de/files/umbpci_e.zip

Source code (TASM 3.x) is available on request.

It's not desired that copies of it are offered for download at other sites to avoid that uses download old versions. If you want to include UMBPCI into a package of any kind, please ensure that it is always the latest version.

Especially I don't want UMBPCI included in boot CDs made avallable for download.
 


  Links
 
UMBs for 486's These programs are similar to UMBPCI but made for 486 and Pentium 1 class computers. Parts of DOSMAX and HIRAM may be useful for use with UMBPCI.

I'm not the author!
DOSMAX
HiRAM   HiRam Sources
URAM
   URAM Sources1
 URAM Sources2
RDOSUMB



Counter since 02/1998



last change: 24 June 2013

Uwe Sieber

Home: http://www.uwe-sieber.de/english.html