Dans l’article précédent j’expliquais que j’étais confronté à un problème
pour la reconnaissance des images .DI
sur un disque SCSI. Les images .DI
sont des images de floppy disk avec une différence simple mais fondamentale par
rapport aux disques SCSI, l’offset de l’en-tête FOS n’est pas le même. Dans le
cas des floppy, l’en-tête FOS commence plus tôt que pour les disques SCSI, où
l’en-tête doit commencer à l’adresse 0x1000
. Ces problématiques je les ai déjà
traité il y a (environ) 16 ans quand j’ai développé Fosfat. Mais 16 ans
commence à être un peu loin pour moi. Après un petit échange avec Pierre Arnaud
et quelques recherches dans ce que j’avais implémenté à l’époque, il est devenu
clair qu’il n’y a rien d’autre qu’un offset. Les adressages dans le FOS se font
par numérotation de bloc (un bloc est constitué de 256 octets) et les blocs sont
relatifs au FOS. Il est donc tout à fait possible de déplacer tout le contenu à
la bonne position (par exemple de 0x0000
à 0x1000
si on souhaite transformer
un .DI
en image disque SCSI) sans devoir effectuer la moindre modification
dans les données du FOS.
Mais qu’est-ce que c’est ? Hé bien, pendant mes études à la HES de Sion,
j’aimais passer mon temps libre sur des projets de développement divers et
variés. Je m’inquiétais du sort possible du disque dur de mon Smaky 130. J’avais
donc effectué en 2007, un dump complet du disque sur un PC équipé d’une Debian
et d’une carte Adaptec, avec avec la commande dd
. J’étais confronté alors à de
nouveaux problèmes. Tout d’abord, comment lire cette image disque depuis mon PC
? Ensuite, bien que le Smaky Infini existait déjà depuis longtemps, je
n’étais pas du tout satisfait de devoir passer par un émulateur. Tout d’abord je
n’arrivais pas à monter mon image disque dans le Smaky Infini (le fameux
problème d’offset avec le FOS) et surtout je suis obligé d’utiliser Wine
pour exploiter l’émulateur, sans compter que le navigateur de fichiers du Smaky
n’est plus du tout adapté à notre époque (même en 2007).
J’ai décidé d’écrire à Epsitec SA pour savoir si quelqu’un pourrait me donner des pistes pour que je puisse écrire un outil permettant de lire une image “FOS”. J’avais déjà en ma possession un document mais celui-ci ne m’apportait pas forcément les réponses à toutes les questions que j’avais. Pierre m’a orienté sur des sources CALM (Common Assembly Language for Microprocessors) qui m’ont alors réellement permis d’écrire Fosfat.
Le Smaky Info de Pierre-Olivier Vallat à propos des disquettes parle de la question de l’offset. Vous pouvez charger le PDF complet avec ce lien.
Mon système d’exploitation numéro 1 est Linux depuis le début des années 2000. Je passais de Linux à Windows selon les besoins mais pour moi Windows était déjà depuis longtemps une voie de garage (et je le pense toujours).
Mon objectif était alors de trouver un moyen de monter une image ou un disque physique Smaky directement dans le système de fichier. Pour y arriver, avec Linux il n’y a rien de plus simple. La solution vient de FUSE (Filesystem in Userspace).
Il faut bien comprendre que FUSE n’existe pas pour Windows. Il existe depuis lors des projets pour combler ce vide tel que WinFsp. Je salue leur travail, celà n’empêche pas que le problème de fond vient de Microsoft qui est extrêmement fort pour constamment rendre les choses compliquées. A croire que c’est bon pour le business. Donc pour Fosfat, Windows est le cadet de mes soucis et je m’attaque alors très rapidement à l’écriture d’un module FUSE. Sachez qu’en 2007 WinFsp n’existait pas, et de plus ce n’est pas intégré dans Windows en standard, ce qui demande un effort supplémentaire.
Bien que ce module ne peut pas être porté directement pour Windows, j’ai néanmoins aussi créé un outil
fosread
qui ne dépend pas de FUSE et qui permet de naviguer et extraire les fichiers du FOS. Tous les outils Fosfat à l’exception defosmount
sont alors aussi supportés par Windows.
Je vous invite à faire le tour de cette page, où vous trouverez la liste complète des commandes Fosfat à disposition.
Voici comment procéder pour transformer une image .DI
en image disque
compatible SCSI.
fosdd ./disk.di "./HD30_512 DR Dev.hda"
C’est ainsi que j’ai résolu le problème. L’îmage originale est un .DI
que m’a
transmis Daniel Roux il y a quelques années et dans lequel il y a des sources
précieuses de logiciels Smaky. Cette image se monte sans problème avec le Smaky
Infini, mais je voulais l’avoir directement avec mon Smaky 130 maintenant
que je suis équipé d’une BlueSCSI. Avec la commande fosdd
pour pouvez
facilement passer d’une image .DI
en image disque SCSI et vice-versa. J’ai
alors très rapidement testé avec succès sur le Smaky 130 où l’image s’est monté
tout en douceur dans le système (en tant que SCSI ID 3).
La commande fosdd
ne fait pas grand chose. Elle utilise la libfosfat
pour
reconnaître le device (ou l’image) et en déterminer son type (floppy ou disk).
Les APIs de libfosfat
permettent alors de récupérer les blocs du FOS. Les
conversions se font alors ainsi :
Image .DI
en image disque
Insertion de 0x1000
octets en tête avec une section de boot de moins de 256
octets à la position 0x400
. Cette section de boot se retrouve (à priori
identique) sur tous les disques que j’ai pu inspecter et elle ressemble à
ceci :
Copie bit à bit de tous les blocs du FOS à la suite de ce nouvel en-tête.
Image disque en image .DI
0x1000
).Pour les Windowsiens, je suis tellement sympa que je vous met à disposition des builds 32 et 64 bit sur cette page.
Pour les Linuxiens, Fosfat est disponible avec Debian / Ubuntu / Mint / …
depuis de nombreuses années avec apt install fosfat
. Néanmoins vous tomberez
sous la version 0.4.0 (qui est très stable) et qui ne propose pas fosdd
. Par
contre vous pourrez jouer avec toutes les autres commandes qui sont restés
exactement les mêmes que dans cette nouvelle version 1.0.0. Pour fosdd
, je
vous invite alors à compiler directement la version 1.0.0 en attendant la
prochaine mise à jour dans Debian.
Commande | OS | Description |
---|---|---|
fosmount |
Linux | Monte le FOS dans le système de fichier et transformation à la volée possible des .COLOR et .IMAGE |
fosread |
Linux / Windows | Lister et extraire des fichiers (fichiers effacés également) |
fosdd |
Linux / Windows | Convertit les images disque SCSI et floppy dans les deux sens |
fosrec |
Linux / Windows | Extrait tous les fichiers effacés qui sont encore récupérables (même partiellement) |
smascii |
Linux / Windows | Convertit un texte utilisant l’encodage Smaky en ISO-8859-1 |