Très chers lecteurs, il m'appartient de vous annoncer une bien triste nouvelle : vous allez assister aujourd'hui au dernier épisode de Cherry-Paint.En fait, nous sommes obligés d'arrêter Cherry-Paint pour une stupide histoire d'espace mémoire. Faisons les comptes. Jusqu'à présent sont utilisés : 16 K pour la mémoire d'écran, 16 K pour l'image complète, 10 K pour les tables de formes et les pinceaux, 2 K réservés pour le système du CPC, 10 K de programme proprement dit, 9 K pour le stockage temporaire du couper-coller et des menus déroulants. Il devrait, par conséquent, nous rester 1 K. En fait, il reste en tout et pour tout 600 octets de disponible ! Le seul moyen d'économiser de la mémoire aurait été de compresser la table des formes. Je m'explique : vous vous souvenez sans doute que chaque forme est composée de huit représentations, décalée chacune de 1 bit par rapport à la précédente. Ces huit représentations sont nécessaires uniquement pour la forme actuellement affichée à l'écran ; pour les autres formes une seule représentation suffit, et il faut alors faire les 8 décalages à chaque changement de la forme affichée. Cette compression permet de réduire la taille de la table de formes à 8 K. C'est cette méthode qui a été employée sur la version commerciale de Cherry-Paint. Nous allons voir maintenant un accessoire qui tout en étant indispensable, n'est pas trop gourmand en espace mémoire (520 octets : c'était juste !). J'ai nommé le catalogue du disque : il n'y a en effet rien de plus ennyeux que de ne pas pouvoir connaître le contenu de ses disquettes. Le catalogue se trouve bien entendu dans le menu déroulant "FICHIER" qui a été modifié pour la circonstance. Il faut, comme d'habitude, cliquer sur "FICHIER" et relâcher la barre d'espacement lorsque Catalogue est en vidéo inverse (figure 1 ). Le disque se met alors à tourner pendant quelques instants puis apparaît une fenêtre contenant tous les noms des images crées par Cherry-Paint contenues sur le disque (figure 2). Lorsque l'on clique à l'intérieur de la fenêtre pour la déplacer, l'accès au disque est renouvelé : c'est un moyen commode de faire des catalogues en chaîne sans repasser chaque fois par le menu déroulant. Le programme détecte bien entendu toutes les erreurs (absence de la disquette, disquette non formatée, etc.). Voyons maintenant le côté technique du programme : pour voir le nom des images contenues par un disque, il suffit de faire IDIR,"*.C-P" en Basic, C-P étant l'extension obligatoire de toutes les images Cherry-Paint. Pour effectuer la même opération en Assembleur, il faut faire : DIR: DEFB "D","I","R" + # 80 VAR: DEFW DES DES: DEFB 5 DEFW NOM NOM: DEFM "*.C-P" LD HL,DIR CALL #BCD4 LD A, 1 LD IX,VAR CALL #1BL'appel de la routine en #BCD4 recherche dans toutes les ROM connectées le RSX (Resident System Extension) dont le nom est pointé par HL, le dernier caractère du nom doit avoir le bit 7 à 1. En sortie, HL contient l'adresse de la routine correspondant au nom, et C le numéro de la ROM où elle se trouve. HL et C sont directement utilisables par la routine en #1B qui fait l'équivalent d'un CALL (HL) dans la ROM C.Avant de faire CALL #1B, il faut encore préciser le nombre de paramètres (dans A) et l'adresse de la table de paramètres (dans IX). Dans notre cas, la table de paramètres (VAR) ne comporte qu'un élément (DES) qui est le descripteur d'une chaîne de caractères. Le premier octet du descripteur contient le nombre de caractères (5), les deux suivants, l'adresse de la chaîne de caractères proprement dite (*.C-P). Vous remarquerez sur la figure 2 que le formatage des noms est différent du formatage standard des noms obtenu avec |DIR. Cette routine étant écrite en ROM, il n'est, par conséquent, pas possible de la modifier. La seule solution pour afficher un catalogue personnalisé est, dans ce cas, de détourner la routine d'affichage d'un caractère en #BB5A lors du catalogue, de manière à placer chaque caractère, normalement affiché à l'écran, dans un buffer qu'il est ensuite facile de manipula à sa guise. Il ne faut pas oublier ensuite de restaurer la valeur initiale du vecteur en #BB5A sous peine d'afficher tous les caractères suivants... dans le buffer. Pour introduire le code machine, il faut modifier le chargeur hexa du mois dernier (lignes 150, 160, 330 du listing 2), le sauver puis le lancer, les octets du listing 1 doivent alors être tapés 8 par 8, suivis chaque fois d'une somme de contrôle. En cas d'erreur la ligne fautive devra être reprise. Après la saisie, il faudra modifier également le programme lanceur du mois dernier (listing 3) et ne pas oublier de le sauver avant de le lancer. Au-revoir, et peut-être à bientôt... CPC |