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 Hors ligne Administrateur Points: 25437 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


Ptitjoz Hors ligne Membre Points: 318 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)
Lephenixnoir Hors ligne Administrateur Points: 25437 Défis: 174 Message

Citer : Posté le 04/09/2025 17:53 | #


Là l'erreur est assez claire il te faut la SDL2 en dev, installe le paquet libsdl2-dev et libsdl2-image-dev.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 318 Défis: 10 Message

Citer : Posté le 04/09/2025 19:07 | #


merci
j'ai aussi installé libopengl-dev et libfreetype-dev

plus de messages d'erreurs. c'est déja ça.


joz2@debian:~/Azur$ cmake -B build-linux -DAZUR_PLATFORM=linux -DCMAKE_BUILD_TYPE=Release
-- Configuring done
-- Generating done
-- Build files have been written to: /home/joz2/Azur/build-linux


maintenant faut que je trouve que faire...
Luisellina Hors ligne Gourou Points: 324 Défis: 4 Message

Citer : Posté le 04/09/2025 19:11 | #


Probablement la seconde commande, comme montré dans le README.
Slyvtt Hors ligne Maître du Puzzle Points: 2721 Défis: 17 Message

Citer : Posté le 04/09/2025 19:39 | #


make -C build-linux install -j$(nproc)

comme indiqué par Lephé
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Ptitjoz Hors ligne Membre Points: 318 Défis: 10 Message

Citer : Posté le 04/09/2025 20:06 | #


d'accord
mais ça me dit que ça ne trouve pas python alors que python3 est installé.
Luisellina Hors ligne Gourou Points: 324 Défis: 4 Message

Citer : Posté le 04/09/2025 20:08 | #


Probablement parce que l'exécutable python n'existe pas. Tu peux installer python-is-python3.
Ptitjoz Hors ligne Membre Points: 318 Défis: 10 Message

Citer : Posté le 04/09/2025 20:19 | #


merci je ne connaissais pas ! je tapais toujours python3 dans mes scripts

bon je crois que je ne vais jamais y arriver
voici un extrait du retour :

make[2] : on quitte le répertoire « /home/joz2/Azur/build-linux »
make[2] : on entre dans le répertoire « /home/joz2/Azur/build-linux »
[ 75%] Building CXX object azur/CMakeFiles/azur.dir/src/gl/init.cpp.o
[ 78%] Building CXX object azur/CMakeFiles/azur.dir/src/log.cpp.o
/home/joz2/Azur/azur/src/log.cpp:11:10: fatal error: azur/ecs.h: Aucun fichier ou dossier de ce type
11 | #include <azur/ecs.h>
| ^~~~~~~~~~~~
compilation terminated.
make[2]: *** [azur/CMakeFiles/azur.dir/build.make:89 : azur/CMakeFiles/azur.dir/src/log.cpp.o] Erreur 1
make[2]: *** Attente des tâches non terminées....
/home/joz2/Azur/azur/src/gl/init.cpp:194:15: warning: ‘ml_time’ defined but not used [-Wunused-variable]
194 | static double ml_time = 0.0;
| ^~~~~~~
make[2] : on quitte le répertoire « /home/joz2/Azur/build-linux »
make[1]: *** [CMakeFiles/Makefile2:1055 : azur/CMakeFiles/azur.dir/all] Erreur 2
make[1] : on quitte le répertoire « /home/joz2/Azur/build-linux »
make: *** [Makefile:146 : all] Erreur 2
make : on quitte le répertoire « /home/joz2/Azur/build-linux »
Lephenixnoir Hors ligne Administrateur Points: 25437 Défis: 174 Message

Citer : Posté le 04/09/2025 20:46 | #


Non ça c'est ma faute ! J'ai poussé une correction. Tu peux faire git pull et relancer la commande make (pas besoin de reprendre au début).
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 318 Défis: 10 Message

Citer : Posté le 04/09/2025 20:53 | #


[ 85%] Building C object azur/CMakeFiles/azur.dir/src/glsl.c.o
[ 89%] Linking CXX static library libazur_linux.a
make[2] : on quitte le répertoire « /home/joz2/Azur/build-linux »
[100%] Built target azur
make[1] : on quitte le répertoire « /home/joz2/Azur/build-linux »
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/lib/libazur_linux_gl3w.a
CMake Error at 3rdparty/cmake_install.cmake:46 (file):
file INSTALL cannot copy file
"/home/joz2/Azur/build-linux/3rdparty/libazur_linux_gl3w.a" to
"/usr/local/lib/libazur_linux_gl3w.a": Permission denied.
Call Stack (most recent call first):
cmake_install.cmake:47 (include)


make: *** [Makefile:110 : install] Erreur 1
make : on quitte le répertoire « /home/joz2/Azur/build-linux »
joz2@debian:~/Azur$

Lephenixnoir Hors ligne Administrateur Points: 25437 Défis: 174 Message

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


Ah, je vois. Désolé que ce soit compliqué, on n'a pas encore de release officielle et ces instructions sont plutôt prévues pour des devs. Mais pas de souci, je vais t'y amener.

On est d'accord que tu as clôné Azur et mq ? On commence par compiler Azur. Rends-toi dans le dossier d'Azur...

cd Azur
rm -rf build-linux
cmake -B build-linux -DAZUR_PLATFORM=linux -DCMAKE_INSTALL_PREFIX="$HOME/.local"
make -C build-linux install -j$(nproc)
export AZUR_PATH_linux="$HOME/.local"

Et ensuite dans MQ :

cd mq
rm -rf build-linux
cmake -B build-linux -DAZUR_PLATFORM=linux -DCMAKE_BUILD_TYPE=Release
make -C build-linux -j$(nproc)
build-linux/mq # lancement du programme

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

Citer : Posté le 04/09/2025 21:36 | #


merci Lephe
non pas à être désolé, c'est moi qui ne comprends pas vite.
ça semble fonctionner !
après savoir utiliser l’outil sera une autre affaire
Lephenixnoir Hors ligne Administrateur Points: 25437 Défis: 174 Message

Citer : Posté le 04/09/2025 21:42 | #


Bravo ! Le plus facile de faire File » Open dans le menu et une fois le fichier chargé, le bouton démarrer dans la barre en haut. Pour contrôler tu cliques sur la fenêtre clavier et ensuite tu peux soit cliquer sur les touches soit utiliser ton clavier (mais toutes les touches ne sont pas encore contrôlables au clavier... c'est pas super pratique).
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 318 Défis: 10 Message

Citer : Posté le 04/09/2025 22:25 | #


voila c'est bon !

merci
Yatis Hors ligne Membre Points: 584 Défis: 0 Message

Citer : Posté le 05/09/2025 17:11 | # | Fichier joint


Allez, un petit teasing d'une prochaine feature en préparation...vous avez une idée de ce que ça pourrait être ?

Lephenixnoir Hors ligne Administrateur Points: 25437 Défis: 174 Message

Citer : Posté le 23/09/2025 21:21 | #


Moi je sais ! Moi je sais !

indice, ffmpeg est impliqué lol
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Luisellina Hors ligne Gourou Points: 324 Défis: 4 Message

Citer : Posté le 23/09/2025 21:26 | #


La capture en vidéo ?
Cakeisalie5 Hors ligne Ancien administrateur Points: 2020 Défis: 11 Message

Citer : Posté le 23/09/2025 21:52 | #


VLC sur fx-CG !!!

(je sais)
Yatis Hors ligne Membre Points: 584 Défis: 0 Message

Citer : Posté le 05/10/2025 10:47 | #


Petit progress report pour vous tenir au courant de l'évolution du projet. Au programme : Threading, RTC, stabilité et recording!

Threading

Première grosse nouveauté : le threading est officiellement supporté dans MQ!

Alors, ça ne devrait pas changer beaucoup de choses pour vous directement (quelque gain de FPS, surtout sur la version web), mais le threading nous permet d'être beaucoup plus précis dans l'émulation des addins et c'est exactement pour ça qu'on l'a mis en place.

Avant la mise en place des threads, MQ cherchait à maintenir l'application (l'émulation + la GUI) à 60FPS, et donnait, à chaque frame, ~25% du temps pour mettre à jour la GUI et ~75% pour l'émulation. Ce qui signifie que l'émulation tournait constamment en mode dégradé.

Autant au début on s'en fichait, autant avec l'ajout des timers et du support de l'horloge (dont on parlera plus en détail plus bas), on commence à remarquer des problèmes de précision dans les jeux qui reposent sur l'horloge et les timers. Il nous fallait donc isoler l'émulation dans un thread à part pour qu'elle puisse tourner "à 100%" et régler une bonne partie de nos problèmes de précision.


L'horloge de gintctl avant et apres le threading


Cependant, le threading peut très vite être un piege. Certes, ça permet de gagner un peu de temps sur l'émulation, mais ça peut rendre le projet terriblement infernal à déboguer si ce n'est pas correctement préparé à l'avance. Comme l'architecture originelle d'MQ englobait intimement la GUI et l'émulation, Lephe a fait un gros travail pour proprement dissocier et isoler les deux parties au travers d'un "observeur" qui fait office d'entremetteur entre eux.

A noter aussi qu'une réécriture de la partie GUI a été faite au passage avec quelques changements subtils pour faciliter l'implémentation de future fonctionnalité qui devrait vous plaire plus tard.


Duet avant et apres le threading


Support de la RTC

Lors des dernières nouvelles apportées par Lephe, on vous expliquait que l'implémentation du Clock Pulse Generator (CPG), le module responsable de la gestion des clocks, avait permis de grandement stabiliser les addins écrits avec Gint qui reposent (en interne) sur les informations du module pour configurer ses timers (c'est ce qui permet, au passage, à Gint de résister et supporter l'overclocking).

Cependant, on a remarqué que les addin "classique", dont la quasi-totalité des addin mono, étaient beaucoup trop rapides, ce qui les rendait pratiquement inutilisables. Après un peu de recherche, on s'est rendu compte que beaucoup d'entre eux utilisaient l'horloge de la calculatrice, la Real-Time Clock (RTC), pour gérer leur fréquence d'image, généralement au travers du syscall RTC_GetTicks().


GeometryDash sans la RTC


Plutôt qu'implémenter une émulation "haut-niveaux" (HLE) en utilisant l'horloge de l'ordinateur qui fait tourner MQ (via date() par exemple) pour simuler le temps qui passe, on a fait le choix de réimplémenter entièrement la RTC en essayant d'émuler le comportement physique le plus fidèlement possible (une émulation "low-level" (LLE)).


GeometryDash avec la RTC


Après quelques jours de travail, le module RTC est maintenant entièrement supporté par MQ. La RTC fonctionne bien et on a réussi à reproduire toutes les fonctionnalités qu'elle offre, même celles qu'absolument personne n'utilise, comme l'alarme ou les interruptions de carry qui produit une interruption matérielle toutes les secondes.


Nouveau menu de test RTC pour Gintctl


Resultat? La grande majorité des jeux mono se sont mis à fonctionner à une vitesse convenable (modulo la précision de l'emulation, qui a été résolue après avec le threading)! Et on s'est aussi rendu compte que GravityDuck ne plantait plus à l'arrivée à certains derniers niveaux et que Bust-a-Move était devenue totalement jouable, ce qui n'était pas le cas avant l'arrivée de la RTC et ce pour une raison très simple : l'aléatoire.


Gameplay de Bust-A-Move


Et oui, une grande majorité des jeux utilisent la RTC pour récupérer une graine "unique" pour leur générateur de nombres pseudo-aléatoires! Ce qui nous a permis de rendre Bust-a-Move parfaitement jouable puisqu'avant on avait toujours une boule bleue qui apparaissait (vu que les registres RTC retournaient toujours 0), ce qui rendait impossible de passer des niveaux. GravityDuck quant à lui plantait à cause d'un surplus de mémoire utilisé pour les projectiles aléatoires qui apparaissaient beaucoup trop vite d'un coup.

Enfin bref, c'est un grand pas en avant en termes de compatibilité!


Gameplay de GravityDuck (avec un micro bug dans l'animation du perso)


À ce sujet, au cours de la ré-implémentation de la RTC, on a écrit un petit addin de tests qui permet de tester des configurations complexes et de visualiser le comportement du module en temps réel. Voyant que cette micro-application était au final assez pratique (je vous raconterai plus tard la découverte de bugs assez fourbes qui ont été à l'origine, entre autres, d'un fix pour Gint), qu'on a fini par la refondre et l'intégrer directement dans gintctl qui se dote maintenant d'une toute nouvelle interface pour tester en profondeur la RTC.

J'en ai aussi profité pour écrire une documentation technique sur ma partie de la bible pour les curieux !

Je te vois 👁️

Voilà une fonctionnalité qui devrait faire extrêmement plaisir au développeur! MQ est maintenant équipé d'une nouvelle option dans le menu de sélection d'addin: Watch input file (ou Watch pour les intimes).


Screenshot GUI


Watch est une fonctionnalité qui, une fois activée, demande à MQ d'observer les activités du fichier addin en train d'être émulé. S'il détecte une modification, comme par exemple un fxsdk build, l'émulateur redémarre automatiquement avec la nouvelle version du fichier. Vous n'avez donc absolument plus rien à toucher côté interface lorsque vous développez. Et pour avoir conçu tout le sous-menu de gintctl pour la RTC (et dont le menu de la mono sans avoir de mono sous la main), je peux vous garantir que c'est infiniment pratique pour déboguer à la volée !


Démonstration fonctionement du Watch


Après, si vous êtes encore plus flemmard, on a aussi mis en place un système de "CLI" dans MQ qui permet d'activer des options de la GUI directement pendant l'invocation de MQ. Pour l'instant, il existe que deux options : le premier c'est mq mon_addin, qui permet de démarrer directement l'émulation de l'addin "mon_addin" sans avoir à cliquer dans le menu de sélection et le bouton "play". Le second c'est mq --watch qui permet d'activer directement l'option Watch input file sans avoir à cocher la fonctionnalité. Bien sûr, les arguments sont cumulables, vous pouvez faire (et c'est ce que je fais très souvent maintenant) mq --watch gintctl.g1a et vous n'avez plus rien à toucher!

Pour les curieux, on a simplement utilisé inotify pour surveiller les activités du fichier sélectionné.

Une découverte...suprenante...

Je préfère vous prévenir, cette section et celle qui suit sont assez techniques (en tout cas, plus que les sections précédentes) .

Lors de nos tests pour mettre à jour le magnifique tableau de compatibilité, nous avons fait une découverte surprenante : le SH4 compatibility tool et la version manuelle sont buggés!

Et oui, les addins passés dans l'outil incluent un bug (inofensif) lié au clavier. C'est le cas de 2048 Delux de Kirafi, par exemple, dont la version SH4 ne répondait à aucune touche pressée. Après investigation, il se trouve que le SH4 Compatibility tool tente de faire une lecture "rapide" des registres KEYSC.KIUDATAx qui contiennent l'état actuel des touches pressées en les lisant 4 octets par 4 octets via un memcpy(), ce qui est, sur papier, impossible.

Le KEYSC n'est pas documenté, mais dans toutes les documentations qu'on a croisées, il est écrit qu'on ne peut théoriquement pas y accéder autrement qu'en 16 bits. Et ça a aussi été confirmé par l'émulateur officiel du SH7305 de Renesas qui refuse de lire les registres autrement qu'en 16 bits... mais comme la machine nous dit que c'est parfaitement possible et au vu du fait que les jeux sont parfaitement jouables...et bien, on s'aligne sur la vraie machine.

Une fois le support des acces en 8, 16 et 32 bits des registres KEYSC.KIUDATAx, tout les jeux passé dans les griffes du SH4 Compatibility tool se sont mis a repondre au clavier et a fonctionné normalement!


2048 Delux fonctionne maintenant


Cependant.

Si vous tentez de lancer 2048 Deluxe ou tout autre addin converti dans MQ, vous allez avoir une pléthore d'avertissements vous indiquant unhandled read @ a44b000c et figurez-vous que a44b00c c'est un registre clavier appelé KEYSC.KIUCNTREG dont le rôle est de configurer et observer le comportement du scan du clavier en action. C'est un registre qui est 1) pas documenté et 2) pas (encore) implémenté dans MQ, donc on a été assez surpris de le voir ici. Après investigation, il se trouve que le SH4 Compatibility tool tente de faire une lecture "rapide" des registres juste avant KEYSC.KIUDATAx...mais lit 4 octets trop loin. C'est donc bien un bug de l'outil et non de nous!

Le bal masqué...

Un autre bug assez surprenant (et que je vous avais mentionné plus haut) a été découvert en lien avec a la RTC et plus particulièrement ses interruptions : "carry" chaque seconde, "periodique" chaque période donnée et "alarme"...pour l'alarme.

Le bug de Gint (et par conséquent MQ aussi) est assez traitre, car Gint n'y est pour rien. Le module RTC du SH7305 est exactement le même que celui décrit dans le datasheet du SH7724...à une exception près (en réalité il y a plusieurs détails qui diffèrent, mais celui-là est le plus impactant) : le bit 0x04 de IMxR10 ne concerne pas l'interruption de "carry" mais celui de l'alarme et le bit 0x01 de IMxR10 ne concerne pas l'interruption de l'alarme, mais celui de "carry". Il y a donc une inversion de bits concernant le masquage des interruptions RTC sur la variante du SH7305. Pourquoi Renesas a fait cette modification? Pas la moindre idée.

Ce qu'il se passait, c'est que si vous tentiez d'activer l'interruption RTC périodique avec Gint, l'addin pouvait crasher purement et simplement, car comme les registres IMxR10 sont responsables de masquer (ignorer) ou non les interruptions, quand vous demandiez à Gint d'autoriser l'interruption de "carry", ce dernier autorisait en réalité l'interruption périodique. Si vous n'aviez pas installé de quoi attraper l'interruption périodique (gint ne l'attrape pas par défaut), l'addin plantait sans avoir aucun moyen de faire quoi que ce soit.

Une inversion de bit plus tard, et Gint est de nouveau entièrement capable de supporter correctement les interruptions de la RTC, et un autre commit a permis d'ajouter tous les registres d'alarme manquants. Vous avez maintenant entièrement la main sur l'horloge!

Le second bug qu'on a réussi à capturer, encore grâce aux tests avec la RTC, était une mauvaise gestion des registres INTC.IMRx (oui encore eux). Il se trouve que Gint n'initialise pas ces registres quand vous démarrez un addin, car il initialise déjà tous les registres INTC.IPRx à zéro, ce qui a pour conséquence de masquer les interruptions...et comme INTC.IMRx servent à masquer les interruptions eux aussi, Gint les ignore pour ne pas avoir à s'embêter à tout initialiser à la main.

Mais ce choix implique implicitement que Gint hérite de la configuration de Casio! Hors dans MQ, par défaut on met tous les registres à zéro et que donc MQ laisse passer par défaut toutes les interruptions (si elles ne sont pas masquées par les INTC.IPRx). Ce qui nous avait amené dans les tests à avoir les interruptions RTC qui se produisaient dans MQ mais pas sur la vraie machine.

On a donc recuperé les configurations des IMRx et correctement initialisé les registres en conséquence. Maintenant MQ a le bon comportement par défaut.

Je suis en train d'vous filmer la!

Comme testé dans mon poste précédent, le record de l'écran est directement intégré dans MQ!

Cela permettra de nous montrer l'avancement de vos projets, faire des screen-shots, vous montrer des corrections de bugs, et probablement plein d'autres utilisations qui justifient d'avoir une telle fonctionnalité dans MQ.

C'est moi qui m'occupe de cette fonctionnalité et contrairement au threading, il me reste pas mal de travail encore avant qu'on puisse l'intégrer, mais la preuve de concept fonctionne! Et vous en avez pour preuve quelques vidéos d'exemple sur ce poste!


Screenshot GUI


Ce qui manque principalement... c'est de la performance. Actuellement, la preuve de concept que j'ai implémentée repose exclusivement sur le CPU, ce qui impacte terriblement les performances. Pour vous donner un ordre d'idée, dites-vous qu'un jeu à 60FPS descend vers 5/6FPS lors du record. Oui, c'est aussi terrible que ça.


Gameplay CubeField


Les plus perspicaces pourraient me rétorquer "mais pourtant les vidéos sont parfaitement fluides non ?"

Exact! Et c'est parce que lors de l'enregistrement de la vidéo, je dis à ffmpeg (qui s'occupe d'encoder la vidéo) : "il va y avoir 60 images par seconde", puis j'ajoute les frames de l'écran une par une. Donc les performances de l'émulateur pour générer une frame n'influencent en rien la vidéo finale. A noter que ce comportement devrait changer pour refléter les "vraies" performances de l'émulateur (c’est-à-dire que s’il y a des lags, ils seront retranmis).

J'ai des pistes pour grandement améliorer les performances. Principalement détecter automatiquement les encodeurs matériels fournis par ffmpeg, ce qui devrait grandement accélérer le processus, et ensuite isoler l'encodage vidéo dans un thread à part (oui comme l'émulation). Avec ces deux cartes en main, on devrait possiblement arriver à quelque chose de descendant.

On verra comment cette fonctionnalité évolue dans les semaines qui arrivent.

La suite?

Comme mentionné plus haut, on s'active pour implémenter le record de l'écran et polir un petit peu l'interface et le coeur de MQ, après ça, on va sûrement basculer sur d'autres projets secrets pendant quelque temps. Il y aura sûrement un autre progress report d'ici là.

Ceci étant dit, à notre retour, on aimerait regarder pour fournir des builds propres de MQ pour toutes les plateformes (Linux, MacOS, Windows et web) pour que vous n'ayez pas à construire le projet par vous-même puisqu'il commence à devenir assez complexe de ce côté-là.

En plus de simplifier le plus possible l'installation du projet, on va sûrement aussi implémenter l'interface BFile, qui est une assez grosse partie puisqu'on peut avoir plusieurs façons de la mettre en place.

La plus simple serait de faire une bête interface ordinateur <-> MQ via des open(), read(), write(), close() qui pourrait fonctionner dans la majorité des cas et qui ne devrait probablement pas trop être compliquée à mettre en place.

Cependant, Gint3 (oui, oui) devrait offrir un tout nouveau système de fichier qui devrait intégrer en son sein Fygue, une ré-implémentation de Fugue, le système de fichier utilisé dans toutes les calculatrices récentes, et Casiowin qui est le FS historique de Casio. Ces deux ajouts permettront aux développeurs de ne plus avoir à faire de world-switch pour chaque interaction avec des fichiers et d'avoir un gros boost de performance (exemple : Fygue est actuellement 4x plus rapide que BFile pour lire entièrement doom.wad qui fait plusieurs Mo) en plus de beaucoup d'autres avantages.

Par contre Fygue et Casiowin reposent sur un accès direct à la Flash pour lire un système de fichiers, donc contrairement au addin qui utilise BFile, il ne suffit pas d'émuler une liste de fichiers et de répertoires, il faut simuler un état cohérent de la ROM avec les données au bon endroit...et ça, c'est beaucoup plus complexe... Mais pas impossible, on a déjà une vague idée de comment s'y prendre. On vous tiendra au courant dans tous les cas.

Voilà, c'est à peu près tout pour ce progress report, j'espère que c'était compréhensible. Je serais curieux de savoir si les détails techniques vous intéressent ou non à l'avenir.

A+
Cakeisalie5 Hors ligne Ancien administrateur Points: 2020 Défis: 11 Message

Citer : Posté le 05/10/2025 18:00 | #


Rapport absolument dément représentatif du travail fourni. Aucune quantité de mercis ne peut y rendre justice, mais je vais quand même en rajouter un : merci énormément pour tous vos efforts, et pour ce qui en résulte ; vous faites tellement mieux que CASIO et Renesas sur la partie hardware, avec moins d'infos et moins de monde, et c'est à en couper le souffle !!!
Slyvtt Hors ligne Maître du Puzzle Points: 2721 Défis: 17 Message

Citer : Posté le 05/10/2025 20:06 | #


Je me joins à Cake pour aussi vous féliciter. C'est vraiment un superbe boulot que vous faites tous sur MQ.
Je suis admiratif des progrès qui sont faits sur l'émulations des diverses machines.
En quelques mois, on passe d'un prototype à un émulateur qui fait tourner un grand nombre d'addins, c'est vraiment la classe internationale
Bon courage à vous et à lire vos splendides progrès avec le plus grand plaisir.
<3
There are only 10 types of people in the world: Those who understand binary, and those who don't ...

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 162 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