[Kos-dev] LBA qui marche !

Christophe kos-dev@enix.org
Sun, 17 Feb 2002 22:58:21 +0100


GRRRRRRRRRRRRRRRRRRR !!!!

CA FAIT DEUX FOIS QUE JE MAILE LA REPONSE SUR kos-dev@enix.org ET TOUT SE
PASSE COMME SI JE N'AVAIS RIEN DIS, C'EST QUOI CE BORDEL ???? COMMENT SE
FAIT-IL QUE JE NE RECOIS PAS EN RETOUR MES EMAILS QUE J'AI POSTE SUR
kos-dev@enix.org.

----- Original Message -----
From: <thomas.petazzoni@enix.org>
To: <kos-dev@enix.org>
Sent: Thursday, February 14, 2002 10:20 AM
Subject: [Kos-dev] LBA qui marche !


Salut,

Ca y est enfin, ca fait une semaine que j'etais dessus, mais j'ai
enfin trouve pourquoi ce foutu LBA ne fonctionnait pas !

En fait (comme d'habitude) c'est un bug vraiment, mais alors vraiment
tout con : pour l'envoi de la valeur sur le port Drive Register (qui
doit contenir la tete, et aussi un bit indiquant si on veut du LBA ou
non), je faisais ca :

outb(ATA_D_IBM
      (harddisk->device == MASTER) ? ATA_MASTER : ATA_SLAVE
     | head,
     ctrl->ioaddr + ATA_DRIVE);

Ce qui me semblait correct. Mais en fait l'operateur | est prioritaire
devant l'operateur ? et :, donc au lieu de parentheser comme ca (comme
je voulais) :

ATA_D_IBM | ((harddisk->device == MASTER) ? ATA_MASTER : ATA_SLAVE) |
head

La parenthesation se faisait comme ca :

(ATA_D_IBM | (harddisk->device == MASTER)) ? ATA_MASTER : (ATA_SLAVE |
head)

or ATA_D_IBM == 0xa0 != 0, donc equivaut  vrai.

La condition etait donc toujours verifiee, et on envoyait toujours
ATA_MASTER (soit 0) dans ce port la !

Donc en fait meme en CHS c'etait bugge : pour un cylindre donne, et un
secteur donne, je pouvais demander n'importe quelle tete, j'avais tout
le temps le meme secteur. C'est ca qui m'a mis la puce a
l'oreille. Pour l'instant je m'en etais pas rendu compte parce que les
infos sur les partitions sont toujours en debut de cylindre
(head=0). Mais des que j'ai commence a travailler sur la FAT ca s'est
vu !

Voila ca m'apprendra a vouloir jouer au
mega-programmeur-d'OS-qui-fait-des-expressions-de-la-mort-ki-tue !

Bonne journee,

Thomas
--
PETAZZONI Thomas - thomas.petazzoni@enix.org - UIN : 34937744
(Perso)      http://www.enix.org/~thomas/
(KOS)        http://kos.enix.org/
(Club LinUT) http://club-linut.enix.org

_______________________________________________
Kos-dev mailing list
Kos-dev@doors.enix.org
http://the-doors.enix.org/cgi-bin/mailman/listinfo/kos-dev