Basis-DOS für virtuelle Maschinen

Wer DOS noch von früher kennt, weiß, wie wichtig es ist, möglichst viel der Verfügbaren 640 KiB zu frei zu haben. Wer DOS nicht von früher kennt: Egal, wie viel RAM ein Computer unter DOS hat, es bleibt stets zusätzlich ein Limit von 640 KiB für die maximale Größe eines Programms. Dieser Wert ist maximal, zusätzliche Treiber oder Systemprogramme benötigen zusätzlichen Speicher.

640K ought to be enough for anybody.

Hat Bill Gates wohl nie gesagt,
er ist damit in guter Gesellschaft von
Albert Einstein und Oscar Wilde ;)

Heutzutage wird DOS hauptsächlich in virtuellen Maschinen betrieben. Der Speichermanager EMM386, der Blöcke im oberen Speicher (UMB) für Treiber verfügbar macht, findet dort nicht mehr automatisch die korrekten Speicherbereiche.

EMM386 unterstützt zwei Modi, EMS und XMS. Wir behandeln hier nur XMS, da EMS nur für wirklich alte Software verwendet wird. Der notwendige Parameter für ist NOEMS. Der Parameter RAM kann benutzt werden, um den Speicherbereich, der für UMBs benutzt werden soll. Ohne weitere Spezifizierung wird der gesamte Bereich von 640 KiB an benutzt. Zusätzlich können über den Parameter I=xxxx-yyyy bestimmte Bereiche angewiesen werden. Dies ist notwendig, um auf modernen Computern mit Virtual Box die UMBs verfügbar zu machen. Folgende Bereiche stehen zur Verfügung:

Bereich Verwendung Benutzbar?
A000-AFFF VGA Videospeicher. Nicht verfügbar.
B000-B7FF Videospeicher für Monocromdisplays (MDA). Sicher, die VM hat ein Farbdisplay.
B800-BFFF Videospeicher für Farbdisplays (CGA). Nicht Verfügbar.
C000-C7FF Video ROM. Nicht benutzbar.
C800-EFFF Verschiedene ROMs. Hard drive Rom von C800 bis CFFF, andere BIOS-Daten (Extended BIOS). Sollte verfügbar sein.
F000-FFFF BIOS ROM. Nicht verfügbar.

Diese Liste gibt uns zwei Zusammenhängende Bereiche von Hauptspeicher, einmal ein kleiner Bereich (32 KiB von B000 bis B7FF) und einmal (160 KiB von C800 bis EFFF); zusammen 192 KiB. Diese beiden Bereiche können beim Laden in den oberen speicher über DEVICEHIGH oder LH mit /L:1 bzw. /L:2 angesprochen werden. Die kleinen Treiber sollten in den vorderen Bereich geladen werden, die großen in den hinteren. Wenn man optimieren möchte, es handelt sich hierbei um eine Instanz des Bin Packings Problems (Achtung! NP-Schwer ;)).

Eine CONFIG.SYS für den Anfang könnte also so aussehen:

Basiskonfiguration CONFIG.SYS

Basiskonfiguration CONFIG.SYS

DEVICE=C:\DOS\HIMEM.SYS /TESTMEM:OFF
DEVICE=C:\DOS\EMM386.EXE RAM NOEMS /I=E000-EFFF /I=B000-B7FF /I=C800-CFFF /I=D000-DFFF
DOS=HIGH,UMB
DEVICEHIGH /L:1=C:\DOS\SETVER.EXE
COUNTRY=049,850,C:\DOS\COUNTRY.SYS
DEVICEHIGH /L:1=C:\DOS\DISPLAY.SYS CON=(EGA,,1)
FILES=30

Die zugehörige Basisversion der AUTOEXEC.BAT ist dann:

Basiskonfiguration AUTOEXEC.BAT

Basiskonfiguration AUTOEXEC.BAT

@ECHO OFF
PROMPT $p$g
LH /L:2 C:\DOS\SMARTDRV.EXE /X
PATH C:\DOS
SET TEMP=C:\DOS
MODE CON CODEPAGE PREPARE=((850) C:\DOS\EGA.CPI)
MODE CON CODEPAGE SELECT=850
LH /L:2 KEYB GR,,C:\DOS\KEYBOARD.SYS
LH /L:2 DOSKEY.COM

Auf dieser Konfiguration aufbauend, kann dann das System weiter aufgesetzt werden. Es gibt noch reichlich freien Speicher im oberen Speicherbereich und ein Großteil der 640 KiB sind verfügbar.

DOS Memory-Übersicht

Verfügbarer Speicher und Treiber im hohen Speicherbereich im Basissystem.

Zuletzt geändert: 19. Dezember 2018 um 0:26 Uhr.

Geschrieben von .

a.k.a.

Ich bin Diplom-Informatiker, den es von Herten im wunderschönen Ruhrgebiet nach Berlin verschlagen hat. An der TU Berlin forsche ich nun als wissenschaftlicher Mitarbeiter in der kombinatorischen Optimierung an Graphalgorithmen; nebenbei bringe ich Anfängern Programmieren bei. Ich blogge hier über alles was mich interessiert, vor allem Nerdiges und Reisen.

3 Gedanken zu „Basis-DOS für virtuelle Maschinen

  1. Hans Dampf

    Hallo,
    wenn ich eine GPU mit ca 60 kb Bios besitze (Geforce mx440), wo wird das dann hingeladen? An den Anfang von /L2: , weil in Abschnitt Video Rom nur 32 kb Platz ist?
    Hintergrund: Ich brauche etwas EMS für Ultima Underworld und ohne Seitenrahmen Angabe meckert EMM386.EXE schon beim booten.

    Antworten
  2. kap Beitragsautor

    Ich weiß nicht, wie genau das Video-BIOS in den Speicher gemappt wird. Müssen tatsächlich mehr als 32 KiB genutzt werden? Eine MX440 enthält viele Funktionen, die von DOS gar nicht unterstützt werden, so dass möglicherweise nur Teile geladen werden? Ich würde FRAME=E000 ausprobieren, E000 liegt weit hinter dem VGA-ROM, so dass 64 KiB Platz dazwischen liegen würden.

    Antworten
  3. Canute Paderson

    ein nettes Tool ist „umbinfo.com“ von dawicontrol
    zeigt sehr genau an was im speicher los ist :)
    zum testen mach dir ein Start MENU in der config.sys und autoexec.bat
    1 STANDARD (irgendetwas das funktioniert zum arbeiten)
    2 OHNE HIMEM und EMM386, NUR TASTATUR UND EDIT.COM config.sys
    3 TEST für Wilde Einstellungen
    dann ist es noch Nützlich zu wissen das 4kb ein hex offset von 0x100 ist.
    emm386 nimmt immer 4kb blöcke also kein CB81-CF93 sondern CC00-CFFF
    der EMS Frame falls Erwünscht ist normalerweise 64kb Groß z.b. D000-DFFF oder C800-D7FF .
    Bei jedem Rechner oder VM ein bisschen anders kann viel Arbeit machen.
    https://www.i8086.de/dos-befehle/emm386-exe.html

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

O:-) B-) :cry: :-* :D :-o :P ;) :O :-/ more »