Comme beaucoup de personnes de mon (grand) âge, je suis tombé dans la programmation quand j’était petit (comme Obélix dans la potion magique). Tout s’est fait par une quantité assez conséquente de hasard. Certains diront que c’est le destin (et non le hasard), pourquoi pas…
Tout a commencé quand mes parents m’ont offert pour Noël 1980 une console de jeux Philips VIDEOPAC. Personnellement j’aurais préféré une ATARI 2600 car tous mes copains avaient cette console là et on aurait pu se prêter les cartouches de jeux. Comme à son habitude, mon père a fait tout seul le choix de la console (il était grand fan des produits Philips) et j’ai été quasiment le seul à avoir ce modèle (pour le prêt de jeux on repassera).
La console en elle-même n’était pas super géniale. Les graphismes étaient assez élémentaires mais les jeux étant plutôt bien faits, on s’immergeait assez facilement et ce détail finalement n’avait pas vraiment d’importance.


Le vendeur de cette console était installé au rez-de-chaussée de l’immeuble où habitaient mes grands parents paternels. A chaque fois que j’allais leur rendre visite, je passais un petit moment à regarder tous les jeux qui étaient disponibles chez lui. Les jeux étaient assez chers et je ne pouvais pas prétendre en obtenir tous les matins. Mais bon je me tenais au courant de ce qui existait et des nouveautés.
En plus de ça le fils du vendeur était un copain depuis de nombreuses années et il me donnait des infos avant même que la cartouche soit exposée dans la vitrine de son père. Un jour, une cartouche a fait son apparition dans la vitrine. Et je dois bien avouer qu’elle m’a tout de suite parlée. C’était la cartouche n°9, et son titre était « Computer Programmer »…

J’étais absolument archi ultra méga nul en Anglais, mais je savais tout de même de « Computer » voulait dire « Ordinateur » et que « Programmer » avait un truc à voir avec la programmation (même si je ne savais rien de ce que c’était). Et là je me suis dit tout de suite que je voulais absolument ce « jeu ». Je ne peux pas vraiment dire pourquoi mais ça m’a fait l’effet d’une révélation, un peu comme quand vous croisez la fille de vos rêves et que vous tombez instantanément amoureux alors que vous ne savez rien d’elle. J’avais eu le « coup de foudre » pour cette cartouche.
Le plus gros problème c’était son prix. Je ne me souviens plus exactement mais quand j’ai dit à ma mère qu’il fallait absolument qu’elle me l’achète, elle m’a opposé un non catégorique car mon père n’allait très certainement pas être d’accord (trop cher mon fils). Comme cette discussion a eu lieu chez mes grands parents (qui je vous le rappelle habitaient juste au dessus du magasin) ma grand mère a tout de suite compris que ce n’était pas un simple caprice et que pour moi c’était très important (oui ma grand mère était géniale). Elle a alors décidé de me donner de quoi acheter le jeu et je sais, avec le recul, que par rapport à ses faibles moyens, c’était pour elle un gros effort financier.
J’ai donc descendu 4 à 4 les escaliers jusqu’au magasin dans lequel j’ai pu acheter l’objet de mon désir !
Cette première étape étant passée, j’allais m’attaquer à l’un des plus grands défis de ma vie : Comprendre un sujet totalement inconnu, expliqué dans une langue que je ne connaissait pas (mon niveau d’anglais à 12 ans se résumait à ne récolter que des cartons aux contrôles).
Car cette cartouche permettait de programmer « un peu » la console VIDEOPAC en ASSEMBLEUR !!!! Oui oui vous avez bien lu, le langage utilisé était un pseudo assembleur. Il faut bien l’avouer, je n’ai pas commencé par l’accès le plus simple, mais ça je ne le savais pas et heureusement d’ailleurs sinon je ne me serai pas lancé là dedans !
Cette cartouche était fournie avec un manuel de 84 pages, 100% en anglais (ça pique) et dont le but était d’apprendre la programmation. C’était donc clairement un jeu éducatif. D’ailleurs d’après l’article Wikipédia qui lui est consacré, ce jeu a même reçu un prix en 1983 :
Début 1983, la cartouche est considérée comme « la meilleure cassette d’apprentissage pour l’entrée en informatique » par le magazine allemand TeleMatch.
Programmation (Videopac) — Wikipédia (wikipedia.org)
Une documentation très complète il est vrai, tous les sujets de base étaient abordés, par exemple :
- Le binaire
- L’hexadécimal
- Les opérations logiques (and, or, etc).
- L’acumulateur
- Les registres
- L’ALU (unité arithmétique et logique)
- Le compteur de programme
- Une sous-routine
- Un saut (conditionnel ou non)
- Les instructions (OP code)
- Et tout le reste…
Cette documentation était réalisée de manière très pédagogique avec pas mal de dessins (c’est ce qui m’a sauvé d’ailleurs) :


Il était possible de rentrer les programmes de deux manières. Soit en assembleur soit directement en hexadécimal. En assembleur on entrait des instructions du genre
00 - LDV.B.50
Et en hexadécimal du genre
00 - 6B
01 - 50
Il y avait 2 choses qui n’étaient pas cool dans cette histoire. Tout d’abord, tout ce qui était rentré en assembleur était instantanément transformé en hexadécimal et quand on voulait modifier le programme on devait le faire obligatoirement en hexa (dégueu). La seconde chose était que rien n’était prévu pour sauvegarder les programmes. Quand on éteignait la console tout était perdu.
Il y a avait en tout 99 pas de programme. Très vite ça devient très exigu comme espace pour s’exprimer. De plus on devait calculer soit même les adresses de branchement car il n’y avait pas de système d’étiquettes. Le mieux était donc d’écrire sur papier le programme en hexa (1 ligne = 1 instruction = mode Opcode), numéroter les lignes et noter les adresses de saut avant de taper (toujours en Opcode) le code sur la console.
Un chose était assez déroutante aussi, les pas de programme (les adresses) étaient en décimal. Les registres eux étaient notés de 0 à F (d’où le registre B de l’exemple). Le registre C était utilisé pour indiquer la position des caractères à l’écran. Le registre A c’était l’accumulateur.
Oui alors autre point de frustration, l’affichage ! On avait le droit d’afficher une ligne (oui oui une seule ligne) de 10 caractères, si on indiquait des valeurs plus grandes on revenait à la position de base avec un très léger décalage du caractère vers le haut (donc la position 0B c’est en fait 01 avec un petit décalage vers le haut, en mode bien crado).
Le jeu de caractères disponible n’avait absolument rien à voir avec l’ASCII mais il était plutôt sympa :

Il y avait aussi un générateur de nombre aléatoire (si si monsieur) ainsi qu’une instruction pour émettre un bruit genre buzzer. Je m’en souviens encore, c’était l’instruction SIG en assembleur ou 05 en hexa (Opcode).
Voici un petit exemple de code qui affiche de manière aléatoire sur l’écran des blocs et des espaces en émettant un « bip buzzer » à chaque tour.


Pour vous faire une petite idée des possibilités voici la liste des instructions disponibles tirées du manuel :
| Mnémonique | Opcode | Opération |
| ADD.R | ER | Add Accumulator to Register A = A + R |
| BDB.NN | 10 NN | Branch on Decimal Borrow if Ah = 9 then PC = NN |
| BDC.NN | 11 NN | Branch on Decimal Carry if Ah != 0 then PC = NN |
| BEQ.R.NN | 3R NN | Branch if Register equals Accumulator if R = A then PC = NN |
| BGT.R.NN | 4R NN | Branch if Register is greater than Accumulator if R > A then PC = NN |
| BLS.R.NN | 5R NN | Branch if Register is less than Accumulator if R < A then PC = NN |
| BNE.R.NN | 2R NN | Branch if Register is not equal to Accumulator if R != A then PC = NN |
| BRZ.NN | 13 NN | Branch if Accumulator equals zero if A = 0 then PC = NN |
| CLR | 01 | Set Accumulator to zero A = 0 |
| DEC | 02 | Substract one from Accumulator A = A – 1 |
| GTO.NN | 12 NN | Branch unconditionally PC = NN |
| GTS.NN | 14 NN | Go to subroutine PC = NN |
| HLT | FF | Halt Program execution |
| INA | 04 | Input to Accumulator A = input |
| INC | 03 | Add one to Accumulator A = A + 1 |
| INP.R | 7R | Input to Register R = input |
| LDA.R | 9R | Load Accumulator from Register A = R |
| LDV.R.NN | 6R NN | Load a value into a Register R = NN |
| MOV | 09 | Load Accumulator from Program step C = Program step A = *C |
| NOP | 00 | No operation |
| OTA | 0B | Output from Accumulator Ouput A at Register B location (B = screen position) |
| OUT.R | CR | Output from register Ouput Register R at Register B location (B = screen position) |
| PAK.R | 8R | Combine two digits R6 = 09 / R7 = 25 — PAK.6 — A = 95 The high order bit of the first register mus always be a zero |
| RET | 07 | Return from subroutine |
| RND | 08 | Load Accumulator with random number 00 to 99 |
| SIG | 05 | One second buzz |
| STO.R | AR | Store Accumulator in Register R = A |
| SUB.R | DR | Substract Accumulator from Register A = R – A |
| UNP.R | BR | A = 95 — UNP.6 — R6=09 / R7=05 |
Si vous souhaitez jeter un œil à cette documentation, elle est juste là (numérisée par les soins de l’excellent site Videopac.org) :
Comme vous pouvez vous en douter, ça n’a pas été facile, beaucoup de douleurs et de frustrations, du moins au début, mais je ne sais pas pourquoi, j’ai tenu bon et je n’ai pas lâché l’affaire.
En même temps, je découvrais le film TRON par le truchement d’un livre (je verrai le film un peu plus tard), là aussi méga ambiance « Computer Programmer » et en plus découverte de l’album du génialissime Jean-Michel JARRE, EQUINOX, qui par certains aspects aurait pu être sans rougir la BO de TRON.


D’ailleurs je dois vous avouer qu’encore aujourd’hui, 43 ans après, lorsque je suis confronté à un problème lors d’un développement, je mets mon casque et je lance EQUINOXE, ce qui généralement me permet de mieux me concentrer et ainsi de trouver la solution à mon problème. Magique non ?
Au final, grâce à cette cartouche de jeu, j’ai compris énormément de choses liées à la programmation et au fonctionnement des ordinateurs, et ça m’a préparé pour la suite, qui a d’abord été de programmer sur des calculatrices (trop facile), puis sur des ordinateurs de poche type Casio PB 100, puis sur ordinateur personnels (genre Amstrad CPC 464) et enfin sur des PC classiques, d’abord sous MS-DOS puis sous Windows. Viendra ensuite l’époque du développement mobile, une passion complémentaire qui s’est révélée à moi un peu comme pour cette cartouche, car ce fut juste une évidence !
Si vous avez envie de voir ce que la console VIDEOPAC donnait, je vous invite à utiliser un émulateur. Vous pourrez même tester la cartouche n°9 (si vous avez du courage).
Voilà, vous me connaissez un tout petit peu mieux, et j’espère que cette histoire vous a plu.
A bientôt.
Steph.
1 réflexion au sujet de « Mes premiers pas en programmation »