CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

4/1.6.1 - SYMBOL et SYMBOL AFTERCoding Classeurs Weka
4/0 - Langages du CPC

4/1.6 - Basic approfondi

4/1.6.1 - SYMBOL et SYMBOL AFTER

Votre Logo personnalisé – Aller plus loin avec la redéfinition des caractères

Rappels et compléments

Nous allons dans ce chapitre, créer un petit programme affichant un logo au nom des Editions Weka, et que vous pourrez modifier afin de le personnaliser.

Ce logo permettra d'étudier la fonction SYMBOL ainsi que SYMBOL AFTER, et d'en cerner un peu les restrictions d'utilisation.

Avant toute définition de caractères, il est souhaitable de le signaler au Basic par l'instruction SYMBOL AFTER n. Cette fonction indique au Basic que des caractères dont le numéro commence en n + 1 vont être redéfinis. Après cette déclaration, vous pourrez redéfinir vos caractères par la commande SYMBOL N° de caractère (le petit programme de la Partie 5, chapitre 9 page 2 vous y aidera).

Chaque caractère ainsi défini est accessible par la commande :

PRINT CHR$(N° de caractère)

Vous pourrez même les associer dans une chaîne de caractères, par exemple :

A$ = CHR$(N°1) + CHR$(N°2) + ... etc ...

Il est même possible d'y associer des caractères de contrôle permettant un affichage sur plusieurs lignes (les caractères CHR$(8) = retour d'un caractère ; CHR$(9) = avance d'un caractère ; CHR${11) = remonte d'une ligne sur la même colonne).

Essayez par exemple, en utilisant les caractères prédéfinis dans le moniteur (c'est-à-dire en ne vous préoccupant pas encore de redéfinir un caractère – voir Annexe 3 pages 1 à 12) :

Il est même possible de redéfinir tous les caractères de l'alphabet, comme dans certains logiciels du commerce, en gothique par exemple. Le numéro de réservation sera alors :

SYMBOL AFTER 65

Programme exemple

Revenons au programme de présentation de notre logo :


– Ligne 60 : réservation de redéfinition pour les carctères à partir de 231.
– Lignes 70 à 180 : redéfinition de caractères permettant de tracer un cadre.
– Lignes 190 à 230 : redéfinition de caractères d'écriture du mot WEKA.
– Lignes 250 à 330 : affichage du iogo grâce à tous ces caractères.
– Ligne 340 : en REM, mais peut être placée en ligne normale pour les CPC possédant l'instruction FILL.
– Lignes 380 à 480 : exemple de création d'une variable texte possédant des caractères de contrôle qui vous réservent un effet surprenant, que nous vous laissons découvrir.
– Ligne 530 : commande lançant le programme que vous désirez, la page restant à l'écran durant le temps de chargement de votre programme (intéressant si celui-ci est long). Rien ne vous empêche, de plus, d'insérer votre programme à la suite de cette ligne, il suffira de la remplacer par une boucle d'attente, du type

FOR i = 1 to 3000 : next i

Nous espérons que votre curiosité et votre perspicacité vous inciteront à étudier ce programme et à le modifier pour créer votre propre logo.

Les restrictions d'utilisation

RÉCUPÉRATION DE MÉMOIRE

Sans que vous le sachiez, le CPC effectue, lors de la mise sous tension, ou d'une réinitialisation, la réservation de la place mémoire pour 16 caractères redéfinissables.
Ce qui veut dire que vous pouvez vous passer de la commande SYMBOL AFTER si vous ne désirez utiliser que les caractères de 240 à 255.

Par contre, si vous ne redéfinissez aucun caractère, il est possible de récupérer cette place mémoire (un caractère occupant 8 octets, on peut récupérer : 8 x 16 = 128 octets), grâce à la commande SYMBOL AFTER 256.

SYMBOL AFTER ET MEMORY         ; f-

La commande SYMBOL AFTER est réputée pour faire très mauvais ménage avec l'instruction MEMORY.

Essayez donc :

MEMORY &9FFF
SYMBOL AFTER 200

et vous voilà face à un message d'erreur vous signalant :

IMPROPER ARGUMENT

alors que tout semble correct.

Cela est très fâcheux lorsque vous désirez implanter des routines en langage machine et que vous désirez les protéger.

Un premier remède qui semble fonctionner est d'inverser ces deux instructions. Mais ici aussi il y a un problème : si vous avez placé ces deux instructions dans un programme, dans cet ordre :

10 SYMBOL AFTER 200
20 MEMORY &9FFF

et que vous en êtes encore aux essais de votre programme, tout se passe correctement au premier « RUN », mais de nouveau le message d'erreur précédent s'affiche au deuxième « RUN ».
En parcourant les différents vecteurs du système d'exploitation ( voir Partie 4, chapitre 2.7 ), on trouve l'appel à une routine appelée TXT-INITIALISE à l'adresse &BB4E.

Cette routine effectue une réinitialisation complète de l'écan, des variables texte, des indirections de l'écran, de la table de contrôle, mais, ce qui nous intéresse avant tout : la table des caractères redéfinis est réinitialisée. Après tant de réinitialisation, on comprendra que l'appel de TXT-INITIALISE doit être la première instruction du programme.
Suite à cet appel, on pourra redéfinir les caractères utilisateurs et la position de la valeur haute de la mémoire, mais dans quel ordre ?

L'expérience indique que placer l'instruction SYMBOL AFTER avant la réservation mémoire provoque, lors de l'exécution de cette dernière un assez désagréable message d'erreur MEMORY FULL.

On retiendra donc la séquence d'instructions suivante qui résoud les problèmes de redéfinition de caractères :

Page précédente : 4/1.6 - Basic approfondi
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.73-desktop
Page créée en 177 millisecondes et consultée 1886 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.