INTRODUCTION
Le monde est très complexe et nous autres, bipèdes
faits d'os, de chair et de sang, nous préférons le
présenter sous une forme plus simple que nous
appréhendons mieux. Que ce soit pour
simplifier la communication, par abus de langage, par facilité
(qui a dit
fainéantise?), ou tout simplement par ignorance.
Par exemple les vendeurs de périphériques de stockage ne
s'embarrassent pas des réalités informatiques de base.
Mettons nous dans la peau d'un d'entre eux qui veut vendre son matos
à un client potentiel.
Allez faire comprendre au 1er quidam venu que la mesure de base dans
l'informatique n'est pas 1000 mais 1024 et vous êtes foutu!!
La plupart des gens n'en savent rien. Tout ce qu'ils veulent, c'est
stocker les photos du petit dernier en train de faire des pitreries.
Aussi qu'est-ce qu'ils en ont à faire de ces subtilités?
Et
surtout ne venez pas vous foutre de leur gueule en soulignant leur
ignorance, ils feraient demi-tour aussi sec.
Vous connaissez votre métier: le client, c'est le type QUI A LE
FRIC et il faut uniquement lui dire des choses compréhensibles
à son niveau, de préférence en nivelant par le bas.
Que vous soyez d'accord ou pas, c'est une méthodologie
couramment appliquée...
Pour
un type qui utilise des unités qui sont des multiples de 1000
(les poids et les
mesures), changer de base demande un effort ou nécessite de
remettre en question des réflexes. Et c'est chiant, il faut bien
le dire!!! (Combien d'entre nous comptent encore en francs et pas en
euros??)
Bref pour le commercial qui veut fourguer un disque dur, il est plus
facile de dire qu' 1 kilo-octet = 1000 octets, qu'un mega-octet = 1000
ko, qu'un giga-octet = 1000 megas, etc...
C'est faux, mais le mec en face a ainsi un ordre d'idée dans
l'unité qu'il utilise couramment pour autre chose (et beaucoup
de choses). Il y a aussi une variante qui consiste à exprimer la
taille dans une autre unité plus proche du client. Puisque c'est
pour stocker des photos, on va lui dire qu'il peut en stocker des
milliers dans une proportion d'approximation "acceptable". Avec
ça il sera content (de toute façon il ne
va pas les compter pour vérifier et le truc c'est de rester flou
sans donner la résolution et le niveau de compression des
photos...) Dans les temps plus anciens la combine marchait
déjà: sur Apple II, on parlait du nombre de pages de
texte
sauvegardables sur la disquette...
Et pour énormément de trucs, on se coltine ainsi des
approximations réductrices.
Pour le lecteur de disquettes de l'Apple II, c'est exactement pareil.
Par exemple, prenez une disquette 5,25 pouces.
Et demandez à un ancien possesseur d'Apple II de vous dire
où sont écrites les informations quand on enregistre des
données sur la face 1. A presque tous les coups, il vous dira
que c'est sur la face de dessus, là où il y a
l'étiquette.
Manque de bol pour lui, dans le drive, la tête de
lecture/écriture se trouve sous la disquette et de ce fait, les
informations sont en réalité écrites sur la face
arrière! Ce n'est que lorsque vous retournez la disquette dans
le lecteur que les informations sont écrites sur la face avant.
Dans le même genre, quand vous demandez comment sont lues les
informations, la plupart des gens s'imagine qu'il y a une tête de
lecture qui avance sur la piste magnétique pour charger les
informations. Tout ça parce qu'on s'identifie à la
tête de lecture et pour aller du point A au point B, il faut bien
que l'on avance.
Alors qu'en fait la tête de lecture ne bouge pas lors de la
lecture d'une piste mais c'est le
disque souple de mylar de la disquette qui tourne sur lui même.
Maintenant la question que je vous pose, c'est: qu'est ce que vous
allez lire EXACTEMENT si vous demandez à la RWTS du DOS 3.3 de
charger le
secteur $0B de la piste $00?
Avec tout ce que je vous ai dit précédemment, vous allez
vous dire qu'il y a un piège quelque part!
Pas faux, mais si vous ne donnez pas la bonne réponse, ce n'est
pas entièrement de votre faute!
C'est un grand classique qu'on a dû vous apprendre à
l'école en cours de philo.
D'abord vous méfiez du support de la communication et plus
particulièrement du manque de précision dans le langage.
Car quand on parle de secteurs, il faut être plus précis.
S'agit-il de secteurs physiques ou de secteurs logiques?
KESAKO???
On distingue en effet 2 notions de secteurs. Je vous propose à
présent quelques
éclaircissements et la solution à la question.
Mon ami Jean-Pierre a déja écrit
un cours théorique sur l'interleaving des disquettes 5,25" mais je
souhaiterais faire un petit complément en adoptant une approche
par travaux pratiques.
J'aime bien le concrêt et avec l'approche par cas réel, la
compréhension n'en est que meilleure...
On y va...
TRAVAUX PRATIQUES
Sur votre Apple II, bootez un DOS 3.3 System
master dans votre lecteur
disk II.
Lorsqu'il vous a donné la main, introduisez une disquette vierge
et tapez INIT TEST,S6,D1 pour que le DOS la formate et installe dessus
une copie de lui-même.
Lors de cette phase de formatage, le DOS 3.3 a écrit sur la
disquette 35 pistes*16 secteurs=560 champs adresses contenant la
référence (entre autre) du numéro de piste et du
numéro de secteur (je ne parle pas encore de notion de physique
ou logique exprès!); ceci afin que lors des accès disques
les programmes sachent toujours quel secteur se trouve dans les parages
de la tête de lecture sans avoir à se baser sur une
quelconque marque physique faisant la même chose. (L'Apple II
fait du soft-sectoring).
Une fois que c'est fait, mettez dans le drive une disquette utilitaire
contenant le programme Nibbles Away ][
et lancez le. (Pour rappel, ce programme permet
d'examiner sous forme de nibbles le contenu d'une disquette, c'est
à dire toutes les informations sous leur forme non
décodées).
Remettez dans le drive votre disquette nouvellement formatée et
sélectionnez l'option T-TRACK/BIT EDITOR.
Tapez R pour que Nibbles Away ][ lise la piste
$00.
La première chose que l'on va regarder, c'est dans quel ordre la
commande de formatage INIT du DOS 3.3 a numéroté les
secteurs dans les champs adresses.
On va donc aller à la recherche des 16 champs adresse de la
piste $00.
Chaque champ adresse est précédé de gap ici sous
forme de valeurs de nibbles $FF.
On va donc utiliser ces séries de $FF comme repères.
Chaque champ adresse suivant ces gaps est composé des
éléments
suivants:
Un header: $D5 $AA $96
Le numéro de volume sur 2 octets (codage 4-4)
Le numéro de piste sur 2 octets (codage 4-4)
Le numéro de secteur sur 2 octets (codage 4-4)
Le checksum sur 2 octets (codage 4-4)
Un trailer: $DE $AA $EB
Dans un champ adresse, le numéro de piste et le numéro de
secteur sont codés sur 2 octets selon la méthode 4-4.
Voici la liste des équivalences:
Secteur Codage 4-4
$00 AA AA
$01 AA AB
$02 AB AA
$03 AB AB
$04 AA AE
$05 AA AF
$06 AB AE
$07 AB AF
$08 AE AA
$09 AE AB
$0A AF AA
$0B AF AB
$0C AE AE
$0D AE AF
$0E AF AE
$0F AF AF
Pour résumer:
- On se concentre sur une suite importante de $FF
(gap).
- On
recherche la série D5 AA 96 comme repère de début
de champ adresse.
- On saute les numéros du volume et de
piste qui sont toujours à FF FE (volume) et AA AA (piste 0).
- Les 2 octets qui arrivent ensuite sont ceux qui nous
intéressent
et on regarde quelle est la valeur correspondante dans la table
donnée ci-dessus.
Nibbles Away ][ a chargé la piste
à partir de $2200.
Utilisons la touche flèche droite pour avancer dans la
mémoire et afficher le contenu de la piste $00 chargée.
J'ai colorié sur chaque écran le 1er digit du header
adresse en
bleu et le 1er digit du numéro du secteur codé 4-4 en
rouge
pour repérer tout ça plus facilement.
Pas de gap (valeurs $FF) sur le 1er écran débutant en
$2200. Passons au suivant. Là il y en a.
1er champ adresse trouvé par Nibbles Away ][:
AEAB correspond au numéro de secteur $09.
2nd champ adresse trouvé par Nibbles Away ][:
AFAA correspond au numéro de secteur $0A.
3ème champ adresse trouvé par Nibbles
Away ][:
AFAB correspond au numéro de secteur $0B.
4ème champ adresse trouvé par Nibbles
Away ][:
AEAE correspond au numéro de secteur $0C.
5ème champ adresse trouvé par Nibbles
Away ][:
AEAF correspond au numéro de secteur $0D.
6ème champ adresse trouvé par Nibbles
Away ][:
AFAE correspond au numéro de secteur $0E.
7ème champ adresse trouvé par Nibbles
Away ][:
AFAF correspond au numéro de secteur $0F.
8ème champ adresse trouvé par Nibbles
Away ][:
AAAA correspond au numéro de secteur $00.
9ème champ adresse trouvé par Nibbles
Away ][:
AAAB correspond au numéro de secteur $01.
10ème champ adresse trouvé par Nibbles
Away ][:
ABAA correspond au numéro de secteur $02.
11ème champ adresse trouvé par Nibbles
Away ][:
ABAB correspond au numéro de secteur $03.
12ème champ adresse trouvé par Nibbles
Away ][:
AAAE correspond au numéro de secteur $04.
13ème champ adresse trouvé par Nibbles
Away ][:
AAAF correspond au numéro de secteur $05.
14ème champ adresse trouvé par Nibbles
Away ][<:
ABAE correspond au numéro de secteur $06.
15ème champ adresse trouvé par Nibbles
Away ][:
ABAF correspond au numéro de secteur $07.
16ème champ adresse trouvé par Nibbles
Away ][:
AEAA correspond au numéro de secteur $08.
17ème champ adresse trouvé par Nibbles
Away ][:
AEAB correspond au numéro de secteur $09.
On va s'arrêter là.
Récapitulons ce que l'on a trouvé dans l'ordre:
$09 $0A $0B $0C $0D $0E $0F $00 $01 $02 $03 $04 $05 $06 $07 $08 $09...
Le DOS 3.3 a écrit des numéros de secteurs dans un ordre
croissant.
Comme la lecture commence à un moment quelconque, la tête
n'est pas nécessaire au dessus du secteur $00.
Dans notre cas de figure, la tête était au dessus du
secteur $09.
Si vous appuyez plusieurs fois sur la touche R pour relire la piste,
vous constaterez que vous commencez presqu'à chaque fois par un
secteur différent.
Quand on atteint le secteur $0F, le suivant est le $00.
Nibbles Away ][ lisant et stockant plusieurs
fois la piste en
mémoire, en continuant à appuyer sur la touche
flèche droite, on retombe sur les secteurs que l'on a
déjà lu.
Cet ordre de plus bas niveau (celui enregistré au niveau du
champ adresse) est appelé ordre physique.
UN NUMERO DE SECTEUR PHYSIQUE EST UN NUMERO ENREGISTRE DANS LE CHAMP
ADRESSE.
AVEC UN DOS 3.3 STANDARD, LES SECTEURS PHYSIQUES SONT DANS UN ORDRE
ASCENDANT DE
$00 A $0F.
Je ne m'étendrais pas dessus, mais il faut savoir que
d'anciennes versions du DOS avaient des programmes de
formatage créant des champs adresses
dont les numéros de secteurs physiques n'étaient pas
ascendants. (et certains
programmes underground utilisent aussi une autre numérotation).
Pour ce cours, on ne parle que de standard DOS 3.3.
Toujours avec Nibbles Away ][, recherchez
à présent les
secteurs physiques dont le champ data est rempli de valeurs $96.
Pour rappel, le début du champ data est séparé du
champ adresse
par quelques nibbles de valeur $FF (gap).
Puis on trouve:
Un header: $D5 $AA $AD
Les 342 nibbles de datas codés selon la méthode 6-2.
Un nibble de checksum
Un trailer: $DE $AA $EB
Pour simplifier la lecture, j'ai gardé les mêmes couleurs
que tout à l'heure pour le champ adresse et j'ai colorié
en jaune le 1er digit de l'header du champ data.
On trouve en tout et pour 2 secteurs physiques dont le champ data est
rempli de
$96: AFAA (=secteur physique $0A) et AEAA (=secteur physique $08).
Pour rappel, quand les 342 nibbles d'un champ data sont remplis de $96,
cela signifie que le secteur est rempli en fait de 256 octets à
zéros.
Continuons notre cours pratique.
A présent, bootez un éditeur de secteurs comme COPY II+
5.x
pour DOS 3.3 et lancez l'option de SECTOR EDITOR:
Puis nous allons charger les numéros de secteurs trouvés
dans les champs adresse.
Chargez le secteur T$00 S$0A.
Cool, ça a une bonne tête: rempli de zéros!
Puis chargez la seconde référence: le secteur T$00 S$08.
"Merde alors!!" allez-vous me dire. Le secteur n'est pas rempli de
zéro!!
Mais pourquoi donc?????
- Est-ce que cela veut dire que quand COPY II+
parle de secteurs, il ne
s'agit pas de secteurs physiques?
- Pourquoi est-ce qu'il y a un secteur rempli avec des zéros et
pas
l'autre?
- Est-ce que COPY II+ est bogué???
Si vous n'avez pas confiance en COPY II+,
retentez l'expérience
autrement.
Créez un petit programme qui fait appel à la RWTS et
chargez les secteurs $0A et $08.
Vous vous êtes donné du mal pour rien car vous trouverez
exactement la même chose!!!
Déja, on peut dire que:
- COPY II+ n'est pas bogué (à ce
niveau!)
- COPY II+ et la RWTS n'utilise pas la notion
de secteur physique.
Mais à quoi correspondent ces numéros de secteurs et
pourquoi Apple a introduit une autre numérotation?
Tout à l'heure, nous nous sommes mis à la place d'un
vendeur de disque dur.
Mettons nous à présent dans la peau d'Apple
Computer Inc.
(Je sais que depuis peu il faut écrire Apple Inc.
uniquement
mais personnellement le seul Apple que je connaisse et respecte, c'est
l'Apple qui a produit l'Apple II).
Apple doit faire face à une réalité technique.
DOS 3.3 met du temps à décoder un champ data quand il lit
des secteurs (l'opération de denibblizing ou post-nibblizing).
Cas concrêt: la tête de lecture est en train de
décoder le secteur physique $00.
Le temps que l'opération se fasse dans son
intégralité, lorsque la tête reprend la lecture, le
prochain champ adresse qu'elle rencontre n'est pas celui du secteur
physique $01 (se trouvant juste après le secteur physique $00)!!
Le champ adresse du secteur physique $01 est
passé sous la tête quand l'Apple décodait et
maintenant il faut attendre la prochaine rotation pour traiter ce
secteur physique $01.
Alors qu'est ce qu'il faut faire? Attendre coute que coute ce secteur
physique $01 et donc attendre la fin de la rotation???
NON! Car sinon il y aurait beaucoup de rotations pour lire une piste
entière dans l'ordre physique des secteurs et chaque rotation
prend du temps (l'utilisateur attend pendant ce temps là).
Alors la solution, c'est de traiter immédiatement le prochain
secteur physique que rencontre la tête de lecture dans le
champ adresse.
Donc, les secteurs physiques ne sont pas lus dans une séquence
chronologique.
Ce numéro de secteur ne sera pas le secteur $01.
Seulement, il est psychologiquement beaucoup plus simple d'avoir une
notion de secteurs chronologiques.
Quand vous prenez la voiture pour faire 16km, vous vous attendez
à voir des bornes km 0, km 1, km 2, ... km 15.
Si je vous dis que vous allez avoir la séquence bizarre des
bornes avec km 0, km 13, km 11, ... km 15, vous allez me rire au nez et
gueulez en disant "qu'est ce que c'est que ce bordel"?
Aussi Apple a inventé une notion virtuelle de numération
de secteurs pour masquer le fait que l'on n'a pas une séquence
ascendante des secteurs physiques quand le DOS 3.3 lit une piste de la
disquette.
C'est ce qu'on appelle un ordre LOGIQUE des secteurs.
Avec cet ordre logique, vous avez l'impression que les numéros
de secteurs se suivent gentiment.
C'est pratique, plus simple et vous ne passez pas pour un con en disant
qu'après le secteur n, nous ne lisez pas le secteur n+1.
COPY II+ et la RWTS ont des interfaces avec
l'utilisateur ou le
programmateur qui n'emploient que la notion de secteurs logiques.
L'équivalence entre secteur physique et secteur logique se fait
pas le biais d'une ou deux tables en fonction de l'opération que
l'on cherche à réaliser.
Par exemple si un programme cherche à savoir quel est le secteur
qui passe actuellement sous la tête de lecture. Il lit le champ
adresse et à partir du numéro de secteur physique
trouvé, il va chercher son équivalent logique.
Vous pouvez aussi avoir le cas où vous savez que vous devez
charger un secteur logique donné et il vous faut son
équivalent physique pour le rechercher sur la disquette.
Pour résumer, en fonction du sens désiré, il est
plus simple d'avoir une table adaptée triée sur l'index
ascendant connu.
Pour désigner ces tables, on utilise comme vocabulaire
indifférement le terme interleaving ou skewing. En
français, on parle plus volontiers d'interfoliation
des secteurs.
Voici ces tables VALABLES pour COPY II+ et la
RWTS, tous les 2 se
basant sur la logique du DOS 3.3:
Table numéro
1:
Table numéro 2:
Interleaving
secteur
Interleaving secteur
Physique =>
Logique
Logique => Physique
$00 =>
$00
$00 => $00
$01 =>
$07
$01 => $0D
$02 =>
$0E
$02 => $0B
$03 =>
$06
$03 => $09
$04 =>
$0D
$04 => $07
$05 =>
$05
$05 => $05
$06 =>
$0C
$06 => $03
$07 =>
$04
$07 => $01
$08 =>
$0B
$08 => $0E
$09 =>
$03
$09 => $0C
$0A =>
$0A
$0A => $0A
$0B =>
$02
$0B => $08
$0C =>
$09
$0C => $06
$0D =>
$01
$0D => $04
$0E =>
$08
$0E => $02
$0F =>
$0F
$0F => $0F
Pour d'autres systèmes (PASCAL, CP/M et ProDOS), basez-vous sur
les tables données par Jean-Pierre sur sa
page (voir lien
donné tout à l'heure).
Je reprends ma question initiale dans sa version complête: qu'est
ce que vous
allez lire EXACTEMENT comme secteur physique si vous demandez à
la RWTS du DOS 3.3 de
charger le
secteur logique $0B de la piste $00?
Pour répondre, il suffit de se référer à la
table 2. Le secteur logique $0B donne le secteur physique $08. Si vous
le lisez, vous voyez bien qu'il est rempli de zéros comme nous
l'avions constaté tout à l'heure avec Nibbles
Away ][.
Il y avait aussi la question de savoir pourquoi quand avec COPY II+ on
lisait le secteur logique $0A, on récupérait en fait
aussi des zéros. Il suffit là encore de lire la table 2:
le secteur logique $0A correspond tout simplement au secteur physique
de même numéro.
Le secteur logique $08 lu avec COPY II+
correspondait lui au secteur
physique $0E qui était remplis de valeurs pour la plupart
différentes de zéro.
CONCLUSION ET COMPLEMENT
Pour finir comme je l'ai commencé...
On se contente de parler de secteur par fainéantise ou
méconnaissance.
Il faudrait toujours mentionner secteur physique ou secteur logique
pour clarifier la
situation.
Les champs adresse des secteurs contiennent les numéros de
secteurs physiques. Ils sont numérotés dans un ordre
ascendant.
Quand le DOS doit
charger plusieurs secteurs physiques à la suite, l'ordre de ces
secteurs physiques trouvés n'est pas chronologique du fait du
temps de
post-nibblizing.
Pour optimiser, il lit le 1er secteur physique qu'il trouve
après celui traité.
Pour rendre plus simple et mieux représentable à votre
cerveau la suite des secteurs, la notion de secteurs logiques a
été introduite. Vous avez l'impression d'avoir une suite
ordonnée de numéros de secteurs logiques de $00 à
$0F. Mais par derrière, le DOS 3.3 ou
encore COPY II+ gèrent les tables
d'équivalence
entre les 2 notions physique et logique.
En dehors des programmes de très bas niveau qui lisent et
écrivent directement les champs adresse (et donc les secteurs
physiques), on ne parle que de secteurs logiques.
En complément, juste un petit mot sur ce que vous trouvez dans
les
programmes d'E/S en langage machine.
Comme nous l'avons vu, on part d'un secteur connu (physique ou logique)
qui est la source et on cherche son équivalent, la cible. Il va
de soi que les programmes pour faire cette équivalence n'ont pas
besoin de stocker la séquence des secteurs sources (il s'agit
toujours des valeurs $00, $01, $02, ... $0F). Ils mettent le
numéro du secteur source dans un registre et lisent le secteur
cible dans la table désirée (DOS 3.3).
Exemple:
LDX #secteur source
LDA Table1,X ou Table2,X ; l'accumulateur contient le secteur cible
* Source=secteur physique, cible=secteur logique
Table 1 DFB $00, $07, $0E, $06, $0D, $05, $0C, $04, $0B, $03, $0A, $02,
$09, $01, $08, $0F
* Source=secteur logique, cible=secteur physique
Table 2 DFB $00, $0D, $0B, $09, $07, $05, $03, $01, $0E, $0C, $0A, $08,
$06, $04, $02, $0F