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 :

execution de fonction bios en mode protégé


Sujet :

Programmation d'OS Assembleur

  1. #1
    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 execution de fonction bios en mode protégé
    bonjour a tous!
    je suis en train de programmer une version en mode protégé de mon petit système d'exploitation mais je me heurte a un petit problème

    je doit faire appel a des fonction du bios pour pouvoir:
    - lire le secteur d'une disquette (ou d'une clef USB)
    - écrire dans le secteur d'une disquette
    - obtenir des info VESA sur la carte video
    - changer de mode video VESA
    - changer le chunk video accessible

    or tout le monde sait que l'on ne peut pas appeler de fonction bios en mode protégé, je repasse donc en mode réel le temps d'appeler l'interruption

    MAIS ça ne marche pas! ou plus exactement j'arrive a passer en mode réel et a revenir en mode protégé mais dès que je j'appelle une interruption en mode réel ça plante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    ;***************************
    appb:                 ;appel des fonctions lié au bios
    cli
    push ebx
    push ecx
    push edx
    push esi
    push edi
    push ds
    push es
    push fs
    push gs
     
    mov dx,10h 
    mov ds,dx
    lidt[r_idt]          ; charge la gdt et l'idt sauvegardé
    lgdt[r_gdt]          ;
    mov edx,cr0
    and dx,0FFFEh
    jmp $+2
    mov cr0,edx
    jmp 6000h:fctreel   ;saut ou sont installé les fonction en mode réel 
                      ;suivant l'adressage mémoire du mode réel
    finappb:
    mov dx,18h
    mov ss,dx
    pop gs
    pop fs
    pop es
    pop ds
    pop edi
    pop esi
    pop edx
    pop ecx
    pop ebx
    sti
    ret
     
    ;****************************
    ;fonction execut‚ en mode réel  
    fctreel:
    mov dx,5000h
    mov ds,dx
    mov es,dx
    mov fs,dx
    mov gs,dx
    mov dx,4000h
    mov ss,dx
     
    ;ici je met l'interruption que je souhaite appeler (avec les bon paramètres)
     
    rtrnmp:   ;retourne en mode protégé
    mov dx,6000h 
    mov ds,dx
    lidt[p_idt]
    lgdt[p_gdt]
    mov eax,cr0
    or eax,1
    jmp $+2
    mov cr0,eax
    jmp 10h:finappb
    est ce que quelqu'un aurait une idée de ce qui pourrait foirer?

  2. #2
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    salut bifur, à quoi ressemble ta gdt et ton passage au mode protegé? c'est surtout cette etape qui determine si tu arriveras à exploiter les interruptions mode reel depuis le mode protegé.

    si tu veux, j'ai un code fonctionnel pour ça, c'est DEX qui à ecrit la partie mode reel> mode protegé> mode reel, et ça fonctionnait très bien. par contre, faut etre logué pour down le fichier.




    pour jouer en mode reel ET en mode protegé dans le meme code, il faut non seulement sauvegarder le IDTR du mode reel (IDTR -> IVT: linear 0, limit 400h), veiller à ne pas écrire dans les zones de ROM/BIOS (linear 0C0000h to 0FFFFFh) et BDA (linear 400h to beaucoup).

    en gros, n'utiliser qu'entre un et six segments de 64 k de la ram basse. pour le code coté mode reel et les structures (GDT, IDT, disk buffer, etc...).
    si DOS n'est pas chargé, la mémoire utilisable sans probleme est située entre linear 10000h et linear 8FFFFh (segments entre 1000h et 8000h).
    les autres, il faut faire gaffe à ne pas toucher aux diverses choses bios/dos/ebios/boot...


    pour le code et les données mode protegé, faudra privilegier la ram haute (au dessus de 1 mega octets)

  3. #3
    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
    mon passage en mode protégé est une copie conforme de ce qui est utilisé dans le code que j'avais montré, excepté que je sauvgarde la gdt et l'idt/ivt du mode réel c'est a dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sidt[r_idt]
    sgdt[r_gdt]
     
    lidt[p_idt]
    lgdt[p_gdt]
    mov eax,cr0
    or eax,1
    jmp $+2
    mov cr0,eax
    pour ce qui est de ne pas écrire n'importe ou dans la ram je me contente d'utiliser la zone de F800h à 8FFFFh

    en faisant certains essais sur la totalité du code je suis certain que le problème vient de l'IVT du mode réel, il est modifié par le passage en mode protégé mais n'est pas correctement restauré lors du mini passage en mode réel

Discussions similaires

  1. [XL-2010] Excel : mode protégé et fonctions externes
    Par ponteprimo dans le forum Excel
    Réponses: 0
    Dernier message: 20/07/2012, 15h05
  2. Réponses: 4
    Dernier message: 07/11/2007, 08h53
  3. Mode protégé et BIOS
    Par NewbiZ dans le forum Assembleur
    Réponses: 1
    Dernier message: 07/02/2007, 21h53
  4. 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
  5. Mode protégé pour un OS
    Par Ninkosen dans le forum Programmation d'OS
    Réponses: 2
    Dernier message: 25/11/2002, 13h46

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