1

Je suis en train de farfouiller les relogements, et j'avoue que ProgFormatV4.txt passe un poil vite sur certains détails (comme il le dit, d'ailleurs).

Par exemple, ici :
LibImport       ????            The reloc tables of the libraries.
                                'NLib' times :
                                        + 1 word : Number of the imported functions of this library minus 1.
                                        + Number of imported functions times :
                                                + 1 word : Import Library Function number.
                                                + A reloc table.

SECTION 2                       Import table of the RomCalls.
IsRomCall       2               0 if there is no RomCall, otherwise 1.
NumRomCall      2               Number of used RomCalls minus 1.
                ?????           Number of RomCalls times:
                                        + 1 word : Number of the used RomCall.
                                        + A reloc table.

Quel est le format de ces tables de relogements ?
- offset depuis origin (2 bytes)
- numéro de fonction/romcall (2 bytes)
?

Quel est le format pour la table de relogement du programme ?
- offset de l'adresse où l'on va écrire
- offset de l'adresse qu'on va écrire
?

Quel est le format de la table de relogement sous AMS ?
Je sais qu'il est différent, je crois que les valeurs sont inversées dans la table, non ?

Parce que le détail donné ici :
+---------------------------------------------------------------+
|                       RelocTable Format                       |
+---------------------------------------------------------------+

A null terminated list of offset (Word) from _origin 
which have to be relocated with this address.

je ne le comprends pas.

Avec une table d'offset, on va savoir reloger, ou quelle adresse reloger, mais il y a bien deux éléments distincts dans un relogement...
Qui plus est, à la fin de la table, on doit mettre un seul word à 0, pas un longword ?

Merci d'avance. smile

2

Folco (./1) :
Quel est le format de ces tables de relogements ?

Décrit plus bas dans le fichier.
Folco (./1) :
offset depuis origin (2 bytes)
- numéro de fonction/romcall (2 bytes) ?

Ou. C'est une table d'offset 16 bits depuis _origin.
Le but du relogement est d'ajouter l'adresse à reloger à tous les long words de cette liste d'offset.
Folco (./1) :
Quel est le format pour la table de relogement du programme ?

Le même. Sauf que l'adresse à reloger est _origin lui même.
Folco (./1) :
Quel est le format de la table de relogement sous AMS ?

Il est différent.
Liste des offset à reloger sous 16 bits, liste des offset destinations à écrire aux addresses à reloger sous 16 bits (à l'envers terminé par 0000 et non forcément aligné).
Folco (./1) :
Je sais qu'il est différent, je crois que les valeurs sont inversées dans la table, non ?

C'est plus compliqué.

3

Merci. smile
PpHd (./2) :
Folco (./1) :
Quel est le format pour la table de relogement du programme ?

Le même. Sauf que l'adresse à reloger est _origin lui même.

C'est là que je comprends pas.
On a pas :
- offset où on va écrire
- offset de l'adresse qu'on va écrire
?
PpHd (./2) :
Liste des offset à reloger sous 16 bits, liste des offset destinations à écrire aux addresses à reloger sous 16 bits (à l'envers terminé par 0000 et non forcément aligné).

Donc on a, en lisant le binaire, $0000, offset.w, dest.w, offset.w, dest.w, ..., $F3, le tout non aligné ?

4

Folco (./3) :

C'est là que je comprends pas.
On a pas :
- offset où on va écrire
- offset de l'adresse qu'on va écrire ?

L'offset est déjà rempli dans l'instruction du programme.
ie. on considère que le programme à pour origine l'adresse 0.
Il suffit donc de faire une translation d'adresse vers l'adresse effective.
Folco (./3) :
Donc on a, en lisant le binaire, $0000, offset.w, dest.w, offset.w, dest.w, ..., $F3, le tout non aligné ?

Oui. Aligné ou pas.

5

PpHd (./4) :
L'offset est déjà rempli dans l'instruction du programme.

Ah ! Tout s'éclaire. smile Donc le kernel rajoute _origin à chacun des offsets et c'est marre.

Merci bien. smile

Dernière chose, je suppose que l'ordre des données dans la table n'a aucune importance ? On peut inverser les paires d'offset/destination, ou mettre les offsets dans n'importe quel ordre pour les relogements du programme ?

• Folco bookmark ce topic

6

Oui

7

(je me suis toujours demandé si PpHd avait un forfait internet facturé au mot hehe)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

8

Merci pour tout !

(pareil grin)

9

(AVR)

10

avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

Merci beaucoup. C'est parfaitement détaillé. smile

12

Nous avons aussi trouvé les docs des kernels tout sauf claires, donc nous avons vérifié les détails à coup de reverse engineering et écrit ces docs. (Et encore, le format des kernels modernes, ça va encore, ils sont très simplistes, le format de Fargo est beaucoup plus complexe et la documentation n'est pas à jour, donc j'ai dû déchiffrer le format de compression à l'aide de 3 codes source peu ou pas commentés (le relogeur de Fargo, le linker de Fargo et le convertisseur Fargo→PlusShell – la redondance, ça aide à comprendre mieux les choses wink).)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité