PROTOCOLE DE COMMUNICATION DU PROFILE | |
Le PROFILE est connecté à l'UC par : |
|
|
|
MISE EN ROUTE | |
Quand le PROFILE est mis sous tension, son CPU attend 18 secondes pour que le disque soit à la vitesse de fonctionnement, ensuite il lit séquentiellement chaque bloc du disque dur en utilisant les routines Read, Write, Verify et Spare avec un compteur de nombre d'essais initialisé à 105 (53 pour les réparations). Pendant cette opération la led clignote 2 fois par seconde. Nomalement le scan prend environ 1 minute s'il n'y a pas de problèmes. Au delà evidement c'est que le contrôleur essaye de faire des réparations...
Là vous venez de comprendre le "pourquoi allumer le PROFILE d'abord" !!! |
|
COMMANDES | |
Le PROFILE standard ne dispose que de trois commandes : READ, WRITE, WRITE/VERIFY
C'est l'ordinateur qui initialise les séquences de commande en positionant la ligne CMD à HIGH. Le Z8 est quant à lui dans une boucle infinie d'attente du passage à HIGH de la ligne CMD. S'il est dans cette boucle 1,5 seconde (hormis pour le handshake d'une opération d'écriture ou d'écriture/vérification) le Z8 déplace les têtes de lecture sur la zone de parking (piste 155) et arrête le moteur pas à pas. Les octets de commande sont les suivants : | |
Maintenant vous venez de comprendre pourquoi le formattage de bas niveau est IMPOSSIBLE sans un Z8 avec une ROM spéciale disposant de la commande FORMAT, ainsi que le logiciel non moins spécial, qu'APPLE a diffusé quasiment en mode confidentiel paranoiaque ! Par corollaire vous comprennez aussi que tous les zozos qui prétendent avoir réussi un formattage de bas niveau sans cette modification, au mieux confondent formattage logique et formattage physique et au pire racontent n'importe quoi pour se rendre intéressants... | |
Le PROFILE interpréte CMD HIGH comme une demande de l'ordinateur de lui dire ce que le PROFILE veut faire. Quand le PROFILE attend une commande il envoit 01 sur le bus de données et indique que sa réponse est faite en passant la ligne BSY à HIGH. Il attend ensuite que la ligne CMD passe à LOW, dès que cela se produit, le PROFILE lit la donnée qui est sur le bus.
Si c'est $55 alors il exécute l'action suivante et fait savoir à l'ordinateur ce qu'il fait en passant la ligne BSY à LOW. Prochaine action du PROFILE Réponse du PROFILE Attend une commande 01 Lit un bloc 02 Recevoir les données à écrire 03 Recevoir les données à écrire 04 et à vérifier Est en train de faire une écriture ou une écriture/vérification sur 06 le disqueSi ce n'est pas $55 il positionne le bit de status NAK, fait un reset de lui-même puis attend une commande. Le PROFILE utilise uniquement les octets dont il a besoin pour chaque commande. Les octets supplémentaires sont ignorés. |
|
TRAITEMENT DES ERREURS | |
Le RETRY COUNT de la commande LECTURE correspond au nombre de fois que le PROFILE doit lire le bloc s'il rencontre une erreur CRC ou un TIME OUT (notons que 0 est valide.. mais peut être pas génial)
Quand il rencontre une erreur CRC ou un TIME OUT le PROFILE sauvegarde les données qu'il lit la première fois avec succès MAIS recommencera à lire le bloc AUTANT DE FOIS que cela lui a été spécifié par le paramètre RETRY COUNT. S'il ne réussit pas a relire le bloc au cours de ces tentatives supplémentaires, il essayera de relire le bloc par 90 nouvelles tentatives (attention un TIME OUT consomme 9 tentatives car cela correpond au nombre de rotations effectuées avant que le TIME OUT soit déclaré). Dans le cas ou il ne réussit pas à lire le bloc, il déclare ce bloc dans la table des blocs défectueux, positionne le bit d'erreur ad hoc, positionne le bus pour que l'ordinateur puisse récupérer le résultat et met la ligne BSY a LOW pour indiquer que l'opération est terminée. Si la table des blocs défectueux est pleine (100 entrées) le PROFILE indiquera cette erreur. Si pendant les essais définis par RETRY COUNT le nombre d'erreurs est inférieur au paramètre SPARING THRESHOLD le PROFILE positionne les 4 octets à la valeur ad hoc, positionne le bus pour l'ordinateur et passe BSY à LOW. Si le nombre d'erreurs est supérieur ou égal au nombre spécifié par SPARING THRESHOLD le PROFILE lance la routine READ/WRITE/SPARING qui essaye d'abord d'écrire les données sur le disque. Si cela ne fonctionne pas à cause d'un problème de positionnement ou parce que la table des blocs défectueux est pleine, il indique l'échec de l'opération, positionne le bus pour l'ordinateur et passe BSY à LOW. Si cela ne marche pas à cause d'un TIME OUT ou si la lecture est mauvaise après une écriture alors le PROFILE ressaye la routine R/W une fois de plus, et si cela ne fonctionne toujours pas alors il essaye la routine WRITE/VERIFY/SPARE en utilisant un secteur de secours du disque. Si cela réussit le PROFILE retire le bloc de la table des blocs défectueux s'il y était et le place dans la table des secteurs de secours. NOTA : La seule différence entre une opération WRITE/VERIFY et une opération WRITE est que l'opération WRITE ne fait pas d'essais après un TIME OUT et ne relit pas le bloc après l'avoir écrit. Cependant le PROFILE change une opération WRITE en WRITE/VERIFY si le bloc qui a été écrit est dans la table des blocs défectueux. |
|
CARACTERISTIQUES | |
Le PROFILE a 9728 blocs répartis sur 152 cyclindres et 4 faces avec 16 blocs par piste. Les blocs sont alloués séquentiellement dans l'ordre suivant :
Piste 0 tête 0 bloc 0, 1, 2, 3...14, 15. Piste 0 tête 1 bloc 0, 1, 2, 3...14, 15. jusqu'à Piste 152 tête 3 bloc 0, 1, 2, 3...14, 15. La piste 77 est reservée pour 32 secteurs de secours et la table des secteurs de secours qui comprend des informations spécifique sur le matériel et la table des blocs défectuex. Là vous venez de comprendre tout le drame du PROFILE : avec plus de 32 secteurs à réparer il est hors service! il faudrait pouvoir sauvegarder les données (faisable si on n'arrête pas la machine à ce moment précis) et refaire un formattage de bas niveau ! L'interleaving est 5:1 pour la lecture, 21:1 pour l'écriture et 37:1 pour la vérification. Il y a 30 ms d'attente avant la première écriture à faire si on change de piste. La rotation est de 3600 tours/ minute |
|
LECTURE /ECRITURE | |
Quand l'ordinateur demande une lecture ou écriture au PROFILE, ce dernier translate le numéro de bloc en piste/tête/secteur. Il vérifie ensuite si le bloc est dansla table des secteurs de secours et repositionne alors les valeurs piste/tête/secteur en conséquence.
Si le bloc en cours et le dernier bloc lu ou écrit sont sur la même piste et la même tête le Z8 sort de la routine de déplacement de bras (SEEK). Si le bloc est sur la même piste mais avec une tête différente, le Z8 attend 750 micro-secondes et sort de la routine SEEK sinon il attend 24 ms pour la mise en route du moteur pas à pas et essaye jusqu'à 64 fois de lire 3 secteurs consécutifs sur le disque. S'il rencontre une erreur de type mauvaise tête ou mauvaise piste, il lance la routine SEEK. Si le Z8 n'est pas capable de lire 3 secteurs consécutofs à cause d'un TIME OUT (tête non trouvée en 26ms) ou d'une erreur CRC, il ressaye entièrement la routine SEEK 2 fois après avoir avoir envoyé la tête sur la piste la plus intérieure et être revenu sur la piste demandée. Si le Z8 ne peut pas lire 3 secteurs consécutifs, il déclare une erreur de positionnement. Après une lecture ou écriture le Z8 fournit à l'odinateur 4 octets de status de l'opération qui sont placés dans le buffer juste AVANT les données lues ou écrites. |