APPLICATIONSDIVERS ★ DEVERROUILLONS LES RSX ★

Déverouillons les RSX (CPC Revue)Applications Divers

L'adresse à laquelle une routine RSX doit être chargée est fixée (à la lettre) par son auteur.

l'utilisateur peut souhaiter modifier cette adresse pour 2 raisons :

  • récupération de mémoire par élévation de l'adresse ;
  • chargement de plusieurs RSX qui se recouvrent.

Les utilisateurs pratiquant l'Assembleur résolvent ce problème en principe aisément. ....

Les autres en sont généralement réduits a mettre la ou les routines au frigidaire pour une durée indéterminée.

Nous sommes ici pour venir en aide à ces derniers.

En effet, il existe un procédé EXTREMEMENT SIMPLE permettant de transformer CERTAINES (nous verrons la raison de cette restriction) routines RSX en routines "ordinaires" (CALL adresse, paramètres).

Prenons l'exemple de la routine RSX |KDOKE (Double pOKE avec déKalage) qui implante une valeur sur 16 bits aux adresses Base +Decal et Base +Decal + 1. La syntaxe en est la suivante :

CALL &A000

|KDOKE, Adresse de base, Decalage, Valeur à implanter

Voici cette routine (fort utile au demeurant) :

DATA 01,09,A0,21,14,A0,C3,D1, 8C,0E,A0,C3.18,A0,4B,44
DATA 4F,4B,C5.00,00,00,00,00, DD,6E,04,DD,66,05.DD,5E
DATA 02,DD,56,03,DD,4E,00,DD, 46,01,19,71,23,70,09

Le processus de transformation est le suivant :

Trouver 2 octets D1,BC

Ces deux octets figurent toujours au début d'une routine RSX.

Ils sont précédés soit de C3, soit de CD.

Nous trouvons effectivement C3,D1 ,BC en positions 7, 8 et 9.

Chercher le nom de la commande (KDOKE)

Ce nom est toujours au-delà de D1,BC.

Avec une table des codes ASCII, nous trouvons que KDOKE se dit 4B,44,4F,4B,45 en hexadécimal.

A partir de la position 15, nous trouvons 4B.44,4F,4B,C5.

Cette différence tient au fait qu'au dernier caractère est toujours ajouté 128 décimal, c'est-à-dire 80 hexa. Nous avons donc bien trouvé le nom. Attention : le nom est toujours suivi d'un octet 00, mais pas forcément de plusieurs.

Entre D1 BC et le nom, chercher un octet C3

Nous le trouvons en position 12.

Immédiatement après, nous trouvons 18,A0 qui est une adresse que nous devons lire en l'inversant : A018. Cette adresse est celle de la routine "ordinaire" lorsque la routine RSX se trouve à son adresse de chargement, &A000 dans le cas présent.

Si nous faisons en mode direct PRINT &A018-&A000, nous obtenons 24 (&18).

24 est le nombre d'octets à SUPPRIMER ou à REMPLACER par 00 pour enlever à la routine son préambule RSX.

LE RESULTAT

Nous admettrons que la routine CALL est :

DATA 00,00,00,00,00,00,00,00, 00,00,00,00,00,00,00,00
DATA 00,00.00,00,00,00,00,00, DD,6E,04,DD,66,05,DD,5E
DATA 02,DD,56,03,DD,4E,00,DD, 46,01,19,71,23,70,C9

ou bien

DATA DD,6E,04,DD,66,05,DD,5E, 02,DD,56,03,DD,4E,00,DD
DATA 46,01,19,71,23,70,C9

Dans le cas présent, cette dernière routine peut effectivement être chargée à une adresse "quelconque" et mise en œuvre de la façon suivante :

100 KDOKE = &A500
110 MEMORY KDOKE - 1
200 LOAD "KDOKE", KDOKE
500 CALL KDOKE, ADR, 22, VALEUR'--KDOKE plus parlant que &A500

VALIDITE DU PROCEDE

Le procédé qui vient d'être exposé ne permettra pas de DEVERROUILLER toutes les routines RSX.

En premier lieu, il ne traite pas le cas des routines RSX ayant plusieurs points d'entrée (plusieurs noms de commande). Ensuite, il se peut que la disparition du préambule RSX soit insuffisante pour rendre sa mobilité à la routine. Prenons un exemple :

Un message d'erreur concernant le NOMBRE de PARAMETRES est incorporé à la routine RSX initiale "KDOKE". Ce message est affiché lorsque ce nombre est différent de 3. En enlevant le préambule RSX de cette routine modifiée, nous obtenons :

DATA 00,00,00,00,00,00,00,00, 00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00, FE,03,20,17,DD,6E,04,DD
DATA 66,05,DD,5E,02,DD,56,03, DD,4E,00,DD,46,01,19,71
DATA 23,70,C9,21,3F,A0,7E,B7, C8,CD,5A,BB,23,18,F7,6E
DATA 62,72,65,20,70,61,72,61, 6D,2E,6E,27,65,73,74,20
DATA 70,61,73,20,33,0D,0A,00

Le message commence en position 64 par 6E 62 72 65 20 70 61 ..(nbre pa..).

Mais la routine a besoin de l'adresse du message, adresse donnée en positions 53 et 54 : 3F, A0, c'est-à-dire &A03F. On voit bien que si la routine est chargée à une autre adresse que A000, A03F ne correspondra plus du tout au début du message.

On dit en bon franglais que la routine n'est pas relogeable (anglais RELOCATABLE), "to locate", signifiant TROUVER ou FIXER LA POSITION; la notion de logement ou de local en est absente.

Nous vous engageons, malgré cette aberration linguistique à DEVERROUILLER les Routines RSX. Vous en serez récompensés par la possession de petites merveilles RELOGEABLES que vous chargerez aux adresses convenant à vos divers programmes BASIC.

RSX ou pas RSX

Nous prenons le risque de donner une opinion personnelle sur cette question. Sans être exhaustif, voici quelques propositions :

  • Si une routine CALL n'est pas relogeable, la transformer en RSX.
  • Si une routine CALL est relogeable, ne pas la transformer en RSX.

Néanmoins, un élément supplémentaire est à prendre en compte :

— Si la routine CALL relogeable doit être utilisée en mode COMMANDE (ou mode DIRECT) sa transformation en RSX peut être souhaitable.

Il sera alors éventuellement nécessaire de lui adjoindre un message d'erreur, message qui aura d'ailleurs pour effet de la rendre encore moins relogeable.

Dans ces conditions, il peut être utile d'avoir 2 versions de la même routine, l'une CALL, l'autre RSX.

Bernard BESSE , CPC n°19

★ EDITEUR: CPC Revue
★ ANNÉE: 1986
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC REVUE 1987
★ AUTEUR: Bernard BESSE
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-DATACOPY    (CPC  Revue)    FRENCHDATE: 2020-04-22
DL: 350
TYPE: ZIP
SiZE: 6Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » CPC Tools Deluxe
» Applications » Tracker v2.0
» Applications » Rodos to Amsdos to Rodos
» Applications » Diskpara
» Applications » Disc Poker & Hacker-Disc
» Applications » S-DOS
Je participe au site:
» Vous avez des infos personnel ?
» 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 575 millisecondes et consultée 1423 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.