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).
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.
Well, just my opinions on the matter.
-ShadowFlare
On 8/29/06, Nate DeSimone <desimn(a)rpi.edu> wrote:
Not that I'm trying to rain on anyones parade, but it would be really
cool if for each program you could choose to run it in either an
emulation environment or in a V86 mode (ala WinNT NTVDM.EXE,) that way
older DOS games could be used.
Imre Leber wrote:
> -----Original Message-----
> From: Myria [mailto:myriachan@cox.net]
> Sent: Tuesday, August 29, 2006 10:14 AM
> To: 'ReactOS Development List'
> Subject: Re: [ros-dev] (Free)DOS subsystem
>
> I've wanted to write an NTVDM for ReactOS, but I'm not sure when I'd
ever
> have time.
>
> Windows NT's DOS subsystem, NTVDM, is a user-mode program that runs on
top
> of Win32. It runs DOS programs as Windows
processes, using v86 mode to
run
> the programs. DPMI programs are supported by
asking the kernel to
allocate
> LDT segments and running directly. (If you
write a DOS32 program and
know
> the correct addresses, you can call
MessageBoxW in user32.dll and it
will
> work.)
>
> This differs significantly from DOSBox, which is effectively a machine
> emulator rather than an API translator. DOSEmu, in comparison, is
> essentially the same design as NTVDM but for Linux.
>
> FreeDOS in DOSBox works very well, because the FreeDOS kernel is its
normal
> self and is unaware that it's inside a
VM. However, this doesn't work
for
> NTVDM/DOSEmu. In these, the FreeDOS kernel
will need to be heavily
> modified, particularly because the NT kernel handles file
I/O. Programs
> inside the virtual DOS environment use
illegal opcodes to talk to
NTVDM.
FreeDOS works just fine in DOSemu. Actually that is how it got debugged
by the
kernel maintainer who was also the DOSemu maintainer. But no code of
FreeDOS is actually special for DOSemu.
The invalid opcode handler is probably similar to int e6 in DOSemu. It
is an extra
API by which DOS software can use services of DOSemu.
What probably is needed is an implementation of the int 21 interface,
and maybe
others, in the V86 monitor.
For what I understood from reading a litle on the web is that it more or
less
works like this:
You have v86 code in the kernel. This can be mapped using memory paging
to point
to a certain address, where a DOS program is loaded.
When an interupt occurs, the V86 mode is exited (the only way a V86 task
can be
exited) and the V86 monitor, in this case ntvdm takes over. This
looks at the state of the interrupt and acts upon this. For example when
calling an int 16 function it may return the status of a key. After the
interrupt has been serviced the registers are loaded with the right values,
or memory is filled correctly, or something like that and the v86 task is
allowed to run until the next interrupt. Of course the software APIs can
also be serviced by the V86 monitor and this is probably what is done in
windows.
ntvdm is special in that, unlike DOSemu, it serves as the V86 monitor
for all the
V86 tasks running in the session.
Imre
> Melissa
>
> ----- Original Message -----
> From: "James Tabor"
<jimtabor(a)adsl-64-217-116-74.dsl.hstntx.swbell.net>
> To: "ReactOS Development List" <ros-dev(a)reactos.org>
> Sent: Monday, August 28, 2006 14:19
> Subject: Re: [ros-dev] (Free)DOS subsystem
>
>
>
>> Imre Leber wrote:
>>
>>> Hi,
>>>
>>> I guess i am new to this list.
>>>
>>> I have been a maintainer on the FreeDOS project for more then 7
years.
>>>
>>> I have also noticed that you are still looking into building a DOS
>>> subsystem in reactos.
>>>
>>> After the release of FreeDOS version 1, I would like to see wether I
>>> could not take up the task to having it running under reactos.
>>>
>>> My main idea involves using a port of DOSemu.
>>>
>>> Is there any documentation regarding the running of a DOS subsystem
in
>>> windows that I should study
beforehand?
>>>
>>> Imre
>>>
>>>
>>>
>> Hi Imre!
>> Welcome to ReactOS! 8^D
>>
>> The idea is still open.
>>
>> We've tested Qemu under ReactOS running FreeDOS at one time and it
does
>> work. Another project that
>> was tested, DOSBox, it works like DOSemu,
http://dosbox.sourceforge.net/
>>
>>
>> Running a dos-subsystem and docs? Maybe one of the other developers
can
>> help here. You can look at
>> the OS2 subsystem at
http://svn.reactos.ru/svn/reactos/trunk/os2/ ,
it's
>> incomplete, this would be
>> your best starting point. There is allot more to it. You need to dive
into
>> the code and start
>> reading. I do not recall any docs or books dealing with rolling your
own
>> subsystem. The best book
>> you can get for understanding Windows or ReactOS is, Windows
Internals.
>> Understanding the Csrss
>> subsystem would help with the os2 one.
>>
>> Anyway, some projects that could be good examples on how to do this,
Posix
>> subsystem,
>>
http://sourceforge.net/projects/winntposix ,and running linux bins in
>> windows,
>>
http://sourceforge.net/projects/keow . One of our developers is
currently
working with CoLinux,
http://www.colinux.org/ .
Sorry I couldn't help you more here.
Thanks,
James
_______________________________________________
Ros-dev mailing list
Ros-dev(a)reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev
_______________________________________________
Ros-dev mailing list
Ros-dev(a)reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev
_______________________________________________
Ros-dev mailing list
Ros-dev(a)reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev
_______________________________________________
Ros-dev mailing list
Ros-dev(a)reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev