[SOS] secteur de boot
goyet christopher
gc402395 at messetud.unice.fr
Mar 26 Avr 15:17:11 CEST 2005
Bonjour a tous,
je viens de decouvrir cette serie d'articles sur les os, et je suis
donc un peu en retard... Je voulais revenir sur le premier article, en
particulier sur le secteur de boot. J'ai rajouté quelques lignes
d'assembleurs pour avoir la taille de la ram (Quelqu'un en avait deja
parlé avant moi?). Mais je ne sais pas si ca marche sur les
ordinateurs un peu vieux? Et je ne sais pas non plus si ca suffira
pour faire tous les articles avec ce secteur de boot ou bien si
d'autres infos fournies par grub sont importantes pour la suite?
Enfin bon, voila les quelques lignes :
/* A la fin du code, apres les strings */
....
haltmsg: .string "System Halted\r\n"
memsize1: .long 0
memsize2: .long 0
/*** Les code/données du boot secteur se terminent ICI.
......
dans here apres Efface l'ecran:
....
int $0x10
/* cherche la taile memoire */
mov $0xE801, %ax
int $0x15
movw %ax, (memsize1)
movw %bx, (memsize2)
/*Affiche les messages d'attente */
.....
Et dans launchKernel, juste avant le jmp vers main:
....
/* passe les arguments a sos */
xor %eax, %eax
xor %ebx, %ebx
movw (COPY_ADRESS+(memsize2)), %ax /*eax = num de block de 64KB apres
16MB*/
movw (COPY_ADRESS+(memsize1)), %bx /*ebx = num de block de 1KB entre
1MB et 16MB*/
movl $0x40, %ecx /*ecx=64 */
mul %ecx
add %ebx, %eax
pushl %eax /* valeur de addr */
pushl $2BADB001 /*valeur de magic = magic de grub -1 */
pushl %eip /* normalement call fait un push eip, mais la on a un jmp*/
/**
/* Saut vers le noyau.
*/
ljmp $0x8, $sos_main
....
voila je crois que je n'ai rien oublié...
Il faudra modifier un peu le main pour prendre en compte magic-1
A bientot
Christopher GOYET
Plus d'informations sur la liste de diffusion Sos