Construire un ordinateur électronique

En une phrase

Un ordinateur électronique est une machine qui traite l’information en combinant des millions d’interrupteurs électriques miniatures (les transistors) pour exécuter des calculs, stocker des données et faire des choix logiques à une vitesse vertigineuse.

Comment ça marche

Qu’est-ce que c’est ?

Un ordinateur électronique traite l’information sous forme de nombres binaires (0 et 1). Chaque 0 ou 1 est un bit, stocké dans un transistor ou une cellule de mémoire. L’ordinateur exécute des instructions les unes après les autres : lire la mémoire, additionner deux nombres, comparer deux valeurs, stocker un résultat.

L’architecture fondamentale, établie par Von Neumann, comporte cinq parties :

  1. L’unité de calcul (UAL) : effectue les opérations arithmétiques et logiques (addition, soustraction, ET, OU, NON)
  2. Le registre d’instructions : contient l’instruction en cours d’exécution
  3. La mémoire : stocke les données et les programmes (instructions)
  4. L’unité de commande : coordonne toutes les parties, lit les instructions une par une
  5. Les entrées/sorties : clavier, écran, télégraphe, etc.

Où le trouver / comment le fabriquer ?

Construire un ordinateur électronique de zéro est le défi technologique ultime décrit dans ce manuel. Il suppose qu’on maîtrise déjà :

Il est infiniment plus réaliste de récupérer et réparer des ordinateurs existants que d’en fabriquer un de zéro. Ce chapitre décrit les principes pour le cas où cela serait nécessaire.

Comment l’utiliser ?

Un ordinateur s’utilise en lui donnant des instructions (un programme). Les instructions sont stockées en mémoire et exécutées une par une, à grande vitesse. L’utilisateur entre des données (par un clavier, des cartes perforées, ou des interrupteurs), l’ordinateur calcule, et affiche le résultat (sur un écran, une imprimante, ou des voyants lumineux).

Étapes détaillées

1. Comprendre la logique booléenne

La logique booléenne est le fondement de tout ordinateur. Il existe trois opérations de base :

  • ET (AND) : la sortie vaut 1 seulement si les deux entrées valent 1
  • OU (OR) : la sortie vaut 1 si au moins une des entrées vaut 1
  • NON (NOT) : la sortie vaut l’inverse de l’entrée (0 devient 1, 1 devient 0)

En combinant ces opérations, on construit toutes les fonctions logiques :

  • NON-ET (NAND) : NON(A ET B). C’est la porte universelle : avec seulement des portes NAND, on peut construire n’importe quel circuit.
  • NON-OU (NOR) : NON(A OU B). Autre porte universelle.
  • OU exclusif (XOR) : la sortie vaut 1 si les deux entrées sont différentes. Utile pour l’addition binaire.

Chaque porte logique se réalise avec 2 à 6 transistors.

2. Construire des portes logiques de base

Avec des transistors et des résistances, on construit les portes logiques :

Porte NON (NOT) : 1 transistor

  • L’entrée est sur la base du transistor. Quand l’entrée est à 1, le transistor conduit et la sortie est à 0. Quand l’entrée est à 0, le transistor est bloqué et la sortie est à 1.

Porte NON-ET (NAND) : 2 transistors en série

  • Deux transistors en série entre la tension positive et la sortie. Leurs bases sont les deux entrées. La sortie vaut 0 seulement si les deux transistors conduisent (les deux entrées à 1).

Porte NON-OU (NOR) : 2 transistors en parallèle

  • Deux transistors en parallèle entre la sortie et la masse. Leurs bases sont les deux entrées. La sortie vaut 0 si au moins un transistor conduit (au moins une entrée à 1).

On assemble ces portes pour créer des fonctions plus complexes.

3. Construire un additionneur

L’additionneur est le coeur de l’unité de calcul.

Demi-additionneur (additionne 2 bits) :

  • Somme = A XOR B = ((A NAND B) NAND A) NAND ((A NAND B) NAND B)
  • Retenue = A AND B = (A NAND B) NAND (A NAND B)
  • Nécessite 5 portes NAND, soit 10 transistors.

Additionneur complet (additionne 2 bits + une retenue) :

  • Deux demi-additionneurs en cascade plus une porte OU pour la retenue finale.
  • Nécessite environ 25 transistors.

Additionneur 8 bits :

  • 8 additionneurs complets en cascade.
  • Nécessite environ 200 transistors.
  • Peut additionner deux nombres de 0 à 255.

4. Construire une mémoire

La mémoire stocke les données et les programmes. Il existe deux types :

Mémoire à tores magnétiques (ferrite core memory) :

  • Des petits tores de ferrite (anneaux de 1 à 2 millimètres) enfilés sur des fils formant une grille.
  • Chaque tore stocke 1 bit. Un courant dans le fil l’aimante dans un sens (1) ou dans l’autre (0).
  • C’est la mémoire la plus réalisable artisanalement. Elle ne nécessite pas de semi-conducteurs.
  • Pour 8 Ko de mémoire (65536 bits), il faut 65536 tores et des milliers de fils. C’est un travail méticuleux mais réalisable.

Mémoire à transistors (SRAM) :

  • Chaque bit est stocké dans une bascule (flip-flop) faite de 4 à 6 transistors.
  • Plus rapide que la mémoire à tores mais nécessite beaucoup plus de transistors : 65536 bits = environ 400000 transistors.
  • Inenvisageable artisanalement pour une mémoire importante.

Recommandation : utiliser la mémoire à tores de ferrite pour les grandes capacités et des registres à transistors (quelques dizaines de bits) pour le calcul rapide.

5. Construire l’unité de commande

L’unité de commande coordonne toutes les opérations. Elle lit les instructions en mémoire une par une et les fait exécuter.

Chaque instruction est un nombre binaire de 8 à 16 bits, divisé en deux parties :

  • Le code opération : quelle opération effectuer (addition, soustraction, lecture, écriture, saut)
  • L’opérande : à quelle adresse mémoire s’appliquer

Cycle d’exécution :

  1. Lire l’instruction à l’adresse pointée par le compteur de programme
  2. Décoder l’instruction (quel code opération, quelle adresse)
  3. Exécuter l’opération
  4. Avancer le compteur de programme à l’instruction suivante
  5. Recommencer

L’unité de commande est faite de portes logiques et de registres (bascules qui stockent temporairement des valeurs).

6. Construire les entrées/sorties

Les entrées/sorties permettent à l’homme de communiquer avec la machine.

Entrées possibles :

  • Interrupteurs à bascule : chaque interrupteur représente 1 bit. 8 interrupteurs = 1 octet. L’utilisateur positionne les interrupteurs et appuie sur un bouton pour charger la valeur en mémoire.
  • Clavier rudimentaire : un clavier de 16 touches (hexadécimal) pour entrer des programmes et des données.
  • Cartes perforées : du papier avec des trous qui représentent les bits. Un lecteur optique ou mécanique lit les trous.

Sorties possibles :

  • Voyants lumineux (diodes) : chaque diode représente 1 bit. 8 diodes = 1 octet affiché en binaire.
  • Écran à tube cathodique : un tube à vide modifié pour afficher des caractères. Très complexe.
  • Imprimante : des solénoïdes qui frappent un ruban encreur sur du papier.
  • Téléscripteur : un télégraphe adapté pour imprimer des caractères.

7. Assembler l’ordinateur

L’assemblage consiste à relier toutes les parties sur un circuit imprimé.

Circuit imprimé artisanal :

  • Prendre une plaque de cuivre collée sur un support isolant (époxy, bakélite, ou même bois recouvert).
  • Dessiner les pistes de connexion avec de la peinture ou du vernis résistant à l’acide.
  • Tremper la plaque dans de l’acide (chlorure ferrique ou acide chlorhydrique + eau oxygénée) qui dissout le cuivre non protégé.
  • Il reste des pistes de cuivre qui forment les connexions électriques.
  • Percer des trous aux emplacements des composants.
  • Souder les composants sur les pistes.

Pour un premier ordinateur, viser une architecture 8 bits avec :

  • 8 registres de 8 bits chacun
  • 256 octets de mémoire à transistors (registres rapides)
  • 8 Ko de mémoire à tores de ferrite
  • Une unité de calcul 8 bits (addition, soustraction, ET, OU, NON, décalage)
  • 16 instructions machine
  • Entrée par interrupteurs, sortie par voyants

Cet ordinateur nécessite environ 2000 à 5000 transistors, ce qui est considérable mais envisageable s’ils sont fabriqués individuellement ou récupérés.

8. Écrire un programme

Le programme est une suite d’instructions en langage machine (binaire). Pour un ordinateur simple avec 16 instructions, chaque instruction est un mot de 16 bits :

  • Bits 0 à 3 : code opération (0000 = chargement, 0001 = stockage, 0010 = addition, etc.)
  • Bits 4 à 15 : adresse mémoire ou donnée

Exemple de programme pour additionner deux nombres :

  1. Charger la valeur à l’adresse 100 dans le registre A
  2. Charger la valeur à l’adresse 101 dans le registre B
  3. Additionner A et B, résultat dans A
  4. Stocker A à l’adresse 102

Un assembleur (programme qui traduit des mnémoniques en binaire) peut être écrit sur papier puis entré manuellement. Les mnémoniques sont plus faciles à mémoriser que le binaire.

Variations par climat

  • En climat froid : l’électronique fonctionne bien. Les semi-conducteurs ont de meilleures performances à basse température. Prévoir un réchauffement pour les affichages à tube cathodique.
  • En climat chaud : les semi-conducteurs surchauffent. Prévoir une ventilation forcée ou un refroidissement par eau. Les mémoires à tores de ferrite sont plus résistantes à la chaleur que les mémoires à transistors.
  • Environnement isolé : un ordinateur de 2000 transistors consomme quelques watts à quelques dizaines de watts. Il peut fonctionner sur batterie ou sur dynamo.

Pièges et erreurs courantes

  • Erreur de câblage : un seul fil mal connecté et l’ordinateur ne fonctionne pas. Vérifier chaque connexion avec un multimètre.
  • Bruit électrique : les parasites sur les lignes d’alimentation perturbent les circuits. Ajouter des condensateurs de découplage (0,1 microfarad) près de chaque circuit intégré.
  • Vitesse d’horloge trop élevée : les transistors artisanaux sont lents. Ne pas dépasser quelques dizaines de kilohertz. Les premiers ordinateurs fonctionnaient à 100 kilohertz.
  • Mémoire insuffisante : un ordinateur sans assez de mémoire ne peut exécuter que des programmes triviaux. 4 Ko minimum pour faire quelque chose d’utile.
  • Surcharge thermique : des milliers de transistors dissipent de la chaleur. Prévoir une ventilation.
  • Complexité : ne pas viser trop grand pour un premier ordinateur. Commencer par un additionneur, puis une unité de calcul, puis un ordinateur 4 bits, puis 8 bits.

Une fois que vous savez faire ça, vous pouvez débloquer

Notes

  • Le premier ordinateur électronique programmable, le Colossus, a été construit en 1943 en Grande-Bretagne pour casser des codes secrets. Il contenait 1500 tubes à vide.
  • L’ENIAC (1945) était le premier ordinateur électronique généraliste. Il pesait 30 tonnes, mesurait 170 mètres carrés et consommait 150 kilowatts.
  • Les premiers ordinateurs à transistors sont apparus vers 1958.
  • Un ordinateur artisanal avec 5000 transistors serait environ un million de fois moins puissant qu’un smartphone de 2020, mais il serait capable de calculs utiles.
  • La mémoire à tores de ferrite a été la technologie dominante de 1955 à 1975. Elle est lentement enroulée à la main, ce qui en fait un excellent candidat pour la fabrication artisanale.
  • Il est beaucoup plus réalique de réparer des ordinateurs existants ou d’en construire un à partir de composants récupérés que de tout fabriquer de zéro.

Ressources externes