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 » MQ : Émulateur add-ins universel
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

MQ : Émulateur add-ins universel

Posté le 28/05/2025 20:22

Parmi les projets de 2025 il y a tout un plan pour préserver les contenus du site, notamment les vieux programmes. La base de programmes de Planète Casio n'est pas beaucoup maintenue et on ne traque pas vraiment ce qui est encore jouable ou pas.

Les projets d'émulateurs c'est pas nouveau, c.f. *, *, * et j'en oublie. Initialement je pensais repartir d'un existant, mais finalement j'en ai commencé un from scratch en voyant le cahier des charges :

  • Il faut pouvoir émuler à la fois les Graph mono et les Prizm et à la fois les SH3 et les SH4 ;
  • Il faut que ça puisse tourner sur le site donc compiler vers WebAssembly et optimiser raisonnablement (téléphones etc. ont pas des perfs de dingue) ;
  • Il faut émuler pas mal de trucs matériels, donc assez bas-niveau, pour bien couvrir les add-ins et potentiellement l'appli PRGM pour émuler les programmes Basic ;
  • Et si on fait tout ça ce serait criminel de pas s'en servir pour développer/debugger, ce pour quoi une GUI plus grosse que juste l'écran est nécessaire (et/ou gdb).

Les détails techniques, pour ceux que ça intéresse, c'est : pur C, tourne sur Azur par facilité (GUI en OpenGL avec ImGui + compile pour Linux et WebAssembly), le décodeur est un arbre de switch généré automatiquement et la mémoire est hiérarchique par blocs de 1 Mo, 4 ko, et 1 octet.

L'état actuel (Mai 2025) c'est : on peut faire tourner quelques add-ins sur CG, y'a des syscalls mais peu, y'a une partie du matériel émulé pour faire tourner gint ; en gros si vous prenez un add-in aléatoire ça va probablement pas marcher, mais pas loin.

Voici le dépôt et au passage à quoi ressemble l'interface : y'a tous les trucs techniques nécessaires pour debugger.

» Dépôt Git Lephenixnoir/mq «


J'ai pas encore de build pour le web sur lequel vous pouvez cliquer et tester tout de suite, mais vous pouvez compiler depuis le dépôt.

Voilà plus de nouvelles bientôt j'espère.

Fichier joint


Yannis300307 Hors ligne Membre Points: 318 Défis: 4 Message

Citer : Posté le 02/06/2025 16:16 | #


Il faudrait peut-être ajouter un mode activable qui réduit le nombre de cycles CPU ou le temps d'update de l'écran pour se rapprocher de la vitesse originale de la calculatrice pour les jeux qui n'utilisent pas de delta time.

Sinon, très impressionnant à ce que je vois sur les captures. L'UI est très clean, ça utilise quoi pour la faire ?
Développeur sur calculatrice mais qui, contre toutes attentes, prend des douches
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

Citer : Posté le 02/06/2025 16:22 | # | Fichier joint


L'UI utilise Dear ImGui avec quelques trucs custom notamment la barre de menu (ci-dessous), la fenêtre "Display" qui est dessinée direct en OpenGL avec zoom etc, et des widgets maison pas encore très élaborés mais ça vient


Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Drakalex007 Hors ligne Membre Points: 691 Défis: 0 Message

Citer : Posté le 04/06/2025 17:44 | # | Fichier joint


Je me suis amusé à tweaker le clavier virtuel de façon à pouvoir "slider" sur les touches, ce qui permet de profiter pleinement de l'expérience originale proposée par Fruit Ninja


Mb88 Hors ligne Rédacteur Points: 1288 Défis: 3 Message

Citer : Posté le 04/06/2025 18:11 | #


Est ce que t'as prévu d'ajouter une option pour émuler la persistance de l'écran pour pouvoir pleinement profiter des add-ins gint qui utilisent le moteur de gris ?

Sinon c'est super impressionnant
Tuper4 Hors ligne Membre Points: 1026 Défis: 26 Message

Citer : Posté le 06/06/2025 05:39 | #


Lephe' a écrit :
...et on ne traque pas vraiment ce qui est encore jouable ou pas.

J'avoue j'ai un peu zappé, mais avec les exams je ne peux pas trop faire grand chose en ce moment. Ma dernière épreuve étant mercredi pochain, jespére pouvoir continuer le "job".
Sinon, super émulateur. Et d'après la screenshot, on dirait qu'il supporte la mémoire (et les syscalls?) ce qui à l'aire top to be honest.
Un gros GG desus
Je fais que de confondre Noël et Halloween
Par ce que Oct 31= Dec 25
Inikiwi Hors ligne Membre Points: 606 Défis: 8 Message

Citer : Posté le 07/07/2025 14:11 | #


make -C build-linux install -j$(nproc)
make : on entre dans le répertoire « /home/pierre/casio-dev/Azur/build-linux »
[  3%] Generating /home/pierre/casio-dev/Azur/3rdparty/gl3w/src/gl3w.c
env: ‘python’: Aucun fichier ou dossier de ce nom
make[2]: *** [3rdparty/CMakeFiles/gl3w.dir/build.make:74: /home/pierre/casio-dev/Azur/3rdparty/gl3w/src/gl3w.c] Error 127
make[1]: *** [CMakeFiles/Makefile2:1117: 3rdparty/CMakeFiles/gl3w.dir/all] Error 2


Pourquoi make essaye d'accéder a python2??
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

Citer : Posté le 07/07/2025 14:23 | #


Alors. Pour le contexte là t'es en train de générer gl3w qui est une lib pour charger OpenGL. Accéder aux fonctionnalités d'OpenGL est un peu chiant parce qu'il faut "charger un profil", ce que personne n'aime faire à la main, d'où les libs comme gl3w.

Le code utilisé par gl3w c'est beaucoup de boilerplate, essentiellement y'a un wrapper autour de chaque fonction, et la liste des fonctions est données par une spécification de Khronos. Du coup au lieu de l'écrire à la main, gl3w génère le boilerplate en téléchargeant la spécification puis en générant les wrappers avec un programme Python. C'est pour ça que tu as du Python.

Quant à la version de Python, le script utilisé par gl3w supporte à la fois Python 2 et Python 3, il faut juste qu'une des deux versions soit installée. Y'a encore des distros qui font chier et refusent de symlink python vers python3.

Edit: tu peux modifier 3rdparty/CMakeLists.txt dans Azur pour remplacer ./gl3w_gen.py par python3 gl3w_gen.py.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Inikiwi Hors ligne Membre Points: 606 Défis: 8 Message

Citer : Posté le 07/07/2025 15:08 | #


test
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

Citer : Posté le 07/07/2025 15:11 | #


Inikiwi se fait jeter par OVH pour son post avec un message d'erreur CMake, c'est très drôle (2 minutes).

Bientôt on va découvrir que Azur trigger les filtres LLM stupides pour la détection d'attaques ou un truc de ce style...
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

Citer : Posté le 15/07/2025 11:05 | #


Des trucs excitants arrivent, on se penche sur les performances avec Yatis et changer le décodeur d'une série de switch à un tableau gagne 30% sur toute la partie émulation (i.e. pas juste le décodage, l'émulateur entier hors GUI accélère de 30%). Je pensais que le bon vieux switch était tenable, eh bah non. x)

Pour contexte, pour l'instant MQ est plus lent que l'émulateur de circuit10, casio-emu/calcemu. MQ fait tourner certains programmes que casio-emu ne supporte pas (genre Boson X), et à l'inverse casio-emu fait tourner pas mal de programmes que MQ ne supporte pas encore (parce qu'on n'a pas encore regardé les modules matériel appropriés).

Drakalex j'ai encore un oeil sur tes PR, super désolé de pas les avoir mergé encore alors que c'est très très utile, je suis en mode survie sur mon manuscrit de thèse donc j'avance que durant les appels avec Yatis (où on fait les parties subtiles à deux). @_@
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

Citer : Posté le 09/08/2025 16:17 | #


Pour info, les gains de performance discutés ci-dessus ont été fusionnés. Y'a encore des jeux lents, mais ça commence à aller mieux. J'ai d'autres optimisations en tête mais plus chères donc on verra à l'usage. Un truc que j'aimerais faire toutefois c'est de mettre l'émulation dans son propre thread, comme ça peu importe ce que la GUI fait il n'y aura pas d'interférence.

J'ai aussi intégré les contributions de Drakalex, ce qui fait que les add-ins mono commencent doucement à marcher En tous cas Jetpack marche, juste 10 fois trop vite.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2708 Défis: 17 Message

Citer : Posté le 09/08/2025 21:00 | #


Bravo les gars, c'est du beau boulot.
J'ai vu de Yatis a communiqué sur Outrun quasi fonctionnel, c'est top, et ça montre que vous avancez bien.
J'ai hâte de voir ce que ça va donner quand tout sera terminé.
Vous êtes des cadors
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

Citer : Posté le 04/09/2025 10:26 | # | Fichier joint


Beaucoup de nouveautés même si on poste jamais (urg). Alors, où en est-on...

Déjà vous pouvez voir sur la page du dépôt une magnifique liste de programmes testés que Yatis génère automatiquement à partir d'une description YAML. La liste est longue déjà, donc je vous la mets en bas de ce post. Le plus important c'est le nom du programme et la pastille de couleur indiquant à quel point ça marche. On est en bonne voie !

L'émulation des add-ins mono progresse rapidement. La pull request de Drakalex007 (O.G. que vous reconnaîtrez pour Jetpack) a été fusionnée début Août avec plein de petits ajustements de ma part. Le modèle ciblé pour l'instant est une calculatrice SH4 en OS 2.05, parce que le SH4 permet de réutiliser le code écrit pour la famille Prizm et la plupart des jeux sont compatibles. Les jeux purement SH3 seront traités plus tard.

(Malgré ce que dit la table la Prizm / fx-CG 20 n'est pas supportée, les jeux Prizm tournent en fait sur une version émulée de la Graph 90.)

Côté émulation de syscalls, on en a écrit plein de petits, mais rien de majeur. J'ai commencé à travailler sur GetKey() qui nécessite un travail un peu spécial parce que c'est pas un syscall instantané (il met en pause la calto). J'espère le finir ce week-end. Drakalex a fourni Print() et PrintMini() sur mono et globalement on fait rien de bien mieux. On a des trucs genre Bdisp_AllClr_VRAM(), Bdisp_PutDisp_DD() et genre 3 fonctions de dessin. C'est là qu'il reste le plus de choses à faire.

Et pour les autres nouveautés diverses :

  • Pas mal de travail pour mieux émuler l'écoulement du temps, notamment le support du module CPG par Yatis, des corrections dans les fréquences timers, et (ci-dessous) l'émulation de la RTC. L'émulateur tourne toujours que 75% du temps (les derniers 25% sont pour la gestion de la GUI) ; je compte améliorer ça bientôt en mettant l'émulation dans un thread séparé.
  • 2 bugs ont été trouvés dans l'émulation des instructions (carry/overflow et post-incrémentation), ce qui vaut une mention parce que c'est immonde à debugger. Le premier j'ai passé des heures dans OutRun à debugger du point flottant et finalement c'est Yatis qui a trouvé le bug d'une autre façon. Le deuxième on l'a vu venir avant de devoir le chasser, par chance.
  • Hier on a fini d'implémenter la RTC, un autre module écrit par Yatis, ce qui aide beaucoup à réguler le temps car plein de jeux (surtout les vieux) s'appuient dessus au lieu des timers.

Côté performance les jeux mono sont très larges, ils vont tous bien assez vite. Les jeux Graph 90 ça dépend. Ceux qui sont pas trop optimisés l'émulateur arrive à tenir le rythme. Pour l'instant le plus dur c'est Boson X, qui est très optimisé dans le sens où il arrive à faire exécuter à la calto un très grande nombre d'instructions par seconde, ce qui est dur à reproduire pour l'émulateur. Sur mon PC il est vaguement jouable, mais sur la version web y'a genre 4 FPS. On fera pas de miracles (sauf si Yatis a des idées intéressantes, wink wink).

Et voilà la liste de compatibilité. Cliquez pour aller sur la liste originale sur la page du dépôt.


Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 317 Défis: 10 Message

Citer : Posté le 04/09/2025 10:33 | #


j'ai découvert ce projet (merci Ayfu) il y a deux jours seulement suite à un break de plusieurs mois
Je ne sais pas encore comment on installe tout cela mais je vais explorer le sujet.
En tout cas c'est très prometteur et ça va ouvrir des possibilités extraordinaires.
Bravo Lephe et à ceux qui travaillent sur ce projet !
Bien à vous
Ptitjoz Hors ligne Membre Points: 317 Défis: 10 Message

Citer : Posté le 04/09/2025 12:33 | #


à l'étape de l'install de cmake,
cmake -B build-linux -DAZUR_PLATFORM=linux \
    -DCMAKE_BUILD_TYPE=[Debug|Release] \
    [-DMQ_DISABLE_OPTIMIZATIONS=1] \
    [-DMQ_PROFILING_GPROF=1] \
    [-DMQ_PROFILING_TRACY=1]

j'ai ce message ;

bash: Release] : commande introuvable
CMake Error: The source directory "/home/joz2" does not appear to contain CMakeLists.txt.
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

Citer : Posté le 04/09/2025 14:58 | #


Ah... c'est parce que les crochets indiquent des parties optionnelles et/ou où il faut choisir. Si tu veux le truc le plus simple :

cmake -B build-linux -DAZUR_PLATFORM=linux -DCMAKE_BUILD_TYPE=Release

Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 317 Défis: 10 Message

Citer : Posté le 04/09/2025 15:02 | #


oui mais j'ai le même message. j'ai du raté un truc
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

Citer : Posté le 04/09/2025 15:10 | #


Ah oui et tu as oublié de "cd Azur" avant pour te rendre dans le dossier que tu as cloné. Pendant que j'y suis, il faut cloner avec --recursive, si tu ne l'as pas fait autant recommencer du début.

git clone --recursive https://git.planet-casio.com/Lephenixnoir/Azur
cd Azur
cmake -B build-linux -DAZUR_PLATFORM=linux -DCMAKE_BUILD_TYPE=Release
make -C build-linux install -j$(nproc)

et ensuite l'export.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 317 Défis: 10 Message

Citer : Posté le 04/09/2025 15:30 | #


Oui j'ai été un peu trop tête baissée dans le copier/coller.
bon je n'ai peut etre pas le bon compilateur ou cmake ?


joz2@debian:~/Azur$ cmake -B build-linux -DAZUR_PLATFORM=linux -DCMAKE_BUILD_TYPE=Release
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:36 (project):
No CMAKE_CXX_COMPILER could be found.

Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.


-- Configuring incomplete, errors occurred!
Lephenixnoir En ligne Administrateur Points: 25361 Défis: 174 Message

Citer : Posté le 04/09/2025 15:37 | #


T'as pas de compilateur C++ on dirait, tu peux installer g++ par exemple. J'espère que t'auras toutes les libs...
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 317 Défis: 10 Message

Citer : Posté le 04/09/2025 16:35 | #


je suis reparti d'une vm "neuve" sous debian 12
maintenant

cmake -B build-linux -DAZUR_PLATFORM=linux -DCMAKE_BUILD_TYPE=Release
-- Checking for module 'sdl2'
-- Package 'sdl2', required by 'virtual:world', not found
CMake Error at /usr/share/cmake-3.25/Modules/FindPkgConfig.cmake:607 (message):
A required package was not found
Call Stack (most recent call first):
/usr/share/cmake-3.25/Modules/FindPkgConfig.cmake:829 (_pkg_check_modules_internal)
CMakeLists.txt:93 (pkg_check_modules)

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 - 2025 | Il y a 94 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