Le format DMK a été créé à l'origine pour stocker des disques TRS-80. Toutes les spécificités TRS-80 du format DMK ne s'appliquent pas à la norme MSX, donc tout ce qui se trouve dans le format DMK n'est pas implémenté pour le moment, et ne le sera probablement jamais. Par exemple, Single Density n'a jamais été utilisé sur MSX, donc aucune prise en charge n'est implémentée dans openMSX.

DMK - Format détaillé

Les fichiers avec une extension .DSK peuvent être au format JV1, JV3 ou DMK. Le format DMK est un format développé par David Keil qui permet le stockage de disques TRS-80 sous forme pure, ce qui permettrait la représentation de disques protégés contre la copie dans des images d'émulateur. Le format DMK permet de prendre en charge tout format codé FM ou MFM raisonnablement proche des normes IBM 3740 ou IBM System 34.

Les disques au format DMK sont faciles à distinguer en raison de leur en-tête de 16 octets. Les émulateurs fabriqués après 2005 devraient gérer le format DMK.

Le format de disque virtuel DMK est aussi proche que possible de la manière dont les données sont stockées sur un disque réel. Il y a très peu de surcharge supplémentaire et les données sont facilement examinées et modifiées à l'aide d'éditeurs hexadécimaux basés sur PC. La conception réelle est vraiment assez simple et permet la prise en charge de TOUTES les fonctions et formats du contrôleur WD-17xx. Bien que la conception soit simple, les exigences de programmation pour ce format sont beaucoup plus étendues que pour les formats JV1/JV3.

 
Disk header:

Les disques virtuels ont un en-tête de disque de 16 octets qui est initialisé lorsque l'utilisateur crée un nouveau disque virtuel. Cet en-tête peut être modifié avant ou après le formatage d'un disque virtuel pour changer certaines de ses caractéristiques.

Octet 0 : Si cet octet est défini à ${$}$FF, le disque est protégé, 00H permet l'écriture.

Octet 1 : Nombre de pistes sur le disque virtuel. Étant donné que les pistes commencent à 0, cette valeur sera supérieure d'un octet à la piste la plus élevée écrite sur le disque. Ainsi, un disque avec 40 pistes aura une valeur de 40 (${$}$28) dans ce champ après le formatage tandis que la piste la plus élevée écrite serait 39. Ce champ est mis à jour après le formatage d'une piste si la piste formatée est supérieure ou égale au nombre actuel de pistes. Le reformatage d'un disque avec moins de pistes ne réduira PAS le nombre de pistes sur le disque virtuel. Une fois qu'un disque virtuel a alloué de l'espace pour une piste, il ne la libérera JAMAIS.

Le formatage d'un disque virtuel avec 80 pistes, puis son reformatage avec 40 pistes, gaspillerait de l'espace, tout comme le formatage de seulement 40 pistes sur un lecteur de 80 pistes. L'émulateur et le système d'exploitation TRS-80 ne s'en soucient pas. Pour reformater un disque virtuel avec moins de pistes, utilisez l'option /I au démarrage pour supprimer et recréer d'abord le disque virtuel, puis reformatez-le pour économiser de l'espace.

Remarque : ce champ ne doit JAMAIS être modifié. La modification de ce nombre entraînera des erreurs de disque du système d'exploitation TRS-80. (Comme la lecture d'un disque de 80 pistes dans un lecteur de 40 pistes).

Octet 2 et 3 : il s'agit de la longueur de piste du disque virtuel. Par défaut, la valeur est de 1 900 octets, soit 80 octets de plus que la longueur de piste réelle, ce qui donne une longueur de piste de 6 272 octets. Une longueur de piste double densité réelle est d'environ 6 250 octets. Il s'agit de la valeur par défaut lors de la création d'un disque virtuel. Les valeurs pour les autres types de format de disque sont ${$}$0CC0 pour les disquettes 5,25" à densité simple, ${$}$14E0 pour les disquettes 8" à densité simple et ${$}$2940 pour les disquettes 8" à double densité. La valeur maximale est ${$}$2940. Pour un formatage normal des disques, les valeurs de ${$}$1900 et ${$}$2940 pour les disques 5,25" et 8" sont utilisées. L'émulateur écrira deux octets et lira un octet sur deux en densité simple pour maintenir un espacement de secteur approprié, ce qui permet d'utiliser des disques à densité mixte. Le réglage de la longueur de piste doit être effectué avant le formatage d'un disque virtuel, sinon le disque devra être reformaté et comme l'espace pour le disque a déjà été alloué, aucun espace ne sera enregistré.

ATTENTION : les octets sont saisis dans l'ordre inverse (ex. octet 2 = 40, octet 3 = 29).

Remarque : aucune modification de la longueur de piste n'est nécessaire, cela permet uniquement d'économiser de l'espace et n'est pas nécessaire pour un formatage normal Opération. Les valeurs pour tous les disques normaux de 5,25" et 8" sont définies lors de la création du disque virtuel. NE modifiez PAS la longueur de piste à moins que vous ne compreniez complètement ces instructions. Rien dans le monde du PC ne peut être gâché par une modification incorrecte, mais tout autre disque virtuel monté dans l'émulateur avec un disque incorrectement modifié pourrait voir ses données brouillées.

Octet 4 : Indicateurs d'options de disque virtuel.

Le bit 4 de cet octet, s'il est défini, signifie qu'il s'agit d'un disque UNIQUEMENT à une seule face. Ce bit est défini si l'utilisateur sélectionne une seule face lors de la création du disque et ne devrait pas nécessiter de modification. Cet indicateur est utilisé uniquement pour économiser de l'espace sur le disque dur du PC et n'est jamais nécessaire.

Le bit 6 de cet octet, s'il est défini, signifie que ce disque doit être de taille à densité unique et que l'émulateur accédera à un octet au lieu de deux lors de l'exécution d'E/S en densité unique. La double densité peut toujours être écrite sur un disque à densité unique, mais avec la moitié de la longueur de piste, seuls 10 secteurs de 256 octets peuvent être écrits dans l'une ou l'autre densité.

La densité mixte est également possible, mais la synchronisation des secteurs peut être décalée, de sorte que les disques protégés peuvent ne pas fonctionner. Un maximum de 10 secteurs de 256 octets de densité mixte peuvent être écrits sur un disque à densité unique. Un programme comme « Spook House » qui a une piste de densité mixte 0 avec 1 secteur SD et 1 secteur DD et le reste du disque constitué de 10 secteurs SD/piste fonctionnera avec cet indicateur défini et économisera la moitié de l'espace disque dur du PC. Le disque protégé « Super Utility + 3.0 » a cependant 6 secteurs SD et 6 secteurs DD/piste pour un total de 12 secteurs de 256 octets/piste. Ce disque ne peut pas être à densité unique.

Ce bit est défini si l'utilisateur sélectionne une densité unique lors de la création du disque et ne devrait pas nécessiter de modification. Cet indicateur est utilisé uniquement pour économiser de l'espace disque dur du PC et n'est jamais requis.

Le bit 7 de cet octet, s'il est défini, signifie que la densité doit être ignorée lors de l'accès à ce disque. Le disque DOIT être formaté en double densité, mais l'émulateur lira et écrira alors les secteurs dans l'une ou l'autre densité. L'émulateur accèdera à un octet au lieu de deux lors des E/S en densité simple. Ce paramètre était un moyen précoce de prendre en charge les disques à densité mixte, il n'est plus nécessaire à cette fin. Il est désormais utilisé pour la compatibilité avec les anciens disques virtuels créés sans le double octet désormais utilisé en densité simple. Ce bit peut être défini manuellement dans un éditeur hexadécimal pour accéder aux anciens disques virtuels écrits en densité simple.

Octet 5-B : réservés pour les options futures

Octet C-F : doit être zéro si le disque virtuel est au format natif de l'émulateur. Doit être ${$}$12345678 si le disque virtuel est un fichier de spécification de disque RÉEL utilisé pour accéder aux disquettes TRS-80 RÉELLES dans les lecteurs PC compatibles.

 
Track header:

Chaque piste possède un en-tête de 128 (80H) octets qui contient un décalage vers chaque IDAM de la piste. Celui-ci est créé lors du formatage et ne devrait JAMAIS nécessiter de modification.

Les données de piste réelles suivent cet en-tête et peuvent être visualisées avec un éditeur hexadécimal affichant les données brutes de la piste. Aucune modification ne doit être effectuée car chaque IDAM et secteur possède un CRC, c'est comme un vrai disque, et la modification des données de secteur sans mettre à jour la valeur CRC provoquera des erreurs CRC lors de l'accès au disque virtuel dans l'émulateur.

Remarque : une modification dans MSDOS peut cependant être effectuée pour émuler un disque protégé dans l'émulateur TRS-80.

En-tête de piste :

Chaque côté de chaque piste possède un en-tête de 128 (80H) octets qui contient un pointeur de décalage vers chaque IDAM de la piste. Cela permet un maximum de 64 IDAM de secteur/piste. C'est plus de deux fois ce qu'un disque de 8 pouces nécessiterait et 3,5 fois plus que celui d'un disque DD TRS-80 normal de 5 pouces. Cela devrait également être plus que suffisant pour tout disque protégé.

Ces pointeurs IDAM DOIVENT respecter les règles suivantes :

  • Chaque pointeur est un décalage de 2 octets par rapport à l'octet ${$}$FE de l'IDAM. Dans une densité simple à double octet, le pointeur est sur le premier ${$}$FE.
  • Le décalage inclut l'en-tête de 128 octets. Par exemple, un IDAM de ${$}$10 octets dans la piste aurait un pointeur de ${$}$90, ${$}$10 + ${$}$80 = ${$}$90.
  • Les décalages IDAM DOIVENT être dans l'ordre croissant sans pointeurs inutilisés ou erronés.
  • Si toutes les entrées ne sont pas utilisées, l'en-tête se termine par une entrée ${$}$0000. Les entrées inutilisées doivent également être remplies de zéros.
  • Tout IDAM écrasé pendant une commande d'écriture de secteur doit avoir son entrée supprimée de l'en-tête et toutes les autres entrées de pointeur décalées pour remplir.
  • Les pointeurs IDAM sont créés pendant la commande d'écriture de piste (format). Une écriture de piste terminée DOIT supprimer tous les pointeurs IDAM précédents. Une écriture de piste partielle (interrompue avec la commande d'interruption forcée) DOIT avoir ses pointeurs précédents qui n'ont pas été écrasés ajoutés aux nouveaux pointeurs IDAM.
  • Les octets de pointeur sont stockés dans l'ordre inverse (LSB/MSB).

Chaque pointeur IDAM a deux indicateurs. Le bit 15 est défini si le secteur est à double densité. Le bit 14 est actuellement indéfini. Ces bits doivent être masqués pour obtenir le décalage de secteur réel. Par exemple, un décalage vers un IDAM à l'octet ${$}$90 serait ${$}$0090 s'il s'agit d'une densité simple et ${$}$8090 s'il s'agit d'une densité double.

 
Track data:

Les données de piste réelles suivent l'en-tête et peuvent être visualisées avec un éditeur hexadécimal affichant les données brutes sur la piste. Si le disque virtuel ne possède pas les bits 6 ou 7 de l'octet 4 de l'en-tête du disque, chaque octet de données de densité est écrit deux fois, ce qui inclut les IDAM et les CRC (les CRC sont calculés comme si un seul octet était écrit). Les données IDAM et sectorielles ont chacune des CRC, comme sur un disque réel.

Aucune modification ne doit être effectuée, car le faire sans mettre à jour les CRC entraînerait des erreurs de données. Une modification peut cependant être effectuée pour créer des pistes protégées afin d'importer des disques protégés au format de disque virtuel. Des exemples de disques créés à l'aide de cette technique sont « Super Utility+ 3.0 » et « Forbidden City ».