★ CODING ★ AMSLIVE ★ AMSLIVE n°10 - CPC (S)OS 2ème PARTIE : LA MÉMOIRE (2/2) ★ |
AMSLIVE n°10 - Memoire du CPC 2 | Coding Amslive |
Au menu, cartographie de la mémoire. On va parler de vecteurs, de routines système... Encore un article particulièrement dédié au programmeur en assembleur. Que voulez-vous, on ne se refait pas. Vous vous êtes procuré une RAMCARD ? Pour utiliser conjointement plusieurs programmes en ROM, ceux-ci doivent se partager la mémoire. Autant savoir comment elle est disposée ! Quant à l'augmentation de mémoire, même avec 2 Mo au c, heu, au dos de votre CPC, vous obtiendrez des Memory full. Le BASIC est capricieux et il faut savoir s'y retrouver dans les 64 1ers ko avant de s'attaquer à la RAM supplémentaire. On ne met pas de peau d'ours pour ménager sa monture, comme dirait l'autre. Le schéma décrit sommairement l'organisation de la mémoire. Allons-y pour le détail. 0000 - 003F: Les ReSTart Ici sont casées des petites routines dont l'objectif commun est d'appeler d'autres routines en ROM ou en RAM suivant les paramètres envoyés. La particularité des adresses 0, 8, 10, 18, 20, 28, 30, 38 est qu'on peut les atteindre avec les instructions RST 0, RST 8... respectivement (ou RST 0, RST 1, cela dépend de l'assembleur utilisé). Ces instructions ne prennent qu'un octet, au lieu de 3 pour un CALL. Les codes placés ici sont la réplique de ceux placés au même endroit de la ROM. Ainsi, quelque soit la configuration en cours, on peut y sauter sans hésiter. Plusieurs adresses remarquables : — 0, où se situe la routine de réinitialisation, Le système n'y va jamais, vous pouvez donc y installer une routine de votre cru (mais de 8 octets au maximum !). — 30, réservé à l'utilisateur. Une autre routine possible de 8 octets ! — 38, le RST appelé lors d'une interruption. En 38, il y a un saut à des adresses différentes suivant le modèle de CPC. 0040 - LOWMEM-1 : LOWMEM, l'adresse basse de la mémoire disponible est fixée lors de l'initialisation des ROMs externes qui peuvent donc réserver une zone en bas de mémoire. A ma connaissance, aucun logiciel ne le fait. LOWMEM est donc égal à 40. LOWMEM - LOWMEM + 12F (par défaut 40-16F): Tampon utilisé par l'interpréteur BASIC. Une phrase entrée (maximum 255 caractères) est codée à cet endroit avant d'être interprétée ou rajoutée au programme selon qu'il s'agisse de commandes directes ou d'une ligne de programme. Si la phrase codée (avec tokens, etc..) prend plus de place qu'en accorde le tampon, le message Line too long apparaît. LOWMEM + 130 - ? (par défaut 170 - ?) : Programme BASIC. Les contenus des variables numériques sont stockés directement avec le programme. L'explication est que ce type de variable a une longueur fixe (2 octets pour les entiers, 5 pour les réels). On peut donc les modifier à volonté sans remettre en cause l'architecture du programme. Pour une variable alphanumérique, on stocke une série de 3 octets qui définissent la longueur et la position de la chaîne dans la mémoire. ?? - HIMEM : Dans cette partie sont placées les fameuses chaînes alphanumériques. La variable réservée HIMEM renvoie la plus haute adresse utilisable pour le BASIC. Cette valeur dépend de la place disponible après l'initialisation de toutes les ROMs (sur un 464 sans lecteur de disquette, elle est plus grande), de la taille de la table de caractères redéfinissables (SYMBOL AFTER), du tampon alloué pour les opérations de lecture/écriture (sur dise ou cassette), et enfin de la zone réservée par l'utilisateur pour les programmes binaires (MEMORY). HIMEM+1 - DOU : Dans cette zone, il peut y avoir des programmes binaires, un tampon pour les opérations de lecture/écriture, et la table de caractères redéfinissables. Le dernier octet utilisable (DOU) est fixé par les ROMs. Heu... je me répète, non ? DOU+1 - ABFF: Là, il y a les différentes plages mémoires réservées par les ROMs, qui ne doivent être utilisées que par les ROMs correspondantes. Attention, il s'agit d'adresses relatives ; si les 2 seules ROM sont POIRE qui a besoin de 100 (en hexa) octets, et BONNE qui en veut 200, voici l'évolution de la place disponible (et par suite l'adresse des zones réservées) suivant l'ordre d'initialisation : 1er cas ; 2ème casVous remarquerez que 104 et 204 octets ont été pris. En fait, les 4 octets sont rajoutés par le système pour justement retrouver quelle plage est associée à quelle ROM. Même si une ROM ne réserve rien, 4 octets seront employés. Si vous n'avez pas de ROMs externes autre que AMSDOS, celle-ci utilisera la zone A700-ABFF (avec les 4 octets de A6FC à A6FF). |
|
Page précédente : AMSLIVE n°08 - Z80 : MACHINS, BIDULES, ASTUCES & TRUCS |
|