Simulation du 3615 M6 en BASIC
La famille a remonter le temps
Télécharger les codes sources et les réutiliser :
3615 M6
Photos du tournage pour la séquence Minitel : La famille à remonter le temps
Simulation du site Minitel 3615 M6 en GW-BASIC :
Mon but est de recréer un site Minitel avec une simulation des services qu'on pouvaient trouver sur les pages du type 3615 (Informations, chat, jeux,...)
Je vais refaire un site avec comme théme, la chaîne de télévision M6.
Vidéo du projet terminé :
Vidéo de l'utilisation sur M6 :
Recherche d'informations sur la communication PC / MINITEL
Achat et réception du matériel de communication
Montage et premier test de communication
Recherche d'informations sur les codes GWBASIC pour Minitel
Recherche d'informations et utilisation du format de fichier vidéotex (.VDT)
Création d'un CHAT BOT et CHAT PC/MINITEL
MAJ : Etat d'avancement après 1 mois de développement
MAJ : Etat d'avancement après 1 mois et 2 semaines de développement
MAJ : Etat d'avancement après 1 mois et 3 semaines de développement
MAJ : Etat d'avancement après 2 mois de développement
Télécharger les codes sources et les réutiliser
Les liens d'autres projets Minitel
1) Recherche d'informations sur la communication PC / MINITEL :
Pour commencer, il me faut un moyen de communiquer avec le Minitel, pour ça je vais utiliser un adaptateur SERIE/TTL.
Le TTL est un signal électronique qui correspond à un "0" sur une tension électrique comprise entre 0 et 0,5v et de "1" sur une tension entre 2,4 et 5v.
Wikipedia sur le TTL : https://fr.wikipedia.org/wiki/Transistor-Transistor_logic
Une puce électronique est spécialement faite pour cette conversion, le "MAX232"
Avec des entrées côté PC aux broches "R1IN" et "T2OUT" et des sorties côté Minitel, sur les broches "T2IN" et "R1OUT" (Adaptées via résistances), la conversation est possible dans les deux sens :
Les deux broches à utiliser en entrées et en sorties doivent être croisés, elles s’appellent "RX" et "TX".
La transmission sur le fils "TX" côté PC sera donc branchée sur la réception "RX" côté Minitel et inversement.
Tout ça se fait à travers la puce "MAX232", avec des signaux adaptés via des condensateurs et des résistances :
Le branchement côté PC se fait via la prise RS232 (DB-9) qui sert habituellement de port série aux anciens ordinateurs (COM1:, COM2:,..).
sur le schéma puis le tableau ci-dessous, on voit bien la broche de réception "RX" et celle d'émission "TX" pour ce type de prise :
Pin | SIG. | Signal Name | DTE (PC) |
---|---|---|---|
1 | DCD | Data Carrier Detect | in |
2 | RXD | Receive Data | in |
3 | TXD | Transmit Data | out |
4 | DTR | Data Terminal Ready | out |
5 | GND | Signal Ground | - |
6 | DSR | Data Set Ready | in |
7 | RTS | Request to Send | out |
8 | CTS | Clear to Send | in |
9 | RI | Ring Indicator | in |
Du côté Minitel, il faut une prise de type "DIN5" et d'angle "45°" , si votre Minitel n'a pas cette prise à son dos ou/et n’a pas de touche "FNCT", vous pouvez vous arrêter là, car l'appareil n'est pas compatible pour une communication série :
2) Achat et réception du matériel de communication :
Pas besoin de commencer à faire des montages électroniques complexes, tous est disponibles à très petit prix sur EBAY.
(Si quand même vous voulez faire le montage, voici un site avec le circuit imprimé à reproduire : http://pafgadget.free.fr/bidouillages/minitel.htm )
J'ai opté pour ce montage-ci, la puce MAX232 est alimentée par un connecteur USB et des fils sont fournis, ce qui m'a coûté 10,37 Euros (Frais de port inclus).
Pour la prise DIN du minitel, je l'ai achetée sur selectronic.com avec 15 mètres de fils à souder et une boite de gaine Thermos, le tout pour la sommes de 18 euros (Frais de port inclus).
Réception :
Après quelques jours, j'ai bien reçus mes commandes, voici le circuit imprimé MAX232 :
La prise DIN :
3) Montage et premier test de communication :
Le montage du câble :
Le branchement côté DIN Minitel :
Le branchement côté PC sur le port Série RS232 :
L'alimentation du circuit via une prise USB :
Maintenant que le câble est prêt, je vais tester la communication dans les deux sens via l'utilitaire intégré à Windows : "TERMINAL" (Windows 3.11), ou "HYPER TERIMINAL" (Windows 9x).
N'étant plus disponible sur les nouveaux OS, vous pouvez alors le télécharger ici : Hyperterminal (143.95 Ko)
La configuration pour la communication avec le Minitel : Baud 1200, 7 bits de parité paire sans contrôle de flux et 1 bits de stop :
Le test PC vers Minitel :
Le test Minitel vers PC :
Les touches appuyées sur le PC s'affichent sur le Minitel et inverssement, ça fonctionne !
4) Recherche d'informations sur les codes GWBASIC pour Minitel :
J'utilise le langage GW-BASIC de Microsoft car j'ai retrouvé un programme dans le "Science & vie Micro n°58" qui permettait de faire une bataille navale entre un PC et un Minitel.
Je n'avais pas fait de GW-BASIC depuis les années 80 mais ce language est très facile à comprendre, j'utilise le "User's Reference guide" pour la syntaxe des commandes : Gw basic user guide (482.2 Ko)
Donc dans le code fournis par SVM, j'ai tout ce qu'il me faut pour faire une communication PC/MINITEL avec écriture et lecture :
Découpage des parties intéressantes :
La dernière page est géniale car elle recense tous les codes d'affichages du Minitel et surtout les codes de réception des touches :
La ligne 260 aussi, car elle montre comment ouvrir la connexion sur le port série du PC (ici COM1:) :
Je ne vais utiliser que cette partie dans mon propre code :
Je vais aussi récupérer la routine qui permet d'attendre le retour d'une touche du Minitel :
Je l'ai réécrite dans ce format pour l'attente le retour d'une touche unique :
![]() |
3041 : Compteur Arrêt à 0 3042 : Tant que le compteur Arrêt est à 0 alors débute la boucle 3043 : Appel du sous-programme 3050 3047 : Fin de la boucle ====Sous-programme 3070 : Lecture des touches du Minitel 3071 : Pause de 1 seconde 3080 : Si le retour touche Minitel = La variable "TOUCHE" alors Arrêt = 1 3110 : Fin du sous-programme |
Pour appeler cette fonction, il faudra définir la variable touche attendue et appeler la routine :
Dans le tableau ci-dessus du magazine SVM, la valeur 72 correspond à la touche "Suite".
Maintenant pour un menu à plusieurs choix :
![]() |
3220 à 4260 : Identique au cas précédent, Tant que le compteur Arrêt est à 0 alors boucle sur le sous-programme. ====Sous-programme 4300 : Lecture des touches du Minitel 4301 : Pause d'une seconde 4310 : si la touche est 49 (Vaut 1) alors arrêt = 1 4320 : si la touche est 50 (Vaut 2) alors arrêt = 1 4330 : si la touche est 51 (Vaut 3) alors arrêt = 1 4340 : si la touche est 52 (Vaut 4) alors arrêt = 1 |
Après je peux appeler ma fonction et rediriger les retours des touches du Minitel, sur les sous-menus :
Je continues à récupérer du code original, les lignes qui permettent d'écrire à un endroit précis sur le Minitel :
Je vais directement écrire chaque ligne sans GOSUB :
![]() |
Le premier chiffre souligné correspond à la ligne et le deuxième à la colonne. L'écran du Minitel à 24 lignes et 40 Colonnes. |
Pour tous ce qui est écriture en mode texte sur le Minitel, voici un tableau des possibilitées, les codes peuvent être combinés :
Voici un fichier qui référence tous les codes possibles :
Pour les couleurs (Dégradé de gris en Monochrome), voici un programme qui affiche tous les cas possibles sur l'acran du Minitel : couleurs.bas
Maintenant pour les affichages Graphiques (Mode Vidéotex), voici un programme qui affiche tous les cas possibles sur l'écran du Minitel : videotex.bas
Pour le mode Vidéotex, le code commence par : PRINT#1,CHR$(14)+"caractère du tableau ci-dessous"
Pour revenir au mode texte standard, il faut envoyer un PRINT#1,CHR$(15) au Minitel
Voici quelques exemples pour faire des tableaux :
PRINT #1,CHR$(31)+CHR$(1+64)+CHR$(1+64)+CHR$(14)+"7#####k" |
Affiche un carré |
PRINT #1,CHR$(31)+CHR$(1+64)+CHR$(1+64)+CHR$(14)+"7#####k" PRINT #1,CHR$(31)+CHR$(2+64)+CHR$(1+64)+CHR$(14)+"5 j" PRINT #1,CHR$(31)+CHR$(3+64)+CHR$(1+64)+CHR$(14)+"5 j" PRINT #1,CHR$(31)+CHR$(4+64)+CHR$(1+64)+CHR$(14)+"=,,,,,n" PRINT #1,CHR$(31)+CHR$(5+64)+CHR$(1+64)+CHR$(14)+"5 j" PRINT #1,CHR$(31)+CHR$(6+64)+CHR$(1+64)+CHR$(14)+"5 j" PRINT #1,CHR$(31)+CHR$(7+64)+CHR$(1+64)+CHR$(14)+"-,,,,,." |
Affiche un carré avec une barre au horizontale |
PRINT #1,CHR$(31)+CHR$(1+64)+CHR$(1+64)+CHR$(14)+"7###7###k" PRINT #1,CHR$(31)+CHR$(2+64)+CHR$(1+64)+CHR$(14)+"5 5 j" PRINT #1,CHR$(31)+CHR$(3+64)+CHR$(1+64)+CHR$(14)+"5 5 j" PRINT #1,CHR$(31)+CHR$(4+64)+CHR$(1+64)+CHR$(14)+"5 5 j" PRINT #1,CHR$(31)+CHR$(5+64)+CHR$(1+64)+CHR$(14)+"5 5 j" PRINT #1,CHR$(31)+CHR$(6+64)+CHR$(1+64)+CHR$(14)+"5 5 j" PRINT #1,CHR$(31)+CHR$(7+64)+CHR$(1+64)+CHR$(14)+"-,,,-,,,." |
Affiche un carré avec une barre au verticale |
5) Recherche d'informations et utilisation du format de fichier vidéotex (.VDT) :
Une autre chose que j'ai pu trouver sur Internet et la sauvegarde d'écran Minitel dans des fichiers aux formats "Vidéotex".
Apparemment ce format était utilisé par des programmes de capture d’écrans Minitel ainsi que pour les émulateurs Minitel sur PC.
J'ai pu retrouver sur Internet quelques captures au format VDT, mon idée et d'essayer de réinjecter ce fichier, directement sur le Minitel.
Ce qui me permettra de ne pas avoir à recréer des pages caractère par caractère, en code GW-BASIC.
Voici quelques captures au format ".VDT" trouvées sur Internet (J'utilise VTEX pour afficher les pages sur un ordinateur récent via l'émulateur DOS DOSBOX) :
J'ai regroupé tous les VDT disponibles sur Internet dans ce pack : Pack vdt (1.01 Mo)
J'ai donc écris la routine GW-BASIC suivante, qui va lire ce fichier .VDT ligne par ligne et l'envoyer sur le Minitel :
![]() |
2001 : Ouverture du fichier défini dans la variable "VDT" 2010 : Tant que ce n'est pas la fin du fichier > Début de la boucle 2015 : Lit la ligne courante du fichier 2030 : Affiche la ligne courante du fichier sur le Minitel 2040 : Fin de la boucle 2045 : Si fin du fichier alors fermeture du fichier |
Il suffira à chaque fois de donner le nom du fichier à lire et appeler cette routine :
Pour modeler les fichiers .VDT à ma façon, je les ouvres via un éditeur texte et change ou efface les textes d'origines :
Voici mon premier menu avec à gauche le VDT d'origine et à droite, le résultat après modification :
Maintenant le plus intéressant avec ce format VDT est l'utilitaire DOS "PCX2VDT", il permet comme son nom l'indique, de convertir des photos au format PCX, directement en format vidéotex !
Le site du développeur : http://logicos.free.fr/oeuvres.html#pcx2vdt
Pour une conversion, il faut trouver une image au format GIF sur Internet et la convertir au format PCX.
Pour cela, j'utilise IRFANVIEW. (Si l'image n'est pas au format GIF, il faudra la convertir avant en ce format puis faire une converssion en PCX, sinon le programme PCX2VDT ne fonctionne pas.)
Aussi, il faudra passer des paramètres d'emplacements dans la commande de conversion, pour un affichage parfait sur le Minitel.
Extrait de la documentation :
/M= Destination sur minitel: Syntaxe complète: colonne "colonne" : le numéro de colonne entre 0 et 39 La ligne 0 est spéciale, car elle est en marge du reste de Le nombre de lignes n'est pas limité à la place disponible |
Exemple pour un affichage de l'image sur l'écran complet du Minitel (40 colonnes / 24 lignes):
PCX2VDT IMAGE.PCX /M=1,1,39,23 |
Le problème est qu'il faut trouver les bonnes valeurs suivant la taille de l'image PCX, pour ne pas avoir une déformation sur l'écran du Minitel (Parfois il faut faire beaucoup d'essais).
Côté Gw-basic, voici mon code de test pour afficher sur le Minitel, l'image .VDT présente sur une disquette (A:\) :
Voici un premier essai avec une image venant d'Internet, sa conversion puis son affichage :
6) Création d'un CHAT BOT et CHAT PC/MINITEL :
Pour alimenter ce site, je vais mettre en place un robot qui va pouvoir discuter avec l'utilisateur côté Minitel.
Pour cela, je suis parti d'un code GWBASIC trouvé sur Internet : ELIZA CHATBOT.
Explications des scripts :
Pour faire interagir le programme Eliza avec le Minitel, je suis passé par un système de fichier :
J'ai mis le script Eliza trouvé sur Internet dans "Eliza.bas", il va servir de "base de donnée" (Le cerveau d'Eliza).
Je vais l'alimenter plus tard car ce programme source est très basique, il ne fait que répondre aux questions par d'autres questions.
Le programme "chatbot.bas" va servir au formatage de la question venant du Minitel et son envoi à "Eliza.bas".
La question qui vient donc de l'utilisateur du Minitel, sera écrite dans le fichier "chat_min.dat", le retour d'Eliza dans le fichier "chat_eli.dat"
Je vais utiliser une boucle qui va enregistrer chaque lettres tapées sur le Minitel, jusqu'au moment ou la touche ENVOI est appuyée.
![]() |
1010 : Ouverture du fichier question à Eliza : chat_min.dat 1030-1040 : Tant que la variable ARRET est égal à 0 > Boucle sur le sous-programme 2000 1050-1070 : fin de la boucle et sort du programme vers la ligne 500 ===Sous Programme 2000 : Lecture des touches appuyées sur le Minitel et met dans la variable MIN$ 2007 : Si la touche Minitel n'est pas égal à 19 > Va à la ligne 2010 (Toute les touches qui commencent à la valeur 19 sont des touches du type : "sommaire / envoi / retour / ..." voir tableau SVM) 2008 : Si la touche à la valeur 19+65 (=ENVOI) > Va au programme en ligne 6500 (formatage du texte sur une ligne pour Eliza). 2009 : Si la touche à la valeur 19+70 (=SOMMAIRE) > Va à la ligne 7000 (sortie du programme). 2020-2030 : Écriture dans le fichier chat_eli.dat et retourne au début de la boucle. ===Affichage Minitel 1045 et 2001 : La ligne 1045 permet d'afficher sur l'écran du Minitel la touche appuyée par l'utilisateur. La ligne 2001, augmente la valeur de la colonne pour écrire ce que tape l'utilisateur sur l'écran du Minitel, sinon les lettres sont écrites les unes sur les autres. |
Une fois la touche "ENVOI" appuyée, le programme continue et va transformer le fichier "chat_min.dat" de façons à recoller toutes les lettres, ce qui va reconstruire la phrase.
Exemple :
B O N J O U R ENVOI |
BONJOUR |
![]() |
6500-6504 : Ouverture du fichier question à Eliza : chat_min.dat, lecture ligne par ligne, tant que ce n'est pas la fin du fichier > écrit chaque ligne dans la variable TEXT$ 6505-6507 : Écriture de la variable TEXT$ (Tout les caractères tapés sur le Minitel) dans le fichier question à Eliza : chat_min.dat 6510 : Lance le programme : ELIZA.BAS |
Le programme "eliza.bas" ayant pris maintenant le relais, il va lire le fichier question "chat_min.dat", trouver la réponse adéquate, l'écrire dans le fichier "chat_eli.dat" et pour finir, relire ce fichier pour afficher la réponse sur le Minitel.
![]() |
191-194 : Ouverture du fichier question à Eliza : chat_min.dat, lecture ligne par ligne, tant que ce n'est pas la fin du fichier écrit chaque ligne dans la variable I$ 195 : Affichage à l'écran de la variable I$ (Question posée à Eliza) |
![]() |
3031-3034 : Ouverture du fichier contenant la réponse d'Eliza : chat_eli.dat, le contenu est mis dans la variable CURLINES$ 3035-3027 : Ouverture d'une connexion sur le Minitel pour afficher la réponse présente dans la variable CURLINES$ 3038 : Sortie vers le menu sommaire en cas de question non appropriées (Insultes, gros mots) > Variable PASOK=1 3040 : Retour au programme de gestion entrées/sorties chatbot.bas pour la prochaine question. |
Le système de correspondance entre la question et l'écriture de la réponse dans le fichier "chat_eli.dat" :
Si la réponse vient de la première partie du programme que je n'ai pas touché (variable "F$"), elle est directement écrite dans le fichier :
Par contre j'ai ajouté un GOSUB très important à la ligne 231, qui va permettre d'ajouter des centaines d'autres cas possibles de questions-réponses :
Donc à partir de la ligne 10000, les nouveaux cas fonctionnent de cette façons :
En rouge : La question sur X caractères, tout ce qui à avant et après n'est pas pris en compte.
En vert : Si la question n'est pas équivalente au cas possible sur X caractères, passage au cas suivant.
En Jaune : La réponse d'Eliza dans la variable "ELIZA$"
En bleu : Lancement du programme d'écriture de la réponse d'Eliza dans le fichier "chat_eli.dat" puis sortie
Le sous-programme d'écriture de la variable "ELIZA$" dans le fichier "chat_eli.dat" :
La vidéo du chat Elisa en fonctionnement :
Ajout d'un chat humain :
Maintenant qu'Eliza fonctionne bien, j'aimerais aussi une communication entre deux humains via l'ordinateur et le Minitel.
Pour cela, j'ai ajouté au lancement de la page Eliza, un choix à faire sur le PC
Le code :
Donc, quand la personne sur le Minitel va demander un chat, il faudra soit lancer le robot Eliza (choix 1 : chatbot.bas), soit lancer le chat humain (choix 2 : chathum.bas).
Le nouveau programme chathum.bas est une copie de celui pour Eliza.
Au lieu de passer par le fichier Eliza.bas qui donne une réponsse à la question, le texte tapé sur l'ordinateur est directement écrit dans le fichier retour à afficher sur le Minitel : Chat_eli.dat.
Le code ajouté à la place du passage vers Eliza.bas :
La vidéo du chat Humain en fonctionnement :
7) Les premiers essais du site :
A ce niveau après 3 semaines de développement, j'ai créé :
- Une page de garde au lancement du site.
- Une page sur l'annimateur "Nagui" avec un système d'écriture / lecture des messages.
- Une page d'info sur le clip de la semaine.
- Un premier jeu
- Un chat Bot
Voici la vidéo de tout ça en fonctionnement :
8) MAJ : Etat d'avancement après 1 mois de développement :
A ce stade, j'ai pas mal avancé en codant une heure par jour pendant 2 semaines, j'ai pu finaliser la partie jeux avec 3 nouveaux programmes :
- Un Quizz sur la chaine avec des questions se situants dans l'année 1987.
Pour ce jeu, j'ai recupéré des informations sur les débuts de la chaine M6 en 1987, grace au livre "M6 Story : la saga de la chaîne en trop" : Disponible ici sur Google Books
- Un jeu de mines avec un système de déplacement à l'aveugle sur 3 tableaux.
(Je me suis basé sur rien pour ce jeu, j'ai tout codé à la volée un soir d'inspiration)
- Un jeu du style morpion, basé sur un code trouvé dans le magazine "Science & Vie junior N°20 & 21" :
Donc cette partie est terminée avec ses 4 jeux.
Aussi j'ai changé le menu principal pour y mettre le choix "Programmes de la chaine", il va pointer sur le code que je suis en train de développer pour afficher une grilles des programmes de 1987.
9) MAJ : Etat d'avancement après 1 mois et 2 semaines de développement :
J'ai passé beaucoup de temps pour la partie "Grilles des programmes", déjà car il à fallu faire quelques recherches sur des vielles émissions de la chaine.
Je me suis basé sur des copies d'anciens programmes TV de 1987 du site "Fan2TV" : http://www.fan2tv.com/france/news1153.php
Et Wikipedia ou Google pour retrouver à quoi correspondent ces vielles émissions, films ou séries.
Aussi le code était très difficile à faire, le GW-BASIC ne pouvant pas utiliser de bases de données, je suis passé par un gros fichier avec toutes les informations de la grille des progammes sur une semaine :
En plus avec la limitation à 64K de mémoire du language, j'avais à chaque fois des "Out of Memory" après quelques consulations d'informations sur des émissions.
Pour contourner le problème, j'ai du passer par une écriture des variables dans un fichier tampon, une purge "CLEAR" mémoire, un "RUN" au lieu de "GOTO" vers des lignes qui recharges ensuite les variables écrites dans le fichier...
Sans compter le système de menu abécédaire, le retour vers la page 1 ou 2 de la grilles, le passage d'un jour à l'autre,....en fait pour aller très vite j'aurais du écrire en dur toutes les informations de la grilles directement dans le code.
Mais pour un programmeur.. cela n'est pas acceptable :)
Donc une vraie galère mais voici le résultat final :
10) MAJ : Etat d'avancement après 1 mois et 3 semaines de développement :
Le dernier choix du menu pour Nagui, j'y ai développé un système de vote pour une liste de 10 clips.
J'ai choisis quelques noms d'artistes sur ce site : http://www.chartsinfrance.net/charts/8712/singles.php
- La première partie du programme permet de calculer et afficher un pourcentage de votes via un fichier texte.
- La deuxième partie permet d'afficher la liste des clips et d'incrémenter un compteur (Nombres de votes) via ce même fichier.
11) MAJ : Etat d'avancement après 2 mois de développement :
Un nouveau menu terminé pour un autre animateur des débuts de la chaine : Dominique Chapatte.
Pour cet animateur et son émission TURBO, j'ai pris comme sujet un événement automobile important de l'année 1987 : Les 24 Heures du Mans
Voila, j'ai terminé mon objectif d'avoir un site complêt, une dernière étape est la correction orthographique, la recherche des derniers "bugs" et la mise en place des accents.
Pour ce dernier point, j'ai refais un tour dans chacuns des mes scrips en remplaçant les endroits où il fallait un "é", "è" ou "à" par les lignes de codes données dans le tableau ci-dessus.
Exemple :
En rouge : Des "é".
En vert : Un "à".
12) Télécharger les codes sources et les réutiliser :
Maintenant si vous voulez aussi faire revivre votre Minitel et montrer aux plus jeunes ce qu'on pouvait trouver sur les pages 3615, voici mon développement en téléchargement :
3615m6 (132.5 Ko) Password de décompression : legrenierinformatique
Pour installer et lancer le site :
- Créer un dossier "C:\MINITEL" sur votre ordinateur.
- Décompacter le fichier ZIP du site dans ce dossier.
- Brancher le Minitel sur le port série de l'ordinateur.
- Désactiver l'écho local sur le Minitel avec la combinaison de touche "Fnct" + "T", lacher puis appuyer sur la touche "E"
- Sous MS-DOS, à partir du dossier C:\MINITEL, lancer la commande 3615M6.
13) Les liens d'autres projets Minitel :
Voici quelques projets trouvés sur Internet qui me semble intéréssants pour réutiliser un Minitel :
Un Minitel sous Android :
Transformer un Minitel en TV :
http://www.cfp-radio.com/realisations/rea48/minitel-01.html
http://jla.1313-blog.overblog.com/recyclage-d-un-minitel-9-en-moniteur-b/w
Minitel en terminal Linux :
http://furrtek.free.fr/?a=telinux
Webcam sur Minitel :
http://wiki.labomedia.org/index.php/Processing_vs_Arduino_vs_Minitel