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: 15785 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 ... , 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ... 25Suivante
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 04/08/2018 23:49 | #


Seulement ça se complique au fur et à mesure que tu optimises... mais oui, à essayer.

Accessoirement tu peux récupérer le driver timer et basta. En l'occurrence gint n'est dans le principe pas nécessaire. L'OS peut emmerder mais avec un peu de chance non.
ZezombyeHors ligneRédacteurPoints: 1625 Défis: 12 Message

Citer : Posté le 05/08/2018 00:41 | #


Pourquoi tu pourrais pas compiler windmill sous gint ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
-florian66-Hors ligneAncien rédacteurPoints: 2300 Défis: 19 Message

Citer : Posté le 05/08/2018 08:36 | #


Tu as release le nouveau gestionnaire d'interruption ? Si oui, je ferai quelques tests de son sur S4C
In Arch, I trust ! And you ?
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 05/08/2018 10:46 | #


Zezombye a écrit :
Pourquoi tu pourrais pas compiler windmill sous gint ?

GCC semble optimiser des choses dans le code de Windmill, et bien que ça compile, ça ne marche pas. En général c'est que le code oublie de préciser des « contraintes » et le compilateur saute dessus pour optimiser plus, mais finit par casser le programme. Avec le SDK le problème ne se pose pas parce qu'il n'optimise rien...

-florian66- a écrit :
Tu as release le nouveau gestionnaire d'interruption ? Si oui, je ferai quelques tests de son sur S4C

Tu peux toujours pull la branche compat du dépôt, mais il n'y a pas de clavier...
DrakHors ligneRédacteurPoints: 1925 Défis: 38 Message

Citer : Posté le 05/08/2018 11:52 | #


N'est-il pas possible de compiler en précisant de n'opérer aucune optimisation ?
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 05/08/2018 11:56 | #


Je l'ai fait, de mémoire, mais même de base, il ne reste pas passif. C'est peut-être un truc à la con qui bloque ?

Ajouté le 09/08/2018 à 16:18 :
Pas de progrès immédiat à annoncer, mais je travaille sur le clavier, sur SH4 le principe (acquérir les touches pressées) marche.

Maintenant j'essaie de structurer le programme autour correctement. J'ai un buffer dans lequel je peux stocker :
- Soit l'historique des états de clavier
- Soit les évènements (touche pressée, maintenue, relâchée...)

Jusque-là j'étais sur l'historique des états mais le buffer n'a qu'une seconde de capacité même quand il ne se passe rien. C'est gênant. Un buffer d'évènements ne se remplit pas s'il ne se passe rien... c'est plus avantageux.

J'envisage également de générer au lieu de stocker les événements de répétition de touches, c'est à étudier.

Au milieu de tout ça il reste qu'il faut être précautionneux dans le design parce que si par exemple l'instant où je relâche une touche est manqué (parce que le buffer est plein donc l'information est perdue par exemple), la touche risque de ne jamais être considérée comme relâchée. Si on s'y prend correctement ce genre de problèmes se corrigent spontanément, mais ça demande un peu de soin.

Voilà pour cette petite update
Dark stormHors ligneMembre d'honneurPoints: 10828 Défis: 176 Message

Citer : Posté le 09/08/2018 22:13 | #


Ok. Quoi qu'il arrive, tu nous tiens au jus, suivant l'implémentation finale (ça a changé pas mal de fois il me semble ) ça changera l'architecture des projets. (J'ai toujours Osu! sur le feu, j'avance doucement mais sûrement, pour l'instant y'a pas de quoi nourrir une RDP, donc j'attends encore un chouille)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 09/08/2018 22:19 | #


No problem pour le jus ! Je sais que j'ai tendance à changer assez vite mes APIs, il faudra que je m'adapte quand ce sera release et utilisé... o_o"
Dark stormHors ligneMembre d'honneurPoints: 10828 Défis: 176 Message

Citer : Posté le 12/08/2018 21:10 | #


Bon, c'est un peu chiant, mais du coup voilà.

Procédure d'installation
$ git clone git@git.planet-casio.com:lephe/gint.git
$ cd gint
$ ./configure
$ make
# make install


Compilation (à partir des sources de Calto Hero, qui compilaient y'a pas si longtemps)
$ make
sh3eb-elf-gcc build/src/editor.c.o build/src/main.c.o build/src/load.c.o build/src/engine.c.o build/src/bfile.s.o build/assets/font-island.bmp.o build/assets/game-background.bmp.o build/assets/balls.bmp.o build/assets/explosion.bmp.o `fxsdk --libs` -o build/calthero.elf `fxsdk --cflags` -std=c11 -Wall -Wextra -pedantic
/usr/bin/sh3eb-elf-ld: cannot find build/version.o


Il se trouve que l'erreur survient aussi sur un projet bidon :
[darks@walhalla test]$ cat main.c
int main(int a, void *args) {
    return 1;
}

[darks@walhalla test]$ sh3eb-elf-gcc -c main.c -o main.o `fxsdk --cflags` -std=c11 -Wall -Wextra -pedantic
main.c: In function 'main':
main.c:1:14: warning: unused parameter 'a' [-Wunused-parameter]
int main(int a, void *args) {
          ~~~~^
main.c:1:23: warning: unused parameter 'args' [-Wunused-parameter]
int main(int a, void *args) {
                 ~~~~~~^~~~

[darks@walhalla test]$ sh3eb-elf-gcc main.o `fxsdk --libs` -o addin.elf `fxsdk --cflags` -std=c11 -Wall -Wextra -pedantic
/usr/bin/sh3eb-elf-ld: cannot find build/version.o
collect2: error: ld returned 1 exit status


À l'inverse, un make all dans le dossier de gint fonctionne (si ce n'est que j'ai pas le bon wrapper dans mon path).

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 12/08/2018 21:29 | #


J'arrive à reproduire le bug. Je regarde plus en détail.

Ajouté le 12/08/2018 à 21:34 :
Le linker script mentionnait ce fichier. J'ai toujours cru que c'était « s'il existe », mais apparemment pas.

J'ai adapté et commit un fix qui semble passer. Tu peux confirmer ?
Dark stormHors ligneMembre d'honneurPoints: 10828 Défis: 176 Message

Citer : Posté le 12/08/2018 21:39 | #


C'est tout bon o/

Au passage, tu peux publier le wrapper sur le Gitlab ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 12/08/2018 21:41 | #


Dark storm a écrit :
Au passage, tu peux publier le wrapper sur le Gitlab ?

J'aimerais éviter, si possible. Il a besoin d'être réécrit, pour être honnête... normalement il devrait être intégré au fxSDK une fois que c'est fini.

Ajouté le 14/08/2018 à 14:10 :
J'ai réussi à écrire le système d'enregistrement des évènements du clavier.

En fait je l'ai fait sous trois formes différentes sans réussir à me débarrasser d'un bug gênant et non trivial. Basiquement, quand on presse beaucoup de touches et qu'on les relâche, certains relâchements ne sont pas pris en compte.

Si je lis dans les registres du KEYSC ce qu'il en est depuis l'interruption qui analyse le clavier, il dit que les touches en question sont toujours pressées. Si je le fais hors de l'interruption, il dit qu'elles ne le sont pas et le bug disparaît.

Je l'ai déjà rencontré il y a quelques années, et le « contournement » que j'avais mis en place est la raison pour laquelle le clavier ne marche plus quand on overclocke dans les versions actuelles de gint.

Je continue de chercher mais ça s'annonce assez bizarre, je n'ai pas encore d'idée d'où ça peut venir.

Ajouté le 14/08/2018 à 15:34 :
Croyez-le ou pas, j'arrive à contrôler l'apparition du bug en fonction de l'espace où mon driver fais les analyses du clavier : depuis une interruption, j'ai des artefacts, mais depuis le programme utilisateur, rien. Je continue de chercher... '-'
Dark stormHors ligneMembre d'honneurPoints: 10828 Défis: 176 Message

Citer : Posté le 15/08/2018 01:01 | #


Au passage, est-ce que tu peux préciser les bons paramètres d'enregistrement (méthode pour Gimp par exemple) pour que fxconv fasse pas du caca ?
Impossible d'afficher un foutu sprite en N&B + alpha

Genre, les paramètres pour :
– les sprites, N&B, N&B+A
– les polices, N&B
– les sprites, 4G, 4G+A

Ajouté le 15/08/2018 à 01:04 :
Je précise que ça vient vraiment de fxconv, parce que si je mets un lien symbolique vers un sprite de gintdemo, il s'affiche. C'est une question de paramètres d'enregistrement uniquement.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 15/08/2018 08:33 | #


Pour les sprites, normalement :
- Bitmap uniquement.
- RGB888, ARGB8888, RGB565 ou monochrome.
- fxconv détecte automatiquement s'il y a besoin d'ajouter un calque de transparence (si l'image contient des pixels transparents) ou s'il faut passer en gris.
- Les gris sont #555555 et #aaaaaa.

Pour les polices :
- Il y a un header où on doit dessiner du texte, c'est super pas pratique à utiliser, je veux pas garder ce système.
- Copie l'en-tête depuis une police déjà prête, genre celle dans gint/src/display, et change juste la taille des glyphes.
- La police est faite de lignes qui sont séparées par une ou plusieurs lignes blanches consécutives sur toutes la largeur de l'image.
- Chaque ligne est faite de glyphes séparés par une ou plusieurs colonnes blanches consécutives sur toute la hauteur de la ligne.
- Les pixels gris sont autorisés, affichés comme blanc mais ne participent pas à ses démarcations (vois ").

Si ça ne marche pas, fais donc voir les images ; je n'ai jamais rencontré le moindre problème donc c'est certainement arrangeable.
Dark stormHors ligneMembre d'honneurPoints: 10828 Défis: 176 Message

Citer : Posté le 15/08/2018 10:30 | #


Les polices c'est ok (coup de chance ? Aucune idée…) mais pour les sprites j'ai toujours un bel écran blanc.

Je te laisse faire mumuse avec cette ligne et les images présentes dans le projet.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 15/08/2018 11:02 | #


Je clône, j'envoie ton g1a, j'ai isometric.bmp qui s'affiche à l'écran.

Je n'ai même pas recompilé.

Ça marche sur ma Graph 35+ SH3 et ma Graph 75+E SH4.

... tu es sûr que tout va bien de ton côté ?
Dark stormHors ligneMembre d'honneurPoints: 10828 Défis: 176 Message

Citer : Posté le 15/08/2018 11:03 | #


Justement, isometric c'est l'image que j'ai piqué de gint, c'est la seule qui fonctionne

— Edit —
J'avoue, j'ai pas été clair pour le coup
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 15/08/2018 11:15 | #


Hmm, curieusement le RGB888 contente mieux fxconv. C'est pas normal en tous cas.

J'ai passé tes images dans le bon format, retiré de l'index les fichiers de build et commit tout ça. Le nouveau g1a devrait donner ce que tu veux.
Dark stormHors ligneMembre d'honneurPoints: 10828 Défis: 176 Message

Citer : Posté le 15/08/2018 11:18 | #


« J'ai passé tes images dans le bon format » À savoir ? Je vais avoir pas mal de sprites, je vais pas te demander de tous les faire
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15785 Défis: 136 Message

Citer : Posté le 15/08/2018 11:19 | #


Eh bien, RGB888. Gimp te propose ça dans "Advanced options" quand tu exportes en bitmap.
Dark stormHors ligneMembre d'honneurPoints: 10828 Défis: 176 Message

Citer : Posté le 15/08/2018 11:22 | #


Bizarre, il me semblait que tu perdais la transparence avec ça. Bref, je regarderai en détail ce soir.
Merci pour le coup de main
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Pages : Précédente1 ... , 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ... 25Suivante

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