CODINGCLEFS POUR AMSTRAD 1 ★ Système de base par Daniel Martin ★

Clefs pour Amstrad 1 : 08 Format de Stockage Ligne BasicCoding Clefs Pour Amstrad 1
FORMAT DE STOCKAGE D'UNE LIGNE BASIC EN MÉMOIRE

L'ordinateur ne comprend que des codes binaires. L'interpréteur Basic se charge de traduire vos programmes en langage binaire pour autant que ceux-ci soient écrits correctement.

Stockage des instructions Basic

A chaque instruction Basic,   l'interpréteur affecte un code encore appelé TOKEN. Ce système permet un gain de place considérable en mémoire centrale car il est évident qu'un octet prend moins de place qu'un mot entier. C'est pourquoi,  il ne faut jamais utiliser les noms des  instructions Basic pour définir des variables.  En effet,   l'interpréteur  les remplacera par  le TOKEN de l'instruction correspondante.
Stockage d'une  ligne de Basic

Le Basic commence à stocker ses lignes à partir de l'adresse 368.  Voyons, à l'aide d'un exemple comment il stocke une ligne.

Encodez le petit programme suivant :

1990 PRINT "COUCOU"

Ensuite, tapez en direct la suite d'instructions suivantes  :

FOR I=368 T0 390:PRINT I;"  ";PEEK(I):NEXT I

Voici   la suite de nombres qui apparaît ainsi  que  leur signification.

AdresseValeurSignification
36815Octet faible de  la  longueur de ligne.
3690Octet fort de  la  longueur de ligne.
370198Octet faible du numéro de ligne.
3717Octet fort du numéro de ligne.
372191Code de l'instruction PRINT.
37332Code ASCII de  l'espace.
37434Code ASCII de ".
37567Code ASCII de C.
37679Code ASCII de O.
37785Code ASCII de U.
37867Code ASCII de C.
37979Code ASCII de O.
38085Code ASCII de U.
38134Code ASCII de ".
3820Code de séparation.

La longueur de la ligne est exprimée sur deux octets. Elle s'obtient au moyen de la formule :

OCTET FAIBLE + (256 x OCTET FORT)

Donc, la longueur de la ligne vaut : 15 + (Ox 256) = 15. Nous constatons que la ligne occupe effectivement  15 places mémoire.
Le numéro de ligne est également exprimé sur deux octets. 11 s'obtient au moyen de la même formule que pour la longueur. Il vaut donc :

198 + (256 x  7)  =  1990

Pour remplacer le PRINT par REM, il suffit d'encoder directement : POKE 372,197, puis de faire LIST, et on obtient :

1990 REM "COUCOU"

Dès lors, vous pouvez à votre  guise modifier vos programmes, ou mieux, les faire se modifier aux-mêmes en introduisant les lignes de POKE à l'intérieur du programme lui-même...   Bon amusement   !

Voyons maintenant comment sont stockées  les variables.  Encodez le petit programme suivant :

10 ABC=20

Ensuite, tapez comme précédemment :

FOR  I=368 T0 400:PRINT  I;" ";PEEK(I):NEXT  I

Vous voyez apparaître   :

AdresseValeurSignification
36814Octet faible de la   longueur de ligne.
3690Octet fort de  la  longueur de ligne.
37010Octet faible du numéro de  ligne.
3710Octet fort du numéro de ligne.
37213Indique une variable numérique.
3737Longueur du nom de  la variable +4
3740Séparation.
37565Code ASCII du premier caractère du nom de la variable.
37666Code ASCII du deuxième caractère du nom de  la variable.
377195128 + code ASCII du dernier caractère du nom de  la  variable.
378239TOKEN du  signe =.
37925Grandeur de la variable.
38020Valeur de la variable.
3810Séparateur.

La valeur  13 en 372 est un code  indiquant qu'il  s'agit d'une variable numérique.  Pour une variable alphanumérique, nous y trouverions la valeur 3.
De 375 à 377, nous trouvons codé le nom de la variable. Tous les caractères sont codés en ASCII,  sauf le dernier qui est représenté par son code ASCII augmenté de 128.

En  376,   la valeur 239 représente  le TOKEN du signe =.  Le TOKEN du signe = est différent de son code ASCII. Ainsi,   l'ordinateur sait que le signe = ne fait pas partie du nom de la variable.

La valeur 25, qui se trouve en 379, indiquera grandeur de la variable. Voici les différentes valeurs que l'on peut trouver à cet endroit :

ValeurLongueur de la variable
15Valeur de la variable =  1, n'est pas codée.
16Valeur de  la variable = 2, n'est pas codée.
23Valeur de  la variable = 9,  n'est pas codée.
25Valeur de  la variable comprise entre  10 et 255, codée sur un octet.
26Valeur de la variable comprise entre 255 et 65535, codée sur deux octets.
31Valeur de la variable supérieure à 65535 ou non entière,  codée sur cinq octets suivant  la formule suivante :
VALEUR=(2A (o5- 145)* (65536+(o2/128) + (o3* 2) + (o4*512) +(o1/32800))
où o1,..,o5 représentent les valeurs présentes aux cinq adresses servant à coder la variable

Dans le cas où la variable est un nombre négatif, le TOKEN du signe = (239) est suivi du TOKEN du signe - (245).

★ ANNÉE: ???
★ AUTEUR(S): ???

Page précédente : Clefs pour Amstrad 1 : 07 - Codes et Messages d'Erreurs
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.74-desktop
Page créée en 185 millisecondes et consultée 3150 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.