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