PythonExtra est un add-in Python alternatif pour (à ce stade) Graph 35+E II, Prizm et Graph 90+E. L'objectif est de fournir plus de fonctionnalités : modules standard, getkey(), fonctions de dessin plus performantes, etc.
Compile pour Graph 90+E (fx-CG 10/20/50) et Graph 35+E II (fx-9860G III)
Peu de RAM sur Graph 35+E II (c'est difficile d'en trouver sur ce modèle)
Un shell pas trop mal (saisie rapide, scrolling) avec de bonnes performances
Plein de modules standard
array, builtins, cmath, collections, io, math, random, struct, sys, time
Le module spécifique CASIO : casioplot (fidèle à part sur les polices)
Un nouveau module gint avec les fonctionnalités avancées de gint :
Pour l'instant, une bonne partie de <gint/display.h> et <gint/keyboard.h>
Donc getkey() (attente de touche) ainsi que keydown() (test instantané) !
Et des fonctions de dessin rapides comme dline() ou drect()
Le plan actuel :
Être sensiblement compatible avec l'appli Python officielle.
Pousser les fonctionnalités ajoutées pour vraiment relever le niveau de Python !
Si du temps de développement se débloque : support autres Graph mono (pas de promesses).
Updates et screenshots à venir. Je n'ai pas l'intention d'implémenter un million de fonctionnalités, juste ce qu'il faut pour s'assurer que ça ne finisse pas mal documenté et non maintenu comme CasioPython.
Dans l'exemple ci-dessous (réalisé par Mb88), un Flappy Bird déjà bien optimisé (dessin partiel etc, à gauche) est accéléré un bon gros coup en utilisant PythonExtra et le module gint pour le dessin (à droite).
Contexte historique
Aux journées APMEP 2022, redgl0w racontait comment le port MicroPython pour Numworks n'était finalement pas super difficile. Moi je parlais de comment un port maison résoudrait le problème de getkey(), et Critor m'a convaincu d'essayer sur-le-champ.
En fin de compte, j'ai clôné MicroPython Dimanche à midi et à 1 heure du matin j'avais un port fonctionnel avec getkey() sur ma Graph 90+E (que j'ai d'ailleurs montré à CASIO Lundi, pour la démo). Comme quoi, des fois ça marche tout seul !
(Enfin, le début marche tout seul. Faire une bonne UI et gérer tous les détails ensuite c'est une autre paire de manches !)
from gint import *
from utime import *
from urandom import *
def carre(x,y,c,k=3):
drect(x,y,x+c,y+c,k)
dgray(DGRAY_ON)
dupdate() # j'ai rajouté cette ligne !! (swap avec ligne suivante)
dclear(C_WHITE)
for i in range(16):
carre(randint(10,120),randint(10,50),randint(5,20),randint(0,3))
dupdate()
sleep_ms(200)
dgray(DGRAY_OFF)
getkey()
donne le même problème que le code initial de Ptitjoz...
Mystère et boule de gomme ...
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Je sais pas s'il y a beaucoup de façons d'interpréter « au début du programme avant tout le reste ». Mais le test que tu as fait aurait dû être efficace aussi. Je me demandais s'il y avait une interruption avec le dessin du shell (que l'on empêche en balançant dupdate() au début du programme), mais visiblement non.
(Edit: J'avais oublié que l'import du module gint passe en mode graphique aussi, donc clairement c'est pas ça.)
Sinon, ce que je vois c'est que les bandes sont blanches puis noires ce qui correspond à une valeur en mémoire de 0x55555555. Autrement dit, les VRAM du moteur de gris ne sont très probablement pas initialisées. Or, dclear() devrait les mettre à zéro. Donc faut chercher ce qui se peut se passer de travers du côté de dclear(), qui a probablement été vider la VRAM mono. (Le moteur de gris a 4 VRAM et l'une d'entre elles est la VRAM mono, mais elle ne contribue qu'à un frame sur deux).
Lephenixnoir a écrit : Je sais pas s'il y a beaucoup de façons d'interpréter « au début du programme avant tout le reste ». Mais le test que tu as fait aurait dû être efficace aussi. Je me demandais s'il y avait une interruption avec le dessin du shell (que l'on empêche en balançant dupdate() au début du programme), mais visiblement non.
La question, mal formulée certes portait plus sur avant ou après le dgray() car il est stipulé que c'est le dupdate() suivant qui marque la prise effective de fonctionnement du moteur de gris.
Lephenixnoir a écrit : Sinon, ce que je vois c'est que les bandes sont blanches puis noires ce qui correspond à une valeur en mémoire de 0x55555555. Autrement dit, les VRAM du moteur de gris ne sont très probablement pas initialisées. Or, dclear() devrait les mettre à zéro. Donc faut chercher ce qui se peut se passer de travers du côté de dclear(), qui a probablement été vider la VRAM mono. (Le moteur de gris a 4 VRAM et l'une d'entre elles est la VRAM mono, mais elle ne contribue qu'à un frame sur deux).
J'essaierai d'y jeter un œil ce soir quand j'aurai mon PC perso sous la main. Parès faut voir si ça vient de PythonExtra ou de gint, je testerai le même programme en C pour voir si on a le même artéfact.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
ah ça n'a pas l'air facile de trouver la cause. Courage à vous car je ne peux pas vous aider (sauf à faire des tests). Merci en tous cas de prendre en charge ce bug
Ps: Je suis assez content de ce font, je pense que malgré sa taille il reste assez lisible. Comme j'ai proposé dans le ticket #21 de PythonExtra je pense qu'il ferait un bon font à chasse fixe pour PythonExtra.
Eh, pas mal ! La sélection ça fait vraiment bonne impression. La police est améliorable à mon avis, enfin c'est un détail ^^" L'espacement horizontal énorme c'est à cause des lettres larges type m ?
Ah bon, je suis particulièrement fier de la police
Je suis content de la taille des lettres très régulières et de leurs formes.
Lephenixnoir a écrit : L'espacement horizontal énorme c'est à cause des lettres larges type m ?
Oui, mais je trouvais que c'est plus joli avec des lettres plus fines.
J'ai commencé à coder un explorateur de fichier pour pouvoir ouvrir/enregistrer des fichiers, mais c'est pas encore complètement au point… J'ai un segfault à résoudre et c'est plus difficile sans gdb:
J'ai une erreur
../../gdb-16.2/sim/sh/interp.c:1731:12: erreur: affectation à « void (*)(void) » depuis le type pointeur « __sighandler_t » {alias « void (*)(int) »} qui est incompatible [-Wincompatible-pointer-types]
quand gdb est compilé en l'installant avec giteapc.
Hier j'ai fini de coder l'explorateur de fichiers et le chargement de fichiers:
Ps: Merci à lephé pour m'avoir beaucoup aidé à faire fonctionner la capture vidéo.
EDIT:
J'ai pas précisé mais je vise avant tout les calculatrices monochromes (Sly a l'air d'être en train de faire un truc super stylé pour les calculatrices couleur), mais je peux aussi le compiler pour cg, et ça marche très bien, comme vous pouvez le voir sur la vidéo (la police est juste assez petite ).
Il y a maintenant des barres de défilement, un menu qui peut être ouvert gardant MENU enfoncé pour pouvoir ouvrir un fichier, enregistrer (ce n'est pas encore implémenté), etc.
Il y a eu un petit bug quand j'ai ouvert un fichier dans la vidéo, il faut encore que je le corrige.
Je compte avoir fini d'implémenter toutes les fonctionnalités essentielles d'ici la fin de ce week-end. Il ne reste plus que l'enregistrement que je considère comme essentiel donc ça devrait aller vite (si j'ai le temps j'ajouterai peut-être déjà de l'indentation automatique et du copier/coller).
Les amis, moi aussi je bosse en ce moment.
J'ai commencé cette semaine à regarder du côté des technologies "web" que je ne maîtrise pas du tout à la base.
Voici un petit PoC de convertisseur online d'assets pour PythonExtra.
Ca utilise flask/html et fait tourner sur le serveur fxconv sans modification (ce qui permettra de facilement suivre les modifications lors des MaJ).pour le moment, j'ai juste implémenté la conversion des fonts. Ce n'est pas très joli pour le moment, faudra mettre en forme par la suite, on est vraiment sur une démo de la technologie.
Voici une vidéo de conversion de la font shmup.
Je dois tester pour les bugs.
Je prévois de faire pour les images, ce qui sera nettement plus simple, car il y a moins d'options à considérer.
Quand ce sera testé correctement, je mettrais en ligne.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Ps: Les retours sont bienvenus, je sais qu'il n'est pas super intuitif, mais là pour ça une fois qu'on a compris comment l'utiliser on devrait être plus efficace qu'avec l'éditeur python intégré (ou du moins dès que j'aurais ajouté l'indentation automatique).
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
Citer : Posté le 05/05/2025 15:20 | #
Ce code:
from utime import *
from urandom import *
def carre(x,y,c,k=3):
drect(x,y,x+c,y+c,k)
dgray(DGRAY_ON)
dupdate() # j'ai rajouté cette ligne !! (swap avec ligne suivante)
dclear(C_WHITE)
for i in range(16):
carre(randint(10,120),randint(10,50),randint(5,20),randint(0,3))
dupdate()
sleep_ms(200)
dgray(DGRAY_OFF)
getkey()
donne le même problème que le code initial de Ptitjoz...
Mystère et boule de gomme ...
Citer : Posté le 05/05/2025 15:29 | #
Je sais pas s'il y a beaucoup de façons d'interpréter « au début du programme avant tout le reste ».
(Edit: J'avais oublié que l'import du module gint passe en mode graphique aussi, donc clairement c'est pas ça.)
Sinon, ce que je vois c'est que les bandes sont blanches puis noires ce qui correspond à une valeur en mémoire de 0x55555555. Autrement dit, les VRAM du moteur de gris ne sont très probablement pas initialisées. Or, dclear() devrait les mettre à zéro. Donc faut chercher ce qui se peut se passer de travers du côté de dclear(), qui a probablement été vider la VRAM mono. (Le moteur de gris a 4 VRAM et l'une d'entre elles est la VRAM mono, mais elle ne contribue qu'à un frame sur deux).
Citer : Posté le 05/05/2025 15:36 | #
Je sais pas s'il y a beaucoup de façons d'interpréter « au début du programme avant tout le reste ».
La question, mal formulée certes
Sinon, ce que je vois c'est que les bandes sont blanches puis noires ce qui correspond à une valeur en mémoire de 0x55555555. Autrement dit, les VRAM du moteur de gris ne sont très probablement pas initialisées. Or, dclear() devrait les mettre à zéro. Donc faut chercher ce qui se peut se passer de travers du côté de dclear(), qui a probablement été vider la VRAM mono. (Le moteur de gris a 4 VRAM et l'une d'entre elles est la VRAM mono, mais elle ne contribue qu'à un frame sur deux).
J'essaierai d'y jeter un œil ce soir quand j'aurai mon PC perso sous la main. Parès faut voir si ça vient de PythonExtra ou de gint, je testerai le même programme en C pour voir si on a le même artéfact.
Citer : Posté le 05/05/2025 20:55 | #
ah ça n'a pas l'air facile de trouver la cause. Courage à vous car je ne peux pas vous aider (sauf à faire des tests). Merci en tous cas de prendre en charge ce bug
Citer : Posté le 08/05/2025 16:23 | # |
Fichier joint
J'ai commencé à coder un éditeur de texte pour calculatrices monochromes. Il faut encore que j'y ajoute:
- Enregistrer et ouvrir des fichiers
- Copier/coller
- Undo/redo
- Rechercher/rempacer
- De la coloration syntaxique
Voilà où j'en suis pour l'instant:
EDIT:
Et plus tard faudrait aussi que j'ajoute un mode remplacer: actuellement on ne peut que insérer.
Et le code de mon éditeur est disponible ici: https://git.planet-casio.com/mibi88/fxpyedit
Ps: Je suis assez content de ce font, je pense que malgré sa taille il reste assez lisible. Comme j'ai proposé dans le ticket #21 de PythonExtra je pense qu'il ferait un bon font à chasse fixe pour PythonExtra.
Citer : Posté le 09/05/2025 00:20 | #
Eh, pas mal ! La sélection ça fait vraiment bonne impression. La police est améliorable à mon avis, enfin c'est un détail ^^" L'espacement horizontal énorme c'est à cause des lettres larges type m ?
Citer : Posté le 09/05/2025 16:10 | #
Ah bon, je suis particulièrement fier de la police
Je suis content de la taille des lettres très régulières et de leurs formes.
L'espacement horizontal énorme c'est à cause des lettres larges type m ?
Oui, mais je trouvais que c'est plus joli avec des lettres plus fines.
J'ai commencé à coder un explorateur de fichier pour pouvoir ouvrir/enregistrer des fichiers, mais c'est pas encore complètement au point… J'ai un segfault à résoudre et c'est plus difficile sans gdb:
J'ai une erreur
Citer : Posté le 10/05/2025 13:41 | # |
Fichier joint
Hier j'ai fini de coder l'explorateur de fichiers et le chargement de fichiers:
Ps: Merci à lephé pour m'avoir beaucoup aidé à faire fonctionner la capture vidéo.
EDIT:
J'ai pas précisé mais je vise avant tout les calculatrices monochromes (Sly a l'air d'être en train de faire un truc super stylé pour les calculatrices couleur), mais je peux aussi le compiler pour cg, et ça marche très bien, comme vous pouvez le voir sur la vidéo (la police est juste assez petite
Citer : Posté le 10/05/2025 22:31 | # |
Fichier joint
Il y a maintenant des barres de défilement, un menu qui peut être ouvert gardant MENU enfoncé pour pouvoir ouvrir un fichier, enregistrer (ce n'est pas encore implémenté), etc.
Il y a eu un petit bug quand j'ai ouvert un fichier dans la vidéo, il faut encore que je le corrige.
Je compte avoir fini d'implémenter toutes les fonctionnalités essentielles d'ici la fin de ce week-end. Il ne reste plus que l'enregistrement que je considère comme essentiel donc ça devrait aller vite
Citer : Posté le 11/05/2025 10:12 | #
Les amis, moi aussi je bosse en ce moment.
J'ai commencé cette semaine à regarder du côté des technologies "web" que je ne maîtrise pas du tout à la base.
Voici un petit PoC de convertisseur online d'assets pour PythonExtra.
Ca utilise flask/html et fait tourner sur le serveur fxconv sans modification (ce qui permettra de facilement suivre les modifications lors des MaJ).pour le moment, j'ai juste implémenté la conversion des fonts. Ce n'est pas très joli pour le moment, faudra mettre en forme par la suite, on est vraiment sur une démo de la technologie.
Voici une vidéo de conversion de la font shmup.
Je dois tester pour les bugs.
Je prévois de faire pour les images, ce qui sera nettement plus simple, car il y a moins d'options à considérer.
Quand ce sera testé correctement, je mettrais en ligne.
Citer : Posté le 11/05/2025 17:20 | # |
Fichier joint
FxPyEdit marche enfin entièrement!
EDIT:
J'ai encore corrigé un petit bug.
Vous pouvez trouver des builds ici: https://git.planet-casio.com/mibi88/fxpyedit/releases/tag/v.1.0a1 . Il n'est peut être pas super intuitif a utiliser est est probablement encore truffé de bugs, donc à utiliser à vos risques et périls
Ps: Les retours sont bienvenus, je sais qu'il n'est pas super intuitif, mais là pour ça une fois qu'on a compris comment l'utiliser on devrait être plus efficace qu'avec l'éditeur python intégré (ou du moins dès que j'aurais ajouté l'indentation automatique).
Citer : Posté le 14/05/2025 18:50 | # |
Fichier joint
FxPyEdit s'améliore de plus en plus, vous pouvez voir les dernières améliorations dans la vidéo
Citer : Posté le 14/05/2025 18:53 | #
Nice ! Si tu veux faire une capture je te l'ajoute au petit carroussel en haut !
Citer : Posté le 14/05/2025 18:54 | #
Je ne comprends pas, je viens d'en envoyer une…
Citer : Posté le 14/05/2025 19:00 | #
... j'allais dire une capture d'écran, mais en fait y'a pas de raison que je mette pas la vidéo. Je suis pas réveillé, tkt !
Citer : Posté le 14/05/2025 19:03 | # |
Fichier joint
... j'allais dire une capture d'écran
Ça marche aussi:
Je suis pas réveillé, tkt !
Je comprends, je ne le suis pas non plus
Citer : Posté le 14/05/2025 19:03 | #
Voiiiilà, c'est fait !