DPMIONE Documentation File
The DOS Protected Mode Interface (DPMI) Specification version 0.9 was
created by the DPMI Committee in 1990, and extended to version 1.0 in
1991. From the introduction to the DPMI 1.0 spec, "The DOS Protected
Mode Interface (DPMI) allows DOS programmers to access the advanced features
of 80286, 80386, and 80486-based PCs in a well-behaved, hardware-independent
fashion that does not compromise system protection". With this spec,
it becomes especially easy to write a program which enters Protected Mode
(PM), and has access to all of the system's extended memory.
DPMI 0.9 hosts are readily available, standalone or otherwise. Some DPMI
0.9 hosts implemented a handful of DPMI 1.0 features, but other than 386MAX,
none of them do the whole spec.
DPMIONE is, to my knowledge, the first publicly available standalone
DPMI 1.0 host. This program is an outgrowth of the DPMI 1.0 host which
first appeared in 386MAX from Qualitas, Inc. in 1992. As such,
it has undergone extensive testing in that commercial product before being
ported to this standalone program.
- Supports DPMI 1.0 (superset of DPMI 0.9)
- Starts from either Real Mode or Virtual Mode (using VCPI)
- Low DOS memory resident size is about 15KB
- Extended memory resident size is about 300KB plus Page Tables (4KB
per 4MB of physical memory)
- Loads from command line or as device driver so subsequently loaded
device drivers can use DPMI
- Supports both 16-bit and 32-bit DPMI clients
- Supports nested DPMI clients
- Supports uncommitted memory (a very handy
DPMI 1.0 feature)
- Full DOS (INT 21h) & Mouse (INT 33h) translation services
- Swapfile support
- Compatible with 386SWAT for debugging DPMI clients
- 80386 CPU or later
- XMS driver (HIMEM.SYS or Memory Manager EMM386/QEMM/etc. -- 386MAX
7 and later versions already support DPMI 1.0)
- VM/RM exceptions 06h (Invalid Opcode) and 0Dh
(GP Fault) only are reflected to PM.
- The TSR facility of DPMI 1.0 is not supported -- if you really, really need
- Unzip the files into a separate directory (say, C:\DPMIONE).
- Edit the file DPMIONE.PRO to include a line which
loads the DPMI.LOD file, e.g.
- Edit the DPMI.PRO file as necessary (no changes are
needed from the defaults).
- Decide whether you want to load DPMIONE.EXE in your
CONFIG.SYS or AUTOEXEC.BAT file (or
neither). Then, do either step 4a or 4b (but NOT BOTH):
- Edit your CONFIG.SYS file to include a line such
- Edit your AUTOEXEC.BAT file to include a line
- If you chose not to load DPMIONE automatically, you can run it
from the command line at a later time, with a line similar to the
one in 4b.
- If necessary, reboot your system to load DPMIONE.
As a test of this program's compatibility as a DPMI host, you can actually
use it as a substitute for the Windows 3.1x DPMI host. That is, install
a fresh copy of Windows 3.1x. Then, with DPMIONE resident, go to the WINDOWS
directory and type
and Windows is up and running! This instance of Windows does not support
DOS sessions or anything related to that, but most other Windows functions
are there including File Manager. This has proven to be an exceptionally
rigorous test of a DPMI host. No other unrelated DPMI host can make
Expand Down Stacks
The Locked Protected Mode stack used by DPMIONE for hardware interrupts
and faults is marked as Expand Down so it expands automatically. In the
process of making this work, I learned a lot. For more details on Expand
Down segments, see this page.
Author & Copyright
This program was written by Bob Smith ()
and is © Copyright 1990-2004 Qualitas, Inc. The most recent version
may be found at http://www.sudleyplace.com/dpmione/.
This program is licensed under the GNU Public License (GPL) 3 or any later version. For more details, see the file LICENSE
that accompanies the program.
The source code for DPMIONE may be viewed as a web page,
or accessed directly by a Subversion (SVN) client
if you have one on your local machine.
The program files dpmione.zip
may be downloaded from our FTP site.
To view the DPMI 1.0 specification, try one of the following links:
0.91 22 April 2004
- Fix bugs when loading as device driver.
- Provide partial DOS translation services for Virtual DMA Services
(VDS -- INT 4Bh).
0.90 9 February 2004
- Overcome bug in MS 16-bit linker (5.31) where their GP Fault handler
mistakenly assumes that the incoming LPM stack is 16-bit even though
they are a 32-bit client.
- Implement FORCELPM16 in DPMI.PRO in case there are other apps with
the same bug.
0.89 8 July 2003
- Fix bug where if in VM, but no VCPI host name match, program mistakenly
tries to enter PM as if in RM.
0.88 4 June 2003
- Workaround bug in WinME where it has effectively disabled INT
15h/AH=87h (Move Extended Memory BIOS function).
- Fix obscure bug related to marking a PDE as uncommitted.
- Implement SHAREDMEM=nnn in DPMI.PRO.
0.87 26 May 2003
- Remove debugging code which, were it encountered, would cause the
system to reboot.
0.86 17 May 2003
- Fix bug in DPMI function 505h (Resize Linear Memory
Block) when used on Expand Down segments.
- Increase size of TSR space to accommodate larger resident size of
- Fix bug in stack alignment when LPM stack selector pushed.
0.85 14 May 2003
- Initial release to public as beta