[Prizm] - Interpréteur Chip8
Posté le 09/05/2014 19:17
Petit projet qui sera plutôt un projet à court terme, pas trop utile mais bon...
Hier, sur le chat j'avais évoqué "l'assembleur Chip8" sur HP-48 (une ancienne calculatrice), et je me suis souvenu d'un billet sur je ne sais plus quel blog qui évoquait cet assembleur en précisant que c'était une bonne base pour commencer à programmer quelque chose qui ressemblait à de l'émulation (techniquement, je me dis que c'est pas vraiment de l'émulation au sens premier du terme car c'est un langage interprété sur plusieurs types de machines, mais bon...
). J'ai donc commencé hier à programmer quelque chose qui serait capable de charger des programmes Chip8 et les exécuter sur la Prizm; c'était plus un défis personnel (je doute que beaucoup de gens ne s'amusent comme des fous avec un pong, quoique c'est plus intéressant qu'un plus ou moins de mon point de vue
) pour voir si j'étais capable de programmer efficacement uniquement à partir de doc plus ou moins technique (en fait, je n'ai utilisé que
ce site).
Finalement, c'était plutôt rapide car j'ai quasiment fait que du debug aujourd'hui, le gros a été écrit hier, et ça commence à être jouable. En fait, certains jeux ont des comportement non-prévus de temps en temps (du style score qui s'incrémente à moitié par exemple), mais je continue de debug (c'est pas la chose la plus simple/rapide car je désassemble la ROM et suit le déroulement du programme instruction par instruction pour localiser les instructions qui posent problème et dans quelle(s) condition(s)).
Je met ici un build absolument pas définitif, mais utilisable. L'interface est
austère inexistante (vous avez juste une sorte de console au début où vous devez écrire le nom de la ROM (e.g. pong.ch8) que vous aurez placé à la racine de la calto (sinon, vous pouvez taper le chemin folder\\pong.ch8 , mais la saisie n'est pas des plus pratique (et je viens de me rendre compte que l'antislash n'est pas accessible
... faut vraiment que je finisse mon fork de prizmio) ); pour quitter vous devez tapper "exit" puis appuyer sur [Menu](ou reset la calto
) et si jamais "help" vous redira en gros ce que je viens de dire). Une fois le nom tapé, le programme charge pendant quelques secondes et puis le jeu se lance. Les touches sont mal mappées (de 1 à 9 cela correspond au clavier normal 1->9, puis de A à F, c'est les touches F1 à F6), mais ça reste une version non définitive. Vous pouvez quitter en appuyant sur la touche [EXIT] puis [Menu]
L'interprétation n'est pas des plus rapide (mais égale la version Prizm déjà existante sur Cemetech), mais c'est un premier jet et j'ai plusieurs piste d'optimisation (notamment sur la gestion de l'affichage) ;).
Accessoirement, vous pouvez appuyer sur Shift ce qui fera passer le programme en mode debug, c'est à dire que cela ralentit le programme et affiche le "program-counter" (l'adresse de lecture actuelle des instructions) pour suivre l'évolution pas à pas de l'interprétation.
Enfin voila, je fais un premier commit sur un dépot git et je met le code online dans la soirée, ainsi qu'un ou deux screens (même si un pong c'est pas passionnant à voir) ;), en tout cas, c'est assez intéressant à faire, pas bien compliqué, mais ça me plaît bien, pourquoi pas envisager une fois que cela est fini (i.e. pas de suite), l'émulation de plateformes un peu plus intéressantes !
EDIT : Pitit(s) Screenshot(s)
Fichier joint
Citer : Posté le 18/01/2015 14:47 | #
C'est bête que si peu de gens aient une Prizm (moi le premier à ne pas en faire partie), c'est un projet d'un grand intérêt...
T'as qu'a participer aux concours (bon laisse quand même un peu de chance aux autres )
Désolé, je peux pas arriver deuxième au concours
Sinon c'est « juste » un interpréteur de code Asm.
Mais au fait, il est compilé ou pas ?
Citer : Posté le 18/01/2015 15:14 | #
l'hexa est de l'asm compilé
Citer : Posté le 18/01/2015 15:47 | #
Techniquement, c'est destiné à être interprété sur une machine virtuelle, du coup je ne sais pas trop si il faut le considérer comme compilé, vu que c'est écrit en "assembleur" puis assemblé, je ne connais pas le terminologie exacte ^^...
Citer : Posté le 18/01/2015 15:59 | #
l'hexa est de l'asm compilé
Merci, mais tu m'avances pas là
Techniquement, c'est destiné à être interprété sur une machine virtuelle, du coup je ne sais pas trop si il faut le considérer comme compilé, vu que c'est écrit en "assembleur" puis assemblé, je ne connais pas le terminologie exacte ^^...
Ce que tu lis à l'exécution c'est compilé ou pas ?
Citer : Posté le 18/01/2015 16:01 | #
Ouvre un fichier .ch8 et tu verras bien si tu as les instructions en texte
(Ok, je sors ... )
Citer : Posté le 18/01/2015 16:02 | #
Si vous me dites que vous faites une compil JIT sur une calto...
Citer : Posté le 18/01/2015 16:04 | #
ça marche
Je sais juste pas où sont toutes les fonctions pour faire quelque chose et dans quoi on l'écrit
Citer : Posté le 18/01/2015 16:16 | #
Le but n'est pas tellement de permettre la programmation en chip8, car c'est pas la chose la plus agréable à faire ^^, mais surtout de permettre l'éxécution d'un certains nombre de jeux déjà existants (enfin c'était surtout par curiosité que j'ai fait ça car ça n'est pas la plateforme la plus amusante de monde non plus ).
Après, ça peut constituer une approche intéressante d'un truc qui pourrait ressembler de près ou de loin à de l'assembleur :).