You are here, vous êtes ici:
Atari Pages/Support and FAQ/Technical documentation page

Philippe PVBest's Atari 8bit Web Site

Atari 8bit Technical Documentation
Documentation Technique Atari 8bit

 

Fichier executable
Structure des fichiers Atari DOS exécutables standard (Binary File)

1. Premier secteur:

Examinons le premier secteur d'un fichier Atari DOS exécutable standard:

BYT#>00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
CHAR>
0123456789ABCDEF
00 : FF FF 00 3C FF 3F 00 00 00 00 00 00 00 00 00 00
10 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70 : 00 00 00 00 00 00 00 00 00 00 00 00 00 04 93 7D
  . ................
................
................
................
................
................
...............}
Checksum = $90, Next sector = $093, Bytes per sector = $7D

Les 6 premiers octets du secteurs nous donnent les informations suivantes (pour un fichier binaire exécutable DOS Atari uniquement):

FF FF : 2 octets qui indique que c'est le premier secteur d'un fichier DOS Atari. Il s'agit de l'entête (Header) des fichiers exécutables binaires DOS Atari.

00 3C FF 3F : 4 octets signalant le début et définissant un bloc de données à mettre en mémoire

00 3C : Adresse de stockage du premier octet du bloc de données, ici c'est à l'adresse $3C00

FF 3F : Adresse du dernier octet du bloc de données, ici c'est à l'adresse $3FFF incluse.

Une fois que tous les octets de données du bloc sont lus et chargés en mémoire, on peut rencontrer de nouveau 4 octets signalant un nouveau bloc de donnnées, sauf si la fin de fichier est atteinte (voir ci-après).

Les autres types de fichiers qui ne sont pas des fichiers binaires Atari DOS (fichiers executables) peuvent avoir une entête (Header) différente, et peuvent ne pas utiliser le système de chargement par blocs, cela suivant l'utilitaire ou le programme Atari qui a créé et qui utilisera le fichier. Voir ci-après.

NOTA: Les 'blocs' sont aussi appelé 'segment'.

2. Secteur(s) suivant(s):

Voici un secteur de 128 octets extrait d'un fichier Atari DOS standard (valable pour tout fichier DOS, exécutable ou simplement de données):

BYT#>00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
CHAR>
0123456789ABCDEF
00 : B6 2C B4 51 B4 7F B4 00 00 00 00 00 00 00 00 00
10 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70 : 00 00 00 00 00 00 00 00 00 00 20 41 42 04 94 7D
  ,Q..........
................
................
................
................
................
................
........... AB}
Checksum = $E7, Next sector = $094, Bytes per sector = $7D

Les 3 derniers octets du secteurs sont '04 94 7D': ils correspondent à:

04 94 : donnent $494 en hexadécimal sur 16 bits. En appliquant à cette valeur le masque AND $3FF on obtient la valeur du secteur suivant (Next sector) à lire dans le fichier, soit le secteur $094 dans notre cas.

Lorsque la valeur du secteur suivant est nulle, alors c'est que le secteur en cours est le dernier secteur du fichier DOS Atari.

7D : correspond au nombre d'octet de donnée valide du secteur courant (Bytes per sector) du fichier DOS Atari. Dans notre exemple c'est 125 en décimal. Il y a donc 125 octets de données dans ce secteur, de $B6, $2C ... à $20, $41, $42.

Nota: les 4 octets (adresses de début et de fin du bloc de données) au début d'un bloc de données sont inclus dans ce nombre d'octets valide. Mais ces 4 octets ne sont pas chargés en mémoire.

3. Dernier secteur:

Examinons la fin de fichier, le dernier secteur d'un fichier Atari DOS binaire (exécutable) standard:

BYT#>00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
CHAR>
0123456789ABCDEF
00 : 00 00 E0 02 E1 02 00 3C 00 00 00 00 00 00 00 00
10 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70 : 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 08
  ..............
................
................
................
................
................
................
................
Checksum = $0F, Next sector = $000, Bytes per sector = $08

Supposons que les 4 octets 'E0 02 E1 02' nous indique un nouveau bloc de données à lire et mettre en mémoire, sa taille est de 2 octets. Les 2 octets à charger en $02E0 et $02E1 sont $00 et $3C.

Or, le dernier octet du secteur nous indique qu'il n'y a que 8 octets valides à lire dans ce secteur, qui est le dernier secteur du fichier DOS Atari car le secteur suivant (Next Sector) est nul.

Nous constatons que l'octet $3C que nous venons de lire est le 8eme octet du secteur, nous avons donc atteint la fin du fichier DOS Atari. La lecture (avec mise en mémoire) du fichier DOS Atari est terminée.

 

Pour l'execution de ces fichiers executables voir ''Execution d'un programme Atari DOS Binary File''

 

[Page Top]

To contact me:/Pour me contacter: M'envoyer un EMail

[ Retour Sommaire Documentation Technique/Back to the Technical Issues Index]

[ Back to My Atari Site Index/Retour vers Mon Index Site Atari]

[Site Philippe Index Principal]

PVBest's Atari 8bit website

This page © PVBest 2002
Atari is a registered trademark / Atari est une marque déposée.
MS-DOS and Windows are registered trademarks of Microsoft Corp / MS-DOS et Windows sont des marques déposées de Microsoft Corp.
All Software names are registered by their owner / Les noms de logiciel appartiennent à leur auteur
.
If you have any comments or anything to tell me about the content of this page please contact me Webmaster [PVBest@free.fr]
Pour tous commentaires ou suggestions sur le contenu de cette page contactez-moi Webmaster [PVBest@free.fr]