DOSemu has a 80386 emulator on board.
Or at least in the sources. It doesn't seem to be in the DOSemu documentation so it seems that it is non-functional.
But it is always easier to fix something then to restart from scratch.
Imre
-----Original Message----- From: Nate DeSimone [mailto:desimn@rpi.edu] Sent: Wednesday, August 30, 2006 01:21 AM To: 'ReactOS Development List' Subject: Re: [ros-dev] (Free)DOS subsystem
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@adsl-64-217-116-74.dsl.hstntx.swbell.net To: "ReactOS Development List" ros-dev@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@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Hi, --- Imre Leber imre.leber@telenet.be a écrit :
DOSemu has a 80386 emulator on board.
Or at least in the sources. It doesn't seem to be in the DOSemu documentation so it seems that it is non-functional.
But it is always easier to fix something then to restart from scratch.
Like e.g. Windows ? Bad answer ;)
Kind regards, Sylvain Petreolle (aka Usurp) --- --- --- --- --- --- --- --- --- --- --- --- ---
Run your favorite Windows apps with free ReactOS : http://www.reactos.org Listen to non-DRMised Music: http://www.jamendo.com
Linux is not as well stable as it is told to. The proof is, mine has restarted two years ago, on the occasion of a power cut. - H. Eychenne
On Wednesday 30 August 2006 04:54, Sylvain Petreolle wrote:
Hi,
--- Imre Leber imre.leber@telenet.be a écrit :
DOSemu has a 80386 emulator on board.
Or at least in the sources. It doesn't seem to be in the DOSemu documentation so it seems that it is non-functional.
But it is always easier to fix something then to restart from scratch.
Like e.g. Windows ? Bad answer ;)
Not like Windows. The 386 emulator is used on systems that lack the vm86 system call. For DOSemu to run on an x86 platform *without* needing an emulator it needs a way to run the executable in a sandboxed x86 VM. In Linux on the x86 platform this is supplied by the vm86 syscall.
DRH
Kind regards, Sylvain Petreolle (aka Usurp)
Run your favorite Windows apps with free ReactOS : http://www.reactos.org Listen to non-DRMised Music: http://www.jamendo.com
Linux is not as well stable as it is told to. The proof is, mine has restarted two years ago, on the occasion of a power cut. - H. Eychenne
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Not like Windows. The 386 emulator is used on systems that lack the vm86 system call. For DOSemu to run on an x86 platform *without* needing an emulator it needs a way to run the executable in a sandboxed x86 VM. In Linux on the x86 platform this is supplied by the vm86 syscall.
In NT 32, use NtSetContextThread to set the VM flag in the EFLAGS register of the target thread while suspended. It's as simple as that. Presumably, you'd want to set the segment registers and EIP afterward. (NtSetContextThread disables segment register value validation if EFLAGS.VM is set on the target since setting e.g. CS=0008 would be legal then.)
NT does have a lot of special functions through NtVdmControl, but the core of V86 mode doesn't require it. NtSetLdtEntries is also important, for DPMI and Win16.
Melissa