Nutzung des UMB-Bereichs mit 286er?

Konfiguration, Anwendungen, Treiber und TSRs unter DOS
Antworten
hansurabi

Nutzung des UMB-Bereichs mit 286er?

Beitrag von hansurabi »

Hallo,

habe mir einen alten 286er mit MS-DOS 5.0, EGA-Karte und -Monitor als Spielerechner hergerichtet (für Games bis 1989) - jedoch besteht das Problem, dass ich nur 535 kB freien Speicher habe, da ich keine Treiber in den UMB-Bereich laden kann, so dass ein paar Spiele nicht laufen. Was tun?

Der Rechner hat 1 MB RAM (zählt beim Hochfahren korrekt hoch), im BIOS wird 640 kB Base Memory sowie 368 kB EMS Memory angezeigt. Shadow Memory ist deaktiviert.

HIMEM.SYS lädt nicht mit der Fehlermeldung "A20 Behandlungsroutine Nummer1. Fehler: keinen verfügbaren Erweiterungsspeicher gefunden"
Im Handbuch zum Motherboard ("M209", Hersteller?) wird ein Treiber namens DEMS.SYS erwähnt, den ich aber nicht mehr auftreiben kann. Habe aber EMS40.SYS gefunden - hier bekomme ich die Fehlermeldung "not enough memory"
Habe auch EMM286.EXE, das aber nur funktioniert, wenn vorher
HIMEM.SYS geladen wurde.

Wenn mir jemand weiterhelfen kann, wäre ich sehr dankbar!!
Benutzeravatar
5u3
Kommandozeilenfetischist
Beiträge: 184
Registriert: Do 21. Sep 2006, 17:05
Wohnort: Wien

Re: Nutzung des UMB-Bereichs mit 286er?

Beitrag von 5u3 »

hansurabi hat geschrieben:Der Rechner hat 1 MB RAM (zählt beim Hochfahren korrekt hoch), im BIOS wird 640 kB Base Memory sowie 368 kB EMS Memory angezeigt.
HIMEM.SYS lädt nicht mit der Fehlermeldung "A20 Behandlungsroutine Nummer1. Fehler: keinen verfügbaren Erweiterungsspeicher gefunden"
Diese Meldungen deuten darauf hin, daß die freien Bereiche oberhalb von 640k bereits vom BIOS als EMS eingerichtet wurden. Das war bei 286er-Mainboards verbreitet, sollte sich aber im BIOS-Setup abstellen lassen. Danach sollten HIMEM und EMM286 funktionieren.
Das löst allerdings nicht das Problem mit den UMBs: Dafür wirst Du einen extra Treiber brauchen, weil die gängigen Standardtreiber so alte Hardware nicht unterstützen.
Möglicherweise gibt es einen UMB-Treiber für Dein Mainboard, dafür mußt Du aber mehr über das Board herausfinden: Hat es einen Chipsatz? Wenn ja, welchen? Kannst Du ein detailliertes Foto von dem Board machen?
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

Die Frage ist bei einem 1 MB 286er ob sich das ueberhaupt lohnt. Denn in den 384 K befinden sich dann schon
MS-DOS (was sonst in die HMA geladen wird)
der Speicherbereich der Grafikkarte ab $a000:0000
das Bios der Grafikkarte und Mainboards

frueher ist man oft davon ausgegangen, dass man bei einem 286er nichts 'hochladen' kann, mangels UMBs.

Jedoch deuten die Technotes auf
http://www.freedos.org/freedos/news/technote/202.txt
darauf hin, dass es wohl mit bestimmten Chipsets geht.
hansurabi

Beitrag von hansurabi »

Danke für die schnelle Antwort!

Habe mal "EMS MEMORY" im BIOS disabled, aber bekomme immer noch dieselbe Fehlermeldung für HIMEM.
Übrigens gibt es hier noch die Einstellmöglichkeiten "PAGE FRAME" (= E000H) und "I/O-PORT" (=02D8H)

Falls ihr was damit anfangen könnt, habe ich eine Seite mit
groben Daten zum Mainboard gefunden:

http://stason.org/TULARC/pc/motherboard ... M-209.html

(-> Chipsatz ist also wohl von PC Chips)

Help!
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

Ich verstehe noch nicht ganz wozu du Himem brauchst?

Normal dient Himem dir den Speicher ueber 1 MB als XMS zur Verfuegung zu stellen. Aber dein 286er hat keinen Speicher ueber 1 MB und brauch daher auch keine aktivierte A20 Leitung.

Insofern ist die Fehlermeldung schon richtig. Himem laed sich nicht, weil garkein Speicher ueber 1 MB vorhanden ist, den es als XMS anbieten koennte.

Was EMS betrifft:
Du kannst im Bios Page Frame und I/O Port einstellen?

Hast du denn ueberhaupt eine EMS Speichererweiterungskarte eingesteckt?
Falls nicht, wo sollen die EMS Pages herkommen, die dir im Page-Frame eingeblendet werden? :P


Ich vermute jetzt folgendes:
Du meinst, der Rechner hat zwischen 640 KB und 1 MB noch etwas Speicher frei.
Genaugenommen
1 MB minus (System BIOS + Grafik BIOS + Grafik Memory + sonstiger I/O Memory + MS-DOS).
In diesen restlichen Speicher moechtest du mit dem 286er Programme 'hochladen' ?

Edit: Hat der Rechner vielleicht wirklich nur 640 KB Speicher und 384 KB als EMS Zusatzspeicher?
hansurabi

Beitrag von hansurabi »

elianda hat geschrieben:Du meinst, der Rechner hat zwischen 640 KB und 1 MB noch etwas Speicher frei. Genaugenommen 1 MB minus (System BIOS + Grafik BIOS + Grafik Memory + sonstiger I/O Memory + MS-DOS).
In diesen restlichen Speicher moechtest du mit dem 286er Programme 'hochladen'
Genau so ist es! Ich schätze, dass mir schon 20 bis 30 KB mehr Arbeitsspeicher ausreichen würden, damit die paar restlichen Spiele (um genau zu sein: StarTrek-Text-Adventures) laufen.

Da sich keine Veränderung bei den besagten mickrigen 535 kB einstellte, auch wenn DEVICEHIGH und LOADHIGH (bei DOS=UMB) in Config und Autoexec standen, habe ich vermutet, dass ich einen Treiber benötige, um den UMB-Bereich ansprechen zu können. Und da hatte ich den HIMEM stark im Verdacht.
Benötigt man etwa gar keinen Treiber für den UMB-Bereich? Und wenn doch, welchen (anscheinend nicht HIMEM)??

Oder liegt das ganze Problem etwa darin, dass die freien UMBs nicht groß genug sind für einen Maus-, Tastatur- oder CD-ROM-Treiber?
Wäre es dann die einzige Lösung, nach seltenen SIP-RAM-Bausteinen zu suchen, um einen HMA-Bereich zu bekommen, in den ich dann die Treiber laden kann?
elianda hat geschrieben:Hast du denn ueberhaupt eine EMS Speichererweiterungskarte eingesteckt?
Falls nicht, wo sollen die EMS Pages herkommen, die dir im Page-Frame eingeblendet werden? :P
Nein, hab ich nicht! Ich dachte, die 368 kB (nicht 384!) EMS, die ich im BIOS einstellen kann, kommen von den DIPs auf dem Mainboard. Die Pages und I/O-Port kann man auch einstellen, wenn EMS deaktiviert ist.
elianda hat geschrieben:Edit: Hat der Rechner vielleicht wirklich nur 640 KB Speicher und 384 KB als EMS Zusatzspeicher?
Was meinst du damit? Beim Hochfahren werden 1024 kB angezeigt. Im BIOS unter EXTENDED MEMORY heißt es: "Total on board RAM size detected: 1024 kB; extended RAM size on RAM card: 0 kB; please set: extended RAM size: 0 kB"
Kann ich die zusätzlichen 368 kB nicht als XMS-Memory verwenden?

Übrigens schon mal tausend Dank für eure Hilfe bis hierhin!
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

Also du hast die DIPs von Bank0 und 1 voll bestueckt = 1 MB
Keine SIPPs gesteckt und keine EMS Karte.

Normalerweise stellt ab einem 386er der V86-Speichermanager die UMBs zur Verfuegung. Bei MS-DOS ist das z.B. EMM386.SYS

Mir ist kein Treiber bekannt, der dir bei einem 286er diese Funktionalitaet einrichtet.

Nur mal angenommen du findest einen 1 MB SIPP und ruestest den nach. Dann kannst Du HIMEM.SYS laden und bekommst
1 MB - 64 KB als XMS und DOS wird in die HMA geladen.
Trotzdem hast du dann noch keine UMBs und ein 286er kann zwar Protected Mode aber darin V86 Mode.

Waehrend EMS bis 286er oft 'echt' war, wird der bei 386er aufwaerts zu 99% vom V86 Speichermanager mit XMS emuliert.
Das heisst frueher wurden jeweils 64 KB einer Speichererweiterungskarte eingeblendet und spaeter hat der Speichermanager XMS Speicher reserviert und diesen als 'virtuellen EMS Speicherblock' im Pageframe eingeblendet.

Wikipedia sagt dazu:
http://de.wikipedia.org/wiki/Upper_Memory_Block

Du brauchst einen Chipsatztreiber, womit du ueber 640 KB den RAM einblenden kannst. Im Prinzip das was UMBPCI bei den Triton Chipsets macht.
Benutzeravatar
5u3
Kommandozeilenfetischist
Beiträge: 184
Registriert: Do 21. Sep 2006, 17:05
Wohnort: Wien

Beitrag von 5u3 »

@ elianda: Du hast recht, es macht auf diesem System nicht viel Sinn, den HIMEM.SYS-Treiber zu laden, da kein Speicher oberhalb von 1 MB vorhanden ist, und somit die High Memory Area und Extended Memory wegfallen.
Ein paar Kilobyte EMS sollten möglich sein, allerdings wäre es besser, stattdessen UMBs einzurichten.

@ hansurabi:
Der Treiber HIRAM macht genau das, was Du brauchst (UMBs einrichten), und sollte prinzipiell mit jedem Rechner funktionieren. Leider ist die Installation dieses Treibers alles andere als trivial: Falls keines der mitgelieferten Skripte für Deinen Chipsatz passt, müßtest Du ein eigenes Skript erstellen, und das wäre ohne Chipsatzdokumentation eine ziemlich mühsame Angelegenheit.

Ein zweiter UMB-Treiber, der möglicherweise funktionieren könnte, ist RDOSUMB. Dein Chipsatz ist zwar nicht explizit in der Kompatibilitätsliste aufgeführt, aber vielleicht hast Du ja Glück :wink:
hansurabi

Beitrag von hansurabi »

Sehr vielen Dank!!

Werde die beiden Treiber nächstes Wochenende, wenn ich wieder mit meinem 286er vereint bin, ausprobieren und dann Rückmeldung geben!
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

5u3 hat geschrieben:Ein paar Kilobyte EMS sollten möglich sein, allerdings wäre es besser, stattdessen UMBs einzurichten.
Mal abseits von Hansurabis speziellen Problem, verstehe ich nicht woher du EMS nehmen willst bei dieser Konfiguration.
Soweit ich das verstanden habe, hat er 1 MB ohne Extended Speicher (XMS) und ohne Expanded Speicher[erweiterungskarte] (EMS).
d.h. normal ist kein Speicher da um EMS bereitzustellen.

Theoretisch koennte ich mir vorstellen, dass man folgendes machen koennte:
- ueber Chipsatzregister ueber 640 KB echten RAM einblenden.
- In einem verfuegbaren zusammenhaengenden freien (nicht ueberblendeten) 64 KB Bereich ueber der 640 KB Marke einen EMS PageFrame einrichten.
- Weiteren freien Speicher in 64 KB Bloecken (falls verfuegbar) als zusaetzliche EMS Pages anbieten, z.B. ueber softwaremaessiges Tauschen des Page Frame Inhaltes und nachfolgendes Tauschen der Page Zuordnung.

Vom Aufwand her ist EMS-Emulation fuer freien Speicher zwischen 640 KB und 1 MB auf einem 286er wohl eher unsinnig.

Eine weitere Sache waere, dass man die ROMs und I/O Bereiche aehnlich wie QEMM 'stealthed' (siehe QEMM TechNotes). Das erfordert jedoch die Steuerung ueber Protected Mode, da man sowohl BIOS-INTs als auch Speicherzugriffe abfangen muss und vor dem eigentlichen Zugriff den korrekten Speicher einblenden muss (z.B. RAM oder BIOS-ROM). Das ist aber auch auf einem 286er unrealistisch, da dieser keinen Virtual x86-Modus beherrscht und damit vermutlich bestimmte direkte Hardware Zugriffe des BIOS nicht mehr funktionieren.

Hab ich ein Detail uebersehen?

Vielleicht noch als Anhang ein sehr einfaches Beispiel, was 'stealthen' leistet:
Angenommen man moechte mehr freien Speicher uber 640 KB, dann liegt normal der Speicher unter dem BIOS ROM ungenutzt.
Nun kann man folgendes machen:
Man schaltet das BIOS ROM aus und den darunterliegenden RAM ein und laed z.B. den Maustreiber dorthinein. Woher erkennt man nun ob Maus oder BIOS an dieser (gleichen) Speicheradresse eingeblendet werden muss?
Naja es gibt da die Interrupttabelle, wo sich der Maustreiber eintraegt aber auch das Bios. Nun kann QEMM fuer Interrupts eine Ausnahmebedingung definieren, so dass bei einem Interrupt ersteinmal QEMM die Kontrolle uebernimmt. Dann kann QEMM erkennen ob der ausgeloeste Interrupt fuer das Bios oder den Maustreiber bestimmt ist und entsprechend den korrekten Speicherbereich einblenden. Danach gibt QEMM die Kontrolle wieder an z.B. den Maustreiber zurueck.

Erweiterung:
Spezialisten werden behaupten, bei modernen Rechnern ist das BIOS schon ins RAM kopiert und nichtmehr im ROM. Das stimmt.
Aber QEMM hat die Kontrolle ueber den Speicher und kontrolliert den Virtual x86 Modus. Also kann der Speichermanager auch einen Speicherbereich von ueber der 1 MB Grenze nehmen (theoretisch irgendwo aus den untersten 4 GB RAM) und virtuell statt des BIOS-RAMs an dieser Adresse einblenden. So koennte man sich beliebig viele UMBs zur Verfuegung stellen. (Bis der Speicher alle ist)
Vielleicht ist bei QEMM schon einmal jemand aufgefallen, dass er mehr Programme in den hohen Speicher geladen hat, als dort ueberhaupt Speicher vorhanden ist.... ....dafuer aber weniger XMS zur Verfuegung steht....

EMM386 bietet diese Flexibilitaet leider nicht.
Benutzeravatar
5u3
Kommandozeilenfetischist
Beiträge: 184
Registriert: Do 21. Sep 2006, 17:05
Wohnort: Wien

Beitrag von 5u3 »

elianda hat geschrieben:Theoretisch koennte ich mir vorstellen, dass man folgendes machen koennte:
- ueber Chipsatzregister ueber 640 KB echten RAM einblenden.
- In einem verfuegbaren zusammenhaengenden freien (nicht ueberblendeten) 64 KB Bereich ueber der 640 KB Marke einen EMS PageFrame einrichten.
- Weiteren freien Speicher in 64 KB Bloecken (falls verfuegbar) als zusaetzliche EMS Pages anbieten, z.B. ueber softwaremaessiges Tauschen des Page Frame Inhaltes und nachfolgendes Tauschen der Page Zuordnung.

Vom Aufwand her ist EMS-Emulation fuer freien Speicher zwischen 640 KB und 1 MB auf einem 286er wohl eher unsinnig.
Da liegst Du gar nicht so falsch - jedoch sind die Fähigkeiten mancher AT-Chipsätze nicht zu unterschätzen :wink:

Schon der Urahn aller Chipsätze, C&T's NEAT kann Speicherbereiche zwischen 640 KB und 1024 KB in höhere Bereiche (oberhalb von 1024 KB) umblenden und als EMS zugänglich machen. Konkurrierende Chipsätze von Texas Instruments, Western Digital, Headland, VLSI, etc... bieten ähnliche Funktionen.
Allerdings läuft das Ganze meist nur bei Bestückung mit maximal 1 MB RAM, weil der umgemappte Bereich üblicherweise direkt über 1024KB liegt und nicht verändert werden kann.
Falls man mehr als 1 MB RAM eingebaut hat, kann man den Upper Memory immerhin noch für ROM-Shadows und EMS-Seitenrahmen nutzen, der EMS-Speicher kommt in diesem Fall vom restlichen eingebauten Speicher oberhalb von 1 MB.
Verwendet man die Remapping- und EMS-Funktionen des Chipsatzes (im BIOS-Setup oder über Konfigurationsprogramme einstellbar), haut es die Speichertreiber neuerer DOS-Versionen auf die Nase, weil diese ein "unberührtes" System erwarten.
Als später der 386er und mehrere Megabytes an RAM auf dem Massenmarkt bezahlbar wurden, kamen die im Chipsatz integrierten Hardware-EMS-Funktionen aus der Mode und wurden nicht mehr eingebaut.
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

5u3 hat geschrieben:
elianda hat geschrieben:Theoretisch koennte ich mir vorstellen, dass man folgendes machen koennte:
- ueber Chipsatzregister ueber 640 KB echten RAM einblenden.
- In einem verfuegbaren zusammenhaengenden freien (nicht ueberblendeten) 64 KB Bereich ueber der 640 KB Marke einen EMS PageFrame einrichten.
- Weiteren freien Speicher in 64 KB Bloecken (falls verfuegbar) als zusaetzliche EMS Pages anbieten, z.B. ueber softwaremaessiges Tauschen des Page Frame Inhaltes und nachfolgendes Tauschen der Page Zuordnung.

Vom Aufwand her ist EMS-Emulation fuer freien Speicher zwischen 640 KB und 1 MB auf einem 286er wohl eher unsinnig.
Da liegst Du gar nicht so falsch - jedoch sind die Fähigkeiten mancher AT-Chipsätze nicht zu unterschätzen :wink:

Schon der Urahn aller Chipsätze, C&T's NEAT kann Speicherbereiche zwischen 640 KB und 1024 KB in höhere Bereiche (oberhalb von 1024 KB) umblenden und als EMS zugänglich machen. Konkurrierende Chipsätze von Texas Instruments, Western Digital, Headland, VLSI, etc... bieten ähnliche Funktionen.
Nungut, die Entwickler damals waren mit Sicherheit nicht auf den Kopf gefallen. Wenn das Hardwaremaessig schon inklusive ist, dann faellt auch kein Software+Rechenzeitoverhead an. Stellt sich fuer Hansurabi die Frage ob er fuer sein Chipset noch sowas ausgraebt, oder zumindest einen Treiber fuer UMBs.
Antworten