it regularly difficult to spot, aside from maybe by a genuine Rolex replica history specialist, in light of the fact that the best phony Rolex are 95% made by Rolex. If you want to know how often you should optimally be winding your rolex replica watch, Click Here.

Format des fichiers...
 
Notifications
Retirer tout

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

25 Posts
3 Utilisateurs
8 Likes
80.3 {numéro}K Vu
damien
(@damien)
Trusted Member
Inscription: Il y a 4 ans
Posts: 67
Début du sujet  

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.


   
Citation
jede
 jede
(@jede)
Membre Admin
Inscription: Il y a 5 ans
Posts: 473
 

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, damien, damien and 1 people reacted
RépondreCitation
assinie
(@assinie)
Membre
Inscription: Il y a 4 ans
Posts: 58
 

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, damien, damien and 1 people reacted
RépondreCitation
damien
(@damien)
Trusted Member
Inscription: Il y a 4 ans
Posts: 67
Début du sujet  

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épondreCitation
assinie
(@assinie)
Membre
Inscription: Il y a 4 ans
Posts: 58
 

@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épondreCitation
damien
(@damien)
Trusted Member
Inscription: Il y a 4 ans
Posts: 67
Début du sujet  

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épondreCitation
assinie
(@assinie)
Membre
Inscription: Il y a 4 ans
Posts: 58
 

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épondreCitation
damien
(@damien)
Trusted Member
Inscription: Il y a 4 ans
Posts: 67
Début du sujet  

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

Encore merci.

@+

damien.


   
RépondreCitation
assinie
(@assinie)
Membre
Inscription: Il y a 4 ans
Posts: 58
 

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épondreCitation
damien
(@damien)
Trusted Member
Inscription: Il y a 4 ans
Posts: 67
Début du sujet  

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

@+

damien.


   
RépondreCitation
assinie
(@assinie)
Membre
Inscription: Il y a 4 ans
Posts: 58
 

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épondreCitation
damien
(@damien)
Trusted Member
Inscription: Il y a 4 ans
Posts: 67
Début du sujet  

@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épondreCitation
assinie
(@assinie)
Membre
Inscription: Il y a 4 ans
Posts: 58
 

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

 


   
RépondreCitation
damien
(@damien)
Trusted Member
Inscription: Il y a 4 ans
Posts: 67
Début du sujet  

@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épondreCitation
assinie
(@assinie)
Membre
Inscription: Il y a 4 ans
Posts: 58
 

@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épondreCitation
Page 1 / 2
Share: