Forums Casio - Projets de programmation

Index du Forum > Projets de programmation > MicroPython sur Graph 35/75+E
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Posté le 09/05/2018 17:27

MicroPython sur Graph 35/75+E :

Page du programme : https://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=3603

Todo list :

- Corriger le bug de sauvegarde lors de la sauvegarde d'un fichier vide
- Faire les menus en image
- Module graphique
- Plus de mémoire pour les SH4

Ancien message
Cliquer pour enrouler
Parce que le python est très conseillé pour l'année prochaine, il serait bien de faire un port de MicroPython pour les graph monochromes.

Niveau faisabilité, c'est faisable :
- MicroPython demande 256k d'espace (la limite est de 512k donc on a de la chance) et 16 ko de ram (même pas besoin de taper dans les 256 ko des SH4)
- L'éditeur de texte serait tout simplement une version modifiée d'Edit, avec l'interface adaptée au Python (catalogue intégré, fonctions disponibles avec les F-keys, comme l'appli pour graph 90).

Du coup j'aimerais bien faire le port moi même, mais j'aurai sûrement besoin de votre aide :
- MicroPython ne compile que sous linux (ou en tout cas sûrement pas avec le SDK casio), du coup pour moi ça va être chiant voire impossible de le compiler
- J'ai regardé le port minimal (https://github.com/micropython/micropython/tree/master/ports/minimal) et je comprends que dalle à ce qu'il faudrait modifier sûrement les trucs GPIO, mais quoi d'autre ?

Si vous êtes partant pour ce projet, votre aide est la bienvenue




Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Dernier message de la page précédente :Posté le 13/11/2018 10:38 |
Zezombye a écrit :
Par contre, c'est dans la ram statique ça non ? Du coup j'ai tenté de faire :

char* heap = malloc(5000);


mais ça me fait une erreur chelou :

Tu as tout à fait raison, et la RAM statique fait 8 ko, donc c'est pas terrible. Pour ton problème, il te suffit d'écrire const char *heap; au début du fichier et ensuite heap = malloc(20000) tout au début de main(). S'il y a des constructeurs, fais-en un constructeur de plus haute priorité.
----------------------------------
Rise.



Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8 | Suivante

Critor
En ligne
Administrateur
Points: 975
Défis: 0
Message
Citer : Posté le 13/11/2018 19:39 | #
@Zezombye C'est stable, tu mets à jour ?
Hâte de tester si diverses choses marchent maintenant, et auquel cas ça méritera une annonce.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 13/11/2018 19:41 | #
Pas stable du tout : j'ai réussi pour l'instant à allouer 30 ko, mais y'a une grosse fuite de mémoire qui est apparemment que, quand on retourne sur l'éditeur après avoir exécuté un script, il alloue une 2ème fois la mémoire nécessaire pour l'éditeur.

Je ferai une release quand j'aurai réussi à faire tourner les 2 scripts du triconcours, là je pense que j'aurai un peu tout.
(et pour l'instant c'est la seule chose que j'ai faite depuis 2 mois )
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Critor
En ligne
Administrateur
Points: 975
Défis: 0
Message
Citer : Posté le 13/11/2018 19:46 | #
Ok, merci pour ta réponse.

Outre suffisamment de mémoire (quelques Ko devraient suffire, après tout ça marche sur NumWorks) il te faudra la gestion des entiers longs pour le script de Force.

Sur le script de Courage, il faudra aussi de préférence la gestion des flottants en double précision, pour que ça ne réponde pas n'importe quoi.
En plus d'un module graphique, mais ça tu peux toujours mettre en commentaire.
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 13/11/2018 19:56 | #
Je suppose que tu as mis des double partout Zezombye non ? Avec Python c'est plus simple...
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 15/11/2018 19:45 | #
j'ai réussi pour l'instant à allouer 30 ko, mais y'a une grosse fuite de mémoire


C'est sûr que, si je fais un malloc(30000) mais pas de free(), y'a une très grosse fuite de mémoire.

Du coup je commence les floats, en parallèle je fais aussi les MPZ (les entiers à taille infinie) mais me faut de l'aide du forum parce que selon MPy, c'est pas compatible : https://forum.micropython.org/viewtopic.php?f=3&t=5074&start=40#p31851

Ajouté le 15/11/2018 à 20:13 :
J'ai trouvé pour les MPZ (c'était juste un truc à modifier dans le makefile), du coup je peux calculer la factorielle de 50 sans problème (par contre faut pas trop en abuser : fact(100) fait une system error, et fact(69) a l'air de faire planter la calto )
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 15/11/2018 20:58 | #
Bah, euh, la factorielle de 100 ne fait "que" 158 chiffres de long, ça devrait être calculable quand même x)
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 16/11/2018 18:08 | #
C'est aussi peut-être un problème de récursion (même si dans ce cas il devrait mettre une erreur dans python et pas faire crasher le système...), je regarderai après les floats.
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 16/11/2018 18:52 | #
Ce n'est pas un problème de récursion ! Une récursion de profondeur 100 c'est rien du tout.
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 16/11/2018 19:18 | #
Voilà le problème des floats est réglé :



(je crois que c'est le 2ème truc le plus sale que j'ai fait, après avoir passé 2 variables dans une seule avec du bit shifting)
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 16/11/2018 19:42 | #
2**3.14

Ajouté le 16/11/2018 à 19:43 :
Pour être plus précis :
>>> pow
<built-in function pow>
>>> pow(2, 3.14)
8.815240927012887
>>> 2**3.14
8.815240927012887
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 16/11/2018 21:01 | #
Euh, ouais Darks a raison, pow() prend les exposants flottants, tu peux pas faire ça.

D'ailleurs tu as des float ou des double ? À ce stade il faut vraiment te poser des questions parce qu'il est probable que MICROPY_FLOAT_C_FUN(pow) soit là pour utiliser uniquement des float.
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 16/11/2018 21:06 | #
Rah mais dans ce cas précis, je remplace pow(10^x) avec x entier, ce qui est faisable avec une boucle for

Mais bon en fait je dois toujours implémenter pow(), vu que l'opérateur puissance (**) l'utilise. Par contre j'ai trouvé le saint graal : dans lib/libm_dbl y'a plein d'implémentations de fonctions de math.h standalone (c'est à dire exactement ce dont j'ai besoin), j'ai déjà repris leur implémentation de pow et ça marche parfaitement. (du coup j'ai viré mes boucles for alakon)

Là vu que le modulo sur les floats marchent toujours pas, j'en ai conjecturé que fmod() marchait pas non plus, et donc peut être le reste de math.h, du coup j'ai ajouté tous les fichiers de libm_dbl, j'essaie de compiler et normalement tout ce qui concerne les floats devrait marcher.

(MICROPY_FLOAT_C_FUN c'est un macro qui sélectionne la fonction en fonction de float/double, là j'ai mis double donc ça donne pow() mais si j'avais mis float ça aurait donné powf())
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 16/11/2018 21:14 | #
Zezombye a écrit :
(MICROPY_FLOAT_C_FUN c'est un macro qui sélectionne la fonction en fonction de float/double, là j'ai mis double donc ça donne pow() mais si j'avais mis float ça aurait donné powf())

Ok, tout va bien alors. Bien joué jusque-là !
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 26/11/2018 18:03 | #
Du coup j'aimerais mettre un module graphique avec comme fonctions :
- line(x1, y1, x2, y2, color=1)
- pxl(x, y, color=1)
- rect(x1, y1, x2, y2, color=1)
- circle(x1, y1, r, color=1)
et en gros toutes les fonctions de MonochromeLib (avec peut être même les BMP s'ils marchent).

Par contre, comment je fais pour switcher entre le shell (mode texte) et le mode graphique ? Toute fonction graphique bascule en mode graphique (et un print/input rebascule en mode texte), ou j'utilise des fonctions spéciales pour entrer/sortir du mode graphique ? Ca marche comment sur la numworks ?
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 26/11/2018 18:04 | #
Je crois que ça dessine par-dessus l'écran, ça fait bizarre. Regarde les tests de Critor sur la fractale de Mandelbrot.

Je serais d'avis que tu fasses deux VRAMs avec une commande pour passer de l'une à l'autre.
----------------------------------
Rise.
Critor
En ligne
Administrateur
Points: 975
Défis: 0
Message
Citer : Posté le 26/11/2018 18:26 | #
Sur la NumWorks, toute commande graphique fait basculer l'affichage en mode graphique, initialement un écran blanc.
Une fois le script terminé, la touche [annul] du clavier permet de revenir à l'affichage console.

Mais tu es libre de faire un autre choix.
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 26/11/2018 18:29 | #
Les deux ! Les deux ! Les deux !

(Pas la solution de facilité please)
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 26/11/2018 18:29 | #
Et on ne peut pas revenir au mode texte entre temps ?
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Critor
En ligne
Administrateur
Points: 975
Défis: 0
Message
Citer : Posté le 26/11/2018 18:43 | #
Pas à ma connaissance.
Ni avec print() ni avec input() en tous cas.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 26/11/2018 18:50 | #
Je trouve ça bof ça pourrait être utile.

Bon du coup :
- Toute utilisation d'une fonction graphique basculera sur le mode graphique
- Toute utilisation de print() ou input() basculera sur le mode texte
- Il y aura des fonctions pour basculer manuellement (c'est aussi pour faire plaisir à lephé, mais de toute façon j'allais les mettre parce que ça me coûte pas grand chose).
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE

Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8 | Suivante

Index du Forum > Projets de programmation > MicroPython sur Graph 35/75+E

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2018 | Il y a 25 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd