3.3.2 Extensions du Basic avec RSXLe 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éesAprè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
CPCrulez[Content Management System] v8.7-desktop/c Page créée en 714 millisecondes et consultée 1954 foisL'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. |
|