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

Clefs1 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 1=368 T0 390:PRINT I;" ";PEEK(I):NEXT I

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

Adresse Valeur ;Signification
----------------------------------------------------------------------------------------
368 ; 15 ; Octet faible de la longueur de ligne.
369 ; 0 ; Octet fort de la longueur de ligne.
370 ;198 ; Octet faible du numéro de ligne.
371 ; 7 ; Octet fort du numéro de ligne.
372 ;191 ; Code de l'instruction PRINT.
373 ; 32 ; Code ASCII de l'espace.
374 ; 34 ; Code ASCII de ".
375 ; 67 ; Code ASCII de C.
376 ; 79 ; Code ASCII de 0.
377 ; 85 ; Code ASCII de U.
378 ; 67 ; Code ASCII de C.
379 ; 79 ; Code ASCII de 0.
380 ; 85 ; Code ASCII de U.
381 ; 34 ; Code ASCII de ".
382 ; 0 ; Code 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 1=368 T0 400:PRINT I;" ";PEEK(I):NEXT I

Vous voyez apparaître :

Adresse Valeur ;Signification
----------------------------------------------------------------------------------------
368 ;14 ; Octet faible de la longueur de ligne.
369 ; 0 ; Octet fort de la longueur de ligne.
370 ;10 ; Octet faible du numéro de ligne.
371 ; 0 ; Octet fort du numéro de ligne.
372 ;13 ; Indique une variable numérique.
373 ; 7 ; Longueur du nom de la variable +4.
374 ; 0 ; Séparation.
375 ;65 ; Code ASCII du premier caractère du
;nom de la variable.
376 ;66 ; Code ASCII du deuxième caractère du
;nom de la variable.
377 ; 195 ; 128 + code ASCII du dernier caractère
;du nom de la variable.
378 ; 239 ; T0KEN du signe =.
----------------------------------------------------------------------------------------
Adresse Valeur ; Signification
----------------------------------------------------------------------------------------
379 ;25 ; Grandeur de la variable.
380 ;20 ; Valeur de la variable.
381 ; 0 ; Sé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 :

Valeur Longueur de la variable
----------------------------------------------------------------------------------------
15 Valeur de la variable = 1, n'est pas codée.
16 Valeur de la variable = 2, n'est pas codée.
23 Valeur de la variable = 9, n'est pas codée.
25 Valeur de la variable comprise entre 10 et 255,
; codée sur un octet.
26 Valeur de la variable comprise entre 255 et 65535,
; codée sur deux octets.
31 Valeur 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 : Clefs1 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.7-desktop/c
Page créée en 520 millisecondes et consultée 2279 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.