Ma Demo Breakout sur l'EDSAC (1949)

Channel:
Subscribers:
1,310
Published on ● Video Link: https://www.youtube.com/watch?v=JGfBPJgMBLA



Duration: 2:25
717 views
62


C'est une démo de casse-brique que j'ai programmé grâce a un émulateur/simulateur de l'EDSAC qui reproduit fidèlement la machine et tout son environnement de l’époque (son monitoring, ses boutons de façades, son imprimante, sa cloche, son cadran de téléphone) pour vous mettre en condition réel. C’est vraiment une chance de pouvoir émuler une machine aussi vieille (1949).
https://www.dcs.warwick.ac.uk/~edsac/
Un casse-brique qui aurait donc pu tourner tel quel en 1949, 27 ans avant Breakout et 37 ans avant Arkanoid :)

L'EDSAC, conçu à l'université de Cambridge à partir de 1947 et opérationnel dès mai 1949, est peut-être le premier ordinateur moderne en usage. On retrouve l'essentiel des ingrédients de nos ordinateurs. C'est une architecture de Von Neumann. Un CPU entièrement électronique (3400 tubes à vide). De la RAM, même si sous une forme très étonnante (voir mon billet https://upsilandre.over-blog.com/2021/12/la-revolution-oxo.html ). Un support physique sur lequel sont stockés les programmes (ruban perforé) avec même une machines capable de les dupliquer. Une sorte de boot ROM qui se charge automatiquement dans la RAM à l'allumage et qui contient un proto-bios ou proto-assembleur (L’Initial Order, extrêmement primitif, seulement 40 instructions, mais qui servira d'inspiration par la suite). Ainsi le programme sur ruban est automatiquement chargé dans la RAM par l'Initial Order pour être exécuté à partir de celle-ci comme dans un ordinateur moderne.

L'EDSAC est aussi connu de ceux qui s'intéressent à l'histoire du jeu vidéo pour son programme OXO, un jeu de morpion conçu en 1952.
En effet il est possible de détourner l'usage du monitoring de l'EDSAC qui sert normalement au debugging de la machine (en affichant sur des mini CRT 6" l'état de chaque bit de la RAM et des registres) afin de l'utiliser comme un affichage de pixel. Le tank de RAM que l'on choisit de visualiser sur le monitoring devient alors un framebuffer. Un framebuffer de très faible résolution (35x16) mais un framebuffer tout de même ce qui ouvre alors plein de possibilités. J'avais donc très envie de savoir ce qu'il était possible de faire en temps réel à cette époque pour du vrai jeu vidéo d'action.

Reste que les performances de l'EDSAC sont très limitées. A peine quelques centaines d'instructions par secondes et un jeu d'instruction très rudimentaire (une grosse douzaine) qui nécessite parfois d'en combiner plusieurs pour avoir l'équivalent d'une instruction classique d'un CPU 8 ou 16 bit.
J'avais l'idée de faire un casse-brique mais j'étais vraiment très sceptique sur la possibilité de pouvoir le faire tourner en temps réel (temps réel que je situe aux alentours de 5 fps, mon objectif pour l'update de la balle). J'y croyais peu mais suffisamment pour tenter.
Finalement, en prenant le temps et en optimisant au mieux que je pouvais, instruction par instruction, j'ai réussi à obtenir quelque chose de très satisfaisant, au-delà de mes espérances. Ça tourne à une douzaine de fps en moyenne (entre 10 et 13 fps, l'émulation en mode "realtime" comme on peut vérifier sur l'horloge à droite) avec un comportement de balle et des collisions parfaitement propres.

Malheureusement la démo n'est pas jouable. L'EDSAC n'a pas d'input temps réel pour pouvoir interagir directement avec le jeu. Ce qui s'en approche le plus est son cadran de téléphone qui permet d'interagir mais de façon différée (utilisé pour OXO en permettant de choisir l'une des 9 cases). Ça nécessite d'interrompre l'exécution.
La démo permet tout de même de se faire une bonne idée de ce qu'il était possible de faire dès 1949 et c'était le but. J'ai tout de même utilisé le cadran de téléphone pour permettre de choisir la position initiale de la balle parmi 10 possibles (et donc 10 séquences complètement différentes). Ainsi que l'imprimante (la véritable output, l'écran n'en est pas une) pour l'introduction.

Il ne reste que 3 tanks de RAM libre sur les 32 mais c'est justement parce que j'avais plus de place que nécessaire que je me suis permis de la redondance de code pour grignoter quelques instructions de plus à l'exécution au détriment de l'empreinte RAM. Il serait facile de la réduire d'un tiers.

La programmation de l'EDSAC est un vrai casse-tête, un petit défi, et en même temps on y trouve des choses relativement familières, c'est déroutant. C'est une chouette expérience (de quelques semaines). Il existe même un livre de programmation de 1951 (considéré comme l'un des tout premier) qui vous apprend à programmer dessus pour se mettre encore plus dans l’ambiance de l’époque: THE PREPARATION OF PROGRAMS FOR AN ELECTRONIC DIGITAL COMPUTER.

La séquence de 3611 caractères qu'il faudrait précisément taper sur le clavier de la perforeuse de l'époque (ou dans l'émulateur) pour obtenir cette démo. Soit un ruban d'un peu plus de 9 mètres ^^ : http://pastebin.fr/130189
Et sous une forme plus lisible:
https://drive.google.com/file/d/1qs9gtZ6P9z1EFEnoYZp1DTMiB2WMS5yz/view?usp=drive_link







Tags:
Retrogaming
EDSAC
Breakout
Programmation