C'est sans doute ici le meilleur moyen de comprendre le fonctionnement du LSS et partant de là de comprendre ce que les systèmes de protection peuvent faire ou ne pas faire. En la matière les légendes urbaines ne manquent pas. Passez le temps qu'il faudra mais sincèrement si vous comprennez cette partie la lecture sur disquette (et corrélativement l'écriture) n'auront plus aucun secret pour vous

Voici le tableau du code présenté selon la méthode de Jim Sather et qui permet de bien comprendre comment cela fonctionne.

Avant toute chose il faut savoir que suivre le tableau seul n'est pas suffisant, il faut se représenter simultanément à cette lecture séquence par séquence ce que fait le circuit MC3470 (detecte un pulse ou non) et le timing du sequencer qui fait passer d'une séquence à la suivante à chaque clock d'horloge.





Exemple de lecture :

Supposons que votre lecture ait commencée depuis un certain temps et que votre DATA REGISTER n'ait pas son bit 7 à 1, vous êtes donc sur l'une des deux colonnes de gauche. Si nous prenons pour exemple que vous êtes en séquence numéro 3 et ne recevez pas de pulse, vous lisez la colonne 2 en face du numéro de séquence 3 et vous voyez 48.

Comme vous ne recevez pas de pulse à ce moment, votre 48 signifie de ne rien faire (NOP) et d'aller en séquence 4... ce que vous faites. Vous lisez en séquence 4 un splendide 58, si vous ne recevez pas de pulse à ce moment, votre 58 signifie "ne faites rien (NOP) et allez en séquence 5.

Maintenant vous devriez avoir compris la règle du jeu, cependant voici tout de même un exemple de scénario pour vous confortez : si vous ne recevez aucun pulse pendant les passages de la séquence 5 jusqu'à la séquence 9 comprise, vous arrivez donc à cette séquence 9 pour laquelle le code est 29 ce qui signifie que vous devez placer un 0 dans le DATA REGISTER puis aller en séquence 2... et ainsi de suite.

Ce jeu serait un peu simplet car vous receverez bien à un moment ou à un autre un pulse : que se passera-t-il ? Supposons que dans la suite des séquences vues précédement vous ayez reçu un pulse en séquence 7. Dès lors ce n'est pas le code 88 de la colonne 2 qu'il faut exécuter mais bien celui de la colonne 1 de cette séquence 7, vous y trouvez D8 ce qui signifie de ne rien faire et d'aller en D mais attention une fois à la séquence suivante D le pulse n'est plus et vous repartirez donc en colonne 2. Face à la séquence D vous voyez 08 donc allez en 0 sans avoir rien fait puis en 1 où là vous placez un 1 dans le DATA REGISTER...

Ces séquences se suivent au rythme de l'horloge du séquencer, et ce, tant que le bit 7 du DATA REGISTER n'est pas à 1. Dès qu'il l'est vous passerez alors dans les séquences de QA c'est à dire les colonnes 3 et 4, au numéro précis de la séquence où la chose arrive... donc en réalité après un SL1 ou un SL0, mais pour bien comprendre il faut examiner en détail le schéma qui suit, représentant le tableau des codes et séquences sous la forme d'une machine à états.

HACKING CORNER
Pour bien comprendre je vous ai fait un dessin de la machine à état de ce SEQUENCER pour la partie READ. Vous en trouverez un autre de Jim Aalto dans l'excellent livre "UNDERSTANDING APPLE II" de Jim SATHER mais je le trouve plus complexe... ce n'est qu'une question de goût.



SI CE SCHEMA VOUS PARAIT COMPLEXE CLIQUEZ ICI, EH OUI J'EN AI FAIT DEUX DIFFERENTS..."



Prenons un exemple afin de suivre la lecture d'un nibble au complet. Soit le nibble 1101.1101

Détection bits 7 et 6      1101.1101
Les bits 7 et 6 étant 1 et 1 on est certain que l'entrée s'est faite par le séquence E,F de MSB à 0.

NOTA TRES IMPORTANT : le DATA REGISTER contient la valeur 0000.0011 et non 1100.0000 car les SHIFT SL1 et SL0 se font de la droite vers la gauche.

Détection bit 5      1101.1101
Le bit 5 étant à 0, aucun pulse n'a pu être detecté en séquence F, la suite s'est donc faite par l'entrée en séquence 4, normalement aucun pulse n'est detecté avant la séquence 9 qui fait alors entrer un 0 dans le DATA REGISTER puis on continue en entrant en séquence 2.

Détection bit 4      1101.1101
Un pulse sera alors detecté entre cette séquence et la 9 ce qui nous aménera en D puis en 0 et 1. A ce moment un 1 est placé dans le DATA REGISTER qui a la valeur 0000.1101

Détection bit 3      1101.1101
On repasse alors dans le circuit des séquences 2 à 9 maximum puis D, 0, 1 qui conduit à introduire un nouveau 1 dans le DATA REGISTER qui est alors 0001.1011

Détection bit 2      1101.1101
On repasse alors dans le circuit des séquences 2 à 9 maximum puis D, 0, 1 qui conduit à introduire un nouveau 1 dans le DATA REGISTER qui est alors 0011.0111

Détection bit 1      1101.1101
Pour les séquences suivantes de 2 à 9, aucun pulse ne sera détecté, un 0 sera alors introduit dans le DATA REGISTER qui prend alors la valeur 0110.1110

Détection bit 0      1101.1101
Pour le dernier bit à 1, le pulse sera detecté entre 2 et 9 maximum qui conduira à D, 0 et 1 et là un 1 sera introduit dans le DATA REGISTER devient alors 1101.1101 le MSB est à 1 ON PASSE AUTOMATIQUEMENT sur la séquence 2 de droite qui est en boucle infinie tant que le pulse du MSB du nibble suivant n'est pas detecté.


Notons d'ors et déjà qu'il est IMPOSSIBLE de décompter le nombre de 0 (ceux de synchronisation en fait) lorsque l'on est dans cette séquence N°2 de MSB1 !!! Les schémas de protection qui détectent les extra-bits procèdent d'ailleurs d'une autre façon c'est à dire attendent que les bits 7 et 6 soient détectés. On reverra cela plus loin avec la technique des BMI (en lieu et place des BPL) pour les desynchronisations


Dès que le pulse du bit 7 du nibble suivant sera détecté on continuera donc dans cette partie jusqu'à detecter la valeur du bit 6 qui pourra être 0 ou 1 : NOTEZ BIEN QUE LES BITS 7 ET 6 NE SONT PAS ENCORE INSERES DANS LE DATA REGISTER QUI N'A PAS ETE EFFACE ET CONTIENT TOUJOURS LA VALEUR DU PRECEDANT NIBBLE, l'objectif est de CONSERVER le PLUS LONGTEMPS possible le DATA REGISTER avec cette valeur précédente pour que le programme 6502 ait le temps de la lire.

Le DATA REGISTER sera finalement effacé, que le programme ait lu ou non la valeur ! C'est AU PROGRAMMEUR de faire la lecture en temps utile, le LSS lui laisse un délai suffisant.


Si le bit 6 de ce second nibble est à 1 on ira en séquence A,B, et éventuellement C de MSB à 0 pour remplir le DATA REGISTER avec la séquence de bits "10"

Si le bit 6 est à 1 on ira en séquence E, F pour remplir le DATA REGISTER avec la séquence bits "11"


On notera que la détection du bit 5 à 1 (PAS A ZERO) peut se faire théoriquement :
en séquence A, B ou C (cas du bit 6 à 0),
en séquence F (cas du bit 6 à 1)

Dans le cas d'un pulse reçu en séquence E il est considéré comme un parasite car reçu bien trop proche du précédent, et on voit bien que sur la machine à état ci-dessus (tout comme sur le code PROM qui lui correspond) il est ignoré.

Vous notez ainsi immédiatement qu'un pulse valide détecté très tôt est considéré comme celui du prochain bit et non un résidu du précédent. Vous allez dire "Ah et alors ?" ... Eh bien cela vous explique, autrement mieux qu'une déclaration pompeuse non justifiée, pourquoi la lecture avec un drive rapide ne pose aucun problème et que, par corollaire, il est préférable d'avoir un drive lent pour l'écriture plutôt que pour la lecture. Dans le cas des copies "de sécurité" de disquettes protégées c'est même carrément mieux !!!