25/03/2021

Le TO7/70


Revenons sur les bancs de l'école

 Je ne me souviens plus bien si le tout premier ordinateur que j'ai vu était le TO7 (et son alter égo le MO5) ou bien le Tavernier 6809 (un ordinateur en kit décrit dans la revue le Haut-Parleur). Le premier c'était à l'école (primaire), et le deuxième c'était à la maison. 
 
A cette époque (le milieu des années 80), on commence à trouver des ordinateurs dans les écoles, c'est le plan "Informatique pour tous" ou "100000 micros". La préface du livre présentant ce plan indique qu'en 1985 il y avait 20000 écoles équipées :
 
Si c'est le ministre qui le dit ...


 En pratique cela prenait la forme d'une salle avec une douzaine d'ordinateurs (des MO5 et des TO7), avec au centre un PC, l'ensemble relié en réseau avec un protocole propriétaire le "nanoréseau" (connexion en RS-485 et protocole HDLC). 
Cela permettait principalement d'échanger des fichiers entre les postes (maximum 31) des élèves et le poste principal. Si cela parait standard aujourd'hui ça ne l'était pas du tout à cette époque, en tout cas pas dans le monde de la micro-informatique grand public !

Et que faisait-on avec tout cela ? Eh bien dans mon école on a appris à programmer en LOGO, langage de programmation connu pour sa "tortue", sorte de petit curseur graphique permettant de réaliser des dessins à l'écran

J'ai dessiné un carré !

En réalité LOGO est un langage de programmation généraliste, bien plus évolué que le BASIC qui était le langage "standard" de l'époque.

Je me souviens d'un projet que nous avions fait sur plusieurs séances : nous avions créé tout un alphabet en dessin (chaque binôme créant quelques lettres), les programmes créés étaient envoyés sur le serveur, et à la fin tout le monde a pu récupérer sur son poste l'intégralité de l'alphabet et dessiner des mots juste en appelant les fonctions ( les programmes étant nommés tout simplement par la lettre qu'ils représentaient, il suffisait de taper par exemple B O N J O U R )
Encore une fois, on est dans les années 80, ce genre de choses était très nouveau pour l'époque !
 
Il faut parler aussi de la tortue Jeulin, qui était un petit robot (une sorte de demi-sphère transparente avec 2 roues et un crayon en son centre) pilotable depuis le langage LOGO. Je me souviens nettement l'avoir aperçu quelques fois à l'époque, mais par contre je ne pense pas l'avoir vu en fonctionnement.

Et forcément ce qui devait arriver arriva, j'ai fini par trouver un TO7/70 à un bon prix sur Ebay, et je l'ai commandé avant même de m'en rendre compte 😅

Voilà, voilà ...

Cet exemplaire est complet et en bon état, je n'ai eu qu'à nettoyer les plastiques. Le lecteur de cassette a nécessité un peu plus d'attention (un condensateur en court-circuit, un transistor HS et les courroies à changer).

C'est quoi un TO7/70 ?

Le "Télé Ordinateur 7/70" est dans la moyenne de l'époque, mais avec quelques éléments qui sortent un peu du lot :

  • Un processeur 6809 à 1Mhz
  • 48Ko de RAM + 16Ko de RAM vidéo
  • Graphisme 320x200 16 couleurs par blocs de 8x8
  • Un crayon optique intégré
  • 3 ports d'extension (bus système)
  • 1 port d'extension mémoire
  • lecteur de cartouche ROM
  • interface cassettes

 

L'extension série / parallèle

 

Le 6809 possède deux pointeurs de pile _ ce qui en fait un processeur de choix pour implémenter le langage Forth, il permet également de faire du code relogeable, et le langage machine est très orthogonal (pour une opération donnée elle va globalement s'appliquer de la même façon sur tous les registres et avec les mêmes modes d'adressage _ oui, tu peux te cacher Z80 !).
 
Pour la petite histoire il y a eu 2 système d'exploitation notables pour le 6809 : Flex et OS9. Le premier ressemble à MS-DOS et le deuxième à UNIX. Pas mal pour un petit CPU 8 bits ! Son seul tord est d'être arrivé un peu tard, au même moment où les processeurs 16 bits commençaient à être disponibles.
 
L'intérieur de la bête ...

 

Le crayon optique peut sembler aujourd'hui être une curiosité mais c'était le standard de l'époque, avant l'avènement de la souris. L'avantage ici est qu'il est directement intégré à l'ordinateur.
Pour les plus curieux cela fonctionne en regardant la valeur des registres du balayage vidéo au moment où le canon à électron du tube TV passe devant le capteur optique intégré au crayon. Cela permet d'en déduire la position X/Y. Et du coup il faut absolument un écran cathodique pour que cela fonctionne, car il n'y a pas de balayage sur un écran plat !
 
Le crayon optique

 

La partie graphique est à mon sens un peu le point faible de cette machine, principalement à cause de la contrainte de couleur identique sur 8x1 pixels. Conceptuellement c'est un affichage monochrome (320x200) avec par dessus un attribut de 2 couleurs possibles sur 8 pixels de large (sur une matrice de 40x200, donc). C'est similaire au ZX Spectrum (un peu mieux car on a 1 pixel de haut contre 8 sur le Spectrum) et produit le même genre de graphisme (où cela pêche au niveau des couleurs !).
 
Pour arriver à cela il y a 2 pages RAM de 8Ko (la première pour les 320x200 pixels monochromes, la deuxième pour les 40x200 attributs de couleur), commutables via un bit du PIA 6846. D'où les 16Ko annoncés de mémoire vidéo.
 
Ce point a été amélioré sur les modèles suivants, avec l'introduction de modes graphiques avec des couleurs attribuables au niveau de chaque pixel.

Ah ! Et il faut parler du clavier aussi ! Sur mon TO7 c'est un clavier avec des touches en gomme, avec des contacts à bulle (en gros comme les touches d'une télécommande de télévision). Un bip sonore vient confirmer l'appui sur une touche. Dit comme cela cela paraît très mauvais mais pourtant c'est tout à fait utilisable (à condition de ne pas vouloir écrire un roman avec !). A noter qu'il existe aussi une version avec un clavier plus classique (mais je voulais absolument en trouver un avec les touches comme ceux qu'il y avait à l'école !)

 

Charger et sauver des programmes

Au niveau stockage cet ordinateur a pas mal de possibilités, que ce soit avec les périphériques intégrés à l'ordinateur ou via les cartouches d'extension.

 

Le lecteur de cassettes

C'est le stockage classique des micros "8 bits", ici l'originalité est que le signal entre le lecteur de cassette et l'ordinateur est numérique, alors qu'habituellement c'est un signal audio. 
 
 

 
Classiquement les "1" et les "0" sont représentés par 2 fréquences audio (ici 6.3Khz et 4.5Khz),  et Thomson a intégré la démodulation dans le lecteur de cassette (ce qui a pour conséquence qu'on ne peut pas utiliser un magnétophone "normal" !)

 
Sur le synoptique on voit en haut un réglage de rapport cyclique (discriminant entre un "1" et un "0"), c'est le seul réglage et il est assez critique. Pour la sauvegarde c'est plus simple c'est directement un signal carré généré par le TO7 qui est envoyé sur la tête magnétique.
 
Il y a 2 façons de le régler : soit avec un oscilloscope et une cassette de test alternant les 2 fréquences de façon régulière, soit avec la cartouche Memo7 "Autotest 1". J'ai fait les deux, et j'ai eu plus de succès avec la cartouche de test.

Ah, et comment générer cette fameuse cassette de test ? Facile, il y a un petit programme en BASIC dans la documentation technique pour générer le bon motif : 


En alternative il existe un montage avec un Arduino pour simuler le lecteur de cassette ici : http://dcmoto.free.fr/bricolage/sdlep-tft/index.html
 
 

Les cartouches Memo 7

Ce sont des cartouches ROM généralement de 16Ko, avec quelques exceptions comme le BASIC 128 qui lui fait 32Ko, avec une commutation de banque (vu qu'il n'y a pas autant d'espace mémoire réservé pour les cartouches !). Il y a d'ailleurs une description très complète d'une cartouche 32Ko sur le forum System CFG ici : https://forum.system-cfg.com/viewtopic.php?f=18&t=2851
 
J'ai pour ma part fait la version "simple" de 16Ko (description prochainement !)
 


Le lecteur de disquettes

Ou plutôt les lecteurs de disquettes, il y a eu en effet plusieurs modèles qui prenaient tous la forme d'extension à brancher à l'arrière de l'ordinateur, connectée au lecteur dans un boitier séparé, avec son alimentation propre. Il y a eu des version en 5 pouces 1/4 et en 3 pouces 1/2.

Différents contrôleurs ont été utilisés selon les versions, mais le principe est toujours le même : l'extension contient, en plus du contrôleur disque, une EPROM avec des points d'entrées standardisés et le code qui va bien pour le piloter (aujourd'hui on appellerait ça un driver !).
 
Sur ce sujet l'adaptateur CD90-640 me semble intéressant  car il utilise un contrôleur disque WD1770 , assez facile à trouver et il devrait être possible de le reproduire. Un thread sur le sujet ici : https://forum.system-cfg.com/viewtopic.php?t=2741 (mais personne ne s'est lancé pour refaire cette extension !)

Enfin, une version "moderne" avec une carte SD est décrite partiellement sur le site DC MOTO : http://dcmoto.free.fr/bricolage/sddrive/index.html
 

Le nanoréseau

Des micro-ordinateurs 8 bits en réseau !  C'est ce qu'on avait à l'école, vu de l'ordinateur c'est comme un lecteur de disquettes. Chaque poste a une adresse (32 adresses en tout), et l'ordinateur maître (un PC/XT) possède une interface sous la forme d'une carte ISA. 
 
Ce serait très intéressant à reproduire, on trouve à peu près facilement l'interface côté TO7, par contre celle côté PC c'est un autre histoire.


Des idées de choses à faire avec un TO7/70

Que peut-on faire avec un ordinateur rétro comme celui-ci ? Quelques idées en vrac :
  • Faire fonctionner le BASIC  (fait !), taper des programmes (fait !)
  • Faire fonctionner le LOGO (fait !)
  • Numériser les cassettes qui ne seraient pas déjà disponibles sur Internet
  • Faire le lecteur de cassette "Arduino" SD2LEP
  • Trouver une interface série/parallèle (fait !), tester (série OK, parallèle à faire !)
  • Brancher une imprimante matricielle sur le port parallèle
  • Trouver une tortue Jeulin (difficile) ou refaire une tortue (oh le joli projet), tester avec le LOGO
  • Faire le lecteur des disquettes SD
  • Refaire un contrôleur de disquettes avec un WD

Pour en savoir plus



16/03/2021

SimH : le simulateur d'ordinosaures

A SIMulator for Historic computers

SimH  (http://simh.trailing-edge.com/) est une série d'émulateurs pour des ordinateurs_ plutôt des années 60/70_ dont vous avez peut-être déjà entendu parler mais que vous n'avez probablement jamais vu en vrai.

Parmi le plus connus il y a notamment l'IBM 1401, la série des PDP de DEC/DIGITAL et l'Altair 8800. Les deux premiers sont plutôt dans la catégorie mainframe (je simplifie pour les PDP), et l'Altair 8800 est la machine qui a lancé la micro-informatique (et la carrière de Bill Gates par la même occasion).

Un PDP-11 (source Wikipédia)

Amusons-nous avec SimH

Une fois le logiciel téléchargé, on se retrouve avec plein d'exécutables (un par ordinateur). Ici on va jouer avec l'émulateur de PDP-11, une série d'ordinateurs 16 bits de DEC/DIGITAL.

Si vous lancez l'exécutable "pdp11" , vous allez avoir un magnifique message du style :

PDP-11 simulator V3.8-1
sim>

 ... et là logiquement vous ne savez plus quoi faire !

En fait c'est normal car ces émulateurs ne sont pas vraiment fournis "tout prêts". 

Il faut dans un premier temps paramétrer l'ordinateur que l'on veut émuler. Le PDP-11 est en fait tout une série d'ordinateurs très différents les uns des autres, allant de la taille d'une pièce complète à celle d'une tour de PC, avec un (plusieurs) système(s) de bus sur lequel on va enficher des cartes pour ajouter tout un tas de fonctionnalités ...

Du coup il est indispensable de se familiariser avec le fonctionnement du "vrai" ordinateur, heureusement pour le PDP-11 on trouve à peu près toute la documentation que l'on veut ici : http://bitsavers.trailing-edge.com/bits/DEC/pdp11

 

Sur la suite de cet article nous allons lancer le BASIC à partir d'un lecteur de bande perforées, c'est une opération très bien décrite à plusieurs endroits, je ne vais faire que reprendre la manipulation en l'expliquant. Voir par exemple :

 

Donc, commençons par expliquer au simulateur à quoi ressemble la machine :

sim> set cpu 11/05 64k
Disabling XQ
sim>

 On vient d'expliquer à SimH que l'on veut un PDP11/05 avec 64K de RAM (c'est une machine qui est sortie en 1972, il y a une photo ici : http://gunkies.org/wiki/PDP-11/05)

Par défaut SimH ajoute tout un tas de cartes (avec des contrôleurs disque, des contrôleurs de lecteurs à bande, etc ...). Un "show conf" permet d'ailleurs de voir cela. Ici on veut un système minimum, la série de commande suivante permet de retirer tout cela :

sim> SET HK DISABLE
sim> SET RHA DISABLE
sim> SET PTP DISABLE
sim> SET DZ DISABLE
sim> SET RL DISABLE
sim> SET RX DISABLE
sim> SET RP DISABLE
sim> SET RQ DISABLE
sim> SET TM DISABLE
sim> SET TQ DISABLE
sim> SET RK DISABLE

 Voilà, il ne nous reste plus qu'un CPU, de la mémoire, un port série pour le terminal. Ajoutons le lecteur de bande perforées (Paper Tape Reader) :

sim> set ptr enable

 Alors, c'est là que ça devient intéressant : l'ordinateur que l'on vient de configurer n'a strictement aucun logiciel sur lequel démarrer ! Comment va-t-on lui demander de faire quelque chose ? C'est là que le panneau avant avec tous les voyants et interrupteurs entre en jeu :

Le panneau avant d'un PDP11/70 (source Wikipédia)

 

En plus de faire joli, les interrupteurs permettent de sélectionner une adresse et de rentrer une donnée en mémoire, et les voyants permettent d'en voir le contenu. Sur les PDP-11 plus récents (LSI-11), il n'y a plus ce panneau avant et à la place il y a un équivalent (ODT) qui prend la forme de commandes à taper sur le terminal série, directement intégré dans le microcode du CPU !

Le code de démarrage ressemble à cela :

xx7744 016701 mov device,r1 get csr address
xx7746 000026
xx7750 012702 loop: mov #offset,r2 get offset
xx7752 000352 offset:
xx7754 005211 inc (r1) read frame
xx7756 105711 wait: tstb (r1) wait for ready
xx7760 100376 bpl wait
xx7762 116162 movb (r1),bnk(r2) store data
xx7764 000002
xx7766 xx7400
xx7770 005267 inc offset bump address
xx7772 177756
xx7774 000765 br loop
xx7776 177550 device: HSR csr, or 177560 for teletype

(je l'ai trouvé sur le site vcfed.org)

La première colonne c'est l'adresse (on est en octal, comme souvent sur ces vieilles machines), la deuxième colonne c'est le code machine (sur 16 bits, ça donne des nombres à 6 chiffres en octal) et la troisième c'est le mnémonique en texte. En gros ce code lit les octets depuis le lecteur de bandes perforées (vu de la machine ce sont des octets qui arrivent sur un port série), et il va les ranger en mémoire les un à la suite des autres. 

Pour faire cela dans SimH, il faut utiliser la commande "deposit <adresse> <donnee>" :

DEPOSIT 157744 016701
DEPOSIT 157746 000026
DEPOSIT 157750 012702
DEPOSIT 157752 000352
DEPOSIT 157754 005211
DEPOSIT 157756 105711
DEPOSIT 157760 100376
DEPOSIT 157762 116162
DEPOSIT 157764 000002
DEPOSIT 157766 157400
DEPOSIT 157770 005267
DEPOSIT 157772 177756
DEPOSIT 157774 000765
DEPOSIT 157776 177550
DEPOSIT SR 157744

La dernière commande c'est pour positionner les interrupteurs en facade dans une position particulière (SR = switch register), c'est un moyen primitif de fournir un paramètre à un programme.

On est presque prêt à lire des données sur la bande perforée, il nous manque juste ... une bande perforée. On commencer par charger un bootstrap, pour cela il faut télécharger ce fichier : http://iamvirtual.ca/PDP-11/Basic-11/DEC-11-L2PC-PO.ptap et taper la commande :

attach ptr DEC-11-L2PC-PO.ptap

On  est maintenant prêt à charger le programme bootstrap, qui est une version plus évoluée du petit programme que l'on a rentré ci-dessus et sera capable de récupérer le code du BASIC (que l'on chargera depuis une deuxième bande perforée)

GO 157744

C'est la première commande qui fait travailler notre PDP-11 virtuel ! En vrai on verrait la bande perforée défiler dans le lecteur, ici il ne se passe pas grand chose et on est gratifié d'un :

 HALT instruction, PC: 157500 (MOV PC,SP)
sim>

Ce qui signifie que le programme a terminé et a exécuté un HALT, ce qui en vrai interrompt le CPU, et ici nous rend en plus la main sur le simulateur.

On va donc charger la deuxième bande perforée (le code du basic) dans le lecteur (fichier http://iamvirtual.ca/PDP-11/Basic-11/DEC-11-AJPB-PB.ptap) :

ATTACH PTR DEC-11-AJPB-PB.ptap

 On va pouvoir finalement charger le BASIC. Pour cela il faut mettre les interrupteurs en façade à 0 (cela correspond au démarrage normal du BASIC), et lancer le bootstrap que l'on vient de charger et qui se trouve à l'adresse 157500 :

 DEPOSIT SR 0

GO 157500

Le prompt du BASIC s'affiche après avoir appuyé sur [entrée], et on peut faire un print "bonjour" bien mérité (IL FAUT TAPER EN MAJUSCULES SINON CA NE MARCHE PAS !)

PDP-11 BASIC, VERSION 007A
*O
READY
10 PRINT"BONJOUR"
RUN
BONJOUR

STOP AT LINE   10
READY
LIST

10 PRINT"BONJOUR"
READY

Concluons dans la bonne humeur

C'était une petite introduction sans prétention à SimH, qui est un outil très intéressant pour tester ces vieilles machines inaccessibles au commun des mortel.

On voit également que juste avec un lecteur de bandes perforées c'est tout un processus pour avoir un BASIC sur le terminal ! Chose amusante j'aurais pu faire quasiment le même article avec l'Altair 8800 qui suit à peu près la même procédure pour charger le BASIC Misrosoft (voir par exemple ici https://www.youtube.com/watch?v=9s9N3OXHmN0)

En cherchant un peu sur les forums et sur les sites des musées informatiques, on voit également qu'il est très utilisé par les restaurateurs des vraies machine (pour l'archivage de logiciels, pour générer des images de disque, etc ...)