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 :

BIOS32 - Exécution d'interruptions 16 bits en mode protégé


Sujet :

Assembleur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut BIOS32 - Exécution d'interruptions 16 bits en mode protégé
    Bonjour

    est ce que quelqu'un connait le Bios 32 et sait comment on peut s'en servir

    Apparemment il permet de se servir d'interrutions Bios (sur 16bits) alors qu'on est en mode protégé (sur 32bits)

    Merci

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Points : 78
    Points
    78
    Par défaut
    Tu parles du BIOS systeme ou du BIOS Video?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Ben du BIOS systeme

    d'apres ce que j'ai vu dans le peu de doc que j'ai trouvé, on peut se servir de cette "extension" du bios pour avoir acces aux interruption BIOS une fois passé en mode protégé

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Points : 78
    Points
    78
    Par défaut
    tu pourrais créér des descripteurs 16-bits avec comme adresse de base le pointeur vers la routine d'interruption, que tu recuperes dans le premier Ko de la mémoire.
    Apres au lieu de faire int xxh tu fais juste un call vers ce descripteur.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Je vois pas trop ce que tu veux dire...

    récupérer le code des interruptions
    passer en PM
    faire des Call vers ces codes

    c'est ca??

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Points : 78
    Points
    78
    Par défaut
    En fait quand tu es en mode protégé, tu recupère le segment et l'offset de la routine d'interruption que tu desires executer.
    Ensuite tu créér un descripteur 16-bit qui va pointer dessus.
    Pour l'utiliser tu fais un far call sur le descripteur, cela va mettre a jour CS automatiquement.

    Si tu veux plus d'info, il explique comment utiliser le BIOS VESA en mode protégé, en utilisant les interruption standard.
    Voila le lien sur le PDF (public).
    http://www.vesa.org/vbe3.pdf

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Oui

    et si par exemple je veux utiliser l'interruption 13h pour avoir des acces sur le lecteur de disquettes... je dois faire comment?

    Enfin est ce que je peux le faire alors que je suis deja en protégé?? Je croyais que c'etait impossible, justement du fait de l'imcompatibilité entre 16 et 32 bits

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Points : 78
    Points
    78
    Par défaut
    le fait d'utilise un descripteur 16-bit te permet d'executer du code 16-bit en 32-bit.
    Il me semble que le version precedente de Windows utilisait ce systeme afin de pouvoir executer de vieux programme DOS.

    Autrement tu peux essayer de dialoguer directement au hardware, c'est plus long a faire mais cela a l'avantage d'etre rapide et le plus proche du hardware. Autrement dis ecrire toi meme un driver.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Oui mais justement si je demande ca c'est pour éviter d'avoir à écrire un pilote :)

    Je n'ai pas tres bien compris ta notion de descripteur 16 bits, etc... et en quoi ca pourrai résoudre le problème...

  10. #10
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Je crois que ça vient de l'incompatibilité : Lorsque tu est en Mode Protégé, tu est en 32 bits, or les Ints du BIOS sont en 16 bits, il y a donc incompatibilité...
    Les descripteur 16 bits permettent de palier cette incompatibilité.

    Dites-le moi si je dis n'importe quoi !

    Nico*3-3
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Je ne pense pas que tu dise n'importe quoi, mais précise...

    Ca ne me dit pas comment utiliser ces descripteurs 16bits!!!

  12. #12
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    euh, vous avez déjà regardé le code d'une interruption ? Dans chaque interruption, il y a un call far et le call far n'est pas lu du tout de la même manière en mode réel qu'en mode protégé. Pour l'instant, il n'y a que le VESA (BIOS Graphique en gros) qui permettent d'utiliser les interruptions réelles en mode protégé.

    Bon, si t'es en train de faire ton propre OS et que t'as pas envie de te casser la tête à réécrire les drivers, je te conseille de rechercher des infos sur la BiosDataArea, ça te permettra de savoir où mettre ton code sans toucher aux endroits réservés pour le bios, de là tu mets ton noyau et tu crées un sous-gramme qui te permette de revenir temporairement en mode réel, le temps de l'exécution de l'interruption puis tu repasses en mode protégé à l'endroit où tu t'étais arrêté. J'ai fait ça dans mes essais d'OS et je trouve que c'est une bonne solution en attendant de développer ses propres drivers.

    J'espère t'avoir éclairé un peu sur le sujet
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Tu veux dire qu'à chaque fois que tu veux te servir d'une interruption, tu fais:

    - mode protégé -> mode réel
    - int ...
    - mode réel -> Pmode

    C'est ca? j'y avais pensé mais je me suis demandé si ca n'était pas un peu lent.. enfin je sais pas...

    Par contre, ne faut-il pas désactiver toutes les interruptions quand tu fais cette manip (cli)??

  14. #14
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    tu viens de répondre à tes questions. Oui c'est lent c'est pour ça qu'il vaut mieux réécrire ses propres drivers mais comme je le dis, en attendant, c'est très utile.

    Et oui, il faut bien switcher entre les différents modes, oui il ne faut pas oublier de faire un cli, il ne faut pas non plus oublier de déclarer correctement ta gdt, et ton idt, c'est tout des points de détails qu'il faut éclaircir au fur et à mesure mais c'est là tout le charme de l'assembleur.
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Je dois déclarer la gdt et l'idt à chaque fois que je repasse du réel au protégé??

    Ou bien juste une fois?

  16. #16
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    bon, je viens de me replonger dedans. Pour revenir en mode réel, il faut essentiellement bien déclarer ta GDT, c'est là clef du problème. Après la marche à suivre est la suivante :
    1) tu fais un far jump dans le selecteur 16-bit
    2) tu réinsitialises de,es,fs,gs,ss dans le selecteur 16-bit
    3) tu restaures le mode réel par le bit 0 du registre cr0
    ; maintenant t'es quasiment en mode réel
    4) tu fais un far jump pour restaurer cs
    5) tu restaures ss,ds,es,fs,gs
    6) tu restaures ton idt
    7) tu restaures le gateA20
    8) tu restaures les PICs
    9) sti
    10) tu fais un jump vers l'endroit du code 16 bit réel que tu veux exécuter

    Maintenant, avant de passer dans le mode réel, il faut bien tout sauvegarder dans le mode protégé et inversement pour pouvoir tout restaurer correctement, c'est difficile au début à gérer et puis après avec l'habitude, on arrive à tout faire (conseil : utilise des emplacements mémoire pour faire les sauvegardes et surtout le passage de paramètre entre le mode réel et le mode protégé)

    Essaye avec ça et pose tes problèmes si t'en as
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    D'accord merci je vais voir deja avec tout ca....

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    spa un peu compliqué tout ca ?
    le mode v86 a été implémenté pour éviter ca justement....

Discussions similaires

  1. commande d'installation de windows xp 64 bit en mode MS-DOS
    Par readymasters dans le forum Windows XP
    Réponses: 1
    Dernier message: 16/10/2007, 20h53
  2. [VESA] mode protégé et absence d'interruption 10h
    Par PATTELARD dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 24/10/2006, 15h16
  3. Eviter l'exécution multiple d'un prg en mode console
    Par camboui dans le forum Windows
    Réponses: 3
    Dernier message: 29/07/2005, 12h23
  4. Exécution d'interruption détournée
    Par scorbo dans le forum Assembleur
    Réponses: 29
    Dernier message: 07/02/2005, 21h43
  5. Appel d'interruption DOS ou BIOS sous Windows (mode protégé)
    Par SteelBox dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 30/04/2004, 10h30

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