NTVDM (NT Virtual Dos Machine) is a virtual machine which together with WOW16 provide running 16-bit apps in modern Windows versions.
A long while this component was missing, till community member Aleksandar Andrejevic offered his help for implementation. 16.06.2013 for him was created separate branch, where he implemented basic NTVDM components.
As of March 13, 2014 in NTVDM was implemented 486-compatible CPU-emulation, very basic video, basic memory management, basic sound, a 32bit BIOS, and 32bit DOS.
Quite a few things are still missing though, including in the previously listed features. For example, video support does not exist for VESA+ or EGA fonts. Sound only works via the internal PC speaker, not through an emulated SoundBlaster. The CPU emulator also does not have a floating point unit.
Previously, for run dos-apps, NTVDM was needed run manually. Now, thanks to work with CSRSS, NTVDM starts automatic, when you open 16-bit app. Later, CSRSS will also be responsible for deciding whether to start a new instance of NTVDM or reuse an existing one. The latter feature is especially important for Terminate and Stay Resident programs, which include a lot of games.
One thing to note about ReactOS NTVDM is that unlike Windows version ReactOS does not set the CPU into a 16bit emulated mode. This mode in theory reduces overhead compared to the emulation done by ReactOS, but CPUs these days are fast enough that performance should not be an issue. An advantage of ReactOS approach though is that our NTVDM is usable on 64bit x86 processors and potentially ARM processors as well.
06.05.2014 NTVDM was merged to trunk and since is being developed there.
- 17.04.2015 - mouse driver was added (
- 26.03.2015 - real support for DOS devices was added (
- 07.03.2015 - VDM Configuration Files was added (
- 06.07.2016 - VBE support was implemented
- 28.08.2016 - VESA support was implemented
A program information file (PIF) defines how a given DOS program should be run in a multi-tasking environment, especially in order to avoid giving it unnecessary resources which could remain available to other programs.
PIF is created after creating of LNK-file of DOS app or changing his properties.