Disquette CPM: gestion de l'entrelacement des secteurs par logiciel ?

Tout ce qui concerne le logiciel original et sa sauvegarde avec entre autre la régénération des disquettes ou autres supports physiques.

Modérateurs : Papy.G, fneck, Carl

gotcha
Messages : 2802
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

Disquette CPM: gestion de l'entrelacement des secteurs par logiciel ?

Message par gotcha »

L'entrelacement (ou interleaving) des secteurs est habituel sur les disquettes, car ça permet d'éviter des rotations inutiles (à cause de la lenteur du contrôleur et de l'ordinateur) lorsqu'on veut lire des secteurs en séquentiel.
Globalement, l'ordre des secteurs physiques sur la disquette ne correspond pas à l'ordre des secteurs logiques.
On peut avoir par exemple sur une piste des secteurs ordonnés physiquement de cette manière: 1 4 7 2 5 8 3 6 9 (le chiffre étant l'identifiant logique du secteur).

Dans les disquettes que j'avais vu jusqu'à présent, le numéro de secteur logique était mis dans l’entête du secteur. Dans ce cas, le software peut simplement ignorer l'entrelacement et demande juste au contrôleur les secteurs grâce à leur identifiant logique. Le contrôleur trouve le bon secteur grâce au header du secteur.

Ce weekend, j'ai dumpé une disquette CPM en encodage FM dont les identifiants dans le header de secteurs sont séquentiels (1 2 3 4 ... ) alors que quand je regarde le contenu (par exemple ce qui concerne la liste des fichiers), il y a manifestement de l'entrelacement de secteurs.

Ça voudrait dire que l'entrelacement des secteurs est géré en software par le BIOS, l'OS ou le soft. Par effet de bord, ca rend aussi la disquette spécifique à une machine.
Est-ce que c'est quelque chose que vous avez déjà vu ?
Dernière modification par gotcha le 03 mars 2024 07:52, modifié 1 fois.
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17539
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Disquette: gestion de l'entrelacement des secteurs par logiciel ?

Message par fneck »

Je reviens sur ta question et en particulier je me demande comment tu fais pour lire le header des secteurs ?
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Disquette: gestion de l'entrelacement des secteurs par logiciel ?

Message par Daniel »

gotcha a écrit : 20 févr. 2024 11:11 Est-ce que c'est quelque chose que vous avez déjà vu ?
Oui, c'est pareil pour le QDD Thomson.

Mais le QDD, au contraire d'un lecteur de disquette traditionnel, est un lecteur séquentiel. Les secteurs sont mis bout à bout et ne peuvent être lus que dans l'ordre physique. Il faut donc créer un entrelacement logique, d'une part pour avoir le temps de traiter un secteur avant de lire le suivant, d'autre part pour optimiser le temps de lecture de la table d'allocation et du répertoire.

Code : Tout sélectionner

//Table des secteurs logiques en fonction des secteurs physiques du Quick Disk
//Secteur de boot: 112 en $3800 (piste  7 secteur 1)
//FAT............: 321 en $A080 (piste 20 secteur 2)
//Repertoire.....: 322 en $A100 (piste 20 secteur 3)
int qdsector[400] =
{
 321, 33,225,129,322, 34,226,130,323, 35,227,131,324, 36,228,132, //pistes 20,2,14,8
 325, 37,229,133,326, 38,230,134,327, 39,231,135,328, 40,232,136,
 329, 41,233,137,330, 42,234,138,331, 43,235,139,332, 44,236,140,
 333, 45,237,141,334, 46,238,142,335, 47,239,143,336, 48,240,144,
 337,305,209,113,338,306,210,114,339,307,211,115,340,308,212,116, //pistes 21,19,13,3
 341,309,213,117,342,310,214,118,343,311,215,119,344,312,216,120,
 345,313,217,121,346,314,218,122,347,315,219,123,348,316,220,124,
 349,317,221,125,350,318,222,126,351,319,223,127,352,320,224,128,
 353,289,193, 97,354,290,194, 98,355,291,195, 99,356,292,196,100, //pistes 22,18,12,6
 357,293,197,101,358,294,198,102,359,295,199,103,360,296,200,104,
 361,297,201,105,362,298,202,106,363,299,203,107,364,300,204,108,
 365,301,205,109,366,302,206,110,367,303,207,111,368,304,208,112,
 369,273,177, 81,370,274,178, 82,371,275,179, 83,372,276,180, 84, //pistes 23,17,11,5
 373,277,181, 85,374,278,182, 86,375,279,183, 87,376,280,184, 88,
 377,281,185, 89,378,282,186, 90,379,283,187, 91,380,284,188, 92,
 381,285,189, 93,382,286,190, 94,383,287,191, 95,384,288,192, 96,
 385,257,161, 65,386,258,162, 66,387,259,163, 67,388,260,164, 68, //pistes 24,16,10,4
 389,261,165, 69,390,262,166, 70,391,263,167, 71,392,264,168, 72,
 393,265,169, 73,394,266,170, 74,395,267,171, 75,396,268,172, 76,
 397,269,173, 77,398,270,174, 78,399,271,175, 79,400,272,176, 80,
  17,241,145, 49, 18,242,146, 50, 19,243,147, 51, 20,244,148, 52, //pistes 1,15,9,3
  21,245,149, 53, 22,246,150, 54, 23,247,151, 55, 24,248,152, 56,
  25,249,153, 57, 26,250,154, 58, 27,251,155, 59, 28,252,156, 60,
  29,253,157, 61, 30,254,158, 62, 31,255,159, 63, 32,256,160, 64,
   1,  9,  5, 13,  2, 10,  6, 14,  3, 11,  7, 15,  4, 12,  8, 16  //piste 0
};

Daniel
L'obstacle augmente mon ardeur.
nouvelhermes
Messages : 408
Inscription : 22 juil. 2020 20:56

Re: Disquette: gestion de l'entrelacement des secteurs par logiciel ?

Message par nouvelhermes »

Je sais que la bible PC (en particulier la deuxième édition) traite en profondeur du problème de la lecture des disquettes. Un autre ouvrage intéressant à ce sujet et Maîtrise du BIOS et du DOS chez Marabout.

Sur PC,, de mémoire, les fonctions pour lire et écrire des disquette en RAW est la 13 en hexadécimal, mais je vais regarder cela de plus près.

https://www.gladir.com/LEXIQUE/INTR/INT13.HTM
gotcha
Messages : 2802
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

Re: Disquette: gestion de l'entrelacement des secteurs par logiciel ?

Message par gotcha »

fneck a écrit : 23 févr. 2024 09:34 Je reviens sur ta question et en particulier je me demande comment tu fais pour lire le header des secteurs ?
Dans les images au format d'image IMG (qui ne contient que des données utilisateur), les secteurs ont été remis dans l'ordre logique et on n'a aucune information liée au header.

Mais les autres formats conservent généralement certaines données des headers. Par exemple, le format IMD garde pour chaque secteur un 'secteur id' et aussi optionnellement un 'track id' et 'head id'. J'imagine que certaines protections de copie jouent avec ces infos. Ça permet aussi par exemple de permettre aux disquettes TO8 double face d'avoir les secteurs de la face 1 déclarés comme étant en face 0.

De mon coté, je fais d'abord une image 'flux' au format SCP. A partir de là, HxCFloppyEmulator a accès aux headers de secteurs et affiche le sector ID qu'il trouve. Je convertis ensuite en IMD qui va conserver des infos des headers et même aussi l'information qu'il y a une erreurs CRC dans les données.
Dernière modification par gotcha le 03 mars 2024 07:16, modifié 5 fois.
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
gotcha
Messages : 2802
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

Re: Disquette: gestion de l'entrelacement des secteurs par logiciel ?

Message par gotcha »

Je pense que j'ai trouvé réponse à ma question initiale ici : https://www.sydneysmith.com/wordpress/1 ... k-formats/

En fait, ce que je trouvais exotique semble être la norme pour les disquettes 8" CPM. A partir de la piste 2, le CPM gère lui même l'entrelacement (ils parlent de skew), avec un facteur 6, ce qui correspond à mes observations sur la disquette que je regardais. Cet entrelacement est géré 'en dur' par logiciel dans le code de CPM.
CP/M used the first two tracks (track 0 and track 1). The directory was stored in the “first” 8 sectors of Track 2, and data followed that.
I used quotes around “first” because the standard was to skew sectors from track 2 onward by a factor of 6. On the disk they were written as sector 1, 2, …, 26; but CP/M accessed them in a different order.
Voici par exemple une table de translation qu'on trouve dans le code de CPM pour gerer le skew.

Code : Tout sélectionner

;       sector translate vector
trans:  db      1,7,13,19       ;sectors 1,2,3,4
        db      25,5,11,17      ;sectors 5,6,7,8
        db      23,3,9,15       ;sectors 9,10,11,12
        db      21,2,8,14       ;sectors 13,14,15,16
        db      20,26,6,12      ;sectors 17,18,19,20
        db      18,24,4,10      ;sectors 21,22,23,24
        db      16,22           ;sectors 25,26
A partir de là, je vais pouvoir écrire un programme pour extraire les fichiers des dumps de disquettes 8" CPM que j'ai fais.
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17539
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Disquette CPM: gestion de l'entrelacement des secteurs par logiciel ?

Message par fneck »

Bien vu, merci pour l'explication 8)
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Répondre