Revenir au plan du site
Organisation de la mémoire
Maintenant que nous avons vu ce qui se passe dans la mémoire de notre Amstrad au démarrage et qu'il est dans une situation stable, à attendre des ordres de notre part, nous allons regarder ce que nous avons à disposition, ce que nous pouvons faire, ce que nous ne devons pas faire et quelles sont les limites.
Sur la capture ci-dessous, j'ai surligné en rouge les zones systèmes. On en voit une au tout début de la mémoire et une aux fameux 3/4, située avant l'adresse écran qui se trouve en #C000 par défaut.
La première zone a trois utilités :
- Elle contient de quoi redémarrer la machine (tape
CALL 0
en basic pour voir)
- Une zone d'amorçage pour les interruptions (le Z80 saute 300 fois par seconde à l'adresse #38)
- Un tampon pour stocker la commande en cours de frappe
La deuxième zone, plus grande, contient les tampons pour les lectures K7, le catalogue, les entrées clavier dynamiques ainsi que toute une zone appelée vecteurs systèmes qui permet d'accéder facilement depuis un programme assembleur, aux fonctionnalités du Basic avec des adresses dans lesquelles sauter. Certains vecteurs simples sans argument peuvent être appelés depuis le Basic comme l'attente d'une touche (tape
CALL &BB06
en basic pour voir)
Cette zone se termine par un nouvel espace qui contient la pile du système. La pile, c'est une zone dans laquelle on entasse temporairement des informations et qu'on dépile peu de temps plus tard. Nous y reviendrons aussi.
Activité de la mémoire lorsqu'on tape une ligne de Basic (cette ligne ne veut rien dire, ça n'a pas d'importance). La frappe dynamique est stockée à l'adresse #AC8A, et, une fois la touche Entrée appuyée, ce tampon est recopié à l'adresse #40 et parce que c'est une ligne de Basic, est recopié en #170 qui est le début du stockage des programmes en Basic.
#0000 | zone système |
#0170 | zone libre utilisée par le Basic |
#A660 | zone système |
#C000 | page de 16k utilisée pour l'affichage graphique |
On le calcule facilement, la taille maximale d'un programme Basic est de 42K avant utilisation. Hé oui, si charger un énorme programme Basic est possible, chaque utilisation de variable va se solder par une 'descente' de la zone système dans la mémoire. Force est de constater qu'en Basic, il est difficile de jouer avec les limites. Calculer l'occupation réelle d'un programme est trops fastidieux pour être réalisé. C'est pourquoi nous nous intéressons à l'assembleur ;)