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 :

Int et ModeP


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut Int et ModeP
    Dans mon développement de petits OS, je me suis dit qu'il pourait être intéréssant de pouvoir adresser toute la mémoire (1Mo c'est bien, mais un peu plus, c'est mieux !). Après quelques recherches, il me semble qu'il faut que je bascule en mode protégé...

    On trouve des tas de tutos sur "Comment passer en mode P", mais moi, je ne veux pas juste faire un kernel qui afficher "HELLO" et haut de l'écran (Ecriture directe dans la RAM VIDEO si j'ai bien compris ce que j'ai lu). J'aimerai un minimum d'interractivité ! Genre réagir aux entrées clavier, etc.

    Or, les INT du BIOS ne sont plus utilisables en mode P... Alors comment on fait ?? Quand on est passé en mode P et qu'on veux afficher ce que l'utilisateur écris au clavier ??? Utiliser les Int 14h (APM, maintenant que je sait étendre mon PC...) ???

    Tant de questions sans réponses...

    Ou existe t'il une alternative au mode protégé qui permette d'adresser plus de mémoire, tout en conservant les INT valides...

    Ou encore, y à t'il moyen de transformer les vecteurs d'INT du mode réel pour que cela fonctionne en mode protégé ?

    Je vous remercie d'avance pour toute indication, information, docuentation, ...

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Je sais pas y a peut-être un moyen d'accéder à plus d'1Mo sans passez en Pmode et tout réécrire. Peut-être dans l'int 2Fh mais j'en sais rien comme j'ai rarement utilisé cette interruption.

  3. #3
    Membre régulier

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    Salut,

    Si tu tiens absolument à rester en mode réel (et donc ton kernel sera équivalent à une deux chevaux avec un moteur de ferrari), tu as la fonction 87h de l'int 15h qui te permet d'envoyer des datas au delà du premier méga.

    Pour info, cette fonction bascule effectivement en mode protégé pour faire le transfert puis revient mode réel (ce qui prend un temps cpu considérable).

    ... mais moi, je ne veux pas juste faire un kernel qui affiche "HELLO" en haut de l'écran ...
    C'est une sage résolution et quitte à vouloir accéder à la mémoire haute je te conseillerais vivement de passer en mode protégé pour deux raisons:
    - tu en apprendras beaucoup plus sur l'architecture et la conception d'un noyau moderne.
    - une fois en mode protégé, tu "vois" la totalité de la mémoire, que tu peux adresser très facilement avec un simple mov [mem32],eax et pas te compliquer la vie avec des registres de segment (du moins pas trop si tu es dans un modèle plat) et leur foutu rebouclage à 64 Ko.

    en contrepartie:
    - tu oublies toute fonction BIOS (à part peut être VESA, APM ... à voir).
    - tu te casses la tête 5 mn (mais pas plus) sur:
    + comment on passe effectivement en mode protégé
    + comment on construit la table gdt
    + ce qu'est un sélecteur, un descripteur de segment
    + ce qu'est l'idt et un descripteur d'idt
    + ...
    + puis plus tard sur les problèmes de mémoire virtuelle (répertoire et tables de pages).

    A noter que de nombreux (nombreux) tutoriaux et notes explicatives sur le mode protégé existent que le net. J'ai une foule de documents si ça t'interesse. Il est vrai qu'il faut s'y plonger un peu sérieusement mais une fois ce cap passé, tu es assez satisfait de toi même.

    de toutes façons tu ne couperas pas à savoir ce qu'est une gdt même si tu utilises la fonction 87h sus-citée.

    Alors comment on fait ?? Quand on est passé en mode P et qu'on veux afficher ce que l'utilisateur écris au clavier ???
    Le controleur clavier se programme avec des out et des in. C'est effectivement un peu plus compliqué qu'une simple int 16h, mais pas tellement plus.
    Pour l'affichage, bein tu dumpes directement dans la mémoire vidéo ...

    Voilà, à toi de voir: la 2CV ou la ferrari.

    golem
    +++

  4. #4
    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
    Pour les INTs en mode protégé, il y a peut-être une petite astuce (les professionnels devront confirmer) que Blustuff m'a donné sur ce forum : On pourrait réinitialiser l'IDT en utilisant les adresses des INTs du mode réel. Je m'explique. Vous savez tous que quand vous faites INT 13h, votre computer pointe vers une adresse où se trouve un morceau de code (c'est pour ça qu'il y a l'IDT en modeP). Hé bien, il y a deux manières de récupérer toutes ces adresses. Pour l'INT 15h, on peut avoir :

    -solution 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SegmentInt15h  dw ? 
    OffsetInt15h   dw ? 
     
     
      xor ax, ax 
      mov es, ax 
     
      mov ax, es:[15h*4] 
      mov OffsetInt15h, ax 
     
      mov ax, es:[15h*4+2] 
      mov SegmentInt15h, ax
    -solution 2
    Il existe une INT (DOS je crois) qui permet de redonner les mêmes chiffres que la méthode précédente. Le problème c'est que je ne la retrouve pas et je pense aussi que ce n'est pas cette solution qui t'intéresse.

    Voilà, en attente de confirmation des pros que cette formule fonctionne bien. Bon courage pour ton OS.

    PS pour golem : les docs sur le mode protégé ça m'intéresse si tu peux me les envoyer, merci d'avance. (j'aimerais bien m'y mettre enfin)
    [/code]
    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 .....

  5. #5
    Membre régulier

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    Bonjour,

    L'idée n'est pas mauvaise.

    Je pense cependant à un problème (et ce n'est certainement pas le seul):
    Les registres de segment (cs, ds, es, fs, gs) en mode protégé contiennent des sélecteurs, pointant eux meme sur des descripteurs de la gdt. En mode réel un segment contient 16 bits hauts de l'adresse effective. Ces deux types d'adresses en mode réel et protégé sont complètement incompatibles. Le BIOS étant conçu pour le mode réel, il générera une belle exception s'il tente de charger un quelconque registre de segment (cas par exemple de l'int 13h, pour une lecture secteur où la destination est un buffer dont on spécifie l'adresse sur 20 bits donc avec segment:offset) (Pour l'int 15h, c'est pareil puisque qu'il faut spécifier l'adresse de la gdt dans es:si).

    Ainsi, le BIOS est très (très) loin de fonctionner en mode protégé. Certaines fonctions supra simples pourraient à la rigueur fonctionner, mais autant les écrire à la main ...

    Pour les docs, je poste ça dans pas longtemps.

    Voilà.
    golem
    +++

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Vi c'est vrai :) Bah au pire, recreer des descripteurs juste pour la compatibilité, mais c'est chiant. Dans tous les cas, il faut exactement savoir quelle interruption on veut conserver. Pour interragir avec le clavier tu n'as pas besoin du bios. Surtout que c'est plutot limité les fonctions du bios pour le clavier. Si tu veux faire un os, mais très simple, la moindre marque de dignité serait de gerer toi même le clavier. Donc creer une fonction vers lequel pointra l'int 8 dans l'IDT (si je me trompe pas) puis recuperer les donnes du clavier avec des in et des out et gerer toi même le tampon clavier. Je crois que c'est ce que faisaint tous les vieux jeux dos qui avaient besoin de savoir precisement quelle touche est enfoncée, ce qui n'est pas tellement possible avec les fonctions BIOS.

    Pour les etc. que tu veux gerer il faut voir ce que c'est, mais rien n'est impossible sans les fonctions du BIOS (enfin a condition dez connaitre les ports)

    Blustuff

  7. #7
    Membre régulier

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    Si tu veux faire un os, mais très simple, la moindre marque de dignité serait de gerer toi même le clavier.
    Sage résolution.

    Donc creer une fonction vers lequel pointra l'int 8 dans l'IDT (si je me trompe pas)
    int 8 ==> timer
    int 9 ==> keyboard

    golem
    +++

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    ah vi, c'est ca, merci (je confonds toujours, remarque il vaut mieux egalement que tu geres toi même le timer, m'enfin je suis impardonnable )

  9. #9
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Merci pour vos réponses, j'attend les url des tutoriaux de golem avec impatience... En effet, je ne me suis jamais ammusé à utiliser les in et out (Hormis une écriture sur LPT1), et je suis un peu largué par le contenu de certains messages....

    Merci à tous...

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  10. #10
    Membre régulier

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    Bon, voilà en vrac ce que j'ai trouvé dans ma liste de liens. Le premier site est de (très) loin le plus fourni. Tu trouveras les tutoriaux pour le pmode ici http://www.nondot.org/~sabre/os/articles/ProtectedMode/.

    C'est légèrement en vrac, m'enfin on s'y fait.

    OSRC The Operating System Resource Center - http://www.nondot.org/~sabre/os/articles
    http://www.beyondlogic.org/
    Linux Kernel Internals: process and interrupt management - http://www.moses.uklinux.net/patches/lki-2.html
    IDE Hardware Reference & Information Document - http://www.nondot.org/sabre/os/files/Disk/IDE-tech.html
    A Memory Allocator - http://www.nondot.org/sabre/os/files/MemManagement/LEA.html
    Comment programmer un noyau: une introduction - http://inferno.cs.univ-paris8.fr/~am/tutorial/os/tutorial02.html
    Microprocessor resources: Triple Faulting the CPU - http://x86.ddj.com/productivity/triplefault.htm
    The Keyboard Interface Tutorial - http://www.nondot.org/sabre/os/files/HCI/KeyboardFAQ.txt
    Reading the harddisk using ports - http://www.nondot.org/sabre/os/files/Disk/HD_PORTS.asm
    Long filename structure (Windows 95) - http://www.nondot.org/sabre/os/files/FileSystems/LF1.txt
    Document Title LES SECRETS DU BIOS PC-AT - http://www.qsl.net/f6flv/docbios.html
    Eternity Operating System - http://eternityos.free.fr/fr/index.php
    FAT32 Information - http://home.no.net/tkos/info/fat32.html
    File Allocation Table - http://home.no.net/tkos/info/fat.html
    HAL91 - http://www.itm.tu-clausthal.de/~perle/hal91/
    http://cs.nyu.edu/courses/spring00/G22.3130-001/assembly_howto.txt
    http://debs.future.easyspace.com/Programming/Hardware/FDC/floppy.html
    http://tunes.org/Review/OSes.html
    http://www.ensicaen.ismra.fr/~nugues/systMem.html
    Index of -tkos - http://home.no.net/tkos/
    Martina kernel - http://www.washingdishes.freeuk.com/martina.html
    OOPS Group Publications - http://www.cs.utexas.edu/users/oops/papers.html
    OS Projects - http://www.osdev.org/cgi-bin/projects.cgi
    OWL ; Owl n'est ni windows, ni Linux - http://membres.lycos.fr/dreamos/index2.php3
    Site officiel du groupe AP²C - http://www.ap2c.com/index.php?page=apos.php
    The Memory Management Reference Beginner's Guide Allocation - http://www.memorymanagement.org/articles/alloc.html
    The OS Journal - Memory Management 1 - http://www.cyberscriptorium.com/osjournal/cgi-bin/index.pl?action=viewfile&file=1
    The OS Journal - Memory Management 2 - http://www.osjournal.hopto.org/cgi-bin/index.pl?action=viewfile&file=2
    The OS Journal - Page Tables - http://www.cyberscriptorium.com/osjournal/cgi-bin/index.pl?action=viewfile&file=7
    The OS Journal - Programming Floppy Disk Controllers - http://www.cyberscriptorium.com/osjournal/cgi-bin/index.pl?action=printview&file=9
    The OS Journal - Writing a Kernel in C - http://www.osjournal.hopto.org/cgi-bin/index.pl?action=viewfile&file=3
    Welcome to KernelNewbies.org - http://kernelnewbies.org/
    Yahoo! Informatique et InternetLogicielsSystèmes d'exploitation - http://fr.dir.yahoo.com/informatique_et_internet/logiciels/systemes_d_exploitation/
    YCX2 - http://www.mdstud.chalmers.se/~md1gavan/ycx2/
    Protected Mode Tutorial - http://my.execpc.com/~geezer/os/pm.htm


    golem
    +++

  11. #11
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Bon, ben on à de la lecture jusqu'à la fin de l'année !


    Merci beaucoup !

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Je l'ai pas donné ??? Moi j'ai appris a passer en mode p sur le site francais ou j'ai quasimenet tout appris :

    http://www.chez.com/pageasm/tutd/pmode/index.htm


    Blustuff.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Tu peut aussi aller voir sur : www.0xfi.com/oslib/
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [.COM] Réserver de la RAM fct 48h int 21h
    Par bulerias dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 06/12/2010, 14h33
  2. calcul melangeant int et long int ?
    Par ThR dans le forum C
    Réponses: 2
    Dernier message: 06/01/2003, 01h13
  3. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37
  4. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07
  5. Les INT en mode protégé
    Par le mage tophinus dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 05/12/2002, 16h13

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