Skywalker13

Diary of an ex-GeeXboX developer…

BlueSCSI & Fosfat ~ 🇫🇷

Posted at — Mar 26, 2023

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.

Fosfat

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).

Premiers échanges avec Pierre Arnaud

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.

disk

Linux avant tout

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 de fosmount 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.

Et si on revenait au problème d’interopérabilité

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).

Que fait fosdd ?

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

  1. 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 :

    boot

  2. Copie bit à bit de tous les blocs du FOS à la suite de ce nouvel en-tête.

Image disque en image .DI

  1. Suppression de l’en-tête du disque SCSI en effectuant une copie bit à bit de tous les blocs du FOS (à partir de l’adresse 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.

Résumé des commandes Fosfat

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