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

★ AMSTRAD CPC ★ DOWNLOAD ★

Files:
» Amsoft_devpacDATE: 2013-09-03
DL: 574 fois
TYPE: ZIP
SIZE: 47Ko

» DAMS-CPMDATE: 2013-09-03
DL: 179 fois
TYPE: ZIP
SIZE: 18Ko

» damspackDATE: 2013-09-03
DL: 386 fois
TYPE: ZIP
SIZE: 47Ko

» DAMS_6128__FRENCHDATE: 2015-07-09
DL: 50 fois
TYPE: ZIP
SIZE: 39Ko

» DAMS_Converter_v1.1DATE: 2013-09-03
DL: 365 fois
TYPE: ZIP
SIZE: 25Ko

» Dams_notice_FRDATE: 2002-11-15
DL: 361 fois
TYPE: ZIP
SIZE: 18Ko

» DAMS_Overdrive_v1.0DATE: 2013-09-03
DL: 365 fois
TYPE: ZIP
SIZE: 39Ko

» DAMS_OVL__ROMDATE: 2002-12-02
DL: 448 fois
TYPE: ZIP
SIZE: 21Ko

» DAMS_v1.2__(Include_Manual).zipDATE: 2015-05-07
DL: 138 fois
TYPE: ZIP
SIZE: 49Ko

» DAMS__(Keypad_patched_version)DATE: 2013-09-03
DL: 271 fois
TYPE: ZIP
SIZE: 37Ko

» Hisoft_Devpac80_v.2__ENGLISHDATE: 2013-09-03
DL: 470 fois
TYPE: ZIP
SIZE: 447Ko

» Hisoft_Devpac_ROMDATE: 2012-09-19
DL: 423 fois
TYPE: ZIP
SIZE: 12Ko

» Hisoft_Devpac__ENGLISHDATE: 2013-09-03
DL: 435 fois
TYPE: ZIP
SIZE: 85Ko

» RSX-Fast_Arrow__(Include_DEVPAC_SRC)__FRENCHDATE: 2015-07-28
DL: 58 fois
TYPE: ZIP
SIZE: 39Ko

» Zenith_2_DecompacterDATE: 2013-09-03
DL: 354 fois
TYPE: ZIP
SIZE: 26Ko

» ZENSUREN__GERMANDATE: 2013-09-03
DL: 323 fois
TYPE: ZIP
SIZE: 24Ko

» Zen__FRENCHDATE: 2013-09-03
DL: 365 fois
TYPE: ZIP
SIZE: 39Ko

Adverts/Publicités:
» Hisoft-Devpac80DATE: 2014-05-05
DL: 175 fois
TYPE: image
SIZE: 116Ko

» Hisoft-Devpac__ENGLISHDATE: 2015-01-08
DL: 154 fois
TYPE: image
SIZE: 238Ko

» Hisoft-Happy_New_Year_from_Hisoft-Pascal80-C_Plus_Plus-Devpac80-The_Knife-Catalog-Your_Health-Your_Horoscope__ENGLISHDATE: 2014-12-26
DL: 76 fois
TYPE: image
SIZE: 307Ko

» Hisoft-Pascal_4T-Devpac_3DATE: 2015-01-08
DL: 181 fois
TYPE: image
SIZE: 189Ko

» Zenith_Software-Z-PackDATE: 2015-01-08
DL: 118 fois
TYPE: image
SIZE: 61Ko

Covers:
» Amsoft-HiSoft-Devpac__ENGLISHDATE: 2015-01-08
DL: 157 fois
TYPE: image
SIZE: 274Ko

» Hisoft_Devpac__(Release_TAPE)__SPANISHDATE: 2014-05-05
DL: 186 fois
TYPE: image
SIZE: 418Ko
 

Medias/Supports de stockage:
» Devpac__(Release_DISC-AMSOFT)__ENGLISHDATE: 2016-06-21
DL: 22 fois
TYPE: image
SIZE: 14Ko
NOTE: Uploaded by hERMOL ; w310*h374

» Hisoft_Devpac__(Release_AMSOFT-TAPE)__ENGLISHDATE: 2015-11-11
DL: 23 fois
TYPE: image
SIZE: 100Ko
NOTE: Scan by Loic DANEELS ; w594*h739

» ZEN_Assembler__(Release_TAPE)__ENGLISHDATE: 2015-11-11
DL: 36 fois
TYPE: image
SIZE: 95Ko
NOTE: Scan by Loic DANEELS ; w594*h737

Manuels d'utilisation:
» DAMS__(Manuel_d_utilisation-OCR_by_DRILL)__FRENCHDATE: 2014-05-05
DL: 315 fois
TYPE: PDF
SIZE: 330Ko

» HiSoft-Devpac__(Licence_Statement)__ENGLISHDATE: 2014-05-05
DL: 184 fois
TYPE: image
SIZE: 295Ko

» HiSoft_Devpac_Programmers_Manual__ENGLISHDATE: 2014-05-05
DL: 467 fois
TYPE: PDF
SIZE: 2083Ko

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.75-desktop/c
Page créée en 090 millisecondes et consultée 748 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.