Archiv für den Monat: Dezember 2018

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.

Geschrieben von Kap. Zuletzt geändert am 19. Dezember 2018.