Transférer un programme cassette vers une disquette

Tom et Jerry / GPA (c) 12/2003, maj du 17/08/08


Ce petit article n'a pas la prétention de faire de vous un expert patenté dans l'art de faire des transferts de programmes K7 sur disquette. Il se contente de dresser un panorama de ce domaine qui pourra intéresser tout possesseur d'originaux cassette, et l'aiguiller sur la méthode à utiliser pour arriver à ses fins.

Tout d'abord, quel est l'intérêt de faire des transferts de logiciels originaux du support cassette sur disquette ? Si l'on met de côté la désuète volonté de se faire connaître en tant que cracker, on peut trouver plusieurs bonnes raisons :

  • L'interêt technique de certains "loaders", à réserver aux puristes !

  • Le fait qu'il soit plus facile de trouver des originaux cassette que disquette (les cassette vieilleraient t'elle mieux ?).

  • L'existence de programmes qui n'ont été diffusé que sous le format cassette.

  • Lorsque le CPC était l'ordinateur à la mode, il s'est produit un véritable phénonème autour de ce sujet. Les utilisateurs de CPC 464 voulaient tous profiter des bienfaits d'un lecteur DDI-1 et "passer" leurs jeux cassette sur disquette. On a vu fleurir un nombre considérable de programmes de transfert. Certaines sociétés (Esat Software et Pride Utilities en Angleterre) proposaient même un service de transfert aux utilisateurs. Il suffisait d'envoyer son original cassette, une disquette vierge plus un chèque de 100fr (!) pour se retrouver avec le programme convoité sur disquette (l'original était détruit). Cette pratique surprenante n'a pas duré très longtemps. Légalement, cela s'apparentait pour moi à du piratage... Esat (toujours eux) diffusait également une brochure trimestrielle, recensant les outils et méthodes de transfert à utiliser pour copier tel ou tel programme avec l'outil Transmat. Cette idée sera bien plus tard reprise par Siren Software avec le produit Nemesis Express.

    Les plus anciens se souviendront aussi certainement avec émotion de la rubrique "Bidouilles Grenouille" du magazine Hebdogiciel, où l'on trouvait des listings pour "passer" des jeux originaux sur disquette.

    L'engouement des éditeurs s'est peu à peu tassé avec l'arrivée en masse du CPC 6128 dans les foyers, mais le transfert de programmes cassette a toujours été une activité prisée par les déplombeurs de tout poil, ne serait-ce que du fait de l'existence de nombreux jeux diffusés uniquement sur ce support, les fameux "budgets" (programmes anglais vendus autour de 30fr).


    I Les bases du transfert

    Les données sur une cassette sont enregistrées sous une forme analogique, il s'agit de sons ! Pour s'en convaincre, il suffit de passer une cassette sur la chaîne hi-fi familiale, brouille avec les voisins garantie ! Lorsqu'on charge un programme à partir d'un cassette, le CPC convertit ce flux sonore en données numériques, en l'occurence des bits.

    Un programme sur une cassette peut être stocké de deux façons différentes.

  • Sous la forme de blocs.

  • Le programme est alors divisé en portions de taille fixe (2ko) et numérotées. C'est la méthode utilisée lorsque vous sauvegardez un programme sur cassette avec la commande SAVE sous BASIC. Chaque bloc est séparé par un "blanc", un laps de temps pendant lequel il n'y a aucun signal sonore sur la cassette enregistrée.

    Chaque bloc est précédé d'un en-tête ou header, qui donne à l'ordinateur des informations sur les données à charger. L'en-tête du premier bloc d'un fichier contient des informations très utiles, le type du programme (Basic, Binaire ou Ascii), ses adresses de chargement et d'exécution, sa longueur. En utilisant la routine système &BC77, on peut récupérer ces données.

  • Sous la forme d'un fichier unique.

  • Le programme est stocké en un seul bloc. Il faut utiliser la routine système &BCA1 pour charger un tel fichier, en connaissant son adresse de chargement, sa longueur, et, chose importante, sa valeur de synchronisation. Dans les vieux utilitaires de transfert cassette vers disquette, ces fichiers sont appelés "sans-entête" (headerless en anglais).

    La première technique de stockage est plus "lente" que la seconde, mais est en contrepartie plus fiable. Si un bloc ne s'est pas bien chargé en mémoire, un message d'erreur vous invite à repositionner la cassette avant ce bloc pour refaire un essai. Avec un programme chargé avec la routine &BCA1, s'il y a une erreur de chargement, il faut tout recommencer à zéro !

    Avec les deux méthodes, une somme de contrôle calculée par le CPC (checksum) permet de vérifier la validité d'un chargement.

    Certains programmeurs ont développé leur propre système de chargement (ou loader). La plupart du temps, il s'agit de routines ressemblant au vecteur &BCA1, mais parfois, comme pour le loader Firebird, il y a un système de chargement par bloc.

    Pourquoi ces loaders ont-il été créés ? Soit parce qu'ils permettent d'utiliser toute la mémoire du CPC, y compris celle réservée aux vecteurs système, soit pour protéger le logiciel sur la cassette contre un transfert sur disquette ! Dans cette catégorie, les programmes les plus connus sont les Speedlock K7, le loader Firebird, le loader Loriciels, le loader Appleby.


    II Avec quoi transférer une cassette sur disquette ?

    Il vous faut évidemment soit un CPC 464 avec un lecteur DDI-1, soit un lecteur de cassette et un cordon 3 jacks pour le relier au CPC (664 ou 6128). Les Plus sont ipso facto exclus, on ne peut connecter de lecteur de disquettes sur le CPC 464+, et il n'y a pas d'origine de connecteur K7 sur le 6128+. Les plus téméraires d'entre vous pourront en bricoler un, mais il est plus simple d'investir dans un CPC 464 (sauvez les CPC 464 !).

    Pour la partie logicielle, le minimum vital est un logiciel de déprotection Basic plus un programme de copie K7 > Disquette. Si vous avez un Hacker, cela peut aussi vous être utile.

    Comme je l'ai dit dans l'introduction, les programmes de transfert ont au début de la carrière du CPC été très populaires. S'il ne faut en retenir que quelques-uns, je choisirai ces programme, qui sont en français (sauf Nemesis Express) :

  • Transformateur 3000 (MBC) : contient tout le nécessaire pour les fichiers standards (avec ou sans en-tête). Il contient aussi un programme de transferts pour la protection Speedlock, qui malheureusement ne fonctionne qu'avec de très vieux titres (Dailey Thompson's décathlon, par exemple). Il existe une version plus récente de ce produit (Transformateur 4000) qui permet de transférer les loader Appleby K7, Copypom.

  • Mephisto 1.2 (Esat Software ) : très compact, il propose deux programmes, pour transférer les fichiers standards et sans-entête. Mephisto 1.2 retire automatiquement la protection Basic et reloge les fichiers implantés trop haut en mémoire. Cela en pratique ne s'avère pas toujours utile. De plus, ma version comporte un bug qui fait que la petite routine de recopie mémoire ne fonctionne pas. Malgré tout, cela reste un bon produit.

  • Nemesis Express (Siren Software) : LE toolkit pour transférer les programmes protégés par un Speedlock. Si certaines de ses routines de transfert génèrent des fichiers sur disquette relativement sales (BLOLDXL, par exemple...), c'est pourtant une base incontournable pour faire des transferts. Il propose un outil exclusif qui est censé détecter le type de loader utilisé par un logiciel. Cela fonctionne la plupart des cas avec les loaders protégés (sauf les Firebird, bizzarement... ). Plusieurs versions de Nemesis Express ont été vendues, la version 4 offre un panel de routines de transfert assez impressionnant.

    Si vous n'avez aucun de ces logiciels, il vous reste toujours Discology ! Ce programme dispose lui aussi un module pour le transfert des programmes standards. Il propose en gros les mêmes fonctionnalités que Mephisto, la suppression de la protection Basic en moins. Pas la peine par contre de chercher la dernière version de ce programme, il n'a à ma connaissance jamais évolué. C'est dommage car j'ai réussi à trouver un jeu non protégé qu'il n'arrive pas à transférer (Robin of Sherlock).

    Par contre, n'essayez pas de vous servir des commandes CLOAD et CSAVE du CPM 2.2, elles ne permettent de lire et enregistrer que des fichiers CPM.


    III Le déroulement d'un transfert

    La première chose à faire, c'est charger de manière normale votre programme. Le but est de vérifier que la cassette fonctionne correctement, et aussi d'avoir une idée sur la technique de chargement utilisée. Pour cela, il suffit d'"écouter" le flot de données que charge le CPC. S'il est entrecoupé de silences, il s'agit d'un loader par bloc. Il y a donc de grandes chances que le programme ne soit pas protégé efficacement. Si le chargement est continu, soit vous avez affaire à un chargeur utilisant le vecteur &BCA1 ou une routine "maison". Dans les deux cas, il faudra avoir un minimum de connaisances en assembleur pour arriver à vos fins.

    Dans tous les cas, le premier fichier sur la cassette peut être transféré sur disquette avec un utilitaire standard. C'est une opération à entreprendre systématiquement, afin de confirmer le diagnostic sur la nature du loader.

    Si le programme n'est pas protégé, utilisez un logiciel de copie standard, et notez au fur et à mesure l'ordre et les noms des fichiers copiés. Cela vous sera utile s'il s'avère ensuite nécessaire d'adapter le programme de chargement une fois le transfert terminé.

    Si le programme est protégé, soit vous avez un logiciel de transfert adapté, auquel cas je vous invite à vous retourner sur la notice de ce dernier, soit vous n'avez rien, et il va vous falloir mettre les mains dans le camboui, c'est à dire comprendre comment fonctionne le chargeur, afin de le détourner.

    En fonction de l'éditeur du programme, l'on peut supposer la présence ou non d'une protection.

  • Les programmes les plus anciens (Amsoft, certaines société françaises comme No'man's land, Sprites, Core, Transoft) peuvent se transférer avec un logiciel standard. Les programmes Basic sont protégés avec la protection standard (SAVE "TOTO",P), qui se contourne facilement avec un utilitaire adapté (REMPRO par exemple, que l'on trouve dans la compilation d'utilitaire ODDJOB).

  • Dans bien des cas, il faudra modifier le chargeur du programme car les noms des fichiers sur cassette ne peuvent pas toujours être les mêmes que sur disquette. On trouve ainsi de façon courante le nom "!" qui veut dire "charge le premier programme trouvé sur la cassette". Cela ne peut pas fonctionner une fois les fichiers transférés sur disquettes, car ces derniers ont forcément un nom.

    Les programmes peuvent nécessiter d'autres retouches. Il faut parfois "reloger" des portions de données en mémoire. L'explication est simple : il y a moins de mémoire disponible pour le système lorsque vous utilisez un lecteur de disquettes. Sur un CPC 464 K7, la limite "haute" est fixée à &ABFF, sur un modèle avec lecteur de disquette, elle tombe à &A6FF. Si le programme cassette utilise cette portion de mémoire, il ne pourra fonctionner correctement. Il faut donc dans le plus simple des cas charger ailleurs en mémoire ce bout de code, puis le recopier à son emplacement initial avant de lancer le programme final. Dans le pire des cas, il faudra carrément reprogrammer le bout de code stocké en zone "interdite" pour le placer ailleurs en mémoire. C'est heureusement un cas de figure rare.

  • Les jeux Firebird sont dans la plupart des cas protégés par le loader Firebird. On le repère facilement par la présence d'un compteur au milieu de l'écran, et par le fait qu'il charge beaucoup de petits blocs (taille de 256 octets au lieu de 2ko).

  • Les programmes Ocean / Imagime / Codemasters sont systématiquement protégés par un Speedlock. Comme il en existe différentes variantes, le plus simple est d'utiliser Nemesis Express, qui contient un renifleur de versions, et vous indique le programme à utiliser.

  • Les programmes Loriciels sont souvent protégés avec le loader... Loriciels ! Avant le chargement du jeu, vous avez droit à une page écran avec le logo de l'éditeur, un petit chat.

  • Les programmes diffusés par U.S.Gold/Go! sont soit protégés par un Speedlock, soit par un loader Appleby, qui se reconnait à son petit compteur défilant en ordre décroissant et au fait qu'il émet un bruit lorsque le chargement est défectueux.

    Dans la grande famille des éditeurs de budgets, chacun a son loader. Mastertronic a sur ses titres récents (tout est relatif... ) utilisé un chargeur spécifique. On le reconnait à la page de copyright bleue avant le chargement du programme. Players, Hitech et Alternative ont fait de même, sans que cela ne constitue une réelle protection.

    Pour les transferts de programmes protégés, il existe en plus des logiciels commerciaux quelques freeware permettant de s'acquitter plus moins facilement d'une copie cassette / disquette. On peut citer trois de mes outils, "Mastertronic to Disk", "Firebird Loader Toolkit" et "Loriciels to disk".

    Chose importante à noter, si le programme fait des chargements de niveaux après son exécution, aucun logiciel de copie automatique ne pourra les récupérer. Il vous faudra alors les transférer à la main après avoir trouvé où se trouve le loader de ces données. Un Hacker et de bonnes connaissances en assembleur s'avèrent obligatoires...


    IV Foire aux question !

    J'ai transféré sur disquette un programme Basic, et il ne se charge pas

    Cela arrive parfois avec de très gros programmes (à partir de 36ko, me semble t'il). Deux solutions à ce problème.

    1) Récupérer de la mémoire en faisant un SYMBOL AFTER 256. On gagne ainsi quelques précieux octets. Cela m'a permis par exemple d'arriver à charger le programme "Bug busters" de chez Free Game Blot.

    2) Utiliser le programme DECONNECT (paru dans Amstrad Magazine 14), qui inhibe le système disque, et permet de récupérer les octets nécessaires. Il faut ensuite charger le programme en mémoire, le sauvegarder en ASCII (SAVE "TOTO",A) sur une cassette, faire un POKE &AC00,&FF et recharger le fichier. Cela a pour effet de supprimer du programme les blancs inutiles. En général sur les 'vieux' programmes, cela permet de gagner entre 1 et 3ko de mémoire, ce qui est suffisant pour pouvoir les faire tourner sur un CPC avec lecteur de disquette !

    3) Utiliser le programme PC MANAGEDSK de Démoniak. Il permet d'afficher le contenu d'un programme BASIC (même protégé), et de le récupérer sous la forme de texte. Cela permet de découper le fichier Basic trop gros en deux parties et d'appliquer ensuite la procédure de nettoyage des blancs décrite dans le paragraphe 2.
    C'est ainsi que j'ai pu faire fonctionner sur un CPC6128 le jeu The Wild Bunch de Firebird, qui avait au départ un fichier Basic de 38ko !

    Je n'arrive pas à transférer un programme protégé par un Speedlock

    Malheureusement pour nous, possesseurs d'originaux, cette protection est assez caractérielle. Il m'est arrivé d'avoir de gros problèmes de lecture sur des programmes neufs ! Si la cassette ne se charge pas normalement, voir la question suivante. Si par contre, votre programme de transfert a correctement fonctionné et que le résultat sur disquette ne marche pas, cela peut provenir du fait que le chargeur original met en mémoire vidéo du code machine. Nemesis Express ne sauvegardant pas cette zone mémoire, le transfert ne peut pas être correct. C'est encore une fois rare, je n'ai vu ce cas de figure que sur les jeux "Pro tennis simulator" et "Pro Golf simulator" de Codemasters. La solution ? Il faut bricoler le programme de transfert pour qu'il sauvegarde cette zone de mémoire...

    Je n'arrive pas à charger un programme sur mon lecteur de K7

    Si vous avez des messages d'erreur "Read Error B" ou "Read Error A", tout n'est pas perdu.

    "Read Error B", correspondant à une erreur de checksum calculé sur une suite de 256 octets, signifie souvent qu'il y a un problème de volume sur un lecteur externe ou d'azimutage sur un Datacorder (lecteur du CPC 464)

    "Read Error A", plus rare, indique une longueur de bit trop longue par rapport aux valeurs attendues. Cela peut se produire lorsque la cassette se déroule mal dans le lecteur. En pratique, un Read Error A est difficile à "contourner", car il signifie souvent que la cassette est en mauvais état (son chevrottant quand on l'écoute).

    La "Bible du CPC" parle aussi d'un message Read Error D (dépassement de la taille d'un bloc), je ne l'ai personnellement jamais rencontré.

    Première conseil à appliquer, il faut commencer par bien retendre la bande en la déroulant complètement.

    Un nettoyage de la tête de lecture du Datacorder (petit nom du lecteur de cassettes du CPC 464) n'est parfois pas inutile. Un coton tige imbibé d'alcool fera l'affaire (attendre que tout soit bien sec avant de refaire un essai).

    Concernant le Datacorder, il est parfois nécessaire de régler l'azimutage de la tête de lecture pour pouvoir correctement lire certaines cassettes.
    La procédure est très simple, il faut simplement se munir d'un petit tournevis cruciforme (genre tournevis de précision) :

    - Appuyer sur la touche PLAY du datacorder
    - Insérer le tournevis dans le petit trou carré sous la trappe d'insertion des cassettes.
    - Tourner un petit peu vers la gauche ou vers la droite.
    - Faire un essai de lecture d'un fichier standard.

    Jadis, on trouvait dans le commerce des cassette d'azimutage. Elles n'apportaient rien de plus que la procédure décrite plus haut.

    Si votre lecteur est un peu ancien, il se peut qu'il ait du mal à "tirer" a une vitesse suffisante les cassettes ayant une longue bande. Le phénomène est plus flagrant avec des longueurs de bande importante. La vitesse de la lecture a alors tendance à ralentir, ce qui peut générer des erreurs de lecture. N'hésitez pas dans ce cas à utiliser un walkman ou un combiné cassette récent si vous arrivez à en trouver un ! Seuls les CPC 664 et 6128 permettent cette opération qui s'avère dans la plupart des cas salvatrice, à la condition de posséder un cable adéquat.

    Si malgré tout, les problèmes de lecture persistent, il faut jouer sur le volume sonore en sortie du lecteur de cassette et sur le rapport graves/aigus (toujours avec un 6128, n'est ce pas !). Ces réglages peuvent prendre du temps avant de trouver le bon compromis, qui peut changer au cours du chargement...

    Enfin, n'oubliez pas que la plupart du temps, les cassettes sont enregistrées sur les deux faces !