tl;dr

  • La copie des disquettes, c’est délicat. Si vous tenez à ce qui se trouve sur une disquette, confiez-la à quelqu’un qui sait faire.
  • Si vous vous lancez dans la récupération de données sur disquettes, tentez plusieurs approches, plusieurs outils logiciels et matériels, et combinez les résultats.
  • Vous avez réussi à lire presque tous les secteurs d’une disquette ? Ça ne vous garantit pas de retrouver tout ce qui s’y trouvait, surtout si des erreurs de lecture affectent les premières pistes de la disquette : des fichiers peuvent rester invisibles, et les utilitaires de récupération ne vous aideront peut-être pas.
  • La première lecture d’une disquette après une très longue période est sans doute votre meilleure chance de récupération, les lectures successives pouvant la dégrader. Donc soignez la première lecture et réalisez-la dans les meilleures conditions possibles.

Nostalgie du jeu, jeu de la nostalgie

Je me méfie de la nostalgie. Dans le pire des cas, elle est réactionnaire, et dans tous, elle repose sur un mécanisme d’idéalisation du passé. Si je m’intéresse à la rétro-informatique, ce n’est ni par regret du temps d’avant, ni par passion des vieilles machines. C’est plutôt parce que ça me permet d’accéder à des objets historiques et culturels à étudier et conserver, avec l’espoir que ça éclairera le présent (le fantasme du détective qui plonge dans le passé pour dénouer les fils d’une intrigue contemporaine, cher à Pérez-Reverte, je n’arrive pas à m’en débarrasser totalement). Mais il faut bien avouer qu’un jeu vidéo comme premier exemple de traitement d’une disquette, c’est parfait, et vous allez comprendre pourquoi bientôt.

Récemment, j’ai remis le nez dans les casiers à disquettes de mon père. Le tri, c’est pas le fort de mes parents. Le résultat, c’est que les bons souvenirs sont enfouis sous des quantités d’objets sans valeur. Ne pas trier, c’est ne pas hiérarchiser, c’est risquer de laisser se dégrader une masse indifférenciée de matériau qu’on ne traitera pas parce que cela dépasse nos capacités. Ne pas trier, c’est niveler par le bas et tout condamner à un sort équivalent. C’est déprécier. Néanmoins, si mon père avait trié, sans doute aurait-il jeté toutes ces disquettes, y compris celle dont l’étiquette portait « Jeu des saumons » et qui représentait le seul jeu vidéo auquel j’ai eu accès entre mes dix et mes douze ans. Dans la maison de mon enfance, la télé était abandonnée dans la pièce la plus inconfortable et ne diffusait que les trois premières chaînes. Les consoles de jeu étaient elles aussi frappées de suspicion. Seul ce jeu éducatif, où dans mes souvenirs il fallait aider un saumon à sauter des barrages, était admis. Mais il fallait demander à mon père de le lancer sur le 486 dont il se servait pour son travail1.

La disquette ressemble à ça – « RPS » correspond à « Rhône Poulenc Systèmes », un des seuls fabricants de disquettes en France.

Photo d'une disquette HD grise, de marque RPS, avec une étiquette qui porte les mots manuscrits "Jeu des saumons".

Premières lectures

La disquette est marquée « HD », elle était lue dans un PC IBM, donc pas de doute, la commande

gw read –format=ibm image.img

$ gw read --format=ibm image.img

devrait marcher. Et en effet, la première lecture avec un lecteur Samsung identifie 2875 secteurs sur 2880. Pas trop mal. Mais comme je veux avoir l’image la plus fidèle possible, je retente en copiant le flux brut :

$ gw read --format=ibm --raw flux00.0.raw

Malheureusement, j’ai beau augmenter le nombre de révolutions et de tentatives (options --revs et --retries, rappelez-vous), rien n’y fait. Finalement, j’obtiens un meilleur résultat avec un autre lecteur, qui est capable de lire quatre secteurs supplémentaires. Envers et contre tout, le troisième secteur de la piste 0, face 1, résiste à la lecture.

Reading c=0-79:h=0-1 revs=2
Format ibm.1440
T0.0: IBM MFM (18/18 sectors) from Raw Flux (175710 flux in 400.81ms)
T0.1: IBM MFM (17/18 sectors) from Raw Flux (180355 flux in 400.75ms)
T0.1: IBM MFM (17/18 sectors) from Raw Flux (450795 flux in 1001.59ms) (Retry #1.1)
T0.1: IBM MFM (17/18 sectors) from Raw Flux (721234 flux in 1602.45ms) (Retry #1.2)
T0.1: IBM MFM (17/18 sectors) from Raw Flux (991669 flux in 2203.32ms) (Retry #1.3)
T0.1: Giving up: 1 sectors missing
T1.0: IBM MFM (18/18 sectors) from Raw Flux (154485 flux in 400.74ms)
T1.1: IBM MFM (18/18 sectors) from Raw Flux (157254 flux in 400.73ms)
T2.0: IBM MFM (18/18 sectors) from Raw Flux (156060 flux in 400.72ms)
T2.1: IBM MFM (18/18 sectors) from Raw Flux (155939 flux in 400.70ms)
T3.0: IBM MFM (18/18 sectors) from Raw Flux (158285 flux in 400.71ms)
T3.1: IBM MFM (18/18 sectors) from Raw Flux (155851 flux in 400.68ms)
T4.0: IBM MFM (18/18 sectors) from Raw Flux (155794 flux in 400.72ms)
T4.1: IBM MFM (18/18 sectors) from Raw Flux (156719 flux in 400.73ms)
T5.0: IBM MFM (18/18 sectors) from Raw Flux (156845 flux in 400.69ms)
T5.1: IBM MFM (18/18 sectors) from Raw Flux (156055 flux in 400.71ms)
T6.0: IBM MFM (18/18 sectors) from Raw Flux (153964 flux in 400.71ms)
T6.1: IBM MFM (18/18 sectors) from Raw Flux (154730 flux in 400.70ms)
T7.0: IBM MFM (18/18 sectors) from Raw Flux (157815 flux in 400.70ms)
T7.1: IBM MFM (18/18 sectors) from Raw Flux (156302 flux in 400.70ms)
T8.0: IBM MFM (18/18 sectors) from Raw Flux (158115 flux in 400.67ms)
T8.1: IBM MFM (18/18 sectors) from Raw Flux (165544 flux in 400.69ms)
T9.0: IBM MFM (18/18 sectors) from Raw Flux (162426 flux in 400.70ms)
T9.1: IBM MFM (18/18 sectors) from Raw Flux (158360 flux in 400.71ms)
T10.0: IBM MFM (18/18 sectors) from Raw Flux (151801 flux in 400.70ms)
T10.1: IBM MFM (18/18 sectors) from Raw Flux (155721 flux in 400.72ms)
T11.0: IBM MFM (18/18 sectors) from Raw Flux (155535 flux in 400.67ms)
T11.1: IBM MFM (17/18 sectors) from Raw Flux (156853 flux in 400.66ms)
T11.1: IBM MFM (18/18 sectors) from Raw Flux (392040 flux in 1001.46ms) (Retry #1.1)
T12.0: IBM MFM (18/18 sectors) from Raw Flux (151808 flux in 400.71ms)
T12.1: IBM MFM (18/18 sectors) from Raw Flux (155459 flux in 400.70ms)
T13.0: IBM MFM (18/18 sectors) from Raw Flux (159122 flux in 400.71ms)
Unknown mark f9
T13.1: IBM MFM (18/18 sectors) from Raw Flux (160120 flux in 400.76ms)
T14.0: IBM MFM (18/18 sectors) from Raw Flux (151221 flux in 400.74ms)
Unknown mark f9
Unknown mark f9
T14.1: IBM MFM (18/18 sectors) from Raw Flux (154058 flux in 400.72ms)
T15.0: IBM MFM (18/18 sectors) from Raw Flux (155985 flux in 400.70ms)
T15.1: IBM MFM (18/18 sectors) from Raw Flux (157602 flux in 400.69ms)
T16.0: IBM MFM (18/18 sectors) from Raw Flux (162454 flux in 400.72ms)
T16.1: IBM MFM (18/18 sectors) from Raw Flux (157896 flux in 400.72ms)
T17.0: IBM MFM (18/18 sectors) from Raw Flux (157627 flux in 400.70ms)
T17.1: IBM MFM (18/18 sectors) from Raw Flux (148924 flux in 400.67ms)
T18.0: IBM MFM (18/18 sectors) from Raw Flux (149553 flux in 400.80ms)
T18.1: IBM MFM (18/18 sectors) from Raw Flux (154239 flux in 400.69ms)
T19.0: IBM MFM (18/18 sectors) from Raw Flux (158068 flux in 400.71ms)
T19.1: IBM MFM (18/18 sectors) from Raw Flux (160621 flux in 400.70ms)
T20.0: IBM MFM (18/18 sectors) from Raw Flux (157313 flux in 400.71ms)
T20.1: IBM MFM (18/18 sectors) from Raw Flux (158005 flux in 400.72ms)
T21.0: IBM MFM (18/18 sectors) from Raw Flux (155220 flux in 400.76ms)
T21.1: IBM MFM (18/18 sectors) from Raw Flux (154798 flux in 400.76ms)
T22.0: IBM MFM (18/18 sectors) from Raw Flux (152187 flux in 400.73ms)
T22.1: IBM MFM (18/18 sectors) from Raw Flux (151531 flux in 400.72ms)
T23.0: IBM MFM (18/18 sectors) from Raw Flux (158074 flux in 400.60ms)
T23.1: IBM MFM (18/18 sectors) from Raw Flux (153697 flux in 400.66ms)
T24.0: IBM MFM (18/18 sectors) from Raw Flux (154427 flux in 400.70ms)
T24.1: IBM MFM (18/18 sectors) from Raw Flux (159073 flux in 400.69ms)
T25.0: IBM MFM (18/18 sectors) from Raw Flux (157378 flux in 400.71ms)
T25.1: IBM MFM (18/18 sectors) from Raw Flux (156843 flux in 400.68ms)
T26.0: IBM MFM (18/18 sectors) from Raw Flux (155989 flux in 400.68ms)
T26.1: IBM MFM (18/18 sectors) from Raw Flux (155281 flux in 400.69ms)
T27.0: IBM MFM (18/18 sectors) from Raw Flux (155243 flux in 400.73ms)
T27.1: IBM MFM (18/18 sectors) from Raw Flux (151176 flux in 400.67ms)
T28.0: IBM MFM (18/18 sectors) from Raw Flux (157788 flux in 400.77ms)
T28.1: IBM MFM (18/18 sectors) from Raw Flux (154552 flux in 400.68ms)
T29.0: IBM MFM (18/18 sectors) from Raw Flux (158375 flux in 400.71ms)
T29.1: IBM MFM (18/18 sectors) from Raw Flux (154303 flux in 400.71ms)
T30.0: IBM MFM (18/18 sectors) from Raw Flux (159428 flux in 400.66ms)
T30.1: IBM MFM (18/18 sectors) from Raw Flux (157957 flux in 400.67ms)
T31.0: IBM MFM (18/18 sectors) from Raw Flux (151289 flux in 400.69ms)
T31.1: IBM MFM (18/18 sectors) from Raw Flux (153134 flux in 400.71ms)
T32.0: IBM MFM (18/18 sectors) from Raw Flux (152819 flux in 400.70ms)
T32.1: IBM MFM (18/18 sectors) from Raw Flux (152173 flux in 400.70ms)
T33.0: IBM MFM (18/18 sectors) from Raw Flux (152175 flux in 400.75ms)
T33.1: IBM MFM (18/18 sectors) from Raw Flux (152143 flux in 400.70ms)
T34.0: IBM MFM (18/18 sectors) from Raw Flux (152182 flux in 400.75ms)
T34.1: IBM MFM (18/18 sectors) from Raw Flux (152134 flux in 400.68ms)
T35.0: IBM MFM (18/18 sectors) from Raw Flux (152182 flux in 400.73ms)
T35.1: IBM MFM (18/18 sectors) from Raw Flux (152141 flux in 400.67ms)
T36.0: IBM MFM (18/18 sectors) from Raw Flux (152180 flux in 400.68ms)
T36.1: IBM MFM (18/18 sectors) from Raw Flux (152140 flux in 400.70ms)
T37.0: IBM MFM (18/18 sectors) from Raw Flux (152145 flux in 400.74ms)
T37.1: IBM MFM (18/18 sectors) from Raw Flux (152107 flux in 400.72ms)
T38.0: IBM MFM (18/18 sectors) from Raw Flux (152176 flux in 400.73ms)
T38.1: IBM MFM (18/18 sectors) from Raw Flux (152137 flux in 400.71ms)
T39.0: IBM MFM (18/18 sectors) from Raw Flux (152178 flux in 400.70ms)
T39.1: IBM MFM (18/18 sectors) from Raw Flux (152139 flux in 400.68ms)
T40.0: IBM MFM (18/18 sectors) from Raw Flux (152172 flux in 400.68ms)
T40.1: IBM MFM (18/18 sectors) from Raw Flux (152143 flux in 400.67ms)
T41.0: IBM MFM (18/18 sectors) from Raw Flux (152135 flux in 400.70ms)
T41.1: IBM MFM (18/18 sectors) from Raw Flux (152105 flux in 400.72ms)
T42.0: IBM MFM (18/18 sectors) from Raw Flux (152125 flux in 400.71ms)
T42.1: IBM MFM (18/18 sectors) from Raw Flux (152097 flux in 400.68ms)
T43.0: IBM MFM (18/18 sectors) from Raw Flux (152136 flux in 400.70ms)
T43.1: IBM MFM (18/18 sectors) from Raw Flux (152096 flux in 400.71ms)
T44.0: IBM MFM (18/18 sectors) from Raw Flux (152186 flux in 400.73ms)
T44.1: IBM MFM (18/18 sectors) from Raw Flux (152128 flux in 400.71ms)
T45.0: IBM MFM (18/18 sectors) from Raw Flux (152134 flux in 400.73ms)
T45.1: IBM MFM (18/18 sectors) from Raw Flux (152101 flux in 400.69ms)
T46.0: IBM MFM (18/18 sectors) from Raw Flux (152185 flux in 400.75ms)
T46.1: IBM MFM (18/18 sectors) from Raw Flux (152139 flux in 400.68ms)
T47.0: IBM MFM (18/18 sectors) from Raw Flux (152180 flux in 400.73ms)
T47.1: IBM MFM (18/18 sectors) from Raw Flux (152141 flux in 400.72ms)
T48.0: IBM MFM (18/18 sectors) from Raw Flux (152222 flux in 400.75ms)
T48.1: IBM MFM (18/18 sectors) from Raw Flux (152175 flux in 400.74ms)
T49.0: IBM MFM (18/18 sectors) from Raw Flux (152177 flux in 400.76ms)
T49.1: IBM MFM (18/18 sectors) from Raw Flux (152144 flux in 400.71ms)
T50.0: IBM MFM (18/18 sectors) from Raw Flux (152178 flux in 400.67ms)
T50.1: IBM MFM (18/18 sectors) from Raw Flux (152133 flux in 400.69ms)
T51.0: IBM MFM (18/18 sectors) from Raw Flux (152175 flux in 400.70ms)
T51.1: IBM MFM (18/18 sectors) from Raw Flux (152139 flux in 400.72ms)
T52.0: IBM MFM (18/18 sectors) from Raw Flux (152178 flux in 400.67ms)
T52.1: IBM MFM (18/18 sectors) from Raw Flux (152139 flux in 400.71ms)
T53.0: IBM MFM (18/18 sectors) from Raw Flux (152139 flux in 400.71ms)
T53.1: IBM MFM (18/18 sectors) from Raw Flux (152105 flux in 400.70ms)
T54.0: IBM MFM (18/18 sectors) from Raw Flux (152177 flux in 400.73ms)
T54.1: IBM MFM (18/18 sectors) from Raw Flux (152141 flux in 400.73ms)
T55.0: IBM MFM (18/18 sectors) from Raw Flux (152172 flux in 400.69ms)
T55.1: IBM MFM (18/18 sectors) from Raw Flux (152145 flux in 400.70ms)
T56.0: IBM MFM (18/18 sectors) from Raw Flux (152209 flux in 400.74ms)
T56.1: IBM MFM (18/18 sectors) from Raw Flux (152174 flux in 400.72ms)
T57.0: IBM MFM (18/18 sectors) from Raw Flux (152170 flux in 400.72ms)
T57.1: IBM MFM (18/18 sectors) from Raw Flux (152135 flux in 400.67ms)
T58.0: IBM MFM (18/18 sectors) from Raw Flux (152175 flux in 400.73ms)
T58.1: IBM MFM (18/18 sectors) from Raw Flux (152135 flux in 400.70ms)
T59.0: IBM MFM (18/18 sectors) from Raw Flux (152174 flux in 400.74ms)
T59.1: IBM MFM (18/18 sectors) from Raw Flux (152135 flux in 400.68ms)
T60.0: IBM MFM (18/18 sectors) from Raw Flux (152215 flux in 400.69ms)
T60.1: IBM MFM (18/18 sectors) from Raw Flux (152185 flux in 400.70ms)
T61.0: IBM MFM (18/18 sectors) from Raw Flux (152177 flux in 400.69ms)
T61.1: IBM MFM (18/18 sectors) from Raw Flux (152149 flux in 400.69ms)
T62.0: IBM MFM (18/18 sectors) from Raw Flux (152227 flux in 400.74ms)
T62.1: IBM MFM (18/18 sectors) from Raw Flux (152188 flux in 400.73ms)
T63.0: IBM MFM (18/18 sectors) from Raw Flux (152210 flux in 400.76ms)
T63.1: IBM MFM (18/18 sectors) from Raw Flux (152173 flux in 400.69ms)
T64.0: IBM MFM (18/18 sectors) from Raw Flux (152206 flux in 400.72ms)
T64.1: IBM MFM (18/18 sectors) from Raw Flux (152174 flux in 400.71ms)
T65.0: IBM MFM (18/18 sectors) from Raw Flux (152173 flux in 400.74ms)
T65.1: IBM MFM (18/18 sectors) from Raw Flux (152131 flux in 400.73ms)
T66.0: IBM MFM (18/18 sectors) from Raw Flux (152177 flux in 400.74ms)
T66.1: IBM MFM (18/18 sectors) from Raw Flux (152138 flux in 400.73ms)
T67.0: IBM MFM (18/18 sectors) from Raw Flux (152172 flux in 400.72ms)
T67.1: IBM MFM (18/18 sectors) from Raw Flux (152139 flux in 400.67ms)
T68.0: IBM MFM (18/18 sectors) from Raw Flux (152176 flux in 400.75ms)
T68.1: IBM MFM (18/18 sectors) from Raw Flux (152143 flux in 400.72ms)
T69.0: IBM MFM (18/18 sectors) from Raw Flux (152143 flux in 400.73ms)
T69.1: IBM MFM (18/18 sectors) from Raw Flux (152102 flux in 400.70ms)
T70.0: IBM MFM (18/18 sectors) from Raw Flux (152170 flux in 400.80ms)
T70.1: IBM MFM (18/18 sectors) from Raw Flux (152141 flux in 400.70ms)
T71.0: IBM MFM (18/18 sectors) from Raw Flux (152171 flux in 400.71ms)
T71.1: IBM MFM (18/18 sectors) from Raw Flux (152136 flux in 400.73ms)
T72.0: IBM MFM (18/18 sectors) from Raw Flux (152177 flux in 400.75ms)
T72.1: IBM MFM (18/18 sectors) from Raw Flux (152144 flux in 400.73ms)
T73.0: IBM MFM (18/18 sectors) from Raw Flux (152144 flux in 400.73ms)
T73.1: IBM MFM (18/18 sectors) from Raw Flux (152103 flux in 400.72ms)
T74.0: IBM MFM (18/18 sectors) from Raw Flux (152140 flux in 400.78ms)
T74.1: IBM MFM (18/18 sectors) from Raw Flux (152100 flux in 400.72ms)
T75.0: IBM MFM (18/18 sectors) from Raw Flux (152135 flux in 400.76ms)
T75.1: IBM MFM (18/18 sectors) from Raw Flux (152110 flux in 400.66ms)
T76.0: IBM MFM (18/18 sectors) from Raw Flux (152180 flux in 400.76ms)
T76.1: IBM MFM (18/18 sectors) from Raw Flux (152137 flux in 400.71ms)
T77.0: IBM MFM (18/18 sectors) from Raw Flux (152137 flux in 400.80ms)
T77.1: IBM MFM (18/18 sectors) from Raw Flux (152106 flux in 400.74ms)
T78.0: IBM MFM (18/18 sectors) from Raw Flux (152177 flux in 400.76ms)
T78.1: IBM MFM (18/18 sectors) from Raw Flux (152144 flux in 400.71ms)
T79.0: IBM MFM (18/18 sectors) from Raw Flux (152195 flux in 400.82ms)
T79.1: IBM MFM (18/18 sectors) from Raw Flux (152140 flux in 400.70ms)
Cyl-> 0         1         2         3         4         5         6         7         
H. S: 01234567890123456789012345678901234567890123456789012345678901234567890123456789
0. 0: ................................................................................
0. 1: ................................................................................
0. 2: ................................................................................
0. 3: ................................................................................
0. 4: ................................................................................
0. 5: ................................................................................
0. 6: ................................................................................
0. 7: ................................................................................
0. 8: ................................................................................
0. 9: ................................................................................
0.10: ................................................................................
0.11: ................................................................................
0.12: ................................................................................
0.13: ................................................................................
0.14: ................................................................................
0.15: ................................................................................
0.16: ................................................................................
0.17: ................................................................................
1. 0: ................................................................................
1. 1: ................................................................................
1. 2: X...............................................................................
1. 3: ................................................................................
1. 4: ................................................................................
1. 5: ................................................................................
1. 6: ................................................................................
1. 7: ................................................................................
1. 8: ................................................................................
1. 9: ................................................................................
1.10: ................................................................................
1.11: ................................................................................
1.12: ................................................................................
1.13: ................................................................................
1.14: ................................................................................
1.15: ................................................................................
1.16: ................................................................................
1.17: ................................................................................
Found 2879 sectors of 2880 (99%)

Je charge ce flux dans HxC et obtiens la visualisation suivante (« Track Analyzer », comme décrit dans le billet précédent) :

Capture d'écran d'une visualisation des pistes et secteurs de la disquette du jeu L'aventure du saumon. Tous les secteurs sont verts (correctement lus), sauf le troisième secteur de la première piste, face 1, ainsi que quelques secteurs supplémentaires, en rouge.

Et voici la question pour les personnes très calées dans ce domaine : si le seul secteur mal lu est le troisième secteur de la piste 0, face 1 (on le voit sur la piste la plus distante du centre), pourquoi est-ce que plusieurs secteurs semblent problématiques aussi, sur d’autres pistes ?

Je monte quand même cette image, on va voir ce que ça donne :

Capture d'une fenêtre de l'explorateur de fichiers. On y voit trente-deux fichiers, datés d'octobre 1989 à août 1990. Les extensions sont variées : .mok, .hit, .smp, .dec, etc.

Trente-deux fichiers lisibles !

Le fichier lisez-moi

Parmi ces fichiers, il y a un LISEZ.MOI que Linux identifie comme un fichier textuel. Si on l’ouvre tel quel :

Capture d'une fenêtre d'éditeur de texte, où on voit un texte fait pour être affiché dans un terminal. L'ASCII art, qui devait afficher "SALMO", est tout décalé. Dans le texte, les caractères spécifiques au français sont remplacés par un petit carré dans lequel on voit le code hexadécimal du caractère.

Outre que l’ASCII art du titre est décalé, il y a quelques problèmes d’encodage de caractères. C’est assez facile de convertir le texte en UTF-8 avec l’utilitaire iconv – encore faut-il savoir dans quel encodage il a été créé. Une petite recherche dans un moteur de recherche nous indique que c’est probablement la page de code 863 (aka « cp863 »). Voici donc la ligne de commande :

$ iconv LISEZ.MOI -f cp863 -t UTF8 > LISEZ.MOI-utf8

Et voici le résultat :

---------------------------------------------------------------------
I								    I
I	 *******     *****     **	 **    **     *****	    I
I	****	    *	  *    **	 ***  ***    **   **	    I
I	***	    *	  *    **	 ********    **   **	    I
I	 ****	    *******    **	 ** ** **    **   **	    I
I	   ***	    *******    **	 **    **    **   **	    I
I	    ***		       **	 **    **    **   **	    I
I	     ***    **	 **    **	 **    **    **   **	    I
I	    ****    **	 **    **	 **    **    **   **	    I
I	*******     **	 **    *******	 **    **     *****	    I
I								    I
---------------------------------------------------------------------

			   'L'aventure du saumon' 

		      pour IBM PC et compatibles
				 V 1.0
		       (c) Myriad+EDF+CSP Juillet 1990
		       --------------------------

"...Au XVIIIème siècle, les Gens de Maison refusaient qu'on leur serve
du saumon plus de trois fois par semaine.
Le moulin du Bazacle à Toulouse subit une grève au XVIème car les
ouvriers en avaient assez de manger du saumon...' 

De nos jours .... où sont passés les saumons ?


- Mais vous voulez peut-être jouer tout de suite :
-------------------------------------------------
Aucun problème, sous  MSDOS, tapez SALMO suivi de  'Entrée'. Mais nous
vous conseillons  tout de même de  revenir tout à l'heure,lire  ce qui
suit.

- Introduction
--------------
'SALMO'  a  été  développé  par  la  société  MYRIAD,  sur une demande
d'Electricité  de  France  et  du  Conseil  Supérieur  de la Pêche. Ce
logiciel va  vous présenter par  l'intermédiaire de jeux,  des données
scientifiques  très sérieuses,	rassemblées par  les spécialistes  des
poissons  Migrateur d'EDF,  du Conseil   Supérieur de  la Pêche  et du
CEMAGREF.

En effet depuis plusieurs années, le problème de l'eau devient de plus
en  plus  crucial.  Des  études   ont  été  faites  sur  les  poissons
migrateurs, et plus particulièrement  les Salmonidés qui sont l'indice
de bonne  santé d'une rivière.  Les spécialistes se  sont rendu compte
que  beaucoup de  rivières, autrefois  riches en  saumon, ont perdu la
totalité de leur population à cause d'obstacles artificiels peu ou mal
aménagés, de  pollutions et autres causes  qui seront développées dans
le logiciel.

Pour  réintroduire  et	préserver  le  saumon,	il  a  été  nécessaire
d'approfondir  nos  connaissances  sur  cette  espèce.  L'étude  de sa
biologie a  permis de préciser les exigences du  saumon en matière  de
qualité  d'habitat  et  de  définir  ses  capacités  de déplacement en
fonction de la température et de la vitesse du courant.

On a ainsi put construire des  passes à poisson efficaces et fixer des
quotas de capture destinés à préserver les populations.

Ce logiciel va vous initier à la biologie des poissons migrateurs, que
ce soit des salmonidés comme la  truite ou le saumon, ou d'autres tels
l'esturgeon, l'alose,  la lamproie ou  l'anguille. Puis pour  que vous
compreniez bien  les problèmes qui  se posent à  notre ami le  saumon,
pendant  quelques  temps,  la  fée  informatique  vous transformera en
saumon	et  VOUS  devrez  lutter  pour	remonter jusqu'aux frayères au
mépris des obstacles  et des dangers, des crues  de Printemps qui vous
repousseront sans pitié, des  sècheresse d'Août qui vous asphyxieront,
des obstacles qui vous bloqueront la voie.


Dans  une deuxième  étape, vous  prendrez la  place d'un  gestionnaire
et  devrez  aménager   une  rivière,  obstacle par obstacle,  à l'aide
des (maigres) crédits qui vous seront alloués.

Attention, à aucun moment l'information ne vous sera assénée! Ce n'est
pas la T.V. ici ! Apprenez à aller pêcher (!!!) l'information.

- J'ai envie de copier le logiciel pour le donner à un ami
----------------------------------------------------------
Ce logiciel repond au principe impératif :

		     COPIE LIBRE, VENTE INTERDITE.

Ce logiciel est en libre copie. Ceci veut dire	que vous avez le droit
de le copier et de le donner autour de vous. Mais attention :

	      IL EST STRICTEMENT INTERDIT DE MODIFIER OU
		    DE REVENDRE CE LOGICIEL !!!.

Que ce soit sous forme de compil' de "freeware", de téléchargement, et
autres procédés assimilés.

Si  vous disposez  de ce  logiciel  par  une copie  libre et  que vous
désirez en avoir  un exemplaire complet, vous pouvez  vous le procurer
en  envoyant un  chèque de  95 F  à MYRIAD,  4 rue  de Bordeaux  31200
Toulouse. Vous	recevrez alors le logiciel  avec son emballage complet
et surtout sa notice, très complète, bourrée de renseignements sur les
astuces de jeu et la biologie des poissons migrateurs.

N'oubliez  pas  de  recopier  la  totalité  des  fichiers  pour que le
logiciel fonctionne correctement.
Pour  être sûr	de ne	pas faire  d'erreur, introduisez  la disquette
originale dans le lecteur A:,  une disquette formatée (commande FORMAT
du MS-DOS) dans le lecteur B: et tapez

			COPY A:*.* B:

De la même  manière vous pouvez recopier le  logiciel sur votre disque
dur.

Les fichiers que vous devez avoir sur votre disque sont :

 salmo.exe    |> L'exécutable.The master. Indispensable.

 showpage.exe |> Affiche la page graphique de présentation
 salmo.vga    |> Les données de la page graphique

 myriad.cfg   |> Fichier de configuration
 icones.mok   |> Graphismes systèmes (souris, boutons...)

 helvet10.FNK |
 helvet18.FNK |> Fontes de caractères utilisées

 salgen.mok   |> Graphisme du générique
 salgen.dec   |> Pages du générique
 salmo.txt    |> Textes (ne surtout pas modifier).
 saudid.dec   |> Pages didactiques créées par MYDAC
 sauergo.dec  |> Pages expliquant l'ergonomie
 passes.dec   |> Pages montrant les passes à poissons
 bief.dat     |> Semences des biefs

 saudid1.mvo  \
 saudid2.mvo  |
 sauwin.mvo   |> Langage objet de description des animations
 cascade.mvo  |  utilisé dans les pages didactiques.
	      /

 saudid1.mok  \
 saudid2.mok  |
 saudid3.mok  |
 saumax.mok   |
 saugros.mok  |
 salgag.mok   |
 salgest.mok  |
 babas.mok    |
 sauwin.mok   |
 saumon.mok   |
 decrem.mok   |> Graphismes compressés.
 mouche.mok   |
 fondrem.mok  |
 rdpoubel.mok |
 rdpoteau.mok |
 rdpierre.mok |
 rdblocks.mok |
 sautmon.mok  |
 cascdec1.mok |
 cascdec2.mok |
 cascade.mok  |
 passes.mok   |
 ouvrage.mok  /

 salbong.smp  \
 salaqua.smp  |
 salplouf.smp |> Bruitages digitalisés
 salvan.smp   |
	      /
 salmo.hit    |> The Hall of Fame


- Quelles sont les options de configuration
-------------------------------------------
Lorsque vous lancez le programme salmo, vous pouvez taper derrière le
nom une ou plusieurs options d'appel. Une option commence toujours par
un '-'. Les différentes options sont :

	-AIDE |
	-HELP |> Affiche la liste des options disponibles.
	-H    |

Pour fixer la carte graphique

	-CGA force le graphisme en CGA, très utile si vous avez un AT
	  lent avec carte EGA et que vous désiriez jouer en CGA pour
	  aller plus vite. De même si vous êtes sur d'avoir une carte
	  CGA et que SALMO ne la reconnaisse pas.

	-EGA pour forcer le graphisme en EGA.

	-VGA pour forcer le graphisme en mode VGA 256 couleurs.

	-HER  pour  forcer  le	graphisme  en  Hercules. De nombreuses
	cartes	 multifonctions,   une	  fois	 en   Hercules,   sont
	indiscernables	d'une  carte  EGA  (RAM  en  A000,  ports  EGA
	toujours valides)

Pour fixer le périphérique de commande

       -PDS pour ignorer la souris et jouer au clavier ou au joystick.
       Le joystick reconnu est le joystick standard. La fonction
       utilisée est la fonction 84h de l'int 15h
	=> AH = 084h
	   DX = 1
	<= Carry = 1 pas de joystick
	   Carry = 0
			AX Pos X Joy 1
			BX Pos Y Joy 1
	Si le  joystick ne fonctionne pas,  vérifier sa connection. Si
	les symptômes persistent consultez votre SAV.

       -JOY pour ignorer la souris et jouer au joystick.

       -SENSIB nnn règle la sensibilité souris/joystick n de 1 à 100
	       en standard la valeur est 68.

       -NONSTD Pour pouvoir tester deux touches en même temps, le
	vecteur clavier 16h est détourné et géré comme un clavier
	standard, en cas de problème (clavier non standard) utilisez
	cette option pour empécher le détournement.


       -NO18  Pour synchroniser les évènements, on utilise la case
	       40h:6ch qui contient sur un PC la valeur de l'horloge.
	       Si votre 'PC' ne respecte pas ceci, utilisez cette
	       option.

	-NOTE Cette option fait un petit check de votre PC et donne une
	note. Cette note sera légèrement différente de celle optenue
	par PC-TOOLS car nous tenons compte de la vitesse de la RAM
	vidéo. Par exemple : aque sur ma bécane à moi, qu'es pas une
	Harley mais une Hachepé aque j'ai :

		Note du compatible par rapport à un Pc 4 MHz 1094
		Processeur : 80286-80386
		Mémoire Ram disponible :386674 octets.
		Mémoire étendue 1024 Ko

	La note est un pourcentage. En fonction de ce chiffre magique, voici
	les prédictions de Madame Galaxie:

	Si vous  êtes >= 640% Ok  c'est bon si c'est  un AT;par contre
	bofbofbof  si c'est  un 386  ....

	Si vous  êtes < 300%  pas la peine  d'essayer le mode  EGA.

	Si vous êtes  < 200%,  Dur dur pour salmo. Par contre, le
	clavier  fait  un  excellent  paillasson  quand  on  rentre du
	jardin...

	-FNOTE nnnn Etant donné que certaines générations de décor se font
	en fonction de la vitesse processeur, (si vous voulez avoir plus
	de pierres dans le bief par exemple) vous pouvez forcer la note de
	votre compatible. Mais c'est un peu comme si vous rajoutiez un zéro
	au feutre à chacun des chiffres du tachymètre de votre deudeuche.

	-MEM nnn supprime nnn Ko de la mémoire libre. A réserver aux masos.

	-TOTAL Charge le maximum de fichiers en mémoire dès le départ. Ceci
	réduit les accès disques durant le déroulement du jeu et les regroupe
	au début.

	-VOLUME xxx Fixe le volume sonore. 0 = Silence !
	 A notre connaissance, c'est la première fois que l'on dispose
		d'un volume SOFT sur PC. Merci qui ? Merci MYRIAD.

	-MACRO xxx Initialisation du tampon clavier avec xxx. Exemple:
		   salmo -macro eeee va lancer salmo et tout de suite
		   passer aux pages didactiques.

	-NOXTMEM Empêche le test et l'utilisation de la mémoire étendue si
	celle-ci est réservée à un autre usage.

	-NOPAGE Supprime le chargement de la page graphique de présentation.


-Oui mais moi,
	j'ai un SXPC Taïwan 512 Ko avec souris parallèle et carte Hercules
--------------------------------------------------------------------------

Pas de problème, la plupart des  cartes sont reconnues par le logiciel:

		Carte Hercules,
		Carte CGA,
		Carte EGA,
		Carte VGA.


Les  modes Hercules  et CGA  nécessitent  au  moins 512  Ko de	mémoire
centrale, les cartes EGA et VGA au moins 640 Ko. En mode VGA on utilise
le  mode compatible  EGA, donc	tout ce  passe comme  si l'on avait une
carte  EGA. Pour  jouer en  CGA bien  que l'on  dispose d'une carte EGA
taper

			SALMO -CGA

Pour  les souris,  il est  nécessaire de  les installer  auparavant. En
général, est livré  avec la souris un petit  programme appelé MOUSE.COM
qu'il suffit d'exécuter une fois pour pouvoir user du redoutable petit
animal.

Si vous voulez jouer au clavier alors qu'une souris est installée, tapez

			SALMO -PDS

où PDS indique Pas De Souris.  Ceci peut être également utile si votre
ordinateur est	peu compatible au  niveau de l'interruption  33H de la
souris,  en particulier  les Olivetti,	Logabax et  autres Hermès  qui
'plantent' si une souris n'est pas installée et qu'on la teste ...



Si  un	problème  de  place  mémoire  est  rencontré  en mode EGA ( en
particulier sur PS ) il est nécessaire de démarrer le système à partir
d'une  disquette  MS-DOS  d'origine  pour  qu'aucun  logiciel  ne soit
présent en mémoire. Puis taper


			SALMO -EGA.

Le logiciel reconnait et gère la mémoire étendue VRAIE (non paginé,
adresse >100000H).

- Oui mais j'ai encore un problème sur mon XYM PC, pourtant
réputé compatible 120 % par Monsieur le Marchand d'Ordinateur
-------------------------------------------------------------
Ecrivez-nous en décrivant: La marque et le modèle de votre ordinateur,
le type de carte graphique, le type de souris, la version de MS-DOS
utilisée, la version du driver souris utilisé, le contenu de votre
AUTOEXEC.BAT et CONFIG.SYS.

				 MYRIAD
			 Service des Coeurs Brisés
			    4, rue de Bordeaux
			     31200 TOULOUSE

Des conseils adaptés ou une version spéciale vous seront adressés au
plus vite.


- Oui mais, moi j'ai un Amiga...
------------------------------
SALMO fonctionne sur PC, Atari ST et Macintosh. Pour l'instant
l'adaptation sur des machines telles que l'Amiga n'est
pas envisagée, vu la pauvreté des demandes. Mais écrivez-nous pour
prouver que vous êtes motivés et on se décidera peut-être...

- Comment est-ce fait ?
-----------------------
A 90 % en langage C. Le reste en assembleur. Les objets graphiques
sont dessinés sous EDIMOB sur ATARI ST. Les pages didactiques
sont créées à l'aide d'un éditeur de pages: MYDAC sur PC en utilisant
les objets. Les animations sont décrites dans un langage objet : KP.

- Et la page de présentation ?
------------------------------
Elle a été calculée sur IBM PC, grâce au programme TRACE, réalisé par
MYRIAD. La technique employée est le RAY-TRACING (lancer de rayon).

L'univers à  représenter est défini  en trois  dimensions sous  forme
mathématique : le corps du saumon, par	exemple, est  constitué d'une
cinquantaine  de  sphères semi-réfléchissantes.  Une  fois  l'univers
entièrement  décrit  (position des sources de  lumière et des  divers
autres	objets), le  programme trace  point par  point	l'image telle
qu'elle serait vue d'un endroit de l'espace donné.
La page de  présentation a été calculée en 1280 x 800  points, chaque
point  prenant une couleur choisie dans une palette de 16 millions de
teintes.
Le calcul a duré 9 heures. La page a ensuite été  traitée afin d'être
affichée au mieux sur l'adaptateur graphique utilisé.


- Y a-t'il d'autres softs signés MYRIAD ?
-----------------------------------------
La société  MYRIAD regroupe dans ses  rangs des auteurs de  jeux vidéo
qui  appliquent aux  logiciels	didactiques  les mêmes	principes qu'à
leurs autres créations : originalité des concepts, rapidité du code.

MYRIAD développe des applications dans tous les domaines graphiques et
sonores  que ce  soit les  jeux vidéo,	les logiciels didactiques, les
panneaux publicitaires géants animés ou l'imagerie médicale.


Quelques créations MYRIAD :

'La vie du lac' traite des problèmes de pollution des lacs. Comme
salmo il se divise en deux parties: une partie didactique décrivant le
plancton,   les  problèmes   d'eutrophisation  ...   puis  une  partie
manipulation où  l'on suit l'évolution	écologique du lac  au cours du
temps et en fonction des degrés de pollution.
Ce logiciel réalisé et édité par MYRIAD est distribué par :
EDF, Mission Environnement,26 rue de la Baume 75008 Paris.

'Scithy' : Logiciel de saisie, de stockage et de traitement d'images
obtenues à  partir d'un scintigraphe (appareil  mesurant de façon très
fine (précision 1mm²) la quantité de  radio-activité fixée par une glande
(par ex thyroïde)  après injection d'iode radioactif). L'appareil balaye
la zone, ce qui permet de constituer une image.

'Fario' traite de la vie des truites de rivière et des problèmes des
débits réservés.



A bientôt.






				MYRIAD
			  4,rue de Bordeaux
			    31200 Toulouse
			   (16) 61-47-23-40



			    Les auteurs
			    -----------

	  Didier Guillion : graphismes, programmation en C.

	       Olivier Guillion et Jean-Michel	Georges :
		    programmation en assembleur










			Partie Scientifique
			-------------------
			François TRAVADE
		    d'Electricité de France

		      Jean-Pierre PORCHER
		  du Conseil Supérieur de la Pêche

			 Michel LARINIER
			  du CEMAGREF







---------------------- Fin du lisez.moi --------------------------

On apprend pas mal de choses dans ce fichier :

  • Le nom officiel du jeu (« L’aventure du saumon »),
  • Les créateurs (Didier et Olivier Guillion et Jean-Michel Georges, sur le conseil scientifique de François Travade, Jean-Pierre Porcher et Michel Larinier),
  • La société (Myriad, toujours active en 2026 d’ailleurs),
  • Les commanditaires (EDF et le Conseil Supérieur de la Pêche),
  • La date (juillet 1990) et la version (1.0),
  • L’environnement (« IBM PC et compatibles »),
  • Les conditions d’utilisations (l’équivalent d’une licence CC-BY-NC-ND aujourd’hui).

On appréciera (ou pas, les goûts et les couleurs) le ton un peu potache et la référence à Johnny, mais surtout, on notera une sorte de « manifeste » qui liste les fichiers nécessaires au jeu. Et là, patatras : il y en a quarante-six. Bien plus que les trente-deux obtenus quand j’ai monté l’image…

Lancer l’émulateur DOS

J’essaie quand même de voir ce que ça donne en lançant un émulateur DOS. Ça, c’est très facile : il suffit d’installer DOSBox ou son extension, DOSBox-X (c’est ce dernier que j’utilise). Ensuite, il faut “monter” le dossier où se trouvent les fichiers du jeu (l’aide affichée au lancement explique ça) et enfin lancer l’exécutable (SALMO.EXE) en tapant simplement son nom (comme le fichier LISEZ.MOI l’indiquait):

Capture d'écran d'une invite de commande DOS. La partie supérieure est sur fond bleu, et constitue l'aide du logiciel d'émulation DOSBox-X. En bas, les lignes de commande suivantes sont affichées :
Z:\> mount B /home/bertrand/salmo
Drive B is mounted as local directory /home/bertrand/salmo
Z:\> B:
B:\> salmo
!!!!!!! Erreur dans SHOWPAGE.EXE !!!!!!!!
Je ne trouve pas le fichier image (SALMO.VGA)
Appuyez sur une touche pour poursuivre...

Un avertissement assez précis s’affiche donc, puis le jeu se lance. Malheureusement, peu après le lancement, nouveau message d’erreur :

Capture de la fenêtre de l'émulateur DOSBox-X. Sur fond noir, en encart bleu contient le message "Il me manque le fichier : FONDREM.MOK Veuillez changer de disquette S.V.P."

Note : ce cas – celui d’un jeu vidéo, qui comporte donc plusieurs fichiers interdépendants, et présente l’immense qualité d’être très explicite dans ses messages d’erreur – est vraiment parfait pour illustrer les risque d’une copie mal faite !

A la pêche aux fichiers perdus

Il me manque donc (au moins) quatorze fichiers. Que faire ? Tout ça est quand même étrange : quatorze fichiers, sur un seul secteur de 512 octets ? Pas possible. La disquette ne semble pas si abîmée que ça, puisque le lecteur a pu lire presque tous les secteurs. Ou alors ma disquette serait une copie incomplète ? C’est possible, mais je me souvenais avoir joué avec, donc elle devait être complète à l’époque. Non, l’explication la plus probable, c’est que, comme la table d’allocation des fichiers se trouve sur les premières pistes, c’est précisément le secteur où se trouve l’adresse de ces fichiers qui est manquant. Les fichiers sont là, mais leur adresse n’y est plus et donc le système ne les trouve pas.

En théorie, j’imagine que des utilitaires comme testdisk et photorec (déjà mentionnés dans ces billets) pourraient retrouver ces fichiers. C’est pourtant un échec, et c’est sans doute dû au fait que photorec s’appuie sur un registre de signatures de format (ou magic numbers) limité, qui ne comprend pas le format des fichiers du jeu2.

Je me suis alors souvenu que j’avais tenté une première lecture avec mon lecteur USB externe, lorsque j’étais chez mes parents, sans mon équipement complet. A vrai dire, je ne sais plus si j’avais fait une copie logique ou une image disque avec l’utilitaire dc3dd (voir ce billet pour la ligne de commande exacte). Je remets le nez dans cette copie, et j’y trouve seize fichiers supplémentaires, que je peux ajouter aux trente-deux lus précédemment3 !

Le phénomène que je ne m’explique pas, c’est qu’en faisant la même opération avec le même lecteur et la même commande, mais après quelques semaines et quelques lectures avec la greaseweazle, j’obtiens les mêmes trente-deux fichiers qu’avec la greaseweazle. Est-il possible que les lectures successives aient altéré la disquette ? C’est mon hypothèse principale actuellement, donc comme je l’ai dit en tête du billet : la première lecture est peut-être la dernière, ne la bâclez pas.

Et enfin : trente ans après, jouer au jeu !

Avec les quarante-huit fichiers, ça marche beaucoup mieux ! Bon, il reste apparemment quelques messages d’erreur, et le joli écran de lancement est complètement barré de noir, mais ça reste jouable. Je vous mets une petite vidéo ?

Le truc étrange, c’est que le jeu est connu, en ligne, pour être un jeu Atari (il est mentionné dans la liste de jeux Atari ST publiée sur Wikipedia). Pourtant, le fichier LISEZ.MOI précise clairement qu’il s’agit d’un jeu « pour IBM PC et compatibles ». Quelqu’un de plus compétent que moi sur ce sujet pour m’éclairer là-dessus ?

Si vous avez envie, le site Planet Emulation propose ici une ROM de la disquette Atari. Je l’ai testé, et il fonctionne très bien avec l’émulateur Hatari – bon, les contrôles sont à se tirer une balle, mais à part ce détail… Même les temps de chargement sont respectés, ce qui est aussi chiant que la réalité d’origine.

Conclusion

Les leçons de cette expérience, je les ai mises en tête de cet article, je n’ai donc pas besoin d’y revenir. De mon côté, j’ai pris beaucoup de plaisir à farfouiller dans les entrailles de ce jeu. Bien sûr, avec des compétences complémentaires (en C, le langage de programmation du jeu, ou sur le système de fichiers de la disquette, FAT12), j’aurais sans doute pu aller plus loin. Si vous savez comment faire mieux, surtout n’hésitez pas à me suggérer des approches alternatives en commentaire !

Si, quand même, un dernier point : pour progresser dans ce domaine, la curiosité est nécessaire. Pour être un·e bon·ne archiviste numérique, je pense qu’il faut appliquer ses méthodes à sa propre production, et apprendre de son expérience d’archivage personnel !

  1. En réalité, je n’ai pas dû jouer beaucoup à ce jeu, parce que je n’arrivais pas à comprendre comment manœuvrer le saumon. Mais c’était mon premier jeu vidéo, et ça a suffi à me marquer durablement. ↩︎
  2. Je ne sais pas à quoi correspond l’extension « .mok », par exemple – elle n’a d’ailleurs qu’une entrée dans le méta-registre d’extensions publié par Andy Jackson, qui ne correspond pas au format des fichiers qu’on a ici. ↩︎
  3. Si vous vous demandez pourquoi j’avais délaissé cette copie, c’est parce qu’elle ne se lançait pas du tout avec DOSBox-X. ↩︎