CODINGAMSTAR ★ ARCHITECTURE ET COMPOSITION DES RSX ★

Initiation à L'Assembleur Amstar&CPC 28 - Architecture et Composition des RsxCoding Amstar
Le CPC d'Amstrad est doté d'un langage BASIC, écrit par Locomotive Software, dont on peut dire qu'il est encore, plusieurs années après son lancement, un des meilleurs du marché. Cela ne l'empêche pas de renfermer quelques lacunes parfois surprenantes.

Heureusement pour nous, il est possible, sans trop de difficultés, d'apporter des solutions aux (rares) faiblesses du langage en lui ajoutant des instructions de notre cru ou pourquoi pas, en écrivant des instructions ou commandes BASIC appelées à remplacer certaines instructions défaillantes. Ces nouvelles Instructions portent le doux nom de RSX qui correspond à Résident System Extensions et que nous traduirons par Extensions Résidentes du Système. Nous allons tenter, à travers plusieurs articles, de vous expliquer les principes, exemples à l'appui, de l'élaboration d'une RSX et de son Implantation en mémoire.

LA MéMOIRE DU CPC

— Le CPC, comme tous les micro-ordlnateurs utilise deux types de mémoires. La première et la moins importante est appelée mémoire morte ou ROM. La seconde est la mémoire vive ou RAM.

La ROM est appelée mémoire morte parce que les instructions que l'on y a placées sont inamovibles. Elle constitue en quelque sorte la personnalité du CPC. On y trouve entre autres le système d'exploitation (Amsdos) de la machine qui gère clavier, écran et lecteurs de disquettes ou de cassettes et le langage BASIC.

La RAM est une vaste zone de mémoire disponible dans laquelle on place tout ce qui n'appartient pas à la rom, c'est-à-dire pour l'essentiel données et programmes. C'est dans cette zone que l'on Implantera les RSX. La mémoire du CPC est organisée en unités de 8 bits, chaque unité correspondant à une adresse se situant entre 0000 et &FFFF. Pour des raisons qu'il serait superflu de développer ici, le CPC transfère le contenu de la ROM dans la RAM. Cette ROM transférée occupe alors les emplacements situés entre &C000 et &FFFF. Avec un désassembleur et l'aide d'un ouvrage comme "la Bible du CPC (Micro Application), on peut retrouver dans cette zone les programmes, appelés souvent routines correspondant aux instructions du BASIC.

Le modèle des Instructions RSX ne diffère guère du modèle des Instructions BASIC. La grande différence étant que les premières seront implantées en mémoire haute mais sous l'adresse &C000.

LA STRUCTURE D'UNE RSX

— Si vous survolez cet article et que vous observez des codes hexadécimale des instructions de programmation du microprocesseur Z80, alors que vous ne connaissez pas la programmation par codes, ne vous Inquiétez pas, nous vous donnerons toutes les Indications nécessaires pour que ceci puisse être considéré comme une initiation à cette programmation qui donne de grandes satisfactions.

Les programmes de nombreuses extensions résidentes au BASIC de l'Amstrad ont été publiés Ici et là dans les revues et dans les livres. Les entrer dans son ordinateur et les utiliser, c'est bien, mais en comprendre la structure, c'est mieux et savoir en créer apporte encore plus de satisfactions Intellectuelles. Dans cet article, nous étudierons la structure d'une RSX et décortiquerons l'une de celles qui ont été publiées dans la revue, un bon exemple valant mieux qu'un long discours. A la base d'une RSX, il y a un petit programme binaire tel l'un de ceux qui dessinent des cercles, des rectangles, des étoiles ou fout autre motif ou bien qui se comportent comme des fonctions et vous retournent la variable de sortie d'un calcul : pgcd, racine carrée, etc. Nous vous donnerons par la suite des exemples de ce qu'il est possible de faire. Nous verrons également comment les Implanter au mieux dans la mémoire lorsque nous aurons à utiliser régulièrement plusieurs de ces RSX.

Mais il est indispensable de bien connaître la différence entre un petit programme binaire que l'on appelle avec un CALL et une RSX que l'on appelle comme une Instruction BASIC. Disons tout de suite que si vous n'utilisez qu'un seul de ces sous-programmes binaires, la transformation en RSX est peu utile et d'autant moins que ce sous-programme sera relogeable. Le problème est autre si vous employez souvent de nombreux programmes binaires.
Dans ce cas, en effet, vous aurez à appeler par des CALL ces nombreux programmes et à vous souvenir des adresses où ils ont été stockés, et devrez retaper ces adresses sans erreurs. De plus, ces adresses n'auront aucun caractère mnémonique qui vous permettrait de connaître leur rôle.

Transformer un programme binaire en une RSX appelable comme une instruction BASIC, c'est lui adjoindre un en-fête qui permettra cette transformation. Notre RSX sera un nouveau programme binaire constitué de l'ancien précédé de l'en-tête le convertissant en RSX. Cela se trouve dans "la Bible du CPC", mais ne craignez rien si vous ne la possédez pas, nous vous donnerons Ici fous les éléments nécessaires,

* Nous lisons dans 'la Bible" le processus pour effectuer cette opération :
— Placer dans le registre HL t'adresse d'une table de stockage de 4 octets qui seront utilisés par le système,
— Placer dans le registre BC l'adresse d'une table de commande qui comprend :

a) l'adresse (absolue) où se situe le nom de l'extension
b) l'adresse (absolue) où se situe le début du sous-programme proprement dit que nous voulons transformer en RSX. Il est obligatoire de marquer la dernière lettre du nom (pour que le système puisse la reconnaître) en ajoutant au code hexadécimal de la dernière lettre le nombre &80. Pour indiquer au système que la séquence est close, l'octet suivant doit être mis à zéro


Listing 1

— Intégrer l'extension, c'est-à-dire prévenir le système de son existence, à( l'aide d'un petit sous-programme prévu à cet effet et qui se trouve dans la mémoire morte de l'ordinateur, en appelant ce sous-programme à l'aide d'un CALL à l'adresse &BCD1.

Mais comme ceci est bien abstrait, nous allons l'illustrer par un exemple en décortiquant la RSX appelée BOX décrite par Pascal AURILLARD dans le numéro 16 de CPC. Il y est indiqué d'implanter de l'adresse 40070 à l'adresse 40180, c'est-à-dire de &9C86 à &9CF4 les octets suivants en codes hexadécimale bien sûr. ( Voir listing 1 ).

Pour étudier ce programme, une feuille de papier, un crayon et la table des codes de programmation du microprocesseur Z80 qui équipe votre ordinateur sont largement suffisants. En supposant que vous ayez entré ces codes, vous pouvez également utiliser un désassembleur tel que DAMS, ZEN etc. Un moniteur a été décrit dans le numéro 23 de CPC, mais il vous posera quelques problèmes car il faudra le reloger ( car recouvrant les octets de la RSX que nous étudions ) et que de plus il désassemble mal certaines séquences de codes. Nous reviendrons plus tard sur l'utilisation de ces assembleurs et dôsassembleurs qui n'est pas toujours simple. Quelle que soit la méthode utilisée, vous voyez l'organisation suivante du début du programme. ( Voir listing 2 ).

Vous observez que les- quatre premiers octets de &9C86 à &9C89 sont vides, ce sont ceux dont nous avons dit plus haut qu'ils étalent réservés à l'usage du système.

En &9C8A nous trouvons le code 21 qui est le code de l'instruction mnémonique LOAD HL,dd dans lequel dd représente l'adresse de la zone de quatre octets réservés au système. Le microprocesseur Z 80 est organisé de façon telle que lorsque le système stocke une adresse sur deux octets, l'octet représentant les bits de poids faibles de l'adresse sont placés avant l'octet représentant les bits de poids forts de l'adresse. Ainsi 86 9C correspond à l'adresse &9C86 et vous pouvez constater qu'il s'agit de l'adresse de début de la zone de quatre octets que nous avons réservés pour le système.


Listing 2

Ensuite 01 est le code hexadécimal qui correspond à l'instruction mnémonique LOAD BC,dd et où dd correspond à l'adresse où débute la table de commande. Vous lisez 01 94 9C, ce qui compte tenu de la remarque précédente correspond à l'adresse &9C94 où débute la table de commande comme nous le verrons plus loin.

Après, en &9C90, vous trouverez le code CD qui est un code d'appel d'un sous-programme stocké en mémoire à l'adresse &BCD1, en fonction de la même remarque que ci-dessus. C'est ce sous-programme qui a pour fonction d'Intégrer l'extension au système.

Vous trouverez ensuite un C9, code dont nous ne Jurerons pas qu'il est indispensable et que vous pouvez remplacer par un NOP, c'est-à-dire mettre l'octet à zéro.

Puis vous trouverez en &9C94 les codes 99 9C qui correspondent à l'adresse &9C99 où commence l'enregistrement du nom de la RSX, BOX dans notre cas.

En si 9C96, vous trouverez le code C3 qui est le code saut à l'adresse qui suit, c'est-à-dire toujours en inversant les octets, &9C9D et c'est là que commence le programme binaire proprement dit qui a été transformé en RSX.
En &9C99 nous avons le code hexadécimal 42, soit 66 en décimal, c'est-à-dire la lettre B, ce code est suivi de AE qui représente le 0, puis de D8. Mais nous voyons que D8 est suivi d'un octet à zéro dont nous savons qu' Il termine notre en-tête; c'est-à-dire que D8 représente le code de la dernière lettre du nom de la RSX, auquel on a ajouté &80, c'est-à-dire en faisant la soustraction, le code 58 en hexadécimal de la lettre X. Et si vous ne le savez pas, on vous apprendra à faire des opérations en hexadécimal.

Toutes les RSX ont cette structure, à ceci près que les quatre octets réservés au système peuvent être placés après l'Instruction et que l'ordre de chargement des registres HL et BC est indifférent : nous aurions pu charger BC avant HL.

* Pour terminer, je vous propose quelques petits exercices très Intéressants :

Vous prenez ici et là quelques petits programmes binaires simples sans valeur de retour et vous les transformez en RSX, N'oubliez pas lors de leur appel de faire précéder leur nom de splash : |, ni bien sûr de les charger en mémoire vive auparavant en choisissant un «memory» qui les préserve de l'écrasement. Ce sera un excellent début si vous ne savez pas programmer en codes hexadécimale.

Il y a encore beaucoup à dire, mais ce sera pour une prochaine fois. Bon courage...

Georges SATO , AMSTAR&CPC n°28

★ CONFIG: 64K + AMSDOS + ROM BASIC 1.1

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Demoscene » Xzentrix 2011
» Applications » ZEN Assembler
» Applications » Dams et CP/M (CPC Revue)
» Applications » Schneider Devpac
» Demoscene » Xzentrix 2015
» Info » Drazen Beljan
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 707 millisecondes et consultée 2971 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.