# DOS Protected Mode Interface

DOS Protected Mode Interface, kurz DPMI, ist eine Programmierschnittstelle (API, englisch Application Programming Interface) zur Entwicklung von Computerprogrammen im Protected Mode auf der x86-Architektur. Damit umgehen sie die Limitierungen des bis dahin genutzten Real Mode, in dem der sogenannte „konventionellen Speicher“ mit 640 KiB (655.360 Byte, siehe auch UMB) limitiert ist.

## Geschichte

DPMI wurde ursprünglich 1989 von Microsoft für Windows 3.0 und OS/2 2.0 entwickelt. Die Technik ermöglichte es, DOS-Anwendungen im Protected Mode von 80286- (16-Bit) und 80386-Prozessoren (32-Bit) zu nutzen.
Unter DOS war damals bereits das von Phar Lap Software und Quarterdeck Office Systems gemeinsam entwickelte Virtual Control Program Interface (VCPI) verbreitet, das eine ähnliche Funktionalität für DOS-Programme bereitstellte, jedoch einen 32-Bit-x86-Prozessor („IA-32“ ab dem 80386) voraussetzte. Ein wesentliches Problem von VCPI war allerdings, dass auch die Programme im privilegierten Ring 0 laufen, weshalb VCPI keinen Speicherschutz bieten kann. Das war unter DOS, wo Programme üblicherweise exklusiv liefen (ohne Multitasking), normalerweise kein Problem, unter den Betriebssystemen OS/2 und Windows jedoch schon.
1989 gab es bereits einige DOS-Programme, die den Protected Mode mittels VCPI nutzen. Als Microsoft DPMI vorstellte, gab es daher die Befürchtung, dass dies zu zwei verschiedenen, konkurrierenden und obendrein inkompatiblen Techniken führen könnte. Das wurde durch Microsoft selbst verhindert, denn die Spezifikation von DPMI wurde an ein Komitee abgegeben und von der Industrie gemeinsam weiterentwickelt. Die Weiterentwicklung von VCPI wurde daraufhin eingestellt.
Die Gründungsmitglieder des DPMI Committee waren Borland, IBM, Ergo Computer Solutions, Intelligent Graphics Corporation, Intel, Locus Computing Corporation, Lotus Development Corporation, Microsoft, Phar Lap Software, Phoenix Technologies, Quarterdeck Office Systems und Rational Systems (nun Tenberry Software).

## Details

Unter dem in den 1990er Jahren noch weit verbreiteten PC-Betriebssystem DOS wurde die DPMI-Spezifikation in Form von sogenannten DOS-Extender umgesetzt. Ein DOS-Extender (von englisch to extend, erweitern) schaltet den x86-Prozessor in den Protected Mode und bietet dabei eine standardisierte Umgebung für 16- und 32-Bit-Protected-Mode-Programme, wobei der DOS-Extender selbst als Abstraktionsschicht zum im 16-Bit-Real-Mode laufenden DOS und BIOS dient. Nach Beendigung der Anwendung schaltet der DOS-Extender in den Real Mode zurück und übergibt die Kontrolle wieder an das Betriebssystem. Besonders DOS-Programme können per DOS-Extender die Limitierung von konventionellem Speicher umgehen, ohne die bis dahin im Real Mode genutzten aufwändigeren Umwege von z. B. Bank Switching, XMS oder EMS nutzen zu müssen.
Mit DPMI wurde es erstmals möglich, dass auch DOS-Anwendungen die Möglichkeiten des Protected Mode von Intel-Prozessoren ab dem 80286 nutzen konnten und zudem Inkompatibilitäten mit anderen Protected-Mode-Anwendungen oder -Betriebssystemen – durch die standardisierte Schnittstelle – verhindert wurde. Zudem ermöglicht DPMI (im Gegensatz zu VCPI) Multitasking, da Programme, die als Clients unterhalb des DOS-Extenders als DPMI Host im Ring 0 laufen, sich durch den Speicherschutz des Protected-Mode im Ring 3 nicht gegenseitig gefährlich werden können.
Unter Windows 3.x wird direkt im Betriebssystem ein DPMI Host bereitgestellt. Die DOS-Extender erkennen diesen Fall und beschränken sich dann auf das Durchreichen der entsprechenden Aufrufe, wodurch DOS-Programme, die per DPMI im Protected Mode laufen, auch unter Windows ausführbar bleiben. Ebenso funktionieren DPMI-DOS-Programme im DOS-Modus unter OS/2.

## Implementierungen

Betriebssysteme, die Unterstützung für DOS-Programme beinhalten, sowie grafische Aufsätze für DOS, die im Protected Mode laufen, haben DPMI bereits implementiert. Darunter:
* Windows 3.x
* Windows 9x
* OS/2 ab Version 2.0
DOS-Extender, die von vielen für DOS geschriebenen Protected-Mode-Programmen genutzt werden:
* In Borland-Compilern (u. a. Borland Pascal 7.0) eingesetzte RTM.EXE (16-Bit) und RTM32.EXE (32-Bit, nur noch in Turbo C)
* DOS4GW.EXE (bei Watcom C/C++ mitgeliefert, sehr beliebt bis 1995, danach Entwicklung eingestellt, heute obsolet)
* PMODE/W
* Causeway
* DOS/32A (kompatibel zu DOS4GW.EXE, letzte Version 9.12 von 2006)
* HX DOS Extender – HDPMI16 (16-Bit) und HDPMI32 (32-Bit)
* CWSDPMI (Bestandteil von DJGPP, dort auch als GO32 bezeichnet.)
* PMODE/DJ
* WDOSX
* TNT DOS-Extender SDK von Phar Lap
* 386|DOS-Extender SDK von Phar Lap
* emx von Eberhard Mattes
* Zortech C++
* DPMIONE (setzt DPMI 1.0 um) aus 386MAX von Qualitas, Inc.