views:

69

answers:

2

I am doing some OS experiment. Until now, all my code utilized the real mode BIOS interrupt to manipulate hard disk and floppy. But once my code enabled the Protect Mode of the CPU, all the real mode BIOS interrupt service routine won't be available. How could I R/W the hard disk and floppy? I have a feeling that I need to do some hardware drivers now. Am I right? Is this why an OS is so difficult to develop?

I know that hardwares are all controlled by reading from and writing to certain control or data registers. For example, I know that the Command Block Registers of hard disk range from 0x1F0 to 0x1F7. But I am wondering whether the register addresses of so many different hardwares are the same on the PC platform? Or do I have to detect that before using them? How to detect them??

Since I am not sure about how to R/W floppy or hard disk in Protect Mode, I have to use the BIOS interrupt to load all my necessary kernel file from floppy into memory for now. But I am wondering what could I do if my kernel file exceeds the real mode 1M space limit?

For any responses I present my deep appreciation.

A: 

Programming ATA-PIO Mode http://wiki.osdev.org/ATA_PIO_Mode IDE Devices: http://wiki.osdev.org/IDE

Floppy Drives: http://wiki.osdev.org/Floppy_Disk_Controller

I encourage you to register at OSDEV forum, the community is very helpful and polite, even for newbies.

Hernán
Thanks Hernan. I will do that.
smwikipedia
+1  A: 

You don't necessarily HAVE to write drivers. You could drop back into real mode to call the BIOS service, and then hop back into protected mode when you're done. This is essentially how DPMI DOS extenders (DOS4GW, Causeway, etc) work.

The source code for the Causeway DOS extender is public domain, you can look at that for a reference. http://www.devoresoftware.com/freesource/cwsrc.htm

msemack