Der HIMEM-Gerätetreiber

last update: 06/2003

Sowohl die HMA (also die Behandlung der A20), als auch die Extended Memory Blocks werden von HIMEM unterstützt. Dabei laufen die ersten drei Schritte immer genauso ab:

Schritt 1: Verfügbarkeit feststellen

Um den XMS zu benutzen, muß natürlich erst festgestellt werden, ob ein XMS-Treiber installiert ist. Das sagt uns der Multiplexerinterrupt 2Fh. Dazu wird der MUX-Code 43h (in AH) mit der Funktion 00h (in AL) aufgerufen. Gibt die Funktion im AL-Register ein 80h zurück, ist HIMEM installiert, andernfalls nicht. (Auch andere XMS-Speichermanager geben diesen Wert zurück.)

Schritt 2: Adresse ermitteln

Die XMS-Manager (auch XMM genannt) werden nicht mittels Interrupts genutzt, sondern über FAR-Calls. Hierzu ist die Adresse, an der der XMM liegt, notwendig. Der Multiplexer gibt auch diese Information preis, ruft man den MUX-Code 43h mit der Funktion 10h auf. Das Registerpaar ES:BX zeigt auf den XMM.

Schritt 3: Versionsnummer ermitteln

Um einen reibungslosen Ablauf zu garantieren, sollte man mindestens Version 2.0 erfordern. Niedrigere Versionen enthalten in der Regel nur Funktionen zum Zugriff auf die HMA. AH wird mit der Funktionsnummer 00h geladen und danach ein FAR-Call zur XMM-Startadresse ausgeführt. Als Ergebnis erhält man im AX die Versionsnummer als BCD-Zahlen. AH - Nummer vor dem Punkt; AL - Nummer nach dem Punkt. Das BX enthält eine interne Revisionsnummer und das DX beinhaltet den HMA-Status (0=HMA-Zugriff nicht möglich; 1=Zugriff möglich).

Schritt 4: Erwünschte Funktion ausführen

Bis hierher ist es egal, wozu Du HIMEM benötigt. Von jetzt an unterscheiden sich die Funktionsaufrufe in Abhängigkeit, ob Du:

die HMA benutzen willst,

auf UMBs zugreifen willst,

oder XMS benötigst.