SimH: le simulateur d'ordinausores
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).
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 :
- http://iamvirtual.ca/PDP-11/Basic-11/Basic-11.htm
- http://avitech.com.au/?page_id=709
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 :
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 mortels.
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 ...)