Les champs magnétiques
Au départ le disque souple de la disquette contient des particules magnétiques, orientées dans n'importe quel sens. Ces particules sont sur la zone appellée OXYDE qui repose sur le disque souple lui-même qui est en MYLAR. Cela donne (en vue d'artiste car les couleurs ne sont là que pour faire comprendre)




Le formattage de la disquette (outre le fait qu'il permet d'enregistrer des données servant au repérage des pistes et des secteurs) oriente ces particules magnétiques dans un sens ou un autre... bref met un peu d'ordre dans le souk général.




L'enregistrement des 1 et des 0 se fait de façon très particulière sur APPLE II à savoir que globalement un 1 est matérialisé par une inversion du champ magnétique et un 0 par l'absence de cette matérialisation.

Le champ magnétique sur une piste est normalement parallèle au sens de déplacement, et une inversion de champ lui est inverse (la réalité est un peu plus complexe mais cela n'affecte pas la compréhension). Ces changements de champs magnétiques sont appelées transitions magnétiques et ce sont elles qui sont à la base du système qui permet de déterminer si on lit un bit 1 ou un bit 0.

Mais... là où tout se complique c'est lorsqu'on veut comprendre comment cela se passe.

Pour écrire un champ magnétique dans un sens ou dans un autre, il suffit d'inverser le courant qui traverse la bobine de la tête de lecture. Le schéma ci-dessous vous montre ce qui se passe sur trois exemples consécutifs.



Il faut bien comprendre que ECRITURE et LECTURE sont symétrique en ce qui concerne les signaux. Le schéma ci-dessous explique cette symétrie. Globalement, pour l'écriture on fait varier le courant dans la bobine de la tête de façon à écrire les champs magnétiques et pour la lecture ce sont les variations de ces champs magnétiques qui générent un courant induit dans la bobine de la tête de lecture.



LE PRINCIPE DE FONCTIONNEMENT EN LECTURE
1. Les variations des champs magnétiques présents sur la disquette entraînent un courant induit à travers la tête de lecture.

2. Ce courant est alors mis en forme, traité et analysé par le MC3470 qui génére un signal "pulse" selon le cas

3. Le "logic state sequencer" définit la valeur du bit à passer dans le registre de données lors du déroulement de son code à travers l'enchaînement des séquences.
Pour le 1 c'est relativement simple, dès lors qu'il y "pulse" on aura normalement un 1. Mais pour le 0 ? Eh bien en fait le "logic state sequencer" est une machine à état qui détermine à un temps T qu'il y a un 0 dès lors qu'après un certain délai entre le dernier "pulse" reçu et ce moment T, il n' a pas reçu un nouveau signal "pulse". Le point marquant la fin du délai est appelé point de décision. Il n'est pas le même en DOS 3.2 qu'en DOS 3.3. Tout savoir sur LE FONCTIONNEMENT DU SEQUENCER

Pourquoi il n'est pas possible d'écrire plus de deux 0 de suite ?

En effet ce n'est pas tout à fait exact, vous pourriez parfaitement écrire $00 (0000.0000) sur la disquette puisqu'il suffit de passer cette valeur au contrôleur comme s'il s'agissait d'un nibble valide... et il ne la refuserait pas car c'est au programme de contrôler les valeurs valides ou non !

Mais surtout vous ne pourriez pas la relire correctement pour plusieurs raisons :

1. De façon générale vous ne sauriez jamais où commence un nibble. En effet si la règle du bit 7 à 1 n'était pas imposée, vous seriez incapable de faire la différence entre des bits 0 de nibbles valides et des bits 0 de synchronisation qui n'auraient d'ailleurs aucune signification. Le LSS est d'ailleurs programmé pour ne pas pouvoir lire les valeurs ne commençant pas par 1 (cf. l'explication détaillée dans le HACKING CORNER de la rubrique FONCTIONNEMENT EN DETAIL DU LSS POUR L'OPERATION "READ").

Alors admettons que vous n'écriviez que des nibbles supérieurs à $7F donc de $80 à $FF, et supposons que vous avez écrit des $80 (1000.0000)... il y a encore des problèmes que nous allons voir en 2,3 et 4 ci-dessous.

2. Sans nier l'influence de la température, de la vitesse du drive etc... qui font que l'on a des variations magnétiques non souhaitées, la répartition de l'oxyde magnétique n'est pas parfaite sur la disquette. Au niveau miscroscopique vous pourriez voir des amas plus ou moins épais ce qui entraîne des champs magnétiques d'intensité variable, ce qui génére des variations magnétiques, faibles certes, mais variations tout de même qui constituent ce que l'on appelle du bruit et qui est normalement filtré par le MC3470.

3. Mais justement une particularité du circuit Motorola MC3470 est de s'adapter aux niveaux des variations magnétiques. Dès lors qu'il est trop longtemps sans recevoir de variations il s'adapte en augmentant sa sensibilité... et il détecte alors les fameuses variations décrites ci-avant... quand il ne les invente pas purement et simplement! Il verrait des signaux là où il n'y a normalement rien à voir, et générerait à tort des "pulse" !

4. Et surtout vous perdriez votre base de temps qui s'appuie justement sur les inversions magnétiques... la vitesse des lecteurs serait critique. Si on tient compte de l'Alzheimer qui touche le circuit Motorola et qui est expliqué en 2 et 3 ci-dessus vous comprendrez que cela devient très vite à haut risque.

Hacking corner

Apple a fait le choix de limiter à deux 0 le nombre maximum de bits contigus pour un nibble. Mais ne vous faites pas d'illusions les éditeurs de logiciels ont bien compris que cette limite est théorique malgré les réels risques de relecture impossible et certaines protections utilisent avec un succès plus ou moins grand le fait d'écrire non 2 mais 3 zéros contigus voire plus.

La technique de détection de la protection est alors :
soit une statistique d'erreurs
soit une desynchronisation volontaire

En ce qui concerne la statistique d'erreurs cela part du principe que votre programme de copie n'écrira pas autant de 0, il fera un choix et au mieux considérera qu'il s'agit d'extra bits, au pire d'une zone recouvrement à la suite de plusieurs écritures.Quand bien même votre programme supposerait qu'il s'agit d'extrabits, il n'en placerait en principe que 2 car c'est le nombre normal et à la relecture par la protection il n'y aurait jamais de variations dans la lecture (en clair on relirait toujours la même chose sans erreurs) ce qui permettrait à la dite protection de déterminer qu'il s'agit d'une copie.

Ce principe de protection consistant à déterminer si on a à faire à un original ou une copie en recherchant non pas une valeur précise mais une erreur soit aléatoire, soit systématique se retrouve respectivement :
dans la technique des "weaks bits" utilisés sur les machines IBM (on lit ces weaks bits tantôt comme des 1 tantôt comme des 0 et ce de façon parfaitement aléatoire)
et sur l'immonde et fantaisiste système PROLOK avec son "trou" au laser qui lui doit absolument détecter une erreur de lecture pour déterminer que c'est bien un original car il est impossible d'écrire sur la partie abimée de la disquette ... le fameux "trou".

En ce qui concerne la désynchronisation volontaire, cela provient du fait que l'écriture de plusieurs 0 peut avoir pour objet de désynchroniser la tête de lecture... car n'oubliez pas que vous pouvez lire votre DATA REGISTER à tout moment et en particulier en boucle infinie (Cf. BPL). Avec une désynchronisation on se fonde sur le fait que seule la protection sait EXACTEMENT ce qu'elle doit trouver derrière la désynchronisation en question ... pas le programme de copie !!! Cela rend souvent l'écriture fantaisiste (et pourtant les paramétrages sont parfois astucieux) dès que l'on utilise les 0 de préférence aux 1 car il y a absence de signal donc recopie hasardeuse...

Autant le dire tout de suite la technique des extrabits est la plus redoutable protection contre les logiciels de copie seul EDD IV Plus et sa carte peuvent en venir à bout... parfois au bout de grandes difficultés. C'est là toute la différence entre "INCOPIABLE" et "NON PIRATABLE". Vous pouvez avoir une disquette "INCOPIABLE" mais il est IMPOSSIBLE d'avoir une disquette "NON PIRATABLE"!