Programation [Minitel] (encore!)

Si vous n'avez pas trouvé de catégorie correspondante ci-dessus, regroupe les discussions plus générales sur des matériels du genre pocket / PDA, sur des Minitel / terminaux, sur des accessoires, sur des systèmes de stockage et à l'occasion peut aussi abriter un fil sur les vieilles consoles de jeux.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
telec
Messages : 44
Inscription : 11 févr. 2015 21:16

Programation [Minitel] (encore!)

Message par telec »

Bonjour(soir) !
Si je crée un autre sujet, c'est que je fais les choses différemment de Papy G., et que je ne voudrais pas encombrer le sien.

J'ai actuellement un Minitel Telic Alcatel, dont j'ai remplacé le 8052 par un PIC16F1518. Je peux lire le clavier et communiquer via le port série, mais il me manque quelques données pour pouvoir afficher quelque chose (et enlever le bip continuel du EF9345 non-configuré...).

Alors, sur ce que j'ai pu trouver sur ce forum (super, au passage !), on peut parler directement au EF9345 a partir du 8052, notamment avec movx @DPTR,A, mais je dois recoder cette fonction sur mon Pic, et quand je regarde la doc, je vois qu'elle se sert de deux ports (alors qu'il n'y en a qu'un seul de lié, non ?) et c'est là où je bloque : Comment communiquer avec le EF9345 ?
Aussi, je ne comprend pas bien comment adresser un registre, je ne vois pas comment faire dans la doc... Par exemple, si je veux envoyer 0x65 dans R1, je m'y prend comment ?

Merci d'avoir lu !

Et au passage, je code en C, si c'est important.
Avatar de l’utilisateur
6502man
Messages : 12312
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Programation Minitel (encore!)

Message par 6502man »

J'avais commencé des explications sur la programmation du EF-9345 ICI

Tu veux placer $65 en R1 avec le 8052.
Le mnemo du 8052 movx @DPTR,A permet d’écrire en RAM externe ayant une adresse (16 bits) contenu en DPH et DPL :wink:

Quand tu veux que l'EF-9345 prenne en compte tes valeurs de registres tu ne dois pas oublier t'envoyer la commande EXEC.

Et a savoir: c'est que il y a une copie des registres du EF-9345 en RAM du 8052 (de R0 à R7) l'EF-9345 rafraichi ces registres en fonction des valeurs présentes à ces emplacements RAM ($8020-$8027).
Je pense que Papy.G pourra donner des explications plus précises du côté électronique, vitesse de rafraichissement, occultation ou pas ....

Donc tu dois simuler ce fonctionnement.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
telec
Messages : 44
Inscription : 11 févr. 2015 21:16

Re: Programation Minitel (encore!)

Message par telec »

C'est justement sur tes explications que je me base pour "traduire" le code 8052 vers Pic, par exemple :

Code : Tout sélectionner

mov DPH,#80h
mov DPL,#21h
mov A,#29h
movx @DPTR,A
mov DPH,#80h
mov DPL,#28h
mov A,#VDP_MAT
movx @DPTR,A
Là si j'ai bien compris, tu te places à l'adresse 0x8021 pour envoyer 0x29, puis tu vas à 0x8028 pour envoyer VDP_MAT.
Donc, concrètement, comment ça ce passe au niveau communication ?
J’imagine que deux triplets d'octets sont envoyés (0x21, 0x80, 0x29 puis 0x28, 0x80, VDP_MAT), mais ce que je n'arrive pas à déterminer c'est comment ?
Dans la doc du EF9345, ils n'expliquent que pour envoyer deux octets : l'adresse et la donnée, mais là l'adresse fait deux octets !

Merci en tout cas pour ta réponse rapide !
Avatar de l’utilisateur
6502man
Messages : 12312
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Programation Minitel (encore!)

Message par 6502man »

Euh ca risque de ne pas être aussi simple :roll:

Dans un premier temps quel est l'implantation des pins de ton PIC sur le support du 8052 ?

Movx @DPTR utilise le port 2 il me semble pour écrire dans la RAM externe ?

Ensuite le VDP doit aussi accéder à la RAM externe du 8052 pour lire la recopie des registres du EF-9345 !!!
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
telec
Messages : 44
Inscription : 11 févr. 2015 21:16

Re: Programation Minitel (encore!)

Message par telec »

C'est pour ça que ça va être sympa :)

J'ai le Port A sur le port Address/Data, le Port B sur la sortie du clavier, et le Port C est partagé entre AS, DS, R/W (CS est relié à la masse) et le clavier/port série.

C'est justement parce qu'il utilise 2 ports que ça me gène, comme de base il n'y en a qu'un seul de relié au EF9345 (je n'ai pas de carte fille sur ce modèle).
Avatar de l’utilisateur
6502man
Messages : 12312
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Programation Minitel (encore!)

Message par 6502man »

Le port A point sur quoi ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
telec
Messages : 44
Inscription : 11 févr. 2015 21:16

Re: Programation Minitel (encore!)

Message par telec »

En fait j'ai enlevé le 8052 pour le remplacer par un pic, et le port A de mon pic je l'ai relié au port Adresse/Donnée du EF9345.
Mais après sur le pic il n'y a pas de communication parallèle (enfin du moins j'en ais pas vu), donc sont implantation n'est pas très importante... A moins que je n'ai pas compris la question ?
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3051
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Programation Minitel (encore!)

Message par Papy.G »

Bonsoir, et bienvenue.
Ta démarche est somme toute la plus proche qui soit de la mienne, par rapport à tout ce que l'on peut voir sur le net à ce sujet. ;)
T'as un modèle sans carte-fille rom, tu dois adresser l'EF9345 en h2x, sur un bus huit bits multiplexé, le CE est tout le temps activé.
En gros, les huit adresses de registre sont à suivre de h20 à h27 pour R0 à R7, tu y ajoutes 8 (bit de demande d'exécution de commande), ce sont les registres à accès direct.

Houlà! Par contre, si ton PIC n'a pas d'accès mémoire prévu et seulement trois ports huit bits, c'est tendu et très lent, il va te falloir simuler broche à broche, à la place d'un 8052, j'aurais mieux vu un ARM, mais après tout, pourquoi pas...
Donc, tu dois relier les broches de gestion de mémoire, et mettre sur ton port l'octet adresse, mettre bas ALE, puis mettre l'octet donnée, puis mettre bas la broche d'écriture un truc dans le genre (jettes un œil aux diagrammes temporels d'accès mémoire dans les docs du 9345 et/ou 8052).

Pour le bip, c'est la broche insertion qui pilote, tu mets insertion caractère par caractère, ou surimpression, et tes caractères ne doivent pas être insérés individuellement, et n'oublies pas de ne pas activer l'insertion de la zone hors affichage (oui, c'est possible).

6502man> On doit systématiquement exécuter, juste pour écrire une valeur dans les registres à accès direct? :?

En fait, j'ai dû mal m'exprimer, il n'y a pas une copie des registres du 9345, mais l'accès à ces registres apparaît dans l'espace d'adressage RAM du 8032 quand il y a carte-fille rom, car c'est la ligne A15 qui active le CE du 9345, dans le modèle sans, le 8052 accède sur huits bits seulement, le CE du 9345 étant tiré à la masse par un shunt. Les 8032/52 n'ont pas d'espace d'adressage IO réservé, comme certains processeurs.

Désolé si je suis un peu lapidaire, panne d'internet, et je suis dans ma voiture auprès d'un hotspot, j'ai pas mes docs sous la main.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
6502man
Messages : 12312
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Programation Minitel (encore!)

Message par 6502man »

Papy.G a écrit :6502man> On doit systématiquement exécuter, juste pour écrire une valeur dans les registres à accès direct?
Sauf erreur mais si on écrit des valeurs dans des registres tant que l'on a pas "exécuter" elles ne seront pas validées par l'EF-9345 il me semble.
Après il faudrait faire des tests pour vérifier le comportement sur le minitel !!!

Oui effectivement sans carte fille il n'y auras pas la copie des registres dans le 8032/8052 :roll: :wink:

Merci papy.G pour ces précisions.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3051
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Programation Minitel (encore!)

Message par Papy.G »

Ok, mais il conserve ce que l'on écrit en R1, avant une commande indirecte, par exemple, sans que l'on demande une exécution?
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
6502man
Messages : 12312
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Programation Minitel (encore!)

Message par 6502man »

Je pense que tant que l'on écrit rien à la place en R1 il doit conserver la valeur, mais il faudrait faire des tests pour en être sur :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
telec
Messages : 44
Inscription : 11 févr. 2015 21:16

Re: Programation Minitel (encore!)

Message par telec »

Bonjour, et merci !
Papy.G a écrit :En gros, les huit adresses de registre sont à suivre de h20 à h27 pour R0 à R7, tu y ajoutes 8 (bit de demande d'exécution de commande), ce sont les registres à accès direct.
Grâce à ça j'ai enfin compris la doc (http://pdf.datasheetcatalog.com/datashe ... s/1783.pdf, page 33) !

Juste pour être sûr d'avoir compris, si je veux mettre la valeur X dans R1, puis Y dans R0, et enfin exécuter, je dois faire :
Envoyer l'adresse (0x21)
Envoyer X
Envoyer l'adresse (0x20+0x08)
Envoyer Y
Envoyer l'adresse (0x20)
Lire Busy

Je vais tester tout ça !

Et encore une fois merci à vous ! Je sens que je vais rester ici, même si ma contribution sera plutôt faible (un TO7-70, une Atari 7800, et une snes). :D

Je poste mon code d'écriture, si ça intéresse quelqu'un (testé, ça marche):

Code : Tout sélectionner

void writeByte(byte addr, byte data)
{
    //Preset
    TRISA=0x00;
    GRRW=1;
    GRDS=1;
    //Write Addr
    GRAS=1;
    LATA=addr;
    _delay_us(1);
    GRAS=0;
    //Write Data
    _delay_us(1);
    GRRW=0;
    LATA=data;
    _delay_us(1);
    //Reset
    GRRW=1;
    GRAS=1;
}
byte readByte(byte addr)
{
    byte data;
    //Preset
    TRISA=0x00;
    GRRW=1;
    GRDS=1;
    //Write Addr
    GRAS=1;
    LATA=addr;
    _delay_us(1);
    GRAS=0;
    //Read Data
    TRISA=0xFF;
    _delay_us(1);
    GRDS=0;
    _delay_us(1);
    data=PORTA;
    //Reset
    GRDS=1;
    GRAS=1;

    return data;
}
void waitBusy()
{
    while(readByte(GR_R0)&0x80);
    return;
}
EDIT:
Page 35 a écrit :Register access with XQR = 0
- Read STATUS is effective.
- Write COMMAND or any other register access
are ineffective.
Register access with XQR = 1
- Read STATUS or write COMMAND are effective,
- Access to other registers is ineffective.
Euh, là ils ne disent pas que le seul registre accessible c'est R0 ?
A moins que ce qu'ils entendent par "any other register" ce soit les registres internes ?

EDIT2:
ça marche !
Bon, je n'arrive pas à configurer correctement l'affichage (syncro, entrelacement, ...), mais j'arrive à communiquer avec lui !
D'ailleurs, j'envoie le bit d’exécution seulement à la fin (pas à chaque modification), et ça ne semble pas poser problème.
Avatar de l’utilisateur
6502man
Messages : 12312
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Programation Minitel (encore!)

Message par 6502man »

Oui c'est ca tu envoi à la fin le code d’exécution (+$08), pas la peine de l'envoyer à chaque commande.

pour l'affichage il faut que tu définisse complétement tous les registres MAT, PAT, DOR, ROR ...
Après tu pourra afficher du texte comme tu veux.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
telec
Messages : 44
Inscription : 11 févr. 2015 21:16

Re: Programation Minitel (encore!)

Message par telec »

Le problème, c'est que je sais comment définir, mais je ne sais pas quoi définir... Je ne trouve pas les spécifications de l'écran...
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3051
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Programation Minitel (encore!)

Message par Papy.G »

321 Lignes Progressif (non entrelacé), à priori, pas encore eu le temps de programmer ma séquence d'initialisation, mais comme on arrive à afficher le signal sur une télé (en couleur, en plus!), je ne vois que ce mode. :wink:
Et si ça ne marche pas, bah, essaye en entrelacé, tu verras bien. :mrgreen:

Le passage page 35 est mieux explicité dans la version de mars 1995 (lien que j'ai donné dans mon topic), mais j'ai du mal à le comprendre aussi.
A moins que la demande d'exécution ne puisse se faire que lors de l'envoi de commande, ce qui semble normal, inutile de demander l'exécution de l'écriture dans les registres à accès directs, puisque c'est déjà l'état de la broche dédiée qui définit que tu y écris ou que tu les lis (ou deux broches, selon le standard d'interface mémoire).

Le bit d'exécution en dernier, une fois que toutes les valeurs ont été chargées, c'est comme cela qu'il faut faire, à mon avis, j'ai posé la question à 6502man de façon un peu naïve, je me doutais de la réponse.
D'ailleurs, les valeurs restent dans les registres, sauf contre-indication, par exemple, en mode 24 bits, si tu veux passer deux caractères à suivre avec les mêmes attributs, tu n'a qu'un octet à changer (code "ASCII") avant d'envoyer KRV, c'est une source d'économie.

Pour le buzzer, il y a un ou deux topics remontés récemment sur la musique un bit, en faisant basculer l'insertion de la zone d'affichage et hors affichage à une certaine fréquence, tu devrais arriver à obtenir un son.

J'ai rien compris à ton code, je vais me pencher sur le mien, et vois ce que ça donne, si je me plante pas en programmant mon EEprom (à la main). :shock: :lol:
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Répondre