2013-05-26 1 views
-1

Je suis un guide sur l'écriture de votre propre système d'exploitation. Il commence par écrire un bootloader 2 étapes, où le premier bootloader charge dans l'étape 2. Dans le guide que je suis, ils utilisent le système de fichiers FAT12 pour l'image disquette, donc je lis à partir d'un tableau de répertoire racine pour voir si le fichier existe, puis aller à la FAT pour obtenir les clusters de fichiers .... etc, etc.Je n'arrive pas à trouver mon chargeur de démarrage de niveau 2 à partir du répertoire racine FAT12

Mon problème est que mon code ne trouve pas le fichier dans la table du répertoire racine, mais je ne peux pas comprendre pourquoi. Quelqu'un peut-il me diriger dans la bonne direction ici?

C'est le code pour mon bootloader: https://friendpaste.com/FkSFfxLz17LUwdyvK3ONX

Répondre

0

Votre readsectors est cassé. Le call reset au début (ligne 270) détruit les registres tels que AX avec des informations importantes. Ensuite, l'appel à LBAtoCHS (ligne 282) est trop "en retard", c'est après que AX a déjà été détruit par les deux lignes précédentes préparant l'interruption du BIOS. Vous devez déplacer le call LBAtoCHS jusqu'à la ligne 278.

En corrigeant cela, vous verrez que vous chargez des secteurs qui finiront par écraser votre zone de pile que vous avez définie sur 0x9000. Vous devrez résoudre ce conflit.

Un autre problème que j'ai repéré est sur la ligne 102: il devrait être repe pas évident rep. Enfin, un conseil: apprenez à utiliser un débogueur pour résoudre vos propres problèmes.

+0

Merci pour l'aide. Cela ne charge toujours pas la phase 2 après ces changements, mais je n'ai pas le même problème, donc je pense que ces changements ont aidé. Comment utilisez-vous un débogueur pour déboguer un chargeur dans une machine virtuelle? – Gogeta70

+0

Dépend de la machine virtuelle et du débogueur. bochs a un débogueur intégré, mais vous pouvez également attacher gdb. qemu fonctionne également avec gdb. – Jester

Questions connexes