La page de base
Il y a une base page (ou page de base) pour chacuns des programmes chargés en mémoire. Cette base page a une taille de 256 octets et est initialisée par la fonction Pexec du GEMDOS. Elle contient des informations sur le programme chargé comme la taille des différentes sections (texte ou code, data, bss).
Format de la Page de Base:
Offset |
Length |
Value |
Description |
00 |
4 |
p_lowtpa |
Début de la TPA |
04 |
4 |
p_hitpa |
Fin de la TPA + 1 |
08 |
4 |
p_tbase |
Début du segment texte (code) |
0C |
4 |
p_tlen |
Longueur du segment texte |
10 |
4 |
p_dbase |
Début du segement data (données initialisées) |
14 |
4 |
p_dlen |
Longueur du segement data |
18 |
4 |
p_bbase |
Début du segement BSS (données non initialisées) |
1C |
4 |
p_blen |
Longueur du segment BSS |
20 |
4 |
p_dta |
Pointeur Disk Transfer Adress |
24 |
4 |
p_parent |
Page de base du programme parent |
2C |
4 |
p_env |
Pointeur sur la chaîne d'environnement |
80 |
80 |
p_cmdlin |
Image de la ligne de commande/paramètres |
... |
... |
... |
Réservé |
La fonction Pexec du GEMDOS (4B) stocke l'adresse de la page de base dans la pile utilisateur avant de donner la main à votre programme.
Donc la toute première chose à faire dans le programme est de récupérer cette information.
MOVE.L 4(SP), A5
et pensez éventuellement à la mémoriser, on ne sait jamais:
MOVE.L A5,pagebase
avec
pagebase dc.l 0
Grâce à la page de base, vous pourrez :
- Redimensionner la taille allouée au programme et donc librérer de la place dans la TPA. Pour rappel, toute la mémoire disponible est allouée au programme avant chargement. Il ne sera donc plus possible d'allouer une nouvelle zone mémoire si vous ne faîtes pas un peu de ménage (Fonction Malloc() du GEMDOS par exemple).
- Récupérer les paramètres passés au programme.
La
DTA se trouve positionnée par défaut dans la page de base. Par
conséquent, l'utilisation des fonctions GEMDOS
Fsfirst() et Fsnext() vont effacer toutes les informations à partir de
l'offset 20 (hexa) de la page de base. Voir le chapitre sur la DTA
pour plus d'informations.