Open 16-bit DOS applications natively on 64-bit Windows using NTVDMx64

5.00 avg. rating (94% score) - 1 vote

Running 16-bit DOS applications natively on 64-bit versions of Windows without the use of an emulator such as DOSBox is officially not supported, as the NT Virtual DOS Machine (NTVDM) is only present on 32-bit builds of Windows. Nevertheless, thanks to NTVDMx64 by Leecher1337, it is now once again possible to run your favorite DOS games such as Prince of Persia on your latest computer running Windows 11. All you have to do is to download the installer, run install.bat (as administrator), reboot Windows, and double click your favorite DOS .EXE file. There is no need to launch DOSBox or mount any drives. Here is a screenshot of PRINCE.EXE running on Windows 11:


NTVDMx64 is compiled from the patched leaked source code of Windows NT and only the patches (not the full source code) can be found on its github repository. My copy of NTVDMx64 was downloaded from this page and works well on all 64-bit versions of Windows from Windows 7 till Windows 11.

Why would you want to do this instead of just running DOSBox? For one, the executed .EXE file has full access to the files on the host computer, and not just the mounted drives. It can also access the ports (serial or parallel) of the host PCs, making printing to a parallel printer or sharing data via serial port much easier. Unlike the NTVDM that comes with 32-bit Windows, a Sound Blaster 2.0 card is emulated and in-game audio sounds great. Long file names are supported too, as can be seen in the following screenshot of Norton Commander 5.51:



Several commands that are only supported on 32-bit versions of Windows (e.g. for 16-bit DOS) such as EDIT, MEM, DEBUG, … are once again available. For example, here is a screenshot of MS-DOS DEBUG running on Windows 11:


In a recent Windows 11 update, the legacy 80×25 console has been replaced by the Windows Terminal and many legacy features were removed. This introduces some behavior changes in NTVDMx64. If a legacy DOS command only produces output and exits immediately, executing it from the Windows prompt will simply result in a popup window which exits immediately. To see the result, you must pipe it into the output of the Windows terminal. Here is a screenshot of the MEM | MORE command, displaying available emulated DOS conventional memory:


You can tell that NTVDMx64 is emulating MS.DOS 5.0 as there are no thousand separators in the output of MEM. This is more evident by running VER from a DOS shell within Norton Commander:


Not everything works, however. For example, Terminate and Stay Resident (TSR) software will not work because each application is started on a different instance of NTVDMx64, unless you launch the application from within something like Norton Commander. Also, as there are many ways to run an .EXE file within Windows, certain method to launch an .EXE file might not be covered by the NVDMx64 loader and will not work. For example, if a 32-bit application starts a 16-bit DOS .EXE file via CreateProcess, the scenario will not be supported.

This is the screenshot of HWINFO showing a 486 PC with 32MB RAM being emulated. The software tries to customize the VGA font to nicely draw the dialog boxes, which is unfortunately not supported by NTVDMx64:


Despite these limitations, most of my favorite DOS software including games work fine and I enjoy being able to start these apps just by double-clicking on it. I would definitely recommend you install NTVDMx64 and give it a try. If you do, remember to disable your anti-virus software during the installation (you can re-enable later) as the NTVDMx64 installer uses non-standard techniques and will not work if an anti-virus software is running.

5.00 avg. rating (94% score) - 1 vote


A tough developer who likes to work on just about anything, from software development to electronics, and share his knowledge with the rest of the world.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>