Why is my SATA drive recognized by DOS but XP requires drivers to see it?

I'm experimenting with a Sil3112 and Sil3114 PCI-to-SATA controller. These cards are recognized and are bootable by DOS and Windows 9x but not by the Windows XP installer.

I can get Windows XP to recognize SATA drives connected to this card if I install the drivers by pressing F8 during setup. But why is this necessary when DOS can see them without any drivers?

I have installed the latest non-RAID BIOS on both of these cards so it's not a RAID configuration problem. Attaching a drive with XP already installed will allow the system to reach the bootloader but the computer will blue screen as it tries to boot, presumably because these drivers are in fact missing.

Why does XP need these drivers?

enter image description here


The PC bios provides a software interrupt to access the hard drive(s) in 16 bit real mode. Drive controller cards can and usually do provide what is known as an "option rom" which hooks the interrupt to add support for the drives connected to the controller card.

DOS always uses these BIOS-provided routines to access the drives (unless you manually load a driver that overrides them).

Windows 9x had 32-bit drivers for common (at the time) types of hard drive, but if no 32-bit driver is available for a given drive it will fall back to switching to real mode to access the drives. This is not great for performance but it will at least allow the drive to be accessed.

The Windows NT line on the other hand has no support for switching back to real mode and using BIOS drivers. If it does not have a 32-bit driver for the controller it will not be able to use the drive.


Some SATA controllers have an IDE emulation mode, where they emulate a standard EIDE controller (which has drivers included in virtually every version of windows). This is particularly common where the SATA controller is integrated as part of the chipset but some standalone controllers may also support it.

I'm not 100% sure on the technical details though, IIRC traditional IDE controllers used fixed base addresses. I'm not sure if it is possible to have more than one such controller in a system with the second one having a non-standard base address. Most chipset controllers at least do seem to limit you to four drives (the number supported by one standard EIDE controller) when in IDE emulation mode.


Both DOS and Windows 98 use drivers that are attached to BIOS functions, and provided by an on-card ROM.

These are real-mode drivers that cannot be used by an operating system running in protected mode, so XP needs protected-mode drivers.

XP uses the real-mode drivers to load the protected mode drivers during boot, then switches mode. DOS never switches mode and therefore does not need separate drivers.