» libMicrofx : Remplacez fxlib pour faire des add-ins très légers.
libMicrofx : Remplacez fxlib pour faire des add-ins très légers.
Posté le 14/01/2023 12:42
C'est une petite librairie qui pour l'instant est loin d'être terminée, qui permet de coder des petits add-ins très légers (1,2 Ko minimum avec -Os actuellement et 512 Ko max.).
Ce n'est pas réellement une alternative à gint, car libMicrofx utilise les syscalls et est donc pas très rapide. De plus, c'est une librairie avec le minimum de fonctions pour rester très légère, mais elle contiendra toute les fonctionnalités indispensables pour développer des add-ins et des petits jeux. Elle permet aussi aux habitués du basic casio de faire facilement des portages de leur jeux grâce à des fonctions similaires à celles du basic. Elle est sous la Unlicense pour que tout le monde peut l'utiliser comme il veut !
>> Tutoriel <<
Dernière version : v.0.3
Dès maintenant vous pouvez l'essayer en téléchargeant le code sur la branche master :
>> Téléchargement <<
>> Branche dev <<
Coder son permier add-in avec Microfx :
>> Getting started <<
Un grand merci à
Lephenixnoir et
Yatis pour leur aide !
Citer : Posté le 07/08/2024 21:47 | #
En lisant le code je remarque que tu ne compiles ni avec -ffunction-sections -Wl,--gc-sections ni avec -flto [-fno-builtins] donc dès que tu utilises une fonction de display.c tu es obligé de payer le code pour tous. De façon générale la LTO est recommandable pour réduire la taille du code (-10/15% sur les add-ins gint). Si jamais le but c'est de squeeze les octets sur le g1a...
Citer : Posté le 07/08/2024 22:38 | #
Oui, en codant le tutoriel j'ai ajouté plein de flags car il y en a un peu peu... Faut définitivement que j'en ajoute.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 07/08/2024 22:44 | #
J'ai d'ailleurs eu une idée pour donner la possibilité tester sur ordinateur sans émulateur: une librarie comme libMicrofx mais qui utilise la SDL etc. parce que là c'est énervant de tout le temps copier l'addin sur la calto parce que l'émulateur de Drakelec crashe dès le lancement de l'addin. Ce serait loin d'être optimal mais ce sera toujours mieux que rien, je pense...
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 08/08/2024 17:00 | #
Voilà, j'ai fini de coder le jeu. Je suis très fier de l'écran de titre que j'ai fait . Le tutoriel arrive bientôt (ouais le suspense dure encore ) !
EDIT:
En lisant le code je remarque que tu ne compiles ni avec -ffunction-sections -Wl,--gc-sections ni avec -flto [-fno-builtins] donc dès que tu utilises une fonction de display.c tu es obligé de payer le code pour tous. De façon générale la LTO est recommandable pour réduire la taille du code (-10/15% sur les add-ins gint). Si jamais le but c'est de squeeze les octets sur le g1a...
Si je mets toutes ces flags j'ai un addin vide . La LTO vire quasiment tout de libMicrofx, donc pas moyen de faire mieux là dessus. Par conte la LTO sur l'addin lui même n'a pas l'air de poser problème.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 08/08/2024 17:31 | #
Il faut aussi utiliser sh-elf-gcc-ar pour créer l'archive :
Author: Lephenixnoir <sebastien.michelland@protonmail.com>
Date: Thu Aug 8 17:31:22 2024 +0200
enable LTO
diff --git a/microfx_src/Makefile b/microfx_src/Makefile
index 4d3b39c..688f868 100644
--- a/microfx_src/Makefile
+++ b/microfx_src/Makefile
@@ -1,5 +1,5 @@
CC = sh-elf-gcc
-AR = sh-elf-ar
+AR = sh-elf-gcc-ar
OUT = libMicrofx.a
OUT_DIR = lib
@@ -15,7 +15,7 @@ SRC = src/start.c \
src/ext/img.c
OBJ = $(SRC:src/%=build/%.o)
-CFLAGS = -Os -Wall -Wextra -Wpedantic -Werror -std=c89
+CFLAGS = -Os -Wall -Wextra -Wpedantic -Werror -std=c89 -flto=auto -ffreestanding
BUILD = build
diff --git a/template/Makefile b/template/Makefile
index 92d4c38..d7a4a49 100644
--- a/template/Makefile
+++ b/template/Makefile
@@ -25,10 +25,10 @@ $(BIN): $(ELF)
sh-elf-objcopy -O binary build/$(ELF) build/$(BIN) -R .bss
$(ELF): $(OBJ) | $(LIB)/
- $(CC) $(OBJ) $(LIB)/libMicrofx.a -o $(BUILD)/$@ -nostdlib -T lib/fx98xx.ld -ffreestanding -mb -m3 -Os -Wa,--dsp -lgcc
+ $(CC) $(OBJ) $(LIB)/libMicrofx.a -o $(BUILD)/$@ -nostdlib -T lib/fx98xx.ld -flto=auto -ffreestanding -mb -m3 -Os -Wa,--dsp -lgcc
$(BUILD)/%.o: src/% | $(BUILD)/
- $(CC) -c $< -o $@ -Os -Ilib/include/ -std=c89
+ $(CC) -c $< -o $@ -Os -flto=auto -ffreestanding -Ilib/include/ -std=c89
.PRECIOUS: %/
Chez moi ça fait descendre la taille dans les ~1570 octets. On pourrait inliner les syscalls en les écrivant en C :
register int r0 __asm__("r0") = 0x143;
void (*sc)(void) = (void (*)(void))0x80010070;
(void)r0;
sc();
}
Mais comme ça force à charger r0 au site d'appel je suis pas sûr que ce soit plus rentable quand la taille des programmes augmente.
Note : devoir copier lib à chaque changement de la lib est une super mauvaise idée, à mon avis. J'ai passé 15 minutes à chercher pourquoi mon bordel marchait pas
Citer : Posté le 08/08/2024 17:40 | #
Oui j'ai prévu de changer pas mal de choses, les Makefiles ne sont pas pratiques: j'ai déjà du mettre un rm -fr build pour que tout soit bien recompilé, c'est loin d'être optimal. Pour la LTO je regarde ça plus tard, après avoir fini le tutoriel.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 08/08/2024 19:03 | #
J'ai ajouté un lien vers le tutoriel au post principal. Il n'est pas encore fini, mais il explique déjà comment avoir les paddle qui bougent.
Le tutoriel : https://git.planet-casio.com/mibi88/pong/src/branch/master/TUTORIAL_fr.md
Ps: Qu'est ce que vous en pensez ?
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 08/08/2024 19:12 | #
Sympa le tuto, tout à fait efficace je pense. C'est quoi le crash louche à minuit ?
Citer : Posté le 08/08/2024 19:14 | #
C'est pas louche, c'est que tgetticks donne le temps depuis minuit, et si il est 25h59 au début de la frame et après minuit ça va bloquer.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 08/08/2024 20:24 | # | Fichier joint
Une petite vidéo du jeu du tutoriel :
(c'est vraiment difficile de faire tenir une vidéo dans 2 mo.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 08/08/2024 20:25 | #
Le jeu fait quelle taille ?
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 08/08/2024 20:27 | #
4,3 Ko mais c'est sans la LTO.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 08/08/2024 20:29 | #
Pas mal, faut se dire que la version la plus compressée de mon Pong PE (Se servant uniquement de fonction extérieures donc) fait 1.5Ko
J'ai envie de voir pour faire un truc sans gint pour CG, mais après il y a les thumbnails qui prennent une place énorme...
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 08/08/2024 20:30 | #
Le header g3a prend 28 ko quoi qu'il arrive oui.
Citer : Posté le 10/08/2024 14:02 | #
Bon, j'ai accidentellement un peu pété la repo, mais j'ai réussi à tout repousser. Ça a juste fait disparaître les releases et un peu mis le bazar sur master, mais le dernier commit sur dev était aussi sur master donc c'est pas trop grave. Si un admin est capable de remettre la repo comme avant par je ne sais quelle magie ce serait cool .
En fait j'ai perdu tout un tas de commits, il manque sgetvram() par exemple dans display.c. Il manque aussi vmap etc. Comment est ce que je peux faire pour annuler ce push qui a tout cassé, ou est ce qu'un admin pourrait remettre la repo comme avant ?
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 10/08/2024 14:07 | #
C'est vraiment bizarre... Je pense que tout était à jour mais quand j'ai mis la LTO j'ai dû écraser des trucs... C'est le bazar
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 10/08/2024 15:18 | #
@Mb88 La question clé c'est est-ce que tu as encore les commits. git reflog t'affiche la liste des commits/branches sur laquelle tu as été récemment. Vois si les commits qui te manquent sont pas là ; normalement Git les supprime 30 jours après qu'ils aient été jertés de leurs branches respectives, donc ils doivent encore être là. Si tu les trouves, tu peux les cherry-pick dans l'ordre.
Citer : Posté le 10/08/2024 15:25 | #
Je ne les ai pas , mais j'ai réussi à remettre les commits manquants donc c'est pas trop grave à priori.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 24/08/2024 14:30 | #
J'ai continué à écrire le tutoriel, il y a quelque coquilles que j'ai à corriger, mais il devrait être tout de même compréhensible.
Bonne lecture !
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 24/08/2024 21:09 | #
Je viens de finir le tutoriel. Dites moi si vous trouvez des erreurs, des fautes de frappes ou de français. Enjoy !
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 25/08/2024 13:33 | #
J'ai publié le tutoriel comme topic https://www.planet-casio.com/Fr/forums/topic17848-1-tutoriel-dutilisation-de-libmicrofx.html pour qu'il soit plus visible que le tutoriel dans le repo.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html