Mode graphique et mode texte du minitel

Je me suis documenté et renseigné, sur fagbl on ne peut pas faire du multifont, je vais transposé ce projet qui est paratiquement en C sur AgonLight qui en mode termibal peut gérer le multi font, de plus pour le clavier ca va m’arranger, plus besoin d’utiliser les virtualkey, c’est une plaie .

https://millevaches.hydraule.org/info/minitel/specs/norme.htm

0E et 0F pour semi graphique et normal

2 « J'aime »

Merci pour le lien .

Que cherches-tu à faire exactement ?

==> Une lecture attentive du STUM devrait te permettre de comprendre la norme (même s’il n’est pas toujours 100% clair sur certains détails).
==> Par la suite, le datasheet de l’EF9345 (ou 40/41 ou 47), conçu pour appliquer cette norme, t’éclairera sur le détail du pourquoi du comment, sachant qu’il n’exploite que 2Ko de RAM vidéo.

Dans tous les cas, on fait du « télétexte » - même si l’on mentionne des caractères « graphiques » ou un « mode graphique », tout est question de caractères, de jeux de caractères, et d’attributs.

1 « J'aime »

Je cherche a faire un émulateur minitel sur fabgl (terminal ) avec un esp32, plus exactement en utilisant uterm2-s.

Les pages texte seulement fonctionne bien, j’ai quelques problème de compéhension au niveau des attributs, la réinitialisation des attributs.

Comme je suis en train de décortiquer la STUM, même au niveau hexa des pages vidéotext, je vais surement y arriver.

Le problème c’est dès qu’il y a un caractère mosaic, il y a des petits problème sur l’écran, mais en fait je me suis aperçu, que sur des page vtx et MIEDIT, il des choses pas très logique,
comme je respect exactement le protocole, la page s’affiche suivant le protocole,

par exemple sur MIEDIT si on a:

Switch to mosaic characters
Set foreground color to red
Set background color to white
affichage d’un tiret _ (en mosaic c’est un carré) 0x5F
Switch to standard characters
Invert on
→ -> → SUIVEZ LA PETITE FLECHE
Invert off

Le résultat sur MIEDIT donne :
le texte → -> → SUIVEZ LA PETITE FLECHE en fond rouge et caractere blanc.

Mais dans la logique (ce que affiche mon émulateur), si je suis le protocole pas a pas, on a:

passage en mode mosaic
ecriture couleur rouge
fond en blanc
caractere souligné (0x5F) => le problème ici je voit un carré BLANC, ce qui est logique au lieu de rouge sur MIEDIT
mode inversé
affichage de la phrase
annulation de l’inverse

c’est comme si le mode inverse sur minitel inverse tous ce qui est avant, donc le carré devient blanc et non rouge car invert on est appelé après.

C’est peut être le protocole qui veut cela.

cela dit merci pour les explications, je vais essayé de regardé le datasheet de l’EF9345.

Le plus dur dans le protocole, je trouve que ce sont les attributs.

Le code FF et RS annule es attributs mais pour le CODE US c’est plus compliqué, je ne comprend pas très bien ce qu’ils disent dans la STUM,
Si la colonne est en 01 alors on annule les attributs.

Est-ce que tu as un vrai Minitel pour savoir qui a raison ? MIEDIT est vraiment un super émulateur mais comme tout programme il peut aussi avoir quelques petits bugs.

Pour envoyer la page videotext j’utilise un autre esp32 qui charge la page a partir d’une sd card, je lit ce fichier et j’envoi chaque octet, vers mon emulateur.

J’ai un minitel mais c’est justement ce pourquoi je fais un émulateur , car c’est encombrant et je n’est plus de place.

Je viens de tester sur emulplus sous dos, la page s’affiche bien, donc ca vient de l’emulateur.
Il faut que j’arrive a comprendre l’histoire de reinitialisation des attributs.

Apres je dois regler les accents, mais pour faire ceci je dois jongler avec les différentes font, il y 3 ou 4 tables G0, G1, G1bis G2, de plus j’ai remarqué que les tables des STUM ne sont pas les même que celle du datasheet EF9335.
Dans les STUM sur les tables il y a des colonnes ou il n’y a rien, et il n’y a pas la table des accents, sur le datasheet EF9345, les accents sont sur la table G0.

Alors, déjà, on va éviter de parler de ‹ protocole › - Le protocole, c’est tout à fait autre chose, avec des séquences ESC< 0x39 > < CommandePRO1 >, ESC< 0x3a > < CommandePRO2 > < Param1 >, ESC< 0x3b > < CommandePRO3 > < Param1 > < Param2 > qui n’ont pas de lien direct avec l’affichage.

Aussi, il serait plus clair de montrer les séquences en Hexa, avec éventuellement leur nom « officiel », en plus de leur « nom » MiEdit.

Donc, si je comprends bien, ta séquence (codes de tête mais dans l’idée, c’est ça) :

passage en mode mosaic < SO (Shift Out) > 0x0e
ecriture couleur rouge < ESC > A
fond en blanc < ESC > W
caractere souligné (0x5F) => le problème ici je voit un carré BLANC, ce qui est logique au lieu de rouge sur MIEDIT

===> Ici, en toute logique, tu devrais avoir un pavé 100% rouge - Tous les ‹ pixels › de ton caractère sont allumés, en conséquence, ils sont tous de la couleur caractère (rouge).

mode inversé
===> Ici, en principe, ça n’a aucun sens car tu es en mode graphique (Shift Out) - l’attribut inversé y est non significatif - Mais, il peut y avoir ici confusion, et certains Minitels/émulateurs peuvent se prendre les pieds dans le tapis lors du retour en mode texte et passer effectivement en mode inverse - ou non.

affichage de la phrase
===> Une phrase en mode graphique ???
Là, si tu sors du mode graphique (SI < 0x0f > Shift In), tu écriras, soit en rouge sur fond blanc, soit l’inverse, en fonction de ce qui aura été interprété avant.

annulation de l’inverse
==> Si quelque chose (permutation couleur de caractère/couleur de fond) change après, c’est que le mode inverse a précédemment été pris en compte … Légitimement ou non ?

en effet avant le mode inversé, il y a le mode texte SI 0x0F et apres le mode inversé et on écrit la phrase (fond rouge sur écriture blanc)

Après on annule l’inverse pour que l’on ne soit plus sur caractère rouge et fond blanc, après cela on recommence mosaique, foreground cyan, background black affichage 0x5F du mosaique etc … d’ou l’annulation de l’inverse avant.

uterm2-s sert de serveur pour le protocole et un esp32 ttgo T8 sert de client, c’est ce qui envoi la page qui est d’abord chargé sur une sd card, puis je boucle jusqu’à la fin du fichier pour envoyer les octets.

je viens de faire un test, ca fonctionne, j’ai bien le carré rouge, mais j’ai ajouté un delay pour envoyé chaque caractère au serveur (emulateur).

Comme ce n’est pas vraiment en réél avec un vrai minitel, il y a des problème de timming.
Je suis aussi obligé de faire un reset de uterm2-s avant de lancer la page videotext,

il doit surement rester des résidu d’attributs ou autres et parfois un caractère mosaique ne s’affiche pas ou s’affiche avant d’afficher une lettre en mode texte.

C’est le problème que j’ai actuellement, pour afficher le mot PAGE, à la place du E j’ai le caractère mosaique 0x65.
Le chargement de font se fait avant que le caractère s’affiche. car juste après le E de page un caractère mosaique noir doit s’afficher pour faire ffice d’espace.

C’est aussi un peu aléatoire, quand je lance le client pour envoyer la page ca fonctionne, si je relance apres, je retrouve le meme problème, caractère blanc, attributs qui ne passe pas etc …

En général, la plus part des pages videotext envoi un code FF 0x0C au tout début, c’est le premier code qui est envoyé, (reset all, attributs , couleurs pas défaut etc …).

Maintenant la page s’affiche a 95% correctement, excepté que j’ai un trait de soulignement avant le mot SUITE mais qui n’apparait pas sur MIEDIT.

Si je regarde les instructions


suivante, j’ai bien un caractère espace souligné.

Underline on
fond noir (plus haut foreground et en vert)
caractère ESPACE => donc en souligne
mode inversé
SUITE

J’y suis presque,
J’ai ajouté un fond magenta, et dans MIEDIT on voit bien le mot
SUITE afficher et un soulignement magenta, ce qui veut dire que dans mon cas il prend la couleur verte qui est défini plus haut avant le underline.

les


instructions plus haut:

Je pense avoir trouvé mais ca va me faire de la gymnastique au niveau des attributs,

sur un minitel le soulignement utilise la couleur de fond, dans un terminal normal, quelque soit, le soulignement utilise la couleur du caractère.

comme la couleur plus haut du caractère est verte, sur fabgl, ca souligne en vert.

[EDIT]
Ce n’est pas un caractère espace avec le TIDGETS String mais un TIDGETS Spaces(1) que je ne vois pas sur la liste, aucune idée de ce que c’est, peut être un caractère invisible.

En fait le TIDGETS Spaces() est créer une fois la page sauvegardée.
A la création avec MIEDIT c’est bien String, mais une fois exporté en .vdt et qu’ont recharge cette page, ca devient Spaces().

MiEdit peut avoir des bugs mais est globalement très fidèle.

De toute façon, il faut tester sur un Minitel pour être sûr, c’est la référence.

Écrire un émulateur fidèle est vraiment pas simple, surtout pour respecter les limite de la norme avec lesquelles ont jouait pas mal pour faire des trucs jolis.

C’est assez normal vu le fonctionnement de miedit.

À la création on a des fonctions évoluées, mais quand on decompile du code vidéotex il est quasi impossible de les retrouver.

1 « J'aime »

Merci pour ces informations