IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Int 13h et formatage de disquette 2D


Sujet :

Assembleur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Par défaut Int 13h et formatage de disquette 2D
    Bonjour à tous.

    Voila je voudrais lire un secteur quelconque sur une disquette. (avec int 13h)

    Pour cela j'ai fait un petit .COM, j'entre mon n° de secteur/piste/tete etc et ça lit le secteur en question et le balanche dans un fichier sur le disque dur.

    Tant que j'utilise des disquette formattées par MS-DOS, tout va bien.

    Maintenant, je voudrais faire la meme chose mais sur une disquette formatée en Double densité, (et avec des numéros de secteur tordus au passage). Et la, l'int 13h n'y arrive pas.

    Puisqu'il s'agit d'une int BIOS, je me suis dis: le BIOS gère par défaut la simple densité (1.44Mo), donc si je mets une double densité pour mon lecteur disquette (720Ko) dans les paramètres BIOS, ça va marcher.
    Hélas, pas mieux....

    Evidemment, une solution pourrait consister à réécrie l'équivalent de l'int 13h pour les disques à DD, mais je ne m'en sens guère le courage, d'autant que d'autres solutions doivent exister? Hein?

    J'attends vos idée et suggestions!!!
    Merci.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 996
    Billets dans le blog
    2
    Par défaut Re: Int 13h?
    Bonjour !
    Citation Envoyé par Masterglob
    Maintenant, je voudrais faire la meme chose mais sur une disquette formatée en Double densité, (et avec des numéros de secteur tordus au passage). Et la, l'int 13h n'y arrive pas
    Il y a pourtant moyen de faire pas mal de choses avec l'Int 13h ?
    Quand tu parles de numéros de secteurs tordus, comment formates-tu ta disquette ?

    "Dans le temps", lorsque je devais protéger des softs sur disquette contre la copie, je formatais les disquettes avec, par exemple, un secteur supplémentaire sur une des pistes; le programme testait l'existence de ce secteur supplémentaire et refusait de se lancer s'il n'existait pas. Mais c'est moi qui formatais la disquette (avec les numéros de secteurs tordus) avec les services de l'Int 13h et cela n'a jamais posé de problème.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Par défaut
    Les secteurs sont (dans l'ordre physique):
    41h 46h 42h 47h 43h 48h 44h 49h
    ou
    C1h C6h C2h C7h C3h C8h C4h C9h
    ou
    41h 53h 42h 54h 43h 55h 44h 56h

    Je ne savais pas si l'erreur venais des n° de secteurs ou de la double densite. D'après ce que tu dis c'est plutot à cause de la densité. Au niveau in/out, ce ne sont pas les mêmes commandes qui doivent etre effectuées, et il faut parametrer autrement le lecteur pour que ca marche en DD. Ca pourrait expliquer pourquoi le BIOS a du mal, non?

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 996
    Billets dans le blog
    2
    Par défaut
    Il me semble que c'est le contrôleur de disque qui rechigne, pas le BIOS.
    Peux-tu décrire un peu plus le format exotique de disquette : nombre de pistes, secteurs par piste (8 si j'en crois les n° de secteurs que tu as écrits) ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Par défaut
    Alors:

    C'est un format "classique" sur les machines 8bits:

    80 pistes (0 à 79, en pratique seules 0-39 sont utilisées.)

    chaque piste est découpée en 9 secteurs &41 à &49 (pas dans l'ordre logique pour des raisons de rapidité d'accès) ou &C1 a &C9 (on peut oublier l'autre format pour l'instant c'est juste un cas particulier sur certaines piste (protection contre la copie).

    sinon c'est classique: 200h octets/secteur.

    Mais c'est de la double densité, donc ça peut influer sur le GAP3 (peut etre incoherent avec celui par defaut du BIOS? En effet comme mon BIOS n'a pas de config DD pour 3"1/2 mais uniquement sur 5"1/4,les valeurs des GAPs ne sont pas les mêmes)

    J'ai vu quelque part qu'on pouvait changer les paramètres du FDC. ca devrait pouvoir m'aider. reste à retrouver ou c'était (certainement pas loin!)


  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 996
    Billets dans le blog
    2
    Par défaut
    As-tu essayé plusieurs valeurs de longueur de gaps ?

    L'adresse de la table des paramètres de formatage est contenue dans le vecteur d'interruption 1Eh; la longueur de gap se trouve à l'offset 07h dans la table.

    Une longueur de gap de +/- 50h devrait convenir pour 9 secteurs par piste.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Par défaut
    Bon finalement, je vais m'y prendre autrement.

    J'oublie les int 13h ou autre et je passe au out/in, le tout intégré dans une interface delphi, ca sera bien plus simple à débugguer...

    Pour l'instant ca marche pour la phase de commande et la phase de résultat, mais il me reste encore à voire comment traiter la phase d'exécution (DMA/non-DMA?).

    En tout cas j'arrive à exécuter la commande qui permet de lire les ID d'une piste (n° de secteur/taille)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Par défaut
    A propos de l'edition de la table pointée via l'interruption 1Eh:

    J'ai lu qelque part que le BIOS connait deja un certain nombre de tables préenregistrées.

    Comment est-il possible de récupérer ces tables sans avoir à les reprogrammées?

    Par exemple, pour un formatage de type F9h (F9h=Media descriptor type), ou peut-on trouver la table associée?

    Merci

  9. #9
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 996
    Billets dans le blog
    2
    Par défaut
    Ces tables existent en effet mais il est fort possible que leur emplacement varie d'un BIOS à l'autre (en tout cas, j'ai eu beau chercher et je n'ai rien trouvé de précis).

    Quoi qu'il en soit, la fonction 18h de l'interruption 13h retourne, dans la paire de registres ESI, l'adresse de la table qui est adaptée au type de média demandé : http://lrs.fmi.uni-passau.de/support/doc/interrupt-57/RB-0605.HTM
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Par défaut
    Ok,
    Je vais donc soit utiliser la 18 de int 13h soit refaire une table manuellement.

    Merci Alcatîz!

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Par défaut
    Bon , aller je vais faire le boulet

    Je n'arrive pas à accèder (meme en lecture) à l'adresse 00078h , j'obtiens une vilolation d'accès...

    Comment abroger cette protection ?
    Et même question pour l'écriture à cette même adresse?

    PS: Je connais pas vraiment l'assembleur (syntaxe), mais je connais bien son fonctionnement (pour l'avoir pratiqué sur du 8-bits), alors un p'tit exemple serait le bienvenu!!!! Merci

  12. #12
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 996
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Masterglob
    Je n'arrive pas à accèder (meme en lecture) à l'adresse 00078h , j'obtiens une violation d'accès...
    Sur quelle plate-forme ?
    As-tu éventuellement un morceau de code à montrer ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Par défaut
    Un:
    ne devrait-il pas suffire?

    PS: j'utilise l'assembleur en ligne delphi

    Ou alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var i0:integer;
        pi:^integer;
    begin
      pi :=pointer($78);
      i0:=pi^;
    Ce qui, du point de vue du code généré donne quasiment la même chose.

    En executant le code avec fasm, ca me donne 0000000, alors que la table semble être en 522h (vu avec le débugger CPU delphi à l'adresse 78h, ce qui semble corresopndre à une table...)

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Par défaut
    Correction:

    En initialisant ds à 0 avant ca marche, sous fasm

    Maintenant j'ai pas envie d'executer un .com juste pour choper une adresse mémoire.
    Il doit bien y avoir moyen d'exécuter ca sous delphi... Il faut peut-etre que j'aile dans le forum delphi à ce moment la.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    org 100h
     
    xor  eax,eax
    mov  ds,        ax
    mov edx,[78h]
    call _print_HEX32
     
    ret

  15. #15
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 996
    Billets dans le blog
    2
    Par défaut
    N'existe-t-il pas en Delphi une directive absolute pour référencer des adresses fixes en mémoire ?

    Euh mais n'essayes-tu pas de référencer une adresse segmentée du mode réel en mode protégé ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

Discussions similaires

  1. [Turbo Pascal] Lecture, écriture et formatage de disquette
    Par Alcatîz dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 15/11/2010, 15h50
  2. Ecriture sur secteur disquette avec 13h
    Par Mercenary Developer dans le forum x86 16-bits
    Réponses: 14
    Dernier message: 16/11/2007, 08h38
  3. Formatage de int vers string
    Par menzlitsh dans le forum Langage
    Réponses: 7
    Dernier message: 17/07/2007, 13h34
  4. Problème avec INT 13h : lire et écrire secteur de disquette
    Par united4life dans le forum Assembleur
    Réponses: 19
    Dernier message: 01/02/2007, 01h48
  5. [Débutant] Ecrire sur disque dur avec int 13h
    Par bregolhen dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo