Conversion automatique des projets gint/fxSDK mono vers Prizm CG10/20/50/G90+E
Posté le 13/03/2023 11:05
Yo,
un petit développement cool est en cours, c'est à ce stade à l'état de PoC (Proof of Concept), mais sera bientôt intégré à
fxSDK et
gint, les deux briques étant nécessaires :
la conversion en (quasi-)automatique des projets fxSDK pour fx9860G/G35+EII vers l'architecture prizm (f-CG10/20/50/G90+E).
Vous pourrez ainsi jouer aux jeux développés sur mono sur votre graphique couleur (à la condition bien entendu qu'il soit développé avec gint/fxSDK et que vous disposiez des sources du projet).
Une image valant plus que 1000 mots, voici le projet
Builder de
Mb88 converti pour fonctionner sur Graph 90+E.
Le but de la manip consiste à créer une nouvelle cible de
build pour
fxSDK afin de compiler les sources prévues pour les graph mono vers une architecture de type graph couleur (prizm). Beaucoup de choses sont communes, mais il y a aussi des différences à gérer, en particulier l'écran et sa résolution. Il faut donc faire une conversion de la VRAM "mono" (128x64 pixels en 1bit) vers une VRAM "couleur" (396x224 pixels en 16bits RGB565). On laisse donc l'addin travailler avec une VRAM virtuelle comme sur la graph mono et lors d'un call à
dupdate(), on intercepte cet appel pour faire un traitement avant le blit final vers l'écran de la CG. On procède donc à une réécriture de
dupdate() pour faire un upscale x3, un centrage de l'écran, une conversion des couleurs puis on envoie le tout vers l'écran couleur.
A ce stade, le moteur de niveaux de gris n'est pas pris en compte, mais cela viendra, c'est là prochaine grosse étape.
Je vous joins une copie de Builder pour CG50 afin que vous puissiez tester par vous même. Je suis très agréablement surpris par la vitesse de fonctionnement, compte tenu de la non optimisation du code (j'en suis à l'étape, on fait comme un bourrin pour voir si c'est jouable ou pas). On va désormais optimiser, maintenant que la faisabilité est démontrée.
A terme, quand cela sera en production, un
fxsdk new project générera tout en automatique. Ensuite un projet pour FX pourra être automatiquement converti pour fonctionner sur CG via une build avec
fxsdk build-fx-as-cg. Cela aura pour effet de générer le g3a qui pourra tourner sur votre prizm, sans rien toucher à votre projet FX initial. Bien entendu, la version mono "de base), donc le g1a, sera toujours généré via un
fxsdk build-fx comme à l'accoutumée.
Il reste pas mal de choses à faire (ayant commencé le zinzin milieu de semaine dernière) :
- tester sur plus de projets
- supporter le moteur de niveau de gris de gint
- mettre un entourage de screen mono un peu plus joli, là on a le "bleu-vert" usuel du
dupdate() sans
dclear()
- tester, tester, tester, ...
- optimiser, optimiser, optimiser, ...
Attention tout de même, si votre addin FX tripote les syscalls ou autre joyeusetés de bas-niveau, il n'y a vraiment aucune garantie que la conversion soit possible. Le projet vise seulement à rediriger les calls aux primitives/méthodes de gint vers la bonne architecture matériel.
Suite soon ... stay tuned.
Fichier joint
Citer : Posté le 13/03/2023 11:10 | #
si t'as besoin d'un projet gint assez simple qui utilise le moteur de gris
https://www.planet-casio.com/Fr/programmes/programme4078-last-dumb-clicker-dx-mono-alice-jeux-add-ins.html
Citer : Posté le 13/03/2023 12:22 | #
En complément, et suite à échanges sur le tchat, je précise que si votre projet est basé sur SDK Casio fx-9860G SDK alors la conversion automatique dont je parle ici n'est malheureusement pas disponible.
Le scope se limite seulement aux projets réalisés avec le fxSDK de Lephé.
Citer : Posté le 13/03/2023 14:06 | #
En fait je suis assez demandeur d'un listing des projets FX gint/fxSDK avec sources, car j'avoue que j'en trouve pas masse pour tester.
Hésitez pas à poster un lien vers les projets que vous connaissez et vers les sources en réponse à ce fil.
Citer : Posté le 13/03/2023 18:08 | #
terrario! c'est builder mais en mieux et en plus beau! (tkt mibi c pas méchant)
Citer : Posté le 13/03/2023 18:22 | #
Arena s'il compile encore est probablement un exemple raisonnable. Mais je crois que les sources sont pas à jour x)
Citer : Posté le 13/03/2023 18:24 | #
Oui tu les avais corrigés pour moi, mais tu ne les a pas publiés je crois
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 13/03/2023 18:32 | #
En effet, je les ai ajoutées. J'ai vérifié à l'instant que ça compile... donc ça doit bien marcher.
Citer : Posté le 17/03/2023 22:59 | # | Fichier joint
Après moultes batailles et un petit coup de main de Lephé, le moteur de gris fonctionne désormais pour convertir les projets Fx9860 vers CG50.
Voici donc pour l'exemple Arena de Lephé en grayscale sur CG50 :
La conversion a été un peu plus difficile que Builder, car Arena est compilé via un Makefile, il faut donc mettre les options à la main dans le fichier, mais cela reste relativement facile tout de même.
Je le joins à ce post pour ceux qui voudraient l'essayer.
Citer : Posté le 18/03/2023 08:22 | #
Merci ! J'ai fait un build moderne d'Arena quand j'ai testé hier, je vais le pousser sur un dépôt comme ça on sera défaits du vieux Makefile...
Citer : Posté le 18/03/2023 08:47 | #
Ah cool, oui comme ça on pourra faire le build avec la cible
Je vais essayer de convertir Terrario aussi, mais ça va demander plus d’efforts car il y a du plus bas niveau. Après je pense que l’avoir dans la ludothèque de la CG50, ça vaut carrément le coup.
Citer : Posté le 18/03/2023 12:35 | #
Yo, une petite update.
J'ai poursuivi avec quelques tests sur mes différentes machines pour voir à quel niveau tout cela fonctionne sans problème.
Voici une comparaison des deux addins de test, à savoir :
Builder de Mb88 pour un addin monochrome.
Arena de Lephenixnoir pour un addin en niveau de gris.
Les machines sont toutes des SH4, sauf la G35+ (en bas à gauche) qui est en SH3.
Globalement ça tourne mais il reste des trucs à vérifier/corriger/comprendre :
- Builder crashe sur une exception sur la G35+ SH3. A priori ceci n'est pas lié à la conversion, je regarderai d'où cela vient.
- Arena se bloque sur la CG20, mais fonctionne bien sur la CG50 et la G90+E
- le niveau de gris foncé ne ressort pas sur toutes les prizm (cf barres de niveau de vie qui restent blanches au lieu de gris foncé dans leurs parties centrales).
Bref encore 2/3 trucs à vérifier/corriger, mais sur le principe c'est OK, on a donc un PoC (Proof of Concept) fonctionnel.
Suite bientôt
et @RDP
Citer : Posté le 18/03/2023 15:57 | #
Tu noteras qu'en plus de la barre de vie, sur ta Graph 90+E sur Arena tu as aussi la ligne horizontale au sommet de la boîte de dialogue qui est gris claire. Peut-être qu'il y a une arnaque avec les alternances de VRAM ?
Citer : Posté le 18/03/2023 16:08 | #
Je suppose en effet un truc du genre. Car aussi les barres de vie des ennemis sont gris clair et surtout clignotent. Comme si je chopais le signal en décalé.
Citer : Posté le 23/03/2023 08:05 | #
Yo !! Une petite update car hier soir ça a vraiment bien avancé, encore une fois grâce à un petit coup de main de Lephé
Donc désormais, le moteur de gris de la fx9860g est transposé fonctionnellement vers la cible fx-as-cg ce qui signifie qu'un jeu écrit avec gint/fxSDK et utilisant le moteur de gris pourra être utilisé via l'upscale sur la une G90+E (ou fxCG10/20/50). Le même code source sera donc utilisable:
pour créer une version FX via la commande usuelle fxsdk build-fx (ça compilera un g1a),
et pour créer sa grande sœur FX_AS_CG via la commande fxsdk build-fx-as-cg (ça compilera un g3a).
Le bug des "couleurs" bizarres est désormais résolu (le coup de main de Lephé était pour ça, résolu en 5 minutes de son côté, trop fort Senpai ).
J'ai aussi pu rajouter hier la dernière brique qui manquait, à savoir le support de usb_fxlink_screenshot_gray() et usb_fxlink_videocapture_gray() qui n'étaient pas supportés à ce stade.
Pour le moment, la sortie n'est pas mise à l'échelle, donc l'image de sortie est en 128*64 pixels, ce qui est un peu petit comme le montre la capture d'écran suivante :
Mais après discussion avec Lephé, cela permet d'avoir une sortie vraiment fluide (car juste 2048 octets à envoyer correspondant à deux VRAM de mono en 128*64*1bit) et on pourra ensuite adjoindre un upscale (x3 ou plus) coté PC dans fxlink afin d'avoir un truc plus visible. On aura ainsi des captures hyper fluides.
Voici une petite vidéo Youtube d'une capture vidéo réalisée avec Arena qui montre en parallèle l'écran de ma G90+E et la sortie vidéo sur mon PC. Je précise que j'utilise la loupe de mon desktop manager (option d'accessibilité avec un facteur x6) pour que l'on puisse bien voir les deux écrans.
A priori cette fois j'en ai terminé avec la gestion de l'upscaling/conversion automatique, juste à traquer les éventuels bugs, mais cela est réputé fonctionnel.
Je vais passer à autre chose alors
et @RDP pour quand elle sortira
Citer : Posté le 08/06/2023 13:51 | #
Salut ! Je trouve tout ça super, mais ça n'est pas très actif en ce moment...
Donc voilà : je voudrais savoir si la conversion de Terrario avance ?
J'ai vraiment envie d'y jouer
J'ai testé un peu Arena et Builder, et franchement, on voit que tu fais des efforts, et non sans résultats
Enjoy!
Citer : Posté le 08/06/2023 14:11 | #
En fait c'est un peu subtil.
Terrario utilise gint, mais aussi un certain nombre de syscalls directement, la conversion directe n'est pas possible comme pour Builder et Arena. Il y a un peu de taf pour faire la conversion, mais cela reste tout de même je pense possible.
En en discutant avec Lephé, il y a peu, on (enfin plus Lephé car il faut du niveau pour ce genre d'idée) réfléchi à un système plus global d'"émulation" qui serait applicable directement sur le g1a (l'addin compilé). Cela pourrait permettre, si faisable, d'étendre le scope à tout addin, même non codé avec Gint. Mais à ce stade, cela reste une expérience de pensée, et clairement c'est pas pour demain.
Pour en revenir à Terrario, je regarderai si je peux convertir sans trop de taf vers CG50 en faisant un truc un peu "bancal"
Citer : Posté le 08/06/2023 14:24 | #
Ah, oui, ok. Mais bon, tant que c'est pas impossible, ça va !
J'admets que l'idée de l'émulation de G1A est une super idée. Encore faut il avoir le temps et le courage
Pour en revenir à Terrario, je regarderai si je peux convertir sans trop de taf vers CG50 en faisant un truc un peu "bancal" : Merci et que la force soit avec toi !
Citer : Posté le 14/06/2023 11:14 | #
En complément, et suite à échanges sur le tchat, je précise que si votre projet est basé sur SDK Casio fx-9860G SDK alors la conversion automatique dont je parle ici n'est malheureusement pas disponible.
Ce serait un projet très utile! Ou au moins disposer de headers de compatibilité avec les noms de fonctions tels qu'ils sont documentés dans le wiki prizm/fxcg de cemetech https://prizm.cemetech.net/Libfxcg/
Citer : Posté le 14/06/2023 11:18 | #
Tu parles bien de pouvoir compiler des add-ins écrits pour monochrome avec le fx-9860G SDK (utilisant fxlib + syscalls) en les linkant avec le PrizmSDK (utilisant libfxcg) pour obtenir une version Prizm/Graph 90+E, c'est ça ?
Citer : Posté le 14/06/2023 13:01 | #
Ah non, j'ai confondu avec la 35eii. Ce qui m'intéresserait c'est de pouvoir compiler KhiCAS avec le SDK de gint, sur la 35 et sur la 90. Mais c'est loin d'être trivial, à commencer par la résolution d'écran de la 90.