★ CODING ★ FDC ★ À LA DÉCOUVERTE DU FDC – ÉPISODE 5 ★ |
A la découverte du FDC épisode 5 (Roudoudou) |
Erratum de l'article 4 : La tolérance du FDC en lecture est de 12%, voir correction dans l'article pour plus de détails.L'instruction Lire Piste (ReadTrack) Mythique, légendaire, l'instruction Lire Piste est pourtant d'une inutilité incompréhensible sur CPC. Seuls des détournements de finalité permettent de donner à cette instruction ses lettres de noblesse. Pire, c'est vraiment l'une des plus mal documentées, à un point tel que les programmeurs de l'époque ont bricolé sans vraiment comprendre tous les tenants et aboutissants. Différence notable entre la documentation du FDC original de Nec et les autres, cette instruction ne s'appelle pas Lire Piste mais Lecture de Diagnostique. Pour le reste, on est toujours sur du copié-collé entre les documentations, les paramètres de la fonction ressemblent à s'y méprendre à une lecture secteur classique. Mais d'ailleurs, quelle pourrait être la différence entre ces deux fonctions puisque la commande de lecture secteur sait déjà lire des secteurs en ligne ? L'instruction Lire Piste présente la particularité de lire les données (et uniquement les données) depuis le premier secteur de la piste, jusqu'à... ...ah ben on ne sait pas trop. La documentation parle bien de fin de piste mais tout ceci reste bien mystérieux. Documentation de cochon ! Cette instruction présente la particularité d'avoir été la moins bien documentée. Un exemple avec le tableau de la séquence d'exécution de la commande.
Bien que la commande requiert des informations sur le secteur (dont l'ID), les données seront bien lues à partir du premier secteur physique rencontré depuis le trou d'index et ce, quel que soit son ID. Ensuite, quels que soient les ID des secteurs qui suivent, ils seront lus (dans les limites des paramètres de GAP). Enfin, petite particularité et pas des moindres, si la taille de secteur spécifiée est différente de la taille réelle des secteurs, vous lirez la quantité de données correspondant à la taille de secteur de la commande (et encore, pas toujours, avec les secteurs de taille 0, vous ne lirez que 80 octets dans tous les cas, wtf!) ! Mais pouvoir lire plus loin que les données d'un secteur présentera surtout l'intérêt de pouvoir lire les GAP (par exemple). Finalement le descriptif détaillé de la commande Lire Piste lâche le morceau, la valeur EOT est un nombre de secteurs à lire. La valeur utilisable va de 0 à 255 avec 0 pour lire 256 secteurs. La commande peut lire jusqu'à 8 Mo d'affilée quand on la paramètre mal, attention ! De nombreuses personnes se sont faites avoir en créant des protections basées sur cette commande. Ainsi, au lieu de mentionner un compteur, certains ont demandé un ID secteur de fin (au hasard #C1 ou #C2). Notre bon FDC ne rechigne pas à la tâche et tente ainsi de lire pas loin de 200 secteurs d'affilée. Bien entendu le FDC ne rendra pas la main avant d'avoir lu ces 193 secteurs. Si on ajoute des paramètres de saut de GAP hasardeux (encore une fois #C0 ou plus), il faut donc patienter plusieurs secondes le temps qu'il fasse tous les tours nécessaires. C'est la raison pour laquelle la protection GAP du jeu A 320 semble figer le CPC pour ces interminables secondes, avant de continuer le chargement du jeu. En effet, avec de tels paramètres, on lit 1024 octets puis on saute le secteur suivant avant de retomber sur un entête lisible. séquence envoyée au FDC : #42,#00,#28,#00,#C1,#03,#C1,#C0,#FF |
|