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: 16462 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 ... , 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ... 30Suivante
Dark stormEn ligneMembre d'honneurPoints: 10865 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
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 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 !
ZezombyeHors ligneRédacteurPoints: 1640 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
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 Message

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


Je n'outrepasse pas le ghosting.
Dark stormEn ligneMembre d'honneurPoints: 10865 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
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 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.
ZezombyeHors ligneRédacteurPoints: 1640 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
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 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.
ZezombyeHors ligneRédacteurPoints: 1640 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
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 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.
ZezombyeHors ligneRédacteurPoints: 1640 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
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 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).
ZezombyeHors ligneRédacteurPoints: 1640 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
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 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.
ZezombyeHors ligneRédacteurPoints: 1640 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 stormEn ligneMembre d'honneurPoints: 10865 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
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 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.
ZezombyeHors ligneRédacteurPoints: 1640 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
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 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.
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1235 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é… ^^'
N'attendez pas qu'il n'y ait plus de miel : スススススススススススススススススススススススススス養蜂家スススススススススススススススススススススススススススススススススススス蜂家
LephenixnoirHors ligneAdministrateurPoints: 16462 Défis: 140 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) !
Pages : Précédente1 ... , 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ... 30Suivante

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