33Fermer35
ContraLe 24/01/2010 à 15:39
En examinant les codes binaires, je me suis rendu compte que mes codes générés par spasm ou z80asm ne correspondent pas du tout...

Sur les 2 programmes qui s'éxecutent (on peut voir que l'un d'eux est compilé avec chaos assembler) :


Un magic number tout d'abord : **TI83**
(rajouté par bin2var, bin8x ou binto83p)

Des octets libres pour l'ajout éventuel d'un commentaire.
(bin2var et chaos assembler ne s'en privent pas)

Ensuite au 60 ème octet le nom du programme.
8 octet lui sont apparemment reservé...Ou alors sa taille est spécifiée juste avant (il y a des octet initialisés)
Mais je penche pour la taille fixe de 8 char.
(Je crois d'ailleurs qu'il ne faut pas dépasser cette taille pour un nom de programme)

D'abord 4 octet pour le début du programme.
L'adresse de départ semble y être stockée.

Ensuite le code à proprement parler :
43 44 35 35 34 37 : CD 5547 pour _ClrLcdFull
43 44 39 35 34 37 :CD 9547 pour runindicoff

etc...

Puis la chaine de fin :
Le fameux end:000:end si je ne me trompe pas...

30 3F D4 3F 30 30 3F D4 + 2 octet qui trainent.
Qui donne en chaine de char interpreté par hexedit : 0?.?0000?.

Sur ce que je compile, il n'y a rien de commun a part le magic number et les romcall qui apparaissent "CD 5547" donc comme il faut.
Voila dites moi si je me trompe...?

trombz3gP (hex.png)


Edit : En fait j'ai trouvé un document là dessus :
I) Normal files such as Program file (*.82p)

--------------------------------------------



  The following is a table of the bytes that make up the header of the *.82p

file:



  Byte(s)					 What It Contains

  ---------------------------------------------------------------

  0x00-0x10	0-10				 **TI82** 0x1A 0x0A 0x00

  0x0B-0x34	11-52                            Comment

  0x35-0x36	53-54                            (68-69)+4+3+[strlen(Name)=8]

			begin of var header	---------- 

  0x37-0x38	55-56                            0x0B 0x00

  0x39-0x3A	57-58                            Repeats 68-69

  0x3B		59                               0x05 unprotected

		                                 0x06 protected

  0x3C-0x43	60-67                            Name of program (8 chars)

			end of var header	----------

			begin of data part	----------

  0x44-0x45	68-69                            (70-71)+2

  0x46-0x47	70-71                            Length of file (n) to end minus Checksum

  0x48-(n-2)	72-(n-2)                         Actual program

  		(n-1)-(n)                        Checksum

			end of data part	----------



The checkum is the sum of all bytes starting at the var header (0x0B).

(EDIT : au fait merci à Romain Lievins pour cette doc)

Apparement le format de fichier est le même pour 82 et 83...?