cs_DbD
Messages postés4Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention12 mars 2004
-
4 mars 2004 à 18:26
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 2014
-
12 mars 2004 à 13:48
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
cs_DbD
Messages postés4Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention12 mars 2004 10 mars 2004 à 16:33
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
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 11 mars 2004 à 11:21
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.
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
cs_DbD
Messages postés4Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention12 mars 2004 12 mars 2004 à 09:09
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 ....