CODINGAMSTRAD CPC 464 - CRÉER DE NOUVELLES INSTRUCTIONS

Nouvelles Instructions 005

EXEMPLES DE PROGRAMMES

2. INTÉGRATION D'UN PROGRAMME MACHINE

Pour simplifier la manipulation des programmes en langage machine, et pour rendre leur emploi moins dangereux (on a vite fait de taper 43800 au lieu de 43880, par exemple), il est possible d'effectuer ce que l'on appelle une intégration. Cela permet de donner à ces programmes des noms, grâce auxquels il sera possible de les appeler en BASIC, comme s'il s'agissait véritablement de nouvelles instructions.
Pour illustrer la méthode d'intégration, nous allons nous servir du programme précédent et nous arranger pour qu'il soit possible de l'appeler avec le format suivant :

|PAUSE,X

Notons que l'extension d'instruction est signalée par un trait vertical (SHIFT + @) placé devant le mot.
Aucune autre intégration ne sera effectuée pour les programmes suivants, mais vous pourrez très facilement les faire vous-même en vous servant de ce modèle.
Voici le listing du programme d'intégration :

Le programme peut être divisié en quatre parties :

* Lignes 1, 2 et 3 : Intégration proprement dite.
* Lignes 4 à 8 : Table d'instruction (nous verrons de quoi il s'agit plus loin).
* Ligne 9 : Espace réservé pour la machine.
* Lignes 10 et suivantes : Programme pause identique au précédent.

Nous allons étudier tout cela dans le désordre pour que, paradoxalement, cela soit plus clair.

Ligne 6

Il s'agit de la représentation hexadécimale des codes ASCII (à ce sujet, voir page A3.1 du guide de l'utilisateur) des lettres du mot choisi pour l'instruction, sauf la dernière (en l'occurrence, il s'agit donc des codes de P, de A, de U, et de S).

Ligne 7

Représentation hexadécimale du code ASCII de la dernière lettre du mot d'instruction plus &80 (en l'occurrence, il s'agit donc du code ASCII de E, plus &80, ou plus 128 en décimal).

Ligne 8

Le 0 signifie à la machine que le mot est terminé.

Ligne 9

Ces quatre octets sont réservés pour la machine (et plus exactement pour un système appelé Kernel) ils lui serviront à gérer l'extension. La manière dont elle s'y prendra nous importe peu.

Ligne 4

Il ne s'agit pas là d'une instruction, mais tout simplement de l'adresse en mémoire du code ASCII de la première lettre du mot d'instruction (ici &50, code ASCII de P, à l'adresse 43870).

Ligne 5

L'instruction C3 est une instruction de saut que l'on peut comparer au GOTO BASIC. Cette instruction doit être suivie d'une adresse en mémoire (ici 43880 ou &AB68).

Remarque importante

D'une manière générale, lorsque l'on écrit une adresse ou une donnée quelconque dans un programme en langage machine, l'octet faible est toujours écrit avant l'octet fort.
Pour en revenir à notre ligne 5, il s'agit donc d'un saut à l'adresse 43880, à laquelle débute le programme de pause proprement dit, tel que nous l'avons déjà étudié. Cette ligne constitue le début de la table d'instruction.

Voyons maintenant l'intégration :

Ligne 1

Chargement, dans BC, de l'adresse du début de la table d'instruction (donc de l'adresse du premier code de la ligne 5).

Ligne 2

Chargement, dans HL, de l'adresse du premier des quatre octets réservés.

Ligne 3

Saut à l'adresse 48337. A cette adresse, qui fait partie du système interne de la machine, se trouve un programme que l'on pourrait appeler "Intégrer une instruction". Là encore, nous laisserons l'ordinateur faire son travail, sans nous préoccuper de la manière dont cela se passe.
En réalité, on ne peut comprendre parfaitement ce programme à moins de connaître à fond le programme interne d'intégration.

Quant à nous, il nous suffit de savoir que ça marche...
Une fois le programme chargé en mémoire, // doit être initialisé une fois et une seule en faisant CALL 43856.
On peut ensuite utiliser le programme de pause grâce à I PAUSE,X. En cas d'écriture erronée de l'instruction, l'éditeur sortira en principe un syntax error.

Remarque

Contrairement au programme précédent, celui-ci n'est pas directement relogeable. Il comprend en effet ce que l'on appelle des adresses internes ; la première ligne, par exemple, charge BC avec l'adresse &AB59 (43865), qui est une adresse du programme lui-même. Si vous souhaitez déplacer ce programme et le mettre ailleurs en mémoire, ce qui est toujours possible, il ne faut surtout pas oublier que cette adresse va également changer en fonction de la nouvelle place du programme, et qu'il faut donc modifier la ligne 1, ainsi que toutes les lignes comprenant des adresses internes.

Pour faciliter les déplacements de programme que vous pourriez entreprendre, les adresses à modifier seront toujours soulignées dans les listings.

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

Page précédente : Nouvelles Instructions 004
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
Page créée en 578 millisecondes et consultée 1092 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.