CODINGLA BIBLE DU CPC 6128

La bible du CPC 6128 : 3.03.02 Extensions du Basic avec RSX
3.3.2 Extensions du Basic avec RSX

Le système d'exploitation et le Basic du CPC soutiennent la possibilité d'intégrer ses propres instructions dans le Basic. C'est ce qu'on appelle RSX 'Résident System extension'. Ces extensions peuvent être appelées en Basic à travers un nom, et elles permettent une transmission de paramètres comme nous l'avons déjà décrite pour l'instruction CALL.
Si nous voulons par exemple écrire une extension graphique qui dessine un carré sur l'écran, l'appel de cette fonction se présentera ainsi:

|QUADRAT,100,100,50
Nous voulons ainsi dessiner un carré dont l'angle supérieur gauche aura les coordonnées 100, 100 avec un côté d'une longueur de 50 points.

Comme vous voyez, une extension d'instruction est marquée par un trait vertical (SHIFT @) placé devant le mot instruction.

Une telle extension d'instruction peut figurer dans une ROM d'extension, comme celle par exemple qui gère le lecteur de disquette, ou bien également en RAM. Cela nous donne donc la possibilité d'écrire nos propres extensions d'instruction. Pour que le système d'exploitation sache où il doit chercher une telle extension, l'extension doit d'abord être 'intégrée'. On emploie pour cela une routine du système d'exploitation: KL LOG EXT. L'exemple suivant réalise l'instruction évoquée ci-dessus pour dessiner un carré et montre comment l'intégration se réalise.

;RSX - EXTENSIONS D'INSTRUCTION ;L.E. X5/6/85
BCD1 LOGEXT EQU &BCD1 ; intégrer extension
BBC6 ASKCUR EQU &BBC6 ; amener curer graphique
BBC0 MOVABS EQU &BBC0 ; fixer curseur graphique
BBF9 DRAWRE EQU &BBF9 ; tracer ligne relativ.
BDC7 CHGSGN EQU &BDC7 ; modifier signe
8000 ORG &8000
8000 010980 LD BC.RSX ; adresse table instr.RSX
8003 211680 LD HL,KERNAL ; 4 oct.Ram pour Kernl
8006 C3D1BC JP LOGEXT ; intégrer extension
8009 0E80 RSX DEFW TABLE ; Adresse des mots inatr.
800B C31A80 JP QUADRAT
800E 51554144 TABLE DEFM "QUADRA"
8014 D4 DEFB "T"+&80
8015 00 DEFB 0 ; fin de la table
8016 KERNAL DEFS 4 ; mémoire pour Kernal
801A FE0S QUADRA CP 3 ; trois paramètres?
801C C0 RET NZ
801D CDC6BB CALL ASKCURS ; amener cursr graphique
8020 D5 PUSH DE ; ranger coordonnée X
8021 E5 PUSH HL ; ranger coordonnée Y
8022 DD5605 LD D,(IX+5)
8025 DD5E04 LD E,(IX+4) ; coordonnée X
8028 DD6603 LD H,(DC+3)
802B DD6E02 LD L,(IX+2) ; coordonnée Y
802E CDC0BB CALL MOVABS ; CursrGraph sur Coord XY
8031 DD5601 LD D,(IX+1)
8034 DD5E00 LD E,(IX) ; ranger longueur dans de
8037 D5 PUSH DE ; comme offset X
8038 210000 LD HL,0 ; offset Y
803B CDF9BB CALL DRAWREL ; tracer ligne horiz.
803E El POP HL
803F E5 PUSH HL
8040 CDC7BD CALL CHGSGN ; offset Y négatif
8043 E8 PUSH HL
8044 110000 LD DE,0
8047 CDF9BB CALL DRAWREL ; tracer ligne verticale
804A Dl POP DE ; offset X négatif
804B 210000 LD HL,0 ; offset Y nul
804E CDF9BB CALL DRAWREL ; tracer ligne horiz.
8051 E1 POP HL
8052 110000 LD DE,0
8055 CDF9BB CALL DRAWREL ; tracer ligne verticale
8058 El POP HL
8059 Dl POP DE
805A C3C0BB JP MOVABS ; rétablir coordonnées

Après que ce programme ait été chargé (comme fichier binaire à partir de la disquette) ou qu'il ait été placé en mémoire avec un programme de chargement de DATA, il doit être initialisé une seule fois. Il faut pour cela utiliser l'appel CALL &8000. La nouvelle instruction est alors disponible. Deux tables sont utilisées pour l'intégration. La première, appelée RSX dans notre exemple, contient tout d'abord l'adresse de la seconde table, appelée ici TABLE, suivie des instructions de saut à l'extension proprement dite.

La seconde table contient les noms sous lesquels les nouvelles instructions peuvent être appelées. Les majuscules et les points sont autorisés. Le dernier caractère d'un mot instruction est marqué par son bit 7 qui est mis. La fin de la table est indiquée par un octet nul. Chaque table doit bien sûr contenir le même nombre d'entrées. Pour chaque mot d'instruction doit figurer l'adresse de saut correspondante dans la première table. Sous l'étiquette KERNAL, nous devons mettre 4 octets à la disposition du système d'exploitation qui sont utilisés pour la gestion de l'extension. Les 4 octets doivent être placés entre l'adresse &4000 et l'adresse &BFFF.

La routine de dessin d'un carré commence par l'étiquette QUADRAT (quadrate en anglais=carré). On contrôle d'abord si trois paramètres ont bien été transmis. Si ce n'est pas le cas, on quitte la routine immédiatement. Mais si c'est le cas, on va chercher la position actuelle du curseur graphique et on la range sur la pile. On va ensuite chercher dans de et hl les coordonnées X et Y transmises. La base du bloc de paramètres se trouve en IX. Après que le curseur graphique ait été fixé sur ces coordonnées, la routine de dessin d'une ligne relativement à la position actuelle peut être appelée quatre fois. Pour calculer un offset négatif, on appelle la routine CHGSGN de l'arithmétique entière. Pour finir, on rétablit la position originelle du curseur.

Voici un exemple d'utilisation de cette routine:

10 CLS
20 FOR i=35 TO 400 STEP 20
30 |QUADRAT,i,i,30
40 NEXT

★ ANNÉE: ???

Page précédente : La Bible du CPC 6128 - 3.03.01 : L'instruction CALL
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 559 millisecondes et consultée 1952 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.