HARDWARE ★ MINITEL: LE MEDIA ÉLECTRONIQUE (MICRO-SYSTEMES) ★

Minitel: Le Media Électronique (Micro-Systemes)
Au même titre que le téléphone, le Minitel fait désormais partie de notre vie de tous les jours. Mais, si tout un chacun parvient, au bout d'un bref apprentissage, à se servir correctement de l'un et de l'autre, il est encore bien peu de personnes sachant comment ce terminal Teletel fonctionne. Aussi ne nous pencherons-nous pas sur la « pratique » du Minitel mais sur son fonctionnement.

Ainsi sommes-nous sûrs qu'à la fin de cettextude vous comprendrez parfaitement comment fonctionne ce nouveau média. Que les amoureux du hard se rassurent, ils trouveront en annexe un montage très simple et très peu coûteux qui leur permettra d'utiliser leur appareil comme modem. A eux toutefois de développer le logiciel adéquat pour l'utiliser.

Il était une fois... le codage de l'information

Chacun d'entre vous connaît le code ASCII, qui permet de transformer les états haut et bas du courant, rassemblés par groupes de huit sous forme d'octets, en symboles alphanumériques et en codes de contrôle. Dans le cas du Minitel, c'est un peu la même chose. Le code utilisé par le Minitel a été défini dans la recommandation numéro 5 du CCITT (Comité Consultatif International pour le Télégraphe et le Téléphone). Il est constitué de mots de sept bits, ce qui permet de représenter 128 ca ractères. On y trouve :

  • des instructions commandant les diverses fonctions du Minitel (couleur du fond et des caractères, signa d'envoi, passage en clignotement loupe, etc.) ;
  • les lettres de l'alphabet (majuscules et minuscules), soit 52 « mots » ;
  • les dix chiffres ;
  • ainsi que différents signes typographiques et des caractères dits alpha-mosaïques (caractères semi-graphiques, très utiles pour créer des masques d'écran).
Mais, tout comme ce qui se passe dans une transmission asynchrone (c'est-à-dire lorsqu'on envoie les bits les uns à la suite des autres, et non en même temps comme dans une liaison parallèle), il est nécessaire d'adjoindre d'autres bits pour signaler quand commence un mot et quand il prend fin. C'est pourquoi chaque caractère se voit précédé d'un bit de « start » et suivi d'un bit de « stop » . Mais ce n'est pas tout. En réalité, le huitième bit de chaque octet sert à vérifier si le code transmis l'a été correctement. On appelle ce bit « bit de parité » car il prend la valeur zéro si le nombre de bits à 1 du caractère est pair, et la valeur 1 si ce nombre est impair. Ainsi l'ordinateur a-t-il un moyen sûr de vérifier si chaque caractère reçu est bien similaire à celui qui a été transmis. S'il y a une erreur de transmission, le Minitel la détecte donc aussitôt et affiche, à la place du caractère incorrect (quand il ne s'agit pas d'un caractère de contrôle), un point d'interrogation à l'envers. Nous reviendrons plus en détail sur les codes de contrôle du Minitel, mais auparavant il nous faut vous expliquer comment s'effectue la transmission des octets.

Pour transmettre des données par le canal téléphonique, on utilise des ondes sinusoïdales. Le réseau électrique fonctionne en effet avec un courant alternatif. Ce courant a comme propriété de voir varier sa tension un certain nombre de fois par seconde. Dans le cas de l'EDF, cette variation se produit 50 fois par seconde. Cette variation, encore appelée fréquence, est donc de 50 Hz (contre 60 pour le réseau nord-américain). La durée de cette variation s'appelle la période ; elle est inversement proportionnelle à la fréquence. Plus la fréquence est élevée et plus les périodes qui la composent sont courtes. Ce qui nous donne la relation suivante :

P = l/F

Sur le téléphone, la tension varie du fait du courant produit par la bobine associée au microphone. Lorsque vous parlez, le son de votre voix fait vibrer la membrane du micro, qui excite la bobine, produit un courant, qui excite la bobine du récepteur de votre correspondant, récepteur dont la membrane se met à son tour à vibrer, reproduisant le son de votre voix. Mais ici surgit un petit problème. Sur le réseau téléphonique, on ne peut pas faire passer n'importe quelle fréquence. En réalité, les ondes transmises sont cantonnées entre deux valeurs extrêmes qui délimitent ainsi ce que l'on appelle une bande de fréquence. C'est pourquoi il n'est pas possible de faire transiter les données à trop grande vitesse (sauf sur des lignes spécialisées) si l'on ne veut pas récupérer un splendide charabia à la réception. Pour transmettre les messages du Minitel, on associe au symbole 0 un signal sinusoïdal de durée T et de fréquence f0 et au symbole 1 un signal sinusoïdal identique au précédent mais de fréquence différente f|. Ce déplacement de fréquences est identique à celui que produit votre voix lorsque vous modulez des sons pour les transformer en phonèmes. C'est pourquoi on parle aussi ici de modulation. Mais vous savez très bien que les signaux transmis par un ordinateur (ou un terminal) sont des signaux carrés et non pas sinusoïdaux. Aussi s'avère-t-il nécessaire de les transformer, à savoir de les moduler. Cette opération est effectuée par le modulateur du Minitel. De même, la réception d'un signal modulé doit être démodulée pour être intelligible par le terminal. Dans le Minitel, ces deux opérations s'exécutent au moyen d'un appareil modulateur-démodulateur. Il semble alors évident que ce modem transmet et reçoit à une certaine vitesse. Cette vitesse dépend de la durée de transmission d'un élément binaire, c'est-à-dire le temps pendant lequel sont émises (ou reçues) les fréquences f0 ou f1. Cette rapidité est l'inverse de cette durée. Elle s'exprime en bits/seconde soit :

R = l/T

Le modem du Minitel fonctionne selon l'avis V23 du CCITT, c'est-à-dire qu'il autorise des échanges simultanés (full-duplex) à 1 200 bauds dans le sens réception et 75 bauds (7,5 bits/secondes) dans le sens de l'émission. La modulation s'effectue par déplacement d'une fréquence de ± 30 Hz sur une fréquence constante de 420 Hz, appelée porteuse. Ce sont ces pics et ces crêtes qui donneront nos symboles 1 et 0. Encore faut-il que le niveau sonore de l'émission soit suffisant. En réception, le démodulateur transforme (nous verrons comment dans quelques instants) une fréquence de ± 400 Hz placée sur une porteuse à 1 700 Hz en symbole 1 ou 0. Cette transformation des déplacements de modulation en données significatives est assurée par un coupleur asynchrone qui peut être soit logiciel soit matériel, et qui constitue ou reconstitue nos paquets de 10 octets (un bit de start (0), 7 bits de données, un bit de parité, un bit de stop ( 1 ).


Le minitel n'est pas une entité unique : il est constitué de quatre organes.

Notons au passage que le premier bit reçu est le bit de poids faible. Ce qu'il vous faut savoir également c'est que, dès la mise sous tension du Minitel, le modem est disponible, le microprocesseur l'obligeant en permanence à boucler sur lui-même. Si bien qu'il réémet tout ce qu'il reçoit. Pour vous en assurer, il vous suffit d'enfoncer une touche du clavier alphabétique, et vous verrez s'afficher le caractère émis à l'écran, ce qui constitue un parfait moyen pour savoir si votre modem fonctionne correctement. Ce type de fonctionnement est appelé « écho ». C'est aussi ce qui se passe lorsque le Minitel est connecté à un serveur ; ce que vous tapez est envoyé au modem qui l'envoie à la banque de données, celle-ci renvoyant les caractères tapés vers le modem qui les dirige alors vers l'écran. Ainsi est-on sûr de ce que reçoit le serveur. Sachez également qu'un logiciel de correction d'erreur est implanté dans le modem. Mais voyons ce qui se passe lorsque l'on connecte, puis déconnecte le modem.

La connexion peut provenir soit d'une demande tapée au clavier (touche bascule CONNEXION/ FIN), soit d'une demande provenant de la prise péri-informatique du Minitel. Que se passe-t-il alors ? Le Minitel effectue les opérations suivantes :

  • basculement de la ligne téléphonique vers le modem (c'est pourquoi votre poste devient « sourd ») ;
  • affichage de la lettre C qui clignote dans le coin supérieur droit de l'écran ;
  • détection d'une fréquence à 1 300 Hz, émise par le système central, pendant une durée minimum de 1,7 seconde ;
  • émission permanente d'une fréquence à 390 Hz dès que la fréquence à 1300 Hz a été détectée, ce qui entraîne la fin de la phase de détection et le passage en mode émission/réception. Pendant ce temps, le logiciel de gestion du Minitel, que l'on appelle le Protocole, effectue ce fameux changement d'état ; ceci se produit au plus tard 3,9 millisecondes après l'envoi de la fréquence à 390 Hz.
Quant à la déconnexion, elle peut survenir dans quatre cas :
  • double appui de la touche CONNEXION/FIN ;
  • lorsque le serveur ou un périphérique la commande ;
  • lorsque l'on perd la porteuse ;
  • enfin, tout simplement, si vous débranchez votre Minitel. Dans les trois premiers cas, le Protocole transmet l'ordre de déconnexion au modem et provoque l'affichage de la lettre F dans le coin supérieur droit de l'écran. Le modem se remet alors à boucler sur lui-même. Dans tous les cas, le poste téléphonique est à nouveau disponible.
Tout cela est bel et bien, nous direz-vous, mais le Minitel est un terminal et non un simple modem (si seul ce dernier créneau vous intéresse, reportez-vous au montage qui permet de s'en servir de cette manière). Tout à fait d'accord ! Aussi, voyons maintenant de quoi est faite la bête.

Minitel : quatre organes pour un cerveau

En réalité, la « dissection » du Minitel nous apprend qu'il est constitué de quatre organes, reliés entre eux par un réseau « nerveux » à double sens, les nerfs moteurs et sensitifs étant eux-mêmes sous le contrôle du cerveau déjà mentionné, à savoir le Protocole. Nous venons d'examiner le premier de ces organes, le modem. Les trois autres sont le clavier, l'écran et la prise péri-informatique. Le cerveau assure l'envoi des données vers un ou plusieurs organes, tant et si bien que l'on peut assimiler le Minitel à un réseau en étoile dont la gestion serait centralisée (fig. 1). Disons tout de suite que le « cerveau » réagit différemment selon que l'appareil est en mode local (ce que l'on pourrait appeler son « dialogue intérieur ») ou en mode connecté. Dans le premier cas (fig. 2) le modem boucle sur lui-même et les trajets d'information sont les suivants :

  • clavier vers modem ;
  • modem vers écran ;
  • clavier vers prise péri-informatique ;
  • prise péri-informatique vers écran.
Dans le second cas, les nerfs de notre « étoile de mer » transmettront l'influx informatique de cette façon (% 3):
  • clavier vers modem ;
  • modem vers écran ;
  • modem vers prise péri-informatique
  • prise péri-informatique vers modem.
Vous remarquerez tout de suite qu'ici il est parfaitement possible de multiplexer les données reçues via la prise péri-informatique avec celles entrées au clavier. Rien n'empêche donc le petit malin que vous êtes de se servir de la conjonction ordinateur Minitel pour réaliser un système d'interrogation télématique biposte. A vous, toutefois, de développer le logiciel nécessaire pour ce faire. Mais revenons à nos organes et voyons plus avant leur structure et leur mode de fonctionnement.

Pleine page sur l'écran

Dès sa mise sous tension, le Minitel fonctionne en mode pleine page. Il existe également d'autres modes tels que le mode rouleau, le mode loupe, etc., mais pour fonctionner ils doivent être spécifiquement activés.

A dire vrai, notre organe écran est un ensemble composé de trois sous-organes : le tube cathodique, un automate de visualisation, lui-même tripartite, et un logiciel de décodage vidéotex.

L'automate possède trois sous parties :

  • une mémoire qui a une capacité semblable au nombre d'octets que peut contenir une page de l'écran (soit 25 rangées de 40 emplacements caractères, chaque emplacement occupant 2 octets, ce qui nous donne une taille mémoire de 2 Ko, et une capacité de 1 000 caractères). Cette mémoire est mise à jour en permanence avec les données que lui transmet le logiciel de décodage et est lue 50 fois par seconde par le processeur de visualisation (cette fréquence correspond au balayage de l'écran) ;
  • un générateur de caractères, en ROM contenant les 127 symboles visualisables ;
  • un processeur de visualisation qui va lire dans la mémoire de page les caractères fournis par le générateur et les transformer en signaux RVB envoyés à l'écran. C'est aussi lui qui, comme nous l'avons déjà dit, va s'occuper de gérer le balayage de l'écran. Pour bien saisir ceci, reportez-vous à la figure 4.
Nous allons maintenant examiner en détail le logiciel de décodage vidéotex, qui, en outre, nous permettra de mieux comprendre comment, avec 7 bits, on peut obtenir non seulement un premier jeu de 128 caractères (ceux dont nous vous avons déjà parlé) mais aussi deux jeux annexes, dont l'un est constitué de caractères semi-graphiques.

Fig. 4. - Schéma conceptuel d'un automate de visualisation.

Fig. 5. - Le tableau GO fournit les codes des caractères alphanumériques standards du minitel.

Fig. 6. - Le tableau G1 indique les codes de caractères semi-graphiques du minitel.

Si l'écran du Minitel comprend 25 lignes de 40 colonnes, un peu à la manière des ordinateurs familiaux de la précédente génération, la matrice d'une de ces cases n'est pas tout à fait semblable. Elle est constituée par une série de 10 lignes de 8 points. La ligne doit être ici entendue comme l'unité de balayage horizontal d'une image télé. Nous avons vu que chaque case équivalait à 2 octets en mémoire de page, c'est donc qu'il est nécessaire d'opérer un transcodage pour passer de 7 bits à 2 octets ! Ceci est réalisé au moyen d'une mémoire ROM qui interprète les codes reçus depuis le modem, la prise péri-informatique ou le clavier, et les transforme en caractères visualisables. Mais au juste que peut-on voir apparaître sur un Minitel ? A dire vrai, trois jeux de caractères (fig. 5, 6 et 7), le premier comprenant toute une série de codes de contrôle, les lettres de l'alphabet non accentuées, quelques signes de ponctuation ainsi que les « portes » qui permettent de passer d'un jeu de caractères à l'autre. Le second jeu est composé de caractères mosaïques qu'on obtient en divisant la matrice en six morceaux. Petite réflexion comme ça en passant : comment diviser 80 par 6 et tomber juste ? Très simple : on divise 80 par 6, ce qui donne des morceaux de 3 pixels de côté par 4 de long ; reste une ligne de 8 pixels. Bon sang, mais c'est bien sûr! Pour faire «joli», on ajoute cette ligne aux morceaux du milieu. Pour ceux qui n'ont toujours rien compris, reportez-vous à la figure 8. Le dernier jeu est à nouveau alphabétique, il contient les caractères accentués, la cédille du ç, l'œ, des flèches, des signes de fractions, bref, tout ce qu'il faut pour écrire correctement dans la langue de Rabelais. Pour s'y retrouver parmi tous ces codes, le CCITT les a alignés dans des tableaux (ceux des fig. 5, 6 et 7). Comment savoir à quel code correspond le A ? Très simple : on va tout d'abord regarder à quelle rangée il appartient. En regard de cette rangée, on trouve un paquet de 4 bits qui correspondent aux bits de poids faible de notre mot de 7 bits ; comme vous l'avez deviné, la colonne de notre A nous donne les 3 bits restants. Ce qui nous donne pour le A: 1000001, soit 65 en décimal (chic ! c'est de l'Ascii). Mais pourquoi faire simple quand on peut faire compliqué ? Au lieu de dire tout simplement « les caractères alphanumériques non accentués correspondent au standard ASCII et seront représentés comme tels », il est beaucoup plus « smart » de dire : chaque code sera désigné par deux chiffres (ou un chiffre et une lettre pour ceux qui parlent couramment l'hexa), séparés par une barre de fraction.

Fig. 7. - Le tableau G2 correspond aux différents caractères snéciaux affichés.

Fig. 8. - Les caractères semi-graphiques se décomposent en six points de taille inégale.

Si bien qu'au lieu de notre 65 nous aurons un magnifique 4/1 (avouez qu'ils l'ont fait exprès !). Bon, ce n'est pas tout ça, mais nos lettres accentuées ? Elles s'obtiennent en composant une suite de codes. Le premier de la séquence est un code de commande (les commandes occupent les deux premières colonnes du jeu 1 ), il a pour valeur 1 /9 et permet au générateur de caractères de savoir qu'il doit aller chercher un accent dans le jeu G2 ; cette commande s'appelle SS2 (fig. 9). Le second code correspond à l'accent choisi dans le jeu de caractères d'accentuation. Tout comme sur une machine à écrire, on pose l'accent d'abord puis on pose le caractère sans avoir pour autant fait avancer le chariot de la machine. C'est exactement ce qui se produit ici ! Si nous voulons par exemple obtenir un ç, il nous faudra la séquence suivante :

1/94/116/3
(SS2)(cédille)(c)

Deux choses encore à vous préciser avant d'aller plus loin : d'une part le programme contenu dans la ROM du générateur de caractères dispose d'une sécurité, si bien qu'il vous sera impossible de mettre une cédille au u. De même, les lettres liées ne comptent pas pour deux codes mais pour un seul. Par exemple l'e dans l'o sera codé

SS2 7/10

Passons maintenant aux caractères graphiques (fig. 6). Pour les obtenir, il suffit de composer le code S0 (0/14), ce qui a pour effet de vous faire basculer dans le jeu graphique. Vous y resterez jusqu'à ce que vous décidiez de passer la porte baptisée SI, dont le code se trouve en 0/15. Bien entendu, si vous êtes en mode semi-graphique et que vous essayez de repasser par SS2, vous vous heurterez à un mur.

C'est bien beau tout ça, mais cela risque d'être un peu terne si cela demeure en noir et blanc et si on ne peut pas élargir ou allonger les caractères. Car, ô surprise, le Minitel dispose d'un codage des couleurs des lettres, et du fond, même s'il est en noir et blanc. Les couleurs, dans ce cas, se traduiront par une brillance plus ou moins intense. Mais que peut-on faire pour égayer le « décor » ?

On peut, au niveau des caractères alphabétiques, les souligner, les faire clignoter, les allonger, les élargir, et les faire passer en vidéo inverse. Quant au fond, on en détermine à loisir la couleur. Il est encore possible de masquer toute une suite de caractères et, bien sûr, de souligner en bloc. Les caractères semi-graphiques, eux, peuvent clignoter, changer de couleur, être disjoints ou masqués. Mais il ne faut surtout pas croire que l'on est obligé de déterminer pour chaque caractère toute une tribu d'attributs (sic). Il est tout à fait possible de procéder par zones. Une zone est une suite d'emplacements de caractères qui appartiennent à la même rangée physique (mais pas. à la même colonne). Elle est délimitée au début de la rangée. Si vous n'avez pas plusieurs zones s'enchaînant les unes les autres, vous n'aurez pas besoin d'en placer un autre à la fin de chaque rangée. Ce délimiteur est signalé en mémoire de page par un mot bien particulier qui contient son identification, ainsi que les informations de changement d'attributs assignés à la zone. Par exemple : zone verte, soulignée, clignotante.

Il se trouve que le délimiteur est codé, en transmission, comme un espace, tant et si bien que, répété sur deux emplacements consécutifs d'une même rangée, il signalera le passage de la zone en double largeur, et, répété sur deux emplacements consécutifs d'une même colonne, il signalera la double hauteur de cette zone. Autre petite chose à savoir : lorsque vous effacez l'écran de votre Minitel, il s'ensuit un remplissage de l'écran par des pavés noirs semi-graphiques. Pourquoi ? Tout simplement pour empêcher que le lignage ou la couleur de fond n'anticipent sur l'inscription des caractères de la rangée courante.

Fig. 9. - Les trois jeux de caractères sont sélectionnés par l'un des codes suivants : SI, SS2 ou SO.

Mais revenons à nos attributs. Ceux-ci sont codés au moyen d'une séquence « Escape » suivie d'un code d'appel. Tous ces codes sont ensuite filtrés par le module écran du Minitel. Une fois définis au niveau du caractère, ils sont traités en parallèle, c'est-à-dire qu'ils n'apparaissent que conjointement à un caractère. Ainsi chaque signe peut avoir ses propres attributs.

Il n'est d'ailleurs pas nécessaire de coder chaque symbole, puisque les attributs de visualisation s'appliquent par défaut à tous les caractères qui les suivent.

Dans quels cas les attributs cessent-ils de s'appliquer ?

Tout d'abord, quand on rencontre une nouvelle batterie d'attributs ; là, pas de surenchère, mais un passage au nouveau jeu d'attributs pour la suite de caractères qui leur succède ; ensuite, lorsque l'on rencontre un séparateur bien particulier qui délimite des portions de page-écran. Ce séparateur est codé l /F. Dans le tableau représenté à la figure 9, il est désigné par l'abréviation US (Unit Separator). Il signale la disponibilité d'une portion de l'écran pour recevoir de nouveaux caractères (quel que soit leur mode) et les attributs qui les accompagnent. Par défaut, cette portion de l'image repassera en mode alphanumérique et avec les couleurs (ou valeurs) codées lors de l'initialisation du terminal. Si bien qu'il est évident de dire que les attributs cessent de s'appliquer lorsque le terminal est réinitialisé. En tout, ce sont 28 codes qui sont utilisés pour définir les attributs. Listons-les rapidement :

  • 8 codes de couleur de caractère (noir 4/0, rouge 4/1, vert 4/2, jaune 4/3, bleu 4/4, magenta 4/5, cyan 4/6, blanc 4/7 ;
  • 8 codes de couleur de fond (mêmes couleurs que ci-dessus, mais les trois bits de poids fort donnent 5 comme valeur ; ainsi le fond bleu est codé 5/4) ;
  • 4 codes définissant la taille du caractère (4/C grandeur normale, 4/D double hauteur, 4/E double largeur, 4/F double grandeur) ;
  • 2 codes pour la fixité du caractère ou son clignotement (4/9 fixe, 4/8 caractère clignotant) ;
  • 2 codes pour le début ou la fin de soulignement, car il est en effet possible de souligner toute une zone occupée par des caractères (début de lignage 5/A, fin de lignage 5/9) ;
  • 2 codes concernant le fond ou son inversion (fond normal 5/C, fond inversé 5/D) ;
  • 2 codes concernant le masquage ou le démasquage (5/8 masquage, 5/F démasquage). Le masquage empêche la visualisation des caractères qui auront été codés au moyen de cet attribut. Si le masquage est validé, les caractères ou les zones qui en dépendent apparaissent à l'écran sous forme de fond local noir. C'est une possibilité très intéressante quand on veut envoyer un texte de questions à choix multiples avec les réponses qui ne seront démasquées qu'en fonction du choix de l'utilisateur.
Là, vous aurez tout intérêt à faire des repérages au moyen du séparateur US. Celui-ci est en effet suivi de deux caractères qui, de toute manière, ne sont jamais visualisés. Si les octets correspondant à ces caractères appartiennent au colonnes 6 et 7, ils représentent respectivement, sous forme de nombres à 6 bits, le numéro de rangée et le numéro de colonne du premier caractère du sous-article. Si ils ont une autre valeur, la fonction US est ignorée. Ce qu'il faut savoir, c'est que la réception d'un séparateur d'article ou de sous-article remet les fonctions de visualisation dans un état initial, ce qui a donc pour effet d'enlever le masquage de notre zone. Seul petit problème : n'agrémentez pas vos réponses d'attributs tels que soulignement ou caractères graphiques, car US fait repasser le Minitel dans le jeu alphanumérique, si bien que vous risquez un joli mélange si vous n'y prenez garde.

Il est aussi possible de masquer et de démasquer l'écran d'un seul coup. Pour effectuer un masquage, employez la séquence ESC, 2/3, 2/0, 5/8. Le démasquage ne change que pour le troisième code, qui passe de 5/8 à 5/F.

Questions de taille

Nous parlions précédemment de la taille des caractères. A ce propos, il est intéressant de voir comment l'automate de visualisation analyse les attributs permettant de passer en double grandeur ou en double hauteur. Lors de la lecture d'un attribut de double taille ou de double hauteur, il y a affectation immédiate aux deux rangées caractère, de deux caractéristiques, l'une pour la partie haute, l'autre, bien évidemment pour la partie basse, caractéristiques qui demeureront inchangées jusqu'à la Fin de rangée. Notons tout de suite qu'il n'est pas possible d'utiliser ce type de caractères en rangée 1. Pourquoi ? Tout simplement parce que la rangée 0 est consacrée aux messages de service (par exemple, le « C qui vous indique que vous êtes connecté). Nous vous conseillons de n'utiliser cette rangée qu'avec parcimonie. Il est en effet préférable de la réserver à l'inscription de messages de contrôle. Pour y accéder, vous emploierez la séquence US (notre fameux délimiteur d'article) 4/0 X/Y (où Y désigne le numéro de colonne, donc prenez soin de laisser X à 0 !). Un petit truc : pour repasser à la ligne où se trouvait le curseur avant cette incursion, il suffit d'envoyer le code du saut de ligne, LF, soit 0/A. Par ailleurs, vous pourrez aussi quitter la rangée 0 en envoyant le code US. Revenons maintenant, après cette petite digression, à notre double taille. Si un autre caractère est désigné comme en double taille sur la rangée immédiatement inférieure ou supérieure aux rangées de notre double rangée, c'est-à-dire s'il incorpore soit la première soit la seconde rangée du doublet, on ne visualisera que sa partie haute ou sa partie basse. Ça paraît peut-être un peu ésotérique mais, si vous y réfléchissez trente secondes, cela vous expliquera pourquoi, sur la version actuelle de votre Minitel, il ne vous est pas possible d'obtenir des caractères double taille qui soient placés en quinconce. Votre double taille, ainsi que tous les attributs définis au niveau du caractère, se retrouvera de plus transportée avec tous les déplacements d'écriture dans l'écran, ceci jusqu'à ce que soit rencontré un code US ou FF (Form Feed, saut de page) ou encore RS (Record Séparator). Dernier point avant de passer à autre chose : ce que fait en permanence l'automate de visualisation, c'est une analyse des séquences d'attribution au fur et à mesure qu'elles lui sont envoyées. Tant et si bien qu'on peut considérer l'envoi des attributs comme étant réalisé de façon sérielle. Ceci explique pourquoi l'automate néglige les séparateurs que sont les espaces tant que ceux-ci ne sont pas accompagnés par un quelconque changement d'attribut. Il les mémorise, mais n'en tient pas compte tant qu'il ne tombe pas sur un ESCape. Autre conséquence de cette attribution à la chaîne, c'est que l'on n'est pas obbligé d'allouer un espace à la codification de chaque attribut, et c'est parfaitement normal. Imaginez que vous vouliez des caractères double largeur, bleus, clignotants. Si l'on appliquait cette méthode, on aurait besoin de trois espaces pour réunir les conditions exigées, d'où une cruelle perte de place. Ceci explique aussi pourquoi la réception d'un caractère mosaïque permettant de valider l'attribut de couleur de fond lui fait jouer également le rôle de délimiteur pour une chaîne de caractères alphanumériques. Poussons le bouchon encore un peu plus loin. Que se passerait-il si nous avions, par exemple, le texte suivant :

VOUS QUI ENTREZ ICI ABANDONNEZ TOUTE ESPERANCE

avec le VOUS en bleu, le QUI en rouge, le ENTREZ en noir, le ICI en magenta, et le reste à nouveau en rouge, et que nous introduisions ensuite des tirets à la place des espaces, ce qui donnerait :

VOUS-QUI-ENTREZ-ICI-ABANDONNEZ-TOUTE-ESPERANCE

Enfer et damnation ! Toute la phrase est devenue bleue ! Ceci s'explique quand on sait que le Minitel ne relit pas la mémoire de page. Ce qui fait que les attributs série ne sont pas transportables lors d'un mouvement dans l'écran de la position courante. Le simple fait de remplacer un séparateur par un autre caractère annule purement et simplement les attributs qui lui avaient été alloués. Que fait alors l'automate ? Il se contente de prendre pour attributs ceux de la zone située immédiatement à gauche, et ceci pour une bonne et simple raison : la transformation du séparateur provoque la réunion des deux zones.

A droite, à gauche, en haut, en bas

Mais ce n'est pas tout que de s'amuser avec les couleurs. Pour que votre texte (ou votre dessin) ait vraiment l'air présentable, encore faut-il l'aérer, le disposer correctement, etc. Bref, le mettre en page. La page du Minitel est constituée de 25 lignes de 40 colonnes, exactement la taille du feuillet dans certains journaux. C'est peut-être pourquoi les « djinns » de la DGT l'ont baptisée du doux nom d'article. Enfin, peut importe, l'essentiel est de pouvoir traiter ce dernier de la même façon qu'un imprimeur traiterait le contenu d'un texte soumis à composition, c'est-à-dire de pouvoir indenter les paragraphes, sauter quelques lignes en fin de section, et aller à la page suivante pour le prochain chapitre. Voyons rapidement les fonctions dont dispose le Minitel pour faire tout cela.

Ce sont les codes allant de 0/8 à 0/D qui vont ici nous servir. Parole d'évangile, le retour chariot est codé 0/D. Les tabulations horizontales et verticales correspondent respectivement à 0/9 (HT), 0/B (VT) et 0/A (LF). Elles provoquent le déplacement du curseur d'un caractère vers la droite, vers le haut, et d'une ligne vers le bas.

A noter que le retour chariot correspond à celui d'une machine à écrire, il ne provoque pas de saut de ligne, comme le Line Feed, mais ramène tout simplement le curseur dans la première colonne de la rangée en cours d'édition. L'espacement arrière (Back Space) nous est donné par 0/8. A tout ceci, il faut ajouter le « Form Feed » qui passe à l'article suivant ; il provoque l'effacement complet de l'écran, de la rangée 1 à la rangée 24.

Pour ramener le curseur dans le coin supérieur gauche de l'écran, nous emploierons le séparateur d'enregistrement RS, codé 1/E. Là aussi, on ne regrimpe pas sur la rangée 0 mais sur la rangée 1. Ce code constitue par ailleurs un séparateur explicite d'article. Pour diviser un article en plusieurs sous-articles, on emploie US, 1 /F. Ce code est suivi de deux caractères non visualisés qui, ainsi que nous le disions auparavant, correspondent aux coordonnées des caractères qui seront ensuite envoyés à l'automate de visualisation.


Commandes de protocole.

Cette fonction est très intéressante, car c'est grâce à elle que nous pourrons positionner le curseur où bon nous semble. Imaginons que nous voulions que le mot BEATRICE commence à la 25e colonne de la 5e rangée. Nous enverrons donc les codes suivants :

1/F (US), 4/5, 5/9, 4/2, 4/5, 4/1, 5/4, 5/2, 4/9, 4/3, 4/5.

Vous remarquerez tout de suite qu'il y a plusieurs 4/5 qui ne correspondent absolument pas à la même chose ; dans le premier cas, 4/5 désigne le numéro de rangée, tandis que dans les deux autres ils représentent la lettre E. Explication : le premier doublet correspond à un caractère non visualisé et chiffré sur six bits utiles, qui nous donne le numéro de la rangée, et n'a donc rien à voir avec le codage de la lettre E. Traduisons ce doublet sur 6 bits, cela nous donnera 000101, c'est-à-dire bien 5 en décimal. De même, 25 nous donne en binaire 011001, soit 5/9. Compris ?

Mais vous aurez peut-être envie de faire suivre BEATRICE non pas par un détective privé mais par des espaces présentant les mêmes attributs. Pour ce faire, vous emploierez la fonction CAN, codée 1/8. Notons au passage que ce code ne sert pas de délimiteur ; aussi les caractères envoyés ensuite, et qui débuteront à la première colonne de la rangée suivante (colonne 0 de la rangée 6 dans notre exemple) auront les mêmes attributs que BEATRICE.

Quelques mots encore sur le curseur. Il est tout à fait possible d'arrêter la visualisation de celui-ci en envoyant le code 1/4 (baptisé DC4 certainement par un passionné d'aéronautique !). Pour faire réapparaître le petit carré clignotant, il suffit d'envoyer le code DC1 (1/1). Ceci nous amène à vous parler d'un petit truc bien utile quand on veut faire de jolis en-têtes à l'écran. Nous vous avons parlé longuement du séparateur de sous-article US. Le terminal l'utilise dans un autre cas que pour positionner le curseur. Si vous faites ESC 6/1, il s'en servira pour vous retourner la valeur des coordonnées qui suivent US. Ainsi, si vous avez déplacé votre curseur jusqu'à la cinquième colonne de la cinquième rangée, la séquence ESC 6/1 matérialisera à l'écran les codes 4/5 5/9.

Les autres fonctions

Le code SP (2/10) déplace le curseur d'un espace vers la droite. Il inhibe alors les attributs de visualisation de zone précédente et laisse apparaître la couleur du fond. Mais, pour les titres, par exemple, il est préférable de laisser les espaces de la même couleur que les caractères. Est-ce à dire que vous devrez composer une séquence ESCAPE pour chaque espace à colorier ? Que nenni ! La fonction d'oblitération DEL (7/F) s'en chargera à votre place. Ainsi, si nous voulons obtenir BEATRICE en caractères rouges de taille normale entrecoupés de pavés de la même couleur, nous aurons la séquence suivante :

1/B (ESC) 4/1 (rouge) 4/9 (caractères fixes) 4/C (taille normale) 4/2 (B) 7/F (espace rouge) 4/5 (E) 7/F (espace rouge) 4/1 (A) 7/F (espace rouge) 5/4 (T) 7/F (espace rouge) 5/2 (R) 7/F (espace rouge) 4/9 (I) 7/F (espace rouge) 4/3 (C) 7/F (espace rouge) 4/5 (E).

La répétition d'un caractère est également possible. Pour ce faire, il faut employer la fonction REP (1/2) x, où x désigne sur 6 bits utiles le nombre de répétitions désirées. Si, par exemple, nous voulons afficher qu'un certain liquide bien connu pour ses bulles est FFFFFOU, nous aurons la séquence suivante :

4/6 (F), 1/2 (REP), 4/3 (000011 en binaire), 4/F (0), 5/5 (U).

C'est bien gentil tout ça, direz-vous, mais 000011 en binaire ça n'a jamais fait 4 mais plutôt 3 ! Tout à fait d'accord ! Mais comme il faut bien avoir un modèle sous la main pour pouvoir le répéter, le code du caractère provoquera le premier affichage, et il faudra donc ôter 1 du nombre de fois que vous désirez voir reproduire le caractère (cqfd).

Enfin, last but not least, votre Minitel possède une sonnerie. Vous l'activerez en employant la fonction BEL (0/7). A la réception de ce code, une sonnerie se déclenche pendant une durée inférieure à une seconde. On peut la prolonger en répétant le code BEL. D'où l'idée complètement loufoque de transmettre par votre Minitel non pas des caractères visualisables mais du morse, en vous servant des caractères «. » et « - », auxquels vous adjoindrez une sonnerie brève et une sonnerie longue (le mieux dans ce cas est la séquence BEL REP 4/2).

Certaines séquences provoquent un fonctionnement particulier de l'écran. Vous pourrez notamment faire passer votre Minitel en mode rouleau en tapant la séquence suivante :

ESC, 3/A, 6/9, 4/3.

Pour repasser en mode plein écran, il suffira de retaper la même séquence en remplaçant juste 6/9 par 6/A.

Deux autres couples de séquences ESCAPE commandent la mise en œuvre et l'arrêt du mode loupe. Ce mode particulier permet de grossir soit la moitié supérieure soit la moitié inférieure de l'écran. Pour passer en mode loupe haut, il faut faire :

ESC, 3/A, 6/9, 4/6

puis

ESC 3/A, 6/A, 4/6

pour repasser en mode normal.

De même, pour passer en loupe basse, vous utiliserez :

ESC, 3/A, 6/9, 4/7

puis

ESC, 3/A, 6/A, 4/7

pour désactiver cette fonction. Ces diverses séquences appartiennent au Protocole que nous allons étudier maintenant (nous laisserons en effet de côté l'étude du module clavier qui, dans le cadre de ce dossier, n'offre pas un grand intérêt).

Le protocole

Les quatre organes du Minitel sont pilotés par un logiciel spécifique baptisé Protocole. C'est lui qui, à l'instar d'un chef de gare, assure l'aiguillage des données d'un organe à un autre. Cette position de «grand répartiteur » fait que ses instructions ne sont pas soumises au mécanisme des aiguillages. Seuls les modules le sont, leur mise en relation étant assurée selon qu'ils sont en émission ou en réception. Pour chacun de ces deux modes, les modules disposent d'un code distinct. Résumons ceux-ci rapidement :

ModuleEmissionRéception
Ecran5/05/8
Clavier5/15/9
Modem5/25/A
Prise5/35/B

Ce qu'il faut également savoir, c'est que tous les ordres du langage Protocole nécessitent l'emploi de séquences Escape. Ces séquences sont analysées uniquement par le logiciel. Il y a au total 29 instructions dans le langage Protocole.

Notons toutefois que certaines séquences de type SEP, X sont également émises par le Protocole. Une fois la commande reçue, le Protocole garantit sa reconnaissance en envoyant une séquence d'acquittement, un peu à la manière de l'ACKnow-ledge transmis par une imprimante à l'ordinateur.

A la mise sous tension du terminal, ce dernier est en aiguillage standard, c'est-à-dire qu'aucun mode particulier n'est activé. A ce stade, une séquence SEP, 5/3 est diffusée vers tous les récepteurs.

Lorsque le terminal change d'état,

il envoie une séquence spécifique vers tous les récepteurs.

SEP, 5/0 marque le changement d'état résultant de la connexion du terminal à un serveur.

SEP, 5/1 est le message qui est diffusé quand le modem change de vitesse.

Lors de la détection de la porteuse, c'est la séquence SEP, 5/3 qui est expédiée !

Enfin, quand la prise péri-informatique est en service, le terminal diffuse la séquence SEP, 5/4.

Le terminal dans tous ses états

Nous savons que notre Minitel fonctionne en mode local lors de sa mise sous tension. Mais qu'en est-il quand il passe en mode terminal ? Son état physique, lors de la demande, se traduit par la séquence suivante : ESC, 3/9, 7/0. La réponse à cette mise en état est donnée par la séquence suivante: ESC, 3/A, 7/1, octet de status terminal.

Ici, deux remarques s'imposent :

  • Tout d'abord, il est indispensable de noter que les séquences Protocole peuvent comporter un ou plusieurs octets après le code Escape. Les créateurs de Protocole ont donc décidé de baptiser PRO1 les séquences n'ayant qu'un octet comme argument, PR02 celles qui en disposent de deux, et PR03 celles qui nécessitent un triptyque. En fait, le nombre d'arguments est donné par la valeur de l'octet qui suit le code Escape. 3/9 signale un seul octet, 3/A deux octets, 3/B trois octets. Ce qui, résumé, sous forme de tableau nous donnera ceci :

    PR01,X = ESC,3/9,X PR02,X,Y = ESC,3/A,X,Y PR03,X, YZ = ESC,3/B,X,YZ

    Ensuite, il nous faut préciser de quoi est constitué l'octet de status terminal. Celui-ci contient cinq bits significatifs. Il est consituté de la façon suivante :

    P-1-0-PT-DP-0-VM-EC P

    correspondant au bit de parité, PT indiquant l'état du fil du même nom sur la prise péri-informatique, le bit étant à 1 lorsque le périphérique est en transmission, DP étant le bit qui signale la détection ou la non-détection de la porteuse (1 signale la connexion), VM indiquant la vitesse du modem dans le sens « Paris-Province », entendez par là le sens serveur vers terminal (1 indique une vitesse de 1 200 bauds), EC signalant l'état du terminal lors de la connexion (la mise à 1 de ce bit sert dans le cas de retournement du modem).
Moralité : on ne dispose de pas moins de cinq indications par simple consultation de cet octet !

Mais, vous vous en doutez, il existe d'autres instructions, ne serait-ce que pour faire passer le modem de son bouclage permanent, lorsque le terminal est en mode local, en émission-réception dès qu'il y a détection d'une porteuse. On voit donc combien il est facile de réaliser un dispositif autorépondeur en se servant d'un tout petit programme. Pour ce faire, il suffit en effet de concevoir une fonction de scrutation permanente de l'octet de status qui boucle tant que le bit DP ne passe pas à 1. Dès le passage à 1, il faudra envoyer la séquence Escape correspondant à la connexion du modem, c'est-à-dire PRO1, 6/8. La déconnexion sera réalisée par la séquence PRO1, 6/7.

De module en module

Nous avons vu tout au début de cette étude comment étaient configurés les aiguillages entre les organes du Minitel (cf. fig. 1). Mais ce qu'il faut savoir, c'est que le serveur ou le périphérique connecté au terminal peut engendrer des commandes Protocole qui permettent de relier un module émetteur à plusieurs modules récepteurs. Voici les aiguillages possibles à partir d'un module émetteur.

récepteur ⇒ émetteurs
prise ⇒ modem ⇒ clavier
modem ⇒ prise ⇒ clavier
clavier
écran ⇒ prise ⇒ modem ⇒ clavier

Ces aiguillages sont effectués en utilisant une séquence ayant cette forme :

PR03, COMMANDE D'AIGUILLAGE, CODE RECEPTION DU MODULE RECEPTEUR, CODE EMISSION DU MODULE EMETTEUR.

Les codes des commandes d'aiguillage sont les suivants :

6/1 : ON, la liaison entre le module émetteur et le module récepteur est établie.

6/0 : OFF, la liaison est déconnectée.

Ainsi, par exemple, si nous voulons mettre en relation la prise péri-informatique et le modem, nous aurons la séquence suivante :

PRO3, 6/0, 5/A, 5/3.

Il est également possible de bloquer temporairement les communications à destination d'un module. C'est généralement le cas lorsque le module émetteur et le module récepteur sont identiques.

Tous ceux d'entre vous qui ont, peu ou prou, touché aux réseaux, savent bien qu'une des principales tâches du serveur consiste à réglementer les accès au disque. C'est un peu la même chose qui se passe ici avec les aiguillages. Chaque module peut faire une demande de status à n'importe quel moment afin de savoir soit î'état d'un module en tant qu'émetteur ou récepteur, soit l'état général des aiguillages. Bien évidemment, toute demande obtient réponse. Pour connaître l'état d'un module récep-ieur ou émetteur, on emploie la séquence :

PR02, 6/2 (TO), CODE RECEPTION OU EMISSION

La réponse (encore baptisée séquence d'acquittement) se présente sous la forme suivante :

PR03, 6/3 (FROM), CODE RECEPTION OU EMISSION DU MODULE, SUIVI DE L'OCTET DU STATUS D'AIGUILLAGE RECEPTEUR OU EMETTEUR DU MODULE.

Admettons que le module écran veuille connaître l'état du clavier, il enverra :

PR02, TO, 5/1.

Ce dernier, une fois sollicité, lui expédiera son acquittement sous cette forme :

PR03, FROM, 5/1, 11000010.

Tout comme l'octet de status terminal, l'octet de status associé à un module véhicule une foule d'informations.

Le bit de poids fort (bit 7) est le bit de parité, le suivant est à 1, les bits 4 et 5 ne servent pas et sont maintenus à 0, le bit 3 nous renseigne sur une possible liaison avec la prise péri-informatique (1,'la liaison est établie), le 2 nous renseigne sur le modem, le 1 sur le clavier, et le 0 sur l'écran.

Lorsqu'il reçoit une instruction d'aiguillage, le Protocole l'exécute et répond par un acquittement, c'est-à-dire qu'il fournit le nouveau status récepteur du module récepteur concerné après l'exécution de la commande.

Le format de l'acquittement est :

PR03, FROM, CODE RECEPTION DU MODULE RECEPTEUR, STATUS D'AIGUILLAGE DU MODULE RECEPTEUR CONCERNE.

Cet acquittement est systématiquement envoyé au module initiateur de la commande d'aiguillage.

Mais est-il possible d'envoyer ces acquittements à d'autres modules qui désireraient savoir ce qui se passe ? Tout à fait ! On utilise pour ce faire des commandes de diffusion. Le format de celles-ci est le suivant : DIFFUSION (6/5) : le module, désigné par le code réception, recevra toutes les séquences d'acquittement quel que soit le module initiateur ; NON DIFFUSION (6/4: le module, désigné par le code réception, ne recevra que les séquences d'acquittement dont il est l'initiateur. Donc, il faut non pas prendre cet ordre comme une pure et simple non diffusion mais plutôt comme un ordre de diffusion restreinte.

Quand nous retrouvons-nous en diffusion restreinte ? Dans plusieurs cas. Tout d'abord à la mise sous tension du terminal, ensuite lors d'une connexion ou d'une déconnexion du modem, ou encore lors d'une fin de session sur la prise en mode local.

Là encore, on a un octet de statut Protocole ; seuls les deux premiers bits de poids faible sont ici importants. Si le premier bit est à 0, c'est que les acquittements sont diffusés vers le modem. Si le second bit est à 0, c'est que les acquittements sont envoyés vers la prise.

Nous allons passer dans quelques instants à l'étude de la prise péri-informatique, ce qui nous permettra de vous proposer un petit montage, très simple à réaliser, et qui vous autorisera de faire communiquer votre Minitel avec la sortie RS 232 C de votre ordinateur. Pour toutes les autres commandes Protocole, reportez-vous à la figure 10.

La prise péri-informatique

Cette fameuse prise péri-informatique est, à notre sens, un des organes essentiels pour une bonne exploitation des possibilités de votre terminal Minitel. Elle se présente sous la forme d'une prise DIN à 5 broches. Sur celle-ci, les signaux suivants sont disponibles :

  • la fiche 1 assure la réception des données par le terminal (signal RX) ;
  • la fiche 2 est la masse ;
  • la fiche 3 assure l'émission des données par le terminal (signal TX) ;
  • la fiche 4 s'occupe du périphérique en transmission (signal PT) ;
  • enfin, la fiche 5 signale si le terminal est prêt (signal TP).
Examinons plus en détail ces différents signaux. Les signaux TX et RX ont 7 bits de données plus un bit de parité paire.

Le signal PT indique l'occupation du réseau des périphériques raccordés au Minitel. Le signal TP n'a guère d'importance dans la mesure où il est activé sur toutes les versions du Minitel. Guère d'importance pour l'instant, mais nous savons de source sûre que ce fil sera employé sur les prochaines versions pour alimenter des périphériques à faible consommation (quelques watts sous 5 V).

La vitesse des échanges est également programmable grâce aux signaux RX et TX. On peut aussi changer la vitesse et passer en 1200-1200 et 300-300. Pour ce faire, on utilise la séquence suivante :

ESC, 3/A, 6/B, OCTET VITESSE Cet octet a cette configuration : PT-1-E2-EI-E0-R2-R1-R0 On remarque tout de suite deux champs de trois bits, l'un dénommé E (pour émission), l'autre R (pour réception). Voici les valeurs que prennent ces champs :

001 = 75 bauds 010 = 300 bauds 100 = 1 200 bauds Toutefois, ces échanges ne sont validés que lorsque la prise a reçu une séquence d'acquittement de ce type : ESC, 3/A, 7/5.

Encore un mot du signal PT. Celui-ci conserve les aiguillages et les vitesses d'échanges entre les périphériques lorsqu'il passe à 0. Lorsqu'il passe à 1, le Minitel revient en mode standard. Il y aurait encore bien d'autres choses à dire sur le Minitel, mais nous vous laissons pour l'instant le soin de les découvrir par vous-même. Voici donc, en guise de « dessert », le montage promis.

Conclusion : un adapteur Minitel RS232

Ce circuit, très simple à réaliser, permet de relier la fiche péri-informatique du Minitel à la prise RS 232 de n'importe quel micro-ordinateur. Nous ne sommes pas encore en mesure de vous fournir le logiciel permettant d'exploiter cette liaison. Espérons que des lecteurs actifs nous apporteront rapidement une solution (langage machine Forth ou tout langage relativement « rapide »).

M.ROUSSEAU , Micro-Systemes - Novembre 1985

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Hardware » Amstrad et Minitel (CPC Revue)
» Hardware » Interface Minitel - Vt Link
» Hardware » Interface Minitel - Kentel le Coffret Telematique sur Amstrad
» Hardware » Interface Minitel - Amstel (Nogema Informatique)
» Hardware » Interface Minitel - Cortel
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.732-desktop/c
Page créée en 185 millisecondes et consultée 574 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.