[Kos-dev] LBA qui marche !
Christophe
kos-dev@enix.org
Sun, 17 Feb 2002 22:48:58 +0100
Es-tu en train de me dire que tu n'as pas reçu mes deux emails qui te
conseillaient justement de mettre ces parenthèses !?!?!? putain ! je vais
massacrer quelqu'un là !!!!
----- 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