Démos Graph 90—à vos pinceaux !
Posté le 08/08/2024 23:55
Tout à l'heure sur la shout avec
Mb88 on repassait sur l'idée de faire des démos (voir
scène démo si vous ne connaissez pas). Essentiellement, c'est des programmes minuscules (aussi petits que possible) qui font des trucs graphiques stylés.
Sur Graph 90, on ne peut pas trop faire ça parce que de toute façon un add-in doit faire 28 ko rien que pour mettre l'en-tête du g3a avec les icônes... donc vous imaginez que les démos de 4 ko c'est pas la peine d'y penser. ^^"
Du coup j'ai écrit un petit programme, "Prizm Demos Loader" (PDL) qui permet essentiellement de charger des binaires purs de petite taille pour les exécuter :
Prizm Demos Loader

Comme le bare metal c'est quand même un peu chiant, le chargeur fournit à la démo :
- Un pointeur VRAM et un pointeur vers la fonction d'affichage (dupdate) ;
- Une variable qui compte automatiquement le temps écoulé en millisecondes.
Avec le loader il y a aussi une démo d'exemple toute bête qui fait une sorte de fondu de couleurs pendant 4 secondes . Quand on le compile ça donne un fichier
.pdl qui est juste un binaire pur (124 octets, plutôt optimisé !) et qu'on peut lancer dans l'add-in de chargement.
Voilà c'est très primitif encore mais c'est pour lancer un peu le mouvement. Si vous avez des commentaires ou pensez qu'on devrait s'y prendre différemment, allez-y. Je serais intéressé pour faire une mini-compétition de démos, genre 1 ko comme clin d’œil à la 1kBCJ, s'il y a des preneurs !
Télécharger pour tester :
PrizmDemos.g3a
exdemo.pdl

Copier les deux fichiers sur la calto, lancer l'add-in "PrizmDemos", sélectionner "example.pdl" (EXE)
Fichier joint
Citer : Posté le 20/08/2024 11:28 | #
Wow, j'ai l'impression que tu nous prépares un truc incroyable
Citer : Posté le 21/08/2024 20:15 | # |
Fichier joint
Un petit truc drôle (https://git.planet-casio.com/mibi88/lol_effect/src/branch/master/main.c)
Je vous laisse lire ce commentaire :
/* loleffect - A demoscene effect I made by accident.
* by Mibi88 <mbcontact50@gmail.com>
*
* A cool demoscene effect I made by accident: I wanted to draw a rectangle to
* test a small piece of code which does double buffering with Xlib, but my code
* to draw the rectangle is not working correctly which creates some funny
* graphics.
*
* It runs very badly on the calculator because it's unoptimized, but when I
* tried to optimize it, I fixed the rectangle rendering :(, and I was too lazy
* to retry.
*
* You can freely reuse this code, feel free to put it in your demoscene :D.
*/
Une vidéo (de mauvaise qualité, je sais :/ :
Citer : Posté le 21/08/2024 20:19 | #
Ces moments où les trucs aléatoires sont jolis aussi. :P C'est là le hack qui est drôle, parce que dans les jeux tu peux aussi parfois faire des trucs randoms rapides qui en fait sont cools.
Note: ces programmes s'appellent des démos, la demoscene c'est l'écosystème des gens qui font des démos.
Citer : Posté le 21/08/2024 20:22 | #
Note: ces programmes s'appellent des démos, la demoscene c'est l'écosystème des gens qui font des démos.
Ah, je ne savais pas qu'il y avait une différence
Citer : Posté le 24/08/2024 00:20 | #
(Contexte : ce post https://www.planet-casio.com/Fr/forums/topic17829-3-demos-graph-90a-vos-pinceaux.html#197744)
J'ai pas fini, mais update. J'ai optimisé le truc pas mal (genre à donf') et là tout de suite pour le résultat ci-dessus il me faut 4 ms avec la version assembleur, soit ~5 fois plus rapide qu'au post précédent. J'ai besoin de cette vitesse parce que dans l'animation y'a 5 "piliers" de ce genre de différentes tailles plus des traces au sol, donc faut pas que ça traîne. Et encore j'exploite pas la symétrie dans l'immédiat, sinon ça divise presque encore en deux.
J'ai tellement pas fini que j'ai pas encore étudié la question de la taille du tout... là tout de suite le binaire fait 30 ko (en comptant gint, sans compter le header g3a) mais sans l'interface de debug y'a que genre 400 lignes de code ça devrait passer.
Citer : Posté le 24/08/2024 12:11 | # |
Fichier joint
Voilà le délire, donc. Manque de l'interpolation, éviter des interférences entre les différents "piliers", des traces aux sol, des particules, etc. mais déjà y'a de quoi. Je pense que je ferai juste cet effet du coup, et ensuite j'essaierai de faire tenir ça sur 4k.
Citer : Posté le 03/09/2024 21:29 | # |
Fichier joint
J'avais besoin de tester que j'ai pas fait de la merde en autorisant l'upload des pdl.
Alors voilà un petit pattern qui change.
Les sources sont sur la forge
Citer : Posté le 24/05/2025 22:52 | #
Plop, y a-t-il toujours des gens intéressés par un concours de démos ? On se demande avec SlyVTT si on en ferait pas un "officiel" avec des lots à gagner.
Citer : Posté le 24/05/2025 23:31 | #
Je vais essayer de voir ca demain mais pourquoi pas
Sinon mes chats sont trop beaux.
Citer : Posté le 31/05/2025 10:46 | #
Je me suis remis vite fait sur le Prizm Demo Loader et il faut qu'on le fasse évoluer pour suivre l'évolution de JustUI,
On a deux petits JSCENE_KEY à changer en JWIDGET_KEY dans le main de l'addin et ça passe crème.
Je pense que la "Boss Key" n'a finalement pas été implémentée pour sortir d'une démo.
Je ferai les 2/3 modifications et ajouts et proposerai une PR dans la journée pour être en ligne avec les discussions reprises dans le fil ci-avant.
Citer : Posté le 31/05/2025 11:16 | #
Je corrige, la "Boss Key" avait été mise en place et mappée sur la touche EXIT.
J'ai corrigé la gestion de l'interface pour aligner sur la dernière version de JustUI.
Citer : Posté le 31/05/2025 16:12 | #
Faudrait que je finisse le truc de démo push cet été.
Citer : Posté le 31/05/2025 16:26 | #
Merci Sly, c'est fusionné
Citer : Posté le 02/06/2025 16:49 | #
Hello
J'ai voulu tenter une démo pour me remettre au C, et j'ai un soucis au niveau de srand je crois :
Voici le code, il est ultra simple j'avais juste commencé à modifier la démo d'exemple (celle avec des dégradés successifs qui est include dans la repo)
#include <stdint.h>
#include <stdlib.h>
#include <time.h>
#include "../pdl.h"
PDL_MAIN int main(void)
{
srand( time(NULL) );
// pdl.h explains why you need and how you could get rid of it
// TL;DR If you have no globals ininitialized to 0 you can remove
PDL_clear_bss();
uint16_t *vram = PDL->vram;
while(PDL->time_ms <= 4000) {
for(int i = 0; i < 396 * 224; i++)
if( rand() % 2 == 1 ) vram[i] = 0x001F; //Bleu de test....
PDL->dupdate();
}
return 0;
}
La compilation passe le stade des erreurs syntaxiques mais j'ai ça à la fin :
<artificial>:(.text.entry+0x208): undefined reference to `_fxlibc_hal_rawtime'
collect2: error: ld returned 1 exit status
make: *** [Makefile:9: exdemo.pdl] Error 1
Le but ici était de simplement remplir la vram de manière aléatoire avec de la couleur bleue (franchement le rgb565 c'es chiantttttt) , et un simple randint(0,1) == 1 en test conditionnel )
Passé ici il y a peu. ಥ‿ಥ
Jouez à Mario sans arrêt sur votre Casio !
City Heroes
Piano Casio
Micro GIMP
Citer : Posté le 02/06/2025 16:54 | #
De loin on dirait que tu linkes avec la libc, mais la libc ne fonctionne que si tu fournis quelques opérations élémentaires, en l'occurrence la fonction fxlibc_hal_rawtime() est supposé renvoyer l'heure courante.
Citer : Posté le 02/06/2025 16:55 | #
De loin on dirait que tu linkes avec la libc, mais la libc ne fonctionne que si tu fournis quelques opérations élémentaires, en l'occurrence la fonction fxlibc_hal_rawtime() est supposé renvoyer l'heure courante.
Okay, du coup je remplace time(NULL) par fxlibc_hal_rawtime() c'est ça ? 🤔 (j'ai aucune idée sur ce coup ci)
Passé ici il y a peu. ಥ‿ಥ
Jouez à Mario sans arrêt sur votre Casio !
City Heroes
Piano Casio
Micro GIMP
Citer : Posté le 02/06/2025 17:00 | #
Non c'est pas ça. En gros la fxlibc contient le code permettant de découper le temps en date+heure et les opérations classiques dessus, mais elle a pas de mécanisme de base pour acquérir l'heure courante. Dans un add-in normal c'est gint qui fournit ça via la RTC. Mais là t'as pas gint donc tu es supposé fournir fxlibc_hal_rawtime() dont la libc se sert pour implémenter time(). Et sur un ordi elle demande à Windows/Linux directement.
Donc la question persiste : comment obtenir une info de temps pour servir de compteur aléatoire. Tu peux aller lire la RTC toi-même. Tu peux aussi utiliser le timer fourni par PDL (mais il risque de ne pas changer beaucoup d'une exécution à l'autre). Et une fois que tu auras cette info, pas besoin de time(), tu pourras initialiser le générateur aléatoire avec directement.
Citer : Posté le 02/06/2025 17:06 | #
Tu peux aussi utiliser le timer fourni par PDL (mais il risque de ne pas changer beaucoup d'une exécution à l'autre). Et une fois que tu auras cette info, pas besoin de time(), tu pourras initialiser le générateur aléatoire avec directement.
Je vais rester sur ça je penses, c'est pas une mauvaise idée
Passé ici il y a peu. ಥ‿ಥ
Jouez à Mario sans arrêt sur votre Casio !
City Heroes
Piano Casio
Micro GIMP
Citer : Posté le 02/06/2025 17:08 | #
PDL est avant tout fait pour faire des démos petites, donc lephé n'a même pas implémenté de fonctions pour lire le clavier par exemple. Jusqu'ici ça n'a que été utilisé pour faire des programmes jolis. Et d'alleurs n'oublie pas d'initialiser la région BSS: https://www.planet-casio.com/Fr/forums/topic17829-3-demos-graph-90a-vos-pinceaux.html#197708.