CODINGAMSTRAD CPC 464 - CRÉER DE NOUVELLES INSTRUCTIONS

Nouvelles Instructions - 3. La Mémoire Écran

Pour simplifier cette étude, nous nous limiterons dans un premier temps au mode 1.
La mémoire écran est une zone de 16K (16384 octets) qui, lorsque vous allumez votre machine, va de l'adresse 49152 à l'adresse 65535. Le schéma de la page suivante montre son organisation.
Comme vous pouvez le constater, chaque colonne a 2 octets de large et chaque ligne 8 octets de haut, ce qui implique qu'en mode 1 un caractère tiendra sur 8 fois 2 = 16 octets (pour information, 1 octet comprend 8 bits ou, si l'on parle de l'écran, 8 pixels, ou encore 8 points de large).
L'écran du CPC est un peu particulier. Vous remarquerez en effet que la première rangée d'octets (ou si l'on veut le premier "trait" de la première ligne), commence à l'adresse 49152 et finit à l'adresse 49231. On pourrait logiquement s'attendre à ce que le deuxième trait commence à l'adresse 49232, ce qui n'est pas le cas (il commence en 51200). L'octet 49232 se trouve au début du premier trait de la deuxième ligne.
Les octets de la mémoire écran sont donc numérotés de la maniée suivante : d'abord les premiers traits des 25 lignes de l'écran, puis les deuxièmes traits, puis les troisièmes, et ainsi de suite.
On peut facilement vérifier cela en essayant ce petit programme :

10 MODE 1
20 FOR 1 = 49152 TO 51151 : POKE 1,255 : NEXT
30 FOR 1 = 51200 TO 53199 : POKE 1,150 : NEXT

La ligne 20 trace les premiers traits de toutes les lignes en rouge et la ligne 30 les deuxièmes traits de toutes les lignes en bleu clair.

Une curiosité subsiste néanmoins, qui ne vous a certainement pas échappé : le trait n°1, par exemple, se termine en 51151 (25e ligne). Or le deuxième trait commence en 51200 (1re ligne). Manquent donc à l'appel 48 octets, et il en est de même à la fin de chaque trait, c'est-à-dire 8 fois.
En fait, ces 48 fois 8 = 384 octets ne sont pas perdus, puisque la machine s'en sert pour gérer par exemple les scrollings d'écran ( = déplacements, dans l'une des quatre directions, de tout l'écran).

Cette disposition de la mémoire écran, pour particulière qu'elle soit n'est en réalité guère plus difficile à travailler qu'une autre dans la mesure ou l'on est averti.
En particulier, et parce que nous nous en servirons dans nos programmes, sachez que :

* Pour passer d'un trait à un autre d'une même ligne, on ajoute ou on enlève 2048 ou un de ses multiples. Par exemple, pour passer du deuxième au troisième trait de la ligne 1, il suffit de faire 51200 + 2048 = 53248, Cela est valable quelle que soit la position d'octet initiale.

* Pour passer sur le même trait d'une autre ligne, on enlève ou on ajoute 80 ou un des ses multiples. Par exemple, pour passer du premier trait de la première ligne au premier trait de la 24e ligne, il suffit de faire 49152+ (23x80) = 50992.

* Le numéro d'un octet précis peut toujours être déterminé à partir du numéro de colonne et du numéro de ligne correspondants. Par exemple, pour calculer l'octet bas/gauche de l'emplacement situé à l'intersection de la deuxième colonne et de la 24e ligne, il suffit de calculer 63406 + (80x24)+(2x2). La formule générale est dans ce cas précis 63406 + 80Y + 2X).

Pour conclure, parlons un peu des différents modes possibles et de leurs différences (nous laisserons de côté le problème des couleurs, qui est plus complexe et nous éloignerait du sujet de ce livre).
Vous n'ignorez pas qu'il est possible, sur l'Amstrad, de travailler sur 20 colonnes en mode 0, sur 40 colonnes en mode 1, et sur 80 colonnes en mode 2 (le nombre de lignes reste inchangé : 25). Mais en terme d'octets, la configuration de la mémoire écran est la même pour les trois modes. L'écran ayant une largeur de 80 octets, le calcul est vite fait:

* En mode 0, chaque caractère est contenu dans une surface de 4 octets de large (sur la figure précédente, un caractère écrit en 1,1 s'inscrirait dans le rectangle déterminé par les octejs 49152, 49155, 63488 et 63491).

* En mode 1, chaque caractère s'inscrit dans une surface de 2 octets de large (le caractère cité plus haut s'inscrirait entre les octets 49152, 49153, 63488 et 63489).

* En mode 2 enfin, chaque caractère s'inscrit sur une surface de la largeur de l'octet (le caractère cité plus haut s'inscrirait entre les octets 49152 et 63488).

Il faut parfois tenir compte de tout cela dans certains programmes, si l'on veut les utiliser en plusieurs modes.

★ ANNÉE: ???
★ AUTEUR: JEAN-CLAUDE DESPOINE

Page précédente : Nouvelles Instructions 013
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 346 millisecondes et consultée 1608 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.