Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » libMicrofx : Remplacez fxlib pour faire des add-ins très légers.
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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 !


Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

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...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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.
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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...
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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:
Lephenixnoir a écrit :
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.
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 08/08/2024 17:31 | #


Il faut aussi utiliser sh-elf-gcc-ar pour créer l'archive :

commit 4363c6ad961a029ad828ef1269781db701731df6 (HEAD -> master)
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 :

void sclear() {
    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
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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.
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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 ?
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 08/08/2024 19:12 | #


Sympa le tuto, tout à fait efficace je pense. C'est quoi le crash louche à minuit ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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.
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message
Fcalva Hors ligne Membre Points: 600 Défis: 10 Message

Citer : Posté le 08/08/2024 20:25 | #


Le jeu fait quelle taille ?
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message
Fcalva Hors ligne Membre Points: 600 Défis: 10 Message

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...
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 08/08/2024 20:30 | #


Le header g3a prend 28 ko quoi qu'il arrive oui.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

Citer : Posté le 10/08/2024 14:02 | #


Mb88 a écrit :
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 ?
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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.
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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 !
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

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 !
Mb88 Hors ligne Rédacteur Points: 1211 Défis: 3 Message

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 143 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