Une idée à la con mais vlà mon OS, from scratch, en 64 bits, à base d'assembleur et de C++ !
My face when j'ai découvert que c'était compliqué l'assembleur lol
Au moment du boot, le BIOS va load les 512 premiers bytes du disques (aka boot sector), définis dans src/bootSector/bootloader.asm
.
Le bootloader, alors encore en "real-mode" 16-bits, va ensuite entrer en "protected-mode" 32-bits via src/secondSector/extendedProgram.asm
.
La mémoire utilisable est listée, la ligne A20 est activée (pour éviter un wrap-around à 1 Mo), les interruptions sont désactivées,
la RAM est structurée et un système de permissions basique est appliqué (tout en restant limitée à 4 Go).
Puis le boot va continuer en mode 64-bits, gérant un affichage VGA 25x80.
Les informations du CPU sont accessibles, les long int (64 bits) sont activés, un paging de la RAM est effectué, et le GDT passe en 64 bits.
Après ça, les SSE sont activés pour utiliser les nombres flottants dans le kernel.
Pour finir en assembleur, la méthode _start
de src/kernel.cpp
est appelée, chargeant le kernel C++ à proprement parler.
En C++ maintenant, le curseur est instancié, les interruptions clavier (IDT) initialisées, le layout du clavier set, et les régions utilisables en mémoire récupérées.
Et après tout ça, le noyau est ready !