Ah les monoblocs bien lourds, mais au design tellement reconnaissable. Cet ordinateur a aussi la particularité d'avoir un clavier particulièrement... pas pratique. Les modèles suivant troqueront le lecteur/enregistreur à cassette par un clavier de nettement meilleur qualité.
VG5000µ, tracer une ligne en BASIC ()
Après avoir décrit un algorithme de tracé de segment de droite de manière générique, voyons un peu comment traduire ça en BASIC sur le VG5000µ. Pour ce premier article, il s'agira d'une implémentation simpliste, qui servira de base.
Pour rappel, voici l'algorithme générique :
- En entrée, on a deux points de coordonnées (x, y) et (x', y')
- Si x' est plus petit que x, échanger les valeurs de
x
etx'
ainsi que dey
ety'
- Choix de l'octant en fonction de |y' - y| et de |x' - x|
- Si on fait un balayage des x, alors
- Calculer la pente $a = \frac{(y' - y)}{(x' - x)}$
- Calculer $b = \frac{x'y - xy'}{x'-x}$
- Pour tous les
x''
dex
àx'
, calculer $y'' = ax'' + b$. - Tracer un pixel en
(x'', y'')
.
- Si on fait un balayage des y, alors
- Si y' est plus petit que y, échanger les valeurs de
x
etx'
ainsi que dey
ety'
- Calculer la pente $a = \frac{(x' - x)}{(y' - y)}$
- Calculer $b = \frac{y'x - yx'}{y'-y}$
- Pour tous les
y''
dey
ày'
, calculer $x'' = ay'' + b$ - Tracer un pixel en
(x'', y'')
- Si y' est plus petit que y, échanger les valeurs de
Il s'agit à présent de transformer ces instructions en instructions BASIC. Je me base sur l'implémentation de tracé de point publié précédemment, implémenté entre les lignes 100 à 250.
C'est quelque chose de classique en BASIC de l'époque, les routines, c'est-à-dire des sous-programmes dédiés à une tâche, sont implémentées à des lignes précises. Dans le cas de mon tracé de point, la routine est re-logeable, il est possible de changer les numéros de ligne sans problème.
Cette routine utilise les variables
X
etY
en entrée. Elle utilise aussi en interne les variablesZX
,ZY
,RX
,RY
,CH
,DI
,AT
etOL
. Cela signifie que ces variables, si elles sont utilisées ailleurs dans le programme, verront leur contenu changer à l'appel de la routine.C'est, j'en ai déjà parlé, une limitation gigantesque des BASIC de cet époque. Même si, ALGOL, un langage antérieur, avait introduit la portée lexicale des variables, la compartimentation des différentes parties d'un programme n'est pas un acquis lors de la création du BASIC et les versions disponibles sur les ordinateurs familiaux, par soucis d'accessibilité très certainement, ont gardé cette limitation. Veillons donc juste à être prudent avec le nom des variables utilisées.
Préambule
Je vais implémenter la routine de segment de droite à partir de la ligne 300, soit après l'implémentation du point. Il y a une raison pour cela que j'expliquerai sûrement plus tard.
La routine commence par une petite documentation du fonctionnement. Ces commentaires sont complètement optionnels mais bien utiles pour les utilisateurs futurs. Voire pour moi, me rappeler plus tard ce que j'avais décidé.
300 REM AFFICHE UN SEGMENT DE DROITE DANS L'ESPACE SEMI-GRAPHIQUE 310 REM X1 ET Y1 CONTIENNENT LES COORDONNEES DE DEPART 320 REM X2 ET Y2 CONTIENNENT LES COORDONNEES D'ARRIVEE
Puis vient l'échange des coordonnées. Comme le BASIC du VG5000µ n'a pas de commande pour inverser le contenu de deux variables (c'est une instruction plutôt rare), il me faut passer par une variable intermédiaire que je nomme
TT
. On reconnaîtra bien là les pâtés caractéristique des programmes BASIC de l'époque. Plein de lettres et de signes collés.330 IF X2<X1 THEN TT=X1:X1=X2:X2=TT:TT=Y1:Y1=Y2:Y2=TT
Il faut ensuite, pour décider de l'octant et donc du balayage, savoir si on est plus de la verticale que de l'horizontale. Pour cela, on peut calculer la valeur absolue de la différence des
X
(abscisses) et desY
(ordonnées).340 AX=ABS(X2-X1):AY=ABS(Y2-Y1)
Vient ensuite la sélection de la sous-routine à utiliser, en fonction de balayage utilisé. L'instruction conditionnelle
IF
du BASIC du VG5000µ n'a pas de clauseELSE
comme sur beaucoup d'autres BASIC. Une solution (il y en a d'autres) est d'écrire les deux choix explicitement.Si la condition indiquée après le
IF
est vérifiée, alors le programme continuera à la ligne indiquée après l'instructionGOSUB
. Lorsque l'interpréteur BASIC rencontrera l'instructionRETURN
, le déroulement reprendra après leGOSUB
.350 IF AX >= AY THEN GOSUB 400 360 IF AX < AY THEN GOSUB 500 370 RETURN
Balayages
Reste à écrire les deux balayages différents. Commençons par les
X
.400 A=(Y2-Y1)/(X2-X1) 410 FOR X=X1 TO X2 420 Y=INT(0.5+Y1+A*(X-X1)) 430 GOSUB 100 440 NEXT X 450 RETURN
Il n'y a pas de fonction d'arrondi disponible. La fonction est émulée en prenant la partie entière, c'est-à-dire sans les chiffres après la virgule, du nombre augmenté de 0.5. La fonction pour obtenir la partie entière est
INT
.La ligne
420
est une simplification du calcul deb
dans l'équation de la droite, valide pour les valeurs dex
du segment de droite. Je vous laisse faire le calcul.Pour le balayage des
Y
, il faut commencer par échanger les coordonnées si nécessaire.500 IF Y2<Y1 THEN TT=X1:X1=X2:X2=TT:TT=Y1:Y1=Y2:Y2=TT
Puis le balayage en lui-même est effectué.
510 A=(X2-X1)/(Y2-Y1) 520 FOR Y=Y1 TO Y2 530 X=INT(0.5+X1+A*(Y-Y1)) 540 GOSUB 100 550 NEXT Y 560 RETURN
La ligne
530
comme la420
est une simplification des calculs.Et voilà. Une routine de tracé de segment de droite avec les moyens du bord, en BASIC VG5000µ.
Petite modification avant le récapitulatif, les lignes
500
et330
font toutes les deux l'échange des coordonnées. Se répéter en programmation est mauvais signe dans une grande partie des cas. Déplaçons cette partie dans une sous-routine.330 IF X2<X1 THEN GOSUB 270 500 IF Y2<Y1 THEN GOSUB 270 270 TT=X1:X1=X2:X2=TT:TT=Y1:Y1=Y2:Y2=TT 280 RETURN
Récapitulatif
300 REM AFFICHE UN SEGMENT DE DROITE DANS L'ESPACE SEMI-GRAPHIQUE 310 REM X1 ET Y1 CONTIENNENT LES COORDONNEES DE DEPART 320 REM X2 ET Y2 CONTIENNENT LES COORDONNEES D'ARRIVEE 330 IF X2<X1 THEN GOSUB 380 340 AX=ABS(X2-X1):AY=ABS(Y2-Y1) 350 IF AX >= AY THEN GOSUB 400 360 IF AX < AY THEN GOSUB 500 370 RETURN 380 TT=X1:X1=X2:X2=TT:TT=Y1:Y1=Y2:Y2=TT 390 RETURN 400 A=(Y2-Y1)/(X2-X1) 410 FOR X=X1 TO X2 420 Y=INT(0.5+Y1+A*(X-X1)) 430 GOSUB 100 440 NEXT X 450 RETURN 500 IF Y2<Y1 THEN GOSUB 380 510 A=(X2-X1)/(Y2-Y1) 520 FOR Y=Y1 TO Y2 530 X=INT(0.5+X1+A*(Y-Y1)) 540 GOSUB 100 550 NEXT Y 560 RETURN
Utilisation
Voici par exemple une utilisation du programme pour tracé un dessin. Sur chacune des lignes, les coordonnées des lignes sont mentionnées puis la sous-routine est appelée. La commande
DISPLAY
exécutée ensuite sert à forcer le rafraîchissement de l'écran après chaque ligne.Comme indiqué précédemment, c'est long, très long. Il faut environ 17 secondes sur la machine pour contempler le résultat. Le VG5000µ nous laisse peu d'options en restant dans le BASIC pour améliorer cela. Nous essaierons cependant une prochaine fois.
10 GOTO 1000 1000 INIT 1010 X1=10:Y1=15:X2=35:Y2=5:GOSUB 300:DISPLAY 1020 X1=60:Y1=15:X2=35:Y2=5:GOSUB 300:DISPLAY 1030 X1=10:Y1=15:X2=35:Y2=60:GOSUB 300:DISPLAY 1040 X1=60:Y1=15:X2=35:Y2=60:GOSUB 300:DISPLAY 1050 X1=60:Y1=15:X2=10:Y2=15:GOSUB 300:DISPLAY 1060 END
Une autre récréation 3D ()
Je continue sur ma lancée avec une évocation d'Altaïr 8800, un ordinateur de 1975, vendu en kit. Si vous avez un peu de temps, une série de vidéos explique son utilisation, depuis les bases. C'est un clone récent qui est utilisé.
Récréation 3D ()
Aujourd'hui, j'ai préparé quelques illustrations sous forme d'évocations de machines connues. Voici une première image, qui j'espère évoque assez bien la machine dont j'ai parlé jusqu'à maintenant sur ce site.
Visite au Pixel Museum ()
« 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.
C'est donc logiquement que la seconde pièce présente une foison de console de l'époque Pong, Odyssée et autres. De très belles pièces, très diverses, montrant aussi que l'objet ludique électronique est tout juste en train de naître et n'est pas encore très dissocié d'autres jeux électroniques ou... de l'électroménager.
La présence plus loin d'un « Simon » ou d'un « Merlin » est une manière d'ancrer l'époque sur un thème débordant un peu du jeu vidéo au sens strict, et c'est une signature du musée qui nous suit tout au long de la visite.
Les époques
Ce que l'on peut dire, c'est que le musée est à jour et couvre une période allant des tous débuts du jeu vidéo jusqu'à... aujourd'hui. La présence d'une Nintendo Switch l'atteste.
La Switch accompagnée de son coffret Zelda collector est aussi une signature du musée : les pièces sont souvent présentées dans une version collector, ou tout simplement rare. Et toujours en très bon état esthétique.
Les ordinateurs
Le musée dédie le plus gros de sa surface aux consoles de jeux. Une vitrine seulement est dédiée aux ordinateurs familiaux et celle-ci n'est pas la mieux mise en valeur, les machines sont un peu les unes sur les autres et un CBM 2001 Series est même coincé sur le côté (certes, par rapport aux autres pièces, il s'agit là d'un titan qui étouffe un peu dans la vitrine).
Allez, on pardonne, il y a un VG5000µ.
En fait, cette section, d'après sa disposition et son contenu, semble plus se ranger dans les « à côté » de l'exposition, tout comme le « Simon ». En effet, le VG5000µ, le Alice ou le Portfolio ne sont pas vraiment des machines réputées pour leur catalogue de jeux vidéo.
L'Amiga à côté, coincé à côté d'un VIC-20 (pas de Commodore 64 ?) ou les deux Amstrad CPC ne sont pas vraiment mis en valeur.
Quelques machines japonaises, comme le Sord M5 ou le Family Computer ont droit a un plus bel espace dans la salle la plus spacieuse.
Ce n'est pas le point fort de Pixel Museum aujourd'hui, donc. Le musée est principalement focalisé sur l'objet exclusivement dédié au jeu.
L'interactivité
Dans un musée de jeux vidéo, on s'attend à pouvoir jouer. Et c'est le cas au Pixel Museum. Quelques bornes de console sont en libre accès
Une salle tout en longueur présente aussi quelques bornes d'arcade et un flipper, malheureusement lui aussi en panne lors de mon passage. Les titres présentés en Arcade ne sont pas forcément les plus emblématiques, reste tout de même l'expérience de jeu sur borne.
Côté vieilles consoles, une Vectrex et un Videopac permettent de goûter au jeu à l'ancienne. Côté plus récent, Dreamcast, Gamecube, Gameboy ou encore Wii. Je ne me souviens plus de toutes, ce n'était pas ce qui m'intéressait le plus.
Rien de fonctionnel du côté de la génération Pong, la table-vidéo au centre de la pièce n'était pas en fonctionnement. Il y avait cependant une évocation du jeu, ce qui nous amène aux re-créations présentes dans le musée.
Les re-créations
Au long du parcours, le musée nous propose des re-créations ou évocations, sur matériel récent, de jeux. Le premier est un Pong qui évolue graphiquement au fur et à mesure que les joueurs marquent des points. D'un Pong tout vide, on passe à la couleur, au tennis, à la possibilité de bouger sur l'axe horizontal en plus du vertical, pour être accompagné, dans les derniers points, par une débauche de couleurs.
L'idée est bonne. La réalisation pas autant. La manipulation se fait avec stick arcade, ce qui a l'avantage d'être solide mais l'inconvénient de ne pas être fidèle et de présenter trop de boutons pour un Pong. Le mouvement des raquettes et de la balle est extrêmement saccadé, alors que la particularité d'un Pong est d'être très fluide, de par sa nature. Et la plâtrée de couleurs à la fin n'est pas vraiment du meilleur goût.
Bref, pas convaincu.
Autre création peu convaincante que celle qui prend une bonne partie du hall d'entrée et met face à face deux joueurs pour un jeu de combat à base de formes géométriques. Là encore, la réalisation gâche l'expérience et j'ai pu observer les joueurs passer, tenter de comprendre, et s'en aller en faisant la moue. La plupart n'ayant pas réussi à lancer une partie.
J'y ai joué, j'ai réussi avec peine à lancer une partie et je n'ai pas vraiment compris ce qu'essayait d'évoquer ou de provoquer ce jeu. Pour moi, c'est une erreur.
Enfin, la réussite est dans la petite pièce consacrée aux jeux électroniques portatifs et à sa Game & Watch géante. Le rendu et le feeling est fidèle, juste en grand. La réalisation physique est propre. C'est une re-création réussie et amusante.
Les locaux
Le musée, qui est facile à trouver, est situé dans de beaux locaux. Il ne faut cependant pas se fier à l'extérieur, les pièces sont situées principalement au sous-sol. Cependant, l'agencement est bon, la décoration plutôt réussie et de belles fresques nous accompagnent dans les escaliers.
La plus vaste des pièces est malheureusement située en bout de cave, sans autre sortie que l'entrée, ce qui pour des raisons de sécurité compréhensibles la limite en visiteurs simultanés à 19 personnes. En tant normal, j'imagine que cela est bien suffisant, mais il est possible que vous ayez à attendre votre tour pour y entrer. Et comme c'est la pièce la plus longue à visiter...
Au rez-de-chaussée, mis à part la pièce de la Game & Watch et celle des Pong, on trouve une salle qui met en compétition PS4 et X1, mais pas sur les mêmes jeux, et une salle avec quatre PCs gamers, avec tout le matériel adéquat.
Le hall central, malgré la position centrale de la création que je n'ai pas aimée, est consacrée aux expositions temporels. Lors de ma visite, The Legend of Zelda et Mario Kart étaient à l'honneur, avec de belles pièces retraçant l'histoire de ces séries.
Des toilettes et un mini-magasin complète le tout.
Curiosité, dans la salle des PC, cette machine Kienzle sur lequel j'imagine assez bien qu'aucun jeu n'a jamais tourné, mais je peux me tromper. Je ne comprends pas bien la présence dans la machine dans ce musée, mais cela faisait plaisir à voir tout de même.
Les autres activités
Le site indique, en plus d'expositions thématiques, la présence d'ateliers de création de jeux, la possibilité de privatiser pour un événement, un (ou des ?) espace(s) de travail.
Ce ne sont pas des activités auxquelles j'ai participé, mais qui montrent le dynamisme de l'équipe du musée et la volonté de faire de Pixel Museum un espace vivant.
Conclusion
Je ressors très content de cette visite. Ce musée est tout jeune mais commence fort. La collection est intéressante, variée, globalement bien mise en valeur. Les vitrines sont réfléchies, lisibles.
N'hésitez pas à consacrer au moins un heure pour cette visite, qui pourra vite s'allonger si vous avez envie de jouer un peu, ou de discuter un peu vos souvenirs devant les vitrines si vous êtes dans un groupe.
« (précédent) Page 20 / 23 (suivant) »