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.
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
- 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.
- Applications USB. Ajouter le support de descripteurs de fichiers USB. Potentiellement pousser jusqu'à avoir GDB pour debugger.
- 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.
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
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 !
Citer : Posté le 15/08/2018 15:09 | #
Comment tu fais pour passer outre le ghosting ?
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 15/08/2018 15:50 | #
Je n'outrepasse pas le ghosting.
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
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...
{
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.
Citer : Posté le 21/08/2018 15:42 | #
J'ai une erreur bizarre quand je fais "make" ou "make all-lib" (la même) :
$ 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à.
Ecrivez vos programmes basic sur PC avec BIDE
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.
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.
Ecrivez vos programmes basic sur PC avec BIDE
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.
Citer : Posté le 22/08/2018 19:57 | #
Ah oui, j'avais oublié ça.
Du coup maintenant j'ai des erreurs de linker :
/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 :
/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
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 23/08/2018 08:44 | #
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).
Citer : Posté le 23/08/2018 08:56 | #
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.
J'imagine que tu voulais dire linker.ld ? Si oui, il n'y a aucune de ces 4 sections.
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.
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 23/08/2018 09:07 | #
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).
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.
Ç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.
Citer : Posté le 23/08/2018 09:11 | #
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)
Ecrivez vos programmes basic sur PC avec BIDE
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
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.
Citer : Posté le 23/08/2018 09:48 | #
Heu, fxsdk pardon.
Du coup on peut pas mélanger fxlib et gint ?
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 23/08/2018 10:02 | #
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...
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.
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é… ^^'
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) !