6.2 KiB
6.2 KiB
Memory Map / Cartographie Mémoire
🇬🇧 English
Physical Memory Layout (Real Mode)
The processor starts in Real Mode, addressing 1 MB of memory.
| Physical Start | Physical End | Size | Description | Segment | Source File |
|---|---|---|---|---|---|
0x00000 |
0x003FF |
1 KB | IVT (Interrupt Vector Table) | 0x0000 |
boot.asm / generic.asm |
0x00400 |
0x004FF |
256 B | BDA (BIOS Data Area) Standard | 0x0040 |
common/bda.asm |
0x00500 |
0x005FF |
~256 B | Custom BDA (Driver Data) | 0x0050 |
common/bda.asm |
| ... | ... | ... | Free / Reserved | ||
0x08000 |
0x09FFF |
8 KB | Stack Bottom | 0x0800 |
boot.asm |
0x0A000 |
0x0AFFF |
~4 KB | GUI RAM (Widget Allocation) | 0x0A00 |
gui/lib.asm |
0x0B000 |
0x17FFE |
~52 KB | Stack Top (Grows downwards) | 0x0800 |
boot.asm |
| ... | ... | ... | Conventional RAM Free | ||
0xB8000 |
0xBFFFF |
32 KB | VRAM (CGA / MCGA) | 0xB800 |
drivers/gfx_cgam.asm |
0xC0000 |
0xDFFFF |
128 KB | Option ROMs (e.g., VGA BIOS) | 0xC000 |
boot.asm |
| ... | ... | ... | System Reserved | ||
0xF0000 |
0xFFFFF |
64 KB | System BIOS ROM (Code) | 0xF000 |
boot.asm |
Detailed Zones
Interrupt Vector Table (IVT)
- Location:
0000:0000 - Usage: Interrupt pointer table (256 entries of 4 bytes).
- Initialization:
ivt_setupfills the table with a default handler (default_isr).ivt_setvectorinstalls specific IRQs (e.g., Timer onINT 08h).
BIOS Data Area (BDA)
The project separates the standard IBM BDA from its own variables to avoid conflicts with the VGA BIOS loaded at 0xC000.
- Standard BDA (
0040:0000): Used mainly by the VGA BIOS (loaded via QEMU) to store video modes (0x0049) and column count (0x004A). - Custom BDA (
0050:0000): Defined byBDA_DATA_SEG. Stores driver states:- Mouse: Input buffer, status, coordinates, background buffer (for cursor).
- Gfx: Text cursor position, attributes.
Stack & GUI RAM
- Stack: Segment
0x0800, SP0xFFFE. Grows downwards from physical address0x17FFE. - GUI RAM: Segment
0x0A00(Physical0x0A000). - Layout: The GUI RAM sits at the "bottom" of the stack segment's physical range, but since the stack starts at the top (
0x17FFE) and grows down, there is approximately 56 KB of safe space before collision.
Video RAM (CGA High-Res)
- Segment:
0xB800 - Mode: 640x200 Monochrome (1 bit per pixel).
- Organization: Interleaved.
- Even Lines (0, 2, 4...): Offset
0x0000-0x1F3F(Bank 0). - Odd Lines (1, 3, 5...): Offset
0x2000-0x3F3F(Bank 1).
- Even Lines (0, 2, 4...): Offset
ROM
- Option ROMs (
0xC0000): Scanned bysetup_load_romto initialize the VGA BIOS. - System ROM (
0xF0000): Contains the compiled binary code. The Reset Vector is at0xFFFF0.
🇫🇷 Français
Cartographie Mémoire Physique (Mode Réel)
Le processeur démarre en mode réel, adressant 1 Mo de mémoire.
| Adresse Physique (Début) | Adresse Physique (Fin) | Taille | Description | Segment | Fichier Source |
|---|---|---|---|---|---|
0x00000 |
0x003FF |
1 Ko | IVT (Interrupt Vector Table) | 0x0000 |
boot.asm / generic.asm |
0x00400 |
0x004FF |
256 o | BDA (BIOS Data Area) Standard | 0x0040 |
common/bda.asm |
0x00500 |
0x005FF |
~256 o | Custom BDA (Données Drivers) | 0x0050 |
common/bda.asm |
| ... | ... | ... | Mémoire Libre / Réservée | ||
0x08000 |
0x09FFF |
8 Ko | Bas de la Pile (Stack Bottom) | 0x0800 |
boot.asm |
0x0A000 |
0x0AFFF |
~4 Ko | GUI RAM (Allocation Widgets) | 0x0A00 |
gui/lib.asm |
0x0B000 |
0x17FFE |
~52 Ko | Haut de la Pile (Stack Top) | 0x0800 |
boot.asm |
| ... | ... | ... | RAM Conventionnelle Libre | ||
0xB8000 |
0xBFFFF |
32 Ko | VRAM (CGA / MCGA) | 0xB800 |
drivers/gfx_cgam.asm |
0xC0000 |
0xDFFFF |
128 Ko | Option ROMs (ex: VGA BIOS) | 0xC000 |
boot.asm |
| ... | ... | ... | Réservé Système | ||
0xF0000 |
0xFFFFF |
64 Ko | System BIOS ROM (Code) | 0xF000 |
boot.asm |
Détails des Zones
Interrupt Vector Table (IVT)
- Emplacement :
0000:0000 - Usage : Table des pointeurs d'interruption (256 entrées de 4 octets).
- Initialisation :
ivt_setupremplit la table avec un handler par défaut (default_isr).ivt_setvectorinstalle les IRQ spécifiques (ex: Timer surINT 08h).
BIOS Data Area (BDA)
Le projet sépare la BDA standard IBM de ses propres variables pour éviter les conflits avec le BIOS VGA chargé en 0xC000.
- BDA Standard (
0040:0000) : Utilisée principalement par le BIOS VGA (chargé via QEMU) pour stocker les modes vidéo (0x0049) et le nombre de colonnes (0x004A). - Custom BDA (
0050:0000) : Définie parBDA_DATA_SEG. Stocke l'état des drivers :- Souris : Buffer d'entrée, état, coordonnées, buffer de sauvegarde du fond (pour le curseur).
- Gfx : Position du curseur texte, attributs.
Stack & GUI RAM
- Stack : Segment
0x0800, SP0xFFFE. Grandit vers le bas depuis l'adresse physique0x17FFE. - GUI RAM : Segment
0x0A00(Physique0x0A000). - Organisation : La RAM GUI se trouve "en bas" de la plage physique du segment de pile, mais comme la pile commence tout en haut (
0x17FFE) et descend, il y a environ 56 Ko d'espace libre avant collision.
Video RAM (CGA High-Res)
- Segment :
0xB800 - Mode : 640x200 Monochrome (1 bit par pixel).
- Organisation : Entrelacée (Interleaved).
- Lignes Paires (0, 2, 4...) : Offset
0x0000à0x1F3F(Bank 0). - Lignes Impaires (1, 3, 5...) : Offset
0x2000à0x3F3F(Bank 1).
- Lignes Paires (0, 2, 4...) : Offset
ROM
- Option ROMs (
0xC0000) : Espace scanné parsetup_load_rompour initialiser le BIOS VGA. - System ROM (
0xF0000) : Contient le code binaire compilé. Le Vecteur de Reset est situé à0xFFFF0.