Basic

Question de Bruno.Veys <Bruno.Veys@wanadoo.fr> émise le vendredi 28 août 1998.
Objet : Détecter les unités logiques avec QB45.

Je cherche à déterminer le nombres de disques durs sur un PC. Actuellement,  je lis le vecteur 0040h:0075h [def seg=0, (peek(475h)) en QB45 et j'obtiens bien mon nombre de disques durs. Hors, je pense que ce vecteur n'est pas standard et qu'il peut être différent sur un autre PC (cause bios). Le problème se pose aussi quand un disque est partitionné. Je ne sais pas si ce vecteur est correct, mais je crois qu'il n'indique pas le nombre de partition. Il y a bien le 1er secteur physique du DD offset 01EEh (partition 1)  01DEh (part 2)... Est-ce bon et comment y accède-t-on ? L'interruption 13h ne me paraît pas génial. Il y a-t-il un moyen plus propre que de tester des unités (de A...à  Z), car ça oblige a priori à contrôler aussi les erreurs, quand ça ne plante pas... Enfin si vous aviez une solution propre à me donner...

Salut Bruno,

    Je vois que tu utilise les informations contenue dans le bloc de donné du BIOS (Segment 40h) pour connaître le nombre de disque dur sur l'ordinateur. Mais cette méthode dépend en faite si l'ordinateur est AT ou XT, du contrôleur de disque(tte) et du BIOS. Ce n'est donc pas forcément très sûr.

    Je te propose d'utiliser les interruptions du DOS (Int 21h) pour résoudre ton problème. La démarche est la suivante. Tu récupère le nombre d'unité logique activable. Se nombre est défini par la commande LASTDRIVE dans le fichier de configuration. Puis, tu teste l'ensemble de ces unité logique pour vérifier leurs validité (attribution a une unité physique).

Int 21h Ah=19h Lecture de l'unité logique par défaut (lecteur actif).
Int 21h
Ah=0Eh Dl=??

Active une unité logique et retourne le nombre de lettre logique déclarer par la commande "LastDrive". Il faut savoir, qu'il y a au moins 5 lecteurs.

Int 21h Ax=4408h Bl=??

Control si l'unité est amovible. Si au retour, CF=0, il n'y a pas d'erreur, et donc AX = 0 pour amovible, et 1 pour fixe. Dans le cas contraire, CF=1, est AX représente l'erreur.

Est-ce qu'un réseau est amovible ? Dans la plus part des cas c'est vrai. Sous DOS, je n'en sais rien. Je pense que de toute façon pour accéder au réseau sous DOS, le programme MSCDEX (MicroSoft CommanDer EXtension - je ne sais plus pour "CD") devra être exécuté. L'ensemble des informations relatives aux interruptions du DOS sont fournit par les fichiers : Inter39a, Inter39b, Inter39c, Inter39d, et aussi inter40d.

Regarde dans le programme MATERIEL.PAS, tu aura les réponses sur la façon de procéder.


Dernière mise à jour : mercredi 14 mai 2008