Cyze production vous presente le cours sur les microprocesseurs


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

Laisser un commentaire