Apparently it's possible to install Windows NT 3.1 in DOSBox and get it to run! Here's how: 1. Edit your dosbox.conf and make sure you have these settings: [dos] biosps2=true [keyboard] aux=true Windows NT 3.1 will not detect the AUX port if it does not see the BIOS reporting via INT 15h, apparently. The AUX port must be enabled. And finally, because the NT 3.1 AUX driver does not carry out the full PS/2 device initialization properly, you need DOSBox to default to streaming mode when reporting is enabled. NT 3.1 apparently does not send the command to enable streaming (leaves it in reporting mode). 2. Install MS-DOS 6.22 first. 3. Use MS-DOS to run the NT installer. 4. Shutdown DOSBox-X 5. Go into src/cpu/cpu.cpp and modify the top as follows: #define CPU_CHECK_EXCEPT 1 // #define CPU_CHECK_IGNORE 1 The NT kernel apparently requires exception handling to work properly before it will boot in DOSBox. 6. Startup DOSBox-X and let NT boot. It should make it to the graphical desktop. ---------------------------------------------------------------------- Observations about Windows NT and the keyboard controller: - NT uses INT 15h AH=0xC2 functions initially at boot up to detect PS/2 mice, but during the full 32-bit OS, uses I/O ports 0x60 and 0x64 exclusively. - NT calls INT 15h AX=0xC206 BH=0x00 (extended/read device status). I'm not sure what it does with it, since regardless of the return value it eventually asserts control of the AUX port and issues PS/2 mouse reset, set sample rate/resolution commands, and enable reporting anyway. - If the INT 15h call fails to eat the acknowledgement of commands (the 0xFA byte returning from the mouse or keyboard), NT's keyboard and mouse driver is liable to get some commands screwed up. In my case, it caused Windows NT to issue a command to read the 8042 command byte, then read back the ACK instead, modify it, and write THAT back to the command byte instead of the proper command byte value. The end result of course was that both keyboard and mouse did not work after that. - Windows NT modifies the 8042 command byte on startup to a value like 0x64, which curiously enough means to leave PS/2 port translation enabled, as well as leaving IRQ1 and IRQ12 disabled (from the 8042 controller's point of view). Yes, that's right: Windows NT doesn't use the keyboard controller's interrupt mode to receive data from the controller. I guess that's a positive in a way because it ensures that NT can continue reading the keyboard in case it does something stupid to get the controller wedged, but still... Oh, and according to debug dumps of the IO to the 8042 controller, Windows NT apparently doesn't bother to wait for the controller to signal the buffer is empty either. I guess the programmer assumed that, if it didn't use interrupts, and simply had the OS write data on a timer interval or something, that the interval would be long enough for the 8042 to drain it's buffers.