Pourquoi un codage ?
Nous avons vu dans la partie relative aux nibbles que les valeurs qui peuvent �tre �crites sur la disquette doivent respecter un certain nombre de contraintes et que cons�quent la plage des valeurs de $00 � $FF ne peut physiquement pas �tre �crite (et relue) il faut donc op�rer ce que l'on appelle un codage pour translater les valeurs des octets de donn�es en nibbles. Bien �videment on �crit les donn�es par blocs de 256 octets, ce qui est la taille d'un secteur quand il est en m�moire... mais plus grand quand il est sur la disquette.

Il y a en fait trois types de codages standards:

          LE CODAGE 4.4
          LE CODAGE 5.3
          LE CODAGE 6.2
LE CODAGE 4.4
Nous avons vu que la contrainte g�n�rale est d'avoir une densit� de signaux suffisante et qu'en particulier le bit 7 doit �tre � 1 : le principe du codage 4.4 r�pond � ces exigences en imposant de ne JAMAIS rencontrer deux 0 de suite.

Pour cela un octet donn� est �crit avec deux nibbles, chacun comportant la moiti� des bits de l'octet de donn�e que l'on intercale entre des 1. Pour comprendre voici le mode op�ratoire :

Soit un octet de valeur xyxy.xyxy et on se fiche que x et y repr�sentent des 1 ou des 0
on fait d'abord une op�ration ORA avec la valeur $AA (soit 1010.1010)

on obtiendra alors un r�sultat Y= 1y1y.1y1y ce qui permet d'isoler les y

ensuite on d�cale les bits de xyxy.xyxy vers la droite avec LSR le r�sultat sera 0xyx.yxyx
puis on proc�de � un AND entre ce r�sultat et $AA (soit 1010.1010)
on obtiendra alors un r�sultat X= 1x1x.1x1x ce qui permet cette fois d'isoler les x.

Les deux r�sultats Y et X sont des valeurs de nibble TOUJOURS valables car elles ont le bit 7 � 1 et n'auront JAMAIS deux 0 de suite c'est math�matiquement impossible du fait des op�rations logiques qui viennent d'�tre effectu�es. On constate donc que notre octet de donn�e se trouve maintenant plac� au sein de deux nibbles par s�paration de ses bits en deux groupes de 4.

Prenons l'exemple avec le pire des cas : $00

C'est bien l� le pire exemple car nous avons le maximum de 0 qui se suivent et qu'il n'est pas possible d'�crire (et surtout de relire) sur une disquette APPLE II. Pour comprendre et permettre une bonne visualisation de ce qui se passe avec les bits de l'octet de donn�e, ils ont �t� color�s.

"0 0 0 0 .0 0 0 0" ORA "1010.1010" donnera "1 0 1 0 .1 0 1 0"

LSR "0 0 0 0 .0 0 0 0 " donnera "0 0 0 0 .0 0 0 0" Le premier 0 (bit 7) vient de l'op�ration LSR elle-m�me.

et cette derni�re valeur ORA "1010.1010" donnera "1 0 1 0 .1 0 1 0"

Les deux valeurs obtenues � savoir "1 0 1 0 .1 0 1 0" et "1 0 1 0 .1 0 1 0" sont des valeurs parfaitement autoris�es. On retrouve notre octet de donn�e cod� en 4.4 car il y a 4 bits dans chaque nibble (subtile d�signation � l'�vidence... qui permet de comprendre le terme "nibble" qui signifie "grignoter")



Le processus inverse pour retrouver la valeur de la m�moire � partir des deux nibbles �crits sur la disquette est aussi tr�s simple, le sch�ma suivant vous montre comment cela se passe avec d'autres op�rations bool�ennes.



POURQUOI CE CODAGE EST-IL INTERESSANT ?

Certes l'inconv�nient majeur de ce codage est de n�cessiter 2 nibbles pour �crire un octet... et � ce rythme la disquette serait remplie rapidement ! Cependant les int�r�ts du codage 4.4 sont multiples
Il est s�r
Il ne n�cessite pas de table de translation (voir les deux autres codages)
Il peut �tre d�cod� � la vol�e en lisant la disquette.

C'est pour cette raison que le num�ro de volume, le num�ro de piste, le num�ro de secteur et le checksum du champ d'ent�te de secteur sont ainsi cod�s, cela �vite de laisser passer la zone des donn�es si le programme devait faire un d�codage de ces informations par un syst�me plus lent.
Hacking corner

Attention ce codage est utilis� par de nombreux syst�mes de protection qui alternent joyeusement les d�calages � droite ou � gauche, mais cela reste toujours ais� � comprendre. Pour les �diteurs de jeux qui ne sont pas obligatoirement tr�s soucieux de la place � utiliser cela permet surtout des chargements rapides avec des routines parfaitement minimalistes.

LE CODAGE 5.3
Le codage 5.3 permet au moyen de l'utilisation d'une table de translation d'�crire plus de valeurs possibles sur la disquette Nous venons de voir que le codage 4.4 malgr� tous ces avantages avait l'inconv�nient majeur de consommer de la place sur la disquette. En effet pour coder un secteur de 256 octets il faut �crire 512 nibbles! En clair la table de translation si elle existait serait de 16 octets (indexation sur des valeurs � 4 bits maximum)

Le DOS 3.2 augmente la taille de cette table � 32 ce qui permet de stocker les 256 octets de donn�es avec moins de nibbles et en l'occurence 410. Soit un gain de (512-410) /512 = 19,92% bref 20%
LE CODAGE 6.2
Avec des restrictions moins grandes que le pr�c�dent, le DOS 3.3 augmente la taille de la table � 64 valeurs ce qui permet de stocker les 256 octets de donn�es avec 342 nibbles soit un gain de 49,71% par rapport au codage 4.4 et de 24,90% par rapport au codage 5.3... pas rien tout de m�me !
Soit BUFFER la zone o� se trouvent les octets de donn�es, on utiliser deux autres buffers astucieusement nomm�s BUF1, buffer principal de 256 octets, et BUF2, buffer secondaire de 86 octets. La technique est alors simple il suffit de faire glisser 2 bits de chacun des octets de donn�e de BUFFER dans BUF2 et de placer les 6 restant dans BUF1. C'est le r�le de la routine de pr�nibbilization expliqu�e par le graphique suivant. Le source particuli�rement lumineux est expliqu� ensuite.

PRENIBBILIZATION ET NIBBILIZATION
Le source de la routine de pr�nibbilization utilis�e par le DOS 3.3 est la suivante :PRENIB

Le source de la routine de postnibbilization utilis�e par le DOS 3.3 est la suivante :POSTNIB

Attention : PRODOS utilise bien le codage 6.2, �crit sur la disquette EXACTEMENT la m�me chose que ce que ferait le DOS 3.3 pour enregistrer une page de donn�es MAIS les routines sont TOTALEMENT DIFFERENTES, beaucoup plus rapides et plus flexibles au sens o� la page m�moire � �crire peut �t � cheval sur deux pages en m�moire. Ces routines sont expliqu�es dans la rubrique LA METHODE PRODOS