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 » Casio_asm, assembleur et VM sur calculatrice et PC
Natnat Hors ligne Membre Points: 73 Défis: 0 Message

Casio_asm, assembleur et VM sur calculatrice et PC

Posté le 28/06/2018 12:04

Bonjour à tous (ou bonsoir, ou bonne nuit, je sais pas à quelle heure vous lisez ça)!

En développement depuis aproximativement un mois, j'ai l'honneur de vous présenter mon dernier joujou, Casio_asm!
Il s'agit d'une VM (ou plus exactement, un processur virtuel custom équipé d'un stack, une MMU et d'autres petits trucs sympa) et de l'assembleur qui va avec, avec pour objectif de tourner le plus vite possible, aussi bien sur calculatrice que sur PC. La "chose" a accès aux fichiers (de la mémoire de stockage sur casio, de n'importe où sur PC), à la VRAM, au clavier et (bientot), aux timers.

L'add-in est intégralement écrit en C (je ne suis pas encore super bon en assembleur Super-H, mais j'apprend), et devrait tourner aussi bien sur SH3 que sur SH4, bien que je n'aie pas accès à une SH3 pour faire de tests. Il se compile grâce à une toolchain GCC+Binutils (perso, j'utilise 8.1.0+2.30, mais ça devrait aussi marcher avec des versions plus anciennes) sur Linux (mais Cygwin devrait aussi aller). Il NE COMPILE PAS sur le SDK de Casio, car le code n'est pas compatible C89. La version PC nécessite la présence des paquets dev de la libsdl2 et tourne sur Linux. Il devrait être simple de la faire tourner sur Windows si quelqu'un connaît l'API WIN32 (ce n'est pas mon cas, malheureusement), il ne manque que les fonctions de gestion des fichiers (et truncate est important).

Le langage en lui même est une sorte d'assembleur, c'est-à-dire que chaque ligne se traduit directement en une instruction processeur. Du coup, le langage est plus difficile à apprendre et à maîtriser, mais il est en contrepartie beaucoup plus rapide et optimisable que du C si on écrit bien.
Ce qui m'a inspiré ce langage est la VM Java, le langage est donc basé sur le stack plus que sur les registres.
L'add-in lit les scripts depuis la mémoire de stockage. Il est aussi capable de les assembler, mais n'essayez pas d'executer un script non assemblé, assemblez-le PUIS executez-le. Pour les éditer depuis la calculatrice, je vous conseille Edit qui a accès à un presse-papiers, ce qui est toujours pratique. Sur PC, laissez tomber les colorateurs syntaxiques, aucun ne reconnait le format.

Le projet N'EST PAS fini. Il peut donc y avoir de nombreux bugs/crash. De plus, la ToDo list n'est absolument pas vide, il manque donc de nombreuses fonctionnalités. Il est probable que le passage à la version 1.0 ou à des mises à jours casse la compatibilité des programmes, mais il devrait dans la plupart des cas suffir de ré-assembler ou de faire des modifications mineures... En revanche, le programme fonctionne dans la plupart des cas, et les fonctions principales sont opérationnelles.

Page de DL de l'add-in
Repo GitLab du projet

Si quiconque a une idée de fonctionnalité à ajouter, un bug à réparer ou toute autre chose, n'hésitez pas à répondre à ce post ou à créer un ticket sur le GitLab (quand le code y sera).

Sur ce, bonne journée à tous


Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 28/06/2018 12:06 | #


Je t'encourage vivement à proposer un article pour la revue des projets : le lien est ici
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Natnat Hors ligne Membre Points: 73 Défis: 0 Message

Citer : Posté le 28/06/2018 12:12 | #


Euh, je suis supposé mettre quoi dedans? Et même si le projet est toujours en dev, avant même la première release stable? C'est la première fois qu'un de mes projets suscite de l'attention, je n'ai aucune idée de comment gérer ça
Breizh_craft Hors ligne Modérateur Points: 1171 Défis: 7 Message

Citer : Posté le 28/06/2018 12:15 | #


C'est très simple : ce que tu as mis ici. Tu présentes le projet, tu indiques où il en est. Qu'il soit en dev ou pas, on s'en fiche, au contraire, tu pourrais faire d'autres articles à la RDP pour présenter l'avancement quand tu avanceras.

Et n'attends pas qu'on s'intéresse à ton projet pour le mettre dans la RDP
Breizh.pm – Un adminsys qui aime les galettes.
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 28/06/2018 12:42 | #


Exactement : si tu as d'autre projet il faut que tu le dise : on peut d'aider à les faire avancer
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

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

Citer : Posté le 28/06/2018 13:51 | #


un processur virtuel custom équipé d'un stack, une MMU et d'autres petits trucs sympa

Wait, il y a un MMU ? Ma première réaction est « c'est trop cool », mais la seconde est double : dans quel but est-il utilisé, et ne pose-t-il pas un problème de performances (double déréférencement pour chaque accès mémoire) ?

L'add-in est intégralement écrit en C (je ne suis pas encore super bon en assembleur Super-H, mais j'apprend)

il est en contrepartie beaucoup plus rapide et optimisable que du C si on écrit bien.

Je me considère capable d'écrire du code assembleur de bonne qualité en SuperH, mais GCC est tellement meilleur que moi... ! Ne perds pas ton temps à faire de l'assembleur à part pour utiliser les fonctionnalités inaccessibles depuis le C et optimiser des sections très courtes et très critiques, ça n'en vaut pas la peine

La deuxième assertion est vraie, mais pour les humains, c'est difficile de concourir avec les machins. Est-ce que tu sais que tu peux gagner un cycle si tu places les instructions d'accès mémoire sur des adresses multiples de 4 ? Le compilo le sait et il fait attention à chaque fois !

Je t'invite aussi à essayer d'écrire la fonction suivante en assembleur et de comparer avec le code généré par GCC toutes optimisations comprises. C'est sur cet exemple que j'ai compris que je ne faisais pas le poids... x)

int f(int x, int y)
{
  return (x < 0) && (y < 0);
}

Enfin ton lien vers le programme est dans un tout petit « ici » facile à rater. Pour plus de visibilité on opte généralement pour des présentations plus imposantes.

Télécharger la dernière version de l'add-in


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 28/06/2018 19:04 | #


Je plussoie Lephe pour le compilo. En cours de computer architecture, on fait quelques expériences, ben je te garantis qu'un code C fait intelligemment est beaucoup plus rapide et mieux compilé que la même chose faite à la main en Asm. Surtout en ce qui concerne les probabilités de saut et le loop unrolling par exemple.

Sinon, très beau projet. De ce que j'ai compris ça permettrait surtout de pouvoir développer des trucs sur le PC, tester sur le PC via la VM associée, et d'être sûr que le programme fonctionnera tout pareil oncalc ?
Si je me plante pas, c'est une belle avancée, y'a plus qu'à faire un PoC qui soit classe pour que ça lance le truc
Tu peux en parler dans la boite à idées
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Natnat Hors ligne Membre Points: 73 Défis: 0 Message

Citer : Posté le 28/06/2018 20:21 | #


Lephenixnoir a écrit :
un processur virtuel custom équipé d'un stack, une MMU et d'autres petits trucs sympa

Wait, il y a un MMU ? Ma première réaction est « c'est trop cool », mais la seconde est double : dans quel but est-il utilisé, et ne pose-t-il pas un problème de performances (double déréférencement pour chaque accès mémoire) ?

Oui, on a effectivement des pertes de performances, mais c'est la solution la plus simple que j'ai trouvée pour pouvoir adresser des fichiers, le stack, la VRAM ou la RAM avec une interface commune... Et les accès au stack normaux ne passent pas par la MMU, seulement les accès mémoire explicites et la lecture des instructions.

Je me considère capable d'écrire du code assembleur de bonne qualité en SuperH, mais GCC est tellement meilleur que moi... ! Ne perds pas ton temps à faire de l'assembleur à part pour utiliser les fonctionnalités inaccessibles depuis le C et optimiser des sections très courtes et très critiques, ça n'en vaut pas la peine

La deuxième assertion est vraie, mais pour les humains, c'est difficile de concourir avec les machins. Est-ce que tu sais que tu peux gagner un cycle si tu places les instructions d'accès mémoire sur des adresses multiples de 4 ? Le compilo le sait et il fait attention à chaque fois !

Je t'invite aussi à essayer d'écrire la fonction suivante en assembleur et de comparer avec le code généré par GCC toutes optimisations comprises. C'est sur cet exemple que j'ai compris que je ne faisais pas le poids... x)

int f(int x, int y)
{
  return (x < 0) && (y < 0);
}

Enfin ton lien vers le programme est dans un tout petit « ici » facile à rater. Pour plus de visibilité on opte généralement pour des présentations plus imposantes.

Télécharger la dernière version de l'add-in


J'aurais vraiment dû mieux m'exprimer... Le langage en lequel est écrit mon add-in est uniquement le C, sans la moindre trace d'assembler (c'est d'ailleurs pour ça qu'il est cross-platform); c'est le langage qu'il lit qui est un assembleur. Je ne prétend absolument pas être capable de rivaliser avec GCC, je ne suis même pas décent en asm Super-H. En revanche, je suis certain que GCC ne compile pas pour ma VM, et étant donné que je n'ai pas la moindre idée des durées des instructions ni de comment il peut gérer une architecture basée sur le stack et pas les registres, ça doit être difficile de faire une back-end potable...

Dark storm a écrit :
Sinon, très beau projet. De ce que j'ai compris ça permettrait surtout de pouvoir développer des trucs sur le PC, tester sur le PC via la VM associée, et d'être sûr que le programme fonctionnera tout pareil oncalc ?
Si je me plante pas, c'est une belle avancée, y'a plus qu'à faire un PoC qui soit classe pour que ça lance le truc
Tu peux en parler dans la boite à idées

Oui, on peut se servir de la VM du PC pour développer, par exemple si on compile avec le flag -DDEBUG, ça affiche les instructions et le stack au fil du programme, au prix de la performance. Mais on peut aussi (et c'était important pour moi) programmer depuis la calculatrice. Les deux VM sont identiques, la seule différence est liée à la SDL et tout ce qui est les différences de hardware. Le code s'exécute pareil dessus, avec à peu près la même vitesse.
Niveau Proof of Concept, j'ai seulement l'algo de calcul de suite de Fibonacci, il faudrait que j'essaye de faire un Game of Life et voir ce que ça donne par rapport à ma version en C Et techniquement, l'intégralité de Casio_asm est un proof of concept, ça pourrait être bien mieux si je n'étais pas si mauvais en optimisation et structure de code...

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 201 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