★ CODING ★ COMMENT CONTRUIRE UNE RSX (CPC REVUE) ★ |
Comment Contruire une RSX (CPC Revue) |
La puissance du Basic de l'AMSTRAD ne se limite pas aux seules instructions de son interpréteur ; les concepteurs sont allés beaucoup plus loin et permettent à l'utilisateur d'étendre, à souhait, le jeu d'instructions reconnues par la machine. Ce vocabulaire complémentaire, compris par l'interpréteur est défini au moyen des RSX.RSX... Derrière ces trois lettres mystérieuses se cache l'abréviation de Résident System extension. Ces routines, que le programmeur expérimenté écrira en langage machine, auraient pu être simplement appelées par un CALL suivi de leur adresse... Plus confortable, le Basic de l'AMSTRAD permet de les invoquer directement par leur nom. Seule condition : ce nom doit être précédé du symbole I, obtenu en pressant simultanément les touches SHIFT et Arobas. Le but de cet article est de vous apprendre la procédure qui permet d'écrire une instruction RSX. Pour découvrir la "recette", il suffit de lire le manuel du "Firmware" connu chez AMSTRAD sous la référence "Soft 158". Pour tous ceux qui ne possèdent pas ce document quasi indispensable, CPC explique succinctement le mécanisme qui permet d'écrire une RSX. La RSX n'est pas obligatoirement une instruction simple... Elle peut être suivie de paramètres comme, par exemple, celle décrite par Eddy DUTERTRE dans CPC n° 3, permettant de tracer un cercle dont on définit les coordonnées du centre et le rayon. La forme était CIRCLE x,y,r. Nous allons voir comment passer ces paramètres. L'exemple retenu en illustration est une instruction qui fait cruellement défaut sur l'AMSTRAD : celle qui permettrait d'éditer le catalogue d'une disquette sur imprimante. Nous l'avons baptisée PRTCAT (PRinT CATalogue). Le résultat a été obtenu très simplement, en modifiant deux des indirections du système, détournant la sortie écran vers imprimante. Pour fignoler, et surtout pour donner un exemple du passage de paramètres, nous avons ajouté à notre RSX la possibilité d'éditer ce catalogue en 1, 2 ou 4 colonnes sur l'imprimante. L'astuce retenue fait simplement appel à une sélection automatique du mode d'écran... Ainsi : PRTCAT,0 édite le catalogue en 1 col. PRTCAT, 1 édite le catalogue en 2 col. PRTCAT.2 édite le catalogue en 4 col. ? Pour reconnaître une RSX, le système a besoin des conditions suivantes :
Lors de l'appel de l'instruction, on pourra vérifier que le nombre de paramètres transmis est correct ; ici 1. Si ce nom bre est incorrect, on n'exécutera pas la RSX ou on sortira un message d'erreur pour informer l'utilisateur... Ici, cette solution n'a pas été retenue. L'accumulateur (A) contient ce nombre de paramètres alors que le registre IX pointe sur le dernier. Ici, il n'y a qu'un seul paramètre. Pour décoder ce paramètre, on utilise donc le pointeur IX. Ici, IX + 0 donnera la valeur 0, 1 ou 2 qui doit suivre PRTCAT. Ici, il est inutile de tester la validité du paramètre car ceci est fait automatiquement par la routine système SETMODE établissant le mode écran. Par contre, cela pourrait parfois être indispensable Après avoir recueilli ce ou ces paramètrels), on exécute la routine d'extension à proprement parler. Notre routine est simple : elle force le mode écran selon la valeur passée par le paramètre suivant PRTCAT. Elle teste la touche "ESC" pour pouvoir "Breaker" au cas où l'imprimante ne serait pas sous tension. Elle détourne ensuite la partie écran vers l'imprimante. Elle appelle la routine système CAT après avoir indiqué une zone mémoire buffer provisoire de 2 Ko où sera rangé le catalogue (ici, en &8000 mais cette valeur pourrait être modifiée!. Pour finir, elle rétablit les indirections initiales pour que, par la suite, l'écran soit à nouveau validé. Le lecteur qui ne possède pas d'assembleur pourra taper le programme Basic, contenant dans ses lignes DATA le code machine correspondant à la RSX. Après avoir fait RUN, il suffira de faire un CALL &A000, afin d'initialiser une fois pour toutes la RSX qui sera, par la suite, appelée par |PRTCAT,n où n prendra les valeurs 0, 1 ou 2. Il est possible de sauvegarder le forme binaire de l'extension par SAVE "PRTCAT",b,&A000,&42. Après l'avoir chargée par LOAD, il faudra la lancer par CALL &A000 pour l'initialiser... Au moyen de cet exemple simple, nous espérons avoir prouvé au lecteur qu'il est relativement simple de rendre son AMSTRAD encore plus performant...
|