[ros-dev] (Free)DOS subsystem

Myria myriachan at cox.net
Thu Aug 31 06:18:27 CEST 2006

> Hmm, I'm not sure if it is really even necessary to directly support DOS
> programs.  One thing I thought of that I should mention here is that
> Microsoft doesn't even support DOS programs at all with their latest 
> Windows
> versions (Windows XP and Server 2003 x64 Editions).  However, that isn't
> really a problem since there are alternatives to Windows' DOS support 
> (which
> wasn't really even that great in some ways in Windows 2000 or XP to begin
> with anyway).

The 2 main reasons to bother with them are to support old games and install 
programs.  DOS application programs like WordPerfect 5.1 have long since 
been replaced.  Games, however, never really become obsolete.

I think a large part of why Windows didn't run DOS programs too well was 
that they didn't implement what games needed.  Games need Sound Blaster, 
VESA, and joysticks.  These can be done, but they didn't bother.  I'm not 
blaming Microsoft - I doubt that spending time on it would've helped their 
bottom line.

> I don't know why, but for some reason I'm thinking it would just kind of 
> be
> a waste of time to implement NTVDM for ReactOS if the developers working 
> on
> it would be able to work on other parts of ReactOS.  Hmm, it might be at
> least somewhat worthwhile to work on a NTVDM alternate that could run on
> both ReactOS and Windows (possibly even x64 editions), though.

NTVDM is basically a "marketing" project.  If eventually ReactOS runs old 
DOS games better than NT, then that becomes a "selling" point.  Of course, 
that's a long way off...

NTVDM for Win64 is basically impossible for exactly one reason: Win64 x86-64 
does not implement the LDT.  It does "xor eax, eax \ lldt eax" during 
startup and that's the end of it.  NtSetLdtEntries is a stub, the trap frame 
doesn't have an LDT field, and the context-switching code does not have code 
to switch LDT values.

If you tried to implement it by patching the kernel, you'd run into 
PatchGuard.  If you break PatchGuard, your code would only work until the 
next second Tuesday.

Finally, even if you got around PatchGuard, Vista64 requires drivers to be 
signed, and such a system is antithetical to open-source.  People wouldn't 
be able to compile and run the code themselves (unless they used test 
signing, which would disable playback of HD-DVDs).

The issue that V86 mode doesn't work in Long Mode isn't a big deal.  Modern 
machines can run the programs that ran in real mode in an emulator faster 
than they ran on their original hardware.  DOS32 games require more 
performance, but you can run those directly.

> Well, just my opinions on the matter.
> -ShadowFlare


More information about the Ros-dev mailing list