CODING ★ Au Cœur du 6128 ★

Au Coeur du 6128 - La ROM (CPC Revue)
Nous allons, ce mois-ci, étudier quelques routines des ROM des CPC qui seront d'une utilité certaine pour les exploitants. Nous utiliserons pour cela les résultats du

précèdent article concernant les connexions de ROM externes.

SORTIE DES CHAINES DE CARACTERES

Routine de la ROM Basic

Une première routine applicable au traitement de chaînes de caractères est disponible dans ta ROM Basic à l'adresse C37D (C337 sur le 464). Cette routine permet de sortir une chaîne de caractères sur la position courante du curseur. Voici la marche à suivre pour l'utiliser :

10 Ent $
20 Call #BA5F ; Connexion de la ROM Basic (ROM haute).
30 Ld HL,CAR ; HL pointe l'adresse de début de la chaîne.
40 CALL #C37D ; Appel de la routine d'affichage de la ROM Basic.
50 CALL #BA66 ; Déconnexion de la ROM Basic.
60 Ret ; Retour
70 Car:Defm 'AMSTRAD' ; Chaîne de caractères à sortir sur l'écran
80 DefB 00 ; Fin de la chaîne.

COMMENTAIRES

Le registre HL contient l'adresse du premier caractère (ou octet) de la chaîne, et la routine d'affichage est interrompue lorsqu'elle trouve un octet égal à 00. Il convient donc de placer cette valeur en fin de chaîne pour revenir au programme.
Pour placer à l'endroit voulu le texte, il sera indispensable de positionner le curseur en plaçant les paramètres lignes et colonnes dans la mémoire. Les vecteurs "position du curseur" sont aux adresses B726 et B727. 3726 : numéro de ligne

B727 : numéro de colonne.

Ils pourront être facilement modifiés à partir du programme (sur le 464 : B285, B286)

APPLICATION

Nous donnons un exemple commenté permettant d'écrire "AMSTRAD" sur la dixième colonne et la quatrième ligne.

10 Ent $ ; Programme d'affichage.
20 Ld A, #04 ; La valeur ligne est placée dans l'accumulateur.
30 Ld (#B726), A ; Positionnement du curseur sur la 4e ligne
40 Ld Af #01 ; Valeur colonne dans l'accumulateur.
45 Ld (#B727),A ; Positionnement 10e colonne.
50 Call #BA5F ; Connexion de la ROM Basic (ROM haute).
60 Ld HL,Car ; HL pointe le début de zone "chaîne de caractères".
70 Call #C37D ; Appel de la routine d'affichage.
80 Call #BA66 ; Déconnexion de la ROM.
90 Ret ; Retour
100 Car: defm 'AMSTRAD' ; Chaîne de caractères.
110 DefB 00 ; Fin de chaîne.

ROUTINES EN RAM

FAISANT APPEL A LA ROM SYSTEME

En regardant de plus près la routine d'affichage de la ROM Basic, on s'aperçoit qu'elle fait appel à la ROM système à travers l'adresse BB5D de la RAM (idem sur CPC 464 et 664). La principale différence est que la gestion de la chaîne n'est pas

prise en compte et que la valeur à afficher doit être placée dans l'accumulateur. Dans un premier temps, regardons comment l'utiliser, ensuite nous verrons comment l'associer avec d'autres routines.

10 Ent $
20 Ld A, #42 ; Charger l'accumulateur avec le caractère "B"
30 Call #BB5A ; Afficher "B"
40 Ret ; Retour

Toutes les remarques que nous avons faites précédemment concernant la position du curseur restent valables ici.

EFFACEMENT D'ECRAN

Cette routine est l'équivalent du CLS en Basic. Elle est accessible à l'adresse BC14 (idem 464 et 664), la seule précaution à prendre concerne la gestion du curseur. En effet, après appel de cette routine, l'écran est effacé, mais le curseur reste dans la position courante. Il convient donc d'assurer en permanence la gestion du curseur.

SAISIE DE CARACTERES

Les deux derniers accès que nous vous proposons pourront être associés aux précédentes routines. Nous savons désormais écrire une chaîne de caractères, un caractère, vider l'écran, reste à lire clavier.

Pour cela, nous avons à notre disposition deux accès, l'un en BB18 et l'autre en BB1B.

BB18 : Cette routine fait une boucle tant qu'une touche du clavier n'a pas été enfoncée.
BB1B : Saisit le numéro de touche frappée s'il y en a une.

Le numéro de touche est placé dans l'accumulateur, ce qui permet d'aligner les routines étudiées jusqu'ici :

10 Ent $
20 Call #BC14 ; Vide l'écran (position curseur conservée).
30 Call #BB18 ; Attend qu'une touche soit enfoncée.
40 Call #BB1B ; Place le numéro de touche dans l'accumulateur.
50 Call #BB50 ; Affiche la valeur placée dans l'accumulateur.
60 Ret ; Retour.

COMMENTAIRES

Nous avons maintenant toutes les routines nécessaires pour réaliser un éditeur de texte performant. Vous aurez remarqué que les routines étudiées ce mois-ci n'ont pas été désassemblées, la plupart faisant appel soit à la ROM Basic, soit à la ROM système, il aurait été fastidieux de s'attaquer au dèsassemblage des ROM, et notre revue n'aurait pas été suffisamment épaisse pour publier les résultats !

Sachez néanmoins que ces routines font appel à une instruction restart du Z80, en l'occurence RST 8 (saut à l'adresse 8) et que ceci permet de connecter la ROM système entre 0 et 3FFF. L'adresse à appeler est placée dans les deux octets suivant cette instruction. Pour calculer l'adresse de saut, ne pas prendre en compte les bits Al4, A1 5 car ils servent pour la connexion de la ROM uniquement.

CONCLUSION

Au fur et à mesure de cette description, nous vous fournirons des programmes d'utilisation de ces routines. Nous les écrivons et attendons les vôtres I

CPC n°14 , https://cpcrulez.fr

★ ANNÉES: 1985
★ AUTEUR: Jean-Pierre MANDON

Page précédente : Au Cœur de l'Amstrad CPC

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

Lien(s):
» Coding » Au Coeur du 6128 - le Controleur Video (CPC Revue)
» Coding » Au Cœur de l'Amstrad CPC
» Coding » Au Coeur du 6128 (CPC Revue)
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 309 millisecondes et consultée 2122 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.