J'en avais marre qu'à chaque fois que le noyau de BesOS grandissait en taille, j'étais obligé d'incrémenter dans le bootloader le nombre de secteurs disquettes à charger en mémoire. Alors je me suis enfin décidé à le faire charger sous Grub aprés avoir vu les mérites de cette méthode vanté dans le projet SOS. En effet, Grub reconnait plusieurs types de fichier (ELF, Compréssé, noyau Linux etc..) et en plus est capable de lire plusieurs type de file system (ext2, FAT classique etc..). Il n'y avait rien à retoucher au noyau en lui même, par contre il fallait mettre en place les conditions que Grub requiert. Il fallait que dans les 8192 premiers octets du fichier se trouve une structure particulière : vous trouverez cette structure dans les sources de BesOS: boot/x86_boot.h
A part ça rien de sorcier ! Et ça fonctionne niquel. Je n'ai plus à me soucier du passage en PMode, de l'activation ou non de l'A20. Grub me fournie en plus la taille de la ram (chose que je n'avais pas avant mais qui était inscrit en dur dans un header file), alors que demander de plus ?
En effet, j'avais écris y a pas si longtemps que j'avais quelques problème sous BesOS pour évaluer le contenu de la mémoire et essayer de lever volontaire une exception du CPU en faisant une division par zero.
Pour la mémoire, problème résolue trés rapidemment aprés la recompilation de Bochs en ayant activer l'internal debugger et le hack par le port e9. Grace aux outils mis à disposition on peut suivre l'éxécution pas à pas et demander le contenu de la mémoire en donnant une adresse linéaire.
Un dump du CPU est également mis à disposition, et cerise sur le gateau, on peut même placer des breakpoints il semblerait ! Mais je n'en suis pas encore la =)
Grace à tous cela, j'ai pu voir ce que contenait la mémoire, et tout semble aller bien. Alors je me suis penché vers l'exception qui ne se lever pas (divison par zero), et bien c'est la faute à gcc !
En effet je compile les fichiers .c en mettant comme option -O2 comme niveau d'optimisation. Et bien gcc faisait trop bien son travail =( En compilant il me faisait surement sauter ma division par zero. J'ai donc compile sans cette option, et ça fonctionne niquel.
Je peux donc reprendre la gestion de la mémoire physique ou elle en était =)
Next very soon !
J'ai toujours tourné sous Mandrake comme second OS (et oui, on n'enlève pas Windows si facilement, surtout pour un gamer !), donc oui elle est trés orienté Windows-like.... mais ça m'allait trés bien !
Mais un jour j'ai récupéré un vieux Pentium, 32Mb de RAM et un disque dur de quelques centaines de Mo, bref une vieille bécane qui pourrait parfaitement faire office de passerelle à la maison pour le réseau local. J'ai donc monté une Slackware, sans interface X bien sur... que je pilote en SSH depuis ma tour principale. Bonne expérience qui m'a fait découvrir une distrib, mais toujours rien pour l'utilisation bureautique.
Je cherchais une distrib plus légère que la Mandrake pour le développement de BesOS, basé sur sur autre chose, quelque chose de nouveaux quoi... Et il m'est tombé dans les mains un cd d'une Kubuntu ! J'ai été vraiment séduit par la souplesse, et légereté de cette distrib qui contient vraiment le stricte minimum dont j'ai besoins.
Je tourne donc depuis sur une Kubuntu, la 5.04 qui intègre KDE 3.4.1 pour tout ce qui est le développement de BesOS, et j'en suis ravis ! Je ne suis pas trop perdu puisqu'elle intègre KDE avec qui je m'était familiarisé sur Mandrake, et en plus étant basé sur Debian je profite du gestionnaire de dépendances des paquets de cette dernière.
Je la conseille vraiment à toute les personnes souhaitant se mettre sous Linux ! Et si vous préférez Gnome, vous avez Ubuntu =) http://www.ubuntulinux.org/
void dump(unsigned char* addr, int n) { char c1, c2; char *tab = "0123456789ABCDEF"; while(n--) { c1 = tab[(*addr & 0xF0)>>4]; c2 = tab[*addr & 0x0F]; addr++; putcar(c1); putcar(c2); } }