Skip to content
This repository has been archived by the owner on Apr 7, 2022. It is now read-only.

Latest commit

 

History

History
28 lines (17 loc) · 1.63 KB

README.md

File metadata and controls

28 lines (17 loc) · 1.63 KB

RomainOS

Une idée à la con mais vlà mon OS, from scratch, en 64 bits, à base d'assembleur et de C++ !

Hard
My face when j'ai découvert que c'était compliqué l'assembleur lol

Comment que c'est fait tout ça

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 !

Ready