Je suis en train de ré-écrire la commande CAT en langage machine, et je souhaiterais détecter automatiquement le formatage de la disquette. Il y a une routine sous Amsdos qui permet cela, c'est très facile, mais comme c'est un utilitaire sous CP/M, je ne peux pas l'utiliser.
Si vous souhaitiez faire cette détection sous Amsdos (oubliez CP/M), comment vous y prendriez-vous ? (sans utiliser la routine Amsdos de détection évidemment...)
Je souhaite détecter Data, System, Vendor et Ibm.
J'ai trouvé une astuce qui fonctionne déjà bien, mais peut être quelqu'un d'autre aura t-il une idée plus efficace encore. Je pense qu'il y a un plus court chemin...
Je n'ai pas accès au FDC sous CP/M (qui n'a pas le droit de gérer le hardware). Je peux simplement lire les pistes et les secteurs. Je peux uniquement me servir du contenu des pistes et des secteurs donc... une idée ?
Inscription : 15 Août 2008, 13:00 Message(s) : 968 Localisation : Troyes, France
C'est la seule méthode "propre" qui me vienne à l'esprit, d'ailleurs il me semble que AMSDOS procède de la sorte. Je suis étonné que CP/M n'ait pas une fonction équivalente , il se borne donc ne reconnaitre que son format ?
_________________ "NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)
oui, il se borne à lire les pistes et les secteurs. Il peut lire les 3 formats, mais il ne les différencie pas. D'ailleurs, il ne sait même pas qu'il tourne sur un AMstrad CPC car il est multi-machines.
Ce que je peux faire, c'est lire le contenu des secteurs de la disquette, pistes par piste, secteur par secteur. Comme sous Amsdos en fait, sauf que je n'ai pas de routine de détection de format, ni accès au FDC. Je dois me débrouiller avec ça.
C'est faisable car je l'ai fait, juste en analysant le contenu des secteurs. Mais j'espère que quelqu'un aura trouvé une idée plus concise que la mienne. Je dois insérer ça dans une routine la plus courte possible.
Une technique bidon mais qui fonctionne sous Amsdos
- réduire le nombre de tentatives de lecture d'un secteur a une valeur n'entrainant pas un recalibrate - essayer de lire un secteur avec l'ID secteur &C1 - si ca foire, essayer de lire un secteur avec l'ID &41 en piste 2 - si c'est bon, essayer de lire le secteur de boot CPM
Je ne sais plus trop, mais je pense que certains de mes utilitaires fonctionnent comme cela (oui, j'ai honte ).
L'Amsdos utilise une méthode ultra bourrin, en fait il se base sur le nom des secteur.
Donc ça va tant que tu utilises des formats qui nomment les secteurs de façon différente mais si ce n'est pas le cas il ne sait pas faire.
Sinon en méthode propre (mais le temps de détection est plus long) il faut également vérifier le nombre de secteur par piste (seule manière pour différencier le format IBM de certains formats Parados notamment) et pour ce faire tu n'as pas le choix, il faut les compter.... donc c'est plus long...
- réduire le nombre de tentatives de lecture d'un secteur a une valeur n'entrainant pas un recalibrate
C'est quoi un recalibrate ? tu réduis comment ?
Un recalibrate c'est une commande FDC qui permet de de faire revenir la tête de lecture en piste 0 (en fait ce n'est pas vraiment ça car ça renvoi la tête de lecture en arrière jusqu'à trouver la piste 0 mais avec un maximum de 77 impulsions (de mémoire), donc si tu as un lecteur 80 pistes et que tu es au delà de la piste 76, retourner en piste 0 nécessite deux commandes recalibrate)
sPOKE a écrit :
markerror a écrit :
- essayer de lire un secteur avec l'ID secteur &C1 - si ca foire, essayer de lire un secteur avec l'ID &41 en piste 2
Je peux pas faire ça sous CP/M. J'ai seulement les données contenues dans les secteurs. Pas de &C1,&41 ou &01.
A mon avis (mais je ne connais pas le CP/M) les routines systèmes doivent avoir ce genre de paramètre quelque part, (ou stockés en RAM dans un buffer quelconque)
sPOKE a écrit :
markerror a écrit :
- si c'est bon, essayer de lire le secteur de boot CPM
Ok, mais tu fais tes tests comment ? Pour détecter une Vendor par exemple ? ou une Ibm ?
Voir mon post précédent, mais si tu n'as pas accès au nom des secteurs et que tu ne peux pas les compter, ça va être compliqué
A mon avis (mais je ne connais pas le CP/M) les routines systèmes doivent avoir ce genre de paramètre quelque part, (ou stockés en RAM dans un buffer quelconque)
Je n'ai rien trouvé, mais je vais regarder encore, sait-on jamais. Mais en attendant, j'ai besoin de faire sans.
shap a écrit :
Voir mon post précédent, mais si tu n'as pas accès au nom des secteurs et que tu ne peux pas les compter, ça va être compliqué
Non, pas d'accès au nommage. Je peux les compter, mais c'est pas suffisant car Data, System et Vendor ont chacun 9 secteurs.
Mais c'est vrai qu'il y a une routine pour faire ça sous AMSDOS, donc le problème ne se pose pas finalement pour les CPCistes. Et je dois certainement être le seul fou à utiliser le format IBM sur CPC je pense.
Ce format a néanmoins une utilité, car quand j'ai fait ingérer une disquette formatée IBM à Dir Doktor 1.1 (oui je sais, c'est sadique ^^ ) : Pof! une bonne vieille Syntax Error!
(une petite virgule après le PRINT#3 et ça devrait aller mieux)
Si tu ne peux pas accéder aux ID de secteurs, tu ne peux pas, c'est impossible.
Donc tu n'as plus qu'à chercher dans ton CP/M où il met ce genre d'infos (ou trouver des appels de routines système qui font ça).
De toute façon, le système est obligé de détecter le format (à moins qu'il n'en connaisse qu'un seul) et de toute façon il doit forcement accéder au FDC à un moment ou à un autre si il veut lire ses secteurs...
Si tu ne peux pas accéder aux ID de secteurs, tu ne peux pas, c'est impossible.
Si c'est possible. Je me suis servi du contenu des secteurs pour deviner le formatage, tout simplement.
shap a écrit :
De toute façon, le système est obligé de détecter le format (à moins qu'il n'en connaisse qu'un seul) et de toute façon il doit forcement accéder au FDC à un moment ou à un autre si il veut lire ses secteurs...
Oui, le Bios de CP/M est adapté sur chaque ordinateur sur lequel il tourne par le constructeur (Locomotive Software l'a fait pour Amstrad), mais un logiciel n'a pas le droit d'essayer d'accéder aux Rom de l'ordinateur hôte. Sinon, il ne pourrait plus tourner sur les autres ordinateurs CP/M.
Je peux en utilisant des instructions Z80 accéder aux Rom du CPC, mais pour ce programme-là (une commande CAT) je souhaite uniquement utiliser la vraie programmation CP/M.
En fait, si je te donne uniquement le contenu des secteurs d'une disquette, tu dois pouvoir identifier son formatage parmi les 4. Tu vois l'idée ? Je pense que tu as compris comment j'ai fait.
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 52 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum