Anuncios Google

Problema detectando HDD's en modo LBA48/LBA28 via PIO

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.



Anuncios Google