Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » [Prizm] - Interpréteur Chip8
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1243 Défis: 54 Message

[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


1, 2 Suivante
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 09/05/2014 21:22 | #


Bravo je te soutient , beau projet
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1243 Défis: 54 Message

Citer : Posté le 09/05/2014 21:29 | #


Voila, le dépot git mis sur GitHub pour ceux que ça intéresse.
Le code est pas très propre, mais je vais entamer une petite phase de nettoyage que ce soit plus clair.

Sinon, il me semble assez compréhensible, juste pour ceux qui voudraient le compiler, les types uint8_t et uint16_t sont définis dans un stdint.h fait rapidement car je trouve que ça clarifie mieux le rôle des variables (quand je demande un unsigned char, je veux un nombre/caractère, mais quand je demande un uint8_t, je veux plutôt une variable de 8 bits, c'est la même chose, ma logique est peut être foireuse mais il me semble que c'est plus clair, et puis au pire, dites vous que c'est plus court :p...)

Si vous avez des idées/remarques pour améliorer/optimiser, vous gênez surtout pas .

Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 09/05/2014 21:37 | # | Fichier joint


Je me souviens, j'avais commencé un interpréteur chip8 en add-in il y a longtemps
Si tu veux, tu peux regarder un peut les sources, je te les mets en PJ
(par contre il n’était pas entièrement fonctionnel, la gestion des collisions ne marchait pas)
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1243 Défis: 54 Message

Citer : Posté le 09/05/2014 23:13 | #


La gestion des collisions ? Je vois pas trop de quoi tu parles ^^' ...
Sinon, je regarde ton code, peut être trouverai-je des idées pour optimiser un peu tout ça !
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1243 Défis: 54 Message

Citer : Posté le 11/05/2014 00:53 | # | Fichier joint


Donc, j'ai finalement localisé quelques bugs (le commit de fix se résume à deux variables inter-changées et à passer deux "<" en "<=" , rien de bien méchant, mais je suis pas très rapide au débugage ). Le code est toujours dispo et mis à jour sur le dépôt Github.

Donc, pour l'instant, je n'ai pas trouvé de jeux ne se lançant pas/ne fonctionnant pas sur l'interpréteur (faîtes attention à prendre des roms pour Chip8 et pas SuperChip8 (ou SChip8), le support viendra peut être plus tard), donc de ce point de vue là, il m'a l'air plutôt fonctionnel.
Maintenant, il faut optimiser un peu beaucoup tout ça, et assouplir un peu la gestion de l'affichage et des timers pour les rendre plus fonctionnels.

Je vous remets donc un build en pièce jointe et édite rapidement le post principal pour mettre un ou deux screens.

EDIT : J'vous en ai même mis trois dans le premier post bande de veinards : une de pong, une de blinky (une sorte de pacman) et la troisième... je sais pas trop (c'est quand on perd à blinky) , mais je trouvais sympa ^^" .
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 11/05/2014 10:41 | #


Super !
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 11/05/2014 18:01 | #


Om om, it's looking really nice ! Louloux soutient le projet et attend de pouvoir exécuter des vieux jeux chip8 sur sa Prizm.


deeph Invité

Citer : Posté le 11/05/2014 18:24 | #


Cool du chip-8

J'ai programmé il y a longtemps quelques trucs avec ce langage (que j'aime assez, notamment parce qu'il est très limité et donc que ça force à devoir optimiser pas mal).

J'ai un petit jeu d'esquive que j'aimerai voir tourner sur d'autres plateformes (j'ai déjà vérifié et apparemment il tourne assez bien sur l'ému TI 83+), la source est inclue : Avalanche.zip.

Pour ceux que ça intéresse, le seul compilo utilisable sous windows que j'ai trouvé c'est C8Asm, j'aurai bien utilisé chasm mais j'ai la flemme de le compiler.
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1243 Défis: 54 Message

Citer : Posté le 11/05/2014 20:53 | #


Merci à vous !
Deeph, j'ai testé ton jeu, il est sympa et soigné, malheureusement, il est développé en prenant en compte l'extension SuperChip8 (ou Chip48), et n'est donc pas pour l'instant exécutable sur mon interpréteur... Ca me fait donc une bonne raison de m'intéresser au support de l’extension (c'est pas bien sorcier, une dizaine d'instructions à rajouter tout au plus ).

D'un autre côté, j'ai fait des tests pour avoir une idée des performances actuelles, et surtout pour avoir une idée de la fréquence émulée. Je suis parti du principe que les "add", ainsi que les "jmp" et "ld" s'étalent normalement sur un seul cycle processeur si exécutés en natif. J'ai donc fait tourner ce programme sans affichage (les valeurs sont des valeurs bidons juste pour tester) :
Entry:
    ld V1,#25
    add V1, #2F
    jmp Entry

On obtient les résultats suivants : environ 173kHz non OC et 280kHz OC. Je ne sais pas trop si il faut être content, car ça me semble assez peu (0.3% de la fréquence de fonctionnement de la Prizm non overclockée...).
Donc, je vais devoir revoir mon système . Je vais essayer de compacter un peu pour limiter les call/ret (j'en ai 5 par cycle, donc ça doit déjà pas mal pêcher par là), après, peut être voir à optimiser les instructions, quitte à en réécrire quelques unes en asm, mais je pense que GCC doit déjà s'en occuper pas trop mal. Enfin, voila, j'espère que ça va quand même évoluer vers le haut :p.


Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 11/05/2014 20:56 | #


Déjà tu compiles avec gcc, c'est la base.
Bon courage pour la suite.
call et ret sont deux instructions assez lourdes de tout manière.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)


deeph Invité

Citer : Posté le 11/05/2014 21:47 | #


Enfaite je n'utilise que l'instruction "high" pour mettre l'écran en 128*64 (comme sur hp48), parce que 64*32 c'est assez petit (encore plus que sur TI 83+ !), donc le reste ça doit être bon.

Je suis en train de programmer un autre petit jeu juste pour le fun
Ne0tux Hors ligne Membre d'honneur Points: 3525 Défis: 265 Message

Citer : Posté le 14/05/2014 13:57 | #


@Nemhardy : excellent projet en lequel nous pourrions voir une bonne raison de ressortir nos PRIZM du placard ! Bon courage.

@Deeph : inscrits-toi, nous serions honorés d'avoir un programmeur qui fait du chip8 parmi nous.
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1243 Défis: 54 Message

Citer : Posté le 14/05/2014 21:25 | #


Merci Ne0 pour ton soutien :). Et Deeph, je te promet que je me penche sur le support du Chip48 rapidement, et comme l'a dit Ne0tux, n'hésite pas à t'inscrire et nous partager tes jeux :).

Sinon, au niveau de l'avancement, j'en suis toujours à réfléchir à l'optimisation, inliner quelques fonctions pour réduire les calls/ret s'est avéré un peu bénéfique (pas très surprenant en soi). En plus de ça, j'ai regardé un peu pour réécrire des instructions en ASM, et il s'est avéré que certaines capacités de GCC concernant l'interfaçage entre du code C et du code ASM sont vraiment puissantes (je ne m'y étais jamais trop intéressé ), et du coup permettent vraiment de travailler comme je veux. Pour ceux qui voudraient voir, la fonction add_byte dans instructions.c sur le dépôt est réécrite, et est plus efficace que la compilation qu'en fait GCC (bon ok, ça vient peut-être de la manière dont je l'ai écrite en C ), donc creuser cette piste là peut-être bien aussi :).

Toujours est-il que je vais essayer de sortir rapidement une version utilisable (en soi, le moteur de l'interpréteur est bien fonctionnel, mais pas très pratique, l'interface est à revoir, ou encore par exemple, une répartition des touches plus pratique et à envisager).
Enfin voila, j'avance, certes pas très rapidement, mais j'essaye de faire un truc propre et de ne pas me perdre dans mon projet (vive git et sa gestion des branches et de tout le reste d'ailleurs ) !
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1243 Défis: 54 Message

Citer : Posté le 17/01/2015 21:58 | # | Fichier joint


Finalement après en avoir parlé un peu ce soir je me suis rappelé que j'avais avancé entre temps en rajoutant notamment un explorateur de fichiers (accessible en tapant "fb"), et un affichage de quelques infos après avoir quitté le jeu, les sources sont à jour sur le git, et voila :p...





Voilà, le binaire est en fichier joint (à noter qu'il y a une version spéciale émulateur car la bibliothèque qui gère la console ne fonctionne pas bien sur émulateur...). Pour importer un .ch8 sur l'émulateur il faut ruser un peu en le renommant en un .g3a, puis via un add in comme Utilities de gbl08ma le renommer en .ch8 ;).
Même si je doute que ça intéresse grand monde, le projet est déjà un peu plus utilisable maintenant.
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 18/01/2015 10:12 | #


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...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
-florian66- Hors ligne Ancien rédacteur Points: 2384 Défis: 20 Message

Citer : Posté le 18/01/2015 12:08 | #


Cool mais on s'en sert pour quoi exactement ?

In Arch, I trust ! And you ?
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 18/01/2015 12:13 | #


Lephenixnoir a écrit :
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 )
-florian66- Hors ligne Ancien rédacteur Points: 2384 Défis: 20 Message

Citer : Posté le 18/01/2015 12:17 | #


Comment on programme sur cet emulateur ?

C'est de l'hexa omg
In Arch, I trust ! And you ?
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 18/01/2015 13:10 | #


C'est pas hyper compliqué, t'as juste une série d'opcode qu'il faut interprété, t'as même un tutoriel sur le SDZ
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 18/01/2015 14:47 | #


Intelligide a écrit :
Lephenixnoir a écrit :
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 ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 110 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd