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.
Ben non justement, tu ne peux déterminer un format via le contenu des secteurs, le seul cas où tu peux c'est pour les formats system avec secteur de boot, pour le reste, pas possible.
Tu vas me dire que tu détectes via l'octet de remplissage (genre #E5 en Data) ? Le problème c'est qu'il y a des formats différents qui utilisent les mêmes octets de remplissage, et les formats normaux ne contiennent rien d'autre que l'octet de remplissage, donc ça ne marche pas ton truc.
Mais de la même manière, la routine AMSDOS est rapide mais elle ne fonctionne que parce qu'il ne connait que trois formats, comme je l'ai précisé, certains formats Parados sont identique au niveau nommage des secteurs que certains formats anciens, donc l'AMSDOS serait incapable des les distinguer....
Ben non justement, tu ne peux déterminer un format via le contenu des secteurs, le seul cas où tu peux c'est pour les formats system avec secteur de boot, pour le reste, pas possible.
Bien sûr que si c'est possible! Ca m'a pris 3 minutes pour trouver comment.
Si tu ne me crois pas, envoie-moi le contenu HEXA d'une disquette DATA ou IBM contenant au moins un fichier. Envoie-moi simplement le contenu des pistes 0 et 1.
Rien qu'en regardant à l'oeil nu je te dirai si c'est du DATA ou de l'IBM. Et pourtant je ne connaitrai absolument pas le noms des secteurs. Mais j'en ai pas besoin...
Par contre, Parados et les autres formats ne m'intéressent pas. C'est pour un utilitaire CP/M, donc je ne détecte que du Data,System,Vendor traditionnel. (et IBM en 2.2)
2ème méthode pour te montrer que c'est facile sans l'ID des secteurs :
Sous CP/M je n'ai pas accès au noms des secteurs, mais j'ai accès aux capacités de la disquette. Ci-dessous 3 disquettes : respectivement au format IBM, SYSTEM, DATA. Ca permet une identification du format sans équivoque. (L'analyse du secteur de boot différenciant System de Vendor, ainsi que 3.1 de 2.2) Mais l'analyse du contenu des secteurs marche très bien aussi. Je choisirai donc la routine la plus rapide.
Tu enlèves les 2 Ko réservés pour le catalogue, et 156, 171, 180 donnent : 154 Ko, 169 Ko, 178 Ko qui sont bien les capacités des disquettes IBM, System-Vendor, DATA. CQFD
"Reserved Tracks" m'indique : 1 seule piste Système réservée pour IBM; 2 pistes Système réservées pour System-Vendor, 0 pour DATA. Ou bien qu'il y a seulement 32 secteurs logiques par piste sur la disquette au lieu de 36. Donc 8 secteurs physiques au lieu de 9 : forcément de l'IBM. Encore une indication de formatage clairement identifiable...
Dernière édition par sPOKE le 16 Jan 2013, 14:37, édité 2 fois.
Ben non justement, tu ne peux déterminer un format via le contenu des secteurs, le seul cas où tu peux c'est pour les formats system avec secteur de boot, pour le reste, pas possible.
Bien sûr que si c'est possible! Ca m'a pris 3 minutes pour trouver comment.
Si tu ne me crois pas, envoie-moi le contenu HEXA d'une disquette DATA ou IBM contenant au moins un fichier. Envoie-moi simplement le contenu des pistes 0 et 1.
Rien qu'en regardant à l'oeil nu je te dirai si c'est du DATA ou de l'IBM. Et pourtant je ne connaitrai absolument pas le noms des secteurs. Mais j'en ai pas besoin...
Par contre, Parados et les autres formats ne m'intéressent pas. C'est pour un utilitaire CP/M, donc je ne détecte que du Data,System,Vendor traditionnel. (et IBM en 2.2)
Donc ta routine n'est pas capable de détecter un format, car si tu fais un vrai détecteur de format, tu n'as pas besoin d'avoir de fichiers sur le disque, un OS, il est obligé de reconnaitre la disquette SANS fichier dessus sinon il ne pourrait pas commencer à écrire dessus ...
Et ton truc c'est un peu comme l'AMSDOS, tu te cantonnes à 3 ou 4 formats donc ce n'est pas un détecteur de format.
De toute façon, ton CP/M adoré, il détecte forcément le format quelque part (certainement de manière très partielle comme l'AMSDOS) si il est capable de te donner la capacité et le nombre d'enregistrements et de blocs prévus.... donc le mieux serait que tu farfouilles dans les points d'entrée système du CP/M pour voir ce qu'il exécute quand tu lui demande l'équivalent d'un CAT.
Donc ta routine n'est pas capable de détecter un format
Oh que si mon ami, ne t'en déplaise. Ca me détecte DATA, SYSTEM-Vendor, IBM. ça me suffit.
Ma routine me détecte les 4 formatages dont j'ai besoin, ça me suffit amplement. Quand il n'y a pas de fichiers, la capacité de la disquette est suffisante pour identifier le format.
shap a écrit :
Et ton truc c'est un peu comme l'AMSDOS, tu te cantonnes à 3 ou 4 formats donc ce n'est pas un détecteur de format.
Si pour moi ça en est un. Je ne chipote pas sur les termes. J'avais besoin de distinguer Data, System,Vendor,Ibm. Donc c'est nickel pour la suite de mon utilitaire. Je ne m'intéresse pas à Parados. Mon besoin est de détecter uniquement D/S/V/I, peu m'importe si toi tu ne le considères pas comme un vrai détecteur de format. Tu t'obstinais à dire que c'était impossible alors que je viens de te prouver le contraire. Même par contenu de secteur.
shap a écrit :
De toute façon, ton CP/M adoré, il détecte forcément le format quelque part (certainement de manière très partielle comme l'AMSDOS) si il est capable de te donner la capacité et le nombre d'enregistrements et de blocs prévus.... donc le mieux serait que tu farfouilles dans les points d'entrée système du CP/M pour voir ce qu'il exécute quand tu lui demande l'équivalent d'un CAT.
Je n'ai pas besoin de "farfouiller" : Il y a une routine CP/M qui permet d'obtenir la capacité complète de la disquette, ce qui me donne son format, et le contenu des secteurs me l'indique aussi.
shap a écrit :
il est obligé de reconnaitre la disquette SANS fichier dessus sinon il ne pourrait pas commencer à écrire dessus
Ouh la! tu n'as rien compris à ce que je veux faire : je n'ai pas besoin d'écrire sur le disque : je le lis. Bon, je ne perds pas plus de temps à expliquer...
Le but de ce topic était de trouver un programmeur qui avait déjà fait de la détection de format avec seulement le contenu des secteurs : car c'est amusant à faire, c'est efficace et on peut ruser sur pleins de trucs.
Pas de tergiverser 1000 ans avec quelqu'un qui ne veut / ou ne peut pas comprendre et qui me dit que si ça ne détecte pas Parados ce n'est pas un détecteur de format : je m'en fous de Parados.
Mais oui, tout le monde sait que Shap est une buse en FDC !! C'est pas comme s'il bossait là dessus depuis 20 ans
Non, personne ici ne dit qu'il est une buse en FDC, sauf toi.
La question posée dans ce topic était de savoir comment l'un d'entre vous s'y prendrait-il pour déterminer le format de la disquette juste avec le contenu des octets ? Histoire de comparer l'angle d'approche, car il y a plusieurs solutions.
Pour ceux qui le font avec la routine Amsdos prévue pour cela, ou par le FDC, ils peuvent sauter ce topic, il n'est pas pour eux.
Fonction 31 : Lecture de l'adresse de la DPB. Action : cette fonction fournit, dans le registre HL, l'adresse du DPB (Disk Parameter Bloc) du disque courant. CE : C = 1FH. CS : HL pointe sur la DPB.
et il existe plein d'autres fonctions disques CP/M très poussées. Mais en fait, je voulais m'amuser à le faire sans utiliser aucune routine système: ni CP/M, ni AMSDOS.
Juste en regardant le contenu des secteurs. Par exemple, comment s'y prendre pour identier l'emplacement du catalogue sur une disquette.
Sans utiliser aucune routine système, ni FDC, c'est un exercice assez marrant à faire. J'ai trouvé ça instructif pour ma part.
Sachant qu'il peut se trouver en piste 0,1 ou 2...
Inscription : 20 Août 2007, 18:21 Message(s) : 4992
je comprends pas trop ce que tu veux faire , et avec quelle(s) limite(s). Pour regarder le contenu d'un secteur il faut déjà paramétrer son nom ou numéro a la fonction/routine qui va le lire .. DATA: C1/C2/C3... SYSTEM/VENDOR: 41/42/43... IBM: 01/02/03...
Ben ce que je veux faire est simple : détecter le format d'une disquette en regardant simplement les données contenues dans les secteurs. Pas besoin des noms de secteurs. Pour ça, je lis les pistes et les secteurs avec une simple routine maison. Voilà, juste en analysant ce contenu, on peut deviner le format.
On peut aussi s'amuser à deviner où se trouve le catalogue sur une disquette. On peut faire plein de choses juste avec de l'analyse de contenu.
C'est ce que fait par exemple le logiciel Dir Doktor : Il parcourt la disquette en regardant les entêtes, le contenu des secteurs, et il utilise ces informations pour reconstruire le catalogue détruit. C'est de l'analyse de contenu : quand on sait à l'avance comment le contenu est structuré, on peut trouver à quoi ça correspond.
Pour deviner où est le répertoire sur la disquette, j'ai donc employé une technique (un peu) similaire. Car je ne crois pas qu'il y ait une routine qui donne l'emplacement du catalogue. En tous cas je n'en connais pas.
Vu que des passionnés programment depuis 30 ans sur le CPC, je pensais que ça avait déjà été fait.
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 56 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