| La structure des pistes d'une disquette sur CPC | Mar 8 Mar - 11:29 par Demoniak | Pour coder un émulateur, il faut approfondir tous les circuits intégrés de la machine pour les émuler au mieux.
Je me suis penché sur le µpd765a de Nec, le controleur du lecteur de disquette, pour savoir comment l'émuler au mieux.
Ce circuit est cadencé à une fréquence de 4Mhz. Cela est important, car pratiquement tous les temps donnés sur les documents constructeurs sont valables pour une fréquence de 8Mhz. Sur cpc, il faut donc multiplier tous les temps par deux.
Ce qui m'intéressait principalement, c'était la lecture/écriture des secteurs sur une piste, et le temps d'accès de ces fonctions. Pour cela, il faut bien comprendre comment cela fonctionne...
Le cpc lit/écrit des données sur disquette via le contrôleur par le mode appelé MFM. Ce mode permet d'envoyer des octets bit par bit depuis/vers le support physique de la disquette.
La documentation nous indique qu'à 4Mhz et en mode MFM, les données sont envoyées à 500khz, soit une impulsion toute les 2µs (Période=1/Fréquence).
En MFM, 1 bit est enregistré par une suite de deux impulsions cadencée à la fréquence donnée. Donc, pour envoyer un octet, il nous faut 16 impulsions. Ce qui nous donne 32µs par octets.
Sachant que le disque tourne à la vitesse constante de 300 tours/minutes, soit 5 tours par secondes, cela nous donne 0,2 secondes pour un tour, soit 200000µs.
En divisant 200000 par 32, on obtient 6250, qui est le nombre maximal d'octets que peut contenir une piste.
Mais comment sont organisés les octets sur une piste ?
Heureusement, la documentation du µPD765 nous donne le schéma suivant:
- 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 (2 octets)
- 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 (2 octets)
- 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+2+22+12+4+512+2+78)*9 = (62+512+78)*9 = 5868
reste pour le GAP 4B (fin de piste) = 6250-5868-146 = 236 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 610 octets par secteurs, soit 6100 octets pour 10 secteurs
reste : 6250-6100-146 = 4 octets
| Commentaires: 6 | Qui est en ligne ? | Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 Invités Aucun Le record du nombre d'utilisateurs en ligne est de 45 le Sam 29 Juil - 8:14 |
| Statistiques | Nous avons 96 membres enregistrés L'utilisateur enregistré le plus récent est xave2000
Nos membres ont posté un total de 352 messages dans 66 sujets
|
|