| |
|
|||
| Le LOGIC STATE SEQUENCER (LSS) appelé aussi SEQUENCER est l'une des pièces maitresse du système de lecture et d'écriture des disquettes. C'est la compréhension parfaite de son fonctionnement qui permet la compréhension parfaite des systèmes de protection et leur reconstitution. Le LSS contient un code particulier que nous allons examiner. Ce code se trouve sur la PROM P6 de la carte contrôleur. Il est normalement INACCESSIBLE mais... | ||||
|
|
|
|||
|
La compréhension du LSS est assez loin de l'évidence biblique que nous avons parfois rencontrée... ne désespérons pas
pour autant on va y arriver mais préparez les aspirines, le papier et les crayons.
Si ce n'est pas facile à comprendre, dites vous qu'à expliquer ce n'est pas de la tarte non plus ! |
||||
| ARCHITECTURE DU LOGIC STATE SEQUENCER (LSS)... | ||||
|
Le LSS a pour finalités : Le LSS communique avec le programme 6502 par l'intermédiaire du DATA REGISTER qui est le registre à travers lequel transitent les valeurs lues ou écrites. IL faut savoir que le LSS fonctionne 2 fois plus vite que le 6502 c'est à dire à 2 Mhz, ce qui n'est pas innocent évidement. Les deux schémas suivant vous expliquent le fonctionnement global du LSS. IMPORTANT : On appelle QA le bit 7 du data register (c'est à dire le bit le plus significatif aussi écrit MSB=most signifiant bit en anglais). Quand on veut parler de son contenu, on utilise aussi QA pour désigner la valeur 1. Pour la différencier, on appelle QA' la situation où le bit 7 = 0. |
||||
| UN CODE PARTICULIER... | ||||
| Le code de la PROM P6 est composé de 256 octets. Ce n'est pas un code au sens où on l'entend en 6502 en ce sens que chaque octet code à la fois le numéro de séquence suivante et l'opération à faire. La partie gauche correspond au numéro de la prochaine séquence à exécuter, la partie de droite correspond à l'opération à effectuer. | ||||
|
Les opérations sont : code 0 (0000) CLR code 8 (1000) NOP code 9 (1001) SL0 code D (1101) SL1 code A (1010) SR code B (1011) LD |
Efface le DATA REGISTER Ne rien faire (le plus utilisé) Shift un 0 dans le DATA REGISTER Shift un 1 dans le DATA REGISTER Lit le signal WRITE PROTECT Charge le DATA REGISTER avec la donnée présente sur le bus de données (DATA BUS) |
|||
|
Les mnémoniques des codes controles ont une signification proche de celle des codes
utilisés par les assembleurs à savoir:
|
||||
|
SLx SR CLR NOP LD |
"SHIFT LEFT" (la valeur x c'est-à-dire 0 ou 1) "SHIFT RIGHT" (toujours la valeur 1 en fait) "CLEAR" "NO OPERATION" "LOAD" |
|||
|
Exemples : E0 signifie : Effacer le DATA REGISTER et allez en séquence E 68 signifie : Ne rien faire et allez en séquence 6 A8 signifie : Ne rien faire et allez en séquence A 2D signifie : Place un 1 dans le DATA REGISTER et allez en séquence 2 59 signifie : Place un 0 dans le DATA REGISTER et allez en séquence 5 |
||||
| TRES IMPORTANT : | ||||
|
La PROM P6 (tout comme la PROM P5) existe en DEUX VERSIONS TOTALEMENT DIFFERENTES : Les codes de base utilisés sont les mêmes dans les deux versions. Par contre la programmation est différente. Par la suite nous allons examiner la PROM P6 16 secteurs car il y a très peu de chances que vous rencontriez une PROM P6 13 secteurs et de toute façon les principes de fonctionnement sont très proches. Je détaillerai la PROM P6 13 secteurs plus tard... Les identifiants des PROM sont les suivants ATTENTION : La PROM P5 13 SECTEURS ne pourra pas lire correctement les disquettes formattées en 16 secteurs mais PAR CONTRE la PROM P6 16 SECTEURS sait lire PARFAITEMENT les disquettes formattées en 13 secteurs, et ce, malgré une modification de timing sur la carte analogique des drives spécifiquement pour lire les disquettes en 16 secteurs (il s'agit de la résistance R21 transformée en potentiomètre) |
||||
|
Si les disquettes 13 secteurs ne bootent pas sur un contrôleur de disquette qui a les PROM 16 SECTEURS ce n'est lié QU'A LA SEULE PROM P5 et non la PROM P6 !!!! Quelle que soit la version de la PROM P5 (13 ou 16 secteurs) il faut en fait comprendre que la PROM concernée doit pouvoir lire au moins le secteur 0 de la piste 0 selon un codage et des marqueurs de champs précis à savoir : Pour la PROM P5 associée à la P6 13 SECTEURS : codage 5.3 marqueurs du champ adresse D5 AA B5 et DE AA EB marqueurs du champ de données D5 AA AD et DE AA EB. Pour la PROM P5 associée à la P6 16 SECTEURS : codage 6.2 marqueurs du champ adresse D5 AA 96 et DE AA EB marqueurs du champ de données D5 AA AD et DE AA EB. La PROM P5 contient du code 6502 et non un code spécifique comme celui de la P6. Il sera détaillé dans la partie relative au BOOTSTRAP |
||||
| UN CODE EN 16 SEQUENCES | ||||
|
Les 256 octets de la PROM sont organisés pour être utilisés en continu à travers une suite de 16 séquences.
Cela s'apparente à une machine à états. Gros malins que vous êtes vous avez compris que s'il y a 16 séquences
et que si chaque octet se suffit à lui-même, il va y en avoir trop !
Eh bien non, car il y a 16 groupes de 16 séquences de 1 octet soit 256 donc la totalité... Il y a deux grands groupes : READ et WRITE A l'intérieur de chacun de ces groupes, le SEQUENCER exécute les séquences à partir de la première qui est numérotée 0. L'horloge du LSS permet de changer de séquence en fonction du code de la séquence en cours MAIS EGALEMENT en fonction des évenements reçus ET PRESENTS on exécute le code de la séquence de la colonne qui correspond bien à la réunion de ces évenements que sont : PULSE / NO PULSE QA' (bit 7 à 0) / QA (bit 7 à 1) SHIFT / LOAD Exemple je suis en séquence numéro B du mode READ, si les évenements sont : Etre en mode SHIFT Le bit 7 est à 0 Je n'ai pas reçu de pulse alors j'exécute le code 59 qui signifie "fait un SHIFT LEFT de 0 et passe en séquence 5" Pour la même séquence numéro B du mode READ, si les évenements sont : Etre en mode SHIFT Le bit 7 est à 0 je reçois un pulse alors j'exécute le code D9 qui signifie "fait un SHIFT LEFT de 0 et passe en séquence D" Cela signifie que si un évenement arrive à un moment donné sur une séquence donnée, le code exécuté est celui qui correspond aux dits évenements : on se balance donc en permanence d'une colonne à une autre selon ceux-ci. Quand aucun évenement n'intervient on reste dans la même colonne. ATTENTION à l'évenement PULSE, dès que l'horloge du séquencer fait passer à la séquence suivente, le PULSE a disparu on passera donc en NO PULSE. Tout cela sera revu en détail plus loin |
||||
|
En examinant les codes du tableau ci-dessus on peut constater un certain nombre de choses intéressantes :
1. Lorsque l'on est en mode écriture (WRITE) les tableaux PULSE et NO PULSE sont strictement identiques... pourquoi ? Eh bien de toute façon quand on écrit sur la disquette le LSS reçoit effectivement des pulses (cf. brochage du dessin précédant) ce qui est tout à fait normal mais ceux ci-doivent être ignorés car on est en train d'écrire et on se fiche eperduement de ce qui pouvait être écrit auparavant donc cela explique le pourquoi des deux tableaux identiques. Bien évidement le déroulement du code se passe tantôt sur l'un tantôt sur l'autre mais les opérations sont absolument identiques. 2. Toujours en mode écriture on notera la parfaite symétrie des opérations LOAD et SHIFT qui impose l'écriture en 32 cycles d'un nibble de 8 bits. Nous verrons dans le mode détaillé du fonctionnement de ces séquences ce qui se passe dès lors que l'on dépasse ce nombre de cycles... l'introduction d'extrabits à 0. Mais on verra aussi ce qui se passe si l'on ne respecte pas ce timing de 32 cycles (4 cycles par bit) 3. L'opération READ/LOAD (les 4 colonnes en bas à droite) correspond au test WRITE PROTECT. Quelle que soit la séquence dans laquelle on entre ou quel que soit le temps que l'on mette pour lire le DATA REGISTER, ce dernier est immédiatement positionné à la valeur ad hoc... puisque le test est un BMI donc sur le bit 7... Maintenant si vous êtes arrivés jusqu'ici c'est excellent, nous allons essayer de continuer sans les aspirines. Avant de lire la suite, n'ayez pas de complexes si cela ne paraît pas simple, cela ne l'est pas même si j'ai vraiment essayé de faire didactique. Donc... lisez et relisez en essayant de comprendre, en cas d'insommies pendant plusieurs jours n'hésitez pas à envoyer un mail via la rubrique "contact". |
||||
| |
||||
|
|
||||