Allgemeine Konfiguration eines DOS-Spiele PCs


Man kann eigentlich nicht von DER Konfiguration sprechen, da einige Spiele Konfigurationen erfordern, die sich gegenseitig ausschliessen. Daher ist es praktisch, wenn man MS-DOS 6 oder hoeher installiert, da man dann mehrere Konfigurationen per Menue einrichten kann. Die Loesung dafuer sieht bei MS-DOS 5 und eher so aus, dass man sich mehrere autoexec.bat und config.sys vorhaelt und diese dann per
Batch File in der Wurzel vorgibt und rebootet. Das kann man auch geschickt mit Menues usw. automatisieren.

Erstmal die uebliche Geschichte

Das hauptsaechliche Problem warum man mehrere Konfigurationen benoetigt ist die Speicherverwaltung. In den Fruehzeiten von DOS hatte man einen 8086 kompatiblen Computer mit 512 kb aufruestbar auf 640 kb. Daher nennt man den Bereich bis 640kb 'unterer Speicher'. Das BIOS ROM des Mainboards wurde vor der Grenze zu 1MB eingeblendet, davor das BIOS der VGA Karte und davor das Speicherfenster zum Grafikkartenspeicher. Spaeter gab es 8086er mit 1MB Speicher (die maximale Ausstattung fuer einen 8086). Dadurch wurde ploetzlich Speicher jenseits der 640kb verfuegbar, dieser heisst Upper Memory Blocks (UMB). Die sogenannten TSR Programme waren zB. der Maustreiber. Diese Programme starteten und blieben dann im Speicher aktiv, auf englisch TSR (terminate and stay resident), der Benutzer kam zur DOS Eingabezeile zurueck. (seit MS-DOS 2.00 moeglich). Der Hauptsinn in solchen TSRs besteht darin unbekannte Hardware mit Hilfe einer Programmierschnittstelle Anwendungen zur Verfuegung zu stellen. Heutzutage heisst das Treiber...

Die 1MB waren schon damals fuer einige Anwendungen zu duerftig und einige Firmen bastelten an einer Speichererweiterung, die dann als LIM/EMS Standard herauskam. (LIM = Lotus / Intel / Microsoft ; EMS = Expanded Memory Standard) Diese Speichererweiterung gab es dann als Steckkarten und funktionierte so, dass 64 kb des externen Speichers irgendwo zwischen den 640kb und 1MB eingeblendet wurden. Die Grenze dieses Standards liegt bei 64MB Zusatzspeicher.

Dann kam 1981 der 80286 und brachte neue Features mit, wie 16MB maximale Speicherausstattung und einen neuen Prozessormodus. Wenn man einen 80286 anschaltet verhaelt er sich zunaechst wie ein schneller 8086, kann also maximal bis 1 MB+64kb ansprechen. Der Prozessormodus des 8086 heisst Real Mode. Und DOS aendert daran nichts.
Wie kommt man also an den zusaetzlichen Speicher?

Dazu wurde der Extended Memory Standard (XMS) eingefuehrt. Das wird unter MS-DOS (ab 4.0) mit dem Treiber HIMEM.SYS realisiert. Um an den Speicher jenseits der 1 MB zu kommen, wird der Prozessor kurzfristig in den Protected Mode geschalten, der benoetigte Speicher umkopiert und danach wieder zurueck in den Real Mode geschalten. Dabei gibt es aber ein paar Probleme. Fuer 1 MB reichten 20 Adressleitungen, fuer 16 MB benoetigt man aber 24 Leitungen. Damit die 4 zusaetzlichen Leitungen keine Probleme im Real Modus verursachen, werden diese erstmal auf  dem Zustand 0 gehalten. Um diese Blockade zu deaktivieren gibt es ein sogenanntes A20 Gate, das die Adressleitungen groesser 20 freischaltet. Mangels freier Ausgabeports wurde diese Steuerung an den Tastaturcontrollerchip gekoppelt. Der Hauptgrund, warum HIMEM.SYS so gross ist, sind die nahezu unbegrenzten Moeglichkeiten wie das A20 Gate in Hardware gegossen wurde. Ausserdem ist langsamer als langsam.
Das zweite Problem ist, dass Intel den Protected Mode so gut fand (was er prinzipiell auch ist), dass sie keine Moeglichkeit vorgesehen haben, aus ihm zurueckzukehren in den Real Mode. Dazu macht HIMEM.SYS einen softwaretechnischen Klimmzug und muss am Ende des Speichertransfers den Prozessor resetten, der damit im Real Mode neustartet und dann noch das A20 gate deaktivieren. Mit dem A20 Gate kam ein weiterer Trick, der aus der Speicheradressierung resultiert, die moeglichst kompatibel zum 8080 werden sollte. Dazu fiel Intel ein, dass man den Speicher in 64kb Bloecke sog. Segmente aufteilen kann. Den physikalischen Startpunkt eines solchen Segments kann man in 16 Byte Schritten verschieben. Aus der Kombination von Segment Startpunkt und Offsetwert ergibt sich die physikalische Speicheradresse: 16 * Segment + Offset. Wenn man nun den Segmentstart auf die 1 MB Grenze legt, kann man mit dem Offset die dahinterliegenden 64 Kb ansprechen. Dieser Bereich wird High Memory Area (HMA) bezeichnet.

EMS und XMS sind die zwei gebraeuchlichen Standards unter DOS.

Mit der Verbreitung des 80386 und MS-DOS 5 kam dann ein Programm, was in den normalen Speicher ueber 1 MB auch als EMS zur Verfuegung stellen konnte. Dieses Feature kam daher, weil der 80386 im Protected Mode noch zusaetzlich den sogenannten Virtual 8086 Modus kennt. In diesem Modus kann man mehrere 8086 Prozesse laufen lassen, kontrolliert von einer hoeheren (fuer den 8086 Prozess unsichtbaren) Instanz. Mit diesem Feature konnte man DOS speichertechnisch vollkommen umkrempeln, bis hin dazu mehrere MS-DOS Prozesse laufen zu lassen. Das Programm was mit MS-DOS geliefert wird und was den Prozessor in den V86 Modus schaltet heisst EMM386.EXE. Einige Programme von Fremdanbieter wie Quarterdeck sind noch um einiges maechtiger was die Speicherverwaltung betrifft (QEMM97 aka QEMM9.0 - QEMM386.SYS zB). Die Vorteile liegen darin, dass man Treiber hinter die 640kb laden kann, teilweise auch mehr als dort Platz ist... (virtuell in einen anderen 8086 Bereich).

Eine weitere Methode, sich den ganzen Speicher nutzbar zu machen ist, einen sogenannten DOS Protected Mode Extender zu verwenden. Dies kam erst spaeter auf und funktioniert so, dass das Programm selbst fuer den Protected Mode geschrieben wird, in dem man in einem einfachen 32 Bit Segment mehrere GB Speicher adressieren kann. Der Extender stellt sozusagen die Schnittstelle zu DOS her, da fuer jeden Festplattenzugriff oder anderen DOS oder BIOS Aufruf die CPU wieder zurueckschalten muss. Eine detaillierte Erklaerung was da so passiert gibts hier (englisch). Der bekannteste Extender ist DOS4/GW von Watcom C und PMode/W.
Weitere Methoden sind VCPI und DPMI. Die ganze Geschichte detailliert, wie man denn nun an den Speicher kommt gibts hier nochmal.

Speicher einrichten

MS-DOS laed zuerst IO.SYS, dann MSDOS.SYS, dann wird die config.sys abgearbeitet, dann wird der Kommandointerpreter COMMAND.COM geladen und dann wird die autoexec.bat abgearbeitet.
Die noetigen Programme zur Speicherkonfiguration muss man als erstes laden, da zur Aenderung das System noch 'sauber' sein muss.
Hier gibt es gute Informationen zu den DOS-Treibern.

Folgende Speicherkonfigurationen (in der config.sys) sind fuer Spiele praktisch:
Fall 1 (nur XMS):
DEVICE=C:\DOS\HIMEM.SYS

Fall 2 (XMS und EMS):
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM AUTO

Fall 3 (XMS und EMS alternativ):
DEVICE=C:\QEMM9\QEMM386.SYS RAM AUTO

Weitere Parameter fuer config.sys

weitere Dinge die in der config.sys stehen sollten sind:
DOS=HIGH,UMB        -erlaubt MSDOS sich in die HMA zu laden und TSR jenseits der 640kb Grenze zu laden.
FILES=70                     -maximal moeglich geoeffnete Dateien
BUFFERS=20               - Puffer fuer Ein/Ausgabevorgaenge
STACKS=9,256            - Vereinbart Zwischenspeicher für Interruptanforderungen
SHELL=c:\command.com /e:2048 /p                 - legt fest, dass die command.com der Kommandozeileninterpreter ist, einen Umgebungsbereich von 2048 byte hat und sich dessen letzte Instanz nicht mit exit beenden laesst.

Die autoexec.bat

Hier kann man nun Programme laden und seine Umgebung festlegen.
Das kann beispielsweise so aussehen:
@echo off
set PATH=c:\dos;C:\nc;..
prompt $p$g
lh c:\dos\smartdrv /X 2048 512
lh c:\dos\ctmouse
lh c:\dos\doskey


Die Umgebungsvariable PATH benutzt DOS um ausfuehrbare Dateien zu suchen. Dabei wird in den angegebenen Pfaden zuerst nach *.bat, *.com, *.exe gesucht, wenn im aktuellen Pfad die aufgerufene Datei nicht gefunden werden konnte.
Mit Prompt wird der Text definiert der links neben der Eingabeaufforderung steht, dabei ist $p der Pfad und $g das '>' Zeichen.
SmartDrive ist ein Festplattencache Programm, was den Zugriff sehr beschleunigen kann. Es benoetigt himem.sys
CuteMouse ist ein sehr kleiner DOS-Maustreiber.
Doskey ist ein Programm, was die Eingabezeile komfortabler macht, man kann beispielsweise mit Pfeil hoch/runter vorherige Befehle zurueckholen usw.

Wenn man ein CD-ROM hat

Fuer ein CD-ROM muss man zwei Treiber laden, einen der das CD-Laufwerk anspricht und einen der ein verfuegbares Laufwerk dazu bereitstellt.
Dazu laed man erst in der config.sys den Treiber fuer das CD-Laufwerk.
Wenn es ein IDE Laufwerk an einem Pentium Triton Chipsatz ist zB.
DEVICEHIGH=C:\DOS\TRICD.SYS /D:name                        - als Name gibt man eine Identifikationszeichenkette an, zB 'cd1'.
fuer nicht IDE CD-Laufwerke geht das aehnlich, zB. Sony: DEVICEHIGH=C:\DOS\SLCD.SYS /D:name
Es gibt viele weitere Treiber fuer IDE Laufwerke wie: oakcdrom.sys , vide.sys , mtmide.sys usw.
Wenn man zwei CD-Laufwerke hat schreibt man dahinter /D:cd1 /D:cd2
Fuer drei.....
Um nun daraus ein verfuegbares Laufwerk zu machen, benoetigt man die Microsoft CD Rom Extension mscdex.exe
Dieser wird in der autoexec.bat geladen:
lh c:\dos\mscdex.exe /d:cd1 /e    - /e nutzt erweiterungsspeicher fuer die Puffer
Fuer zwei Laufwerke dasselbe Spiel wie in der config.sys....
Mscdex sollte man vor smartdrv laden.

Weitere Tricks

Normalerweise sollte man groessere Treiber vor kleineren laden.

Fuer deutsche Waehrungs und sonstige Laenderspezifischen Symbole in der config.sys
COUNTRY=049,,C:\DOS\COUNTRY.SYS
laden.

Fuer ein deutsches Tastaturlayout in der autoexec.bat
KEYB GR,,C:\DOS\KEYBOARD.SYS
hinzufuegen. Oder einen kleinen Tastaturtreiber, wie keyb.sys in der config.sys.
kdrive ist auch recht bekannt.

Wenn man mehr als Laufwerke bis E: hat, muss man in der config.sys mit
LASTDRIVE=F
das letzte Laufwerk hoeher setzen (hier F).
Bei installierten Netzwerkclient muss hier Z stehen.

Man laed in der config.sys
DEVICEHIGH=C:\DOS\ANSI.SYS
und setzt in der autoexec.bat dann das
PROMPT $E[s$E[1;1H$E[K$E[41;37;1m $P $E[0m$E[1;55H$E[7m $D $E[0m$E[u$G

einen alternativen ansi Treiber ist zB nnansi. Mit Ansi lassen sich ueber sog. Escape Steuersequenzen viele Ausgabeparameter in normale ASCII-Zeichen packen. Die Ansi Steuercodes sind nicht zu verwechseln mit dem Ansi Zeichensatz. Der gesamte DOS-Zeichensatz enthaelt den ASCII Zeichensatz. Mit den Ansi Escape Steuersequenzen kann man sehr viel machen, bis hin zu Animationen. Dies wurde teilweise ausgiebig in Mailboxsystemen eingesetzt. Eine vollstaendige Liste kann man in der nnansi.doc zu nnansi nachschlagen.

Angenommen man hat ein CD-laufwerk will es aber nicht mit smartdrv cachen, so kann man mit dem Parameter /U Speicher sparen.

zum Inhalt