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

Programmation d'OS Assembleur Discussion :

OS et formatage (entre autre)


Sujet :

Programmation d'OS Assembleur

  1. #1
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Points : 2 924
    Points
    2 924
    Par défaut OS et formatage (entre autre)
    Bonjour à tous .

    Dans le cadre d'une initiation à l'écriture d'un OS, je buche sur le TutoOs de Mr Michelizza (comme beaucoup apparemment), et pour tester le code, je dois écrire le "bootsecteur" sur une disquette. Le problème est que je suis sous Windows et que je ne sais pas comment écrire sur un secteur en particulier.

    J'utilise l'IDE AsmEditor qui offre la possibilité d'écrire ce code sur le premier secteur et cela fonctionne parfaitement. Le PC boote comme un grand sur la disquette et affiche le message tant attendu.

    Cela se gâte quand je veux écrire le "noyau" sur le second secteur (AsmEditor ne me donne apparemment pas cette fonctionnalité), et mon appel au noyau, si je le mets simplement à la suite du mot 0xAA55 (en espérant naïvement que le secteur n°2 suive tout bêtement le secteur n°1), est sans résultat (je m'en doutais un peu). Il semblerait, en plus, que l'écriture sur le premier secteur supprime le formatage de ma disquette.


    J'ai donc (quel culot) essayé de me faire un petit utilitaire avec Lazarus et l'assembleur "in line", en utilisant le service 03h de Int 0x13 du bios pour écrire directement sur le secteur de mon choix, mais... :plantage!
    J'ai également essayé le service de formatage (05h) de la même interruption avec le même résultat (rogntudjieu)

    Je me pose donc un tas de questions.
    1 - Comment écrire à volonté sur le (ou les) secteurs désiré? Résolu: Mauvaise initialisation du buffer ES:BX .
    2 - Que fait, exactement, le formatage sur la disquette? Comment sont marqués les pistes et les secteurs?
    3 - Comment rendre "vierge" une disquette formatée (pas uniquement effacer les données, mais effacer le formatage)?
    4 - Est-ce que Windows XP interdit l'usage de Int 0x13 de la même manière qu'il empêche d'écrire sur les ports parallèles et séries?
    5 - ...Je m'arrête là pour l'instant sinon on va me déconnecter.

    Cette initiation aux OS est donc très intéressante car elle amène à un tas de questions. Encore faut-il trouver une réponse à ces questions. Mes recherches n'ayant pas donné de résultat satisfaisant, je les poste ici en espérant qu'elles ne soient pas trop triviales et ne sortent pas trop du cadre de ce forum.

    J'attends vos commentaires avec impatience et vous en remercie par avance.

    Amicalement, Hervé .

    PS: J'utilise en majeur partie Windows SP et un peu Mandriva Linux 2006 mais je dispose sur de vieux Ordis de Windows98 et Windows95 (donc de Dos). Je n'utilise pas beaucoup Linux car j'ai du mal à m'en sortir quand j'ai un problème, notamment lors d'installation ou de mise à jours de logiciels (j'ai des misères avec Lazarus/Mandriva. Je rêve d'un Lazarus tournant sous ReactOs). C'est dommage car j'aime bien la démarche du Libre, mais elle implique dans beaucoup de cas une connaissance solide de l'Anglais, ce que je n'ai malheureusement pas.

  2. #2
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    formatter une disquette c'est inscrire les base du sytème de fichier, si tu écrit quelque chose dans le premier secteur de la disquette tu efface une table contenat les informations de base du système de fichier de celle ci

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par naute Voir le message
    Bonjour à tous .
    Bonjour, et bravo pour ta persévérance.

    Citation Envoyé par bifur Voir le message
    formatter une disquette c'est inscrire les base du sytème de fichier, si tu écrit quelque chose dans le premier secteur de la disquette tu efface une table contenat les informations de base du système de fichier de celle ci
    Non. Formatter une disquette consiste bien à tracer les secteurs. Le « formattage logique », comme on disait à l'époque, qui consiste à réinitialiser le système de fichiers, provoque bel et bien la disparition du contenu, mais seulement au niveau du système d'exploitation, mais il faut pour cela que ta disquette soit déjà exploitable.

    La notion se perd aujourd'hui car les disquettes - quand elles se vendent encore - sont livrées préformatées, généralement au format PC. Mais même en dehors du système de fichiers, chaque ordinateur avait sa manière propre de formatter ses disquettes, ce qui rendait l'inter-opérabilité très difficile. Par exemple, les disquettes 3"1/2 que j'utilisais sur mon TO8D il y a une quinzaine d'années étaient formattés avec des secteurs de 256 octets et non 512 !

    C'est également vrai pour les disques durs, mais à ces capacités-là, la manière de formatter devient prépondérante et est propre à chaque modèle de disque. À cause de cela, un disque dur est toujours vendu formatté (mais sans système de fichier) et géré par sa propre carte contrôleur. Le contrôleur floppy, lui, se trouvant sur la carte-mère. Il reste possible de faire un vrai formattage sur un disque dur (utile en cas de coupure de courante violente), ou d'aimant posé sur le disque. Cela s'appelle un formattage de bas niveau, et s'effectue en le logiciel du fabricant du disque, qui n'est pas toujours facile à obtenir.

    Citation Envoyé par naute
    J'ai donc (quel culot) essayé de me faire un petit utilitaire avec Lazarus et l'assembleur "in line", en utilisant le service 03h de Int 0x13 du bios pour écrire directement sur le secteur de mon choix, mais... :plantage!
    J'ai également essayé le service de formatage (05h) de la même interruption avec le même résultat (rogntudjieu)
    Attention, ce sont des fonctions du D.O.S. Certaines sont encore émulées par Windows à condition de fonctionner en tant que programme D.O.S. Insérées en inline au sein d'un programme Windows en 32 bits, elles ne seront pas du tout dans le même contexte.

    2 - Que fait, exactement, le formatage sur la disquette? Comment sont marqués les pistes et les secteurs?
    La disquette est une surface magnétique. Sur une disquette parfaitement neuve et jamais formattée, la matière magnétique est uniformément répartie sur le disque. Dans le lecteur, la tête de lecture survole le disque, en restant à une position fixe. Comme le disque tourne, elle parcourt de fait un cercle concentrique au disque. C'est une piste.

    Cette piste peut être vue comme une bande magnétique de longueur fixe, qui bouclerait sur elle-même. Le lecteur va alors y écrire successivement tout un tas d'informations qui vont lui permettre de se retrouver. Par exemple :

    • Une amorce, soit une zone de données fixes qui vont lui permettre de se synchroniser dessus ;
    • Des informations, comme le numéro du secteur, le numéro de la piste en cours, etc ;
    • Un CRC. pour garantir la validité de ces méta-informations ;
    • Une zone de blancs ;
    • Une nouvelle amorce
    • Les données du secteur proprement dites ;


    Et ceci est répété autant de fois qu'il le faut tout au long de la piste, jusqu'à effectuer un tour complet. À noter que les méta-informations et autres ne sont pour ainsi plus du tout exploitées logiciellement. Le contrôleur de disquette est capable de les écrire automatiquement, et même de proposer quelques fonctions dites « intelligentes » qui lui permettent d'aller rechercher un secteur automatiquement.

    Autre notion : l'entrelacement. Il était possible de formatter une disquette de telle manière que les secteurs de numéros consécutifs ne se suivent pas sur la piste, mais soit entrelacés deux à deux, trois à trois, etc. C'était intéressant pour les machines très lentes qui, traitant le secteur qu'elles venaient de lire, « manquaient » le suivant car le disque continuait à tourner. Il fallait donc refaire un tour complet pour lire le secteur suivant, et pareil pour ceux d'après. Entrelacer les secteurs intelligement permettait d'accéler les accès d'un facteur de 2 à 7, environ.

    Là encore, à part au niveau du pilote − et encore −, cet entrelacement était complètement transparent pour le développeur.

    3 - Comment rendre "vierge" une disquette formatée (pas uniquement effacer les données, mais effacer le formatage)?
    Il faut prendre en main le contrôleur disque et effectuer soi-même le formattage. Si ton système ne te propose pas de primitive pour te donner les commandes, il faut écrire un pilote. Tu peux passer en mode polling pour écrire directement des bits à la surface du disque, mais il passeront quand même par un codage FM ou MGM avant d'atteindre physiquement la tête de lecture, car c'est la transition d'un bit à l'autre qui affecte principalement la surface magnétique.

    4 - Est-ce que Windows XP interdit l'usage de Int 0x13 de la même manière qu'il empêche d'écrire sur les ports parallèles et séries?
    Voir plus haut.

    PS: J'utilise en majeur partie Windows SP et un peu Mandriva Linux 2006 mais je dispose sur de vieux Ordis de Windows98 et Windows95 (donc de Dos). Je n'utilise pas beaucoup Linux car j'ai du mal à m'en sortir quand j'ai un problème, notamment lors d'installation ou de mise à jours de logiciels (j'ai des misères avec Lazarus/Mandriva. Je rêve d'un Lazarus tournant sous ReactOs). C'est dommage car j'aime bien la démarche du Libre, mais elle implique dans beaucoup de cas une connaissance solide de l'Anglais, ce que je n'ai malheureusement pas.
    Pour l'anglais, ça vaut le coup de s'y mettre, effectivement, et ce n'est pas si difficile.

    Pour Linux, je pense que tu serais très intéressé par les systèmes Unix en général. Ça vaut le coup également de se plonger dedans, car le noyau est très bien maintenu et entièrement transparent. En particulier, la routine de gestion des disquettes se trouve dans les sources du noyau. Tu peux l'explorer en entier si tu en as le courage.

  4. #4
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Points : 2 924
    Points
    2 924
    Par défaut
    Bonjour et merci pour vos réponses .


    La réponse de bifur sur l'effacement du premier secteur explique pourquoi windows déclare que la disquette n'est pas formatée. Elle l'est toujours sur le plan logique (voir la réponse d'Obsidian), mais windows n'y détecte plus sa signature.

    Au passage, j'ai édité le premier secteur d'une disquette formatée normalement (pas comme disquette système), et c'est en fait une disquette bootable (elle se termine par 0xAA55), mais n'ayant pas les fichiers systèmes, au lieu de charger un noyau, elle affiche, si l'on boote dessus, le message "Disk non system ...".

    Un point que je ne comprend pas, dans ta réponse (pourtant très complète) Obsidian, et qui concerne les interruptions. Je croyais que les fonctions DOS étaient toutes regroupées au sein de l'interruption 21h et que les autres interruptions dont la 13h qui nous occupe ici ne concernait que le BIOS. Je comptais réaliser mon utilitaire en écrivant quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    pusha                   ;sauve regs
    mov eax, cr0
    or  ax, 1
    mov cr0, eax          ;mode réel
    sti                        ;autorise interruptions
     
    job
     
    cli                        ;interdit interruptions
    mov eax, cr0
    or  ax, 1
    mov cr0, eax          ;mode protégé
    pop a                    ;restaure regs
    Est-ce que c'est jouable?
    Est-ce que la gdt est affectée par ce genre d'opération?

    Question subsidiaire: Qu'est-ce qu'on risque de détruire sur le système en tâtonnant? J'hésite un peu à faire ce genre de manipulation .
    Est-ce que, par exemple, on peut esquinter un lecteur de disquettes en envoyant les têtes en dehors de leur zone de travail en affectant une mauvaise valeur au numéro de piste (cylindre).


    Merci encore pour vos réponses et à bientôt, j'espère.

    Amicalement, Hervé .

  5. #5
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    a oui le formattage physique....
    comme j'ai jamais fait j'y pensait plus

    l'explication de obsidian sur le problème de lenteur de lecture (dût au fait que le controlleur attend a chaque secteur le tour complet du disque) explique qu'un peti programme que j'avais créer et qui créait une "image" de la disquette était drollement plus lent sur un vieu pc sur lequel je le fesait tourne (un 486 à 33Mhz) celui ci ne devait pas avoir le temp de traiter les donnée,
    je vais donc pouvoir l'améliorer en réorganisant la séquence de lecure (enfin j'espère)

  6. #6
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    hey j'avai pas vu! mais ça c'est faux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov eax, cr0
    or ax, 1
    mov cr0, eax ;mode réel
    et en plus ça ne sert a rien car soit t'est sous dos et déja en mode réel ou soit t'est sous windows et en mode v86 (emulation du mode réel)
    j'avait essayé et je ne me rappel plus si faire ça en mode v86:
    -ça fesait planter windows
    -ça délanchait un erreur
    -ça execute "job comme si de rien n'était

    normallement en mode v86 windows emule toute les interruptions disponible sou dos(enfin il me semble)

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par bifur Voir le message
    l'explication de obsidian sur le problème de lenteur de lecture (dût au fait que le controlleur attend a chaque secteur le tour complet du disque) explique qu'un peti programme que j'avais créer et qui créait une "image" de la disquette était drollement plus lent sur un vieu pc sur lequel je le fesait tourne (un 486 à 33Mhz) celui ci ne devait pas avoir le temp de traiter les donnée,
    Un 486DX33, c'est une fusée pour ce genre de traitements. L'entrelac, c'était surtout sur des machines qui tournaient entre 1 et 10 Mhz ...

  8. #8
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    c'est qu'en fait dans mon programme je fait:
    lire un secteur
    écrire dans le fichier image
    lire un secteur
    écrire dans le fichier image
    etc...

    le temp que j'écrivent le secteur dans l'image sur le dd, je doit louper le secteur sivant

    je vais le modifier pour faire plutot:

    lire une piste
    écrire dans le fichier image
    lire une piste
    écrire dans le fichier image
    etc...

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par bifur Voir le message
    c'est qu'en fait dans mon programme je fait:
    lire un secteur
    écrire dans le fichier image
    lire un secteur
    écrire dans le fichier image
    etc...
    Ah oui, là, s'il n'y a pas de tampon, c'est sûr que les effets vont se faire sentir.

    le temp que j'écrivent le secteur dans l'image sur le dd, je doit louper le secteur sivant
    Possible, mais là encore, sur un 486DX33, les effets doivent être minimes ...

    je vais le modifier pour faire plutot:

    lire une piste
    écrire dans le fichier image
    lire une piste
    écrire dans le fichier image
    etc...
    C'est effectivement la meilleure solution. Voire même, si tu disposes de suffisamment de RAM, tu lis la disquette en entier, et tu réécris le fichier en une seule fois.

  10. #10
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Points : 2 924
    Points
    2 924
    Par défaut
    Bonjour à tous .



    Citation Envoyé par bifur Voir le message
    hey j'avai pas vu! mais ça c'est faux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov eax, cr0
    or ax, 1
    mov cr0, eax ;mode réel
    et en plus ça ne sert a rien car soit t'est sous dos et déja en mode réel ou soit t'est sous windows et en mode v86 (emulation du mode réel)
    j'avait essayé et je ne me rappel plus si faire ça en mode v86:
    -ça fesait planter windows
    -ça délanchait un erreur
    -ça execute "job comme si de rien n'était

    normallement en mode v86 windows emule toute les interruptions disponible sou dos(enfin il me semble)
    OK . Mais je suis là pour apprendre .

    Partons du principe que je travaille sous Windows, donc en mode protégé.
    Je lis partout qu'en mode protégé, on n'a plus accès aux interruptions du BIOS. Hors, n'ayant pas (encore ) les compétences suffisantes, l'utilisation de ces interruptions est incontournable pour avoir un accès raisonnable au matériel. Je m'étais donc dit qu'il suffisait de passer en mode réel, utiliser l'interruption, puis revenir en mode protégé pour continuer sous Windows.

    J'ai effectivement fait une petite erreur de saisie dans la partie du code qui ramène en mode protégé (j'ai oublié de modifier après le copier/coller).
    Au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov eax, cr0
    or ax, 1
    mov cr0, eax ;mode réel
    je voulais écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov eax, cr0
    or ax, 0
    mov cr0, eax ;mode réel
    Mais qu'est-ce qui n'est pas bon là dedans. Le code ou l'idée de changer le mode? Parce que, je ne sais pas si Windows émule le mode réel, mais j'ai essayé l'appel direct de l'interruption et là, ça plante.

    Le code pour passer en mode protégé doit être bon puisque c'est celui que fournit Mr. Michelizza dans son TutoOs. Par contre, celui que j'utilise pour passer en mode réel n'est qu'une déduction du premier et n'est peut-être pas valide. Si je me souviens bien, sur les iApx286, on mettait un flag à 1 pour passer en mode protégé mais on ne pouvait pas le mettre à 0 pour repasser en mode réel. Est-ce la même chose ici?

    Sous DOS, je lis et j'écris mes secteurs de disquette sans problèmes, mais sur le plan ergonomique, comme on dit chez nous "ça vaut pas une bolée de cidre!".

    Alors, est-il possible de résoudre ce problème sous Windows à mon niveau (qui n'est pas bien brillant) ou cela demande-t-il des compétences nettement plus élevées?

    Sur un autre sujet Obsidian a dit:
    Pour l'anglais, ça vaut le coup de s'y mettre, effectivement, et ce n'est pas si difficile.
    Tout à fait d'accord avec toi, et je ne boude pas l'anglais, mais le problème vient des termes techniques qui sont soit tout simplement absents des dictionnaires standards, soit n'ont pas le même sens que dans le langage courant. La traduction dans ces conditions est très aléatoire voire même impossible. Je suis en train d'essayer de traduire la documentation de Fasm, et je bute sur un nombre important de mots que je ne trouve pas dans mon dictionnaire et que le contexte et mes connaissances techniques insuffisantes ne permettent pas d'interpréter. C'est donc un cercle vicieux.

    Ah! Le bon vieux temps du 8086 à 4,77 Mhz et 640 Ko de Ram (ou mon vieux TRS80 avec son magnéto-cassette et ses 4 Ko de ram) . Non, je rigole. (Quoique!) .

    Une autre question à propos du formatage: J'ai remarqué que la phase de formatage du disque dur sous Windows, précédent une installation par exemple, est beaucoup plus longue que sous Linux (à taille de partition égale, bien sûr). Pourquoi?

    Voila, voila, voila... Encore des questions (et ce n'est pas fini).

    Merci à vous!

    Amicalement, Hervé .

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par naute Voir le message
    Partons du principe que je travaille sous Windows, donc en mode protégé. Je lis partout qu'en mode protégé, on n'a plus accès aux interruptions du BIOS. Hors,
    « Or, » :-)

    n'ayant pas (encore ) les compétences suffisantes, l'utilisation de ces interruptions est incontournable pour avoir un accès raisonnable au matériel. Je m'étais donc dit qu'il suffisait de passer en mode réel, utiliser l'interruption, puis revenir en mode protégé pour continuer sous Windows.
    Tu ne peux pas le faire. D'une part, parce que fonctionnant précisément en mode protégé, le système ne va pas te laisser débrayer ces protections :-) Il faudrait pour cela que ton programme soit privilégié, qu'il fasse partie du noyau.

    Ensuite, parce que ce sont deux systèmes complètement différents. Ce n'est pas parce que tu vas retourner en mode réel que tu vas te retrouver dans un environnement qui te permette de travailler. Si ce retour n'est pas préparé comme il faut, ton programme va planter. Ne serait-ce qu'au niveau des segments et de leurs emplacement en mémoire.

    Enfin, même si ça fonctionnait, et que les vecteurs d'interruption étaient tous restés en l'état, aller faire des appels système en faisant fi de l'environnement multitâche est dangereux. Au retour en mode protégé, tu pourrais retomber dans un système complètement instable.


    je voulais écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov eax, cr0
    or ax, 0
    mov cr0, eax ;mode réel
    Mais qu'est-ce qui n'est pas bon là dedans. Le code ou l'idée de changer le mode? Parce que, je ne sais pas si Windows émule le mode réel, mais j'ai essayé l'appel direct de l'interruption et là, ça plante.
    D'abord, parce que EAX or 0 = EAX. Ne serait-ce que parce que dans ce sens-là, on ne peut pas savoir quel bit tu veux repasser à zéro. Renseigne-toi sur AND. (EAX AND 0xfffffffe).


    Si je me souviens bien, sur les iApx286, on mettait un flag à 1 pour passer en mode protégé mais on ne pouvait pas le mettre à 0 pour repasser en mode réel. Est-ce la même chose ici?
    C'était effectivement un « bug » historique, mais ce n'est pas le cas ici, en effet.

    Sous DOS, je lis et j'écris mes secteurs de disquette sans problèmes, mais sur le plan ergonomique, comme on dit chez nous "ça vaut pas une bolée de cidre!".
    Ça dépend de ce que tu entends par « ergonomie ». La ligne de commande peut être très puissante.

    Alors, est-il possible de résoudre ce problème sous Windows à mon niveau (qui n'est pas bien brillant) ou cela demande-t-il des compétences nettement plus élevées?
    C'est surtout que Windows n'est pas super-adapté à la programmation en assembleur (pas plus que Linux, au demeurant). Soit tu fais une application D.O.S. et Windows émule l'environnement, soit tu fais une applications Windows à part entière et dans ce cas, ça fonctionne complètement différemment. Il faut faire des appels aux bibliothèques standard, qui te permettront « d'ouvrir » le disque comme on ouvre un fichier, tu auras un handler, etc. C'est surtout fait pour être exploité depuis le C au minimum.

    Dans l'absolu, c'est possible de le faire en assembleur aussi, mais il faut réécrire à la main tous les appels traduits en principe par le compilateur.

    Ah! Le bon vieux temps du 8086 à 4,77 Mhz et 640 Ko de Ram (ou mon vieux TRS80 avec son magnéto-cassette et ses 4 Ko de ram) . Non, je rigole. (Quoique!) .
    Moi, pas. Certes, je ne boude pas la puissance que les machines nous offrent aujourd'hui pour une bouchée de pain. Mais il est incontestablement plus difficile de démarrer aujourd'hui de zéro pour un néophyte que pour une personne qui a connu l'époque mono-tâche sans mode protégé et qui pouvait bidouiller sa machine sans risquer de la rendre inutilisable.

    Une autre question à propos du formatage: J'ai remarqué que la phase de formatage du disque dur sous Windows, précédent une installation par exemple, est beaucoup plus longue que sous Linux (à taille de partition égale, bien sûr). Pourquoi?
    Ça peut être dû à n'importe quoi, mais je ne pense pas que tu fasses réellement un formattage du disque dur sous Windows. Tout au plus effacer les secteurs, dans tout les cas recréer le système de fichier. Pour une disquette, il est possible que pour l'un des systèmes, la « vérification » soit active (je repasse sur la piste que je viens d'écrire pour voir si elle est propre).

  12. #12
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Points : 2 924
    Points
    2 924
    Par défaut
    Bonjour, Obsidian .

    Je vais adopter ton style de présentation car je le trouve très clair.

    Citation Envoyé par Obsidian Voir le message
    Tu ne peux pas le faire. D'une part, parce que fonctionnant précisément en mode protégé, le système ne va pas te laisser débrayer ces protections :-) Il faudrait pour cela que ton programme soit privilégié, qu'il fasse partie du noyau.

    Ensuite, parce que ce sont deux systèmes complètement différents. Ce n'est pas parce que tu vas retourner en mode réel que tu vas te retrouver dans un environnement qui te permette de travailler. Si ce retour n'est pas préparé comme il faut, ton programme va planter. Ne serait-ce qu'au niveau des segments et de leurs emplacement en mémoire.

    Enfin, même si ça fonctionnait, et que les vecteurs d'interruption étaient tous restés en l'état, aller faire des appels système en faisant fi de l'environnement multitâche est dangereux. Au retour en mode protégé, tu pourrais retomber dans un système complètement instable.
    Compris .

    D'abord, parce que EAX or 0 = EAX. Ne serait-ce que parce que dans ce sens-là, on ne peut pas savoir quel bit tu veux repasser à zéro. Renseigne-toi sur AND. (EAX AND 0xfffffffe).
    Là, je suis mort de honte. C'est ce qui s'appelle copier sans réfléchir. Je veux effectivement mettre le bit 0 à 0 et donc masquer avec AND ....1110b. .

    C'était effectivement un « bug » historique, mais ce n'est pas le cas ici, en effet.
    OK!

    Ça dépend de ce que tu entends par « ergonomie ». La ligne de commande peut être très puissante.
    Sous Linux certainement . Sous Dos, ça ne va pas loin .

    C'est surtout que Windows n'est pas super-adapté à la programmation en assembleur (pas plus que Linux, au demeurant). Soit tu fais une application D.O.S. et Windows émule l'environnement, soit tu fais une applications Windows à part entière et dans ce cas, ça fonctionne complètement différemment. Il faut faire des appels aux bibliothèques standard, qui te permettront « d'ouvrir » le disque comme on ouvre un fichier, tu auras un handler, etc. C'est surtout fait pour être exploité depuis le C au minimum.

    Dans l'absolu, c'est possible de le faire en assembleur aussi, mais il faut réécrire à la main tous les appels traduits en principe par le compilateur.
    Oui, mais je crains malheureusement que ce soit légèrement au dessus de mon niveau. Cela dit, je compte bien m'améliorer.

    Moi, pas. Certes, je ne boude pas la puissance que les machines nous offrent aujourd'hui pour une bouchée de pain. Mais il est incontestablement plus difficile de démarrer aujourd'hui de zéro pour un néophyte que pour une personne qui a connu l'époque mono-tâche sans mode protégé et qui pouvait bidouiller sa machine sans risquer de la rendre inutilisable.
    Alors là, tu me fais plaisir. Je me sens déjà moins seul .Qu'est-ce que j'ai pu m'amuser avec mes vieux machins.

    Une dernière question (pour le moment ). Est-ce que le pseudo mode console de Windows, à savoir la fenêtre Ms-Dos, émule vraiment le Dos et permet l'accès aux interruptions exactement comme sous Dos en mode réel. Cela me permettrait d'écrire (ou plutôt de réécrire) mes petits utilitaires Dos moitié Pascal (je ne parle malheureusement pas le C), moitié assembleur, en les adaptant,puis, tout en restant dans mon application Windows, de lancer un de ces utilitaires "console" utilisant les interruptions en lui transmettant les paramètres nécessaires à son exécution,ce qui n'est pas compliqué en Pascal, et cela sans avoir à écrire ce que tu appelles une "application Windows à part entière", ce que je ne suis pas capable de faire pour l'instant (restons optimiste).

    Au sujet des langages, je regardais mes vieilles docs Intel (du 8088 à l'iApx286) où les langages cités en référence étaient l'assembleur, le Fortran et le Pascal (plus plm sous rmx, propre à Intel). Maintenant, dans les docs, on ne parle plus que de l'assembleur et du C. J'ai du mal à comprendre pourquoi le C a supplanté le Pascal. Sauf erreur, les fonctionnalités de ces deux langage sont très proches voire identiques. Pascal est même plus fortement typé que C ce qui me semble une bonne chose, car obligeant à plus de rigueur. En plus, son code est plus lisible "intuitivement" utilisant des mots compréhensibles là où C utilise des symboles. Est-ce que ce serait justement pour ça que les professionnels préfèreraient le C, à cause de son coté hermétique voire ésotérique pour les non initiés. J'espère que ce n'est pas le cas et que les raisons sont un peu plus élevées .

    En tout cas, merci pour tout et à bientôt.

    Amicalement, Hervé .

  13. #13
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    je vais pas pouvoir lire le disque d'un coup parce que je suis sous dos et que je n'ai qu'un méga, je pourrait faire en "flat real mode" mais je sui pas sur que le dos apprécie (ou alors j'uttilise des fonctions qui permettent d'uttiliser la mémoire haute mais je suis pas très chaud pour faire ça)
    alors je vais me contenter de la lecture piste par piste

  14. #14
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Pour le mode FLAT sous DOS , aucun problème (il faut simplement ne pas
    avoir installé de gestionnaire mémoire comme himem.sys ou emm386.exe)

    J'ai d'ailleurs réalisé un petit TSR pour basculer en mode FLAT et je le
    lance systématiquement au démarrage du DOS

    Pour ton histoire de lire secteur par secteur, le problème de lenteur vient
    du fait que le BIOS lit 1 piste quoi qu'il arrive.
    Donc pour un format 1.44 en 18 secteurs/piste, il va faire 18 lectures/piste
    (18 fois plus lent quoi )

    Ca me rappelle comment je m'amusait à formater 82 pistes au lieu de 80 histoire
    de grapiller 36Ko de plus ... et de perdre encore un peu plus en fiabilité

    a+ François

  15. #15
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Points : 2 924
    Points
    2 924
    Par défaut
    Bonjour à tous .

    Citation Envoyé par Forthman Voir le message
    Pour ton histoire de lire secteur par secteur, le problème de lenteur vient
    du fait que le BIOS lit 1 piste quoi qu'il arrive.
    Donc pour un format 1.44 en 18 secteurs/piste, il va faire 18 lectures/piste
    (18 fois plus lent quoi )
    C'est typiquement le genre de renseignement que l'on n'arrive pas à trouver quand on apprend tout seul, car on n'a aucune raison de penser que si une interruption permet de lire un secteur particulier, elle entraine la lecture de toute la piste. En y réfléchissant, c'est pourtant logique car si le positionnement sur une piste et le choix de la tête ne relèvent pas du hasard, du fait de la rotation du disque, on ne peut pas savoir sur quel secteur on se trouve quand commence la lecture. Elle pourrait par contre s'arrêter quand le bon secteur a été lu, ce qui diviserait en gros par deux le temps moyen de lecture d'un secteur donné.

    Ca me rappelle comment je m'amusait à formater 82 pistes au lieu de 80 histoire
    de grapiller 36Ko de plus ... et de perdre encore un peu plus en fiabilité
    Oui, mais au moins, on pouvait le faire !

    Amicalement, Hervé .

  16. #16
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    En fait, la synchro se fait grâce a la découpe rectangulaire excentrée sur la partie métallique ( axe de rotation )
    mais à chaque accès en lecture, il faut attendre le passage de ce repère pour synchroniser (au pire 1 tour complet).

    c'est encore plus vrai quand on fait la lecture d'une face à l'autre,
    donc sans changer la position de la tête de lecture, il faut attendre pratiquement
    un tour complet pour lire la 2eme face

    Après plusieurs essais, j'étais parvenu à la conclusion que pour formater ou copier une disquette, le plus rapide était de :
    - copier les pistes de la face 0 de 0 à 79
    - copier les pistes de la face 1 de 79 à 0

    Ca permettait de gagner au moins 5 secondes sur un 80286

    me suis même amusé à faire de la musique avec mon lecteur de disquettes
    en faisant bouger la tête de lecture

    Pour finir, si tu programme sous DOS, pour le formatage tu peux te passer
    du BIOS qui attend la fin du formatage de chaque piste, et te faire
    tes propres routines, ça permet de faire un TSR qui formate en "multitaches"

    a+ François

  17. #17
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    je croi avoir déja vu une note qui disait que pour les lecture de secteur de disquette on était limité a 1 (alors que il y a un paramètre du bios pour ça)

    quant je pense qu'on est en train de parler optimisation pour un média que les "spécialistes" qualifient de dépassé.....

  18. #18
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Non, on n'est pas limité à la lecture d'un seul secteur mais
    plutôt on est obligé de lire au moins un secteur, et donc d'avoir
    un buffer d'au moins 512 octets

    même si les disquettes sont complètement out, (je n'ai plus un seul lecteur sur mes machines)
    les interruptions du BIOS restent encore compatibles avec les autres médias tels
    que les disques-durs mais aussi clés USB

    a+ François

  19. #19
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    oui en effet je me suis gouré, la doc que j'avait lu signalait que les (très)ancien bios ne proposait pas de lire/écrire plusieur secteur donc quant on écrivait ses appel de routine de lecture de disquette il valait mieux considérer que l'on ne pouvait lire/écrire qu'un secteur a la fois

    ou alors ce que j'ai lut n'était qu'une grosse imbécilité pondu par je-ne-sait-qui (faudrat que je le retrouve) l'ennuyeux avec internet c'est qu'on tombe des fois sur des infos erronné qu'il faut recouper pour avoir des info fiables d'ailleur je pense que les forums sont bien plus adapté que les wiki au sujet de la fiabilité car on voit qui donne l'information (mais ça c'est un autre débat)

  20. #20
    Rédacteur

    Avatar de naute
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2009
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2009
    Messages : 708
    Points : 2 924
    Points
    2 924
    Par défaut
    Bonjour à tous .

    Citation Envoyé par Forthman Voir le message
    Non, on n'est pas limité à la lecture d'un seul secteur mais
    plutôt on est obligé de lire au moins un secteur, et donc d'avoir
    un buffer d'au moins 512 octets
    Je pense que tu veux dire par là que l'unité de lecture est le secteur et qu'on ne peut pas lire une fraction de secteur.

    même si les disquettes sont complètement out, (je n'ai plus un seul lecteur sur mes machines)
    Out pour un usage courant de transfert ou de sauvegarde de fichiers, bien sûr, mais pour l'expérimentation à petit niveau, elles rendent encore bien des services. Je ne suis pas prêt à me risquer à des bidouillages sur le disque dur alors que là ... et puis on écrit sur un vrai disque, ça bouge, ça fait du bruit, c'est du concret. La clé USB, c'est triste, "y'a rien qui s'passe" .

    Et puis Linux, par exemple, propose toujours de réaliser une disquette de démarrage en cas de pépin. J'imagine qu'il y a encore un tas de PCs dont le BIOS ne permet pas le démarrage sur un périphérique USB et pour lesquels la disquette reste encore une solution souple () d'emploi.
    Mais bon! Je sais bien...

    bifur a dit:
    ou alors ce que j'ai lut n'était qu'une grosse imbécilité pondu par je-ne-sait-qui (faudrat que je le retrouve) l'ennuyeux avec internet c'est qu'on tombe des fois sur des infos erronné qu'il faut recouper pour avoir des info fiables d'ailleur je pense que les forums sont bien plus adapté que les wiki au sujet de la fiabilité car on voit qui donne l'information (mais ça c'est un autre débat)
    Ce n'est pas faux, et c'est d'ailleurs l'argument principal des détracteurs du wiki, mais je trouve que ça reste quand même une source de renseignements intéressante et fiable dans sa globalité. Même sur le forum, il y a des erreurs qui ne sont pas corrigées et pire, dans une grande encyclopédie dont j'avais fait l'acquisition sur DVDRom, et dont je tairai le nom pour ne pas attirer d'ennuis aux administrateurs, j'ai constaté des erreurs grossières concernant un sujet que je connais bien. De là à douter de la pertinence des renseignements que je trouve sur les autres sujets, il n'y a qu'un pas. J'ai d'ailleurs désinstallé cette encyclopédie.
    Mais comme tu dit, c'est un autre débat.

    Amicalement, Hervé .

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Cacher la scrollbar d'un DBCtrlGrid (entre autres)
    Par LadyWasky dans le forum Delphi
    Réponses: 4
    Dernier message: 29/11/2006, 15h19
  2. Réponses: 18
    Dernier message: 04/04/2006, 14h31
  3. Entre autre : frustum de vue, optimisations...
    Par MaxPayne dans le forum OpenGL
    Réponses: 8
    Dernier message: 18/03/2005, 22h42
  4. Réorganisation d'index entre autres ...
    Par Doctor Z dans le forum Administration
    Réponses: 9
    Dernier message: 08/11/2004, 15h02
  5. [][VB/Powerpoint] : nombre de diapo entre autre
    Par stan28 dans le forum Contribuez
    Réponses: 11
    Dernier message: 29/04/2003, 18h43

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