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