UMBPCI V3.85 - Weiterentwickelter Hardware-UMB-Treiber vom c't Magazin

Home

 English Version of this page
 
  Einstieg
 
UMBPCI.SYS ist ein Upper-Memory-Treiber, und damit ein teilweiser Ersatz für EMM386. UMBPCI funktioniert unter MS-DOS ab Version 5.0, also auch mit dem DOS 7.x das unter Windows 95 und 98 liegt.
Da Windows ME die CONFIG.SYS ignoriert wenn es nicht von Diskette gebootet wird, kann UMBPCI hier erst gar nicht geladen werden, es sei denn, man reaktiviert die CONFIG.SYS mit einem Patch.
Windows XP basiert nicht auf MS-DOS - UMBPCI hat hier ausgedient.

UMBPCI erweitert den XMS-Treiber HIMEM.SYS um die Funktion 'Request XMS-UMB' (Das sind die 160 Bytes die im Speicher bleiben). Das ist genau das, was EMM386 macht, wenn er mit dem Parameter 'RAM' oder 'NOEMS' geladen wird.

UMBPCI 'mißbraucht' für die UMBs Speicher, der für's Shadow-RAM gedacht und normalerweise abgeschaltet ist, also brachliegt. Er selbst belegt nur o.g. 160 Bytes - das ist alles.
EMM386 holt sich den Speicher für die UMBs dagegen vom Exteded Memory, braucht selbst noch gut 150K XMS, 4K unteren DOS-Speicher, sowie 7K UMBs und schaltet die CPU in den Protected Mode, um die Memory Management Unit (MMU) der >386-CPUs benutzten zu können:

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

UMBPCI ist abhängig vom Chipsatz bzw. der CPU des Rechners und bringt etliche Einschränkung mit sich. Ohne Not oder akute Langeweile sollte man UMBPCI nicht einsetzen, schon gar nicht auf Boot-Medien, die auf verschiedenen Rechnern funktionieren sollen.

UMBPCI kann nur den Bereich C800-EFFF nutzen, jedoch NICHT B000-B7FF, weil in diesem Bereich keine ROMs vorgesehen sind und die Chipsätze deshalb dort kein Shadow-RAM anbieten.

Da der von UMBPCI nutzbar gemachte Speicher als Shadow-RAM und nicht für UMBs gedacht ist, gibt es hier verschiedene Probleme:
Suspend to disk funktioniert nicht, weil die UMBs nicht mit gesichert werden.
Mal geht kein ISA-DMA, mal kein PCI-Busmastering, mal ist der L2-Cache hier schreibgeschützt und mal gehts es einfach gar nicht...

Wegen der Probleme mit ISA-DMA könnte SMARTDRVs Floppy-Cache nicht funktionieren, wenn es hochgeladen wird. Das hat aber nichts mit PCI-Busmastering zu tun.
PCI-Busmastering funktioniert auf AMDs K7/K8 nicht. Das betrifft dann Festplatten, die unter DOS mit Busmastering betrieben werden. Das ist bei einigen wenigen Boards mit AMI-BIOS der Fall, aber auch bei PCI-IDE-Contorllern mit eigenem BIOS, wie die von Promise, Silicon Image, Highpoint usw. Abhilfe schafft manchmal das Setzen von DoubleBuffer=1 in der MSDOS.SYS (Windows 95 und höher). Bei älteren DOS-Versionen hilft beim Hochladen nur der Umweg über eine Ramdisk.

Treiber von Netzwerkkarten, die mit PCI-Busmastering arbeiten, kann man auf AMD K7 auch nicht hochladen.

Wenn UMBPCI auf einer Boot-Floppy benutzt wird, sollten nur Bereiche benutzt werden, in denen ISA-DMA funktioniert. Auf Intel-Chipsätzen der 430er und 440er-Serie (außer MX-Versionen) ist der geeignete Parameter für UMBPCI /I=E000-EFFF. Auf Chipsätzen die kein ISA-DMA in den UMBs beherrschen, sollte UMBPCI nicht auf Bootdisketten eingesetzt werden. Konkret ist es nicht möglich, Programme von einer Floppy per DEVICEHIGH, INSTALLHIGH oder LOADHIGH in einen UMB zu laden in dem kein ISA-DMA funktioniert. Mit dem Treiber LOWDMA.SYS direkt nach UMBPCI geladen, gehts dann doch... Bei komplexen Verzeichnis-Strukturen solls damit aber Probleme geben.

Um die Funktion von ISA-DMA zu überprüfen ist DMACHK.COM gedacht (Dank an Heiko Nocon). Dazu ist UMBPCI in der CONFIG.SYS oder per CTLOAD zu laden. DMACHK zeigt dann, in welchen Bereichen ISA-DMA funktioniert. Das Programm ist mit in der UMBPCI.ZIP. Auf manchen Rechnern hängt es... CTLOAD funktioniert nicht mit Windows ME - hier kann man zu LOADSYS oder DEVLOAD greifen.

Um sich ein Bild von der Speicherbelegung unter DOS zu machen, ist MEM aus MS-DOS sicher nicht erste Wahl. Ich empfehle MI.ZIP (steht wohl für Memory Information).

Win9x bindet alle verbliebenen UMBs in seine Speicherverwaltung als normalen Speicher ein. Wie oben beschrieben ist der Speicher aber oft nicht ganz normal.
So ist es denkbar, dass z.B. der Treiber für eine ISA-Soundkarte oder die Floppy genau in einem alten UMB landet, was nicht funktionieren kann, wenn dort kein ISA-DMA funktioniert, oder irgendetwas geht auffallend langsam, weil es dort nicht gecached wird.

Um Win9x von den UMBs fernzuhalten habe ich UMBFILL geschrieben. Es belegt alle freien UMBs. Es sollte ggf. nach allen residenten Programmen in der AUTOEXEC.BAT stehen. Es darf selbst nicht hochgeladen werden. Falls das jemand so ändern kann, dass man es hochladen kann - bitte melden...

Eine andere Möglichkeit Win9x von den UMBs fernzuhalten, ist die Zeile LocalLoadHigh=1 im Abschnitt [386Enh] der SYSTEM.INI, die dazu führt, dass nur noch ein kleiner Bereich der UMBs von VMM32 belegt wird, was wohl unkritisch ist. Allerdings habe ich dazu keine verläßlichen Informationen.

Auf Chipsätzen bei denen die UMBs nicht cacheable sind, sollte man die DOS-Buffers unbedingt in den unteren Speicher zwingen, da die sonst Win9x stellenweise massiv ausbremsen. Normalerweise werden die von DOS automatisch hochgeladen. Um das zu verhindern, muß DOS=high, umb, noauto gesetzt werden. Dann muß außer HIMEM.SYS auch IFSHLP.SYS in der CONFIG.SYS stehen!

 

  Chipsätze und ihre Probleme
 
AMDs K7 und K8 CPUs (alle Athlons, Durons, Semprons, Opterons, usw) steuern Shadow-RAM unabhängig vom Chipsatz. Deshalb sind K7- und K8-Chipsätze nicht in der Tabelle aufgeführt.

Die neuen Intel Core i7, i5 und i3 CPU kümmern sich auch auch unabhängig vom Chipsatz um das Shadow-RAM.

AMD K7, K8 CPUs (alle Athlons, Durons, Semprons, Opterons) kein ISA-DMA, kein PCI-Busmastering (DoubleBuffer=1 in der MSDOS.SYS setzen und keine Treiber von PCI-Netzwerkkarten hochladen) Intel Core i3, i5, i7 CPUs keine Infos
Intel
Saturn, Mercury, Neptune
430xX, 440xX
420EX, 4x0MX, 450xX
810
815, 820, 845, 845xG, 850
830MP, 840, 860, 865, 875

keine Probleme
ISA-DMA nur im E-Segment
kein ISA-DMA
kein ISA-DMA
keine Probleme
ungetestet
VIA bis VP2/97
VIA VP3, MVP3, MVP4
VIA Apollo Pro Serie
VIA P4X266, P4M266, P4N266,
P4X333, P4N333, P4X600
PT8xx
nicht cacheable, kein ISA-DMA
nicht cacheable
keine Probleme
keine Probleme


ALI II, III, IV, V
ALI Pro2-4
nicht cacheable
ISA-DMA ok
SiS 591/592/597
SiS andere Socket7
SiS Pentium2
SiS Pentium4
nicht cacheable
nicht cacheable, ISA-DMA ungetestet
ISA-DMA ungetestet
ungetestet

Generell scheinen 486er mit PCI-Chipsatz nicht zu funktionieren, weil das Lesen und Schreiben von PCI-Konfigurationsregistern durch deren PCI-BIOS nicht unterstützt wird.

 

  News

V2.18
- Support für SiS530 (ungetestet)
V2.19
- Support für VIA Apollo Pro und Pro Plus (ungetestet)
V2.20
- Support für ALI Aladdin V 
- Support für ALI Aladdin III, IV und Pro2  (ungetestet)
V2.21
- Support für Intel 810 (ungetestet)
- UMBs nicht mehr cacheable auf SiS 59x
V2.22
- Support für neue VIA MVP3 mit Southbridge 596 (buggy)
V2.24
- VIA MVP3 mit Southbridge 596 sollte jetzt funktionieren

V3.00
- Autoscan nach freien Bereichen - kein Parameter mehr nötig
- Speicher wird aktiviert wenn kein HIMEM da ist (für DR-DOS oder HIRAM.SYS)
V3.01
- Aufforderung zum Feedback bei ungetesteten Chipsätzen
V3.02
- Support für SiS 600 und 620 (ungetestet)
V3.03
- UMBs nicht mehr cacheable auf ALi III und ALi IV
V3.04
- i440BX/ZX nicht mehr als 'ungetestet' markiert - war ein Versehen in V3.03
V3.05
- ALi III und IV getestet (Dank an Robert Riebisch)
V3.06
- entfernt sich jetzt wirklich aus dem Speicher, wenn ohne HIMEM geladen
  (Dank an M.Eckel)
V3.07
- Ali Pro II getestet (Dank an Stuart Dunlop)
V3.08
- SiS 600 getestet
V3.09
- SiS 620 getestet (Dank an Robert Riebisch)
V3.10
- SiS 530 getestet
V3.11
- Intel 820, 840, 440MX (alle ungetestet, kein ISA-DMA)
V3.12
- VIA MVP4 (ungetestet), VIA KX133 (funktioniert nicht)
V3.13
- VIA KX133 entfernt -  funktionierte nicht
V3.14
- VIA MVP4 getestet
V3.15
- Intel 810-DC100 getestet
V3.16
- einige VIA-P2-Chips werden richtig erkannt und der Cache für die UMBs aktiviert
- Anzeige von Vendor- und Device-ID wenn Chipsatz unbekannt
V3.17
- Support für SiS540 (ungetestet)
V3.18
- Intel Neptune mit EISA-Bridge (kein ISA-DMA) (Dank an Bernd Krueger-Knauber)
- Intel 815 (ungetestet)
- ordentliche Meldung auf nicht unterstützten PCI-Chipsätzen
- Suche nach South-Bridge auf unbekannten Chipsätzen geändert
V3.19
- VIA Apollo PM601 und PM133 (ungetestet)
- unbekannte VIA-Chipsätze werden nicht mehr als 'MVP3+' erkannt
- ordentliche Meldung auf Nicht-PCI-Chipsätzen
V3.20
- VIA Apollo PM601 und PM133 getestet (Dank an Charles Wright)
V3.21
- Intel 815 getestet, ISA-DMA funktioniert (Dank an Robert Riebisch)
V3.22
- Intel 810E (getestet)
V3.23
- Intel 820 mit anderer device ID (ungetestet)
V3.24
- SiS 630 getestet  (Dank an Matjaz Pavel)
V3.25
- Liste der nicht unterstützen Chipsätze erweitert
V3.26
- Intel 820 getestet, ISA-DMA funktioniert (Dank an Marco Terno)
V3.27
- Intel 440MX getestet
V3.28
- Intel 810 und 815 mit anderen device IDs (z.T. ungetestet)
V3.29
- Intel 850 (ungetestet)
V3.30
- VIA MVP3 mit Device-ID 597h und South-Bridge 686
V3.31
- Erweiterte Liste nicht unterstützer Chipsätze
V3.32
- Intel 845 (ungetestet)
V3.33
- Intel 850 getestet (Dank an Dirk Reetz)
V3.34
- Intel 845 getestet (war aufgrund eines falschen Berichts - der i845 funktionierte nicht)
V3.35
- Intel 845 funktioniert und ist getestet incl. ISA-DMA
   (Dank an Michael A. Shiels)
- Intel 830MP (ungetestet, sollte aber funktionieren)
V3.36
- Intel 830MP getestet, ISA-DMA ok, DMACHK hängt
   (Dank an Niklas Andersson)
V3.37
- VIA Apollo Pro mit Southbridge 586A getestet (Dank an Danijel Mehic)
- Erweiterte Liste nicht unterstützer Chipsätze
V3.38
- Intel 860 getestet (Dank an Gary Zinn)
- Erweiterte Liste nicht unterstützer Chipsätze
V3.39
- VIA P4X und P4M (ungetestet)
V3.40
- SiS 645 getestet (Dank an John Richardson)
V3.41
- Intel 845G getestet (Dank an Roland Zauner)
V3.42
- nicht veröffentlicht
V3.43
-ALi Aladdin II, getestet (Dank an Robert Riebisch und Jack Liu)
-ALi Aladdin Pro V (ungetestet)
-SiS 645DX
V3.44
- Erweiterte Liste nicht unterstützer Chipsätze
V3.45
- VIA MVP3 mit Device-ID 597h und South-Bridge 686 (jetzt wirklich...)
V3.47
- Intel E7201, E7205
- Intel 875P (ungetestet)
- Erweiterte Liste nicht unterstützer Chipsätze
V3.48
- Intel 865P/865G
- VIA P4X266 getestet
V3.49
- VIA P4N266, P4X333, P4N333, P4X600
- SiS 651
V3.50
- alle AMD K7 and K8 CPUs (Athlons, Durons, Opterons);
   vielen Dank an Sergei Shtylyov und Serg Svetlov; Sergei hatte
   mir 2001 geschrieben wie es funktioniert, aber ich habs nicht geglaubt :-(
   Von Serg habe ich jetzt funktionierenden Code bekommen :-)
V3.51
- Intel 855xx getestet
V3.53
- Intel E7500 (getestet)
- VIA Apollo PLE133 (getestet)
- SiS660,661,662,663 (ungetestet, eigenartige Berichte:
   RAM da, aber keine UMBs, mit /I=CC00-xxxx gehts...)
- Erweiterte Liste nicht unterstützer Chipsätze
- neue Version von DMACHK (friert nicht mehr ein)
V3.54a
- funktioniert mit VMware auf AMD K7 (VMware simuliert
   immer einen Intel-Chipsatz)
V3.55
- Intel 848P
V3.56
- Belegten Speicher von 240 auf 208 Bytes reduziert (so wie mit Vers. vor 3.x)
   (so wie mit Versionen vor 3.x - Dank an Nagatoshi Uehara)
V3.60
- 4K statt 16K-Blöcke auf AMD K7+K8 (Athlon/Opteron/Duron/Sempron) CPUs
   vielen Dank an Nagatoshi Uehara - er hat den entscheidenden Fehler
   in den 3.57betas gefunden
- Belegten Speicher von 208 auf 160 Bytes reduziert - nochmal Dank an Nagatoshi Uehara)
- Intel 915, 925
V3.61
- internen Fehler (RAM-Initialisierung) behoben (Dank an Nagatoshi Uehara)
V3.62
- Fehler beim Laden ohne HIMEM.SYS behoben (Dank an Robert Riebisch)
- VIA EPIA-M getestet
V3.63
- i430FX funktioniert wieder
V3.64
- Suche nach freien Bereichen weniger tolerant
- Intel 915GM, 7520, 7350
- VIA PT880, PM880
- SIS 655
- Erweiterte Liste nicht unterstützer Chipsätze
V3.65
- Intel 945
- Erweiterte Liste nicht unterstützer Chipsätze
V3.66
- Paramter /S zum Übergehen der Meldung 'Der Chipsatz ist unbekannt'
- Intel 945GM, 955
- Intel 7210, 7221, 7230, 7525
- ein paar VIA P4 Chipsätze (ungetestet, funktionieren warscheinlich nicht)
- SiS 656
- ALi i1 CyberBlade (ungetestet)
- ALi M1644 (ungetestet)
V3.67
- Intel 975
- Erweiterte Liste nicht unterstützer Chipsätze
V3.70
- schreibt UMB-Tabelle für QXHIMEM wenn kein HIMEM gefunden wurde
- neue Chipsatz-Erkennungs-Routine
- Intel 965
V3.71
- Intel 946, 965M
- Erweiterte Liste nicht unterstützer Chipsätze
V3.72
- Intel G/P 31, 33, 35
V3.73
- einige ALi-Chipsätze nicht mehr 'ungetestest'
V3.74
- Intel 945GME
- Intel Q33, Q35, 3100 (funktionieren mglw. nicht wegen 'Trusted Platform' Funktionen)
V3.75
- Intel X38
V3.76
- Intel 4 series
V3.77
- SiS 671
V3.78
- Intel GM45
V3.79
- Intel Q4 Series
- Erweiterte Liste nicht unterstützer Chipsätze
V3.80
- Intel X58 Chipsatz als 'nicht unterstützt' eingetragen (Speichercontroller sitzt in der Core i7 CPU)
V3.81
- Erweiterte Liste nicht unterstützer Chipsätze
V3.83
- Intel 5400, 7300
- VIA CX700, VX800, VX820, VX855, VX875, VX900
- möglicherweise einige Core i3/i5/i7 CPUs
V3.84
- Intel Core 3rd Gen CPUs
V3.85
- Intel Core 4th Gen CPUs

 

  Konditionen und Download
 
Dieser UMBPCI basiert auf dem Quelltext, den die c't 1995 veröffentlicht hat. Der sollte mit Intel-Chipsätzen bis zum 430FX funktionieren, wobei genau der nicht funktionierte und die Bugfixes aus 2/96 haben es nie bis auf den Heise-Server geschafft und sind auch die letzte Erwähnug von UMBPCI in der c't. Auch Andreas Stiller hatte UMBPCI unter dem Namen CTUMB.EXE weiterentwickelt. Den gab es eine Weile auf der c't Sysinfo-Disk, an die man als normal-sterblicher c't-Alt-Abonnent nicht so einfach herankam. Die letzte Version, die ich kenne ist V1.4, die Intel-Chipsätze bis zum 440LX und VIA-Chipsätze bis zum VP2 kennt. Sie macht die UMBs auf Pentium2/3-Maschinen nicht cacheable und ist wohl auch etwas buggy.

Dieser UMBPCI jedenfalls ist Freeware.

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

Den Quelltext gibts auf Anfrage.

Bitte keine Kopien an anderer Stelle zum Download stellen.
Wenn's unbedingt sein muß, bitte ständig dafür sorgen, dass es die aktuelle Version ist.

 

  Pläne
 
Ein paar Sachen wollte ich eigentlich noch verwirklichen, im Moment habe ich aber weder Zeit noch Lust:

  1. /X Parameter, um Bereiche bei der Suche auszuschließen
  2. /M Bei nicht unterstützten Chipsätzen trotzdem nach nutzbarem Speicher suchen

  Links
 
UMBs für 486er

Mit diesen Programmen kann man auf 486ern und z.T. Pentium-Rechnern UMBs erzeugen. Teile von DOSMAX und HIRAM lassen sich auch sinnvoll zusammen mit UMBPCI einsetzen.

Ich bin nicht der Autor der Programme!
DOSMAX
HiRAM   HiRam Sourcen
URAM
  URAM Sourcen1
  URAM Sources2
RDOSUMB



Counter seit 02/1998


letzte Änderung: 24.06.2013

Uwe Sieber

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