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 !