Fonctionnement hard du LEP sur TO9

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Fonctionnement hard du LEP sur TO9

Message par Tomix »

Bonjour,

Je cherche à comprendre comment fonctionne le lecteur de cassette sur To9, d'un point de vue programmeur.
Jusqu'ici, en parcourant une doc célèbre, j'ai compris que le LEP était pilotable via un bit du PIA (6846), et un autre du 6821 system.

Pour le 6846:
- Moteur à l'arrêt, le bit 7 à 1 d'E7C3 sert à savoir si le lecteur est branché. Mais il sert aussi à recevoir les bits de lecture quand le moteur est allumé.

Pour le 6821 system:
- Quand le bit 2 d'E7CA est positionné en sortie (écriture), il permet d'allumer ou d'éteindre le lecteur de K7. A priori, il faudrait mettre 0 pour lancer le moteur, et 1 pour l'éteindre. C'est pas clair.

Questions:
- Est-ce que ce que j'ai écrit avant est juste et complet (ce qui m'étonnerait vu que je ne sais pas comment se passe l'écriture)?
- Quel algorithme faut-il utiliser pour décoder les informations lues sur le lecteur de K7? J'aurai besoin de savoir quels timings il faut respecter pour recevoir les infos, etc.
- Quid de l'écriture sur K7? Comment le faire en hard également?

J'attends quelques réponses, et j'affinerai mes questions en fonction.
Pour info, ces questions sont dans le cadre de l'émulateur que je code à mes temps perdus.

Merci à ceux qui me liront et me répondront.

a+
__sam__
Messages : 7961
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Fonctionnement hard du LEP sur TO9

Message par __sam__ »

Le 6848 fait deux choses, et pas une seule: Comme tu l'as vu le b7 de E7C3 décode le 0/1 lu par la logique du lecteur K7. Mais il fait aussi l'écriture par la sortie CT0 (timeout-timer). J'ai le souvenir d'avoir vu le moniteur TO7 dessassemblé. Le TO9 marche pareil. Cela t'aiderait bien à comprendre. Mais l'idée que j'ai retenue pour l'écriture c'est que la routine ROM encode les 0/1 à sérialiser en modifiant la période du timer. Donc pour émuler le lecteur K7 au plus bas niveau, l'émulation précise du 6848 est indispensable, mais je sais que tu l'as déjà ;)

On remarque que l'encodage/décodage est asymétrique. Le TO génère des signaux analogiques directement envoyés sur la bande K7, et récupère des niveau logiques décodés par l'électronique du lecteur K7. Cela explique que le lecteur K7 était relativement plus cher sur TO7 que sur MO5 où le décodage est 100% logiciel.
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
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Fonctionnement hard du LEP sur TO9

Message par Tomix »

En fait, je n'ai pas tout dit. J'avais aussi lu la doc Savema du To9 et j'étais tombé sur la routine de test d'écriture du LEP.
Sauf que, sur le coup, je n'ai pas compris comment ils pouvaient écrire un truc sur le LEP juste en bidouillant les timings du 6846 (pas 6848 ;)). Du coup, ce que tu me dis me semble plus clair. Mais c'est un procédé complètement inhabituel. Ca m'a bloqué.

Sinon, pour la lecture, cela ne me dit pas s'il faut respecter des timings pour lire E7C3. J'ai bien tenté de tracer la lecture à partir d'E815, mais mon debugueur se plante dans l'extramoniteur.
Est-ce que tu aurais un petit bout de code clair à ce sujet?
__sam__
Messages : 7961
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Fonctionnement hard du LEP sur TO9

Message par __sam__ »

Il faudrait que je fasse de l'archéologie pour retrouver le bout de code que je pense avoir vu. Je pense que c'était dans une discussion de logicielsmoto en revanche. C'est d'ailleurs ch*ant: il circulait il y a 16ans les codes sources des rom thomson, mais depuis ya plus rien de trouvable par google.

A priori pour lire les bits en E7C3 oui il faut respecter les timing pour tous les bits de l'octets une fois détecté le bit de départ (c'est du classique pour une liaison série). Il me semble effectivement avoir lu une doc (SAVEMA?) qui fait cela: 1 bit tous les 1111cycles cpu (soit 1.1ms) nous donne le 900bauds attendu.
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 : 17395
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fonctionnement hard du LEP sur TO9

Message par Daniel »

__sam__ a écrit :il circulait il y a 16ans les codes sources des rom thomson, mais depuis ya plus rien de trouvable par google.
Il y a cette page : http://dcmoto.free.fr/documentation/source.html

Sinon, il y a l'outil de désassemblage de dcmoto. Voici les routines de lecture/écriture d'un octet cassette TO :
Extraites de la ROM du T9000

Code : Tout sélectionner

---------------------------------
Ecriture octet cassette
---------------------------------                        
FCAD 3404       PSHS   B          
FCAF CC006E     LDD    #$006E              
FCB2 FDE7C6     STD    $E7C6               
FCB5 C606       LDB    #$06                
FCB7 B6E7C0     LDA    $E7C0               
FCBA 8401       ANDA   #$01                
FCBC 27F9       BEQ    $FCB7               
FCBE 10B3E7C6   CMPD   $E7C6               
FCC2 5C         INCB                       
FCC3 C1B0       CMPB   #$B0                
FCC5 2420       BCC    $FCE7               
FCC7 1F98       TFR    B,A                 
FCC9 840F       ANDA   #$0F                
FCCB 810F       CMPA   #$0F                
FCCD 26E8       BNE    $FCB7               
FCCF 1A01       ORCC   #$01                
FCD1 66E4       ROR    ,S                  
FCD3 2509       BCS    $FCDE               
FCD5 866E       LDA    #$6E                
FCD7 B7E7C7     STA    $E7C7               
FCDA CB06       ADDB   #$06                
FCDC 20D9       BRA    $FCB7               
FCDE 864E       LDA    #$4E                
FCE0 B7E7C7     STA    $E7C7               
FCE3 CB02       ADDB   #$02                
FCE5 20D0       BRA    $FCB7               
FCE7 3584       PULS   B,PC                

---------------------------------
Lecture octet cassette
---------------------------------                        
FCE9 B6E7C3     LDA    $E7C3     
FCEC 2BFB       BMI    $FCE9              
FCEE 9667       LDA    /$67                
FCF0 44         LSRA                       
FCF1 4A         DECA                       
FCF2 12         NOP                        
FCF3 26FC       BNE    $FCF1               
FCF5 B6E7C3     LDA    $E7C3               
FCF8 2BEF       BMI    $FCE9               
FCFA 8E0008     LDX    #$0008              
FCFD 9667       LDA    /$67                
FCFF 4A         DECA                       
FD00 12         NOP                        
FD01 26FC       BNE    $FCFF               
FD03 B6E7C3     LDA    $E7C3               
FD06 2B03       BMI    $FD0B               
FD08 1CFE       ANDCC  #$FE                
FD0A F51A01     BITB   $1A01               
FD0D 56         RORB                       
FD0E 301F       LEAX   -$01,X              
FD10 26EB       BNE    $FCFD               
FD12 9667       LDA    /$67                
FD14 44         LSRA                       
FD15 4A         DECA                       
FD16 26FD       BNE    $FD15               
FD18 E764       STB    $04,S               
FD1A 39         RTS                        
Pour mémoire, enregistrement sur cassette TO7 :
- Un octet commence par un bit de start (à 1) et se termine par deux bits de stop (à 0).
- Un bit 0 est constitué de 5 périodes d'un signal à 4500 Hz
- Un bit 1 est constitué de 7 périodes d'un signal à 6300 Hz
Remarquez que 4500/5 = 6300/7 = 900 bauds
Daniel
L'obstacle augmente mon ardeur.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Fonctionnement hard du LEP sur TO9

Message par Tomix »

Merci Daniel.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Fonctionnement hard du LEP sur TO9

Message par Tomix »

Est-ce qu'il y a une doc disponible qui parle des bits de start et de stop et de tout le bousin concernant la gestion du lecteur de K7 sur To?
Daniel
Messages : 17395
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fonctionnement hard du LEP sur TO9

Message par Daniel »

A ma connaissance il n'y a aucune documentation décrivant précisément l'enregistrement sur cassette TO. Les documentations techniques des magnétophones MK90-090 et MK97-070 donnent de vagues informations : fréquence du signal de synchronisation, fréquence et nombre de périodes des bits 0 et 1. Rien sur la structure d'un octet, ni sur la structure d'un bloc, ni sur la structure d'un fichier.

Pour aller plus loin, il faut désassembler les routines du moniteur et observer les fichiers .wav d'enregistrements de cassettes.
Daniel
L'obstacle augmente mon ardeur.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Fonctionnement hard du LEP sur TO9

Message par Tomix »

Est-ce qu'il y a une feinte pour l'extinction et l'allumage logiciel du moteur?
A priori, ce serait le bit 2 d'E7CA qui jouerait ce rôle.

Si je considère que la valeur 0 vaut allumage, et 1 pour l'extinction alors, au reset, la ROM de mon To9 fait un allumage puis une extinction puis un allumage du moteur. Ensuite, quand je passe au basic et que je fais un LOAD "CASS:", le Basic envoie un ordre d'allumage alors qu'il est déjà allumé. Si je considère maintenant que le 1 vaut extinction, il faut tout inverser, et le Basic m'envoie donc un ordre d'extinction quand je lance le LOAD, le moteur étant déjà éteint.

Je n'ai pas de thomson avec lecteur de K7 à ma portée, mais il me semble que le lecteur de K7 est en mode extinction quand je passe au basic. Puis il s'allume quand je lance un LOAD. J'en conclue que les ordres d'allumage et d'extinction ne se font pas exactement en positionnant le bit 2 d'E7CA.

Une piste me ferait le plus grand bien. Y a t-il un connaisseur qui peut m'aiguiller?

Merci.
Daniel
Messages : 17395
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fonctionnement hard du LEP sur TO9

Message par Daniel »

Le moteur est contrôlé par la broche CA2 (broche 39) du PIA système (6821)
0 = MOTOR ON
1 = MOTOR OFF

Le fonctionnement du 6821 est assez complexe, il serait trop long de l'expliquer ici.
Il faut lire la datasheet, en particulier la fin de la page 8 et la page 10, qui décrivent les différents modes de fonctionnement de CA2.
http://dcmoto.free.fr/documentation/6821ds/index.html

Le comportement des TO est bien celui que tu décris :
- A l'initialisation de l'ordinateur le magnétophone ne tourne pas quand on appuie sur PLAY. Même comportement s'il n'est pas connecté.
- Pour démarrer le moteur, il faut donner un ordre : MOTORON, ou SKIPF, ou LOAD, ou SAVE etc.
Daniel
L'obstacle augmente mon ardeur.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Fonctionnement hard du LEP sur TO9

Message par Tomix »

Des news...

J'ai pris un peu de temps pour essayer d'implémenter la lecture hard du LEP sur mon émulateur.

Voilà ce que j'ai fait:
- Le moteur du LEP est activable par la ligne CA2. Cette ligne correspond en fait au bit 3 d'E7CA (valeur 8 ). Je pensais à la base que le 2 de CA2 signifiait "bit 2" mais c'était une erreur. Bref, quand le bit vaut 0, cela active le LEP. Et l'état 1 désactive le LEP.
- Je lis chaque octet d'un fichier .k7 en le décomposant en 11 bits. Avec 1 bit de start à 0, suivi des bits de l'octet dans l'ordre du plus faible au plus fort, puis de 2 bits de stop à 1.
- Je balance chacun des 11 bits tous les 1111 cycles sur le bit 7 d'E7C3 (en respectant bien sûr l'état d'allumage du lecteur)
- Sinon, quand le moteur est éteint, j'indique bien la présence du LEP

Voilà ce que ça donne:
- Le To9 émulé reconnait bien la présence du LEP
- Quand je lance un LOAD "CASS:", le basic allume bien le lecteur et je balance bien les bits tous les 1111 cycles, jusqu'au dernier octet du fichier .k7
- Problème: le Basic ne trouve rien sur la cassette émulée

J'ai tracé l’exécution à partir du LOAD. J'ai également décomposé les routines de la rom de mon To9. Je dois dire qu'elles sont quasi imbitables du premier coup d'oeil. Je me suis également inspiré des routines du To7 ci-avant. Et, malgré ça, je n'ai pas réussi à solutionner mon problème.
Comme je n'ai pas assez de temps pour creuser l'affaire, je reviens ici des fois qu'une petite feinte vous sauterait aux yeux.

Merci.
Daniel
Messages : 17395
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Fonctionnement hard du LEP sur TO9

Message par Daniel »

Comment l'émulateur génère-t-il les séquences de synchronisation et les espaces inter-blocs ?

Le fichier k7 ne contient ni les séquences de synchronisation, ni les espaces nécessaires entre les blocs pour permettre au programme de les traiter. Le problème vient certainement de là.
Daniel
L'obstacle augmente mon ardeur.
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Fonctionnement hard du LEP sur TO9

Message par Tomix »

L'émulateur ne génère rien car je pensais que le fichier .k7 était un bête dump des octets décodés de la cassette.
Du coup, comment je dois procéder pour combler les "trous"? J'aurai besoin de détails techniques.

Merci et Joyeux Noël.
__sam__
Messages : 7961
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Fonctionnement hard du LEP sur TO9

Message par __sam__ »

C'est le problème principal quand on doit ré-générer les WAV depuis un format K7. Dans le format K7 il n'y a pas des délais inter-blocs et ceux-ci peuvent être plus ou moins longs suivant le soft qui les lit (par exemple: ils sont bien plus long quand on sauve un programme BASIC en ASCII ou dans sa version tokenisée, parce que la re-lecture de l'ascii prend du temps en plus pour tokeniser les données).

Pour re-introduire ces délais, il faut procéder expérimentalement et typiquement permettre à l'utilisateur de le modifier au cas par cas suivant le programme qui exploite le LEP.

Tu peux trouver ici le code source d'un utilitaire que j'avais fait pour convertir les K7 en WAV. Il contient une machine à état qui ré-introduite les délais manquants du fichier K7 en ré-interprétant certains blocs. Cependant perso j'oublierais à présent cette option car il y a mieux!

En effet, Daniel a sorti un nouveau format le LEP qui contient tous ces délais (c'est un peu l'équivalent du format HFE mais pour cassettes), et qui donc évite de faire des hypothèses qui ne marcheront jamais complètement. Tu devrais peut-être faire lire un fichier LEP à l'émulateur au lieu du vieux fichier K7 qui ne contient pas toute les info.

Bonnes fêtes à toi aussi.
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
Tomix
Messages : 91
Inscription : 16 sept. 2012 15:20

Re: Fonctionnement hard du LEP sur TO9

Message par Tomix »

Merci __sam__. Je vais m'inspirer de ton automate d'états et on verra bien.
Du coup, est-ce que dcmoto procède de la même façon pour lire les fichiers .k7 et .k5?
Répondre