|
|||||||||||||||
|
(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.
En retirant le capot arrière du minitel voici ce qu'il y a en 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.
Ci-dessus la carte mère du Minitel 2. On peut y repérer les composants principaux:
L'unitée centrale
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.
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.
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é).
La partie 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.
Datasheet du TS9347CP
Datasheet de la uPD4168C
Le 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 ;).
Datasheet du TS7514CP
Note d'appplication du TS7514CP
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.
Et le clavier ?
Le clavier est une classique matrice de contacts. Voici l'interconnexion interne :
Et voici la matrice du clavier :
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 :
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.
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