le minitel est de retour

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

Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

Papy.G a écrit : 10 févr. 2024 22:56 Page 22 à 24, avec un schéma pour le mode split (3).
Edit: Nous pourrons compléter le livret du PR Oumnad une fois éclairci ce point. :wink:

Oui, on verra alors ce qui est possible sur les deux architectures. :wink:
Tu as raison Papy.G, les timer 0 et 1 sont abordés à partir de la page 22.
Il faut aller, tout à la fin du document, dans le § VII.4 Définition de la vitesse de communication par Timer, pour les formules de calcul.

Je continue d'explorer les particularités du 80C32.
Je viens d'utiliser les booléens globaux dans la zone spécialement dédiée, adresses de 0x20 à 0x2F.
Voici la déclaration en C :
type_bit.jpg
type_bit.jpg (6.01 Kio) Consulté 863 fois
Cela permet d'économiser des octets dans la pile quand ils sont déclarés en local.
Mes 4 booléens locaux (4 octets) du clavier deviennent 1/2 octet en global "B", réservation à l'adresse 0x20 automatiquement.
addres_bit.jpg
addres_bit.jpg (13.67 Kio) Consulté 863 fois
Voici la légende du fichier "*.mem" => 0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute

L'octet dédié aux registres "T" s'est décalé automatiquement de 0x20 à 0x21.
Les "b" sont les octets dédiés aux bits, non affectés.
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

Bricox a écrit : 11 févr. 2024 08:35 En étudiant le Timer 2, la vitesse théorique de l'UART est à plus de 400 KBauds.
Voici le bilan des derniers développements et des tests de l'Uart du Minitel2 :
testUartMinitels.jpg
testUartMinitels.jpg (30.76 Kio) Consulté 804 fois
Le changement de débit, par raccourcis clavier, fonctionne... :D jusqu'à 37287 bauds vers Putty.
Il reste à tester :
- la liaison "Minitel2 Bro" à "Minitel1B Dom", en mode "Terminal", à 4800 bauds (encadrée dans le tableau).
- le Timer2 aux très hautes vitesses

J'envisage de porter le programme de Jeff sur le Minitel 1B RTIC qui semble être compatible en réalisant une adaptation du bus M1B RTIC (10+12) vers le format DIP40 du Minitel2.

De son coté, ZamZam progresse bien sur l'interface Uart/Wifi, mais galère plus sur l'interface Uart/Ethernet.
Dernière modification par Bricox le 24 févr. 2024 08:38, modifié 2 fois.
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

"Il reste à tester : la liaison "Minitel2 Bro" à "Minitel1B Dom", en mode "Terminal", à 4800 bauds (encadrée dans le tableau)."

Les 1ers essais étaient presque concluants, mais avec, en gros, un caractère, sur 2, converti en un carré blanc.
Le terminal du Minitel a pour protocole : 7 bits de données, 1 bit de stop, parité paire.
La doc du 8051 indique qu'il faut mettre à 1 le bit 0 du registre PSW, c'est un registre adressable par bit.
La syntaxe, en C, est simplement : "P=1;"

Voici une doc très détaillée sur la Téléinformatique : https://dept-info.labri.fr/~felix/Annee ... et%20I.pdf
En particulier, la notion de parité :
1.5.2.2 Parité transversale (ou verticale) :
L'information est sectionnée en blocs de m bits qui sont généralement des caractères, et on ajoute à chaque bloc un bit de parité (r=1) de telle sorte que la somme des m+1 bits modulo 2 soit nulle (parité paire) ou égale à 1 (parité impaire).
Exemple d'envoi de 4 caractères de longueur 3 (m=3).
Information utile___ : 110_ 001_ 011_ 000_,
Information envoyée : 1100 0011 0110 0000.
Ce contrôle, appelé VRC (Vertical Redundancy Checking), détecte les erreurs simples et toutes celles qui sont d'ordre impair, et ignore les erreurs doubles et toutes celles qui sont d'ordre pair (la distance de Hamming de ce code est 2).
Et un autre § sur le codage Vidéotex :
Code Vidéotex, il comprend 3 alphabets :
• G0 : ASCII,
• G1 : graphique alphamosaique
• G2 : caractères accentués et spéciaux.
Ses capacités sont étendues par des "attributs" graphiques.
Il existe en outre des codes de longueur variable (code Morse, Code de Huffman).
Je vais expérimenter tout cela... :)
Dernière modification par Bricox le 24 févr. 2024 14:59, modifié 4 fois.
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Avatar de l’utilisateur
Dynaroo
Messages : 524
Inscription : 25 juil. 2020 00:06
Localisation : Sud 77

Re: le minitel est de retour

Message par Dynaroo »

Si le Minitel communique en 7 bits, cela confirme qu'il est à la norme ASCII pour laquelle seuls les 128 premiers caractères sont supportés, ceux de 0x00 à 0x7F.
Les caractères affichables sont compris entre 0x20 et 0x7E, soit 95 caractères sur 128, le reste sont les caractères de contrôle, donc non-affichables.
ASCII
ASCII
ascii.png (153.92 Kio) Consulté 779 fois
Hacker vaillant, rien d'impossible !
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3054
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: le minitel est de retour

Message par Papy.G »

Tu n'as pas lu les docs pour lesquelles tu nous a mis des liens, ce n'est pas de l'ASCII, mais CEPT ou ISO ou CCITT jenesaisquoi, il y a cependant des similitudes et une certaine compatibilité. Il y a, de plus, des codes pour des caractères alternatifs, comme les accentués, le C cédille…
ZamZam a écrit : 16 févr. 2024 06:16Nous avons en projet d'ajouter des fonctions au minitel par la liaison série, mais piloté par le minitel. Nous avons acheté plusieurs modules … qui … permettront de communiquer avec l'extérieur par la liaison série.
Pourquoi ne pas prendre des modules à communication "parallèle" et les rendre adressables en mémoire, pour alléger la charge du µC?
Bricox a écrit : 16 févr. 2024 13:47Vous pouvez également utiliser des supports DIP, "EJECT-A-DIP", marque ARIES, modèle 28-C182-10, à pattes standards :
Pas mal ces supports en alternative aux ZIF, merci de nous partager cela, je n'avais personnellement aucune idée que cela se faisait.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

Dynaroo a écrit : 23 févr. 2024 23:14 Si le Minitel communique en 7 bits, cela confirme qu'il est à la norme ASCII pour laquelle seuls les 128 premiers caractères sont supportés, ceux de 0x00 à 0x7F.
Les caractères affichables sont compris entre 0x20 et 0x7E, soit 95 caractères sur 128, le reste sont les caractères de contrôle, donc non-affichables.
ascii.png
Je vois que tu utilises Okteta pour ton fichier de tous les codes ascii avec visu en mode "US-ASCII".
Peut-être que tu peux le passer en mode "Minitel"... et poster la copie d'écran.
Merci d'avance
J'apprécie de communiquer avec un aspi, quelle richesse de bénéficier d'un mode de pensée différent et bienveillant ! :D
Dernière modification par Bricox le 24 févr. 2024 08:58, modifié 2 fois.
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

Papy.G a écrit : 24 févr. 2024 01:37 Tu n'as pas lu les docs pour lesquelles tu nous a mis des liens, ce n'est pas de l'ASCII, mais CEPT ou ISO ou CCITT jenesaisquoi, il y a cependant des similitudes et une certaine compatibilité. Il y a, de plus, des codes pour des caractères alternatifs, comme les accentués, le C cédille…
ZamZam a écrit : 16 févr. 2024 06:16Nous avons en projet d'ajouter des fonctions au minitel par la liaison série, mais piloté par le minitel. Nous avons acheté plusieurs modules … qui … permettront de communiquer avec l'extérieur par la liaison série.
Pourquoi ne pas prendre des modules à communication "parallèle" et les rendre adressables en mémoire, pour alléger la charge du µC?
Bricox a écrit : 16 févr. 2024 13:47Vous pouvez également utiliser des supports DIP, "EJECT-A-DIP", marque ARIES, modèle 28-C182-10, à pattes standards :
Pas mal ces supports en alternative aux ZIF, merci de nous partager cela, je n'avais personnellement aucune idée que cela se faisait.
Merci de me redonner le lien qui contient cette table "Minitel"

ZamZam et moi, n'avons pas encore trouvé le "mapping mémoire" d'un minitel pour un mode //, merci de nous indiquer qques liens... :D

Les connecteurs ZIF génèrent, avec le temps, des faux contacts, bien plus qu'avec les contacts "Tulipe".
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Avatar de l’utilisateur
Dynaroo
Messages : 524
Inscription : 25 juil. 2020 00:06
Localisation : Sud 77

Re: le minitel est de retour

Message par Dynaroo »

Bricox a écrit : 24 févr. 2024 08:32 Je vois que tu utilises Okteta pour ton fichier de tous les codes ascii avec visu en mode "US-ASCII".
Peut-être que tu peux le passer en mode "Minitel"... et poster la copie d'écran.
Merci d'avance
J'apprécie de communiquer avec un aspi, quelle richesse de bénéficier d'un mode de pensée différent et bienveillant ! :D
Passer Okteta en mode Minitel risque d'être un peu + compliqué.
Je pense qu'un terminal série de type Minicom ou Cutecom serait nettement mieux approprié.
Mon autre idée en parallèle (mais aussi en série !!!), c'est de faire afficher des pages Vidéotex en couleur sur tv crt via liaison péritel RVB.
Hacker vaillant, rien d'impossible !
Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

Parité "Paire" (Even) et alphabet "G2" pour les caractères accentués français, je vais expérimenter tout cela... :)
L'accès au jeu de caractères "G2" est décrit, en page 42, de cette doc : https://wiki.labomedia.org/images/a/ad/STUM2.pdf
Il faut faire précéder le caractère accentué ASCII par la commande SS2.
Cette commande vaut 0x19.
ZamZam a eu l'idée d'utiliser un "émetteur COM" pour mettre au point les échanges de Téléinformation.
Nous avons utilisé "XCom 2.6" car il possède un mode "Send" en hexadécimal : "Hex Send".

Voici un exemple de l'envoi du caractère 'é'.
Il faut envoyer 2 octets : 0x19 et 0x7B (code ascii hexa de 'é') dans le "Jeu Français".
xcom_accent.jpg
xcom_accent.jpg (56.13 Kio) Consulté 685 fois
Remarque : 0x0D et 0x0A sont ajoutés, en auto, par XCom.

Comme tout fonctionne à merveille, il ne reste plus qu'à gérer ce mode dans le code de mon pg en C... :)
Dernière modification par Bricox le 26 févr. 2024 20:22, modifié 2 fois.
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

Comme tout fonctionne à merveille, il ne reste plus qu'à gérer ce mode dans le code de mon pg en C
Plaisanterie !
"il ne reste plus qu'à"... une vraie galère... :D

Le hardware de l'Uart du 8051 ne gère pas le mode 7-bit en parité "Paire" (Even).
Il faut, au départ, le configurer en mode 8-bit, sans parité.
Puis, il faut ajouter une couche "logiciel" pour transformer le bit de poids fort en bit de parité.
Le plus rapide est d'écrire une fonction en assembleur ou semi-assembleur+C.
J'ai trouvé ce code que j'ai adapté et commenté en français : https://www.8051projects.net/t63403/805 ... on-7e1.htm.

Code : Tout sélectionner

void UART_Tx7pChar(char *ch){ // https://www.8051projects.net/t63403/8051-discussion-forum/uartrs232-implementation-7e1.htm
   ACC=*ch;             // octet vers registre ACC pour la modification éventuelle du bit 7 de parité
   __asm
      clr c             ;              // analyse bits dans carry
      mov r0, #0        ;              // index bit début
      mov r1, #8        ;              // index bit fin
   Loop:
      DJNZ r1, end_loop ; 7ème bits ?  // pour quitter l'analyse
      mov r2, A         ; R2=ch        // pour traitement
      RRC A             ; c=LSB(acc)   // pour test
      JNC Loop          ; if(c==1)     // uniquement bit suivant
      inc r0            ; r0++         // increment bit du compteur
      sjmp Loop         ; else         // bit suivant
   end_loop:
      mov A, r0         ;              // test du compteur de bit à 1
      anl A, #1         ; if(LSB==1){  // impaire ?
      JNZ finish        ; }            // pas de correction    
      mov A, r2         ; else {       // paire ? préparation de correction
      anl A, #128       ; }            // correction : bit7=1
   finish:
   __endasm;
   *ch=ACC;                            // Envoi de l'octet paire
}
il a fallu que je transforme "anl A, #80H" en "anl A, #128" car SDCC me générait une erreur pour la constante en hexa.
Voici l'utilisation de la fonction :

Code : Tout sélectionner

#define UART_7P

#ifdef UART_7P
   #define UART_TXC(c) {UART_Tx7pChar((&c));UART_TXF((c));} // 7 bit + parité Paire(Even) => 7,p ou 7,e 
#else
   #define UART_TXC(c) {                    UART_TXF((c));} // 8 bit + sans parité(None)  => 8,n
#endif
Je renouvelle mes remerciements à __sam__ pour la facilité de publication de bouts de codes (snippet) et à Fneck pour le temps consacré.
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

Bricox a écrit : 18 févr. 2024 16:12 Un grand MERCI à @Dom qui nous a, très gentiment, donné son M1B RTIC.
ZamZam a analysé les 2 connecteurs du PCB "logique" (10br et 12br) à broches carrées et au pas de 2.54 mm.
Nous n'avons pas encore trouvé la marque et le modèle de ces 2 connecteurs, n'hésitez pas à nous transmettre toutes infos utiles.

Surprises ...
C'est non seulement la possibilité d'ajouter une EPROM additionnelle ET ...
Un bus d'extension permettant toutes les opportunités déjà vues et imaginées avec le Minitel2.
busM1B_RTIC.jpg
L'adaptateur "Bus M1B RTIC vers Bus M2" commence à prendre forme...

- Connexions en mode "chevelu", coté soudures :
CheveluPcbAdaptateurBusM1B-RTICversBusM2.jpg
CheveluPcbAdaptateurBusM1B-RTICversBusM2.jpg (100.53 Kio) Consulté 528 fois
- PCB, avant soudure des fils (même géométrie que le "chevelu") :
PhotoPcbAdaptateurBusM1B-RTICversBusM2.jpg
PhotoPcbAdaptateurBusM1B-RTICversBusM2.jpg (69.99 Kio) Consulté 528 fois
N'ayant toujours pas identifié la marque et le modèle des 2 connecteurs, j'ai utilisé simplement 2 connecteurs "Dupont".
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Avatar de l’utilisateur
Dom
Messages : 10
Inscription : 08 janv. 2024 22:31
Localisation : Ile-de-France

Re: le minitel est de retour

Message par Dom »

Je suis très heureux de voir que mon minitel 1 sert enfin à quelque chose !
J'attends les épisodes suivants avec impatience 😉
Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

Comme tout fonctionne à merveille, il ne reste plus qu'à gérer ce mode dans le code de mon pg en C
Je ne suis pas parvenu à mettre en œuvre le bout de code en assembleur, car je n'ai pas encore assez d'expériences (sauvegarde et restauration des registres).

Je l'ai donc écrit totalement en C :

Code : Tout sélectionner

void UART_Tx7pChar(char *ch){ 
   volatile char cpt=0;
   volatile char oc=*ch;         // octet vers registre ACC pour la modification éventuelle du bit 7 de parité
//UART_TxRetr();
   for(int pBit=0;pBit<7;pBit++){               // Parcours des 7 bits de données
      if((oc&1)==1)cpt++;                       // Compte les bits à 1
//SBUF=cpt+0x30;while(!TI);TI=0;UART_TXK(0x20);
      oc/=2;                                    // Décalage des bits
//SBUF=oc;while(!TI);TI=0;UART_TxRetr();
   }
   if((cpt&1)==1)*ch+=0x80;                     // Correction de l'heptet impaire (7-bit)
}
Voici mon mode "trace" du clavier en exploitant l'uart vers Putty, avec les infos suivantes :
- le N° de ligne du clavier
- le code ASCII en "8-bit,n"
- le caractère
- le code ASCII en "7-bit,p"

Code : Tout sélectionner

KB : Lg=1 8n:0x61 a 7p:0xE1
KB : Lg=6 8n:0x62 b 7p:0xE2
KB : Lg=9 8n:0x63 c 7p:0x63
KB : Lg=9 8n:0x64 d 7p:0xE4
KB : Lg=8 8n:0x65 e 7p:0x65
KB : Lg=7 8n:0x66 f 7p:0x66
KB : Lg=6 8n:0x67 g 7p:0xE7
Il y a bien un ajout de 0x80 (bit de parité) quand le nombre de 1s des 7 bits de données est impaire.
Dernière modification par Bricox le 03 mars 2024 14:46, modifié 1 fois.
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Bricox
Messages : 88
Inscription : 25 janv. 2024 10:28

Re: le minitel est de retour

Message par Bricox »

Dom a écrit : 03 mars 2024 13:37 Je suis très heureux de voir que mon minitel 1 sert enfin à quelque chose !
J'attends les épisodes suivants avec impatience 😉
Ha oui @Dom, j'essaie d'en profiter pour voir ce qu'il a dans les "tripes"... :D

ZamZam et moi, avons une nouvelle idée :
Mettre en œuvre un type de mémoire peu connue, la F-RAM (Ferro-RAM) qui maintient ses données par ses propriétés magnétiques.
Ceci permet de l'utiliser comme ROM et/ou comme RAM.
Nous utilisons le programmateur d'EPROM pour "flasher" cette RAM, mais à l'avenir, nous pourrions utiliser un "Moniteur" ou "Bootloader" pour réaliser cette fonction.
Le monde a plus besoin d'artisans, d'entrepreneurs, de créateurs que de prédicateurs et de procureurs
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: le minitel est de retour

Message par hlide »

Précision, la FRAM qui semble agir comme une SRAM non volatile, a une différence à prendre en compte : si la ROM que l'on souhaite remplacer a un besoin impératif que toute donnée présentée soit à jour dès le changement d'adresse et non sur la remontée de /CE ou /OE, alors la FRAM ne fonctionnera pas dans ce mode. J'ai une CGROM (ROM contenant un jeu de caractères texte) qui a son /CS à la masse et compte donc sur le changement de l'adresse pour présenter l'octet correspondant : j'ai vite abandonné l'idée de mettre une FRAM à la place.
Répondre