Bonsoir,
L'un d'entre vous aurait-il de l'information concernant le format des fichiers Hyperbasic ?
Je souhaite ajouter un visualiseur dédié à ce format dans OricExplorer qui ne sait actuellement afficher que les fichiers Basic de l'Atmos et, depuis la dernière version que j'ai publiée hier soir, les sources Teleass.
J'ai commencé à décortiquer quelques fichiers mais j'ai du mal à comprendre comment c'est organisé, excepté les numéros de lignes.
Merci d'avance.
damien.
Bonsoir,
Les sources d'un programme Hyperbasic sont un peu plus compliquées que celles d'un programme Basic habituel.
Le programme proprement dit est composé d'un suite de pointeurs vers des tables qui elles contiennent le contenu.
Le nom des vartiables est dans une table, les chaines de caractères aussi, les labels des lignes pour un GOTO également, les valeurs numériques,...
Bref tout est dans des tables.
Par exemple, le simple programme suivant:
10 GOTO 30
20 PRINT "20"
30 PRINT 30
est codé comme suit:
Partie programme:
0800 07 0A 00 03 A1 D0 00 <-- 10 GOTO 30
0807 0A 14 00 13 A4 25 D0 01 24 25 <-- 20 PRINT "20"
0811 0A 1E 00 13 A4 26 D0 02 24 25 <-- 30 PRINT 30
081B 00
"Variables" du programme:
081C 29 08 07 00 D0 00 09 33 30 1E 00 EC 96 <-- N° de ligne "30" (30)
0829 32 08 10 00 D0 01 09 32 30 <-- Constante Alpha "20"
0832 3D 08 11 00 D0 02 09 33 30 1E 00 <-- Constante numérique "30" (30)
083D 0A 00 00 00
Les octets du types 'D0 XX' dans le programme sont des identifiants qui renvoient à ceux dans la table des "variables" du programme.
Je peux essayer de faire une doc la dessus un peu plus claire et plus précise que ce que j'ai actuellement dans le dépôt Github (il s'agit plutôt de notes que d'une vraie documentaion pour le moment)
Je peux aussi bricoler un programme qui fait un listing d'un source Hyperbasic si tu veux.
Merci pour ces précieuses infos, ça m'éclaire déjà un peu plus.
Maintenant, si tu es d'accord pour m'en dire d'avantage sur l'utilité (ou non) des octets que tu n'as pas évoqués (le 4ème octet de chaque "ligne" et les 2 derniers des lignes 2 et 3), je suis preneur.
Quant à ta proposition de "bricoler" un programme qui fait un listing, ça pourrait en effet m'être très utile. Tu ferais ça en quel langage ?
Encore merci... et merci d'avance pour la suite.
@+
damien.
@damien:
Concernant les lignes "programmes"
- le 1er octet est un offset vers la ligne suivante
- le 4ième indique la taille du code en langage machine généré au moment de la compilation.
- les autres octets (24, 25) sont aussi pour l'instruction PRINT.
Concernant les lignes "variables":
- Les 2 premiers sont un pointeur vers l'entrée suivante de la table
- les 2 derniers de la première ligne correspondent à l'adresse de début du code machine de la ligne "30"
Pour le langage, probablement du Python mais tu préfères peut être que je le fasse en C
OK, merci. Pour le premier octet j'avais remarqué mais pour les autres ces infos vont m'être très utiles.
Pour l'instant, laisse tomber le programme, je vais essayer de me débrouiller.
Par contre si tu as juste la liste des équivalences tokens/mots clés, ça me ferait gagner pas mal de temps je pense.
@+
damien.
Tu peux regarder dans mon dépôt: https://github.com/assinie/Hyper-Basic
Il y a les sources que j'ai commencé à reconstituer et quelques notes dans le répertoire docs.
Je peux t'envoyer la liste des tokens ou l'ajouter dans le dépôt ce qui serait probablement une bonne idée aussi
Comme ça t'arrange... je vais regarder dans ton dépôt.
Encore merci.
@+
damien.
Je viens d'ajouter un fichier tokens.txt dans le dépôt qui contient la liste des instructions avec leur token et quelques infos supplémentaires (surtout utiles pour le fonctionnement de la compilation d'un programme par Hyperbasic)
Super, je te remercie. Je regarde ça en détail dès demain.
@+
damien.
Je viens de faire un petit programme qui permet de reconstituer le source d'un programme Hyperbasic à partir d'un fichier sauvegardé sur disquette.
Il faut encore que je le teste sur quelques fichiers et que je vérifie la mise en forme par rapport à l'original.
@assinie : je suis en train de le faire également. Je m'approche du but mais j'ai dû louper des cas particuliers qui font que ça plante sur certains fichiers...
@+
damien.
@damien: Tu as un exemple de programme qui te pose porblème?
@assinie : plusieurs de mes programmes de l'époque. En fait pour l'instant je n'ai pas encore traité les assignations de variables. Donc forcément, à part les petits outils qui ne font pas grand chose, ça plante sur tous les autres ! 😉
@damien: Je viens de tester mon programme sur l'ensemble des fichiers Hyperbasic que j'ai trouvé sur une disquette STRATSED 2.0cq soit environ 30 programmes.
Je n'ai pas rencontré de soucis sur ces exemples.
La seule chose que je ne prends pas en compte c'est la conversion de certains caratères de contrôles, changement de la couleur par exemple, qui peuvent se trouver dans des chaines de caractères. Je les affiche tels quels