CPC Rulez
https://cpcrulez.fr/forum/

Discology sous Emulateur
https://cpcrulez.fr/forum/viewtopic.php?f=7&t=4397
Page 2 sur 2

Auteur :  Fredouille [ 28 Fév 2011, 21:36 ]
Sujet du message :  Re: Discology sous Emulateur

JMD a écrit :
Hello,

Pas certain que ça vous serve à quelque chose mais j'ai dumpé en eDsk avec Samdisk 3.0 mon original 5.1 de Discology.
Winape trouve un secteur avec une taille anormale, c'est peut être un bug sur mon disque ou la protection.



Voici ce que me donne Caprice concernant la disquette de la version 2.0 de discology. L'organisation est, comment dire, plutôt farfelue !!


SIDE= 0 TRACK= 0 (0h)
data = 01401770h
sectors = 10 (Ah)
size = 4864 (1300h)

Sector0 data=01401770h size=512(200h) CHRN=00 00 C1 02 Flags=00 00 00 00
Sector1 data=01401970h size=512(200h) CHRN=00 00 C6 02 Flags=00 00 00 00
Sector2 data=01401B70h size=512(200h) CHRN=00 00 C2 02 Flags=00 00 00 00
Sector3 data=01401D70h size=512(200h) CHRN=00 00 C7 02 Flags=00 00 00 00
Sector4 data=01401F70h size=512(200h) CHRN=00 00 C3 02 Flags=00 00 00 00
Sector5 data=01402170h size=512(200h) CHRN=00 00 C8 02 Flags=00 00 00 00
Sector6 data=01402370h size=512(200h) CHRN=00 00 C4 02 Flags=00 00 00 00
Sector7 data=01402570h size=512(200h) CHRN=00 00 C9 02 Flags=00 00 00 00
Sector8 data=01402770h size=512(200h) CHRN=00 00 C5 02 Flags=00 00 00 00
Sector9 data=01402970h size=256(100h) CHRN=00 00 CA 01 Flags=00 00 00 00

SIDE= 0 TRACK= 1 (1h)
data = 01402B70h
sectors = 9 (9h)
size = 4608 (1200h)

Sector0 data=01402B70h size=512(200h) CHRN=01 00 C1 02 Flags=00 00 00 00
Sector1 data=01402D70h size=512(200h) CHRN=01 00 C6 02 Flags=00 00 00 00
Sector2 data=01402F70h size=512(200h) CHRN=01 00 C2 02 Flags=00 00 00 00
Sector3 data=01403170h size=512(200h) CHRN=01 00 C7 02 Flags=00 00 00 00
Sector4 data=01403370h size=512(200h) CHRN=01 00 C3 02 Flags=00 00 00 00
Sector5 data=01403570h size=512(200h) CHRN=01 00 C8 02 Flags=00 00 00 00
Sector6 data=01403770h size=512(200h) CHRN=01 00 C4 02 Flags=00 00 00 00
Sector7 data=01403970h size=512(200h) CHRN=01 00 C9 02 Flags=00 00 00 00
Sector8 data=01403B70h size=512(200h) CHRN=01 00 C5 02 Flags=00 00 00 00

SIDE= 0 TRACK= 2 (2h)
data = 01403E70h
sectors = 9 (9h)
size = 4608 (1200h)

Sector0 data=01403E70h size=512(200h) CHRN=02 00 C1 02 Flags=00 00 00 00
Sector1 data=01404070h size=512(200h) CHRN=02 00 C6 02 Flags=00 00 00 00
Sector2 data=01404270h size=512(200h) CHRN=02 00 C2 02 Flags=00 00 00 00
Sector3 data=01404470h size=512(200h) CHRN=02 00 C7 02 Flags=00 00 00 00
Sector4 data=01404670h size=512(200h) CHRN=02 00 C3 02 Flags=00 00 00 00
Sector5 data=01404870h size=512(200h) CHRN=02 00 C8 02 Flags=00 00 00 00
Sector6 data=01404A70h size=512(200h) CHRN=02 00 C4 02 Flags=00 00 00 00
Sector7 data=01404C70h size=512(200h) CHRN=02 00 C9 02 Flags=00 00 00 00
Sector8 data=01404E70h size=512(200h) CHRN=02 00 C5 02 Flags=00 00 00 00

SIDE= 0 TRACK= 3 (3h)
data = 01405170h
sectors = 9 (9h)
size = 4608 (1200h)

Sector0 data=01405170h size=512(200h) CHRN=03 00 C1 02 Flags=00 00 00 00
Sector1 data=01405370h size=512(200h) CHRN=03 00 C6 02 Flags=00 00 00 00
Sector2 data=01405570h size=512(200h) CHRN=03 00 C2 02 Flags=00 00 00 00
Sector3 data=01405770h size=512(200h) CHRN=03 00 C7 02 Flags=00 00 00 00
Sector4 data=01405970h size=512(200h) CHRN=03 00 C3 02 Flags=00 00 00 00
Sector5 data=01405B70h size=512(200h) CHRN=03 00 C8 02 Flags=00 00 00 00
Sector6 data=01405D70h size=512(200h) CHRN=03 00 C4 02 Flags=00 00 00 00
Sector7 data=01405F70h size=512(200h) CHRN=03 00 C9 02 Flags=00 00 00 00
Sector8 data=01406170h size=512(200h) CHRN=03 00 C5 02 Flags=00 00 00 00

SIDE= 0 TRACK= 4 (4h)
data = 01406470h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01406470h size=4096(1000h) CHRN=04 00 45 05 Flags=00 00 00 00

SIDE= 0 TRACK= 5 (5h)
data = 01407570h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01407570h size=4096(1000h) CHRN=05 00 42 05 Flags=00 00 00 00

SIDE= 0 TRACK= 6 (6h)
data = 01408670h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01408670h size=4096(1000h) CHRN=06 00 42 05 Flags=00 00 00 00

SIDE= 0 TRACK= 7 (7h)
data = 01409770h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01409770h size=4096(1000h) CHRN=07 00 42 05 Flags=00 00 00 00

SIDE= 0 TRACK= 8 (8h)
data = 0140A870h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0140A870h size=4096(1000h) CHRN=08 00 42 05 Flags=00 00 00 00

SIDE= 0 TRACK= 9 (9h)
data = 0140B970h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0140B970h size=4096(1000h) CHRN=09 00 31 05 Flags=00 40 00 00

SIDE= 0 TRACK= 10 (Ah)
data = 0140CA70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0140CA70h size=4096(1000h) CHRN=0A 00 31 05 Flags=00 40 00 00

SIDE= 0 TRACK= 11 (Bh)
data = 00000000h
sectors = 0 (0h)
size = 0 (0h)


SIDE= 0 TRACK= 12 (Ch)
data = 0140DB70h
sectors = 0 (0h)
size = 4096 (1000h)


SIDE= 0 TRACK= 13 (Dh)
data = 0140EC70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0140EC70h size=4096(1000h) CHRN=0D 00 32 05 Flags=00 40 00 00

SIDE= 0 TRACK= 14 (Eh)
data = 0140FD70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0140FD70h size=4096(1000h) CHRN=0E 00 32 05 Flags=00 40 00 00

SIDE= 0 TRACK= 15 (Fh)
data = 01410E70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01410E70h size=4096(1000h) CHRN=0F 00 32 05 Flags=00 40 00 00

SIDE= 0 TRACK= 16 (10h)
data = 01411F70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01411F70h size=4096(1000h) CHRN=10 00 33 05 Flags=00 40 00 00

SIDE= 0 TRACK= 17 (11h)
data = 01413070h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01413070h size=4096(1000h) CHRN=11 00 33 05 Flags=00 40 00 00

SIDE= 0 TRACK= 18 (12h)
data = 01414170h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01414170h size=4096(1000h) CHRN=12 00 34 05 Flags=00 40 00 00

SIDE= 0 TRACK= 19 (13h)
data = 01415270h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01415270h size=4096(1000h) CHRN=13 00 34 05 Flags=00 40 00 00

SIDE= 0 TRACK= 20 (14h)
data = 01416370h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01416370h size=4096(1000h) CHRN=14 00 35 05 Flags=00 40 00 00

SIDE= 0 TRACK= 21 (15h)
data = 01417470h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01417470h size=4096(1000h) CHRN=15 00 35 05 Flags=00 40 00 00

SIDE= 0 TRACK= 22 (16h)
data = 01418570h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01418570h size=4096(1000h) CHRN=16 00 D1 05 Flags=00 40 00 00

SIDE= 0 TRACK= 23 (17h)
data = 01419670h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01419670h size=4096(1000h) CHRN=17 00 D1 05 Flags=00 40 00 00

SIDE= 0 TRACK= 24 (18h)
data = 0141A770h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0141A770h size=4096(1000h) CHRN=18 00 D1 05 Flags=00 40 00 00

SIDE= 0 TRACK= 25 (19h)
data = 0141B870h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0141B870h size=4096(1000h) CHRN=19 00 D1 05 Flags=00 40 00 00

SIDE= 0 TRACK= 26 (1Ah)
data = 0141C970h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0141C970h size=4096(1000h) CHRN=1A 00 D2 05 Flags=00 40 00 00

SIDE= 0 TRACK= 27 (1Bh)
data = 0141DA70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0141DA70h size=4096(1000h) CHRN=1B 00 D2 05 Flags=00 40 00 00

SIDE= 0 TRACK= 28 (1Ch)
data = 0141EB70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0141EB70h size=4096(1000h) CHRN=1C 00 D2 05 Flags=00 40 00 00

SIDE= 0 TRACK= 29 (1Dh)
data = 0141FC70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=0141FC70h size=4096(1000h) CHRN=1D 00 D2 05 Flags=00 40 00 00

SIDE= 0 TRACK= 30 (1Eh)
data = 00000000h
sectors = 0 (0h)
size = 0 (0h)


SIDE= 0 TRACK= 31 (1Fh)
data = 01420D70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01420D70h size=4096(1000h) CHRN=1F 00 D3 05 Flags=00 40 00 00

SIDE= 0 TRACK= 32 (20h)
data = 01421E70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01421E70h size=4096(1000h) CHRN=20 00 D3 05 Flags=00 40 00 00

SIDE= 0 TRACK= 33 (21h)
data = 01422F70h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01422F70h size=4096(1000h) CHRN=21 00 D3 05 Flags=00 40 00 00

SIDE= 0 TRACK= 34 (22h)
data = 01424070h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01424070h size=4096(1000h) CHRN=22 00 D3 05 Flags=00 40 00 00

SIDE= 0 TRACK= 35 (23h)
data = 01425170h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01425170h size=4096(1000h) CHRN=23 00 D5 05 Flags=00 40 00 00

SIDE= 0 TRACK= 36 (24h)
data = 01426270h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01426270h size=4096(1000h) CHRN=24 00 D5 05 Flags=00 40 00 00

SIDE= 0 TRACK= 37 (25h)
data = 01427370h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01427370h size=4096(1000h) CHRN=25 00 D5 05 Flags=00 40 00 00

SIDE= 0 TRACK= 38 (26h)
data = 01428470h
sectors = 1 (1h)
size = 4096 (1000h)

Sector0 data=01428470h size=4096(1000h) CHRN=26 00 D5 05 Flags=00 40 00 00

SIDE= 0 TRACK= 39 (27h)
data = 00000000h
sectors = 0 (0h)
size = 0 (0h)


SIDE= 0 TRACK= 40 (28h)
data = 00000000h
sectors = 0 (0h)
size = 0 (0h)


SIDE= 0 TRACK= 41 (29h)
data = 00000000h
sectors = 0 (0h)
size = 0 (0h)


SIDE= 0 TRACK= 42 (2Ah)
data = 00000000h
sectors = 0 (0h)
size = 0 (0h)

Auteur :  Fredouille [ 06 Mars 2011, 11:47 ]
Sujet du message :  Re: Discology sous Emulateur

Lorsque je lance l'exploration du disque, discology lance une multitude de commandes "Read ID" puis plante.

Dans le code de Caprice, à chaque Read ID, le pointeur de secteur saute au prochain secteur.
J'ai bien essayé de retirer ce saut, Discology plante toujours mais différemment.

Quel est l'intérêt d'effectuer une tripotée de Read ID à la suite ?

Je cherche dans le Datasheet du FDC pour vérifier l'état des flags dans les status retournés et voir si Discology n'en attend pas un en particulier qui ne serait pas positionné.

Auteur :  Demoniak [ 06 Mars 2011, 12:47 ]
Sujet du message :  Re: Discology sous Emulateur

J'ai examiné le code, et j'en ai déduis les choses suivantes :

- Discology effectue des Read ID et mesure le temps total écoulé, ceci afin de détecter à quel moment il aura lu la piste entière, pour récupérer l'intégralité des secteurs de la piste.

- Caprice ainsi que mon émulateur n'émulent pas le temps d'accès à chaque octets de la piste (contrairement à winape, à condition de décocher "fast disc emulation"), voilà pourquoi ils font "planter" discology, qui emagazine trops de secteurs ID et finit par écraser son propre code...

La solution est biensur d'émuler ces temps. L'idéal étant d'émuler une disquette, avec la rotation et les temps d'accès à chaque octets des secteurs.

Je vais essayer d'intégrer ça dans mon ému et je publierai ici les résultats ;-)

Auteur :  Fredouille [ 06 Mars 2011, 17:53 ]
Sujet du message :  Re: Discology sous Emulateur

Normalement, il suffit d'ajouter une tempo entre la réception des commandes et la disponibilité du résultat.
Je vais tenter quelque chose de mon côté aussi.

Auteur :  Fredouille [ 07 Mars 2011, 21:29 ]
Sujet du message :  Re: Discology sous Emulateur

J'ai ajouté une tempo pendant laquelle la lecture de du "main status" retourne FDC executing et FDC Busy.

Maintenant, quel est la durée d'une lecture d'un secteur ?

Avec 50ms, l'exploration du disque se plante comme s'il n'y avait aucun délai.
Avec 150ms, l'exploration freeze.
Avec 250 ms, je commence à voir les barres noires, mal placées, puis l'émulateur se plante à nouveau.

Auteur :  Demoniak [ 07 Mars 2011, 22:35 ]
Sujet du message :  Re: Discology sous Emulateur

En fait c'est un peu plus compliqué que ça, vu que ça dépend de la taille du secteur.
Pour bien faire, il faut aussi prendre en compte tous les autres octets de la piste (les différents gaps, octets de synchro, crc...)
Sachant qu'en MFM la fréquence des bits transférés depuis/vers la disquette est de 500Khz, soit 2µs, cela fait donc 16µs par octets. 32µs par octets car un bit en MFM nécessite deux impulsions.
Sachant encore que le lecteur tourne à 300tr/min, soit 200ms pour faire un tour complet, on peut donc en déduire que l'on peut lire au maximum 200000/16 = 12500 200000/32 = 6250 octets sur une piste (pour une rotation complète).
Bref y a du boulot quand même.
Dès que j'ai le temps de coder tout ça je posterai ici.

[Edit]J'ai corrigé vu que j'avais oublié qu'en MFM il faut 16 bits pour encoder un octet[/edit]

Auteur :  Demoniak [ 08 Mars 2011, 09:17 ]
Sujet du message :  Re: Discology sous Emulateur

Un petit schéma pour résumer tous les octets se trouvant sur une piste :

- GAP 4a : 80 octets à #4E
- Sync : 12 octets à #00

Ces 92 premiers octets se retrouvent lorsque le disque est en face du "trou" d'index, soit au tout début de la piste.

- IAM : 3 octets à #C2 + 1 octet à #FC
- GAP 1 : 50 octets à #4E

Puis, pour chaque secteurs :
- Sync : 12 octets à #00
- IDAM : 3 octets à #A1 + 1 octet à #FE
- C (identification secteur 'C' = 1 octet)
- H (identification secteur 'H' = 1 octet)
- R (identification secteur 'R' = 1 octet)
- N (identification secteur 'N' = 1 octet)
- Crc (1 octet)
- GAP 2 (22 octets à #4E)
- Sync : 12 octets à #00
- DATA AM : 3 octets à #A1 + 1 octet à #FB ou #F8
- Les n données du secteurs (512 octets pour un secteur 'standard')
- Crc (1 octet)
- GAP #3 (x octets, dépend du formatage)

Pour finir, en fin de piste, on a le GAP 4B, qui sert à "remplir" le reste de la piste, pour arriver au total de 6250 octets.

Avec le schéma classique de l'amsdos, 9 secteurs de 512 octets et GAP3=#4E (78), on voit que l'on a, pour une piste :

80+12+4+50 octets en début de piste = 146
(12+4+4+1+22+12+4+512+1+78)*9 = (60+512+78)*9 = 5850
reste pour le GAP 4B (fin de piste) = 6250-5850-146 = 254 octets

Avec un Gap#3 à #24 (36), on arrive à mettre 10 secteurs par piste, en effet :
toujours nos 146 octets en début de piste,
on a maintenant 608 octets par secteurs, soit 6080 octets pour 10 secteurs
reste : 6250-6080-146 = 24 octets

J'espère avoir été clair dans mes explications, et ne pas m'être trompés dans mes calculs :wink:

Ces informations étant très intéressantes et pas toujours facile à trouver, je me suis dit qu'il serait intéressant que je les enregistre également sur mon site.

Auteur :  Fredouille [ 08 Mars 2011, 10:04 ]
Sujet du message :  Re: Discology sous Emulateur

Il me semble avoir lu toutes ces infos dans le Micro Application N°10, consacré au lecteur de disquettes, que je suis en train de scanner.

Auteur :  TotO [ 08 Mars 2011, 11:10 ]
Sujet du message :  Re: Discology sous Emulateur

Demoniak a écrit :
J'espère avoir été clair dans mes explications, et ne pas m'être trompés dans mes calculs.
Ces valeurs me sont parlantes. Maintenant, la taille des secteurs est imposée.
Je ne crois pas qu'il soit possible d'utiliser 608 octets ... Tu seras limité à 512. (avec des gaps plus gros donc)
Dans le cas d'un formatage sur 40 pistes, tu auras donc 10*512*40 = 200Ko. (205Ko pour 41)
Sachant qu'il ne faut même pas espérer avoir 11 pistes en grappillant sur la taille des gaps.

C'est clair que l'émulation du FDC est le parent pauvre du CPC.
Et encore, on a la chance que le lecteur tourne à vitesse constante ! :D

Auteur :  Demoniak [ 08 Mars 2011, 11:34 ]
Sujet du message :  Re: Discology sous Emulateur

Quand je dis 608 octets par secteur, c'est tout compris, ID+Gaps+datas = 60+36+512, donc le secteur "utilisable" fait bien 512 octets ;-)

Auteur :  TotO [ 08 Mars 2011, 11:35 ]
Sujet du message :  Re: Discology sous Emulateur

C'est vrai, au temps pour moi.
Je ne suis pas bien réveillé, alors je vais éviter de poster.

En espérant que ton émulateur ouvre de nouvelles perspectives au CPC. :biere:

Auteur :  Demoniak [ 08 Mars 2011, 12:05 ]
Sujet du message :  Re: Discology sous Emulateur

Fredouille a écrit :
Il me semble avoir lu toutes ces infos dans le Micro Application N°10, consacré au lecteur de disquettes, que je suis en train de scanner.


Intéressant ça, tu pourras nous donner un lien si tu postes le scan ?

Auteur :  Fredouille [ 08 Mars 2011, 18:29 ]
Sujet du message :  Re: Discology sous Emulateur

Bien sur, il sera en ligne sur cpc-p0wer.

Mais en regardant le datasheet du FDC ce matin, il me semble avoir vu ces infos, à la fin du document, en présentant les différents formats des disquettes de l'époque.
Le datasheet est dispo dans la section "Téléchargement" de cpc-p0wer.

Auteur :  PhilA [ 25 Mars 2011, 13:57 ]
Sujet du message :  Re: Discology sous Emulateur

Perso j'utilise Discology version 6.0+ de XOR qui tourne parfaitement bien sous WinAPE mais pas sous Caprice.

Je dispose de deux versions qui fonctionnent mais comme tout cela remonte à quelques années je ne me souviens plus quelles sont les différences entre ces deux versions.
Bref, à toutes fins utiles je vous ai mis les deux versions dans le fichier RAR ci-joint.

Auteur :  Fredouille [ 26 Mars 2011, 15:58 ]
Sujet du message :  Re: Discology sous Emulateur

Merci, je vais voir ce que cela donne sur mon Caprice.

Mais je reste d'accord avec Demoniak, Discology à l'air de lire de façon physique la disquette. Il faut donc simuler tous les temps d'accès, de lecture...
Je continue d'éplucher le datasheet du FDC, et la littérature associée.

Page 2 sur 2 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/