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: 16017 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 ... , 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ... 28Suivante
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

Citer : Posté le 30/04/2018 20:22 | #


Merci de ton aide !

Le problème de disparation des add-ins est connu même s'il n'y a pas de solution claire. Je m'y suis frotté à plusieurs occasions, notamment quand j'ai utilisé une mauvaise zone de RAM sur les premières versions SH4 de gint [#133735]. J'ai déjà réussi à le résoudre en optimisant la mémoire de stockage. Il y a peut-être d'autres solutions ; le reset complet est définitivement la plus brutale.
ZezombyeHors ligneRédacteurPoints: 1629 Défis: 12 Message

Citer : Posté le 30/04/2018 20:24 | #


Normalement il faudrait juste dire à l'OS de re-scanner la mémoire principale pour les addins, il y a un syscall qui fait ça donc il suffirait de transférer un addin qui exécute ce syscall. L'optimisation appelle ce syscall car les adresses des addins dans le tableau des addins doivent être updatées, donc ça aurait pu régler ton problème.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
YatisHors ligneMembrePoints: 440 Défis: 0 Message

Citer : Posté le 29/05/2018 19:10 | #


Zezombye a écrit :
Normalement il faudrait juste dire à l'OS de re-scanner la mémoire principale pour les addins, il y a un syscall qui fait ça donc il suffirait de transférer un addin qui exécute ce syscall.

Je n'ai pas réussi à obtenir un résultat avec le syscall, par contre, j'ai réussi à trouver le problème...figurez-vous qu'il venait de...........FA-124
Tout mais add-in était corrompue, j'ai réinstallé FA-124 et c’était bon x)
Et le problème était bizarre: impossible de recevoir de add in via USB et 3-pins.
Quand je transférais un truc (basic, g1a, etc.) via 3-pins le transfert avait bien lieu, le programme était bien dans la mémoire de l'autre calot...mais impossible d'y accéder x)
Même après des changements d'OS, optimisation, formatage complet...bref c'était très bizarre



A part ça, gint a du nouveaux depuis 1 mois ?
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

Citer : Posté le 29/05/2018 19:14 | #


Eh bien, actuellement, j'ai bientôt fini de documenter les 1 (SH3) / 6 (SH4) timers supplémentaires à 32 kHz ajoutés par Casio. Je vais écrire les gestionnaires d'interruption et je pourrai finaliser le timer !

Ensuite, je ferai du graphique - à la fois sur la G85 et sur la G90. Je vous ferai une démo sympa sur la G90 !

Pour l'instant je suis en examens et après je serai en stage, alors ça ne pourra pas aller très vite... mais je vais faire de mon mieux pour vous donner des nouvelles régulières.
NatnatHors ligneMembrePoints: 73 Défis: 0 Message

Citer : Posté le 12/06/2018 19:53 | #


Salut, c'est encore moi avec un problème avec la toolchain GCC!

J'ai un problème assez étrange pour compiler et installer gint...
make me donne:

  mkdir build
    gcc src/ctype/ctype_classes.c
    gcc src/ctype/ctype_functions.c
    gcc src/math/math_qdiv.c
     as src/setjmp/setjmp.s
    gcc src/stdio/sprintf.c
    gcc src/stdio/snprintf.c
    gcc src/stdio/stdio_format.c
    gcc src/stdio/vsprintf.c
    gcc src/stdio/vsnprintf.c
    gcc src/stdlib/realloc.c
    gcc src/stdlib/free.c
    gcc src/stdlib/stdlib_abs.c
    gcc src/stdlib/stdlib_rand.c
    gcc src/stdlib/malloc.c
    gcc src/stdlib/stdlib_div.c
    gcc src/stdlib/calloc.c
    gcc src/string/memchr.c
    gcc src/string/strlen.c
    gcc src/string/strcmp.c
    gcc src/string/memcmp.c
    gcc src/string/strcpy.c
    gcc src/string/memcpy.c
    gcc src/string/strnlen.c
    gcc src/string/strncpy.c
    gcc src/string/memset.c
    gcc src/string/strchr.c
    gcc src/time/time.c
    gcc src/time/time_misc.c
    gcc src/time/asctime.c
    gcc src/time/time_util.c
    gcc src/time/gmtime.c
    gcc src/time/mktime.c
    gcc src/time/ctime.c
     ar ar libc.a

» Succesfully built libc (30624 bytes)

    gcc src/bopti/bopti_internals.c
    gcc src/bopti/dimage.c
    gcc src/bopti/gimage.c
    gcc src/clock/clock.c
    gcc src/core/modules.c
    gcc src/core/interrupt_maps_7305.c
    gcc src/core/vbr_space.c
    gcc src/core/interrupts.c
    gcc src/core/gint_sh7705.c
    gcc src/core/init_quit.c
    gcc src/core/exceptions.c
    gcc src/core/mpu.c
    gcc src/core/interrupt_maps_7705.c
    gcc src/core/gint.c
    gcc src/core/gint_sh7305.c
     as src/core/syscalls.s
     as src/core/gint_vbr.s
    gcc src/display/getMasks.c
    gcc src/display/drect.c
    gcc src/display/display_vram.c
    gcc src/display/adjustRectangle.c
    gcc src/display/dclear.c
    gcc src/display/dpixel.c
    gcc src/display/dupdate.c
    gcc src/display/dline.c
    gcc src/events/event_get.c
    gcc src/events/event_push.c
    gcc src/gray/gray_engine.c
    gcc src/gray/gclear.c
    gcc src/gray/gpixel.c
    gcc src/gray/gline.c
    gcc src/gray/grect.c
    gcc src/init/crt0.c
    gcc src/init/util.c
    gcc src/keyboard/key_char.c
    gcc src/keyboard/keyboard_sh7305.c
    gcc src/keyboard/getkey.c
    gcc src/keyboard/keyboard_sh7705.c
    gcc src/keyboard/key_id.c
    gcc src/keyboard/key_type.c
    gcc src/keyboard/getPressedKeys.c
    gcc src/keyboard/keyboard_core.c
    gcc src/mmu/pseudoTLBInit.c
    gcc src/rtc/rtc_callback.c
    gcc src/rtc/rtc_getTime.c
    gcc src/rtc/rtc_setTime.c
    gcc src/rtc/rtc_interrupt.c
    gcc src/screen/screen_display.c
    gcc src/screen/screen_backlight.c
    gcc src/tales/tales_gray.c
    gcc src/tales/gprint.c
    gcc src/tales/dprint.c
    gcc src/tales/gtext.c
    gcc src/tales/tales_internals.c
    gcc src/tales/text_length.c
    gcc src/tales/dtext.c
    gcc src/tales/tales_configuration.c
    gcc src/timer/common_api.c
    gcc src/timer/virtual_timers.c
    gcc src/timer/hardware_timers.c
fxconv -font src/display/font_system.bmp
     ld build/version.o
sh3eb-elf-objcopy: error: the input file 'build/version.o' has no sections
Makefile:203 : la recette pour la cible « build/version.o » a échouée
make: *** [build/version.o] Erreur 1

Ce qui est assez étrange, étant donné que c'est pas sensé être une erreur...
Par contre, un make gintdemo.g1a fonctionne parfaitement.
Et si je make install quand même, il ne retourne pas d'erreur (mais quand je compile après il me donne une erreur).

sh3eb-elf-gcc `fxsdk --clfags` -c main.c -o main.o -I include -I `fxsdk --folder`/gint -I `fxsdk --folder` -Wall
In file included from /home/Nathan/share/fxsdk/gint/display.h:14,
                 from main.c:1:
/home/Nathan/opt/sh3eb-elf/lib/gcc/sh3eb-elf/8.1.0/include/stdint.h:9:16: fatal error: stdint.h: No such file or directory
# include_next <stdint.h>
                ^~~~~~~~~~
compilation terminated.
Makefile:29 : la recette pour la cible « main.o » a échouée
make: *** [main.o] Erreur 1
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

Citer : Posté le 12/06/2018 20:01 | #


Prenons les choses dans l'ordre. Peux-tu effectuer make VERBOSE=1 dans le dépôt de gint pour m'afficher la commande qui a planté ? Je crois que je sais de quoi il s'agit, finalement.

L'erreur que tu rencontres à la compilation, c'est autre chose. Il faut passer -ffreestanding à gcc pour qu'il expose stdint.h sur ce système.
NatnatHors ligneMembrePoints: 73 Défis: 0 Message

Citer : Posté le 12/06/2018 20:08 | #


Lephenixnoir a écrit :
Prenons les choses dans l'ordre. Peux-tu effectuer make VERBOSE=1 dans le dépôt de gint pour m'afficher la commande qui a planté ? Je crois que je sais de quoi il s'agit, finalement.

L'erreur que tu rencontres à la compilation, c'est autre chose. Il faut passer -ffreestanding à gcc pour qu'il expose stdint.h sur ce système.

J'arrive pas à croire que j'ai oublié le -ffreestanding
Maintenant, ld ne trouve pas -lc, mais c'est déjà plus un problème de GCC j'imagine.

Pour l'erreur de compilation de gint, make VERBOSE=1 me retourne ça:

mkdir -p build
sh3eb-elf-gcc -c src/ctype/ctype_classes.c -o build/ctype_ctype_classes.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/ctype/ctype_functions.c -o build/ctype_ctype_functions.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/math/math_qdiv.c -o build/math_math_qdiv.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-as  -c src/setjmp/setjmp.s -o build/setjmp_setjmp.s.o
sh3eb-elf-gcc -c src/stdio/sprintf.c -o build/stdio_sprintf.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdio/snprintf.c -o build/stdio_snprintf.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdio/stdio_format.c -o build/stdio_stdio_format.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdio/vsprintf.c -o build/stdio_vsprintf.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdio/vsnprintf.c -o build/stdio_vsnprintf.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdlib/realloc.c -o build/stdlib_realloc.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdlib/free.c -o build/stdlib_free.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdlib/stdlib_abs.c -o build/stdlib_stdlib_abs.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdlib/stdlib_rand.c -o build/stdlib_stdlib_rand.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdlib/malloc.c -o build/stdlib_malloc.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdlib/stdlib_div.c -o build/stdlib_stdlib_div.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/stdlib/calloc.c -o build/stdlib_calloc.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/memchr.c -o build/string_memchr.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/strlen.c -o build/string_strlen.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/strcmp.c -o build/string_strcmp.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/memcmp.c -o build/string_memcmp.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/strcpy.c -o build/string_strcpy.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/memcpy.c -o build/string_memcpy.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/strnlen.c -o build/string_strnlen.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/strncpy.c -o build/string_strncpy.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/memset.c -o build/string_memset.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/string/strchr.c -o build/string_strchr.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/time/time.c -o build/time_time.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/time/time_misc.c -o build/time_time_misc.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/time/asctime.c -o build/time_asctime.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/time/time_util.c -o build/time_time_util.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/time/gmtime.c -o build/time_gmtime.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/time/mktime.c -o build/time_mktime.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/time/ctime.c -o build/time_ctime.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-ar rcs libc.a build/ctype_ctype_classes.c.o build/ctype_ctype_functions.c.o  build/math_math_qdiv.c.o  build/setjmp_setjmp.s.o  build/stdio_sprintf.c.o build/stdio_snprintf.c.o build/stdio_stdio_format.c.o build/stdio_vsprintf.c.o build/stdio_vsnprintf.c.o  build/stdlib_realloc.c.o build/stdlib_free.c.o build/stdlib_stdlib_abs.c.o build/stdlib_stdlib_rand.c.o build/stdlib_malloc.c.o build/stdlib_stdlib_div.c.o build/stdlib_calloc.c.o  build/string_memchr.c.o build/string_strlen.c.o build/string_strcmp.c.o build/string_memcmp.c.o build/string_strcpy.c.o build/string_memcpy.c.o build/string_strnlen.c.o build/string_strncpy.c.o build/string_memset.c.o build/string_strchr.c.o  build/time_time.c.o build/time_time_misc.c.o build/time_asctime.c.o build/time_time_util.c.o build/time_gmtime.c.o build/time_mktime.c.o build/time_ctime.c.o  

» Succesfully built libc (30624 bytes)

sh3eb-elf-gcc -c src/bopti/bopti_internals.c -o build/bopti_bopti_internals.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/bopti/dimage.c -o build/bopti_dimage.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/bopti/gimage.c -o build/bopti_gimage.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/clock/clock.c -o build/clock_clock.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/modules.c -o build/core_modules.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/interrupt_maps_7305.c -o build/core_interrupt_maps_7305.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/vbr_space.c -o build/core_vbr_space.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/interrupts.c -o build/core_interrupts.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/gint_sh7705.c -o build/core_gint_sh7705.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/init_quit.c -o build/core_init_quit.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/exceptions.c -o build/core_exceptions.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/mpu.c -o build/core_mpu.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/interrupt_maps_7705.c -o build/core_interrupt_maps_7705.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/gint.c -o build/core_gint.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/core/gint_sh7305.c -o build/core_gint_sh7305.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-as  -c src/core/syscalls.s -o build/core_syscalls.s.o
sh3eb-elf-as  -c src/core/gint_vbr.s -o build/core_gint_vbr.s.o
sh3eb-elf-gcc -c src/display/getMasks.c -o build/display_getMasks.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/display/drect.c -o build/display_drect.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/display/display_vram.c -o build/display_display_vram.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/display/adjustRectangle.c -o build/display_adjustRectangle.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/display/dclear.c -o build/display_dclear.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/display/dpixel.c -o build/display_dpixel.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/display/dupdate.c -o build/display_dupdate.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/display/dline.c -o build/display_dline.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/events/event_get.c -o build/events_event_get.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/events/event_push.c -o build/events_event_push.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/gray/gray_engine.c -o build/gray_gray_engine.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/gray/gclear.c -o build/gray_gclear.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/gray/gpixel.c -o build/gray_gpixel.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/gray/gline.c -o build/gray_gline.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/gray/grect.c -o build/gray_grect.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/init/crt0.c -o build/init_crt0.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/init/util.c -o build/init_util.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/keyboard/key_char.c -o build/keyboard_key_char.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/keyboard/keyboard_sh7305.c -o build/keyboard_keyboard_sh7305.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/keyboard/getkey.c -o build/keyboard_getkey.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/keyboard/keyboard_sh7705.c -o build/keyboard_keyboard_sh7705.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/keyboard/key_id.c -o build/keyboard_key_id.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/keyboard/key_type.c -o build/keyboard_key_type.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/keyboard/getPressedKeys.c -o build/keyboard_getPressedKeys.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/keyboard/keyboard_core.c -o build/keyboard_keyboard_core.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/mmu/pseudoTLBInit.c -o build/mmu_pseudoTLBInit.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/rtc/rtc_callback.c -o build/rtc_rtc_callback.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/rtc/rtc_getTime.c -o build/rtc_rtc_getTime.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/rtc/rtc_setTime.c -o build/rtc_rtc_setTime.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/rtc/rtc_interrupt.c -o build/rtc_rtc_interrupt.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/screen/screen_display.c -o build/screen_screen_display.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/screen/screen_backlight.c -o build/screen_screen_backlight.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/tales/tales_gray.c -o build/tales_tales_gray.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/tales/gprint.c -o build/tales_gprint.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/tales/dprint.c -o build/tales_dprint.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/tales/gtext.c -o build/tales_gtext.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/tales/tales_internals.c -o build/tales_tales_internals.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/tales/text_length.c -o build/tales_text_length.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/tales/dtext.c -o build/tales_dtext.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/tales/tales_configuration.c -o build/tales_tales_configuration.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/timer/common_api.c -o build/timer_common_api.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/timer/virtual_timers.c -o build/timer_virtual_timers.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
sh3eb-elf-gcc -c src/timer/hardware_timers.c -o build/timer_hardware_timers.c.o -m3 -mb -nostdlib -I include -ffreestanding -std=c11 -Os -Wall -Wextra @gcc.cfg -g0
fxconv -font src/display/font_system.bmp -o build/display_font_system.bmp.o -font -n gint_font_system
sh3eb-elf-ld -r -R build/version.o.txt -o build/version.o
sh3eb-elf-objcopy -R .stack build/version.o build/version.o
sh3eb-elf-objcopy: error: the input file 'build/version.o' has no sections
Makefile:203 : la recette pour la cible « build/version.o » a échouée
make: *** [build/version.o] Erreur 1
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

Citer : Posté le 12/06/2018 20:17 | #


Maintenant, ld ne trouve pas -lc, mais c'est déjà plus un problème de GCC j'imagine.

Passe -nostdlib. Et normalement -ffreestanding implique -nostdlib, ce qui me fait dire que tu n'as pas passé au linker tous les flags de compilation. Tu devrais dès que tu linkes avec libgcc, c'est des détails qui traînent dans la doc mais qui peuvent te jouer un mauvais tour si tu l'oublies et que tu utilises des combinaisons d'options exotiques...

sh3eb-elf-objcopy -R .stack build/version.o build/version.o

Ok, c'est ce que j'avais imaginé. Tu vois -R .stack ? C'est pour supprimer la section .stack, qui n'a aucune raison d'exister, mais que ma version du sh3eb-elf-ld me générait sans raison quand j'ai développé ce bout du code. Le ld x86 ne me le faisait pas, j'ai pensé que j'avais mal configuré le compilo et j'ai ajouté ça.

Sauf que le tien ne génère pas de section .stack, donc évidemment objcopy ne peut pas la supprimer. La vraie manière de procéder aurait été :
1. De générer le fichier sans -R .stack pour que ça marche à tous les coups
2. De jeter la section build/version.o(.stack) dans le linker script

Je viens de commit ça. N'oublie pas de nettoyer ou recompiler (make -B) parce que même si le objcopy échoue, comme le fichier de destination est le même que le fichier source, on peut continuer à compiler. D'ailleurs tu pourrais continuer comme tu es parti sans problème, mais c'est mieux de fixer le système de build.
NatnatHors ligneMembrePoints: 73 Défis: 0 Message

Citer : Posté le 12/06/2018 20:37 | #


Lephenixnoir a écrit :

Passe -nostdlib. Et normalement -ffreestanding implique -nostdlib, ce qui me fait dire que tu n'as pas passé au linker tous les flags de compilation. Tu devrais dès que tu linkes avec libgcc, c'est des détails qui traînent dans la doc mais qui peuvent te jouer un mauvais tour si tu l'oublies et que tu utilises des combinaisons d'options exotiques...

Bizzare, fxsdk --cflags --ldflags me met pourtant le -ffreestanding tout seul... Mais en ajoutant le -nostdlib ça résout les problèmes de lib, effectivement. Par contre il arrive pas à linker correctement gint, il me manque tous les symboles... Faudra que j'essaie de réinstaller le fxsdk en entier pour voir...
Mais franchement la doc elle fait des miliers de lignes et c'est super chiant de trouver le flag qu'on veut dedans... J'imagine que j'ai signé pour ça en choisissant de compiler sur Linux...

Lephenixnoir a écrit :

Je viens de commit ça. N'oublie pas de nettoyer ou recompiler (make -B) parce que même si le objcopy échoue, comme le fichier de destination est le même que le fichier source, on peut continuer à compiler. D'ailleurs tu pourrais continuer comme tu es parti sans problème, mais c'est mieux de fixer le système de build.

Oui, un make mrproper suivi de make puis de make install et plus aucune erreur
J'imagine que ça vient du combo GCC 8.1.0 et binutils 2.30 qui brise la rétrocompatibilité... Note pour plus tard, la dernière version n'est pas forcément la meilleure.
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

Citer : Posté le 12/06/2018 20:41 | #


Après un petit tour dans le manuel, je ne trouve pas trace de l'implication de -nostdlib par -ffreestanding. Je me suis peut-être mélangé les pinceaux...

La doc de GCC, il faut la parcourir avec la recherche, ou bien dans le manuel info, que tu peux trouver en ligne ( https://gcc.gnu.org/onlinedocs/ ).

Je ne sais pas trop d'où venait cette section .stack, mais le principal est que le problème soit résolu. Bon courage pour la suite de ton projet, et hésite pas à lâcher des détails sur le forum !
NatnatHors ligneMembrePoints: 73 Défis: 0 Message

Citer : Posté le 12/06/2018 21:33 | #


Merci beaucoup
Oui, c'était effectivement un peu con d'essayer d'utiliser man pour la doc...
J'essaierai de mettre le programme en ligne avec un topic explicatif d'ici la semaine prochaine, avec les sources (GitHub ou le GitLab ?)
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

Citer : Posté le 12/06/2018 21:34 | #


Je dis ça mais j'utilise beaucoup le manuel quand il ne s'agit que des options...

Le Gitlab ! Le Gitlab !
YatisHors ligneMembrePoints: 440 Défis: 0 Message

Citer : Posté le 19/06/2018 12:29 | #


Je viens de tester Gint sur une sh3 la touche [menu] ne fonctionne pas (enfin le retour menu fonctionne une seule fois quand on appuie 2 fois sur le menu apres ça ne fonctionne plus du tout)
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

Citer : Posté le 19/06/2018 15:23 | #


Je vérifie dès que possible sur ma propre SH3. En attendant, il me faut une copie du bootlog (l'écran de contrôle de la figure 1). Tu peux me faire ça ?
YatisHors ligneMembrePoints: 440 Défis: 0 Message

Citer : Posté le 20/06/2018 17:13 | #



Voila
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

Citer : Posté le 01/08/2018 14:11 | #


(Note : Je n'oublie pas le bug que tu as trouvé, Yatis.)

J'ai fait marcher les timers supplémentaires de Casio ! On a donc sur SH4 (et donc sur Graph 90) :
- 3 timers précis à ~0.1 µs
- 6 timers précis à ~30 µs

J'ai monté un test assez solide pour tester tout ça : attendre 200 tranches de 50ms en changeant de timer à chaque tranche ! Je suis sensiblement convaincu que ça marche maintenant

Maintenant que j'ai implémenté les timers je vais pouvoir faire plusieurs choses cruciales :
- Des mesures de temps d'exécution réellement précises (100ns !)
- Donc un benchmarking très violent pour les applications limites en perfs (Windmill !)
- Améliorer le moteur de gris (couleurs légèrement plus stables)
- Mesurer la puissance de mon nouveau gestionnaire d'interruptions !

Ajouté le 01/08/2018 à 16:01 :
Une bonne chose faite : j'ai fait marcher tout ça sur SH3 également ! À quelques détails sur la façon dont le driver est structuré, s'il n'y a pas d'autres bugs, j'en ai fini avec les timers.

Je signale toutefois (si quelqu'un est intéressé par programmer du hardware) que les timers supplémentaires ont des comportements subtilement différents des timers normaux ; j'ai documenté les différences et adapté le code de gint mais c'est très fourbe et c'est ce qui m'a tenu en arrêt pas loin de deux mois.

Ajouté le 04/08/2018 à 17:56 :
Après avoir implémenté les timers sur Graph 90, j'ai remarqué que la fréquence que j'avais notée était surestimée. La fréquence réelle est un poil plus faible. Or j'ai tiré cette fréquence de calculs donnés par la doc qui marchent très bien sur Graph 75 SH4, et qui sont partagés par Ptune3.

Avant de pinger Sentaro21 sur ce problème, je veux m'assurer que les fréquences données par Ptune3 sont effectivement surestimées. Donc j'avais besoin de la RTC pour avoir un timer qui tourne à une fréquence bien connue d'avance.

J'ai donc porté mon ancien driver RTC sur SH4, puis - sans modification - sur Graph 90 et SH3. gint retrouve les fonctionnalités d'avant, mais cette fois en couleurs !

Plus de détails dans la RdP !

Ajouté le 04/08/2018 à 18:26 :
J'ai une autre bonne nouvelle.

Mon ancien gestionnaire d'interruptions arrivait à traiter 180'000 interruptions de timer par seconde. Il était en C et un peu bloated...

Mon nouveau gestionnaire, avec toutes les parties en assembleur, arrive à tenir 320'000 interruptions de timer par seconde !

La réactivité du gestionnaire d'interruptions est importante pour les applications qui exécuteront des tâches en boucle (son, transferts multijoueurs...). Le nouveau gestionnaire en assembleur devait améliorer ça : c'est chose faite !
DrakHors ligneRédacteurPoints: 1925 Défis: 40 Message

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


Good job!
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
NinestarsHors ligneMembrePoints: 2254 Défis: 22 Message

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


Bravo !
Je suis impressionné
Que veux-tu dire par "un benchmarking violent", en quoi ça pourrai me servir pour Windmill ?
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

Citer : Posté le 04/08/2018 22:14 | #


Merci à vous deux !

Si toutefois on arrivait à compiler Windmill sous gint... on pourrait se monter un profiler pour tracer quelles parties du code consomment le plus de temps de calcul, et avec une grande précision !
NinestarsHors ligneMembrePoints: 2254 Défis: 22 Message

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


Très bien ! Bah il faut qu'on essaye de le faire. La dernière fois ça n'avais pas marché.
LephenixnoirHors ligneAdministrateurPoints: 16017 Défis: 140 Message

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


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

Accessoirement tu peux récupérer le driver timer et basta. En l'occurrence gint n'est dans le principe pas nécessaire. L'OS peut emmerder mais avec un peu de chance non.
Pages : Précédente1 ... , 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ... 28Suivante

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