| Présentation | Hardware | Programmation | Links | Divers | Contact | TwitterTwitter |

Etude technique du Minitel

(En cours de redaction!)

Le but de cette page est de présenter les résultats de l'étude technique du Minitel que j'ai réalisé il y a quelques années.
Mais pourquoi faire le reverse engineering du Minitel, objet complètement démodé, aux capacités apparemment très limitées ?
En fait cela vient d'un pari technique : Remplacer le logiciel interne du Minitel pour en démontrer les réelles capacités graphiques.
Beaucoup d'objets informatiques des années 80/90 ont leurs démos, mais sur Minitel cela n'a jamais été fait auparavant.
La grande diffusion de ce terminal en France mérite que l'on s'intéresse un peu à lui ;-)

Le sujet d'étude est un Minitel 2, appareil à l'origine destiné à la decheterie.

Minitel 2 minitel2_modelnumber

En retirant le capot arrière du minitel voici ce qu'il y a en interne:

minitel2_interne

Il y a principalement 2 cartes : La carte latérale est la carte du moniteur CRT du minitel. Cette dernière contient également la partie alimentation de l'ensemble.
La carte en position horizontale est la carte CPU du minitel qui est en fait le coeur du minitel.

minitel2_motherboard

Ci-dessus la carte mère du Minitel 2. On peut y repérer les composants principaux:

L'unitée centrale

minitel2_cpu

L'unité centrale du Minitel 2: Un microcontrôleur 80C32. Il s'agit en fait de la version ROMless du microcontrôleur 80C51. Ce microcontrôleur est cadencé par la partie vidéo à 14,31818 Mhz. En terme de puissance de calcul sachant qu'il faut au minimum 12 cycles d'horloges pour une instruction, cela tourne autour de 1 MIPS.

Ce microcontrôleur contient 256 octets de RAM en interne.

docticoDatasheet du 80C32

Le petit circuit en dessous est une EEPROM I2C de 256 octets (24C02) contenant l'annuaire de l'utilisateur ainsi que le mot de passe de protection du minitel.

minitel2_eprom

L'EPROM contenant le logiciel du minitel. Ce chip est sur support pour une eventuelle mise à jour. Il s'agit d'une 87C257, une EPROM de 256Kbits (32Ko). La différence majeure avec une classique 27C256 est qu'elle est capable de se connecter directement au bus multiplexé du 80C32 sans latch externe (le latch LS373 est intégré).

docticoDatasheet de la 87C257

La partie Video

minitel2_video

La partie vidéo du minitel est la partie la plus intéréssante. Le TS9347 est un composant vidéo capable d'afficher du texte Alpha-Numérique.
Le composant en question gêre directement 8KB de DRAM (théoriquement extensible jusqu'à 32Ko).
Il est possible de définir ses propres tables de caractères, d'ou le nom "Semi-Graphic Display Processor".

Le microcontrôleur n'a pas d'accès direct à cette mémoire mais il peut envoyer des commandes de lectures/écriture via le processeur graphique.

L'horloge issue de l'oscillateur du processeur graphique cadencée à 14,31818 Mhz est également utilisée par le microcontrôleur 80C32.

doctico Datasheet du TS9347CP
doctico Datasheet de la uPD4168C

Le Modem

minitel2_modem

La partie modem, composée d'un TS7514CP, un modem V.23 (modulation / démodulation en FSK a 1200/75 baud ou 75/1200 baud) .
Ce dernier est également connecté à un haut parleur interne au minitel et est capable de générer les fréquences DTMF 697Hz, 770Hz,852Hz, 941Hz, 1209Hz, 1336Hz, 1477Hz, 1633Hz ainsi que les fréquences de modulation 390Hz, 450Hz, 1300Hz et 2100Hz.

Il ne reste plus qu'à composer quelque chose avec ça ;).

doctico Datasheet du TS7514CP
doctico Note d'appplication du TS7514CP

Architecture du Minitel 2

Comment tous cela est interconnecté ?

Ci-dessous un draft du schema du minitel 2. A noter qu'il y a uniquement les interconnexions "numériques". Les parties vidéo et modem sont à ce jour manquantes.

UC_Decodage_Clavier_small

Architecture_Minitel_2

Et le clavier ?

Le clavier est une classique matrice de contacts. Voici l'interconnexion interne :

minitel2_clavier

Et voici la matrice du clavier :

matrice_clavier_minitel

IO & Mem Mapping :

0x2000 : Registre de contrôle modem / CRT / Relais :

#define HW_CTRL_MCBC 0x01
#define HW_CTRL_MODDTMF 0x02
#define HW_CTRL_CTRON 0x08
#define HW_CTRL_OPTO 0x10
#define HW_CTRL_LINERELAY 0x20

0x4000 : Chip video TS9347.

Connexion modem:

#define RXD_MODEM P3_3 // Modem -> CPU
#define RTS_MODEM P1_4 // CPU -> Modem
#define TXD_MODEM P1_3 // CPU -> Modem
#define PRD_MODEM P1_2 // CPU -> Modem
#define DCD_MODEM P1_1 // Modem -> CPU
#define ZCO_MODEM P3_2 // Modem -> CPU

Connexion clavier:

#define SERIN_KEYB P1_0 // Shifter clavier -> CPU
#define LOAD_KEYB P1_5 // CPU -> Shifter clavier

Connexion EPROM:

#define EPROM_SCL P1_6 // 24C02 EPROM SCL
#define EPROM_SDA P1_7 // 24C02 EPROM SDA

Connexion prise péri-informatique:

#define SER_RXD P3_0 // RX
#define SER_RXD P3_1 // TX
#define SER_RDY P3_5 // Ready

Bon et après ? Que peut on faire avec cela ?

Une fois que les composants sont identifiés et que l'architecture générale du minitel est bien comprise, il est maintenant possible de le programmer.
Le microprocesseur étant basé sur un coeur de 80C51, j'ai simplement utilisé SDCC :

http://sdcc.sourceforge.net/

A l'aide de ce compilateur j'ai pu réaliser différents tests de différentes routines d'affichage (2D et 3D) afin de déterminer les capacités de la machine. En voici quelques exemples en images :

Pas mal pour un minitel ;)

Au passage voici le dump de l'EPROM d'origine contenant le firmware de cette machine : Minitel_ROMs.zip
(L'archive contient les versions BV4 et BV9 du Minitel 2/NFZ400 ainsi que la version BU3 du Minitel 1/NFZ330)

Bientôt plus de détails !

30 Avril 2017 :

J'ai ajouté le support de l'émulation hardware du Minitel 2 dans Mame :

Mame avec le support de l'emulation hardware du Minitel

L'archive contient Mame ainsi que la ROM d'origine et celle de la démo avec différents effets graphiques 2D et 3D.

mame_minitel

Donc maintenant les ROMs alternatives peuvent être écrites et testées sans forcement avoir le matériel.

A noter que les sources de la démo sont disponibles sur GitHub:

https://github.com/jfdelnero/minitel/tree/master/minitel2/the_minitel_demo

L'ensemble se compile avec SDCC.

Présentation faite à la Classic Computing 2015 à Thionville le 3/10/2015 : Presentation_Etude_Minitel_2_FR_DE.pdf

15/04/2011


(C) HxC2001 / Jean-François DEL NERO