El caso es que estoy trabajando en el soporte para Disco Duro en mi SO, en principio solo quiero detectar los discos duros conectados y mostrar la lista en pantalla, el caso es que este código(no os dejeis engañar por los comentarios, lo he escrito yo):
int HDD_find_drives(){ outb(0x1F3, 0x88);//Write an "magic" number unsigned short status = inb(0x1F3);//Read the "magic" number to see if there is any drive if(status & 0x88){//One drive is connected printf("Dispositivos detectados\nHaciendo test extra\n"); outb(0x1F6, 0xA0);//Detecting Master primary driver sleep(1);//Wait unsigned short word = inb(0x1F7);//Read the data if(word & 0x40){//Drive is connected printf("Master primario detectada\n"); } outb(0x176, 0xB0);//Doing the same sleep(1); word = inb(0x177); if(word & 0x40){ printf("Slave primario detectado\n"); } printf("Test LBA completado con exito\n"); }else{//If not printf("No se han detectado dispositivos\n"); } return 1; }
Pero solo he conseguido hacerlo funcionar en Hardware real, con una máquina virtual simplemente obtengo el mensaje de que se terminó el test sin encontrar ningun dispositivo, tengo el Master primario configurado, pero no consigo que funcione. El caso es que quiero hacerlo funcionar para evitar tener que leer y escribir en el disco duro para evitar corromper nada de él.
EDIT: Si configuro el VirtualBox para que use el disco duro como Slave del IDE primario el codigo reporta que hay dispositivos, pero nunca me muestra el mensaje de Slave primario detectado.