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?