Le début d'un compilateur Basic ...
En 2020, pendant le confinement, j'avais commencé un compilateur Basic pour ORIC.
Il y a quelques semaines, quelqu'un m'a demandé en MP où j'en étais du développement. Je l'ai alors recherché dans mes archives et j'ai retrouvé un début de compilateur. Je me suis rendu compte que je ne l'avais jamais diffusé. Je l'ai un peu amélioré et le voici.
On peut le télécharger ici :
https://e.pcloud.link/publink/show?code=XZLM5y7Z6Kw4CQLsdALAWxwyt1zqbJgtUmoy
Vous pouvez le télécharger et l'exécuter sans crainte, même si Windows vous demande si vous voulez le télécharger et le conserver, car il ne contient aucun malware.
Attention, il est à peine montrable et il ne fait pas grand chose.
Voici une brève description de l'utilisation de ce compilateur qui répond au doux nom de coc_ORIC_o.
1 - Lancement
Au lancement, le compilateur coc_ORIC_o visualise:
- un menu,
- une partie gauche qui servira à afficher et modifier le source,
- une parte droite qui affichera le code généré en binaire, et des boutons.
Les boutons de droite et le menu jouent le même rôle.
Il n'y a pas encore de commandes d'édition du source, mais il y a une coloration syntaxique : les mots-clés apparaissent en rouge, les chaînes de caractère en bleu et les nombres en violet.
Une aide est disponible par le menu : Help avec des exemples d'utilisation. Tous les exemples ont été essayés et fonctionnent. cette aide est, et restera la référence du langage utilisé par le compilateur.
2 - Utilisation
Pour l'utiliser, c'est très facile:
- soit on tape un source dans la partie gauche,
soit on charge un source au format texte (nom.txt) par le bouton "1 LOAD SOURCE" (ou par le menu File / Load Source)
- on compile ce source par le bouton "2 COMPILE" (ou par le menu Compile)
Si la compilation réussit, un listing du code généré binaire apparait dans la partie droite, et le bouton "3 LAUNCH ORICUTRON" et le menu Launch ORICUTRON apparaissent.
Il y a aussi création d'un fichier au format cassette (File_Bin_TAP.tap) dans le répertoire "C:\coc_ORIC_o" qu'on peut alors récupérer pour l'utiliser sur un véritable ORIC ou sur un émulateur.
- si on veut exécuter immédiatement ce code généré, on clique sur le bouton "3 LAUNCH ORICUTRON" (ou par le menu Launch ORICUTRON).
ORICUTRON, qui est intégré au compilateur coc_ORIC_o se lance alors automatiquement, va charger le fichier C:\coc_ORIC_o\File_Bin_TAP.tap puis il l'exécute.
Attention, quand le compilateur coc_ORIC_o se ferme, les fichiers du répertoire c:\coc_ORIC_o ainsi que le répertoire lui-même sont détruits.
Si vous voulez récupérer le fichier cassette contenat le code généré (File_Bin_TAP.tap) qui se trouve dans ce répertoire, il faut le faire AVANT de fermer coc_ORIC_o.
3 - Compléments
Le compilateur coc_ORIC_o ne génère que du code compatible pour l' ORIC ATMOS.
Le compilateur coc_ORIC_o ne fonctionne que sur PC. Je l'ai généré avec l'OS Windows 10.
4 - Ce qu'il est possible de faire : eh bien, pas grand chose !
Voici ce qui a été codé:
- quelques commandes de base : GOTO, GOSUB, RETURN, END, REM, FOR, TO, STEP, NEXT, IF, THEN, END_IF, DIM, LABEL, WAIT, PLOT, PRINT.
- quelques commandes graphiques : PAPER, INK, HIRES, CIRCLE, CLS, CURSET, CURMOV, DRAW, TEXT, CHAR.
- quelques commandes sonores : PING, ZAP, SHOOT, EXPLODE, BEEP, CTRL.
- quelques fonctions mathématiques : SQR(), SIN(), COS(), ATN(), RND().
- quelques fonctions sur les chaînes de caractères : LEN(), + (concaténation)
Une commande, qui n'existe pas sur ORIC a été ajoutée: INTEGER.
Elle impose d'effectuer tous les calculs avec des entiers et ainsi de gagner du temps à l'exécution et de gagner du volume du code généré.
Il est fortement conseillé de l'inclure en début de source, à moins que vous utilisiez des nombres flottants.
En fin de compilation, il y a une phase d'optimisation du code généré qui retire des commandes inutiles de la pile.
5 - Le langage
Le langage utilisé par le compilateur coc_ORIC_o est le BASIC.
Ce langage a certaines caractéristiques:
- toutes les variables doivent être déclarées avant utilisation par DIM.
- il y a 3 types de variables : entières (signées et codées sur 32 bits), réelles (codées sur 5 octets), chaines de caractères. Les noms des variables entières doivent se terminer par %, et par $ pour les variables de type chaine de caractères.
- un nom de variable peut avoir jusqu'à 5 caractères ($ et % compris)
- il n'y a pas de numéro de lignes
- comme il n'y a pas de numéro de lignes, on utilise des LABELS pour les GOTO et les GOSUB. (Voir les exemples de l'aide).
- THEN label n'est pas accepté, il faut faire THEN GOTO Label.
- il n'est pas sensible à la casse : on peut utiliser indifféremment les majuscules et les minuscules.
Il est possible d'utiliser une variable entière comme indice de boucle (FOR / NEXT), contrairement à l'ORIC.
Pour les IF / THEN, il est équivalent de faire
IF condition THEN instructions
et
IF condition
instructions
END_IF
6 - Quelques restrictions d'utilisation
- FOR, TO, NEXT ne sont utilisables (pour le moment) qu'avec des variables entières: FOR abcde%= ...
- PRINT n'accepte ni "," ni ";"
- Les variables de type "chaine de caractères" sont mémorisées dans une zone assez petite => Le total des caractères des variables chaine de caractères ne doit pas être trop important (je vais lever rapidement cette restriction).
- il n'y a pas de transformation implicite de type entre entier et flottant : a%=b ou b=a% déclenchent une erreur.
7 - Les bugs connus
- PRINT d'un nombre flottant ou d'un résultat flottant s'affiche sur la ligne d'état. Il est conseillé d'utiliser les entiers (INTEGER)
- PLOT Col, Ligne, "Texte" ne tient pas compte des valeurs de Ligne et Col.
- les caractères accentués sont mal interprétés.
Voila. Soyez indulgents, c'est le tout début du compilateur.
Cocorico !
Ahhhh, toute ma jeunesse me revient en te lisant.
J'ai un autre projet en tête, mais j'irais bien regarder ton projet de près par la suite.
Merci pour ton partage.