Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » gint : un noyau pour développer des add-ins
LephenixnoirEn ligneAdministrateurPoints: 15794 Défis: 136 Message

gint : un noyau pour développer des add-ins

Posté le 20/02/2015 17:30

Les SDKs classiques pour écrire des add-ins sont le fx-9860G SDK de Casio avec fxlib (pour Graph monochrome) et le PrizmSDK avec libfxcg (pour Prizm et Graph 90+E). Voici mon alternative : le fxSDK avec gint, pour toutes les plateformes.

Contrairement à fxlib et libfxcg, qui appellent les fonctions de l'OS pour faire leur travail, gint est un noyau indépendant de l'OS qui exploite seul le matériel et le met à disposition de votre add-in. Il vous offre plus de finesse sur le contrôle du matériel, notamment le clavier, l'écran et les horloges, de meilleurs performances sur le dessin, les drivers et la gestion de interruptions, et des choses entièrement nouvelles comme le moteur de gris.

Toutes les sources de gint sont publiques et accessibles sur la forge de Planète Casio :

» Dépôt Gitea Lephenixnoir/gint «

Voici plus précisément ce que gint vous offre de nouveau :

• Un contrôle détaillé du clavier pour les jeux, parfait pour les combos !
• Des timers avec une précision de 60 ns, d'autres à 30 µs
• Toutes vos images converties automatiquement sans code à copier (plus de Sprite Coder)
• Des polices personnalisées
• Des fonctions de dessin, d'images et de texte fulgurantes et optimisées la main
• Mesurer les performance de votre code à la microseconde près (avec libprof)
• Le contrôle du matériel et des interruptions
• Plein de petites choses pratiques comme dprint(1, 1, "x=%d", x)

• (Graph monochrome) Un moteur de gris pour faire des jeux en 4 couleurs !
• (Graph monochrome) La compatibilité SH3 et SH4, avec le même fichier g1a.

• (Graph 90+E) Une nouvelle police de texte, plus lisible et économe en espace
• (Graph 90+E) Le dessin en plein écran, sans les bordures blanches et la barre de statut !
• (Graph 90+E) Un driver écran capable de triple-buffering

Le coût de tout ceci, c'est que vous avez une copie du code de gint dans votre add-in. Cela prend environ 20 ko de place (selon la quantité de fonctions que vous utilisez), soit à peu près comme le sprintf() de fxlib qui fait 18 ko !

Et voici quelques photos et captures d'écran !





Tester gint sur votre machine

La fin du portage vers la Graph 90+E signera la sortie de gint v2. L'add-in de test de l'application est désormais gintctl :

» Dépôt Gitea Lephenixnoir/gintctl «

En plus de tester les fonctionnalités de gint, cet add-in contient quelques outils permettant d'inspecter la machine, la mémoire, et les registres. Je le développe au fur et à mesure, et je posterai un protocole de test complet avec la sortie de la v2 !

Utiliser gint pour développer des add-ins

Normalement, vous avez besoin du fxSDK pour développer avec gint. Le fxSDK est compatible avec Linux et Mac OS, et on peut réfléchir à un portage sous Windows s'il y a vraiment des intéressés. Il faut l'installer en premier (et avoir un cross-compilateur GCC).

La procédure de compilation et d'installation de gint est décrite sur le README du dépôt, c'est du configure - make tout à fait banal.

Une fois que gint est installé sur votre système, voyez les tutoriels de développement pour avoir un aperçu de son fonctionnement. La plupart des choses sont expliquées dans les en-têtes (fichiers .h) de la bibliothèque que vous pouvez consulter en ligne, sur votre copie locale du dépôt, ou dans les dossiers d'installation du compilateur.

Obtenir la dernière version de gint après une mise à jour

Je pousse régulièrement des mises à jour de gint sur le dépôt du projet. Pour les télécharger, tapez git pull, puis recompilez et réinstallez gint avec make et make install.


Fichier joint


Pages : Précédente1 ... , 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ... 25Suivante
Suruq gameHors ligneMembre de CreativeCalcPoints: 619 Défis: 20 Message

Citer : Posté le 01/03/2018 14:16 | #


j'ai trouvé des paramètre sympa en niveaux de gris

light : 2243
dark :3612



ps : on ne commente pas le faite que mon écran soit dégueulasse
There is only one thing that makes a dream impossible to achieve : the fear of failure
LephenixnoirEn ligneAdministrateurPoints: 15794 Défis: 136 Message

Citer : Posté le 01/03/2018 16:51 | #


Super, merci ! Je les ai ajoutées au code de la démo. Je suis en train de tout rechanger donc je vais pas pouvoir recompiler et release très vite, mais ce sera dans le prochain exécutable

CpioHors ligneMembrePoints: 31 Défis: 0 Message

Citer : Posté le 03/03/2018 15:32 | #


Bonjour,

Existe-il une liste des calculatrices Casio pour lesquelles on peut développer des add-ins avec Gint ?

Merci d'avance.
LephenixnoirEn ligneAdministrateurPoints: 15794 Défis: 136 Message

Citer : Posté le 03/03/2018 15:42 | #


Dans les modèles français, ce sont les Graph 75 et supérieures. Note que les Graph 35+ USB peuvent être transformées en Graph 75, donc elles comptent aussi.

En reprenant une liste de modèles de Cakeisalie5, je pense que les modèles exacts supportés sont les suivants :

- fx-9750GII (Graph 35+USB SH3);
- fx-9750GII-2 (Graph 35+USB SH4);
- Graph 35+E (french model);
- fx-9860G (Graph 85);
- fx-9860G SD (Graph 85 SD);
- fx-9860GII (Graph 75 SH3);
- fx-9860GII-2 (Graph 75 SH4);
- fx-9860GII SD (Graph 95 SH3);
- fx-9860GII-2 SD (Graph 95 SH4);
- Graph 75+E (french model).
CpioHors ligneMembrePoints: 31 Défis: 0 Message

Citer : Posté le 04/03/2018 16:58 | #


Merci pour la liste.

Y a-t-il un équivalent de Gint pour la Graph 90+ E, ou à défaut une toolchain qui permette de coder en C ?
Suruq gameHors ligneMembre de CreativeCalcPoints: 619 Défis: 20 Message

Citer : Posté le 04/03/2018 17:01 | #


Gint n'est pas encore dispo pour g90+E mais est en cours de développement.
en attendant tu as le PrizmSDK qui est très simple d'utilisation mais il n'existe pas de librairie officiel ou équivalent de gint pour Prizm et G90+E en général
There is only one thing that makes a dream impossible to achieve : the fear of failure
LephenixnoirEn ligneAdministrateurPoints: 15794 Défis: 136 Message

Citer : Posté le 04/03/2018 17:05 | #


Le portage sur Graph 90+ est mon prochain objectif ! Je suis actuellement (et même là, tout de suite) en train de restructurer le code pour faciliter ce portage. Si je suis chanceux il n'y a que l'écran qui change, le clavier aussi mais il est bien documenté. (Encore que le driver clavier de gint est une horreur...)

Ce topic est pas mis à jour souvent mais je m'efforce d'y mentionner tous les changements remarquables. J'y posterai sans aucun doute des messages quand je testerai le driver de l'écran de la Graph 90 !
CpioHors ligneMembrePoints: 31 Défis: 0 Message

Citer : Posté le 04/03/2018 17:08 | #


Bonnes nouvelles :-)

Vous avez besoin d'aide pour le portage ?
LephenixnoirEn ligneAdministrateurPoints: 15794 Défis: 136 Message

Citer : Posté le 04/03/2018 17:12 | #


Surtout de temps, disons. Restructurer le code est quelque chose qui n'est pas bien difficile, et vu la vitesse à laquelle je peux le faire comparé à un contributeur externe, c'est peut-être plus rentable si je m'y colle tranquillement.

N'hésite pas à te présenter sur le topic approprié et à tutoyer tout le monde, du reste.

(Edit : Ou alors, je précise que je suis tout seul à développer ce machin. C'est selon.)
CpioHors ligneMembrePoints: 31 Défis: 0 Message

Citer : Posté le 04/03/2018 17:19 | #


J'avais bien compris que ce projet était ton bébé

Je vais donc attendre impatiemment de pouvoir tester la version de Gint pour Graph 90+ E.

Bon courage et merci d'avance !
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1235 Défis: 54 Message

Citer : Posté le 04/03/2018 17:21 | #


Cependant, pour compléter ce que dit Suruq Game, il n'y a certes pas encore d'équivalent de Gint pour les Prizm/G90, mais il est déjà possible de faire tout plein de choses dessus !
À titre d'exemple on a déjà un émulateur de GameBoy qui marche, un moteur de calcul formel qui marche à peu près, des jeux qu'on peut porter sans trop de douleur, etc… Donc tu peux déjà commencer à t'amuser avec si l'envie t'en prend !
N'attendez pas qu'il n'y ait plus de miel : スススススススススススススススススススススススススス養蜂家スススススススススススススススススススススススススススススススススススス蜂家
CpioHors ligneMembrePoints: 31 Défis: 0 Message

Citer : Posté le 04/03/2018 17:24 | #


Merci pour ces pointeurs Nemhardy, je vais regarder tout ça.
YatisEn ligneMembrePoints: 435 Défis: 0 Message

Citer : Posté le 06/03/2018 21:18 | #


J'ai trouver encore quelques bugs, comme le fait que dans certain menu la touche [menu] ne fonctionne pas et qu'il est impossible d'utiliser Screen Receiver sur sur gint (bêta 0.9 - 584) (D’ailleurs tout les add-in utilisant une fonction d'affichage différente que Bdisp_PutDisp_DD() ne sont pas compatible)
LephenixnoirEn ligneAdministrateurPoints: 15794 Défis: 136 Message

Citer : Posté le 06/03/2018 21:22 | #


Ce ne sont pas nécessairement des bugs.
- Certains menus n'utilisent pas getkey(), dans ce cas c'est normal que ça ne revienne pas au menu. Dans gint, revenir au menu est un truc compliqué qu'il faut demander à peu près explicitement.
- Screen Receiver ne marchera pas par magie ; actuellement je n'ai rien implémenté pour le supporter donc ça ne se fera pas tout seul !
- Tous les add-ins utilisant Bdisp_PutDisp_DD() ne sont pas compatibles avec le système de dessin de gint, plutôt.

Je note, toutefois, et je m'occuperai en particulier du premier point qui nécessite effectivement que je relise le code de l'application de démo.

Ajouté le 17/04/2018 à 13:26 :
Grandes nouvelles !

J'ai commencé à travailler sur la Graph 90 pour porter gint en sachant que ce sera bientôt le seul modèle à supporter nativement les add-ins. Je n'en suis qu'au début, mais j'ai déjà plusieurs résultats positifs :

- Le modèle mémoire est bien connu et peu différent de la Prizm
- J'arrive à changer la VBR et à manipuler les interruptions comme sur les Graph monochromes SH4
- Je peux probablement choper la compatibilité Prizm au passage pourvu que l'écran soit le même

Et le point technique intéressant : l'add-in de test/démo/contrôle est compilé pour Graph 85 et Graph 90 à partir des mêmes sources. Seules quelques différences d'affichage sont nécessaires, pour l'instant tout ce qui est interne au processeur fonctionne exactement pareil.
ZezombyeHors ligneRédacteurPoints: 1625 Défis: 12 Message

Citer : Posté le 17/04/2018 16:53 | #


Et le point technique intéressant : l'add-in de test/démo/contrôle est compilé pour Graph 85 et Graph 90 à partir des mêmes sources. Seules quelques différences d'affichage sont nécessaires, pour l'instant tout ce qui est interne au processeur fonctionne exactement pareil.


Mon rêve de jouer aux jeux monochromes sur graph 90 devient réalité

Niveau portage, est ce que ce serait éventuellement possible de prendre le code source d'un addin (même du SDK) puis de juste le recompiler avec gint pour qu'il soit jouable sur la graph 90 ? (avec une monochromelib+fxlib portée pour, et pas de gestion du contraste ou des syscalls chelous)

Niveau graphismes : tu gères comment le scaling, c'est en x3 centré ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 15794 Défis: 136 Message

Citer : Posté le 17/04/2018 17:03 | #


Zezombye a écrit :
Mon rêve de jouer aux jeux monochromes sur graph 90 devient réalité

Hmm, jouer aux jeux monochromes sur la G90 ? C'est pas une remarque stupide. Clairement on peut passer d'un add-in monochrome à un couleur sur peu de modifications des sources. La question serait plus de patcher les binaires. Sous gint, je sais qu'on pourrait. Les add-ins SDK, hmm...

Zezombye a écrit :
Niveau graphismes : tu gères comment le scaling, c'est en x3 centré ?

Je crois que je n'étais pas clair, alors je vais le dire un peu plus fort :

L'enjeu d'un portage de gint sur la Graph 90, c'est de faire des jeux couleur.

Du coup je gère pas le scaling, mais sache qu'il y a plein de syscalls qui font tout en x3, ce qui facilite le genre de patch dont je parlais au-dessus.
ZezombyeHors ligneRédacteurPoints: 1625 Défis: 12 Message

Citer : Posté le 17/04/2018 17:10 | #


La question serait plus de patcher les binaires. Sous gint, je sais qu'on pourrait. Les add-ins SDK, hmm...


Oublie les binaires, on assume qu'on a les sources (ce qui est le cas pour la plupart des bons addins). Le plus difficile serait surtout de porter les syscalls utilisés.

L'enjeu d'un portage de gint sur la Graph 90, c'est de faire des jeux couleur.

Du coup je gère pas le scaling


Quel intérêt de compiler en même temps pour graph 85 et graph 90 en même temps alors ? (à moins que l'addin fasse 128*64 sur graph 90, mais ça fera un peu petit)

Les syscalls, tu parles de ceux de gint ou de ceux de la calto ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 15794 Défis: 136 Message

Citer : Posté le 17/04/2018 17:13 | # | Fichier joint


Voilà quelque chose de plus explicite. C'est un vrai add-in Graph 90.



Ajouté le 17/04/2018 à 17:15 :
Si t'as les sources, pas la peine de patcher les syscalls. Suffit d'utiliser les équivalents Prizm ou réimplémenter des petits wrappers. Ce sera simple pour l'immense majorité des applications.

Zezombye a écrit :
Quel intérêt de compiler en même temps pour graph 85 et graph 90 en même temps alors ? (à moins que l'addin fasse 128*64 sur graph 90, mais ça fera un peu petit)

Ne sous-estime pas ce que le programme peut faire. Mon screenshot c'est l'appli de contrôle de gint. Il a suffit de remplacer le syscall PrintXY(). Pareil pour mes f-keys, il suffira d'en donner deux versions. L'affichage n'est pas le coeur de l'application, qui lui reste inchangé.

Zezombye a écrit :
Les syscalls, tu parles de ceux de gint ou de ceux de la calto ?

gint n'a pas de syscalls, qui sont par définition des fonctions fournies par l'OS.
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1235 Défis: 54 Message

Citer : Posté le 17/04/2018 17:15 | #


Chouette nouvelle que voilà ! Ça fait plaisir de voir que tu t'es sorti de tes mésaventures de l'autre jour où plus grand chose ne semblait marcher y compris chez les monchromes… Beau boulot !
N'attendez pas qu'il n'y ait plus de miel : スススススススススススススススススススススススススス養蜂家スススススススススススススススススススススススススススススススススススス蜂家
ZezombyeHors ligneRédacteurPoints: 1625 Défis: 12 Message

Citer : Posté le 17/04/2018 17:16 | #


Ah, je vois. Mais du coup tu ne redéfinis pas les fonctions graphiques pour le scaling (c'est juste que le syscall utilisé pour le Locate utilise toujours 7x21 caractères et fait donc du scaling).

Du coup tu fais comment par exemple pour le test de gris (celui avec les sprites des épées) ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 15794 Défis: 136 Message

Citer : Posté le 17/04/2018 17:17 | #


À vrai dire j'ai enfin pu pointer un vrai bug, clair et fixe, dans les sources de l'autre jour. Une sombre histoire où les registres de priorité des interruptions - ceux qui me servent à désactiver les interruptions - ont un espacement interne. Je n'en tenais pas compte, et du coup il y avait encore des interruptions...

J'ai aussi rencontré des System ERROR quand je me suis rendu compte que j'arrivais à appeler memcpy() sans l'implémenter grâce à de la magie noire du compilo. Ça n'explique pas tout ceux que j'avais (surtout une fois gint en place), mais c'est déjà ça.

Ajouté le 17/04/2018 à 17:18 :
Zezombye a écrit :
Ah, je vois. Mais du coup tu ne redéfinis pas les fonctions graphiques pour le scaling (c'est juste que le syscall utilisé pour le Locate utilise toujours 7x21 caractères et fait donc du scaling).

Disons que c'est l'équivalent Prizm de Locate, donc il affiche selon les standard de la Graph 90.

Zezombye a écrit :
Du coup tu fais comment par exemple pour le test de gris (celui avec les sprites des épées) ?

J'en suis pas encore là. Mais pour le coup je mettrai d'autre images dans le test, et y'aura pas l'histoire de gris. Les seules vraies différence entre la monochrome et la Graph 90 !

Ajouté le 18/04/2018 à 18:20 :
Juste pour signaler que j'ai résolus d'autres bugs qui traînaient dans ma première tentative de portage vers la Graph 90, tentative qui avait fini par tout casser même sur les monochromes.

Il y avait de sombres subtilités d'alignement dans le linker script, en particulier :

.data ALIGN(4) : {...} # Aligne l'adresse de stockage (ROM) à 4 octets
.data : ALIGN(4) {...} # Aligne l'adresse de travail (RAM) à 4 octets
.data ALIGN(4) : ALIGN(4) {...} # Ce que je voulais

J'ai aussi réglé un truc sale lié au fait que pour le compilateur C, quand vous écrivez symbole, ça veut dire pour lui « la donnée qui est à l'adresse donnée par _symbole ». Ce qui n'est pas le cas pour les fonctions puisque quand f est une fonction, f et &f sont la même chose (il prend automatiquement l'adresse). Et donc vous n'avez pas la même chose dans les deux cas suivants :

extern void f(void);
print_hexa((uint32_t)f); # Affiche l'adresse de f
extern void (*f)(void);
print_hexa((uint32_t)f); # Affiche les deux premières instructions de f

Ces choses étant résolues, j'avance progressivement sur les drivers et les interruptions. Actuellement je n'active pas les interruptions, mais je mets en place les drivers en commençant par celui de l'écran sur la monochrome, le plus simple. Il a l'air de marcher sur les fonctionnalités de base ; je m'occupe actuellement du contraste et du rétroéclairage puis je passe à des trucs plus subtils, probablement les timers et le clavier.

Je tenterai d'écrire un driver clavier plus sérieux qu'avant, mais ce n'est pas dit que j'y arrive... il se passe beaucoup d'effets bizarres avec le clavier. Je maintiendrai ce thread à jour dans tous les cas !
Pages : Précédente1 ... , 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ... 25Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 46 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