A while back Aleksander Andrejevic began working on a NTVDM implementation for ReactOS to support 16bit programs. This was one of the more often requested features by the community, which was met with some ambivalence by the developers themsleves since it entailed a significant amount of work. Aleksander then appeared and instead of simply asking for the feature, rolled up his sleeve to do the actual work. Since then NTVDM has made significant progress and other developers like Hermès Bélusca-Maïto and community member Vampyre have joined in to help. This post will give a brief summary of what work has been completed and what remains to be done.
NTVDM is composed of quite a few pieces and is in effect a virtual machine in its own right, tightly integrated into the operating system to provide a seamless experience. For NTVDM, emulation support has been implemented for a 486-compatible CPU, 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.
Other missing bits revolve around the actual integration with the operating system. Right now to run a DOS program NTVDM must be called explicitly by a user to start the program. The end goal is for users to be able to simply click on a program and have NTVDM automatically start. This requires some work in the CSRSS, which 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.
Overall NTVDM has seen significant progress over the past year and there is an expectation that it will soon be ready for merging back into trunk. Even then it will not be complete, but at least then it should be easier for interested testers to play around with it.