
Exactement un an s'est écoulé depuis la dernière publication et j'ai pensé que le premier avril était un grand jour pour le résumé annuel de mes trois projets informatiques fous. A cette époque, le projet n'existait que sur le papier, mais maintenant il est définitivement devenu une réalité.
Sonnerie des blocs de relais, les calculs de relais les plus rapides au monde (mais ce n'est pas précis), conclusion, indicateurs de vide et LED clignotantes.
Contexte historique

Figure 1: Un volume de "Radio-Electronic Toys" de Wojciechowski, 1979, battu par ma vie et moi-même.
Il était une fois, quand tout était grand et que j'étais petit (un an comme ça en 2002), mon père m'a donné le livre Radio-Electronic Toys de Wojciechowski. Ensuite, je n'avais pas d'ordinateur, mais je n'ai pas entendu parler d'Internet du tout, et un livre familier à beaucoup s'est avéré être juste un entrepôt d'appareils électroniques divertissants. Parmi eux, il y avait une description d'un ordinateur électronique et d'un modèle de circuit simple sur des relais téléphoniques. Ce modèle, étant dans ma deuxième année à l'université en 2008, j'ai mis en place pour un rapport sur l'histoire des ordinateurs.

Figure 2: RCM - ALU 4 bits
À cette époque, j'explorais déjà les vastes étendues d'Internet et j'étais conscient de l'existence à la fois de l' ordinateur relais de Harry Porter, de l' ordinateur relais n ° 2 et de l'ordinateur relais Zuse - je pensais à construire ma propre unité.
Pour ceux qui connaissent mal ce que les autres ont, je suggère de visionner ma revue vidéo des ordinateurs relais faits maison. Au fil de l'année, il est un peu dépassé, mais n'a pas cessé d'être moins intéressant:
Dans le même 2008, dans les cours sur les fondements théoriques de l'électrotechnique, j'ai décidé du composant principal - un relais reed. Dans l'un des laboratoires, j'ai été surpris d'observer sur la forme d'onde le fonctionnement du bébé RES55 à une fréquence de 50 Hz. Cela m'a fait une impression durable et j'ai commencé à accumuler des interrupteurs à lames.
10 ans se sont écoulés ....
Et après une décennie, le projet avance à grande vitesse pour sortir. Tout est passé d'un point mort en novembre 2016, lorsque l'architecture actuelle est née. Malheureusement, j'ai décidé de fabriquer toutes les cartes de circuits imprimés par moi-même ... en conséquence, un mètre carré de PCB double face s'est transformé en trou noir et a aspiré en lui-même plusieurs centaines d'heures de travail, ce qui représente environ six mois pour un employé. D'avril à novembre 2k17, il ne s'est pratiquement rien passé.
Infographie

L'architecture de la machine correspond à la machine de Turing. Il y a une bande avec des données - RAM pour 64 kiloslov (mot 16 bits). RAM - puces de cache d'une sorte de tapis. cartes mères pour Intel Pentium. Pour l'authenticité, rendez-vous dans la section ... Authenticité. La RAM à microcircuit est utilisée dans la plupart des ordinateurs relais maison que je connais.
L'élément central est un additionneur parallèle 16 bits. Il est responsable du calcul du numéro de la prochaine instruction et travaille avec des données et un pointeur vers celles-ci.
Aux entrées de l'additionneur se trouvent un registre temporaire de 16 bits et un registre de commande de 12 bits. 12 bits sont également envoyés aux 4 bits de poids fort de l'additionneur, ce qui donne un "plein" 16 bits. Il est important que l'additionneur fonctionne correctement avec l'addition et la soustraction d'un nombre de 12 bits.
L'inconvénient est évident - à la fois, nous ne pouvons sauter que 2 ^ 12 instructions en arrière ou en avant, ou changer le pointeur ou les données selon cette valeur. Le premier - vous devez tenir compte lors de l'écriture de programmes, le second - vous pouvez toujours répéter la procédure.
La soustraction est dans le code supplémentaire. Le transfert parallèle fournit un retard de calcul constant - seulement 3 relais en série. Ce n'est pas plus de 2 ms.
Le registre IP et le registre AP, ainsi que l'entrée RAM, sont connectés à la sortie de l'additionneur via des verrous.
Calculs
Les opérations principales sont exactement deux pièces. Dans un cas, nous travaillons avec le calcul d'une nouvelle valeur de pointeur, dans l'autre, une nouvelle valeur de données.
Chaque front montant commence le calcul d'un nouveau numéro d'instruction. Essentiellement, IP ++ est terminé. Après le calcul, IP est appliqué à l'entrée d'adresse de la carte mémoire et via le bus de données, l'instruction entre dans le registre de commande. Les 4 bits supérieurs déterminent la future instruction, les 12 bas ne sont probablement pas égaux à zéro et à l'avenir l'additionneur changera le nombre dans le registre temporaire exactement de cette valeur.
Chaque front descendant commence l'opération.
Pour les opérations avec des registres AP et IP, la séquence d'actions ressemble à ceci:
- Via le bus d'adresse, le contenu du registre IP (AP) est copié dans le registre temporaire;
- Des registres temporaires et de commande sont fournis à l'entrée de l'additionneur. Après 2 ms, la réponse sera prête à la sortie de l'additionneur.
- La réponse est enregistrée dans le registre IP ou AP.
Il y a quelques fonctionnalités. Pour les commandes AP + BIAS et AP-BIAS, c'est exactement le cas, pour les commandes conditionnelles, lorsque par exemple IP = (* AP == 0?) IP + 1: IP + -BIAS, nous devons toujours télécharger la valeur actuelle de la cellule de données sur le bus de données et la supprimer informations provenant d'un détecteur nul.
Pour les opérations AP + BIAS et AP-BIAS, la séquence est légèrement différente.
- Via le bus de données, la valeur actuelle de la cellule mémoire est écrite dans le registre temporaire.
- Des registres temporaires et de commande sont fournis à l'entrée de l'additionneur. Après 2 ms, la réponse sera prête à la sortie de l'additionneur.
- Le registre AP continue d'être alimenté à l'entrée de la carte mémoire. La réponse de l'additionneur est écrite directement dans la mémoire.
Les calculs se produisent toujours en mode 16 bits. Mais le drapeau nul de la branche conditionnelle est défini comme:
Z = ((16bit?) *AP : (*AP) & 0x00FF == 0) ;
La construction
Rien n'a changé depuis la dernière fois.
Module

Figure 3: Module informatique. De gauche à droite: module D-flip-flop, module diode, module 2AND / 2XOR
Au cœur se trouve un petit module de 40x64 mm. Chaque module est une carte de circuit imprimé à 4 relais, sur laquelle une opération logique simple est implémentée. Il y a un connecteur pour 16 contacts (il y a des modules pour 12 et 14 contacts) et jusqu'à 4 LED. Toutes les tailles sont strictement fixes.

Figure 4: Modules pendant l'assemblage
Par exemple:
- Module 2AND / 2XOR - 2 opérations logiques indépendantes - 2AND et 2XOR. 32 pièces sont utilisées dans le bloc additionneur, deux modules par bit. Au début, les 4 LED ont été soudées, mais les circuits du module sont tels que deux relais sur chaque module sont connectés en parallèle, et pour réduire la puissance consommée par l'unité, la moitié des LED a été retirée.
- Module D-trigger - 64 pièces vont à deux blocs de registres. Parmi ceux-ci, 60 sont des déclencheurs sans signal d'activation.
- Module de diode - seulement 8 diodes sur la carte pour implémenter une diode à entrées multiples OU. Un hack sale, mais il permet d'économiser à la fois sur un relais (j'ai encore environ 400 relais en réserve maintenant) et sur le temps - par rapport à un relais, le signal est transmis à la sortie d'un tel élément logique instantanément.
- Module 2 & - Ceci est la brique de base. En fait, il y a 4 relais avec un contact de commutation pour implémenter absolument n'importe quel circuit logique. Ils iront à des blocs de logique en quantité inconnue.
- Universal 2AND / 2OR qui est fait de telle manière qu'il permet d'implémenter presque toutes les fonctions logiques - 4AND, 4OR, 4AND-NOT, 4OR-NOT et ainsi de suite. Il ira également au bloc logique en une quantité inconnue.
Comme je l'ai dit - après avoir perdu beaucoup de temps à faire des circuits imprimés faits maison, j'ai paniqué et j'ai commandé un ensemble complet de circuits imprimés aux Chinois. Au cours de la première semaine, j'ai assemblé les premiers modules. Et un mois plus tard, tous les modules du bloc additionneur étaient prêts.

Figure 5: bloc Adder
Bloquer
32 modules de 8 modules sur 4 rangées sont combinés en un bloc fonctionnel. Il y a 5 blocs au total (dans le pire des cas, 6):
- Le bloc additionneur est un additionneur complet 16 bits. Deux entrées 16 bits pour les nombres, 1 ligne de transfert zéro bit, deux sorties. L'un est l'opération de sommation, l'autre est le XOR entre les entrées. Il peut être utilisé comme une opération indépendante.
- Bloc de registre IP / AP - Deux registres 16 bits indépendants sans signal d'activation. Les résultats de Q et ~ Q sont utilisés directement et sont alimentés par des verrous à l'endroit où ils suivent. Il était possible de souder 4 relais, mais pour sauver le relais, la fonctionnalité a été mise sur des verrous externes.
- Bloc de registres TMP / CMD - Il y a ici trois registres. L'un est un registre temporaire 16 bits. Exactement la même chose que IP ou AP. Le second est de 12 bits; sa sortie est connectée à l'entrée de l'additionneur via un verrou. Le troisième est 4 bits, avec un signal d'activation intégré. Il est utilisé pour stocker l'instruction en cours.
- Blocs logiques - 2 pièces. Ou trois. Le schéma est encore inconnu. Les calculs préliminaires montrent que 64 modules suffiront (GOTO: Memory Board).
À la base de chaque bloc, la plaque de base mesure 200x150 mm, sans câblage. Tout ce qui s'y trouve, ce sont 32 connecteurs et broches carrées qui sortent par le bas pour une installation enveloppante.

Figure 6: Plinthe et son panier
Les modules qui sortent dans le connecteur comme ça ne sont pas fiables. Ils s'accrocheront ici et là, passeront de secousses et réduiront en tout point la fiabilité de la structure. Pour les réparer, j'ai dessiné et imprimé des paniers spéciaux avec des rainures. Les modules n'iront certainement nulle part en eux - ils ont survécu à un trajet en train vers Moscou et vice versa sans aucun problème.
Le panier aurait pu être dessiné plus facilement - avec une couche de 0,32 mm, il imprimerait un peu plus de 10 heures. Trois paniers sont imprimés avec du plastique PLA, deux autres avec HIPS. Ce dernier, en raison de l'absence de boîtier pour mon imprimante, se déforme sensiblement lors de l'impression.
Vous remarquerez peut-être que le bloc additionneur n'a pas d'oreille pour la fixation. Le panier pour lui a été imprimé le premier. Ensuite, je vais amarrer ces oreilles ou imprimer un nouveau panier.

Figure 7: bloc additionneur et bloc logique.
Enroulement de fil
Au fond, nous attendons 600 conclusions qui doivent être interconnectées. Heureusement, il est nécessaire de connecter non seulement tout, mais presque tout. En revanche, cela ne devient pas plus facile.
Nous prenons un outil spécial, une bobine de fil et une jambe après une jambe, nous enroulons le schéma de connexion.

Figure 8: Récapitulation du bloc additionneur
Ce n'est que le début du travail. Eh bien, pour commencer. Au début, il y avait une horreur tranquille - les fils étaient posés au hasard, certains cavaliers sont longs, d'autres sont trop longs ... Après avoir appris un peu mieux qu'avant, j'ai retiré la plupart des cavaliers et je l'ai tordu à nouveau - j'ai commencé à étirer les cavaliers avec une corde. Ainsi, les fils ne traînent pas et le résultat est bien meilleur. J'ai essayé de le mettre de façon à ce que les fils n'appuient pas sur les coins de leurs broches. En conséquence, pas un seul circuit. Dès la première tentative, il n'y avait que des lignes de terre.

Figure 9: Récapitulation du bloc additionneur. Résultat final
Pour le moment, ce n'est pas vraiment simple, mais pour la première planche un très bon résultat, je pense. Jusqu'à présent, je n'ai pas appris à poser du fil à bobiner, ni un outil courbe, ni des mains ...
Chez camarade UA3MQJ contient un article détaillé sur cette méthode d'installation.
En plus du bloc additionneur, un bloc de registre est nécessaire. Plutôt, deux registres de blocs. Encore quelques mois - et 64 autres modules sont assemblés et testés. Reste à enrouler la planche de base.
C'était comment.
Modules indicateurs

Figure 10: Module indicateur
L'état actuel des registres du processeur doit être affiché sur quelque chose et j'ai décidé que les indicateurs de vide seront parfaits. Sur la carte 100x100mm (pour 10 pièces de cette taille que vous pouvez commander auprès des chinois pour 5 $), il y a 6 indicateurs IV-6, des déclencheurs K155TM8 et un microcontrôleur. L'indication ici est dynamique.
Il y a également une entrée 16 bits pour une lecture directe de l'état du registre et un port UART pour recevoir des commandes de la carte mémoire.
Le micrologiciel peut désormais lire l'état du port 16 bits et l'afficher au format HEX sur l'indicateur. Au total, j'ai besoin de 4 pièces de ces modules. Trois afficheront l'état actuel des registres - IP, AP et CMD du registre afin d'avoir une visualisation plus pratique des valeurs stockées actuelles. Quatrièmement - affichera le nombre total d'instructions exécutées.
Loquet

Figure 11: Module de verrouillage
Le module de verrouillage est composé de 8 relais RES43. À l'intérieur se trouvent deux contacts. Gauche et droite sont des LED qui affichent l'état actuel de l'entrée et de la sortie.
La taille du verrou est de 100x100 mm. La quantité requise est de 8 pièces. Deux sont prêts, il reste à en collecter six de plus.
Carte mémoire

Figure 12: Carte mémoire. Vue générale
Le bloc le plus grand, qui contient principalement deux 64 Ko de puces de RAM statique et des schémas de correspondance pour les entrées d'adresse et un port de données. La carte abrite le microcontrôleur ATmega1280. Il a deux tâches essentielles:
- Téléchargement du programme et des données initiales sur la RAM. Le binaire compilé doit être placé en mémoire. Pour ce faire, il sera possible de se connecter à la carte mémoire via UART ou telnet (via Wi-Fi) et de télécharger le fichier exécutable. MK lira l'en-tête et disposera des sections de code et de données dans la RAM. Je suis complètement trop paresseux pour le faire avec les interrupteurs à bascule et les boutons - un programme de brainfuck qui peut faire quelque chose de plus compliqué HelloWorld contient des milliers d'instructions. Il y a quelques atouts dans le nid à cet égard, mais à leur sujet une autre fois.
- Il implémente des commandes pour lire les données de la console et y écrire. Oui oui instructions. "" et «,» sont implémentés à l'aide de MK. Au contraire, la logique de relais informe le MK qu'il est maintenant nécessaire de transférer l'état du bus de données vers la console, ou vice versa pour sortir la valeur de la console vers le bus de données. En fait, MK fonctionne comme un convertisseur d'interface parallèle dans UART. Oui, il est tout à fait possible d'exécuter sur certains spéciaux. puce et je vais y penser.
Je n'ai toujours pas décidé quoi faire avec le mode 16 bits. Bien sûr, la plupart des programmes sont écrits sous le brainfuck 8 bits et tout est simple - nous lisons et écrivons l'octet bas. Et en mode 16 bits, que dois-je faire? Afficher le mot entier ou seulement l'octet bas aussi?
En plus des principales, MK a un certain nombre de tâches secondaires, dont vous pouvez vous passer, en principe, mais elles visent à la commodité d'utilisation de la machine:
- MK est responsable de l'affichage d'une petite zone de mémoire sur une matrice LED 32x16 pixels. Il le fait alors que le bus d'adresse et le bus de données ne sont pas occupés par la logique principale. Ici, je ne suis pas sûr que pour MK, il y aura généralement du temps dans le bus, donc la question doit être vérifiée. Mais dans l'en-tête du programme, il y aura une adresse de début pour l'affichage et je vais essayer de le faire fonctionner. L'indication est dynamique. Deux colonnes de données sont sorties simultanément en un seul cycle d'horloge.
- Lorsque le drapeau du mode de mémoire protégée est activé dans le binaire, en cas de tentative d'exécution d'une section de données ou d'écriture dans la section de mémoire, le MK générera une exception "Défaut de segmentation". Nous pouvons donc nous assurer que le programme ne va pas là où il ne devrait pas. La lecture de la section mémoire n'est pas interdite.
- Lorsque le drapeau de contrôle de code est activé, MK active le simulateur et y exécutera les mêmes instructions que l'ordinateur, en comparant les résultats attendus et reçus. Si le résultat est différent, l'exception «Erreur machine» sera levée. Cela signifie qu'une erreur s'est produite dans les calculs et qu'un module a peut-être commencé à échouer. Ou nous avons aussi augmenté la fréquence d'horloge et les relais n'ont plus le temps de calculer. Juste avec l'aide de cette fonctionnalité, j'essaierai de tirer le maximum de la voiture - quelque chose devra contrôler le bon fonctionnement pendant cette période.
Il y a toujours une fonction temporaire, mais toujours vitale, de la carte mémoire - émuler un bloc de logique alors qu'il n'est pas là. Il y a des lignes d'entrée et de sortie sur la carte mémoire et nous pouvons fournir les signaux nécessaires aux blocs. Ainsi, en connectant toutes les lignes de contrôle à la carte mémoire et en écrivant un programme qui émet la séquence de commandes nécessaire, cela se révélera dans les plus brefs délais:
- exécuter les premiers programmes pour exécution;
- Déboguer les algorithmes et les circuits du bloc logique, ce qui augmentera les chances de son assemblage et de son fonctionnement sans erreur plus tard.
Ensuite, en collectant les modules nécessaires des blocs logiques, toutes les fonctions seront progressivement transférées "à repasser". Lorsque MK cesse d'être responsable de la logique, le projet sera considéré comme terminé.
L'authenticité
Le projet n'a pas été conçu à l'origine comme purement relais, sans l'utilisation de transistors et de microcircuits. D'une part, l'ordinateur se révèle être hybride et perd en résistance aux radiations, d'autre part, la plupart des ordinateurs relais ont une maladie similaire. La version finale de la machine utilisera une puce mémoire et un microcontrôleur. La mémoire de ferrite sera utilisée dans un autre projet, déjà «sans silicone».
Pour compenser l'effet non-canon, j'ai obtenu une machine à écrire électronique "Robotron S6130"

Figure 13: Machine à écrire électronique de type camomille.
Malheureusement, la machine est allée vers moi dans un état de vie minable. Il fut longtemps utilisé en comptabilité, mais fut finalement abandonné pour mourir dans un splendide isolement.
Je recommande de consulter une critique unique de ce monstre.
Directement, la mécanique est en bon état, mais la carte processeur, sur laquelle reposait une paire de batteries Ni-Cd D-0,25, a été fortement prise. Ils ont fui en toute sécurité et ont tout inondé d'électrolyte.
Je veux le restaurer et l'utiliser comme terminal d'entrée / sortie pour l'ordinateur.Toutefois, en plus du dysfonctionnement de la partie électronique, la machine a une marguerite russe (lecteur avec des lettres) et des touches russes. Le second est décidé par des stickers, le premier est à chercher et là je n'ai pas encore de chance. À propos du fait qu'une cartouche avec un ruban encreur est nécessaire, je me tais généralement. Au moins, j'ai du papier pour elle ..
S'il est décidé par l'électronique qu'elle est irrémédiablement perdue, alors j'essaierai de trouver un donneur, ou je développerai un nouveau remplissage électronique. Faire d'un tableau de commande une poignée de shagoviks n'est pas la tâche la plus difficile. Il sera plus difficile de traduire un manuel de l'allemand et de comprendre les savoirs traditionnels. Bien sûr, cette machine mérite un article séparé sur les résultats de la renaissance. Contre elle, jusqu'ici est la priorité du travail effectué.
Les tests
Tous ceux qui auront lu jusqu'à cet endroit recevront une récompense sous la forme de blocs de relais qui craquent et bourdonnent.
Pour commencer, essayons d'appliquer une onde carrée à l'entrée du relais via une cascade de transistors:

Figure 14: Test à grande vitesse du commutateur à lames RES55. Un signal jaune est sur la bobine, le bleu est sur les contacts
Puisque l'entrée de l'oscilloscope a une certaine capacité, et après l'ouverture du contact du relais, il reste dans l'air et l'autodécharge commence, nous voyons l'exposant opposé. À une fréquence de 1,7 kHz! Pour le relais! Pour un petit relais reed! Décrochage ordinaire à 20 Hz ou légèrement supérieur. À une fréquence nominale de 100 Hz, les fronts montant et descendant sont d'environ 600 μs chacun. Ici, ils sont si petits (200 microsecondes), car l'énergie de la précédente reste toujours dans la bobine lors de la prochaine mise sous tension.
Nous appliquons une tension aux blocs, coupons les interrupteurs des instruments de mesure soviétiques aux entrées.

Figure 15: bloc additionneur et bloc registre en fonctionnement
Ça compte! Cool.
Donc, ça avait l'air de la scène. Au début, je voulais refaire les commutateurs en 16 bits. Connectez les indicateurs à l'entrée et à la sortie, mais ... je n'ai pas pu résister.
Eh bien, puisque tout fonctionne et que le relais s'est avéré être capable de vitesses folles, nous alimentons le méandre de la ligne de transfert:
Et nous avons coupé 500 Hz. L'additionneur fait face, bien que le son ne puisse pas être dit. En fait, le son est clair, mais le microphone à condensateur pense différemment. À ma connaissance, c'est l'additionneur de relais le plus rapide au monde.
À suivre

Figure 16: Conception d'un châssis d'ordinateur
Progressivement, les six pièces de loquets manquantes sont récupérées et le châssis de la future machine commence à être conçu. Il y a six blocs dans le dessin au cas où 64 modules ne seraient pas suffisants pour la logique. Et si cela suffit, la place sous le bloc central inférieur restera vide.
Dans le même temps, j'écris un firmware pour une carte mémoire afin qu'elle puisse remplacer un bloc logique manquant. L'été, l'ordinateur pourra exécuter son premier programme.
Trois ordinateurs ???
Oui, trois. Le premier est l'actuel BrainfuckPC. Le second est un ordinateur pneumatique , nommé FluidicPC .
À propos du troisième futur monstre résistant aux radiations, vous pouvez déjà trouver des références sur Internet, mais je ne veux pas pulvériser entre les projets et je veux d'abord terminer le projet actuel - je ne fais pas encore d'annonce à ce sujet.
Figure 17: Décatrons de commutation A101, A102 et A103
Bien qu'à partir de cette image, vous pouvez déjà deviner ce qui sera discuté.
POURQUOI ????

Les références
L'ensemble du projet reste totalement ouvert. Par conséquent, les principaux liens du projet:
- Référentiel avec schémas de circuits et schémas de circuits imprimés . Il existe également un firmware pour le module indicateur et la carte mémoire
- Sur cette page, je publie chaque semaine et peu de rapports sur ce qui a été fait. Vous lisez maintenant un article, un peu plus que complètement composé de ces notes. Avec traduction, commentaires et ajouts.
- Compilateur et émulateur .