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
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 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 ... , 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ... 29Suivante
Breizh_craftHors ligneModérateurPoints: 982 Défis: 7 Message

Citer : Posté le 06/05/2019 09:46 | #


On n'a pas migré les comptes, c'est pas le même Gitea, et migrer depuis Gitlab ne peut être fait automatiquement.

Il faut utiliser le pseudo que tu comptes utiliser pour la v5 (tu peux garder le même évidemment), puisqu'à terme les comptes seront liés.
Informagicien professionnel, prestidigitateur système. Tout est possible.
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 06/05/2019 09:53 | #


Kirafi a écrit :
Tant que tu bosse dessus y'a moyen que tu finisses le makefile automatique ?

Oui je peux, désolé désolé ! >_<"

Peux-tu cross-poster ton issue du Gitlab sur le Gitea pendant que tu y es ?
KirafiHors ligneMembrePoints: 2113 Défis: 10 Message

Citer : Posté le 06/05/2019 14:47 | #


Ouaip c'est ce que je voulais faire, mais j'arrivais pas à me connecter .
Du coup je crée un compte avec mon pseudo Kirafi et je recrée l'issue Lephe .
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
YatisHors ligneMembrePoints: 440 Défis: 0 Message

Citer : Posté le 17/05/2019 08:24 | #


Après quelques essais, gint semble fonctionner correctement sur Graph 35+E II, le seul changement requis étant le driver de l'écran.

Je serais curieux de savoir comment tu as fait pour détecter la graph 35+E II, car le MPU est le même que l'ancien, à savoir le SH7724 ? (on en a déjà parlé sur la shout mais je préfère que ce sois disponible au plus grand nombre).
As-tu rencontré des problèmes avec les adresses des different modules (RTC, TMU, etc...) (normalement non car tout est à la même place).
Le clavier est différent ? ou fonctionne-t-il toujours aussi bizarrement ?
As-tu changer là où gint s'installais en RAM ? Comment peux-tu être sûr du rien n'est écrasé, car tu as dit que Casio a conscience de la nouvelle taille de la RAM ?

À quand une release de gint ? (ce n'est pas que j'adore me perdre dans le code de gint, mais un peu quand même )
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 17/05/2019 12:29 | #


Eh bien, c'est facile, je ne l'ai pas fait : j'ai détecté la version d'OS 03.x. C'est suffisamment "correct" car on sait que l'OS utilise le nouveau driver de l'écran si et seulement si il est en version 3. Donc gint utilise toujours le même driver que l'OS... qui est normalement le bon. Mais ça ne marchera pas si on fait des changements d'OS avec d'autres machines (qui ne marchent déjà pas car le driver système n'est pas bon !).

TMU et clavier marchent, RTC je n'ai pas encore testé mais je suis persuadé que c'est bon. Tout ça c'est sur le MPU. En tous cas tout gint marche pareil depuis que j'ai changé l'écran.

Je n'ai pas changé la zone où gint s'installe en RAM, qui est dans la première moitité (date de l'époque de Kristaba tout ça). Je n'ai pas de garantie que ça doit marcher, mais ça marche.

Je suis en train de faire les fonctions de rendu de texte pour la Graph 90. C'est un peu compliqué parce qu'il faut l'optimiser correctement sinon tu perds des précieux FPS dans les applications... et c'est plus crucial que sur les Graphs mono. Tu peux déjà utiliser la version sur la branch compat sur Gitea comme l'ancienne, mais toutes les fonctions ne sont pas là.

Je fais au plus vite, dès que je serai plus coincé dans les problèmes au Canada.
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 22/06/2019 21:34 | # | Fichier joint


Un mois plus tard, voici la version de rendu de texte pour la Graph 90+E. J'ai débuggé au passages les polices proportionnelles, qui sont beaucoup plus agréables sur cet écran. Vous noterez qu'il y a aussi des lettres qui descendent sous la ligne de base (g, j, la virgule...).

J'ai fait 5 polices prototypes avant d'arriver à un rendu qui me convienne et équilibre un bon confort visuel avec une taille raisonnable. Je suis content du résultat !


Reste encore le dessin d'images sur Graph 90+E, qui sera une horreur à implémenter mais qu'il faut faire vraiment bien sinon les performances poseront des problèmes. Je vous tiens au courant !
YatisHors ligneMembrePoints: 440 Défis: 0 Message

Citer : Posté le 22/06/2019 23:23 | #


Wow ça rend super bien !!

Comment tu as géré les fonts ?
C'est une image bitmap que tu lis ? ou à la compilation tu génères les données en brut dans un tableau ?

Il te reste seulement le dessin pour prizm ?
Gint pour fx9860g est entièrement fini actuellement ?

En tout cas, merci beaucoup pour ce projet qui m'est très inspirant <3
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 22/06/2019 23:29 | # | Fichier joint


Les polices sont converties par fxconv à partir d'une image et de quelques métadonnées que je passe actuellement sur la ligne de commande.

Voilà l'image d'origine (x2) :


À la compilation, je génère des données (une structure essentiellement) contenant un certain encodage de la police fait pour que le rendu soit rapide. Bon là sur Graph 90 c'est très décent mais c'est pas fulgurant comme sur Graph 75. Je pourrais les générer dans un tableau mais je trouve ça très moche donc je génère à la place un fichier object avec une section .data déclarant un unique symbole (variable) dont le nom est choisi à la conversion.

Pour la Graph 90, il ne me reste que le dessin et je peux reprendre le tronc commun. Gint pour Graph 75 n'est pas tout à fait fini car dans mon procédé de réécriture/portage, je me suis arrêté pour faire le dessin sur Graph 90 avant de finir le clavier et quelques autres éléments. Mais il n'y a rien de nouveau à faire pour atteindre la version 2 sur Graph 75, juste récupérer et bouger un peu du code existant.

Content que ça te plaise !
Dark stormHors ligneMembre d'honneurPoints: 10832 Défis: 176 Message

Citer : Posté le 22/06/2019 23:46 | #


Jolie police. Si je peux me permettre, différencier un poil plus le zéro du O (avec un point, une barre, whatever) est pas plus mal niveau lisibilité
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 22/06/2019 23:56 | #


C'était fait sur la photo... mais je trouve ça pas terrible. La forme est déjà différente (contrairement au 5x7) et la barre transervsale est plus épaisse que les contours, ça se voit sur la photo. Franchement je me fie au contexte...

Merci du reste, ça fait plaisir

Ajouté le 23/06/2019 à 16:32 :
J'ai fini de corriger le clipping, ce qui signifie que le texte peut dépasser de l'écran sans problème quand vous dessinez.
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 24/06/2019 02:08 | # | Fichier joint


Voici une petite photo d'une exception du processeur (aka System ERROR) pour la Graph 90+E. Pour l'instant c'est intégré avec les mains mais ça vous ne le verrez jamais.


On retrouve essentiellement les mêmes infos que pour une SysERROR, mais j'ai la place d'en rajouter pas mal.

Ajouté le 28/06/2019 à 21:27 :
Et soudain je réalise que même quand je supprime des headers dans les sources, je peux toujours compiler car il va chercher les headers dans le dossier où j'ai installé la version précédente. Diantre, c'était un coup à se faire bien avoir. '-'
Cakeisalie5Hors ligneMembre de CreativeCalcPoints: 1752 Défis: 10 Message

Citer : Posté le 28/06/2019 22:59 | #


Y a pas moyen pour l'affichage des exceptions de récupérer TEA et décoder l'exception pour tenter de voir si c'est un souci d'alignement ? J'ai un draft de ce genre plus ou moins dans mes brouillons :

uint32_t *EXPEVT = (void*)0xFF000024; /* exception code */
uint32_t *TEA    = (void*)0xFF00000C; /* exception address */

void handle_exc(void)
{
    uint32_t spc  = get_spc();
    uint32_t code = *EXPEVT & 0x7FF;

    switch (spc & 0xF000) {
    case 0x0000:
        switch (spc & 0x000F) {
        case 0x0003:
            /* `bsrf rm`, `braf rm`, `pref @rm`: jump. */
            type = INST;
            break;

        case 0x0004: /* FALLTHRU */
        case 0x0005: /* FALLTHRU */
        case 0x0006:
            /* `mov.<size> rm, @(r0, rn)` */
            type = DATA;
            break;
        }
    }
}


Promotion ordinaire sur les inscriptions sur Planète Casio : en ce moment, c'est gratuit !
Besoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 29/06/2019 05:08 | #


Si, on peut faire ça, j'y ai pensé il y a pas longtemps. Mais j'ai pas forcément envie d'embarquer un désassembleur dans le gestionnaire d'exceptions...
Cakeisalie5Hors ligneMembre de CreativeCalcPoints: 1752 Défis: 10 Message

Citer : Posté le 29/06/2019 11:51 | #


Pas besoin d'embarquer un assembleur complet, il n'y a pas tant d'instructions que ça qui interagissent avec la mémoire.

Promotion ordinaire sur les inscriptions sur Planète Casio : en ce moment, c'est gratuit !
Besoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 29/06/2019 15:23 | #


Ben 65 quand même, après je dis pas que les opcodes sont difficiles à sélectionner (enfin c'est "non trivial").

En plus il faut récupérer les opérandes et la taille de l'opération sinon tu peux pas vérifier que c'est effectivement mal aligné.

Du reste j'ai mis "probably" parce que je prends des précautions mais c'est nécessairement un problème d'alignement, parce que la seule autre possibilité c'est taper en-dehors de P0 en user mode, et on n'est pas en user mode.
Shadow15510Hors ligneAdministrateurPoints: 3940 Défis: 16 Message

Citer : Posté le 02/07/2019 14:06 | #


J'ai dû faire une fausse-manip' lors de l'installation :
La plupart des choses sont expliquées dans les en-têtes (fichiers .h) de la bibliothèque. Ils sont tous dans le sous-dossier gint du dossier d'installation du fxSDK

Cela n'est pas le cas…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 02/07/2019 15:00 | #


Non en effet, il sont désormais dans le dossier du compilateur. Comme tu le vois, soit je travaille sur gint et le fxSDK, soit je travaille sur les tutoriels, mais dès que je fais l'un l'autre se retrouve en retard... >_>

Voilà comment trouver le dossier. Demande au compilateur où est le binaire de gint :

% sh3eb-elf-gcc -print-file-name=libgint-fx.a
/home/el/opt/sh3eb-elf-2.31.1-8.2.0/lib/gcc/sh3eb-elf/8.2.0/libgint-fx.a

Ensuite déplace-toi dans le dossier indiqué puis dans include/gint :

% cd /home/el/opt/sh3eb-elf-2.31.1-8.2.0/lib/gcc/sh3eb-elf/8.2.0/
% cd include/gint

Et voilà, tu y es.

% ls
defs     mpu      display-cg.h  display.h  drivers.h  hardware.h  keycodes.h  syscalls.h
drivers  clock.h  display-fx.h  dma.h      gint.h     keyboard.h  rtc.h       timer.h
Shadow15510Hors ligneAdministrateurPoints: 3940 Défis: 16 Message

Citer : Posté le 02/07/2019 15:03 | #


Il ne veut pas, j'ai des erreurs de syntaxe :

pc37:~ antoine$ /Users/antoine/gcc/sh3eb-elf-2.32-8.3.0/lib/gcc/sh3eb-elf/8.3.0/libgint-fx.a
/Users/antoine/gcc/sh3eb-elf-2.32-8.3.0/lib/gcc/sh3eb-elf/8.3.0/libgint-fx.a: line 1: syntax error near unexpected token `newline'
/Users/antoine/gcc/sh3eb-elf-2.32-8.3.0/lib/gcc/sh3eb-elf/8.3.0/libgint-fx.a: line 1: `!<arch>'

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 02/07/2019 15:05 | #


Mais... mais enfin, la ligne de commande... x)

Est-ce que tu comprends ce que tu as tapé ? Tu as indiqué le nom d'un fichier, libgint-fx.a, tout seul. Tu as tenté d'exécuter un fichier de gint qui... n'est pas là pour ça.

Relis mes exemples, tu verras que tu as oublié plusieurs choses.
Shadow15510Hors ligneAdministrateurPoints: 3940 Défis: 16 Message

Citer : Posté le 02/07/2019 15:07 | #


Ah oui tiens… le plus drôle c'est que la suite marche très bien…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirHors ligneAdministrateurPoints: 16040 Défis: 140 Message

Citer : Posté le 05/07/2019 02:16 | #


Je découvre que même créer un fichier n'est pas trivial sur la Graph 35+E II et peut causer des crashs... le système de fichiers c'est vraiment pas gagné.
Pages : Précédente1 ... , 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ... 29Suivante

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