memory + string
This commit is contained in:
parent
16865bb141
commit
182d8a36c3
7 changed files with 146 additions and 17 deletions
|
|
@ -4,6 +4,7 @@ Le système utilise plusieurs macro *GFX*,*GUI*, etc pour appeler les fonctions
|
|||
|
||||
Les arguments sont passés sur la pile (Convention C : dernier argument empilé en premier, nettoyage par l'appelant géré par la macro).
|
||||
|
||||
* [CGA](/doc/CGA.md) : controleur graphique CGA
|
||||
* [CGA](/doc/API_CGA.md) : controleur graphique CGA
|
||||
* [MEMORY](/doc/API_MEMORY.md) : controleur graphique CGA
|
||||
|
||||
* [MEMORY MAP](/doc/MEMORY_MAP.md) : Plan de la mémoire
|
||||
38
doc/API_MEMORY.md
Normal file
38
doc/API_MEMORY.md
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# API Gestionnaire de Mémoire (Heap)
|
||||
|
||||
## Description
|
||||
Ce module fournit un gestionnaire de mémoire dynamique (Heap) simple pour le mode réel x86. Il utilise un algorithme **First-Fit** avec fusion des blocs libres (coalescing) lors de l'allocation pour minimiser la fragmentation.
|
||||
|
||||
Le segment de mémoire utilisé est défini par `MEM_HEAP_SEG` (par défaut `0x2000`, soit l'adresse physique `0x20000`).
|
||||
|
||||
## Structure des Données
|
||||
Chaque bloc mémoire est précédé d'un en-tête de 6 octets (aligné sur 16 bits) :
|
||||
|
||||
| Offset | Taille | Champ | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| +0 | 1 octet | Status | `0` = Libre, `1` = Alloué |
|
||||
| +1 | 1 octet | Padding | Réservé pour l'alignement |
|
||||
| +2 | 2 octets | Size | Taille des données utiles (en octets) |
|
||||
| +4 | 2 octets | Next | Offset du prochain bloc (0 = Fin de liste) |
|
||||
| +6 | ... | Data | Données utilisateur |
|
||||
|
||||
## Utilisation
|
||||
L'interaction se fait principalement via la macro `MEM`.
|
||||
|
||||
```nasm
|
||||
%include "./common/memory.asm"
|
||||
|
||||
; Initialisation (Obligatoire au démarrage)
|
||||
MEM MEM_INIT
|
||||
|
||||
; Allocation de 100 octets
|
||||
MEM MEM_ALLOC, 100
|
||||
; AX contient le handle (offset) ou 0 si erreur
|
||||
|
||||
; Utilisation du pointeur
|
||||
mov bx, ax ; Sauvegarde du handle
|
||||
MEM MEM_RESOLVE, bx
|
||||
; ES:DI pointe maintenant vers les données
|
||||
|
||||
; Libération
|
||||
MEM MEM_FREE, bx
|
||||
Loading…
Reference in a new issue