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
cmpb %bl, %al
jz no_adapter
jmp adapter_found
no_adapter: // contrôleur absent
adapter_found: // contrôleur présent
Détecter les disques
La détection des disques installés sur un contrôleur est plus délicate.
Une méthode est d’envoyer une commande au disque et d’attendre. Si la réponse tarde trop, on suppose que le
disque testé n’existe pas. Cette méthode n’est sûre que si l’attente est suffsamment grande. Il faut faire attention à
la commande que l’on choisit. En effet, selon que l’on veut détecter uniquement les disques ATA, ATAPI ou les
deux, il faut choisir la commande qui corresponde. En choisissant la commande 0xec et en attendant que le
contrôleur soit prêt à recevoir des données, les disques ATAPI répondront mais ne seront jamais prêts pour un
transfert. Le programme déduira donc que le disque n’existe pas.
En fait, avec cette méthode, il faut bien choisir la commande à envoyer et le résultat qu’on en attend.
movw $PORT_HEAD_AND_DISK, %dx // 0x1f6, 0x176, 0xf6 ou 0x76
movb $HEAD_AND_DISK, %al // 0xa0 pour tester le maître, 0xb0 pour l’esclave
outb %al, %dx
movw $PORT_COMMAND, %dx // 0x1f7, 0x177, 0xf7 ou 0x77
movb $COMMAND, %al // Commande à utiliser (on pourra utiliser par exemple la commande 0xec, ce qui permet
du même coup de lire les informations du disque s’il est présent, dans ce cas, il ne faut pas oublier d’ajouter le
code nécessaire à la récupération de ces informations)
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
detect_disk_loop:
inb %dx, %al
andb $0xfe, %al // Contrôleur et disque
cmpb $0x50, %al // prêts ?