Ascot 170 - ordinateur mécanique et paléoendémie soviétique

Les années 80 sont arrivées dans le monde. IBM a conquis le marché informatique professionnel avec ses PC et PC XT, les précurseurs de tous les ordinateurs de bureau modernes. Jobs l'un après l'autre a publié de nouveaux modèles Apple. Le Commodore 64 et le ZX Spectrum ont secoué le monde entier. Pendant ce temps, Ascota 170 - des ordinateurs mécaniques du début des années cinquante ont continué à être produits dans le bloc soviétique. Pour une raison quelconque, dans RuNet (et le reste d'Internet aussi), ils disent peu de choses sur ces machines étonnantes, presque les seules en série (plus de trois cent mille de 1955 à 1983) produites par des ordinateurs mécaniques complets de Turing. Je ne les ai découvert moi-même que lorsque Ascot est tombé accidentellement entre mes mains.
J'espère que mon article pourra changer cela.


Mon Ascot a fini de compter la racine carrée de 2.

En général, je suis collectionneur de machines à calculer mécaniques. Malheureusement, ces voitures sont généralement lourdes, et je n'ai pas de musée de taille infinie, donc je ne dois prendre que les plus intéressantes. Alors, quand Sergey Frolov m'a demandé si j'avais besoin d'Ascot, j'ai fait une recherche sur Google pendant quelques minutes et j'ai découvert que Ascot était appelée des voitures très ennuyeuses et primitives de la RDA, qui ne valent pas la place qu'elles occupent. Qu'est-ce que Sergey a dit. Heureusement, Sergey a répondu qu'il ne s'agissait pas seulement d'Ascot, mais d'un modèle 170 particulièrement rare. Je suis de nouveau allé sur Google et j'ai été captivé.

Il s'est avéré qu'on m'a offert l'une des machines mécaniques les plus compliquées jamais produites, une machine à calculer comptable, programmée à l'aide de «clous» enfoncés dans une planche spéciale avec un marteau. Malheureusement, la communication avec le vendeur sur Avito a montré qu'Ascot était incomplet, donc le prendre était inutile. Puis une autre moitié d'Ascot est apparue sur Avito (le vendeur a essayé de me prouver pendant plus d'une heure qu'elle était entière, pas la moitié), puis la question a été suspendue pendant un an ... Et puis le premier vendeur m'a écrit et m'a dit qu'il avait trouvé les pièces manquantes! Ici, l'arrière-plan se termine et l'histoire elle-même commence.

Bien sûr, à ce stade, j'ai lu que l'Ascot-170 est un peu comme une machine programmable. Mais «programmable» est un concept vague, et avant d'acheter, j'ai essayé d'apprendre quelque chose sur ses capacités. Heureusement, cela s'est avéré simple: Ascot a été livré en masse à l'URSS et des dizaines de livres ont été publiés à leur sujet. L'une d'elles, une fine brochure sur les méthodes d'application, j'ai acheté sur Avito - mais j'ai réalisé, hélas, un peu - en gros, que la machine fonctionne constamment en boucle et prend en charge les transitions. Je ne sais pas ce que je ferais de ces informations - mais l'idée m'est venue à l'esprit: à la station de métro Bibliothèque de Lénine, il y a la Bibliothèque de Lénine! Tout au long du XXe siècle, des exemplaires obligatoires des livres publiés chez nous y affluent, et des livres sur Ascot devraient être là. En effet, dans le catalogue électronique de Leninka, il y avait plus de trois cents livres mentionnant Ascot 170 . De plus, il s'est avéré qu'au cours des dernières décennies, le mode de fonctionnement de la bibliothèque s'est considérablement adouci, et aujourd'hui tout le monde peut venir prendre des photos de livres sur un appareil photo non professionnel.

Pour fêter ça, j'ai photographié plusieurs dizaines de livres, et j'ai compris d'eux que Ascot pouvait, et je l'ai immédiatement acheté. Et il a entrepris une étude détaillée des manuels.



Opportunités Ascot 170


La lecture de ces livres n'était pas facile: non seulement ils décrivaient la programmation d'une machine développée bien avant l'avènement du premier langage de haut niveau, Fortran. Ils ont donc également été rédigés en termes comptables. En général, imaginez que vous avez besoin d'étudier un manuel sur 1C: Assembler , écrit en vieux slave, et vous comprendrez à peu près l'ampleur du problème avant moi. Il suffit de dire que j'ai pu constater le fait de la présence d'un opérateur conditionnel uniquement parce que je le cherchais spécifiquement. Et pour comprendre comment cela fonctionne, cela n'a été possible qu'après avoir étudié la conception des nœuds correspondants et une série d'expériences.

Oui! Ascot a des instructions conditionnelles! Et les équipes de transition! Et en général, tout ce dont vous avez besoin pour un ordinateur polyvalent à part entière!

Permettez-moi de vous en dire un peu plus à ce sujet. J'utiliserai le pseudo-code de type C que j'ai inventé - complètement différent de celui utilisé dans les anciens manuels, mais beaucoup plus compréhensible aujourd'hui.

Ainsi, pendant le fonctionnement, le chariot de la machine se déplace de droite à gauche par rapport au corps de la machine - comme sur une machine à écrire conventionnelle. Dans ce cas, l'unité d'impression glisse le long du papier et l'unité de lecture de la commande de programme est relative à la carte de programme avec des trous dans lesquels les chevilles et les pieds sont insérés - à peu près comme dans le tambour d'une boîte à musique. À un certain point, le nœud de lecture trouve des arrêts en colonnes, ce qui signifie «vous devez vous arrêter ici et faire quelque chose», s'arrête et fait ce que le reste des arrêts de cette colonne et les touches pressées par l'opérateur nécessitent. Et si le nœud de lecture ne trouve pas d'arrêt à la fin du chariot, le chariot se déplace automatiquement vers la droite jusqu'à l'arrêt, et le balayage recommence - c'est le cycle principal dans lequel le programme tourne sans fin.


Une colonne d'arrêts. Vertical au-dessus de colonnes, le reste - logiciel.

Dans la pratique, ces arrêts «doivent faire quelque chose», c'est-à-dire les étapes du programme, il peut y en avoir environ 50 sur une même planche. Plusieurs commandes peuvent être exécutées en une seule étape. Par exemple, ce code ne prend qu'une étape:

if (I>0) { print(K); I+=K; II-=K; III-=K; goto program2; //        ,     . if (K!=0) goto forward; //  K!=0 ,        ,    forward;  -    . K=0; } 

Comme vous pouvez le voir, la machine accède activement aux registres; les registres sont des rangées d'engrenages dans le corps de la machine, de sorte que la mémoire de programme (carte avec arrêts) est séparée de la mémoire de données (rangées d'engrenages de registres). Au total, la machine possède ~ 50 pas de mémoire de commandes (~ 0,3 ko) et 56 registres entiers de 12 décimales (encore 0,3 ko).

En une seule étape, la machine peut lire un registre, imprimer son contenu, l'ajouter ou le soustraire à plusieurs autres registres et le réinitialiser. En même temps, quelques options de comparaison avec zéro et plusieurs options de commandes de transition sont exécutées.

Hélas, malgré la complexité et la richesse du code machine, il présente plusieurs limites désagréables:

1. La machine n'a pas de commandes de multiplication et de division.

Curieusement, ce n'est pas un bug, c'est une fonctionnalité. La plupart des machines comptables plus simples ont une commande de multiplication, mais les développeurs d'Ascot ont déjà réalisé au début des années 1950 que les jours de la mécanique étaient numérotés, et au lieu d'un multiplicateur mécanique lent et maladroit, ils ont fourni la possibilité de connecter un module mathématique externe. En effet, les références au multiplicateur mécanique externe pour Ascot se trouvent dans les anciens manuels, mais pas une seule de ses vraies photographies (ou, surtout, de vrais spécimens) n'a été conservée. Déjà à la fin des années 1950, des modules de lampes R12 (monstres de la taille d'une petite armoire, pesant 200 kilogrammes et une consommation d'un kilowatts et demi) ont commencé à être utilisés à la place, de petits multiplicateurs à transistors (avec une petite unité centrale) ont été produits à partir de 1962, et au moment où ils ont quitté le convoyeur de mon instance Ascot, de minuscules séparateurs de puces ont été utilisés. En général, c'est bien d'avoir obtenu une copie sans multiplication-division: il serait dommage d'avoir une calculatrice électronique banale sur microcircuits au lieu d'un ordinateur entièrement mécanique.

2. La machine ne sait pas décaler un nombre d'un chiffre vers la droite ou la gauche.

En général, il est possible d'organiser par programme la multiplication, la division et d'autres mathématiques délicates; en fait, de nombreux processeurs RISC modernes font exactement cela. Ascot aurait pu le faire aussi - mais hélas, pour cela, vous devez décaler le nombre par chiffre, et une telle commande n'est pas fournie. En fait, cela est très étrange, car le module multiplicateur, surtout au début, était cher et rare, et la machine a tout le nécessaire pour organiser le quart de travail. Je veux même ajouter une commande shift à mon Ascot - mais plus à ce sujet à la fin de l'article.

3. Le nombre de marques de saut est limité.

Il peut y avoir des marques en arrière1, en arrière2, en avant1 et en avant2 dans le programme, chacune d'elles plusieurs fois, les étapes du programme peuvent être marquées comme exécutées selon le programme 1, selon le programme 2 et les deux. Cela semble bien, mais lors de la programmation d'un algorithme assez complexe, cela suffit pour rétrécir.

4. Il n'y a aucun support pour les tableaux et l'adressage indirect.

Ascot a de nombreux registres. Pensez-y: il y a 50 étapes de programme, pour chaque étape, vous ne pouvez lire (et imprimer) qu'un seul registre - et il y a 56 registres! Autrement dit, adresser directement tous les registres en mode automatique, sans sélectionner un numéro de registre sur le clavier, est en principe impossible.

Habituellement, ce problème est résolu en utilisant différentes options d'adressage indirect - par exemple, vous définissez d'abord le numéro de registre (ptr = & R00), puis, en boucle, augmentez-le encore et encore (ptr ++). Et, en principe, Ascot a tout pour cela: cinquante registres sont organisés sous la forme de cinq rouleaux rotatifs, dix registres chacun, et pour l'adressage incrémentiel, il suffisait d'ajouter la commande de rotation du tambour d'un pas en avant. Pour compter les piles de documents multilignes, ce serait une fonction très populaire. Mais ils ne l'ont pas fait, pour une raison quelconque. La seule explication qui m'est venue à l'esprit est qu'au début des années 50, l'adressage incrémentiel n'avait pas encore été inventé. Si quelqu'un se souvient d'un ancien ordinateur allemand avec adressage incrémental - dites-le-moi, s'il vous plaît.

Ascot vivant!


Pendant que je m'occupais des fonctionnalités de programmation, un ordinateur m'est venu d'Omsk. Après une querelle inévitable avec les chargeurs, je l'ai placée au milieu de la pièce, j'ai frappé de la rouille avec un marteau, j'ai versé un mélange d'huile et de kérosène sur le mécanisme et j'ai essayé de l'allumer.


Ascot (à droite) était très grand


Et très sale

Comme prévu, il n'a pas travaillé. Je suis monté à l'intérieur, j'ai ramassé une poignée d'ordures, j'ai secoué la goupille, la voiture a démarré pour la première fois, j'ai fait quelques mouvements et j'ai coincé.

Le mois suivant était en réparation. J'ai couvert la moitié d'Internet d'annonces concernant la recherche d'un installateur expérimenté, j'ai trouvé plusieurs personnes qui, il y a quarante ans, avaient un petit commerce avec Ascot, mais, hélas, j'ai dû le réparer moi-même. J'ai imprimé une poignée d'imprimante 3D pour la rotation manuelle de l'arbre de commande, j'ai appris à désactiver les compteurs bloqués, j'ai filtré quelques morceaux d'écorce d'épinette particulièrement malveillants du mécanisme, trouvé et développé une demi-douzaine de joints coincés, réparé une demi-douzaine de ressorts défaillants.


D'où vient l'écorce?!

J'ai sauté du travail pendant des semaines, fouillé du matin au soir dans le manuel de configuration, à la recherche de la cause du prochain dysfonctionnement, attrapé des spammeurs sur le palier qui, pour une centaine de roubles, m'ont aidé à mettre temporairement la machine à l'envers ... Et finalement je suis arrivé au point où il était possible de démarrer la voiture "Bonjour tout le monde!".


Nous passons Ascot en mode machine à écrire et tapons "NELLO SHORD".

Hm, non, c'est trop facile. Prenons mieux les lapins immortels.

Supposons que nous n'avions pas de lapins il y a un mois, et aujourd'hui, nous avons acheté quelques lapins sur le marché.

Après un mois, ils deviennent une paire de lapins adultes.

Après un autre mois, le couple accouche et nous obtenons un couple de lapins adultes et un couple de lapins. Total deux paires.

Un mois plus tard, une paire d'adultes accouche de nouveau et les lapins du dernier couple grandissent et deviennent adultes. Total, trois couples, deux adultes et un enfant.

Après un autre mois, deux paires d'adultes donnent deux paires de progéniture, et les lapins du dernier mois grandissent. Au total, nous avons cinq paires, tous les lapins qui étaient avec nous il y a un mois, des adultes, et tous ceux qui étaient des adultes ont donné une paire de progéniture.

Et ainsi de suite.

Ce problème a été étudié au début du XIIIe siècle par le mathématicien italien Fibonacci, en l'honneur duquel la série de nombres qui en résulte est appelée la série de Fibonacci:

0 1 1 1 + 1 = 2 1 + 2 = 3 2 + 3 = 5 3 + 5 = 8 5 + 8 = 13 8 + 13 = 21 ...

Calculons-le sur Ascot. C'est simple. Soit dans le registre I, nous avons un membre impair de la série (pour les débutants, le premier), dans le registre II - pair (pour les débutants, zéro). Ensuite, le programme ressemblera à ceci:

 1: read I; II+=; prn(); // №1:   I,      II  . 1: read II; I+=; prn(); newline; goto backward1; //  №1:   II,      I  .           . 

Le programme doit être assemblé manuellement, puis enfoncez les butées dans les trous souhaités sur la carte de programme. Le résultat est le suivant:

 1 0/0 12/4 14/3
 1 12/3 14/4 17/4 33/4 


Ici, celui du début signifie que l'arrêt de colonne de type 1, ce qui oblige la machine à arrêter pour effectuer ces étapes conformément au programme n ° 1, 0/0 (défini dans la ligne n ° 0 s'arrête de type 0) force la machine à rechercher des arrêts de colonne à partir de ce point. Les arrêts de la ligne 12 contrôlent le registre II: 12/3 provoque la lecture du registre, et 12/4 - en y ajoutant le numéro lu. De même, 14/3 provoque la lecture du registre I et 14/4 - en y ajoutant la lecture. L'impression du numéro lu se produit automatiquement, sauf si un arrêt spécial 5/3 est installé et désactive l'impression. 17/4 fait tourner le rouleau du chariot d'une étape et 33/4 démarre le retour du chariot (cet arrêt peut être omis, puis le chariot glissera jusqu'à la fin et le retour du chariot commencera automatiquement).

Pour le bien, vous devez ajouter un autre 15 / 6R aux deux lignes, puis immédiatement après la fin de l'étape, la machine démarre la suivante. Mais la première fois, je ne l'ai pas fait et j'ai dû constamment appuyer sur la touche de démarrage.


Curieusement, le programme a commencé la première fois. J'étais ravi!


Mais pour exécuter ce programme, vous devez d'abord écrire les données dans les registres souhaités, puis les résultats sont affichés dans deux colonnes inexactes. Faisons un programme qui demandera les données source, puis afficherons les membres de la série et leurs numéros.
Il se présente comme ceci:

 1: read I; clr; //     1: read II; clr; 1: read III; clr; 1: read IV; clr; 1: read K; clr;//     . 1: stop; read kbd; IV+=; K+=; prn(); clr;//   IV (    )   K (    ).    -        . 1: stop; read kbd; I+=; prn(); clr; //      I. 1: read IV; K+=; 1: read K; prn();//       . 1: stop; read kbd; II+=; I+=; prn(); clr; //      II.   I  I+II,     . backward1: 12: read IV, K+=; //        -  ,    3.  ,       №1,    №2. 2: read II; I+=; III+=; goto prog1; goto forward; //     ,       №2,   №1.      II   ,     III    I ( I  ,  ).        №1   ,   . 1: read I; II+=; III+=; goto prog2; //     I  ,  II - .  , ,   (   II).  III   I - .     №2. forward1: 12: read III; prn(); clr; //     -   I+II,    .  III.  ,         №1,    №2. 12: read k; prn(); newline; goto backward1; //   ,  ,  . 

J'ai commencé le programme et la voiture s'est bloquée en toute sécurité, car avant cela je n'avais pas utilisé le registre K et il y avait un autre morceau d'écorce. Nde. Il a enlevé un morceau d'écorce, fermé le comptoir et coincé la voiture. Et ça a marché!


J'ai décidé que la machine fonctionnait déjà enfin, il suffit de taper un bel algorithme pour se vanter sur Habré, et vous pouvez rédiger un rapport. Par exemple, selon M. Feynman, Stanley Frenkel a appris au tabulateur à compter les arctangents. Pourquoi suis-je pire? C'est compréhensible, le pire, mais tout d'un coup?

Hélas, je n'ai pas trouvé d'algorithmes adaptés. À Stackowerflow, ils ont suggéré une option de calcul du logarithme qui était trop compliquée pour Ascot; dans la bibliothèque de Lénine, il y avait quelques brochures avec plusieurs algorithmes intéressants - mais elles aussi étaient trop difficiles pour Ascot. Au final, j'ai craché sur la trigonométrie et les logarithmes, et j'ai décidé de prendre la racine carrée banale.

En général, la racine carrée est considérée comme facile. D'après la formule de la somme des termes de la progression arithmétique, il s'avère que la somme des n premiers nombres impairs = n ^ 2. Ce qui suit

n= sqrt sum limitsi=0n1(2i+1)


D'où il est relativement facile de dériver l'algorithme de racine carrée utilisé depuis le début des années 1950 par les arithmomètres à racine carrée automatique de Friden - voici un peu plus de détails . Certes, cet algorithme nécessite également des décalages par décharge, mais uniquement par décharge vers le haut (le décalage par décharge vers le haut, c'est-à-dire la multiplication par dix, peut être organisé comme une série d'additions, et le décalage par décharge vers le bas en utilisant les capacités d'Ascot est pratiquement impossible).

La première version du programme que j'ai écrite le soir. Mais en raison du nombre d'opérations nécessaires lors de la montée, il ne pouvait pas tenir en 50 étapes. J'ai dû optimiser en calculant deux décalages différents avec les mêmes commandes, puis corriger les erreurs, puis déboguer le programme sur une feuille de papier, corriger à nouveau les erreurs, déboguer à nouveau ... Ça n'a pas marché.
Revérifié, a trouvé quelques erreurs mineures. Corrigé. Ça n'a pas marché. J'ai relu les livres, j'ai découvert que j'avais mal compris une subtilité de la programmation. Corrigé, cela ne fonctionnait pas. Revérifié, a trouvé une autre erreur. Ça n'a pas marché. J'ai revérifié, j'ai réalisé que je n'avais pas corrigé un dysfonctionnement mineur dans la voiture. Corrigé. Cela n'a pas fonctionné ... En général, pendant une semaine, j'ai mis en place un programme sur le matériel. Et enfin débogué!

J'espère qu'après cela, il n'y a pas de graves malentendus de programmation et de dysfonctionnements de la machine, car la calculatrice racine carrée semble utiliser toutes les fonctions de calcul et logiques qui se trouvent dans la machine. N'est-ce pas tous les registres, mais j'ai vérifié les registres séparément.


Quel est le résultat et quelle est la prochaine étape?


En conséquence, tout d'abord, j'ai un Ascot-170 en état de marche.

Deuxièmement, j'espère que cet article l'a rendu plus célèbre dans RuNet. Ascot a été utilisé avec nous au moins jusqu'à la fin des années 80, et je ne peux expliquer leur faible renommée que par le fait que peu de gens comprenaient à quel point ils étaient cool et que les propriétaires des entrepôts ne comprenaient pas à quel point ils étaient précieux. Peut-être que l'article corrigera cette situation.

Troisièmement, j'ai créé une section sur Ascot sur mon site Web dans laquelle j'ai publié un guide de programmation, quelques conseils sur la mise en place d'un mécanisme, des livres, des modèles pour l'impression 3D, des codes de programme, etc. J'espère que cela servira également à populariser Ascot, et aidera les experts, qui pourront l'obtenir après moi.

Quatrièmement, au cours du travail, j'ai essayé de prendre le temps passé sur Ascot dans la tablette. Il s'est donc avéré que j'ai passé moins de deux cents heures de travail en dehors de la procrastination. Peut-être que vous pouvez entrer dans le CV, non?

D'un autre côté, il restait quelques problèmes non résolus.

Tout d'abord, je n'ai jamais créé de programme pour calculer quelque chose de cool, comme les fonctions trigonométriques, les degrés rationnels ou les logarithmes. Comme je l'ai déjà dit, je n'ai pas pu trouver ou trouver un algorithme approprié moi-même, mais si l'un des lecteurs de l'article me propose (dans les commentaires, dans un e-mail personnel ou moi [un] mail alple.net) un algorithme approprié (en pseudo-code comme ce qui est pour la racine carrée ), je vais certainement essayer de l'implémenter dans le matériel, et tourner sur cette vidéo.

Deuxièmement, comme je l'ai dit, Ascot manque vraiment de changement de commandement. En même temps, j’ai l’impression qu’ils allaient le faire, mais ne l’ont pas fait - je ne peux pas expliquer autrement l’existence des registres III / IV.

sur les registres
Des variétés d'Ascot ont été produites avec un ensemble différent de registres. Le plus grand nombre d'entre eux, 55 (+1 au clavier) est juste dans ma version. En voici une liste:
Registre du clavier dans lequel le numéro entré sur le clavier est temporairement stocké.
Les registres I et II sont universels, complètement indépendants, contrôlés automatiquement et à partir du clavier, prenant en charge les nombres négatifs et les opérations logiques.
Registre K - contrôle, pour contrôler le fonctionnement sans erreur de l'opérateur et de la machine. La fonction est similaire à I et II, plus elle a une protection contre une réinitialisation accidentelle. Il n'est pas contrôlé depuis le clavier, mais pour un registre de contrôle c'est plutôt une vertu.
Les registres d'accumulation sont les mêmes, en fûts de 10 pièces. Ils ne fonctionnent pas avec des nombres négatifs et sont moins utilisés dans les opérations logiques, ont certaines limites techniques de connexion mutuelle, sont normalement contrôlés à partir du clavier et automatiquement.
Et ces mêmes mystérieux registres III / IV - en termes de capacités, ils sont sur le point de s'accumuler, mais ils sont contrôlés très, très mal à partir du clavier.
De plus, les registres III / IV ont leur propre mécanisme de connexion, indépendant de l'accumulation des registres. En fait, ce système est resté de l'un des modèles Ascot les plus primitifs, qui en dehors des registres I, II, III, IV et K n'avaient rien - mais pourquoi les ont-ils laissés?

Je pense qu'ils étaient censés être exactement comme les registres de passage au bit. Parce qu'il suffit de les coupler avec une série d'engrenages diagonaux, et nous obtiendrons un dispositif de décalage: écrivez, disons, dans le numéro III, et obtenez-le dans le IV, mais décalé vers la gauche pour la décharge.

Je l'imagine quelque chose comme ça:


Ici, vous pouvez faire tourner le modèle 3D.
Et ici - pour voir à quoi ressemblent les compteurs en direct.

Dans l'image - engrenages jaunes - les compteurs III et IV (par exemple, la première décharge III-1 et la deuxième décharge IV-2 sont connectées aux rouges). Cale translucide - détails du compteur.

Les engrenages rouges sont le même système de changement de vitesse manquant qui fait tourner le rapport III-1 lors du virage IV-2, et vice versa. Si vous assemblez un tel système, alors pour un décalage vers la gauche, il suffira d'écrire le nombre souhaité en IV et de le lire à partir de III.

La difficulté est que lors du travail, les engrenages des compteurs non seulement tournent, mais aussi montent et descendent (approximativement à leur rayon), et le mécanisme doit supporter ce mouvement. Il s'avère que c'est une conception assez compliquée, à laquelle je ne peux pas penser.

Ce serait formidable si quelqu'un qui sait mieux concevoir que moi, pour un montant raisonnable, proposerait un tel système pour imprimer sur une imprimante ou le fabriquer en matériel - avec des clarifications et des suggestions, encore une fois, écrivez dans des commentaires, en PM ou écrivez-moi [a] alple.net.



Vous pouvez trouver plus de détails sur mon site Internet, dans la section sur Ascot .

Source: https://habr.com/ru/post/fr450538/


All Articles