I found this using google to search news groups. It's a rather lengthy chunk, but I found it rather interesting and informative. Priv1 will never run on xp without an emulator or being re-written
- DOS Protected Mode Interface (DPMI)
It is a quasi-32-bit programming model that DOS programs can be
written to. [ I can't remember the software interrupt functions
that provide it, something like 83h??? ]
- 386 Processors and Ring 0 "Management"
A DPMI "manager" handles putting the 386+ processor in "protected
mode" handling the all-important/critical "ring 0" of the 386+
processors MMU (memory management unit). A DPMI "program" must make
use DPMI function calls to use those services, and *NOT*
access/reprogram the processor directly. So, _multiple_ DPMI
programs _can_ be running simultaneously, with the DPMI "manager"
handling all the protected mode switching of the processor.
- DPMI co-existance with DOS memory extensions
In addition to DPMI services, most DPMI "managers" can easily
provide for programs that use:
- Regular "Real Mode"
Normal 20-bit 8086 addressing, upto 1MB (640KB actual)
Of course ;-P
- Extended Memory Specification (EMS, 24-bit 286+)
24-bit 80286/16-bit ISA-hardware-based addressing,
upto 16MB.
Maps 1MB+ blocks into sub-1MB space, for
20-bit 8086 compatibility.
- eXtended Memory Services (XMS)
24/26/32-bit, 286/386 addressing, upto 16/64/+MB
Accessing 1MB+ via either _physical_ BIOS Int15h
XMS hardware (286+), or various 386+ MMU (memory
management unit) techniques in software
(pre-empty physical BIOS Int15h)
Many 386+ memory managers could also provide EMS c/o XMS via
software, thanx to the 386's MMU. EMS was provided "as demanded"
and simply "ate away" from available XMS memory as allocated.
These techniques are just "memory access" methods. The idea is that
the program is using these "services" to get extra memory, and NOT
trying to "reprogram/manage" the CPU's protected modes. Some
programs that require EMS/XMS actually *DO* try to access the CPU's
protected modes, and then the manager can "fail." Some managers can
"unload temporarily" and "give up" 'ring 0' control, but as long as
no DPMI programs (or other "tricks") are running.
- Windows 3.x and 95/98 (4.x)
Windows 3.x and 4.x (aka Windows 95/98) was also written to
"co-exist" with a DPMI manager (although it required some
"concessions" on the DPMI server's part). HIMEM.SYS could provide
several models, semi-dynamic, for XMS/XMS+EMS (standard) and, later,
DPMI w/XMS+EMS (386 Enhanced).
This is an _over-simplification_, which requires some "attention" on
the part of the DPMI manager (like HIMEM.SYS or a 3rd party one),
but it is some what of the "gist" of it. If fact, several of
Microsoft's _own_ utilities that used XMS routinely "took issue"
with Windows. SMARTDRV.EXE was one utility where Microsoft _failed_
to write certain functions correctly (like the all-important Int3Fh
"warm boot").
- 286/386+ Ring 0 "extenders"
As such, DPMI canNOT co-exist (at least not residently) with "DOS
Extenders" that use a variety of non-standard ways/methods to *DO*
touch "ring 0". The most infamous is:
- Virtual Control Program Interface (VCPI)
24/26-bit 286/386 addressing, upto 16/64MB
Accessing 1MB+ directly, usually can only co-exist
with mainly real-mode programs/TSRs
(limited EMS, if at all, no XMS at all)
VCPI is only good for 1 program at a time, because the "program"
(NOT a VCPI "manager") is in control of "ring 0" (unless the
programs _all_ agreed on how to do VCPI -- which was a per-vendor
thing). DPMI was eventually introduced as the VPCI "replacement,"
as it introduced a "manager" for ring 0.
- DeskView, PharLap, QEMM386 VCPI Usage
QuarterDeck's DeskView, Most PharLap extenders (and the programs
that used them) and countless older games use VCPI. Some memory
managers that got excellent >640KB "packing" used VCPI to do so.
QuarterDeck's QEMM386 was one such program, and DeskView took
advantage of its VCPI control (and had an API so programs written
for Ring 0 could "co-exist").
- 386Max's "dynamic" DPMI loading, VCPI compatibility
My favorite extender was always 386Max. You _could_ do some of the
stuff QEMM386 did, but it stuck with a "dynamic" DPMI manager by
default, and "got out of the way" of VCPI. It provided some DPMI
TSRs in later version, but if you used them, it, of course, kept
VCPI from working. The idea was it would give you the "maximum
memory" that was "maximum compatible."
- DR-DOS' DPMI-based DMPS, Task Switching
DR-DOS took this further in 6.x+. They introduced DPMS, an API for
DOS Protected Mode Services. It was a documented way for not just
TSRs, but multiple programs to run simultaneously/task-managed via
DPMI. But it still worked with most any programming/memory model
programs, except for things like VCPI.
- DR-DOS 7.x Can Replace MS-DOS 7.x In Windows 95/98
DR-DOS 7.x was modified so it could _completely_replace_ the MS-DOS
7.x subsystem in Windows 95/98. This eventually led to Caldera
re-opening a private lawsuit, originally started by Digital Research
(but before Novell's purchase of them), over "anti-competitive
behavior c/o illegal product bundling".
- Note on Windows 95/98 VCPI Compatibility
Again, Windows 95/98 are nothing more than MS-DOS 7.x and Windows
4.x bundled in one product (Windows ME is a horrendous/failed
experiment that ripped out some of the DOS interfaces, and
compatibility ;-). Windows 95/98 can drop down to "DOS Mode" (i.e.
no memory manager, possibly just "basic" HIMEM without DPMI and/or
XMS/EMS) for ring 0 access (so VCPI programs can run).
- DOSEmu on Linux, DPMI/XMS/EMS support
In Linux, DOSEmu itself provides the DPMI services, as well as
EMS/XMS. It's good enough that you _can_ run DR-DOS' DPMS
support/goodies, including the TaskMgr. But like any other memory
manager that forbids ring 0 access, VCPI and similiar programs won't
run.
- NT's NTVDM, WOW Sessions
In NT (Windows NT, 2000, XP), the NT Virtual DOS Machine (NTVDM)
also provides DPMI/XMS/EMS. Like Linux, ring 0 access is denied, so
no VCPI). Depending on the NT version/configuration/setup, 16-bit
Windows programs can run on a 16-bit Windows on 32-bit Windows (WOW)
session under a "shared" NTVDM session, or their own, protected
NTVDM session.