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.
Menu
Calculatrices
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC
Liens
¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Utilitaires >> Graph 35+USB/75(+E)/85/95 SD >> Add-ins >> Casio_asm
Casio_asm
Version : 0.9 Taille : 57228 octets Ajouté le : 2018-06-27 12:40 Modifié le : 2018-06-29 11:01
Auteur et posteur :
NatnatHors ligneMembrePoints: 73 Défis: 0 Message
Aucune image disponible
Nombre de visites sur cette page : 2934
Score au progrank : 21
Pas encore de note !
Vous devez être connecté(e) pour noter (inscription).
693 téléchargements | Soumettre un test


A cause du changement de processeur des nouvelles Graph 35+ USB, 75 et 95 SD, de nombreux addins sont incompatibles avec ces calculatrices.
Rendre un addin compatible - Plus d'informations sur ce problème - Liste des addins compatibles

Description :

Le BASIC Casio est lent. C'est un fait. Le C et l'ASM sont rapides mais il faut le SDK de Casio ou la toolchain GCC sur PC.
Donc je vous présente Casio_asm, un projet (encore incomplet mais globalement fonctionnel) de processeur virtuel et d'assembleur qui tourne aussi bien sur Casio que sur PC.

L'idée, c'est de créer un programme en un langage qui sera ensuite assemblé en bytecode (comme Java, mais plus proche de la machine). Ensuite, on peut executer ce bytecode avec la VM fournie. L'assembleur et la VM tournent tous les deux sur Casio pour être utilisables en cours et sur PC pour le debug plus facile.

On a accès à plusieurs fonctionnalités intéressantes absentes du BASIC:
-> gestion des fichiers (partielle, mais quand même)
-> une grande région de RAM (je sais pas exactement combien la Casio va nous laisser utiliser, mais j'arrive à faire pas mal de trucs avec 1ko, et on devrait pouvoir allouer au moins 10 fois ça)
-> le clavier sur évenements (le processeur ne se met pas vraiment en pause sur Casio tant que je passe pas l'addin sur Gint, mais sur PC, si)
-> des fonctions graphiques bien plus rapides (et on dessine sur la VRAM, pas l'écran)
-> des timers à venir

En revanche, le programme n'est toujours pas fini, et peut crasher dans certains cas ou si on execute certaines instructions pas encore implémentées correctement. De plus, certaines fonctionalités ne marchent tout simplement pas.

Le programme tourne sur SH4. Normalement, il devrait aussi tourner sur SH3, mais je n'ai pas de quoi vérifier, si quelqu'un pouvait tester, ça serait sympa

Programmé et compilé sur Linux avec GCC 8.1.0. NE COMPILE PAS sur le SDK de Casio qui est resté bloqué en C89. Devrait compiler sur les anciennes versions de GCC.

Repo GitLab du projet
Topic dans le forum


Commentaires :


NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1243 Défis: 54 Message
Posté le 27-06-2018 à 22:08 | #
Salut !
Je dois dire que c'est plutôt impressionnant d'avoir ça qui tombe ici, même sans avoir encore testé ça encore sur machine, à la lecture de la doc et de la structure du projet, la machine virtuelle a l'air bien poussée ! Ça fait plaisir de voir des gens qui développent des trucs propres et bien construits, avec doc et GCC à l'appui…
Je pense que ça intéressera bien tout ça @LePhénixNoir ou peut être même @Julese50 qui sont sans doutes les plus porté⋅e⋅s sur ces aspects là de la commu'.

J'ai jeté un coup d'œil, je l'espère assez attentif, à la doc, et justement je n'ai pas trouvé d'infos correspondant à une présence de flags, pour détecter overflow ou récupérer les résultats des comparaisons par exemple, on a tout de même accès à ces informations d'une manière ou d'une autre ?

La ToDo list est aussi assez alléchante, on attend le plongement dans gint de tout ça !

Pour le Gitlab, il me semble que c'est un problème qui survient oui, le mieux c'est de poker @Dark Storm, ou @Breizh_Craft, qui auront sans doute le bon palliatif à ce mail de confirmation.
LephenixnoirEn ligneAdministrateurPoints: 24699 Défis: 170 Message
Posté le 28-06-2018 à 07:24 | #
Les commentaires de programmes ne sont pas trop fréquentés en comparaison avec le forum. Si tu envisages de donner des infos de plus ça aurait plus de visibilité dans cette section.

Un truc qui n'était pas clair du tout pour moi en première lecture c'est le fait que tu fournis juste la machine virtuelle (moi j'étais parti sur une alternative au Basic à cause de l'introduction)...

Comment mets-tu le clavier sur écoute ? Des timers ?

Saleté de Gitlab, tous les membres ont ce problème. Si tu me donnes ton pseudo je peux bypasser la phase de confirmation, mais les mails suivants ne t'arriveront probablement pas non plus donc ne compte pas sur les notifs' par mail.
NatnatHors ligneMembrePoints: 73 Défis: 0 Message
Posté le 28-06-2018 à 11:35 | #
Nemhardy a écrit :
propres et bien construits

On parle bien de la même chose? C'est certes plus propre que mes anciens projets, mais de là à dire que c'est propre et bien construit... Même le système de build est à refaire...

Nemhardy a écrit :
J'ai jeté un coup d'œil, je l'espère assez attentif, à la doc, et justement je n'ai pas trouvé d'infos correspondant à une présence de flags, pour détecter overflow ou récupérer les résultats des comparaisons par exemple, on a tout de même accès à ces informations d'une manière ou d'une autre ?

Effectivement, il n'y a bel et bien pas de flags... L'overflow n'est pas détectable, il faut bel et bien que je change ça. Pour les résultats de comparaison, je pousse un 1 ou un 0 dans le stack, qui sera ensuite utilisé comme argument par les instructions de saut, ou directement pour incrémenter conditionnellement une variable si il faut.

Lephenixnoir a écrit :
Les commentaires de programmes ne sont pas trop fréquentés en comparaison avec le forum. Si tu envisages de donner des infos de plus ça aurait plus de visibilité dans cette section.

Je créé le topic dans quelques secondes

Lephenixnoir a écrit :
Un truc qui n'était pas clair du tout pour moi en première lecture c'est le fait que tu fournis juste la machine virtuelle (moi j'étais parti sur une alternative au Basic à cause de l'introduction)...

Ba, je fournis la VM et l'assembleur, avec une interface graphique sur Casio pour les lancer, et en ligne de commande sur PC. Le but n'est pas vraiment de remplacer le Basic, le langage est beaucoup trop compliqué pour ça (je m'attend pas à ce que grand monde arrive à écrire du pseudo-assembler), mais d'avoir un langage de plus, de préférence le plus rapide possible.

Lephenixnoir a écrit :
Comment mets-tu le clavier sur écoute ? Des timers ?

Malheureusement, oui. J'ai un timer à 20Hz qui lit le clavier touche par touche avec la fonction key_down que j'ai piquée à usefull... Et avant, c'était le syscall 0x24b mais il ne marche pas dans les timers correctement, je n'avais pas toutes les touches... C'est une des raisons pour lesquelles je préfèrerait vraiment passer sur Gint et avoir des événements propres ainsi qu'une vraie mise en pause du CPU.

Lephenixnoir a écrit :
Saleté de Gitlab, tous les membres ont ce problème. Si tu me donnes ton pseudo je peux bypasser la phase de confirmation, mais les mails suivants ne t'arriveront probablement pas non plus donc ne compte pas sur les notifs' par mail.

Normalement, j'ai mis Natnat aussi. Pas grave pour les mails suivants. Vous avez un problème de spouleur? Les mails partent pas non plus sur le forum même quand on coche "recevoir les réponses par mail"...
LephenixnoirEn ligneAdministrateurPoints: 24699 Défis: 170 Message
Posté le 28-06-2018 à 13:54 | #
Sache que gint utilise aussi un timer pour lire le clavier. C'est la plus grosse faute de hardware que j'ai commise, mais l'interruption qui est levée quand on presse une touche ne s'arrête jamais ! C'est juste inutilisable. D'ailleurs le système aussi a un timer.

Et donc, si tu as un timer, tu peux utiliser l'instruction assembleur sleep pour te mettre en pause. Bien mieux que l'attente active faite par Sleep().

J'ai confirmé ton compte Gitlab. Le forum c'est une autre affaire, ce n'est pas le même serveur. Son problème à lui c'est plutôt d'être codé en PHP et avec les pieds.
Dark stormEn ligneLabélisateurPoints: 11641 Défis: 176 Message
Posté le 28-06-2018 à 19:27 | #
« Son problème à lui c'est plutôt d'être codé en PHP et avec les pieds. »
Nan, même avec les pieds on fait mieux.

Bref, mis à part ça, j'en ai parlé sur le fofo, mais y'a une démo ? Je dois avouer que j'ai pas trop le temps de tester sur machine, mais du coup si la VM est fonctionnelle sur PC, je pourrais me faire une idée
NatnatHors ligneMembrePoints: 73 Défis: 0 Message
Posté le 28-06-2018 à 20:00 | #
Merci beaucoup pour le GitLab @Lephenixnoir, je crée le repo dès que j'ai accès à mon pc.
Il faudra que je regarde pour l'instruction sleep, mais ça suffit de la mettre dans un bloc asm ?
Et oui, je sais que Gint utilise un timer pour lire le clavier, mais au moins ça fait ça bien, pas comme moi avec mes lectures touche par touche...
Ouais @Dark storm, y'a une espèce de démo, mais c'est quasiment rien... Le fichier fib.asm qui s'assemble en fib.bin est un programme qui calcule des termes de la suite de Fibonacci et les affiche sur l'écran avec un 7-segment, puis se met en pause et quitte quand on appuie sur EXIT. Sur la version PC, c'est Echap la touche qui correspond. Attention, pour le moment, ça compile que pour Linux (et peut-être Cygwin). Les make doivent être faits dans l'ordre data->common->assembler->interpreter, il faut que j'y retravaille...
LephenixnoirEn ligneAdministrateurPoints: 24699 Défis: 170 Message
Posté le 28-06-2018 à 20:14 | #
Il faudra que je regarde pour l'instruction sleep, mais ça suffit de la mettre dans un bloc asm ?

Yup. __asm__("sleep") suffit, ce qui est pas mal !

Il y a peut-être des effets de réordonnement tels que volatile serait approprié, mais je ne saurais pas le dire.

Et oui, je sais que Gint utilise un timer pour lire le clavier, mais au moins ça fait ça bien, pas comme moi avec mes lectures touche par touche...

La méthode que j'utilise (celle de SimLo) est la méthode classique du SH3, mais le shadowing explose assez vite. Je me souviens que si je lis sur l'interface BIOS en 0xa44b0000 ça fait n'importe quoi après plusieurs tours de timer. Je n'ai pas réussi à comprendre pourquoi à l'époque où j'ai essayé.

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