[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