Virtual DOS machine

[1] When a DOS program running inside a VDM needs to access a peripheral, Windows will either allow this directly (rarely), or will present the DOS program with a virtual device driver (VDD) which emulates the hardware using operating system functions.

Although with the E-1 stepping Intel started to address the issues in August 1985, so that Digital Research's "8086 emulation mode" worked again utilizing the undocumented LOADALL processor instruction,[3][4] it was too slow to be practical.

Eventually, Concurrent DOS 286 was reworked from a potential desktop operating system to become FlexOS 286 for industrial use in 1986.

A redirector in a "guest" VDM or NTVDM allows access on the disks of the OS/2 or NT "host".

[18] Due to a technical limitation, DOS and 16-bit Windows applications under OS/2 were unable to see more than 2 GB of hard drive space;[19] this was fixed in ArcaOS 5.0.4.

NTVDM emulates BIOS calls and tables as well as the Windows 3.1 kernel and 16-bit API stubs.

Since virtual 8086 mode is not available on non-x86-based processors (more specifically, MIPS, DEC Alpha, and PowerPC) NTVDM is instead implemented as a full emulator in these versions of NT, using code licensed from Insignia's SoftPC.

[26] Prior to Microsoft's release of a security patch, the workaround for this issue was to turn off 16-bit application support, which prevented older programs (those written for DOS and Windows 3.1) from running.

[27][28] Once the Microsoft security patches had been applied to the affected operating systems the VDM could be safely reenabled.

[nb 2] A limitation exists in the Windows XP 16-bit subsystem (but not in earlier versions of Windows NT) because of the raised per-session limit for GDI objects which causes GDI handles to be shifted to the right by two bits, when converting them from 32 to 16 bits.

[29] In general, VDM and similar technologies do not satisfactorily run most older DOS games on today's computers.

NT-family versions of Windows only update the real screen a few times per second when a DOS program writes to it, and they do not emulate higher resolution graphics modes.

Because software mostly runs native at the speed of the host CPU, all timing loops will expire prematurely.

This either makes a game run much too fast or causes the software not even to notice the emulated hardware peripherals, because it does not wait long enough for an answer.

[35] A VDM is included in Wine and CrossOver for Linux and Mac OS X, known as WineVDM (also known as OTVDM).

COMMAND.COM running in the NTVDM of Windows 10