CODINGPROGRAMMATION INITIATION ALIGATOR ★ Symbol & Symbol After ★

Ali Gator - 14. Symbol & Symbol After (Micro-Mag)

Tout jeu Basic, pas trop indigent, fait appel aux commandes Symbol et Symbol after. Etes-vous certain d'en tirer le meilleur parti?

Depuis des lustres, vous savez redéfinir un caractère avec Symbol. Le principe est simple: un numéro de caractère, 32 à 255, suivi de 8 nombres de 0 à 255, donnent une nouvelle valeur aux 8 octets réservés on ROM pour chaque caractère. Cet espace se situe, pour ceux que cela intéresse, aux adresses &3800 à &3FFF. La ROM n'étant pas modifiable, l'opération a lieu en RAM. C'est là qu'intervient la commande Symbol After.

Symbol After

En fait. Il s'agit d'une barrière qui permet de réserver, en haut de la RAM, un espace suffisant pour la redéfinition des caractères. Celle-ci n'est pas nécessaire lorsque les caractères redéfinis ont une valeur supérieure à 240. Effectivement, entre &AB80 et &ABFF, figure une zone permettant le stockage et la redéfinition des caractères 2-10 à 255. Une commande similaire, Memory, dresse elle aussi une barrière entre l'espace réservé au basic et celui dédié aux routines binaires. Il y parfois conflit entre ces deux commandes. Nous verrons plus loin comment y remédier. Maintenant, faites en direct.

PRINT HIMEM

Suivant les configurations de CPC et des extensions utilisées, vous allez obtenir une valeur que nous appellerons «A». Si vous faites :

SYMBOL AFTER 240 : PRINT HIMEM

La valeur obtenue sera identique à la précédente. Tout simplement parce que l'espace nécessaire pour ces 16 caractères est déjà réservé dès l'Initialisation de l'ordinateur. Espace qui peut être récupéré de la façon suivante.

SYMBOL AFTER 255 : PRINT HIMEM

La valeur obtenue «B» est supérieure à «A» de 8 x 16 = 128 octets. Ce n'est pas grand chose, mais cela peut toujours servir. Maintenant, faisons :

SYMBOL AFTER 40 : PRINT HIMEM

La valeur obtenue «C»; est inférieure à «A» de 8 x 200*1600. 1600 octets nécessaires pour modifier 200 caractères. Symbol After sert de barrière mais aussi de recopie de la ROM vers la RAM du jeu de caractères. Pour vous en convaincre; tapez les lignes suivantes:

10 SYMBOL AFTER 32 : X=HIMEM+1 : MODE 2
20 CLS : FOR H=1 TO 8 : PRINT BIN$(PEEK(X), 8)
30 X=X+1: NEXT: CALL &BB18 : GOTO 20

Apparaissent alors un à un tous les caractères dans leur représentation binaire. A partir de là, toutes les manipulations sont possibles: lettres sens dessus dessous, tronquée», inversées, en italiques, etc. A vous de faire preuve d'imagination. Si vous en manquez, essayez-les trois petits programmes de notre exemple.

Improper Argument

Ceux d'entre vous qui tapent régulièrement des listings n'ont sûrement pas échappé à l'improper Argument qui apparaît parfois sur la ligne contenant l'instruction Symbol After. Cette ligne, qui en elle-même ne comporte aucune erreur, vient d'entrer en conflit avec une commande Memory rencontrée dans le listing. Pour comprendre le phénomène, tapez les lignes suivantes.

10 MEMORY &8000
20 SYMBOL AFTER 200
30 PRINT " BONJOUR" : END

Quoique l'on fasse, le «Bonjour» de la ligne 30 ne s'affichera pas, le programme renvoyant un têtu Improper Argument en ligne 20. Memory et Symbol After sont deux barrières, mais le système n'admet pas que le Memory soit défini avant le Symbol after. Il aurait fallu écrire :

10 SYMBOL AFTER 200
20 MEMORY &8000
30 PRINT “BONJOUR" : END

Dans ce cas, RUN affichera correctement la message, mais faites un second RUN. Coucou, revoilou l'Improper Argument!. En fait, lûrs du premier lancement, la barrière Memory placée en &8000 resté active jusqu'au Reset complet de l'ordinateur. De ce fait, le deuxième RUN recrée la situation du premier programme. Alors que faire? Il existe deux solutions.

  • Premier cas: vous travaillez à la mise au point d'un listing dont vous n'êtes pas l'auteur. Le Memory reste actif tant qu'un Reset n'a pas lieu. Il en est de même pour Symbol After et les caractères redéfinis. Donc, lors des nombreux RUN d'essais, inutile de les faire relire par le programme. Rajouter, juste avant ce passage, une petite ligne avec un GOTO pour enjamber l'obstacle. Dans notre exemple cela donnera: 5 GOTO 20. Ainsi, la mise au point pourra s'effectuer sans problème. Celle-ci terminée et avant d'effectuer la sauvegarde définitive, supprimez ce GOTO superflu.
  • La deuxième solution est encore plus simple. Il existe une routine système en &BB1E qui réinitialise tout ce qui a trait à la gestion des textes à l'écran. Symbol et Symbol after rentrent dans cette catégorie. Ladite routine agit donc comme un Reset sélectif, exactement ce que nous recherchons. Ainsi la ligne : 5 CALL &BB4E appliquée à nos deux exemples, fera disparaître tous nos problèmes d'Improper Argument.

Petite restriction: CALL &BB4E positionne le curseur en LOCATE 1,1. En début de listing, ceci ne devrait pas porter à conséquences.

MICROMAG n°14

★ EDITEUR: MICROMAG
★ ANNÉE: 1990
★ AUTEUR: CLAUDE LE MOULLEC
 

Page précédente : Ali Gator - 12. Le Fichier de REM

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

Lien(s):
» Coding Src's » Alibaba (Bajtek)
» Coding » Ali Gator - 03. TAG et les Modes Graphiques (Micro-Mag)
» Coding » Ali Gator - 02. Les Modes Graphiques (Micro-Mag)
» Coding Src's » Equalisers horizontal et vertical
» Coding » Les opérations, la pile et les registres spécialisés par ANTIBUG
» Coding » Ali Gator - 07. Les Fichiers ASCII (MicroMag)
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 568 millisecondes et consultée 1004 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.