« Pixel Museum » est un musée consacré aux jeux vidéo ouvert depuis le 25 février 2017, à Shiltigheim, au nord de Strasbourg. C'est donc un musée quasi neuf que je suis allé visiter.
Le thème
La bannière à l'entrée du musée annonce la couleur : il s'agit d'un musée dédié aux jeux vidéo. Le cheminement à travers les salles est chronologique si l'on suit les panneaux commençant par « Start ». Cependant, l'agencement des salles et la présence d'un groupe (un groupe, ça bouche toujours un musée) fera que c'est dans un semi désordre que j'ai parcouru les salles. Mais peu importe.
Dans la première salle, un « Tennis for two » (malheureusement indiqué comme étant en réparation). On commence bien par les débuts. Pas de grosses pièces comme un Pong arcade au d'évocation de jeu vidéo sur Minis, comme au Computer Spiel Museum de Berlin. Ici, on parle jeu vidéo dans le contexte familial.
Après avoir vu le point, si nous passions à la ligne ? Ou plus exactement, au segment de droite.
Sur une feuille de papier, tracer un segment de droite entre deux points est une chose
simple : un crayon, un règle, on positionne la règle sur les deux points et l'on trace un
trait en tenant fermement cette dernière.
Le trait a alors une allure continue ; du moment que l'on n'utilise pas un microscope pour
en détailler la composition. Et c'est une représentation suffisante,
dans la plupart des cas, de l'objet mathématique sous-jacent.
Sur un écran d'ordinateur, c'est un tout autre problème. En effet, un écran traditionnel
est constitué d'une matrice de petits carreaux, les pixels. Les pixels des écrans récents
sont très petits et malgré cela, tracer un beau segment de droite n'est pas si simple.
Alors imaginez avec les gros carreaux formant les affichages d'anciens ordinateurs ?
Le BASIC est un langage, dans les versions de l'époque de cette machine, assez limité. Il n'y a entre autre pas de notion de portée lexicale des variables. La portée lexicale d'une variable, c'est l'ensemble des parties d'un code source depuis lesquelles une variable, ou plus généralement un symbole, est accessible. En BASIC sur VG5000µ, comme sur les BASIC d'autres machines de cette période, c'est simple, les variables simples sont accessibles de partout à partir du moment où elles ont été définies.
À cela s'ajoute le fait que seuls les deux premiers caractères d'une variable sont significatifs. ABC et ABD …
Dans l'épisode précédent, j'avais décrit l'arrangement en mémoire vidéo des caractères semi-graphiques et un moyen d'accéder directement en mémoire à celui qui nous intéresse.
Le but est toujours de pouvoir allumer un élément constitutif d'un caractère semi-graphique, que je nomme « gros pixel ». Et l'article précédent s'arrêtait au moment où je pouvais récupérer, via une paire d'appels à commande PEEK, les deux valeurs décrivant le caractère affiché à l'écran.
Premier test, après avoir effacé l'écran avec INIT, j'affiche les deux valeurs correspondantes à la colonne 1, ligne 0.
Les deux valeurs obtenues et visibles sur la capture d'écran sont 79 et 0. Pour comprendre ce qu'ils signifient, je reprends ici un morceau de l'article sur l'arrangement de la mémoire vidéo qui décrit la structure de ces deux valeurs.
On y lit que la première valeur a cette structure :
Après avoir fait un mini tour des commandes graphiques, puis étudié la structure des caractères semi-graphiques du VG5000µ, il est temps d'implémenter la possibilité d'allumer un point particulier de l'écran.
Comme je vais utiliser les caractères semi-graphiques, ce « point » sera sur la grille de résolution de 80 par 75. En effet, il y a 40 caractères par ligne qui ont chacun une largeur de deux éléments, et 25 caractères par colonne qui ont chacun trois éléments en hauteur.
L'idée pour allumer ou éteindre un point est donc d'abord de trouver quelle position de caractère semi-graphique est influencée, puis de modifier le caractère à cette position. Pour modifier le caractère, il faudra lire celui déjà présent, calculer le nouveau, puis écrire le nouveau.
Transformation de coordonnées
Pour visualiser la transformation de coordonnées, voici un tableau.