Triceraprog
La programmation depuis le Crétacé

Les caractères semi-graphiques du VG5000µ ()

Lorsque l'on regarde de près la structure des caractères semi-graphiques du VG5000µ, on voit qu'elle a été réfléchie pour être facile à manipuler. Voici quelques observations :

  1. les caractères sont divisés en deux plages, l'une numérotée de 0 à 63, l'autre de 64 à 127.
  2. si on prend un caractère de la première plage, contenant les caractères « quadrillés » et que l'on ajoute 64 à son numéro, on obtient le même caractère en format « plein »
  3. de manière similaire, si on soustrait 64 au numéro d'un caractère plein, on obtient sa forme quadrillée.

Le caractère 127, par exemple, est le caractère complètement rempli. Le caractère 127 - 64, c'est-à-dire 63, est le caractère rempli, quadrillé.

Tous les caractères semi-graphiques du VG5000µ

Une observation supplémentaire est plus visible si l'on réarrange les blocs de chaque caractère semi-graphique sur une seule ligne. Pour cela, je prends les deux blocs du haut, puis j'y ajoute les deux blocs du milieu, et enfin les deux blocs du bas.

En remplaçant les blocs noirs par des « X » et les blocs blancs par des « . », voici ce que cela donne :

......
X.....
.X....
XX....
..X...
X.X...
.XX...
XXX...
...X..
X..X..
.X.X..
XX.X..
..XX..
X.XX..
.XXX..
XXXX..
....X.
Et ainsi de suite pour les 64 possibilités.

Ceux qui sont à l'aise avec le comptage en base binaire auront probablement déjà repéré la structure. Pour les autres, essayez ceci :

  1. À partir d'un caractère donné regardez la position la plus à gauche
  2. Si la position contient un point, placez un X, puis allez à l'étape 5
  3. Sinon, c'est que la position contient un X. Remplacez le par un point
  4. Considérez à présent la position juste à droite du point que vous venez de placer, et retournez à l'étape 2.
  5. Terminé.

Au passage, cette série d'instructions donnant des étapes à suivre pour effectuer une opération s'appelle un algorithme, un terme que nous croiserons à nouveau.

Félicitations, vous savez compter en binaire ! Plus traditionnellement, les « X » sont notés « 1 » et les « . » sont notés « 0 », mais le principe est le même.

Le grand avantage d'utiliser cette structure, où des nombres binaires forment les motifs des caractères semi-graphiques, c'est qu'il est assez facile de trouver le numéro d'ordre d'un caractère en fonction du ou des blocs que l'on veut allumer.

Pour cela, il suffit d'associer à chaque position un numéro, suivant ce schéma :

Position 0 1 2 3 4 5
Numéro associé 1 2 4 8 16 32

L'association est la suivante : multipliez le chiffre 2 par 2 autant de fois que la position de la colonne. On considère que multiplier 0 fois donne 1. Par exemple, pour la position 5, cela donne : 2 * 2 * 2 * 2 * 2 = 32. Je vous laisse vérifier les autres colonnes.

Je laisse la partie mathématique de l'histoire de côté, il y a de quoi faire un article complet dessus, et il y en a déjà beaucoup sur Internet.

Essayons maintenant. Je voudrais le caractère avec le bloc du milieu à droite allumé. Ce bloc, si on réarrange le caractère en ligne, est à la position 3 (rappelez-vous qu'on commence à numéroter à zéro) :

..
.X donne ...X..
..

En se référant au tableau ci-dessus, on trouve que la colonne 3 est associée au nombre 8. Je cherche le caractère dans sa forme pleine, j'ajoute donc 64 à 8 pour obtenir 72. Je vérifie dans le tableau du manuel... gagné !

Comment faire maintenant si l'on veut un caractère semi-graphique avec plusieurs blocs allumé ? Simple, il suffit de faire la somme de tous les numéros associés aux colonnes. Par exemple :

X.
.X donne X..XX.
X.

Les blocs allumés sont donc aux positions 0, 3 et 4. Les nombres associés à ces positions sont 1, 8 et 16. Je fais la somme 1 + 8 + 16 = 25. Je veux les caractères pleins, j'ajoute donc 64. 64 + 25 = 89. Je vérifie dans le manuel le caractère 89. Encore gagné !

Nous voilà donc avec un algorithme très simple pour trouver un caractère semi-graphique en fonction d'un ensemble de points que l'on veut allumer. Il reste à afficher ce caractère au bon endroit à l'écran, et nous pourrons obtenir de quoi allumer et éteindre des blocs de pixels individuellement.