On en a parlé rapidement, les octets de notre code sont stockés en mémoire. Pour l'instant je n'ai parlé que de la RAM mais sachez que ce n'est pas l'unique possibilité.
En effet, le Z80 peut aller lire dans la RAM, mais aussi dans la ROM.
Mais que sont ces deux noms étranges ?
La RAM c'est un endroit ou on peut stocker dans la machine des données.
La RAM on peut la lire et écrire dedans.
La RAM on y mettra nos données (gfx pour le moment) et notre code.
La RAM est composée d'octets (voir le chapitre précédent).
Notre RAM centrale (centrale car c'est la principale, mais il y a aussi la RAM secondaire qui est sous forme de Banks) fait soit 16Ko, soit 48Ko.
Sur un spectrum de base sans extension mémoire il n'y a que de la RAM centrale. Les modèle 128 et +2/3 possèdent 128Ko de RAM total.
1Ko c'est 1024 octets.
48Ko c'est donc 48*1024 octets...
Nous avons donc 49152 octets. En hexadécimal, on écrira #BFFF (il faut compter le 0).
Chaque octet de la RAM a une adresse.
Le premier octet est l'octet numéro #0000. (je donne les adresses en hexa car c'est bien plus pratique, et que je ne parlerai qu'en hexa par la suite pour les adresses.)
Le dernier octet est l'octet numéro #FFFF.
Voici donc la RAM (sans artifice et sans grande précision).
Sur les modèles 16Ko, vous n'aurez donc rien entre #8000 et #FFFF.
Seule la partie en vert sera disponible pour vos programmes donc:
De #5B00 à #7FFF, soit #24FF octets= 9Ko.
Autant dire pas beaucoup...
Sur les modèles 48Ko, vous aurez donc en plus de disponible les adresses de #8000 à #FFFF.
Si l'on exclu les données de l'écran et la table d'attribut (que j'ai noté "Ecran couleurs" sur mon schéma), nous avond donc de disponible:
#A4FF octets, soit environ 41Ko pour nos programmes, ce qui est tout de même bien mieux.
Enfin venons-en au modèles 128/+2/3:
Sur ces modèles vous disposerez le la possibilité de connecter des banks de 16Ko entre #C000 et #FFFF.
Ces banks sont au nombre de 8 (8*16Ko=128Ko) et constituent en plus la RAM centrale.
Différentes possibilités de connexion s'offrent à nous et quelques belles facilités par exemple pour le page flipping.
Comme vous pouvez le voir, les modèles 128Ko permettent de choisir entre la ROM 48K ou la ROM 128K.
Mais la ou c'est plus interessant, c'est la possibilité de connecter les banks en fin de RAM.
On s'interessera surtout aux banks 5 et 7 qui permettent de faire du double buffering, chose impossible en hard sur les anciens modèles.
Pour ce qui est de la selection de l'écran sur les modèles 128K, sachez que vous choisissez quel écran est visible.
Vous pouvez donc connecter la bank 5 ou la bank 7 en #C000 sans pour autant que celle-ci soit celle visible à l'écran.
Dernier point important pour tous les modèles de spectrum, la ROM est lisible mais vous ne pouvez bien entendu rien y écrire. les adresses #0000 / #3FFF sont donc inutilisables.
Notez que les plans de la RAM ci dessus ne font pas état des variables système et autre buffer imprimante.
Nous parlons bien ici de faire du développement en assembleur et l'une de nos première tache sera entre autre de supprimer le système.
Cependant, vous trouverez dans la documentation du site des détails sur l'occupation de la RAM par le système.
Pour commencer doucement, nous allons "poker" quelques octets en RAM et plus particulièrement à l'écran pour voir comment cela fonctionne.
Poker signifie simplement: envoyer un octet dans la RAM.
L'écran graphique sur spectrum se trouve en #4000. Nous allons donc poker un octet à cette adresse pour voir ce que cela donne.
Pour se faire nous allons utiliser le Basic. Et vous allez tout de suite comprendre que celui-ci va nous embêter rapidement.
En effet, alors qu'il serait pratique de pouvoir faire un POKE &4000,255, le basic sur spectrum ne connait pas l'hexadécimal.
C'est relativement embêtant car la logique même de l'adressage de la RAM veut que l'on parle en hexadécimal dès qu'il s'agit d'une adresse.
Nous devrons donc sous basic systématiquement utiliser du décimal et donc convertir nos adresse dans cette notation.
Ainsi #4000 deviens en décimal: 16384.
Faisons le test en Basic: tapez:
POKE 16384,255
Si tout c'est bien passé, vous aurez donc à l'écran 8 pixels d'affichés en haut à gauche.
Vous venez de poker votre premier octet en RAM et c'est mine de rien déjà interessant.
Vous pourrez déjà faire différents tests vous même pour comprendre la structure de l'écran (je vous rappelle qu'il va jusque #57FF).
Une autre chose intéressante et facile à comprendre c'est celle de la structure de l'octet à l'écran. En gros comment est encodé un pixel dans l'octet.
Pour se faire, je vous donne simplement l'instruction Basic BIN suivie des 8 bits de la valeurs.
ex: POKE 16384,BIN 10101010
Bon amusement.