Dans la famille des machines DEC 12 bits, une réponse existe dès le PDP-5 : le RIM Loader, pour Read-In Mode Loader. Ce petit chargeur devient notamment associé au PDP-8. Sa version classique pour le téléimprimeur ASR-33 tient dans 17 mots de mémoire de 12 bits. Assez peu pour être saisie à la main, mais assez pour permettre à la machine de charger ensuite des programmes bien plus importants.
Avant le premier programme : le panneau de commande
Sur un ordinateur actuel, un micrologiciel, comme celui qui fournit les services UEFI, est déjà présent dans une mémoire non volatile. À la mise sous tension, le processeur commence à exécuter ce code, qui initialise le matériel et organise la suite du démarrage.
Un PDP-8 dans une configuration classique sans dispositif d’amorçage automatique ne dispose pas de cette procédure prête à l’emploi. L’opérateur doit choisir où commence l’exécution et s’assurer qu’un programme utilisable se trouve à cette adresse. Pour cela, il peut agir directement sur la mémoire depuis le panneau frontal.
Ses interrupteurs permettent de composer une valeur binaire : chaque interrupteur représente un bit, à 0 ou à 1. Une commande sert à sélectionner une adresse ; une autre à y déposer une valeur. Ces opérations sont assurées par le matériel de la console : elles restent possibles même si aucun programme de chargement n’est présent.
On pourrait ainsi entrer tout un programme instruction par instruction. Mais la tâche devient vite longue et les erreurs faciles. L’idée consiste donc à saisir seulement le nécessaire pour que l’ordinateur prenne ensuite en charge la lecture du ruban.
Une nuance compte toutefois : la mémoire à tores magnétiques de ces machines conserve normalement son contenu sans alimentation. Le chargeur n’est donc pas nécessairement ressaisi après chaque extinction. S’il est resté intact, l’opérateur peut le réutiliser. La saisie manuelle sert notamment à l’installer ou à le rétablir lorsqu’il a été écrasé.
Un chargeur assez petit pour être entré à la main
Le RIM Loader remplit une mission limitée : lire un ruban au format RIM et déposer les valeurs qu’il contient aux adresses indiquées. Il n’affiche pas de menu et ne gère pas de fichiers. Cette simplicité explique sa petite taille.
Dans la version classique destinée au lecteur de l’ASR-33, il comprend 16 instructions et un emplacement de travail. Les instructions occupent les adresses 7756 à 7775 ; l’emplacement 7776 sert à mémoriser temporairement une adresse de destination.
Ces nombres sont écrits en octal, c’est-à-dire en base 8. Cette notation est pratique sur une machine de 12 bits : un chiffre octal représente trois bits, donc quatre chiffres représentent exactement un mot. Ainsi, la première instruction, notée 6032, correspond aux douze bits 110 000 011 010. L’opérateur peut reporter cette combinaison sur les douze interrupteurs du panneau.
Pour installer le chargeur, il sélectionne d’abord l’adresse 7756 avec les interrupteurs, puis utilise la commande LOAD ADDRESS. Il compose ensuite la valeur 6032 et la dépose en mémoire. Il recommence pour les instructions suivantes ; sur le PDP-8/E décrit dans le manuel, l’adresse avance automatiquement après chaque dépôt.
Le programme reste très court parce que le ruban lui fournit une grande partie des indications nécessaires. Pour comprendre ce choix, il faut regarder comment les informations sont perforées.
Comment les trous du ruban deviennent des mots de mémoire
Le ruban perforé utilisé ici comporte huit pistes d’information, appelées canaux, ainsi qu’une rangée de petits trous d’entraînement. À chaque position de lecture, la présence ou l’absence de trous forme un caractère codé.
Le même support peut transporter différents types d’informations. Un ruban ASCII représente du texte, par exemple le programme source destiné à un assembleur. Un ruban RIM contient directement des adresses et des valeurs binaires à charger. Le RIM Loader ne traduit donc pas un langage de programmation : il place en mémoire des valeurs déjà préparées.
Au format RIM, les canaux 1 à 6 fournissent six bits utiles par caractère. Il faut donc deux caractères successifs pour représenter un mot de 12 bits. Une perforation du canal 7 sur le premier caractère indique que la paire représente une adresse.
Chaque valeur à déposer est précédée de son adresse. Le chargeur lit donc deux caractères pour connaître la destination, puis deux autres pour reconstituer le contenu à y écrire. Quatre caractères de ruban servent ainsi à charger un mot de mémoire.
Le manuel DEC donne un exemple que l’on peut lire en octal : les groupes 77 et 61 forment l’adresse 7761 ; les groupes suivants, 32 et 12, forment la valeur 3212. Le chargeur écrit alors 3212 à l’adresse 7761. Ces nombres décrivent les bits utiles ; le canal 7 permet de distinguer l’adresse de la valeur.
Le début et la fin du ruban comportent aussi des portions d’amorce, reconnaissables à une perforation du seul canal 8, soit le code octal 200. Le chargeur ignore ces caractères : ils ne constituent ni une adresse ni une donnée à déposer.
Du ruban installé au programme chargé
Une fois le RIM Loader en mémoire, l’opérateur prépare le lecteur du Teletype ASR-33. Il installe le ruban dans le bon sens, engage ses trous d’entraînement et place son amorce devant le dispositif de lecture. Le téléimprimeur doit être en position LINE, afin de communiquer avec l’ordinateur.
Il charge ensuite l’adresse de départ du RIM Loader, 7756, puis lance son exécution. Sur le PDP-8/E décrit dans les pages du manuel, cette action passe par les commandes CLEAR, puis CONTINUE. Il met également le lecteur en marche avec sa commande START. Les intitulés et les gestes varient selon les modèles : il faut distinguer les commandes du processeur de celles du lecteur.
Le chargeur attend alors les caractères, reconstitue les mots et les dépose en mémoire. L’opérateur n’a plus à saisir chaque instruction, mais il intervient encore à la fin : lorsqu’il voit arriver l’amorce finale du ruban, il arrête le processeur avec HALT.
Dans cette version classique, charger le programme ne signifie pas le lancer. Le RIM Loader ne transfère pas automatiquement l’exécution au programme qu’il vient de charger. Pour utiliser celui-ci, il faut ensuite sélectionner son adresse de départ et démarrer l’exécution.
Pourquoi charger un second chargeur ?
Le RIM Loader pourrait charger directement un programme enregistré au bon format. En pratique, il sert souvent à installer le BIN Loader, ou Binary Loader. Charger un chargeur avec un autre peut sembler inutile ; cette organisation répond pourtant à un compromis précis.
Le format RIM répète une adresse avant chaque valeur, même lorsque les emplacements se suivent. Le format BIN économise ces répétitions : il fournit une adresse initiale, puis une série de valeurs. Le BIN Loader les dépose dans des cases successives en faisant avancer lui-même l’adresse de destination. Une nouvelle adresse peut être indiquée lorsqu’il faut charger une autre zone.
Pour trois valeurs à placer dans des emplacements consécutifs, le principe se résume ainsi. Les lettres A, B et C représentent ici des valeurs de 12 bits, et les adresses sont en octal.
| Format | Organisation simplifiée du contenu |
|---|---|
| RIM | Adresse 0200, valeur A ; adresse 0201, valeur B ; adresse 0202, valeur C. |
| BIN | Adresse initiale 0200, puis valeurs A, B et C. |
Pour de longues suites de mots, le ruban BIN est donc presque deux fois plus court. En contrepartie, son chargeur doit accomplir davantage d’opérations. Le manuel photographié indique 83 emplacements de mémoire pour le BIN Loader qu’il décrit : les saisir à la main serait nettement plus contraignant que d’entrer le petit chargeur RIM.
La solution consiste à distribuer le BIN Loader sur un ruban au format RIM. Une fois celui-ci chargé, l’opérateur le lance pour lire les programmes ordinaires au format BIN. Le premier chargeur réduit l’effort de saisie ; le second réduit le volume de ruban et le temps de lecture.
Moins de papier, moins d’attente et un contrôle des erreurs
Ce gain de temps est sensible avec l’ASR-33, dont le lecteur atteint seulement 10 caractères par seconde. En RIM, les quatre caractères nécessaires à chaque mot limitent le débit utile à environ 2,5 mots chargés par seconde.
Prenons un exemple calculé de 1 000 mots à placer dans une zone continue. Le format RIM demande 4 000 caractères, soit 6 minutes et 40 secondes de lecture à ce débit. En BIN, les valeurs occupent 2 000 caractères, auxquels s’ajoutent notamment l’adresse initiale et la somme de contrôle : la lecture prend donc un peu plus de 3 minutes et 20 secondes. Ces durées excluent les amorces et les manipulations de l’opérateur.
Le BIN Loader apporte aussi une vérification que le petit chargeur RIM classique ne réalise pas : il calcule une somme de contrôle, ou checksum, et la compare à celle enregistrée sur le ruban. Cette comparaison permet de repérer certaines erreurs de lecture ou altérations du contenu.
Dans la procédure du manuel, le BIN Loader arrête le processeur à la fin du chargement. Si l’accumulateur — un registre de travail du processeur — contient zéro, aucune erreur n’a été détectée par ce contrôle. Une valeur non nulle signale une différence. Cela ne garantit pas que le programme soit exempt de toute erreur, mais permet déjà de vérifier une partie du transfert.
Du chargeur aux programmes, puis aux systèmes sur disque
Une séquence courante consiste donc à entrer le RIM Loader, à lui faire charger le BIN Loader, puis à utiliser ce dernier pour installer un programme comme FOCAL, un outil de programmation ou un diagnostic. À chaque étape, l’opérateur lance le programme dont il a besoin.
Cette procédure n’est cependant pas l’unique façon de démarrer un PDP-8. Le manuel présente lui-même des variantes du RIM Loader pour un lecteur lent et pour un lecteur rapide. Avec des périphériques de stockage comme les disques, d’autres programmes d’amorçage permettent de charger un environnement logiciel depuis ce support.
Il faut ainsi distinguer la chaîne RIM–BIN–FOCAL du démarrage d’OS/8 depuis un disque. Dans le tutoriel du simulateur de Bernhard Baehr, OS/8 est lancé depuis un RK05 émulé à l’aide d’une amorce adaptée au contrôleur RK8-E. Il ne constitue pas une étape obligatoire après FOCAL.
Le RIM Loader n’est donc pas un système d’exploitation : il ne fournit ni commandes de gestion de fichiers ni organisation générale des ressources. Son intérêt historique se situe au début de la chaîne. En quelques instructions, il fait passer l’opérateur de la saisie manuelle à la lecture automatique d’un programme. Son économie de moyens repose sur un choix lisible : confier au ruban les adresses à suivre pour garder le premier programme aussi simple que possible.
Sources et documentation
- Digital Equipment Corporation, manuel consacré au PDP-8/E, extraits photographiés fournis pour cet article : pages 2-7 à 2-13 pour le lecteur, les formats ASCII, RIM et BIN, et les procédures ; page 2-15 pour les variantes du RIM Loader et le chargement depuis un stockage de masse. Références de pages correspondant à la pagination imprimée des extraits.
- Digital Equipment Corporation, PDP-8 Console Manual, référence DEC-08-NGCA-D : listing du RIM Loader, tableau 1, page 3.
- Digital Equipment Corporation, PDP-5 Manual, 1964 : annexe 3, procédures de chargement RIM et BIN, pages 65 à 67.
- Digital Equipment Corporation, Small Computer Handbook, édition 1970 : mémoire à tores et dispositifs de reprise après une coupure d’alimentation.
- Bernhard Baehr, PDP-8/E Simulator 2.x Quick Start Tutorial : chargement du BIN Loader, de FOCAL-8 et amorçage d’OS/8.
