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 » gint : un noyau pour développer des add-ins
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

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

Posté le 20/02/2015 17:30

Ce topic fait partie de la série de topics du fxSDK.

En plus des options de programmation intégrée comme le Basic Casio ou Python, la plupart des calculatrices Casio supportent des add-ins, des programmes natifs très polyvalents avec d'excellentes performances. Les add-ins sont généralement programmés en C/C++ avec l'aide d'un ensemble d'outils appelé SDK.

Plusieurs SDK ont été utilisés par la communauté avec le temps. D'abord le fx-9860G SDK de Casio avec fxlib pour Graph monochromes (plus maintenu depuis longtemps). Puis le PrizmSDK avec libfxcg pour Prizm et Graph 90+E (encore un peu actif sur Cemetech). Et plus récemment celui que je maintiens, le fxSDK, dont gint est le composant principal.

gint est un unikernel, ce qui veut dire qu'il embarque essentiellement un OS indépendant dans les add-ins au lieu d'utiliser les fonctions de l'OS de Casio. Ça lui permet beaucoup de finesse sur le contrôle du matériel, notamment la mémoire, le clavier, l'écran et les horloges ; mais aussi de meilleures performances sur le dessin, les drivers et la gestion des interruptions, plus des choses entièrement nouvelles comme le moteur de gris sur Graph monochromes.

Les sources de gint sont sur la forge de Planète Casio : dépôt Gitea Lephenixnoir/gint

Aperçu des fonctionnalités

Les fonctionnalités phares de gint (avec le fxSDK) incluent :

  • Toutes vos images et polices converties automatiquement depuis le PNG, sans code à copier (via fxconv)
  • Un contrôle détaillé du clavier, avec un GetKey() personnalisable et un système d'événements à la SDL
  • Une bibliothèque standard C plus fournie que celle de Casio (voir fxlibc), et la majorité de la bibliothèque C++
  • Plein de raccourcis pratiques, comme pour afficher la valeur d'une variable : dprint(1,1,"x=%d",x)
  • Des fonctions de dessin, d'images et de texte optimisées à la main et super rapides, surtout sur Graph 90+E
  • Des timers très précis (60 ns / 30 µs selon les cas, au lieu des 25 ms de l'OS), indispensables pour les jeux
  • Captures d'écran et capture vidéo des add-ins par USB, en temps réel (via fxlink)

Avec quelques mentions spéciales sur les Graph monochromes :
Un moteur de gris pour faire des jeux en 4 couleurs !
La compatibilité SH3, SH4 et Graph 35+E II, avec un seul fichier g1a
Une API Unix/POSIX et standard C pour accéder au système de fichiers (Graph 35+E II seulement)

Et quelques mentions spéciales sur les Graph 90+E :
Une nouvelle police de texte, plus lisible et économe en espace
Le dessin en plein écran, sans les bordures blanches et la barre de statut !
Un driver écran capable de triple-buffering
Une API Unix/POSIX et standard C pour accéder au système de fichiers

Galerie d'add-ins et de photos

Voici quelques photos et add-ins réalisés avec gint au cours des années !



Arena (2016)Plague (2021)



Rogue Life (2021)



Momento (2021)



Communication avec le PC (cliquez pour agrandir)


Utiliser gint pour développer des add-ins

Les instructions pour installer et utiliser gint sont données dans les divers tutoriels recensés dans le topic du fxSDK. Il y a différentes méthodes de la plus automatique (GiteaPC) à la plus manuelle (compilation/installation de chaque dépôt). Le fxSDK est compatible avec Linux, Mac OS, et marche aussi sous Windows avec l'aide de WSL, donc normalement tout le monde est couvert

Notez en particulier qu'il y a des tutoriels de développement qui couvrent les bases ; tout le reste est expliqué dans les en-têtes (fichiers .h) de la bibliothèque que vous pouvez consulter en ligne, ou dans les ajouts aux changelogs ci-dessous.

Changelog et informations techniques

Pour tester les fonctionnalités et la compatibilité de gint, j'utilise un add-in de test appelé gintctl (dépôt Gitea Lephenixnoir/gintctl). Il contient aussi une poignée d'utilitaires d'ordre général.

Ci-dessous se trouve la liste des posts indiquant les nouvelles versions de gint, et des liens vers des instructions/tutoriels supplémentaires qui accompagnent ces versions.

VersionDateInfos supplémentaires
gint 2.10.02 Avril 2023
gint 2.9.021 Août 2022
gint 2.8.017 Mai 2022Effets dynamiques sur les imagesAPI de manipulations d'images
Overclock intégré
gint 2.7.119 Mars 2022Tutoriel capture des flux standards
gint 2.7.031 Décembre 2021
gint 2.6.029 Août 2021Tutoriel de capture vidéo par USB
gint 2.5.28 Juin 2021
gint 2.5.12 Juin 2021
gint 2.5.026 Mai 2021Intégration de fxlibc (dépôt) — Tutoriel de communication par USB
gint 2.4.027 Avril 2021Api GINT_CALL() pour les callbacks
gint 2.3.12 Février 2021
gint 2.3.029 Janvier 2021
gint 2.2.112 Janvier 2021
gint 2.2.011 Janvier 2021
gint 2.1.116 Septembre 2020
gint 2.1.021 Août 2020Polices UnicodeNouvelle API du moteur de gris
gint 2.0.3-beta10 Juillet 2020Modifications de l'API timer
gint 2.0.2-beta17 Juin 2020
gint 2.0.1-beta1er Juin 2020

Anecdotes et bugs pétés

Ô amateurs de bas niveau, j'espère que vous ne tomberez pas dans les mêmes pièges que moi.


TODO list pour les prochaines versions (2023-04-03)

gint 2.11
  1. Changements de contextes CPU. À reprendre du prototype de threading de Yatis pour permettre l'implémentation d'un véritable ordonnanceur. Demandé par si pour faire du threading Java.
  2. Applications USB. Ajouter le support de descripteurs de fichiers USB. Potentiellement pousser jusqu'à avoir GDB pour debugger.
  3. Support de scanf() dans la fxlibc. Codé par SlyVTT, plus qu'à nettoyer et fusionner.

Non classé

  • Regarder du côté serial (plus facile que l'USB) pour la communication inter-calculatrices (multijoueur) et ultimement l'audio (libsnd de TSWilliamson).
  • Un système pour recompiler des add-ins mono sur la Graph 90+E avec une adaptation automatique.
  • Support des fichiers en RAM pour pouvoir utiliser l'API haut-niveau sur tous les modèles et éviter la lenteur de BFile à l'écriture quand on a assez de RAM.



Précédente 1, 2, 3 ··· 9, 10, 11, 12, 13, 14, 15 ··· 20 ··· 30 ··· 40 ··· 50 ··· 60 ··· 70 ··· 72, 73, 74 Suivante
Dark storm Hors ligne Labélisateur Points: 11634 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
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

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


Ahaaa oui, ça a peut-être un lien d'ailleurs. xD

Ajouté le 15/08/2018 à 14:58 :
Après avoir testé avec un bon niveau de détail les réactions du clavier, j'ai pu formuler un workaround autour des artefacts que j'avais observés. C'est un peu moche, mais ça marche.

J'ai publié un topic sur Casiopeia pour récupérer des informations sur le comportement du clavier et tenter d'expliquer ce bug, pour le fixer plus tard. Pour l'instant, ça marche, donc je ne me plains pas.

Pour ceux que ça pourrait intéresser, le topic est ici : Unraveling the secrets of the KEYSC

Je vais ensuite porter le driver SH3 et commencer à remonter l'abstraction du clavier.

Par niveau d'abstraction, j'entends...

- Ports I/O (à coder sur SH3)
- États des touches (donné par le KEYSC sur SH4, à faire sur SH3)
- Évènements (fait)
- getkey() (à faire)

Un truc qui est cool, d'ailleurs : mon nouveau driver pour le clavier vous permet de détecter efficacement des combos de touches au clavier. Ça va pouvoir envoyer du ninja dans les jeux !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

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


mon nouveau driver pour le clavier vous permet de détecter efficacement des combos de touches au clavier


Comment tu fais pour passer outre le ghosting ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

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


Je n'outrepasse pas le ghosting.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 15/08/2018 21:36 | #


Eh Lephe…
/usr/share/fxsdk/gint/bopti.h:26:2: error: unknown type name 'uint8_t':
J'ai changé l'ordre des inclusions de headers, mais fait gaffe
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

Citer : Posté le 16/08/2018 12:25 | #


Hmm, je suis très attentif sur ce genre de problèmes, normalement. Il m'arrive de faire quelques oublis ; je viens de commit celui-ci.

Ajouté le 18/08/2018 à 21:00 :
J'ai terminé de régler les ultimes bugs sur le scan du clavier sur SH4.

gint possède donc un tout nouveau driver clavier sur SH4, performant et qui marche très bien sous overclock ! o/

J'enchaîne le plus vite possible avec getkey() et les fonctions associées.

Ajouté le 18/08/2018 à 22:17 :
J'ai aussi porté la routine de scan de clavier sous SH3, qui est pas très difficile et qui supporte également l'overclock.

J'ai cependant découvert que la machine a tendance à freezer quand gint se termine sur SH3 si le niveau d'overclock est trop élevé. Je vais voir d'où vient ce nouveau problème avant de clore le clavier.

Ajouté le 19/08/2018 à 13:46 :
J'ai trouvé d'où venait le bug : une précaution que j'avais prise lors de la restauration des paramètres des timers additionnels semble casser quand le processeur est trop rapide. On se retrouve avec des paramètres mal ajustés et le scan clavier ne se produit plus une fois de retour dans l'OS, d'où un freeze apparent.

A priori tout marche bien pour le clavier donc, avec ou sans overclock, sur toutes les Graph monochromes.

Ajouté le 19/08/2018 à 14:08 :
Et du coup, j'ai également porté ce driver sur la Graph 90. J'ai également découvert que (en gros) le clavier se comporte bizarrement quand le niveau d'overclock est trop faible.

- Sur Graph 75, il faut descendre à 5 MHz de fréquence, donc aucun risque
- Sur Graph 90, la fréquence normale est le minimum à ne pas franchir.

J'espère comprendre pourquoi tout cela se produit en discutant sur Casiopeia, où j'explique ce que j'ai repéré pour l'instant dans le topic linké précédemment : Unraveling the secrets of the KEYSC.

D'ici là, les fondamentaux du clavier marchent sur toutes les calculatrices ! o/

Ajouté le 19/08/2018 à 20:27 :
Mon support est actuellement uniforme, je peux faire exactement les mêmes choses sur SH3, sur SH4 et sur Graph 90. Ce qui signifie :

- Prendre le contrôle du matériel et des interruptions
- Mesurer la fréquence des signaux d'horloge (prémisses à l'overclock)
- Manipuler l'horloge et les timers
- Contrôler finement les événements qui se produisent sur le clavier
- Communiquer avec l'écran complètement (Graph 75) ou basiquement (Graph 90)

Pour ceux qui savent de quoi je parle, j'ai des drivers pour le TLB (SH3/SH4), le PFC (SH3), le clavier par ports (SH3), le KEYSC (SH4), la RTC (SH3/SH4), le TMU (SH3/SH4), le CPG (SH3/SH4), l'écran monochrome T6K11 (SH3/SH4 monochrome), et des tests sur l'écran couleur R61524 (Graph 90).

Dans mon viseur, j'ai pour la suite...

- Porter les routines de dessin (éventuellement optimiser au passage) et les fontes
- Compléter le driver de l'écran sur Graph 90
- Récupérer le moteur de gris
- Divers trucs internes.

C'est un peu soudain, mais j'avance assez bien... je vois presque le bout, vous imaginez

Enfin, et pas des moindres, Memallox est en train de lancer un port de newlib possiblement compatible avec gint, qui pourrait nous donner la lib standard qu'il nous a toujours manqué ! Suivez ce topic de près car il vous sera certainement utile

Ajouté le 20/08/2018 à 16:54 :
Vous n'imagineriez pas qu'une seule lettre de typo vous casse LINK...

for(gint_driver_t *drv = &edrv; (--drv) >= &edrv;)
{
    if(drv->unload) drv->unload();
    if(drv->ctx_restore) drv->ctx_restore(drv->sys_ctx);
}

Cette boucle est supposée décharger les timers et restaurer les paramètres du système. Hier j'ai changé l'ordre pour parcourir les drivers du début à la fin.

Mais voilà, j'ai laissé edrv (end drivers) dans (--drv) >= &edrv au lieu de changer pour bdrv (beginning drivers), et du coup rien n'était déchargé. En particulier les paramètres des timers n'étaient pas restaurés, donc ils restaient stoppés.

Maintenant, on se rappelle que LINK utilise beaucoup les timers, et voilà ! Un bug d'une lettre qui survit 18 heures.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 21/08/2018 15:42 | #


J'ai une erreur bizarre quand je fais "make" ou "make all-lib" (la même) :
Zezombye@Zez-PC2 ~/gint
$ make all-lib
fxconv -font src/display/font_system.bmp
sh3eb-elf-objcopy: option `--input' is ambiguous
Usage: sh3eb-elf-objcopy [option(s)] in-file [out-file]
Copies a binary file, possibly transforming it in the process
The options are:
  -I --input-target <bfdname>      Assume input file is in format <bfdname>
  -O --output-target <bfdname>     Create an output file in format <bfdname>
  -B --binary-architecture <arch>  Set output arch, when input is arch-less
  -F --target <bfdname>            Set both input and output format to <bfdname>
     --debugging                   Convert debugging information, if possible
  -p --preserve-dates              Copy modified/access timestamps to the output
  -D --enable-deterministic-archives
                                   Produce deterministic output when stripping archives
  -U --disable-deterministic-archives
                                   Disable -D behavior (default)
  -j --only-section <name>         Only copy section <name> into the output
     --add-gnu-debuglink=<file>    Add section .gnu_debuglink linking to <file>
  -R --remove-section <name>       Remove section <name> from the output
     --remove-relocations <name>   Remove relocations from section <name>
  -S --strip-all                   Remove all symbol and relocation information
  -g --strip-debug                 Remove all debugging symbols & sections
     --strip-dwo                   Remove all DWO sections
     --strip-unneeded              Remove all symbols not needed by relocations
  -N --strip-symbol <name>         Do not copy symbol <name>
     --strip-unneeded-symbol <name>
                                   Do not copy symbol <name> unless needed by
                                     relocations
     --only-keep-debug             Strip everything but the debug information
     --extract-dwo                 Copy only DWO sections
     --extract-symbol              Remove section contents but keep symbols
  -K --keep-symbol <name>          Do not strip symbol <name>
     --keep-file-symbols           Do not strip file symbol(s)
     --localize-hidden             Turn all ELF hidden symbols into locals
  -L --localize-symbol <name>      Force symbol <name> to be marked as a local
     --globalize-symbol <name>     Force symbol <name> to be marked as a global
  -G --keep-global-symbol <name>   Localize all symbols except <name>
  -W --weaken-symbol <name>        Force symbol <name> to be marked as a weak
     --weaken                      Force all global symbols to be marked as weak
  -w --wildcard                    Permit wildcard in symbol comparison
  -x --discard-all                 Remove all non-global symbols
  -X --discard-locals              Remove any compiler-generated symbols
  -i --interleave[=<number>]       Only copy N out of every <number> bytes
     --interleave-width <number>   Set N for --interleave
  -b --byte <num>                  Select byte <num> in every interleaved block
     --gap-fill <val>              Fill gaps between sections with <val>
     --pad-to <addr>               Pad the last section up to address <addr>
     --set-start <addr>            Set the start address to <addr>
    {--change-start|--adjust-start} <incr>
                                   Add <incr> to the start address
    {--change-addresses|--adjust-vma} <incr>
                                   Add <incr> to LMA, VMA and start addresses
    {--change-section-address|--adjust-section-vma} <name>{=|+|-}<val>
                                   Change LMA and VMA of section <name> by <val>
     --change-section-lma <name>{=|+|-}<val>
                                   Change the LMA of section <name> by <val>
     --change-section-vma <name>{=|+|-}<val>
                                   Change the VMA of section <name> by <val>
    {--[no-]change-warnings|--[no-]adjust-warnings}
                                   Warn if a named section does not exist
     --set-section-flags <name>=<flags>
                                   Set section <name>'s properties to <flags>
     --add-section <name>=<file>   Add section <name> found in <file> to output
     --update-section <name>=<file>
                                   Update contents of section <name> with
                                   contents found in <file>
     --dump-section <name>=<file>  Dump the contents of section <name> into <file>
     --rename-section <old>=<new>[,<flags>] Rename section <old> to <new>
     --long-section-names {enable|disable|keep}
                                   Handle long section names in Coff objects.
     --change-leading-char         Force output format's leading character style
     --remove-leading-char         Remove leading character from global symbols
     --reverse-bytes=<num>         Reverse <num> bytes at a time, in output sections with content
     --redefine-sym <old>=<new>    Redefine symbol name <old> to <new>
     --redefine-syms <file>        --redefine-sym for all symbol pairs
                                     listed in <file>
     --srec-len <number>           Restrict the length of generated Srecords
     --srec-forceS3                Restrict the type of generated Srecords to S3
     --strip-symbols <file>        -N for all symbols listed in <file>
     --strip-unneeded-symbols <file>
                                   --strip-unneeded-symbol for all symbols listed
                                     in <file>
     --keep-symbols <file>         -K for all symbols listed in <file>
     --localize-symbols <file>     -L for all symbols listed in <file>
     --globalize-symbols <file>    --globalize-symbol for all in <file>
     --keep-global-symbols <file>  -G for all symbols listed in <file>
     --weaken-symbols <file>       -W for all symbols listed in <file>
     --add-symbol <name>=[<section>:]<value>[,<flags>]  Add a symbol
     --alt-machine-code <index>    Use the target's <index>'th alternative machine
     --writable-text               Mark the output text as writable
     --readonly-text               Make the output text write protected
     --pure                        Mark the output file as demand paged
     --impure                      Mark the output file as impure
     --prefix-symbols <prefix>     Add <prefix> to start of every symbol name
     --prefix-sections <prefix>    Add <prefix> to start of every section name
     --prefix-alloc-sections <prefix>
                                   Add <prefix> to start of every allocatable
                                     section name
     --file-alignment <num>        Set PE file alignment to <num>
     --heap <reserve>[,<commit>]   Set PE reserve/commit heap to <reserve>/
                                   <commit>
     --image-base <address>        Set PE image base to <address>
     --section-alignment <num>     Set PE section alignment to <num>
     --stack <reserve>[,<commit>]  Set PE reserve/commit stack to <reserve>/
                                   <commit>
     --subsystem <name>[:<version>]
                                   Set PE subsystem to <name> [& <version>]
     --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]
                                   Compress DWARF debug sections using zlib
     --decompress-debug-sections   Decompress DWARF debug sections using zlib
     --elf-stt-common=[yes|no]     Generate ELF common symbols with STT_COMMON
                                     type
  -M  --merge-notes                Remove redundant entries in note sections
      --no-merge-notes             Do not attempt to remove redundant notes (default)
  -v --verbose                     List all object files modified
  @<file>                          Read options from <file>
  -V --version                     Display this program's version number
  -h --help                        Display this output
     --info                        List object formats & architectures supported
sh3eb-elf-objcopy: supported targets: elf32-sh elf32-shl coff-sh coff-shl coff-sh-small coff-shl-small elf32-s                         h64 elf32-sh64l elf64-sh64 elf64-sh64l elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec ve                         rilog tekhex binary ihex
error: objcopy returned 256
     ar libgint.a
sh3eb-elf-ar: build/display_font_system.bmp.o: No such file or directory
make: *** [Makefile:172: libgint.a] Error 1


Il y a déjà un dossier build dans le dossier gint, donc ça vient pas de là.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

Citer : Posté le 21/08/2018 16:01 | #


Je comprends le problème, j'ai commit un fix possible. Tu as quelle version d'objcopy, par curiosité ? Les versions dont je dispose comprennent très bien l'option --input.

Il faut que tu recompiles et réinstalles le fxSDK. J'ai bon espoir que ça marchera mieux.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 22/08/2018 00:29 | #


Ca compile (j'ai tout refait l'installation de fxlib puis de gint avec make all-lib), par contre j'ai toujours la même erreur du linker.ld qui est inexistant :/

J'ai objcopy 2.30 d'ailleurs.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

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


Si tu veux que le fichier linker.ld apparaisse dans le dossier du fxSDK, il faut bien sûr installer avec make install. Je reconnais que le tuto n'est pas très clair sur ce point.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

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


Ah oui, j'avais oublié ça.

Du coup maintenant j'ai des erreurs de linker :
LINK build/firmware.elf
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld:/usr/share/fxsdk/linker.ld:17: warning: redeclaration of memory region `rom'
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld:/usr/share/fxsdk/linker.ld:19: warning: redeclaration of memory region `ram'
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: build/firmware.elf section `.data' will not fit in region `ram'
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: section C LMA [0000000000336f80,0000000000337657] overlaps section .gint LMA [0000000000336f80,000000000033765f]
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: section .gint_bss LMA [0000000000337660,0000000000337a6f] overlaps section D LMA [0000000000337658,00000000003376bf]
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: region `ram' overflowed by 3284 bytes
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: warning: section `.bss' type changed to PROGBITS


Si j'enlève le "-T addin.ld" de la compilation, ça me donne ça :
LINK build/firmware.elf
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: build/firmware.elf section `.data' will not fit in region `ram'
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: section C LMA [0000000000336f78,000000000033764f] overlaps section .gint LMA [0000000000336f78,0000000000337657]
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: section .gint_bss LMA [0000000000337658,0000000000337a67] overlaps section D LMA [0000000000337650,00000000003376b7]
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: region `ram' overflowed by 3280 bytes

Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

Citer : Posté le 23/08/2018 08:44 | #


Si j'enlève le "-T addin.ld" de la compilation, ça me donne ça :

Si tu regardes les tutoriels d'utilisation de gint, ça ne mentionne pas de -T. Tu es en train de mélanger du gint et du fxlib, comme prévu...

Pour les overlaps, vérifie que dans /usr/share/fxsdk/linker.d, il y a une ligne qui indique *(C), une qui indique *(D), une *(.gint) et un *(.gint_bss).

L'erreur principale est que tu as 3280 octets en trop dans la RAM. Il faut réduire ça (rappel : gint prend aussi un peu de place, notamment à cause de la VRAM).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 23/08/2018 08:56 | #


Si tu regardes les tutoriels d'utilisation de gint, ça ne mentionne pas de -T.


Ouaip, le -T vient du tuto du sh3eb-elf-gcc, je l'ai enlevé parce que je me suis dit que 2 linkers allaient causer des conflits.

Pour les overlaps, vérifie que dans /usr/share/fxsdk/linker.d, il y a une ligne qui indique *(C), une qui indique *(D), une *(.gint) et un *(.gint_bss).


J'imagine que tu voulais dire linker.ld ? Si oui, il n'y a aucune de ces 4 sections.

L'erreur principale est que tu as 3280 octets en trop dans la RAM. Il faut réduire ça (rappel : gint prend aussi un peu de place, notamment à cause de la VRAM).


Hmm. Est ce qu'il y a moyen d'enlever les parties de gint qui ne me servent pas (tout sauf le getkey) ?

Alternativement, est ce que je peux utiliser fxconv sans pour autant utiliser gint ? Dans ce cas j'utiliserai juste un syscall pour le getkey.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

Citer : Posté le 23/08/2018 09:07 | #


J'imagine que tu voulais dire linker.ld ? Si oui, il n'y a aucune de ces 4 sections.

Je me suis un peu trompé. Les sections .gint et .gint_bss sont bien à leur place, cependant dans la version actuelle de gint je n'avais pas prévu l'utilisation de fxlib. J'ai push un nouveau linker script qui les mentionne (il te suffit de pull puis make install depuis le dossier de gint).

Hmm. Est ce qu'il y a moyen d'enlever les parties de gint qui ne me servent pas (tout sauf le getkey) ?

Malheureusement non. Tu ne peux pas dire au système « ok, gint prend juste une partie du matériel, tu promets de ne pas y toucher hein ? ». Le clavier requiert les timers, donc c'est très mal barré. De façon générale c'est impossible.

Alternativement, est ce que je peux utiliser fxconv sans pour autant utiliser gint ? Dans ce cas j'utiliserai juste un syscall pour le getkey.

Ça tu peux, toutefois le format de conversion des images et polices est une de mes inventions et l'algorithme de dessin est implémenté dans gint. Il suppose une VRAM alignée correctement, pas comme celle du système...

Note : Je t'avais dit que ça n'allait pas marcher tout seul si tu essayais de mélanger les deux.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 23/08/2018 09:11 | #


Note : Je t'avais dit que ça n'allait pas marcher tout seul si tu essayais de mélanger les deux.


Mais je comprends pas, je voulais installer fxlib pour avoir le getkey et fxconv, fxlib requiert d'installer gint, et il faut pas installer fxlib+gint alors que gint est une dépendance de fxlib ? x)
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 23/08/2018 09:18 | #


Nan. gint est standalone. C'est limite un kernel, donc il se suffit à lui-même.
fxlib, c'est la tambouille de Casio.

Lephe a créé gint justement pour se passer de fxlib, donc autant éviter d'utiliser les deux.

fxconv est un utilitaire fourni avec gint

Un schéma plus clair :

- fxlib
    - int GetKey(unsigned int *key)
    - void locate(int x, int y)
    - void Print(unsigned char *str)
- gint
   - int getkey(void)
   - dprint(char *str, int x, int y)
   - fxconv

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

Citer : Posté le 23/08/2018 09:31 | #


Je précise un peu même si Darks a dit le principal.

Pour développer sous Linux, l'indispensable c'est d'installer GCC et le g1a-wrapper.

Ensuite, deux environnements d'exécution sont possibles :
- "fxlib/gcc", qui typiquement utilisera libfx.a, addin.ld et crt0.s
- "gint", qui utilise le fxSDK, fxconv et ses propres linker scripts

Désolé si ce n'était pas clair.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 23/08/2018 09:48 | #


Heu, fxsdk pardon.

Du coup on peut pas mélanger fxlib et gint ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

Citer : Posté le 23/08/2018 10:02 | #


Zezombye a écrit :
Heu, fxsdk pardon.

gint et le fxSDK sont un peu intriqués à cause de la police par défaut de gint. J'aurais aimé que gint ne dépende pas du fxSDK mais en pratique, ça ne se passe pas comme je le voudrais...

Du coup on peut pas mélanger fxlib et gint ?

Ce sont deux systèmes qui ne sont pas faits pour être mélangés. On peut faire des choses avec un bout de l'un et un bout de l'autre, quand on sait ce qu'on fait, mais tu ne peux pas dire « je vais faire un projet avec les deux » et utiliser SetTimer() d'un côté et getkey() de l'autre, ou Bdisp_PutDisp_DD() avec dimage(). Ça c'est clairement impossible.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1242 Défis: 54 Message

Citer : Posté le 29/08/2018 11:45 | #


Juste pour signaler qu'avec framapic, c'est aussi des images du post principal qui sont parties… Si jamais tu les as encore sous la main LePhé… ^^'
Lephenixnoir En ligne Administrateur Points: 24233 Défis: 170 Message

Citer : Posté le 29/08/2018 11:46 | #


J'ai remarqué ça, je ne crois pas les avoir en local, j'attendais de voir si framapic revenait ou si j'attendais juste la prochaine version pour refaire tout le post principal.

Ajouté le 15/09/2018 à 14:07 :
J'ai mis au clair les irrégularités dans les données renvoyées par le clavier !

En fait l'interface du KEYSC qui est supposée donner l'état individuel (appuyée / relâchée) de toutes les touches ne donne des bons résultats que si on lit les données assez souvent.

J'ai posté à ce sujet sur Casiopeia : http://www.casiopeia.net/forum/viewtopic.php?p=20592#p20592

Après avoir réglé encore quelques bugs de timers (décidément !), le clavier semble prêt à roller sur toutes les plateformes ! Je vais pouvoir reprendre le développement à une vitesse raisonnable (jusqu'au prochain bug) !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Précédente 1, 2, 3 ··· 9, 10, 11, 12, 13, 14, 15 ··· 20 ··· 30 ··· 40 ··· 50 ··· 60 ··· 70 ··· 72, 73, 74 Suivante

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 - 2024 | Il y a 125 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