Présentation de NathaanTFM (+ émulateur minitel)

Hello, j’ai pas l’habitude de me présenter mais puisque je centre pas mal de mes projets perso autour du Minitel, autant le faire

Je m’appelle Nathan, j’ai 21 ans (donc je n’ai pas connu le Minitel), je suis étudiant en informatique en première année de Master, mais passionné depuis pas mal plus de temps. J’ai découvert le Minitel quand j’étais au collège : il y en avait un exposé dans une salle de techno. C’était un Minitel 1 (celui qui ressemble au 1B), dans mes souvenirs.

Je m’intéresse beaucoup au Minitel pour 2 raisons : découvrir, et apprendre. C’est peut-être pas une technologie moderne, ni non plus utilisée, mais ça reste un support pour découvrir l’électronique (le premier composant que j’ai dé-soudé, c’était le processeur du Minitel, et c’est aussi la première ROM que j’ai pu dump).

Ma philosophie, c’est plutôt de construire autour de ce qui existe :
→ implémenter autour des Minitel existants : que ça soit par l’intermédiaire de la prise périphérique, ou par la création d’un PAVI en VoIP (même si un modem physique a son charme, bien trop coûteux à maintenir…)
→ si possible, fabriquer des appareils compatibles avec le protocole du Minitel : que ça soit des émulateurs ou des modems software…

Dans les projets que j’ai autour du Minitel que j’aimerai développer ou achever, j’ai :
→ le développement d’un PAVI en VoIP, que ça soit en V.23 ou en TVR, qui se présenterait sous forme d’un exécutable indépendant (voire un service) qui redirige les connexions vers d’autres programmes (via un sous-processus et/ou un socket, qu’importe !)
→ l’analyse statique voire dynamique des ROM du Minitel (il est possible de cadencer les puces du Minitel 1B à la vitesse qu’on veut, c’est peut-être pas impossible d’utiliser un microcontrôleur assez rapide pour récupérer la sortie vidéo et l’envoyer à un PC par exemple), dans le but d’écrire un émulateur fidèle (à la HxC2001)
→ le projet le plus fou, que j’ai déjà mentionné dans un autre sujet : construire un Minitel autour d’une Nintendo DS. J’ai déjà développé ma propre cartouche DS avec un microcontrôleur, il faudrait ajouter un modem et écrire une ROM pour permettre la fonction Minitel à une Nintendo DS. Mais vu que les puces modem sont assez coûteuses, il faudrait en construire une autour d’un microcontrôleur et faire un circuit d’amplification de signal… encore du boulot !

Un peu de self-promotion : j’ai mon site sur https://www.nathaan.com

4 « J'aime »

Bienvenue et encore merci! :slight_smile:

Intéressante ton idée d’émulateur Minitel pour DS. Lors d’une conférence, j’ai vu un prototype d’émulateur Minitel pour Game Boy.

Cordialement.

Je poste ça là pour pas créer un énième sujet

image

Émulation (et pas recréation) du Minitel sur Nintendo DS. Très mauvaise performance (parce-que c’est de l’émulation du contrôleur 8051 et que mon émulateur n’est pas optimisé et que la DS est lente).

L’écran est de 256x192 comparé au 320x250 du Minitel, donc j’ai du bazarder des lignes et des colonnes pour garder un rendu net. La meilleure solution serait de faire un charset spécial plus adapté (et de recréer le code plutôt que de l’émuler)

2 « J'aime »

C’est déjà du très beau travail.

Puis-je le tester sur ma vraie DS?

Cordialement.

Il n’y a pas grand chose à tester pour le moment - puis de toutes façons je pense que l’émulateur ne sera jamais assez performant pour la console (qui est cadencée à 67 MHz alors que le processeur du Minitel est à 11 MHz. Même si on pourrait considérer qu’on puisse diviser la fréquence du 8051 par 12, ça revient à maximum 72 instructions par instruction 8051. Ça me paraît peu faisable (du moins, sans tricher sur certaines parties ou sans préparer la ROM en amont)


J’ai porté l’émulateur Minitel (GitHub - NathaanTFM/minitelemu: Minitel emulator, with 8052AH and EF9345 support) en C, puis je l’ai compilé pour WebAssembly. Chrome semble être plus rapide que Firefox pour ça.

Le clavier est partiel (caractères et chiffres uniquement, LCTRL et LSHIFT si je me trompe pas),
[ALT GR] correspond à [Connexion/Fin]
[TAB] correspond à [Fnct].

https://nathaan.com/minitel/emulateur/minitel.html


J’ai modifié l’émulateur (tout est sur GitHub de toutes façons) pour ajouter le mode 80 colonnes (support partiel).

3 « J'aime »

On va pouvoir en causer …

Je suis en train de me battre avec l’EF9345 pour comprendre certains « détails » de son fonctionnement. Des trucs peu utiles pour le Minitel, mais quitte à écrire un émulateur, autant le rendre le plus fidèle possible.

(Là je regarde les cas où les caractères en taille double ne sont pas répétés…)

Oh la la !

Les docs recommandent de ne pas jouer avec ça ! (et on peut s’attendre à des différences de comportement entre processeurs).

Ce que je comprends [double hauteur] :

  • Il y a 1 bit par colonne représentant l’état ‹ double hauteur › de la ligne de texte précédente
  • Ce bit est mis à 0 sur toutes les colonnes lors du retour de balayage
  • Sur une ligne de texte, si un caractère a un attribut double H, on regarde l’état du bit correspondant à la colonne :
    • S’il est à 0, on le met à 1 et on affiche (en double H) la partie haute du caractère de cette colonne
    • S’il est à 1, on le met à 0 et on affiche (en double H) la partie basse du caractère de cette colonne
  • ==> Vérifier le comportement en ligne 24 si un demi caractère haut peut s’afficher

Pour la double largeur, comportement similaire avec un seul bit

  • Mis à zéro lors du passage en première colonne
  • Si un caractère a un attribut double L, on regarde l’état du bit :
    • S’il est à 0, on le met à 1 et on affiche (en double L) la partie gauche du caractère de cette colonne
    • S’il est à 1, on le met à 0 et on affiche (en double L) la partie droite du caractère de cette colonne
  • ==> Vérifier le comportement en colonne 40 si un demi caractère gauche peut s’afficher

Pour la double taille, combinaison des deux

Il faudrait que je partage une page de test qui permet de tester le comportement entre différentes puces, mais de ce que j’ai remarqué en bidouillant avec la puce

(Reproduction émulateur, mais la puce dans mon Minitel semble faire la même chose)

image

Bon, c’est assez « compliqué » à expliquer mais de ce que j’ai compris (en très résumé) : un caractère double longueur force le caractère à sa droite à dessiner la partie droite du même caractère (en double hauteur ou pas, partie ou haute ou pas). Si le caractère à droite n’est pas en double longueur, le caractère sera dessiné en longueur « normale » (mais uniquement la partie droite, qui sera placée à gauche)

Quant aux caractères double hauteur, si un caractère a l’attribut « double hauteur » et que le nombre de caractères au dessus en double hauteur est impair, alors la partie basse sera dessinée (sinon c’est la partie haute).

La règle 1 a priorité sur la règle 2 : par exemple, ici, j’ai mis un caractère double hauteur uniquement, et en dessous un caractère double largeur et hauteur. De ce fait, le caractère d’en bas à gauche dessine la partie basse du caractère,et le caractère d’en bas à droite dessine la suite du caractère de gauche (double largeur)… bon, c’est pas très clair, mais c’est le mieux que je puisse faire.

image

Et ici, j’ai ajouté 2 caractères en double hauteur+largeur. Puisque le caractère au dessus du nouveau caractère de gauche est aussi en double hauteur et qu’il n’y en a que un à la suite (impair), alors la partie basse sera dessinée.

image

Maintenant, je vais ajouter un caractère au dessus du caractère au milieu : on remarque qu’on a une sorte de smiley, mais surtout que les 2 caractères du bas dessinent désormais la partie haute (puisqu’on a maintenant un nombre pair).

image

En clair : c’est un drapeau (un pour chaque colonne) qui s’alterne quand un caractère est en double hauteur, et qui se remet à zéro quand un caractère n’est pas en double hauteur…


Enfin, plus intéressant ici (j’imagine ?) - j’ai provisoirement mis l’accès à minipavi (cc @ludojoey) sur l’émulateur web Minitel

Je n’ai pas fait d’interface pour les boutons, donc je les ai bind du mieux que je pouvais :
[F1] Sommaire
[F2] Guide
[F3] Annuaire
[F4] Correction
[F5] Retour
[F6] Suite
[F7] Répétition
[F8] Envoi

[²] Fnct
[Alt Gr] Connexion/Fin

Alt Gr pour pouvoir se connecter à Minipavi, du coup.

https://nathaan.com/minitel/emulateur/minitel.html

1 « J'aime »

Oui !

Essayes de ne mentionner que double largeur et double hauteur (éventuellement double taille pour largeur et hauteur) pour plus de clarté

Il me semble que c’est ce que j’ai noté plus haut, non ?

==> Du caractère précédent ? Si tu mets < DoubleLargeur>‹ O ›< BS>< SimpleLargeur>‹ E ›, tu vois quoi ? [Eventuellement, jouer aussi sur les couleurs de caractères]

Je viens de créer cette page basée sur mon émulateur qui permet de tester les caractères au « cas par cas ». Clic gauche pour changer les attributs d’un caractère, clic molette pour double taille (hauteur+largeur), clic droit pour retirer les attributs. La couleur de fond correspond à l’attribut en cours

https://nathaan.com/minitel/emulateur/gfx_test.html

De ce que j’ai testé, ça semble être cohérent avec le fonctionnement de l’EF9345 de mon minitel.

EDIT : je vais ajouter une fonction pour changer le caractère
EDIT 2 : c’est fait, molette pour changer le caractère

Alors je ne sais pas si ça va t’aider, mais un caractère double hauteur prend toujours deux lignes, et un caractère double largeur, prend toujours deux colonnes par rapport à un caractère ordinaire. Un éditeur de pages minitel prend ça en compte.

Sur concept, si tu fais un caractère double largeur, il faut l’effacer en deux fois. Tu peux obtenir cet effet de bug en effaçant la première partie et en écrivant un caractèr taille normale à la place. Pour les doubles largeurs ou doubles hauteurs, il faut toujours prévoir de laisser une ligne ou une colonne d’espace supplémentaire par rapport à un caractère normale.

Cordialement.

Oui ça je sais, mon but ici c’est de savoir comment la puce graphique réagit dans le cas de caractères invalides

1 « J'aime »

Ah, d’accord, je comprends :slight_smile:

Cordialement.

Sujet identique là :

Il peut aussi y avoir un impact sur la position horizontale des caractères double largeur.
voir la vidéo là :

J’avais vu passer cet issue github que je n’avais pas retrouvé


Comparaison émulateur et photo. La ligne 0 est différente (mais je crois que ce n’est pas dans le fichier), et il semble que les caractères en double hauteur soient décalés d’un pixel plus haut? (il faudrait que je zoom sur l’écran ou que quelqu’un qui a ajouté une sortie vidéo puisse capturer la sortie de l’écran du Minitel)
Mais le résultat a l’air similaire

Oui la ligne de service a probablement été changée par un essai précédent.

ou alors que j’utilise un caractère permettant de mieux distinguer les différentes lignes : soit un caractère personnalisé (l’EF9345 les supporte, mais il faudrait que je me rebranche dessus et que je vérifie si il y a assez de place dans la RAM) ou alors le « / » qui est un bon candidat pour ça

Pour la science je viens de rejouer cette page vdt sur un Magis Club.
Comme attendu le résultat est différent :sweat_smile:

1 « J'aime »

Forcément, j’imagine que le magis Club a un résultat plus « naïf » et se contente de ré écrire par dessus les anciennes valeurs