I did ask this on the ReactOS forum, but I thought I'd ask on the mailing list as well :)
How would I go about implementing a DOS subsystem? I used to use DOS for all my programming, even when Windows 95 and 98 were around. I used to mess with software interrupts (had a copy of Ralf Brown's interrupt list) to do things like read raw data from floppy disks etc.
I understand that Windows NT protects the hardware from direct access from non-kernel mode applications/drivers. How is this achieved? What prevents an application from simply executing an OUT or IN opcode? And what happens if an application attempts to?
I assume x86 CPUs have some form of mode... Protected mode?... that allows this kind of protection.
I also assume you can use normal DOS interrupts from a cmd.exe session in Windows. How does Windows use software interrupts? As when an IRQ is triggered, it causes the CPU to execute a software interrupt, what's there to stop usermode applications from stealing the system timer interrupt handler and thus break the kernel scheduling?
But basically, what I'd like to know is where I'd start for creating a DOS subsystem? Where do I start?
-Andrew