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''
|