CYZE PRODUCTION
VOUS PRESENTE LE COURS SUR LES MICROPROCESSEURS ET LEURS FABRICANTS
Tél : (00229) 96 15 81 18 E-mail : cyze2002@yahoo.fr / cyze2002@hotmail.com
CYZE PRODUCTION
je disque_present
loop detect_disk_loop
disque_absent:
disque_present:
Une autre méthode, plus simple à mettre en uvre et plus rapide, mais moins sûre, est de tenter de détecter les
protocoles utilisés par les disques. Cette méthode est moins effcace car si un contrôleur n’existe pas, les valeurs
que les ports peuvent retourner dépendent des machines et peuvent être totalement aléatoires, et donc, pourquoi
pas, correspondre aux valeurs du standard sans qu’aucun disque ne soit présent.
De même, si un contrôleur existe mais n’est branché qu’à un seul disque, les valeurs seront les mêmes quel que
soit le disque sélectionné, comme s’il y avait deux disques.
On peut éventuellement combiner les deux en commençant par la deuxième méthode puis, pour les disques
détectés, en vérifant avec la première. Dans la plupart des cas, le disque existe vraiment et cette vérifcation est
donc assez rapide.
Obtenir quelques informations sur un disque
La commande 0xec permet d’obtenir des informations sur le disque ATA sélectionné. Cette commande n’a besoin
que d’une information : le disque sélectionné. En retour, elle envoie 256 mots (double-octets) sur le registre de
données (0x1f0, 0x170, 0xf0 ou 0x70).
Pour les disques ATAPI, il faut utiliser la commande 0xa1 et ne pas oublier que les valeurs retournées n’ont pas
toutes la même signifcation.
movw $PORT_HEAD_AND_DISK, %dx // 0x1f6, 0x176, 0xf6 ou 0x76
movb $HEAD_AND_DISK, %al // 0xa0 ou 0xb0
outb %al, %dx
movw $PORT_COMMAND, %dx // 0x1f7, 0x177, 0xf7 ou 0x77
movb $0xec, %al // ou 0xa1 pour les disques ATAPI
outb %al, %dx
movl $TIMEOUT, %ecx // Nombre de tentatives de lecture de l’état du contrôleur
movw $PORT_STAT, %dx // 0x1f7, 0x177, 0xf7, 0x77
wait_loop:
inb %dx, %al
andb $0xd8, %al // Contrôleur et disque
cmpb $0x58, %al // prêts à transférer ?
je transf » »
loop wait_loop
timeout: // Le disque n’est pas prêt