FXForth - Un interpréteur Forth pour Casios
Posté le 29/10/2025 15:02
Pour un peu de contexte:
Si je me suis lancé dans ce projet c'est suite aux problèmes des languages existant sur G35 (pour moi) : Le python est lent et pas terrible à utiliser, et le C.Basic est pas si rapide et a une syntaxe qui me repousse.
Au départ, j'avais commencé à écrire un language structuré cet été, ressemblant au
B. Mais le projet est assez énorme, et je me suis retrouvé à la rentrée avec 1800 lignes de code et un générateur de représentation intermédiare foireux (c'est à dire assez loin de la fin).
Donc finalement, je me suis lancé dans le
Forth, qui est un des langages les plus simples qui existent
Le projet
J'ai donc un coeur d'interpréteur Forth qui est actuellement fini, il manque juste ... toutes les fonctions standard

Ce qui est présent :
- Un lexeur/parseur complet
- Une hashmap
- Quelques primitives du langage (Appel/retour de fonction, 'exit', constantes, '+','-')
Ce qui reste à faire avant que je daigne publier un addin :
- Une interface graphique
- Améliorer un poil la hashmap
- Finir d'implémenter : variables, constantes, chaînes de caractères et déclaration de fonctions
- Ajout de '*', '/', '*/', '!', '@', '.', comparaisons, 'if', 'loop', 'while'
Le code source est disponible ici
https://git.planet-casio.com/Fcalva/fxforth
Citer : Posté le 29/10/2025 15:07 | #
J'en connais un Druzyek qui va être content
Citer : Posté le 29/10/2025 18:26 | #
Au départ, j'avais commencé à écrire un language structuré cet été, ressemblant au B. Mais le projet est assez énorme, et je me suis retrouvé à la rentrée avec 1800 lignes de code et un générateur de représentation intermédiare foireux (c'est à dire assez loin de la fin).
Sinon il y a le pascal qui peut être compilé en une seule passe (c'est ce que Turbo Pascal fait apparemment).
(si on n'est pas dérangé d'utiliser un langage pour quiche eaters
Citer : Posté le 29/10/2025 18:34 | #
Mb88 : J'aurais pu faire en une seule passe certes. Mais le Pascal c'est quand même un language assez touffu (en plus d'être pour quiche eaters comme tu le dis si bien), et à ce point autant porter TCC
Et d'ailleurs j'y avais pensé, mais c'est pas super intéressant comme projet, surtout que les interfaces sont à peine documentées
Caltos : G35+EII, G90+E (briquée
Citer : Posté le 29/10/2025 18:37 | #
Je suis en train de lire le standard C ANSI parce que j'ai envie d'essayer de coder un compilo de C, mais je trouve tellement peu de temps pour le lire comme tout ce que j'ai envie de lire: je trouve toujours autre chose à faire que de lire
Citer : Posté le 02/11/2025 13:04 | #
Nice! How did you decide to handle memory? I did something unconventional and separated the memory for word definitions from the memory the user can access to prevent crashes. I'm also masking all the memory addresses for @ and ! for the same reason.
Citer : Posté le 02/11/2025 13:39 | #
I didn't implement any user memory yet. Though i'll probably only prevent writes to adresses outside of RAM, to limit the performance hit.
With a toggle of course, to gain those few percent and eventually use the SPU memory or do other neat tricks
Caltos : G35+EII, G90+E (briquée
Citer : Posté le 02/11/2025 14:24 | #
Cool! I'm excited to see how it turns out
Citer : Posté le 05/11/2025 23:18 | #
Petite MàJ. Le rythme en a pris un coup avec la reprise des cours, mais j'ai quand même implémenté '*','/', 'dup', 'swap', 'over', 'rot', 'drop', et la simple boucle 'do'/'loop' (sans indice pour le moment).
Et c'est très rapide
Une boucle faisant simplement 2+2 et supprimant le résultat 100000x, tourne en 48 à 49ms, tandis que le Python est dans l'ordre des secondes. C'est donc autour de 20-30x plus rapide !
(PS : le code utilisé est
PS2 : Le test est sur une G35+EII non overclockée, en mode "safe" (vérification des piles à chaque appel) et avec les variables en RAM. Il y a donc pas mal à gagner sans faire grand chose
Caltos : G35+EII, G90+E (briquée