Charger n octets en mémoire

Signaler
Messages postés
2
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2007
-
Messages postés
142
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
29 janvier 2016
-
Bonjour;
je veux savoir comment lire n octets depuis un flash disque puis les charger en mémoire en utilisant les intérruptions bios en mode réel (16 bit)?

4 réponses

Messages postés
142
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
29 janvier 2016
1
Salut<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





Comme, à priori, on ne connaît pas la géométrie du disque, il faut utiliser la fonction 42h de l’int 13h





Cette fonction demande le numéro du disque sous la forme 128 +n  (n=0 pour le disque C ,1 pour D etc.





Le numéro du premier secteur qui va de 0 à nombre total de secteurs moins 1   





Le nombre de secteurs consécutifs à lire et l’adresse où ranger leur contenu





Ces informations sont transmises au bios à l’aide des registres et d’une table de la manière suivante:





AH=42h (numéro de la fonction)





DL=128+numéro du disque





SI= Adresse de la table





Cette table a la structure suivante :





Table db 16 ; taille de la table






 Db 0 ; réservé






 
 Db ? ;( nombre de secteurs à lire)






 Db 0 ; réservé






 Dw ? ;(offset du buffer)





Dw ? ;(segment du buffer





Dd ? ; Numéro du premier secteur
Est-ce suffisant?
Messages postés
2
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2007

Salut
Merci avant tout pour votre réponse, mais j'ai une petite interrogation consernant le continue de registre DL?
Explication:
le registre DL doit contenir le numéro de lecteur en question(C: D: ...etc), mais le problème ici que je travail avec une flash disque USB et pas un disque dur, et les valeur 80h et 81h  ...etc disigne les partitions c: d: ...etc de disque dur et non pas du flash disque usb?

voila les conditions que je travail sous les quels pour vous donner une meilleur idée sur mon problème:

- j'ai un disque dur qui est dévisé en deux partitions C: et D:
- je veux modifier le programme de MBR (qui se trouve sur le secteur 1 de disque dur) pour qu'il puisse démarrer sur le flash disque USB.
- pour faire ça, il faut donc créer un programme puis l'installer sur le MBR.
- ce programme doit faire les étapes suivantes:
             - lire les premier 1024 octets qui contient le programme de       démarrage sur le flash disque usb.
             - les charger en mémoire dans une adresse bien définie
             - faire un jump vers l'adresse pour continuer l'exécution.

Problématique:
lors de démarrage, le BIOS détecte la présence de la clé usb, lui affecte une adresse unique(générallement entre FF80-FF9F
) et récupère tous les informations qu'il à besoin dans une zone mémoire que je ne sais pas son adresse ni sa structure.

je veux savoir s'il y a une interruption qui me permet de lire 1024 octet à partir de flash disque usb ou s'il est possible à travers les fonctions IN et OUT de l'assmbleur en utilisant les adresses du port usb(FF80-FF9F
)?

merci.
Messages postés
142
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
29 janvier 2016
1
Salut.
Il s'agit donc de charger un système à partir d'une clef Usb. C'est selon les cas d'une simplicité enfantine mais le plus souvent laborieux et parfois même carrément impossible.
 1. La clef doit être du type "bootable". Il en existe, par exemple chez Cruser   dont les "premiers "secteurs"  sont placés d'office en lecture seul. Un test avec diskedit de chez Borland montre que ces clefs non seulement négligent l'ordre d'écriture mais ne se donnent même pas  la peine de le signaler par un message d'erreur.
2. Le Bios doit "connaître" le  port USB. Mais cette connaissance est souvent très limitée: il accepte (événtuellement) les clefs de type floppy ou Omega Zip. Mission impossible si la clef a été formatée avec Windows donc avec un MBR dans le secteur 0  alors que le bios veut le traiter comme le boot d'une disquette. 
 3. Un premier pas qui me parait essentiel c'est de pouvoir utiliser dans Msdos,  à l'aisde d'un pilote  *.sys approprié  une clef  recconue par Windows. Par exemple avec   device=usbaspi.sys. Mais il arrive que ce pilote détecte la clef, parfois en y mettant le temps,  lui attribue une lettre et que cependant la commande " dir n: " échoue totalement.
4. Une explication des problèmes rencontrés se trouve peut-être dans le fait que l'USB se défini par un empilement de couches . marérilles et logicielles.  Si les connecteurs et cables, niveaux et formes des signaux  sont parfaitement définis il faut encore que le PC et la Clef utilisent le même protocole.
5. Personnellement j'ai fini par adopter  la solution la plus simple: changer de carte mère pour une plus récente dont le bios permet de choisir n'importe quel périphérique et utiliser une clef accompagnée d'un mini CD contenant les utilitaires nécessaires (JetFlash par exemple). Pour des raisons de copyright il faudra lui signaler où trouver le système à utiliser.
Je serais heureux que les différents points donnent lieu à discussion ou approfondissement. 

Amicalement
Messages postés
142
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
29 janvier 2016
1
Un  point que j' ai oublié: la clef doit être directement connecté au PC  ou alors il faut que le bios puisse géré le Hub.