Fichiers images de cassettes au format .lep

Tout ce qui concerne le logiciel original et sa sauvegarde avec entre autre la régénération des disquettes ou autres supports physiques.

Modérateurs : Papy.G, fneck, Carl

Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Fichiers images de cassettes au format .lep

Message par Daniel »

Le format .lep permet de faire des images de cassettes de programmes, pour la sauvegarde des logiciels originaux.
Il a été conçu au départ pour le projet SDLEP-READER appliqué aux cassettes Thomson : http://forum.system-cfg.com/viewtopic.php?f=18&t=7700
Il s'avère que ce projet, tout comme le format .lep, s'applique à tous les systèmes d'enregistrement de cassettes de programmes. C'est donc un outil universel pour les collectionneurs d'ordinateurs anciens.

Voici la définition originale du format .lep pour Thomson, facilement adaptable à toutes les autres marques :

Code : Tout sélectionner

===============================================================================
Format de cassette Thomson .lep
===============================================================================

Un fichier .lep est une image de cassette Thomson, TO ou MO
Il permet de reproduire le signal en sortie des LEP TO et MO.

--------------
Format MO
--------------
Le fichier .wav à 44,1 kHz 8 bits mono de la cassette est mis en forme pour
contenir des créneaux rectangulaires d'amplitude constante.

--------------
Format TO
--------------
Le signal enregistré sur la cassette est transformé en une suite de bits selon
le système d'encodage TO : 5 périodes à 4500 Hz donnent un bit 0, 7 périodes à
6300 Hz donnent un bit 1. Chaque octet utile commence par un bit de start à 0
et se termine par deux bits de stop à 1. Les séquences de synchronisation et
les passages non enregistrés sont remplacés par des bits à 1.
Un fichier .wav 44,1 kHz 8 bits mono est créé. Il est semblable à la sortie du
magnétophone TO. Il contient 49 échantillons par bit, avec un niveau haut pour
les bits 1 et un niveau bas pour les bits 0.

--------------
Fichier .lep
--------------
Chaque octet du fichier .lep contient la durée jusqu'au prochain changement de
valeur du signal. Elle est exprimée en dixièmes de milliseconde, avec le signe
+ pour les créneaux positifs et le signe - pour les créneaux négatifs.
Si ce nombre N est supérieur à 127, il y a un octet égal au reste de N/127
(ou 1 si le reste est nul) affecté du signe + ou - selon le sens du créneau,
suivi de N/127 octets à zéro.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Fichiers images de cassettes au format .lep

Message par __sam__ »

Ce format n'est pas sans me faire penser aux bases du format VCD (https://en.wikipedia.org/wiki/Value_change_dump), utilisé en électronique: on n'encode que les changements d'états. Tu n'as pas pensé à réutiliser ce format directement ? (pour permettre la visu des signaux K7 dans n'importe quel analyseur de traces électroniques par exemple).
Si ce nombre N est supérieur à 127, il y a un octet égal au reste de N/127
(ou 1 si le reste est nul) affecté du signe + ou - selon le sens du créneau,
suivi de N/127 octets à zéro.
Ici c'est pas super clair. Mais de ce que je comprends sur un octet tu peux encoder au plus une durée de 127*0.1ms = 12.7ms, donc si on a une pause de disons 5secondes sur la cassette (soit 3 000 000 *0.1ms) il nous faut écrire la valeur 3 000 000. Modulo 127 on obtient 6, on a donc l'octet 0b00001010, suivit de int[3 000 000/127]= 23622 fois l'octet 0b00000000, soit presque 24ko, c'est bien ca ?

Suivant la même logique, avec une pause de 5mins sur la K7 source, on a alors près de 1.4Mo de 0b00000000. Heureusement que la place ne manque plus de nos jours :)

Une autre solution pour l'encodage de grosses valeurs aurait été d'utiliser ce qui se fait avec les entiers de taille variable du format MIDI: on ne stock que 7 bits par octets. Le 8e bit indique si il faut ajouter l'octet qui suit à la valeur courante. Pour le signe au lieu d'utiliser le bit de poids fort, on peut avantageusement utiliser le bit de poids faible et ne traiter qu'avec des nombres non-signés. Ca donnerait quelque chose comme ca:
Idée :?: une pause de n*0.1ms suivit d'un front montant est encodé par l'écriture de 2*n+1, et par l'écriture de 2*n+0 sinon (notons cette valeur m). Si m<=127, pas de soucis, on écrit directement l'octet m. Ensuite si m>=128, on écrit 128+(m%127) suivit par la valeur de int(m/127) avec le même encodage (i.e. si int(m/127) est plus grand que 128, on met le bit fort à 1 et on continue avec [n/127]/127 etc)
Pour le coup 5 mins de silence suivit d'un front haut représente la valeur 180 000 000*2+1=360 000 001 à écrire. Cela s'encode en (128+86)(128+5)(128+95)(128+48)(1), soit 5 octets au lieu de 1.4Mo ;) Pour décoder, on a (((1*127+48)*127+95)*127+5)*127+86 qui donne bien le 360 000 001 de départ.

Bon l'encodage est compact mais sans doute plus complexe à calculer et étant donné l'espace dispo sur les supports de masse, ca ne vaut peut-être pas le coup de s'enquiquiner, car après tout dans le pire des cas, une cassette vierge de 2*45', ne prendra jamais plus que 24Mo avec l'encodage LEP.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fichiers images de cassettes au format .lep

Message par Daniel »

Le format .lep n'est pas optimisé, mais ce n'était pas l'objectif. J'ai voulu simplifier au maximum le programme de l'Arduino. L'expression du temps en dixièmes de milliseconde et la limitation à 127 par octet ne sont pas dus au hasard, mais aux contraintes de la fonction delayMicroseconds(), dont le paramètre est un entier sur 16 bits.

Il n'est pas certain que la solution adoptée soit la meilleure, mais peu importe, elle a le mérite d'exister et de bien fonctionner. Et surtout elle évite les fichiers .wav. Le fichier .lep est en moyenne 100 fois plus petit qu'un fichier .wav 44,1kHz 8bits mono. Il ne nécessite pas de synchroniser le programme de l'Arduino sur la fréquence d'échantillonnage (44,1kHz). Cette synchronisation est trop difficile à maintenir lors des changements de bloc de la carte SD. Avec le format .lep la programmation de l'Arduino est extrêmement simple. Plus c'est simple et mieux ça marche :D
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Fichiers images de cassettes au format .lep

Message par __sam__ »

Daniel a écrit :Plus c'est simple et mieux ça marche :D
C'est l'une des vérités éternelles de l'ingénierie qu'on apprend sur le tard: le principe du K.I.S.S qui n'a rien à voir avec un groupe de rock de fin 70, début 80 ;)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fichiers images de cassettes au format .lep

Message par Daniel »

Après ce préambule théorique, la question pratique est maintenant : comment créer les fichiers .lep ?
Commençons par le format MO, et après j'indiquerai les différences du format TO.

Le fichier .lep représente le signal de sortie du LEP, mais nous ne le connaissons pas.
Nous avons le fichier .k7 pour l'émulateur, éventuellement un fichier .wav "remasterisé" du site dcmoto, parfois un fichier .wav enregistré sur PC avec un magnétophone analogique. Aucun ne convient parfaitement, voici pourquoi :

- Le fichier .k7 contient uniquement les octets utiles. Il ne connait pas le mode d'enregistrement des octets, ni les fréquences, ni les espaces entre blocs. Et surtout, pour les programmes protégés, il a été modifié pour fonctionner dans l'émulateur : les routines spéciales de lecture de la cassette ont été remplacées par un code opération 6809 invalide, interprété ensuite par dcmoto.

- Le fichier .wav analogique de la cassette permet théoriquement de reconstituer le signal en sortie du LEP. Il faut pour cela écrire un programme de simulation. C'est ce que j'essaie de faire depuis trente ans, avec plus ou moins de bonheur. Je n'ai pas encore réussi à produire un outil totalement opérationnel. C'est une usine à gaz, je suis seul à pouvoir l'utiliser, je le modifie et le recompile presque à chaque conversion, et il ne fonctionne pas toujours bien.

- Le fichier .wav remasterisé est déjà un peu plus utilisable. Il a été créé avec l'outil précédent quand il a bien voulu fonctionner, et représente fidèlement l'enregistrement original, sauf sur deux points : les fréquences des bits sont fixes et les espaces entre blocs sont des estimations grossières. Ca veut dire qu'un enregistrement MO6 à 2400 bauds est restitué à 1200 bauds, et que les espaces entre blocs sont trop longs car ils ont été surestimés pour des raisons de sécurité. Peu importe, si ce fichier .wav est transformé en .lep il fonctionnera, mais le chargement déjà long en temps normal sera un peu plus long, voire deux fois plus long pour le MO6.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
petitjd
Messages : 2007
Inscription : 23 oct. 2007 11:50

Re: Fichiers images de cassettes au format .lep

Message par petitjd »

Le terme usine à gaz est exactement le bon terme! Ca me rappel quand j'ai écrit la routine de décodage et de remise en forme au format wav du signal au format Kansas City du Proteus III. Il fallait prier très fort pour que ca marche du premier coup, surtout à cause du niveau d'enregistrement initial et d'éventuels parasites.
PetitJD
Tortue Jeulin: www.tortue-jeulin.com
Nanoreseau: www.nanoreseau.net
Proteus III: www.proteus-international.fr
Avatar de l’utilisateur
Falkor
Messages : 1701
Inscription : 28 juin 2010 12:09
Localisation : Cluny, Saône et Loire

Re: Fichiers images de cassettes au format .lep

Message par Falkor »

Question stupide : ce format LEP est-il en binaire ou ascii ?? :?:

J'ai également du mal à comprendre les créneaux positifs et négatifs... Les signaux ne sont-ils pas purement binaires ?

Ce format semble effectivement intéressant pour pouvoir travailler sur des machines différentes. J'imagine qu'une fois le fichier LEP réalisé pour une machine donnée, le hardware pour le recréer doit être le même, aux problèmes de niveau de sortie du signal final près...?
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fichiers images de cassettes au format .lep

Message par Daniel »

Les fichiers .lep sont binaires. Ils contiennent une succession d'octets décrivant le signal. Chaque octet contient un nombre binaire négatif, positif ou nul.

Le signal en sortie du magnétophone est composé de niveaux bas et de niveaux hauts. Si on le représente graphiquement, on voit des créneaux rectangulaires. On dit que les créneaux dirigés vers le haut sont des créneaux positifs, les espaces entre les créneaux positifs sont des créneaux négatifs.

Le lecteur SDLEP-READER est le même pour toutes les machines, la seule différence est le cordon de connexion à l'ordinateur. Pour les machines à entrée TTL la liaison est directe, pour les machine à entrée audio analogique il y a un adaptateur de niveau composé d'un condensateur et d'un potentiomètre de volume.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Fichiers images de cassettes au format .lep

Message par __sam__ »

Falkor a écrit :J'ai également du mal à comprendre les créneaux positifs et négatifs... Les signaux ne sont-ils pas purement binaires ?
Bonne question. Daniel: que se passe-t-il quand le programme trouve un octet indiquant un front montant alors qu'il produit déjà un niveau HAUT sur la pinoche ?Je présume que ca ne sert à rien et que le niveau reste à HAUT. Du coup on pourrait se passer de cet octet en doublant la valeur de la durée de l'octet précédent, non ? Si on fait cela, alors le fichier LEP contient forcément une suite de fronts montants et descendant. Du coup, une fois le premier front connu, les autres se déduisent de l'index paire/impair de l'octet dans son fichier.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
nicolho
Messages : 409
Inscription : 10 nov. 2016 16:53

Re: Fichiers images de cassettes au format .lep

Message par nicolho »

Daniel expliquera tout ça dans les règles de l'art, mais pour déjà se faire une idée concernant les signaux présents dans l'audio des cassettes MO5, voici comment j'avais pu comprendre empiriquement le principe de modulation, d'abord pour reconstituer les données contenues dans la K7, afin qu'elles prennent moins de place pour pouvoir les charger dans la mémoire flash de mon Arduino Mini, pour finalement les lui faire resynthétiser à nouveau avec les durées des "pulsations" d'origine, au niveau TTL envoyé dans le connecteur pour simuler le magnéto (j'ai posté le code de cet essai, très rudimentaire mais fonctionnel, dans le fil SDLEP-READER).

C'est assez simple à repérer visuellement. Voici le début de l'audio du .wav du jeu "1000 bornes" récupéré sur le site de Daniel, et ouvert dans l'éditeur audio Audacity :
audacity.jpg
audacity.jpg (183.36 Kio) Consulté 6289 fois
J'ai ajouté en rouge sur l'image une suite de lettres qui correspondent aux différents états du signal, à intervalles de temps égaux, avec 'B' pour signal bas, et 'H' pour signal haut. On obtient, en faisant un premier regroupement par groupes de 2 lettres :
BH BH BB HB HB HB HH BB HH BB HH BB HH BB HH BH BB HH BB HH BB HH BB HB

En fait, à chaque nouveau bit correspond d'abord un changement d'état (on bascule vers le haut si on était en bas, et inversement), tous les 2 intervalles de temps.
Pour un bit '1', on bascule aussi dans l'intervalle suivant immédiatement, mais pour '0' on reste au même niveau.
Ce qui nous donne, si on reprend nos paires de lettres :
HB ou BH pour 1
HH ou BB pour 0
On voit aussi, dans le repère de temps d'Audacity, au dessus du signal audio, qu'entre 4,000 et 4,010, donc en 10 millisecondes, on a environ 12 de ces "paires", soit la vitesse normale de transmission de 1200 bits par seconde utilisée pour le magnétophone MO5.

Si on regroupe ces états par groupes de 8 paires (pour les 8 bits d'un octet), on obtient cette séquence, avec les bits correspondant :

Code : Tout sélectionner

BH BH BB HB HB HB HH BB   HH BB HH BB HH BB HH BH   BB HH BB HH BB HH BB HB
1  1  0  1  1  1  0  0    0  0  0  0  0  0  0  1    0  0  0  0  0  0  0  1
donc pour les 3 premiers octets, cela donne en notation hexadécimale : DC 01 01

Étrangement, j'ai remarqué que le code d'entête des différents fichiers cassettes .wav téléchargés commençaient souvent par cette valeur "DC", qui n'a pourtant pas d'influence, mais toujours aucune idée de ce à quoi ça pourrait bien correspondre.... :?: 8)
Dernière modification par nicolho le 21 déc. 2016 12:24, modifié 1 fois.
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fichiers images de cassettes au format .lep

Message par Daniel »

@nicolho : Merci pour ton explication claire de l'enregistrement des cassettes MO5 standard, j'y ferai référence quand j'expliquerai les format spéciaux utilisés dans les protections.

On trouve des fichiers .k7 et .wav Thomson sur internet, en particulier dans les sites dits "de ROMs". Entre parenthèses je n'aime pas qu'on appelle ROM une cassette, mais peu importe. Quand je vois des sites qui proposent ces fichiers j'aime bien savoir d'où il viennent. Les ont-ils honteusement volés, on ont-ils transféré sur PC des cassettes originales ? Si je trouve DC dans le premier octet de chaque bloc, je sais, car DC est ma marque de fabrique :wink:

@sam : J'aime bien tes analyses car je fais exactement les mêmes. Pourtant nous n'avons pas été à la même école :wink:

J'étais parti sur l'idée de ne pas coder le sens des créneaux, puisqu'on peut le déduire du numéro d'ordre. D'autant plus que pour le MO5 le sens n'a aucune importance, seule la demi-période est significative. Par contre, pour le TO7, le sens détermine la valeur du bit : 1 pour les créneaux positifs, 0 pour les créneaux négatifs. Je me suis dit que le moindre décalage serait fatal, et j'ai ajouté le signe par sécurité. Comme ça, si on "rate" un octet du fichier .lep (par exemple le premier), il n'y a pas de répercussion sur les octets suivants.

Cette sécurité est coûteuse. Elle n'impacte pas les parties enregistrées pendant lesquelles les durées ne dépassent jamais 127, par contre elle double la taille des silences et des séquences de synchronisation, et elle est probablement inutile. Mais, vous l'avez compris, l'optimisation de la taille du fichier n'est pas ma préoccupation. Une carte SD de 32 Go peut largement contenir toute la logithèque Thomson présente et à venir. J'ai voulu privilégier la sécurité et la simplicité.
Daniel
L'obstacle augmente mon ardeur.
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fichiers images de cassettes au format .lep

Message par Daniel »

Création des fichiers .lep pour MO

Commençons par les enregitrements MO, c'est le plus facile, puisque la sortie du LEP est simplement le signal analogique converti en tout ou rien et mis au niveau TTL.

Pour créer le fichier .lep, il faut partir d'un ficher .wav "remasterisé", c'est à dire présentant des créneaux parfaitement rectangulaires et parfaitement calibrés. Deux cas sont possibles :
- Le fichier n'est pas protégé : on peut créer le fichier .wav remasterisé avec l'utilitaire dcmok7
- Le fichier est protégé : on peut utiliser le fichier .wav disponible à la page du programme sur le site dcmoto.

La conversion de .wav en .lep est effectuée par l'utilitaire dclep : http://dcmoto.free.fr/emulateur/index.html

Image

Deux remarques :

- Les fichiers .wav MO6 sont tous remasterisés à 1200 bauds, quelle que soit leur débit initial (1200 ou 2400 bauds). Les temps de chargement sur MO6 peuvent donc être plus longs dans certains cas. Ceci dit, avec un MO6, il faut ouvrir le boîtier pour accéder au connecteur magnétophone, je crois que SDLEP-READER ne sera pas trop utilisé sur cette machine.

- Les fichiers remasterisés sont générés avec des espaces entre fichiers et entre blocs un peu exagérés. Le fichier .k7 ne donne pas cette information, il a fallu l'estimer, et pour que ça marche dans tous les cas de figure il y a une marge de sécurité. Si on possède l'enregistrement .wav original, on peut prendre les mêmes espaces. Sinon on peut essayer de les réduire, en tâtonnant, jusqu'à ce que le programme ne se charge plus. On rajoute alors quelques dixièmes de secondes et c'est bon.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Falkor
Messages : 1701
Inscription : 28 juin 2010 12:09
Localisation : Cluny, Saône et Loire

Re: Fichiers images de cassettes au format .lep

Message par Falkor »

Daniel a écrit :Le fichier .wav remasterisé est déjà un peu plus utilisable. Il a été créé avec l'outil précédent quand il a bien voulu fonctionner, et représente fidèlement l'enregistrement original, sauf sur deux points : les fréquences des bits sont fixes et les espaces entre blocs sont des estimations grossières. Ca veut dire qu'un enregistrement MO6 à 2400 bauds est restitué à 1200 bauds, et que les espaces entre blocs sont trop longs car ils ont été surestimés pour des raisons de sécurité. Peu importe, si ce fichier .wav est transformé en .lep il fonctionnera, mais le chargement déjà long en temps normal sera un peu plus long, voire deux fois plus long pour le MO6.
Je comprends à peu près bien les problèmes que tu évoques avec une telle conversion pour les MO/TO, mais est-il possible d'envisager la conversion WAV -> LEP avec des fichiers "propres" issus d'émulateurs d'autres machines ? Les problèmes sont les mêmes ?
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fichiers images de cassettes au format .lep

Message par Daniel »

Je n'ai pas encore essayé, mais je crois que c'est possible. Les émulateurs insèrent très certainement les séquences de synchronisation et les espaces nécessaires entre les blocs.

La règle est simple : si un fichier .wav produit par programme est lisible avec la vraie machine, on peut le convertir en fichier .lep avec DCLEP, il sera lisible avec SDLEP-READER. Après les fêtes je ferai des essais avec le VG5000 et je commenterai les résultats obtenus.
Daniel
L'obstacle augmente mon ardeur.
Daniel
Messages : 17286
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fichiers images de cassettes au format .lep

Message par Daniel »

Création des fichiers .lep pour TO

Le cas du lecteur de cassette TO est très particulier. Il est peut-être unique en son genre, puisque le signal de la cassette est transformé en signaux TTL par le matériel, en l'occurrence un circuit électronique. Une fréquence de 6300 Hz donne un niveau haut, une fréquence de 4500 Hz donne un niveau bas. En l'absence de signal la sortie TTL est au niveau haut.

Remarque :
Ce décodage étant câblé dans le lecteur/enregistreur, les fréquences ne peuvent pas être modifiées. Ce détail a une importance, que nous verrons dans le fil de discussion sur les protections : avec les cassettes TO il n'est pas possible de changer la période des signaux enregistrés sur la bande, alors qu'avec les cassettes MO c'est possible, puisque le décodage est soft. C'est pourquoi les techniques de protections des cassettes MO sont beaucoup plus subtiles et beaucoup plus efficaces que les techniques de protection des cassettes TO.

Pour créer un fichier .lep, on est tenté d'enregistrer la sortie du LEP dans un fichier .wav et de le transformer ensuite en fichier .lep avec dclep. Malheureusement ce n'est pas aussi facile, ça ne fonctionne pas bien, et j'ai eu un taux de réussite plutôt faible avec cette méthode (de l'ordre de 50%). La raison principale est la fréquence très basse du signal de sortie. Dans les longues séquences de synchronisation ou les longs silences, c'est pratiquement du courant continu. Aucune carte son ne peut enregistrer le courant continu, car elles ont toutes un condensateur en série. Selon la carte, la bande passante dans les graves est plus ou moins étendue, mais presque toujours insuffisante.

La solution est donc d'émuler le magnétophone TO, pour reconstituer un fichier .wav de synthèse de la sortie à partir de l'entrée, donc du signal enregistré sur la cassette. C'est ce que fait, avec plus ou moins de bonheur, le programme de conversion (qualifié d'usine à gaz) évoqué plus haut. Le fichier .wav synthétisé peut ensuite être retouché manuellement pour ajuster la longueur des silences et séquences de synchronisation. Avec cette méthode le fichier .wav peut être transformé (avec dclep) en .lep, et celui-ci fonctionne avec SDLEP-PLAYER sur la vraie machine.

Une autre solution serait d'utiliser un analyseur logique (plutôt qu'une carte son) pour enregistrer la sortie du LEP. Je n'ai pas encore essayé cette méthode, mais théoriquement elle devrait donner aussi de bons résultats.
Daniel
L'obstacle augmente mon ardeur.
Répondre