Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Probleme de boot [ Archives / Autres asm ] (DbD)
|
Probleme de boot
le 04/03/2004 18:26:33

DbD
|
Bonjour, Alors je fais mon OS et j'ai des problème de boot a partir d'un disquette, sur certain pc ou quand le noyau depasse 40 secteurs ca boot plus non plus .... Voila un bout de mon code : %define BASE 0x100 %define KSIZE 35 [BITS 16] [ORG 0x0] jmp start start: mov [bootdrv],dl ; recuparation de l'unite de boot ; initialisation des segments en 0x07C0 mov ax,0x07C0 mov ds,ax mov es,ax mov ax,0x8000 ; stack en 0xFFFF mov ss,ax mov sp, 0xf000 ; charger le noyau xor ax,ax int 0x13 push es mov ax,BASE mov es,ax mov bx,0 mov ah,2 mov al,KSIZE mov ch,0 mov cl,2 mov dh,0 mov dl,[bootdrv] int 0x13 pop es et en gros après je jump sur le kernel .... Si je met des boucles pour detecter l'erreur il boucle sur l'int 0x13 Merci d'avance ...
|
|
|
|
Re : Probleme de boot
le 10/03/2004 15:45:55

patatalo
Membre Club 
(Admin CS)
|
salut,
le premier petit pb que je constate c'est:
mov [bootdrv],dl ; ici, ds = 0
mov ax,0x07C0 mov ds,ax ; ici, ds=0x7C0
mov ah,2 mov al,KSIZE mov ch,0 mov cl,2 mov dh,0 mov dl,[bootdrv] ; ici, ds=0x7C0 int 0x13
y'a déjà un petit pb. La valeure récupérée dans dl est aléatoire puisque pas initialisée.
@++
|
|
|
|
Re : Probleme de boot
le 10/03/2004 16:33:11

DbD
|
tout d'abord merci de ta réponce ... bootdrv: db 0 j'ai oublier de recopier ca :) cela suffit t'il a eviter le probleme ou si c'est non comme puis-je faire ? DbD
|
|
|
|
Re : Probleme de boot
le 11/03/2004 11:21:44

patatalo
Membre Club 
(Admin CS)
|
salut,
ca peut resoudre effectivement le probleme de l'init [bootdrv] mais, tu met quand meme une valeur dl a un emplacement inconnu, apparement, tes datas doivent se trouver apres ton jmp start.
donc, je pense que tu inscrit la valeur dl dans la table des vecteurs d'interruption.
pour peu que cette interruption se produise -> plantage.
le mieux, est d'initialiser tes segments avant toute modification des variables.
jmp start ; datas start: mov ax,0x07C0 mov ds,ax ; ici, ds=0x7C0
mov [bootdrv],dl ...
de plus, fait toujours un cli avant de modifier l'emplacement de ta pile car:
mov ax,0x8000 ; stack en 0xFFFF mov ss,ax
< si une interruption se produit là, pas bon >
mov sp, 0xf000
autre chose: ta kernel ne peut pas avoir une taille plus grande que 6C00h octets car ta base est a l'adresse FLAT 0x1000 et ton code boot a l'adresse FLAT 0x7C00 soit 54 secteurs
dernier point: peut etre n'as tu pas mis le code complet, sinon, verifie toujours les erreurs possibles a la suite des appels BIOS
xor si,si jmp .1 .0 inc si cmp si,3 jb .1 outtxt 'erreur chargement kernel press key for reboot' waitkey int 0x19 .1 mov ah,2 mov al,KSIZE mov ch,0 mov cl,2 mov dh,0 mov dl,[bootdrv] ; ici, ds=0x7C0 int 0x13 jc .0
@++
|
|
|
|
Re : Probleme de boot
le 11/03/2004 21:29:46

DbD
|
Merci Ok j'ai fais tout cela mais dès que le kernel >= à 37 secteurs il rebbot sans cesse sans m'afficher le message d'erreur ...
Voila la sources plus complete : http://touf.is-a-geek.net/~myos/boot.txt DbD
|
|
|
|
Re : Probleme de boot
le 12/03/2004 09:09:05

DbD
|
C'ets bon j'ai fait une boucle qui copie secteurs par secteurs il chage bien le noyau jump dessus mais un fois dans l'os si j'appuis sur une touche il reboot ....
voila la sources -> http://touf.is-a-geek.net/~myos/boot.txt
Je définie l'idt au lancement du noyau et je redéfini aussi la gdt ...
DbD
|
|
|
|
Re : Probleme de boot
le 12/03/2004 13:48:16
|
Classé sous : int, mov, ax, boot, 0x13
|
CalendriCode
| | | L | M | M | J | V | S | D |
| 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 | | | | | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|