Le formattage des disquettes d'APPLE est très particulier en ce sens qu'il ne fait pas appel à un système externe pour signaler au programme de lecture qu'il va arriver sur une zone de données. C'est un formattage EXCLUSIVEMENT LOGICIEL.

Découpage de la disquette en pistes

Les disquettes 5'25 sont formattées en 35 pistes (soit $23 pistes numérotées de $00 à $22), la piste 0 est la plus extérieure et la piste 35 la plus intérieure. Le catalogue de la disquette est placé sur la piste 17 ($11). Il n'y a pas de variation de la vitesse du moteur pour chaque piste, la vitesse reste la même pour chacune.

Hacking corner

1. certaines protections utilisent ce que l'on appelle une extra-piste à savoir la piste $23 qui n'est pas accessible par le DOS normal. Ce type de protection fait partie des premiers trucs et astuces mais présente l'inconvénient de ne pas fonctionner sur tous les lecteurs de disquettes.

2. Nous verrons dans la section "déplacement de la tête de lecture" qu'il est possible d'écrire sur ce qui est appelé les inter-pistes ou demi-pistes, voir les quarts de pistes ! En effet la résolution magnétique de la tête de lecture est telle qu'elle impose une distance minimale entre deux pistes... or le moteur utilisé en pas à pas permet des déplacements tels qu'il est possible de se déplacer d'une demi-piste. Pour le quart de piste c'est un problème de timing qu'il convient de mettre en oeuvre. MAIS il faut TOUJOURS un espace d'une piste entre deux zones d'écriture, demi-piste ou quart de piste...

3. Il existe un bricolage simple à faire pour voir les pistes qui sont utilisées par un programme... utile quand on ne sait pas s'il va sur la $23, fait des 1/2 des 1/4 de pistes, du track arcing etc... Pas cher, juste un feutre un programme comme locksmith bref on apprend comment repérer les pistes.

4. Une technique de protection consiste à ce qui s'appelle la synchronisation des pistes qui n'a STRICTEMENT RIEN A VOIR AVEC LA SYNCHRONISATION DE LECTURE telle qu'expliquée en rubrique "synchronisation" mais QUI A TOUT A VOIR AVEC LA RUBRIQUE "synchronisation des pistes"

Découpage des pistes en secteurs

Les pistes sont découpées artificiellement en secteurs. Il y a :
13 secteurs en DOS 3.2
16 secteurs en DOS 3.3, PASCAL et la plupart des autres OS .

La taille d'un secteur correspond à un nombre de nibbles variable selon le codage mais dont le résultat correspond normalement à une page de 256 octets en mémoire.

Chaque secteur est précédé et suivi par des nibbles dits de synchronisation.



Hacking corner

Evidement vous avez compris que là encore des systèmes de protection utilisent un nombre variable de secteurs par piste ou modifient la taille des secteurs... les combinaisons sont alors infinies. Des exemples vous sont donnés dans la rubrique "formats exotiques"

Découpage des secteurs en deux champs

Lors de l'initialisation de la disquette la routine de formattage écrit donc 16 secteurs sur chaque piste. Chaque secteur se décompose en 2 parties bien distinctes séparées par des nibbles de synchronisation, ce sont :
Le champ adresse, qui est écrit lors de l'initialisation, il n'est plus modifié par la suite
Le champ des données, qui est écrit certes à l'initialisation mais qui lui peut être bien evidemment réécrit pour enregistrer les modifications de données.

Le début de ces champs est identifié par une séquence de nibbles bien précis (l'entête) qui sont :
Pour le champ adresse : D5 AA 96
Pour le champ données : D5 AA AD

Pour savoir comment se fait la détection de ces champs, il faut aller voir la section "synchronisation"

ORDRE PHYSIQUE ET ORDRE LOGIQUE :

Il faut savoir que les secteurs ont un ordre physique 0,1,2,3,4 etc... qui ne correspond pas à l'ordre logique. Qu'est-ce qu'un ordre logique ? En fait pendant le temps mis par le système d'exploitation pour décoder les données enregistrées, la disquette continue à tourner et évidement le secteur physique qui suit celui en cours de décodage est dépassé depuis longtemps, donc pour optimiser le temps de lecture l'ordre logique est celui qui permet de charger les secteurs dans un ordre défini de façon telle qu'à la fin du décodage de l'un la tête de lecture se trouve en mesure de lire le premier secteur physique qu'elle rencontre : c'est ce qui s'appelle l'INTERLEAVING et qui est décrit en détail dans la rubrique astucieusement nommée "Interleaving..."

Hacking corner
D'astucieux systèmes de protection n'utilisent pas systématiquement des champs séparés adresse/données. Ils se contentent de markers d'entête et éventuellement d'un repérage simpliste de piste/secteur

Le champ adresse
Il est important de bien noter que le champ des données est ECRIT UNE SEULE FOIS lors de l'initialisation. Si la disquette a été formattée il y a 20 ans le champ adresse a été écrit il y a 20 ans... ce qui n'est pas nécessairement le cas du champ des données qui est réécrit à chaque mise à jour.

Le champ adresse est composé :
d'un entête
d'un numéro de volume
d'un numéro de piste
d'un numéro de secteur
d'un checksum
d'une sequence finale


DOS 3.3

D5 AA 96
XX YY
XX YY
XX YY
XX YY
DE AA EB



2 nibbles codés 4.4
2 nibbles codés 4.4
2 nibbles codés 4.4
2 nibbles codés 4.4

DOS 3.2

D5 AA B5
XX YY
XX YY
XX YY
XX YY
DE AA EB
Le champ des données
Il est important de bien noter que le champ des données est SYSTEMATIQUEMENT précédé par 5 $FF de synchronisation lors de CHAQUE réécriture ce qui cause des chevauchements de champs magnétiques de façon aléatoire et que nous verrons plus loin.

Le champ des données est composé :
d'un entête
des données elles mêmes
d'un checksum
d'une sequence finale


DOS 3.3

D5 AA AD
342 nibbles codés 6.2
1 nibble codé 6.2
DE AA EB


DOS 3.2

D5 AA AD
410 nibbles codés 5.3
1 nibble codé 5.3
DE AA EB


Il n'est pas inutile de préciser ici que les valeurs $FF de synchronisation sont écrites en 40 cycles et de ce fait vous avez sur la disquette deux 0 supplémentaires derrière les 1 du $FF. On a donc un $FF écrit en 10 bits soit 1111.1111.00 (les points ne sont là que pour la lisibilité évidement). Les raisons sont expliquées dans la section "synchronisation"

Nous verrons dans l'examen attentif (enfin j'espère) de la routine d'écriture du champ adresse du DOS 3.3 que le $EB ne peut JAMAIS être écrit correctement... et que de tout façon il n'est pas testé en relecture !
Hacking corner

Bien sûr si vous changez les markers vous rendez non copiable par le programme standard COPYA ou les programmes non spécifiques votre disquette. Vous avez UNE CONTRAINTE :

le secteur 0 de la piste 0 DOIT ETRE ECRIT AVEC LES MARKERS STANDARD... sinon la disquette ne peut pas être chargée.

C'est là le talon d'achille de TOUTES LES PROTECTIONS car cela permet de mettre en oeuvre la technique du tracé de boot qui est IMPARABLE... mais cela ne signifie pas pour autant que la suite est facile ! Le détail de cette technique est expliquée plus loin dans la section "Bootstrap"

INITIALISATION ET REECRITURE

Pour initialiser une disquette vous chargez un DOS et tapez la commande :

INIT HELLO suivi de RETURN

Notas importants:
1. HELLO est le nom du programme BASIC qui sera lancé quand votre disquette bootera sur l'APPLE II. Vous pouvez choisir tout autre nom cela n'a pas d'importance. Ce programme BASIC est celui présent en mémoire lors de la commande INIT évidement, s'il n'y en a pas eh bien vous aurez quand même un fichier basic HELLO ... mais vide.

2. Vous pouvez remplacer le programme HELLO en l'effaçant et en renommant par HELLO celui que vous voudrez voir lancé. (comme dit ci-dessus, si vous avez fait l'INIT avec TARZAN alors ce sera TARZAN qu'il faudra utiliser pour le renommage.

3. Sauf avec des utilitaires spécifiques (COPY II PLUS par exemple) vous ne pouvez pas changer le nom de fichier choisi avec la commande INIT.
Hacking corner

Lors de l'initialisation les pistes sont formattées une fois pour toute en ce qui concerne les champs adresse. Pour ce qui est des champs datas ils sont écrits certes à l'initialisation mais ensuite réécrits chaque fois qu'il y a besoin... ce qui explique la présence de zones magnétiques instables entre les champs adresse et data.



Sur le dessin il est précisé que l'on ré-écrit les données une première fois avec un drive lent puis une seconde fois avec un drive rapide mais gardez toutefois à l'esprit que c'est ce qui se passe sur un même lecteur.. il y a toujours de zones de recouvrement des champs magnétiques qui sont des zones instables.

Ces zones d'instabilité désynchronisent la lecture c'est pourquoi on réécrit toujours le champ des données en commençant par réécrire des $FF de synchronisation. Le problème ne se pose JAMAIS pour les champs adresse car ils sont écrits une fois pour toute... jusqu'à ce la disquette déraille.