Le mode réel x86 Memory Map est la suivante:
- 0x00000000 - 0x000003FF - Real Mode Interrupt Vector Table
- 0x00000400 - 0x000004FF - BIOS Data Area
- 0x00000500 - 0x00007BFF - Unused
- 0x00007C00 - 0x00007DFF - Our Bootloader
- 0x00007E00 - 0x0009FFFF - Unused
- 0x000A0000 - 0x000BFFFF - Video RAM (VRAM) Memory
- 0x000B0000 - 0x000B7777 - Monochrome Video Memory
- 0x000B8000 - 0x000BFFFF - Color Video Memory
- 0x000C0000 - 0x000C7FFF - Video ROM BIOS
- 0x000C8000 - 0x000EFFFF - BIOS Shadow Area
- 0x000F0000 - 0x000FFFFF - System BIOS
Dans ma vraie programmation en mode je colle habituellement de 0x00007E00 - 0x0009FFFF (Pas tout) .. J'utilise le segment: offset d'adressage à utiliser la mémoire .. pour passer d'une étape 1 bootloader à un noyau ou une bootloader 2ème étape, j'utilise:
; bootloader.s
BITS 16
ORG 0x7C00
CLI
JMP 0xE000 ; Can also be JMP 0x7C00:200
HLT
TIMES 510 - ($-$$) DB 0
DW 0xAA55
-
; Something.s
BITS 16
ORG 0x7E00 ; Can also be ORG 0x7C00:200
; Code goes here for your purposes.. whether it be a 2nd stage
; bootloader or your 16bit kernel..
CLI
HLT
Si vous allez en mode protégé, vous aurez toujours besoin d'un talon comme indiqué ci-dessus .. Dans Something.s, vous pouvez programmer dans vos routines en mode protégé (GDT, A20, Set mode vidéo, etc.)
Pour expliquer l'emplacement de la mémoire à 0x7C00 (Bootloader Entry Point), 0x7C00 - 0x7DFF est l'endroit où vous placez votre bootloader (le bootloader.s ci-dessus). Vous le placez là parce que le BIOS saute à cet endroit après avoir fait ses routines. Le bootloader doit avoir une taille de 512 octets (remarquez la directive TIMES). À partir de là, votre code peut être de n'importe quelle taille (tant qu'il tient dans la carte mémoire), et vous serez en mesure de travailler entièrement sur l'OS.
Si vous partez en mode protégé 32 bits, vous serez en mesure d'utiliser N'IMPORTE QUOI à propos de la marque 1MiB.
Vous ne pouvez pas oublier le BIOS. Il peut avoir besoin de certaines zones de mémoire protégées pour les régions MMIO, ou pour une utilisation par le code SMM. – bdonlan
De nombreuses zones de mémoire physiques ne sont pas utilisables spécifiquement avec du matériel mappé en mémoire. – clemahieu