[C/gint] Emulateur chip8
Posté le 17/02/2020 18:18
Donc comme dis lors de la derniére réunion PC, je travaille depuis un peu plus d'un mois sur un emulateur bas-niveau chip8.
depot gitea
Avancement
Toutes les instruction sont implementé, reste du peaufinage sur les instruction utilisant getkey
Le systeme est presque fonctionel, manque seulement les timers.
J'aimerais rendre deux trois trucs paramétrable pour des raisons de compatibilité.
J'aimerais également implementer des saves-states et du backtracking.
Pour l'instant l'interface de selection des ROMs se résume entrer le nom de cette derniéres dans les sources, mais pour la finir il me fait convertir des chaines FONTCHARACTER vers de l'ascii ou autre.
Notes sur la compilation
Pour l'instant, j'utilise une version custom de gint avec plus de syscall, que vous pouver trouver içi
Avec de la chances, vous pourrez bientôt utiliser la version classique (si j'ai bien codé).
Votre rôle
Maintenant que c'est à peu prés utilisable, j'aurais besoin de votre aide pour trouver des bug/incompatibilité en testant avec plein de ROMs differentes
ps: en piece jointe la ROM que j'utilise pour mes test.
Fichier joint
Citer : Posté le 17/02/2020 21:22 | #
Hmm, pas mal ! J'ai testé par rapport aux versions que je trouvais en ligne (rappelle les contrôles sinon c'est galère xD). Tu vas à quelle vitesse en termes d'instructions/s par exemple ?
Pour la compatibilité, je me souviens qu'il y a des comportements spéciaux sur les shifts nécessaires pour faire marcher certains jeux...
Citer : Posté le 17/02/2020 22:12 | #
aucune idée, j'ai pas encore implementer les timers
Je ferais un README demain pour les controles
pour la compatibilité, pour faire simple, c'est compliqué, parceque les specification sont pas unique, du à certain trucs non définit et donc interpreter differament d'une implementation à une autre… (coucou MD, coucou AP)
Citer : Posté le 18/02/2020 10:55 | #
Bon, j'ai fait un test, et un benchmark
Bon, pour les contrôles, effectivement c'est compliqué sans le savoir, et j'ai regardé le code, mais je n'ai pas compris
Mais du coup j'en ai quand même profité pour faire un benchmark avec la libprof sur une rom de pong (il y avait une boucle infinie donc c'était plus simple pour moi ). J'ai donc fait le benchmark avec le modèle suivant:
OS: 2.05.2201
Dans les différents tests que j'ai fait, seul le temps d’exécution de la fonction execute() est mesuré, tout le code additionnel exécute n'est pas comptabilisé. (Chaque vitesse obtenue est calculée à partir de la durée de 256 instructions)
Avec les paramètres de vitesse de processeur originaux, la libprof renvoie le temps mesuré suivant:
4074 microsecondes en moyenne par instruction, soit 1 000 000 / 4 074 = 245.45 instructions par seconde
Maintenant, avec ftune, en poussant le cpu à 235.93 MHz, on descend jusqu'à...
707 microsecondes en moyenne par instruction, soit 1 000 000 / 707 = 1414.43 instructions par seconde
Voila ce que ça donne en matière de vitesse d'exécution, je laisse les sources, et la rom utilisée ici, https://gitea.planet-casio.com/Milang/chip8-benchmark, comme ça vous pourrez vérifier si mon benchmark est correct. (J'ai seulement modifié project.cfg pour y ajouter la libprof, j'ai joint la ROM et le code modifié se situe dans src/main.c)
D'ailleurs, je confirme que ça marche avec la version classique de gint
Ah et un dernier truc aussi, si on pouvait quitter le programme sans faire de reset, ça serait mieux
Citer : Posté le 18/02/2020 11:01 | #
merci pour les test~ ♥
Citer : Posté le 18/02/2020 11:19 | #
Intéressant ! Ça c'est du test poussé, merci Milang.
Donc 250 instructions par seconde... c'est pas mal du tout (même si on peut certainement faire plus rapide).
Citer : Posté le 18/02/2020 12:24 | #
disons que j'utilise déjà pas mal de trick pour rendre le tout plus rapide… mais probablement