Format des fichiers...
 
Notifications
Clear all

[Résolu] Format des fichiers Hyperbasic...  

Page 1 / 2
  RSS

damien
(@damien)
Membre
Inscription: Il y a 9 mois
Posts: 26
13 mars 2020 18 h 54 min  

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.


Quote
jede
 jede
(@jede)
Membre
Inscription: Il y a 1 an
Posts: 146
13 mars 2020 20 h 36 min  

Tu peux contacter @assinie qui a désassemblé Hyperbasic et a fait la doc. Je peux filer le lien vers la doc, mais il a sans doute une version plus à jour quelque part.

 


damien aime
RépondreQuote
assinie
(@assinie)
Membre
Inscription: Il y a 1 an
Posts: 21
13 mars 2020 21 h 31 min  

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.


damien aime
RépondreQuote
damien
(@damien)
Membre
Inscription: Il y a 9 mois
Posts: 26
13 mars 2020 22 h 06 min  

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.


RépondreQuote
assinie
(@assinie)
Membre
Inscription: Il y a 1 an
Posts: 21
13 mars 2020 22 h 36 min  

@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

 


RépondreQuote
damien
(@damien)
Membre
Inscription: Il y a 9 mois
Posts: 26
13 mars 2020 22 h 40 min  

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. 


RépondreQuote
assinie
(@assinie)
Membre
Inscription: Il y a 1 an
Posts: 21
13 mars 2020 22 h 47 min  

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


RépondreQuote
damien
(@damien)
Membre
Inscription: Il y a 9 mois
Posts: 26
13 mars 2020 22 h 54 min  

Comme ça t'arrange... je vais regarder dans ton dépôt.

Encore merci.

@+

damien.


RépondreQuote
assinie
(@assinie)
Membre
Inscription: Il y a 1 an
Posts: 21
13 mars 2020 23 h 03 min  

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)


RépondreQuote
damien
(@damien)
Membre
Inscription: Il y a 9 mois
Posts: 26
13 mars 2020 23 h 53 min  

Super, je te remercie. Je regarde ça en détail dès demain.

@+

damien.


RépondreQuote
assinie
(@assinie)
Membre
Inscription: Il y a 1 an
Posts: 21
14 mars 2020 14 h 55 min  

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.


RépondreQuote
damien
(@damien)
Membre
Inscription: Il y a 9 mois
Posts: 26
14 mars 2020 14 h 59 min  

@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.


RépondreQuote
assinie
(@assinie)
Membre
Inscription: Il y a 1 an
Posts: 21
14 mars 2020 15 h 12 min  

@damien: Tu as un exemple de programme qui te pose porblème?

 


RépondreQuote
damien
(@damien)
Membre
Inscription: Il y a 9 mois
Posts: 26
14 mars 2020 15 h 16 min  

@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 ! 😉  


RépondreQuote
assinie
(@assinie)
Membre
Inscription: Il y a 1 an
Posts: 21
14 mars 2020 17 h 17 min  

@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

 


RépondreQuote
Page 1 / 2
Share: