Los años ochenta llegaron al mundo. IBM ha capturado el mercado de computadoras profesionales con su PC y PC XT, los precursores de todas las computadoras de escritorio modernas. Jobs, uno tras otro, lanzaron nuevos modelos de Apple. Commodore 64 y ZX Spectrum sacudieron todo el mundo. Mientras tanto, Ascota 170 - computadoras mecánicas de principios de los años cincuenta continuaron siendo producidas en el bloque soviético. Por alguna razón, en RuNet (y el resto de Internet también) dicen poco acerca de estas increíbles máquinas, casi las únicas en serie (más de trescientas mil de 1955 a 1983) producidas por computadoras mecánicas completas de Turing. Yo mismo me enteré de ellos solo cuando Ascot cayó accidentalmente en mis manos.
Espero que mi artículo pueda cambiar esto.
Mi Ascot terminó de contar la raíz cuadrada de 2.En general, soy coleccionista de máquinas de cálculo mecánico. Desafortunadamente, estos autos suelen ser pesados, y no tengo un museo de tamaño infinito, así que solo tengo que tomar los más interesantes. Entonces, cuando Sergey Frolov me preguntó si necesitaba Ascot, busqué en Google por un par de minutos y descubrí que Ascot se llamaban autos muy aburridos y primitivos de la RDA, que no valen el lugar que ocupan. ¿Qué dijo Sergey? Afortunadamente, Sergey respondió que no se trataba solo de Ascot, sino de un modelo 170 particularmente raro. Busqué en Google otra vez y quedé cautivado.
Resultó que me ofrecieron una de las máquinas mecánicas más complicadas jamás producidas, una máquina de cálculo contable, programada con la ayuda de "clavos" introducidos en un tablero especial con un martillo. Desafortunadamente, la comunicación con el vendedor en Avito mostró que Ascot estaba incompleto, por lo que tomarlo fue inútil. Luego apareció otra mitad de Ascot en Avito (el vendedor intentó probarme durante más de una hora que estaba completa, no la mitad), luego la pregunta quedó suspendida durante un año ... ¡Y luego el primer vendedor me escribió y dijo que había encontrado las piezas faltantes! Aquí termina el trasfondo y comienza la historia misma.
Por supuesto, en este punto leí que el Ascot-170 es como una máquina programable. Pero "programable" es un concepto suelto, y antes de comprar, traté de aprender algo sobre sus capacidades. Afortunadamente, esto resultó ser simple: Ascot se entregó a la URSS en masa y se publicaron docenas de libros sobre ellos. Uno de ellos, un pequeño folleto sobre métodos de aplicación, lo compré en Avito, pero me di cuenta, por desgracia, un poco, básicamente, que la máquina funciona constantemente en un bucle y de alguna manera admite transiciones. No sé qué haría con esta información, pero se me ocurrió la idea: ¡en la estación de metro de la Biblioteca Lenin está la Biblioteca Lenin! A lo largo del siglo XX, las copias obligatorias de libros publicados en nuestro lugar se congregaron allí, y los libros sobre Ascot deberían estar allí. De hecho, en el catálogo electrónico de Leninka
había más de trescientos libros que mencionaban Ascot 170 . Además, resultó que en las últimas décadas, el modo de funcionamiento de la biblioteca se ha suavizado enormemente, y hoy cualquiera puede venir y tomar fotografías de libros con una cámara no profesional.
Para celebrarlo, fotografié varias docenas de libros, y entendí de ellos que Ascot podía, e inmediatamente lo compré. Y emprendió un estudio detallado de los libros de texto.

Oportunidades Ascot 170
Leer estos libros no fue fácil: no solo describieron la programación de una máquina desarrollada mucho antes del advenimiento del primer lenguaje de alto nivel, Fortran. Entonces también fueron escritos en términos contables. En general, imagine que necesita estudiar un libro de texto sobre
1C: Ensamblador , escrito en eslavo antiguo, y comprenderá aproximadamente la escala del problema que tengo ante mí. Es suficiente decir que pude establecer el hecho de la presencia de un operador condicional solo porque lo estaba buscando específicamente. Y para entender cómo funciona, solo fue posible después de estudiar el diseño de los nodos correspondientes y una serie de experimentos.
Si! Ascot tiene declaraciones condicionales! ¡Y los equipos de transición! Y, en general, ¡todo lo que necesita para una computadora de uso general completa!
Déjame contarte un poco más sobre esto. Usaré el pseudocódigo tipo C que inventé, completamente diferente del que se usaba en los libros de texto antiguos, pero mucho más comprensible hoy en día.
Entonces, durante la operación, el carro de la máquina se mueve de derecha a izquierda en relación con el cuerpo de la máquina, como en una máquina de escribir convencional. En este caso, la unidad de impresión se desliza a lo largo del papel, y la unidad de lectura del comando del programa es relativa al tablero del programa con agujeros en los que se insertan las clavijas y los pies, aproximadamente como en el tambor de una caja de música. En algún momento, el nodo de lectura encuentra paradas en columnas, lo que significa "necesita detenerse aquí y hacer algo", se detiene y hace lo que el resto de las paradas en esta columna y las teclas presionadas por el operador requieren. Y si el nodo de lectura no encuentra paradas hasta el final del carro, entonces el carro se mueve automáticamente hacia la derecha hasta la parada, y la exploración comienza de nuevo: este es el ciclo principal en el que el programa gira sin parar.
Una columna de paradas. Arriba vertical - columnas, el resto - software.En la práctica, tales paradas "necesitan hacer algo", es decir, los pasos del programa, puede haber alrededor de 50 en un tablero. Se pueden ejecutar varios comandos en un solo paso. Por ejemplo, este código solo toma un paso:
if (I>0) { print(K); I+=K; II-=K; III-=K; goto program2;
Como puede ver, la máquina accede activamente a los registros; los registros son filas de engranajes en el cuerpo de la máquina, de modo que la memoria del programa (placa con topes) se separa de la memoria de datos (filas de engranajes de los registros). En total, la máquina tiene ~ 50 pasos de memoria de comandos (~ 0.3 kB) y 56 registros enteros de 12 lugares decimales (otros 0.3 kB).
En un paso, la máquina puede leer un registro, imprimir su contenido, agregarlo o restarlo a varios otros registros, y restablecerlo. Al mismo tiempo, se ejecutan un par de opciones para comparar con cero y varias opciones para comandos de transición.
Por desgracia, a pesar de la complejidad y riqueza del código de máquina, tiene varias limitaciones desagradables:1. La máquina no tiene comandos para multiplicación y división.
Curiosamente, esto no es un error, esta es una característica. La mayoría de las máquinas contables más simples tienen un comando de multiplicación, pero los desarrolladores de Ascot ya a principios de la década de 1950 se dieron cuenta de que los días de la mecánica estaban contados, y en lugar de un multiplicador mecánico lento y torpe, proporcionaron la capacidad de conectar un módulo matemático externo. De hecho, las referencias al multiplicador mecánico externo para Ascot se encuentran en libros de texto antiguos, pero no se ha conservado ni una sola de su fotografía real (o, especialmente, un espécimen real). Ya a fines de la década de 1950, se comenzaron a utilizar módulos de lámpara R12 (monstruos del tamaño de un gabinete pequeño, un peso de 200 kilogramos y un consumo de kilovatios y medio), a partir de 1962 se produjeron pequeños multiplicadores de transistores (con una pequeña unidad de sistema), y para cuando salieron del transportador. de mi instancia de Ascot, se usaron pequeños divisores de chips. En general, es bueno que obtenga una copia sin división de multiplicación: sería una pena tener una calculadora electrónica banal en microcircuitos en lugar de una computadora totalmente mecánica.
2. La máquina no sabe cómo desplazar un número por un dígito a la derecha o izquierda.
En general, es posible organizar mediante programación la multiplicación, la división y otras matemáticas complicadas; de hecho, muchos procesadores RISC modernos hacen exactamente eso. Ascot también podría haberlo hecho, pero desafortunadamente, para esto necesita cambiar el número por dígito, y dicho comando no se proporciona. Esto, de hecho, es muy extraño, porque el módulo multiplicador, especialmente al principio, era costoso y raro, y la máquina tiene todo lo necesario para organizar el turno. Incluso quiero agregar un comando de cambio a mi Ascot, pero más sobre eso al final del artículo.
3. El número de marcas de salto es limitado.
Puede haber marcas hacia atrás1, hacia atrás2, hacia adelante1 y hacia adelante2 en el programa, cada una de ellas varias veces, los pasos del programa se pueden marcar como ejecutados según el programa 1, según el programa 2 y ambos. Suena bien, pero cuando se programa un algoritmo bastante complejo, es suficiente para reducirlo.
4. No hay soporte para matrices y direccionamiento indirecto.
Ascot tiene muchos registros. Piénselo: hay 50 pasos del programa, por cada paso puede leer (e imprimir) solo un registro, ¡y hay 56 registros! Es decir, direccionar directamente todos los registros en modo automático, sin seleccionar un número de registro desde el teclado, es imposible en principio.
Por lo general, este problema se resuelve utilizando diferentes opciones de direccionamiento indirecto; por ejemplo, primero establece el número de registro (ptr = & R00) y luego, en un bucle, lo incrementa una y otra vez (ptr ++). Y, en principio, Ascot tiene todo para esto: cincuenta registros están organizados en forma de cinco carretes giratorios, diez registros cada uno, y para el direccionamiento incremental fue suficiente agregar el comando para girar el tambor un paso hacia adelante. Para contar pilas de documentos de varias líneas, esta sería una función muy popular. Pero no lo hicieron, por alguna razón. La única explicación que se me ocurrió fue que a principios de la década de 1950, aún no se había inventado el direccionamiento incremental. Si alguien recuerda una computadora alemana anterior con direccionamiento incremental, dígame, por favor.
Viviendo Ascot!
Mientras trabajaba con las funciones de programación, una computadora vino a mí desde Omsk. Después de una disputa inevitable con los cargadores, la puse en el medio de la habitación, golpeé el óxido con un martillo, vertí una mezcla de aceite y queroseno en el mecanismo e intenté encenderlo.
Ascot (derecha) era muy grande
Y muy sucioComo se esperaba, no trabajó. Me metí dentro, recogí un puñado de basura, sacudí el pasador de cuña, el auto arrancó por primera vez, hice un par de movimientos y se atascó.
El mes siguiente estaba en reparación. Cubrí la mitad de Internet con anuncios para encontrar un instalador experimentado, encontré varias personas que, hace cuarenta años, tenían un pequeño negocio con Ascot, pero, por desgracia, tuve que arreglarlo yo mismo. Imprimí una manija de impresora 3D para la rotación manual del eje de control, aprendí a apagar los contadores atascados, separé algunas piezas más de corteza de abeto especialmente maliciosa del mecanismo, encontré y desarrollé media docena de juntas atascadas, reparé media docena de resortes fallidos.
¿De dónde es la corteza?Me salteé el trabajo durante semanas, rebusqué de la mañana a la noche en el manual de configuración, busqué la causa del siguiente mal funcionamiento, atrapé spammers en el rellano que, por cien rublos, me ayudaron a poner la máquina boca abajo temporalmente ... Y finalmente llegué al punto donde era posible arrancar el auto "Hola mundo!"
Cambiamos Ascot al modo de máquina de escribir y escribimos "NELLO SHORD".Hm, no, es muy fácil. Tomemos mejor a los conejos inmortales.
Supongamos que no teníamos conejos hace un mes, y hoy compramos un par de conejos en el mercado.
Después de un mes, se convierten en un par de conejos adultos.
Después de otro mes, la pareja da a luz, y tenemos un par de conejos adultos y un par de conejos. Total dos pares.
Un mes después, una pareja de adultos da a luz nuevamente, y los conejos de la última pareja crecen y se convierten en adultos. Total, tres parejas, dos adultos y un niño.
Después de otro mes, dos pares de adultos dan dos pares de crías, y los conejos del último mes crecen. En total, tenemos cinco pares, todos los conejos que estuvieron con nosotros hace un mes, adultos, y todos los adultos dieron un par de crías.
Y así sucesivamente.
Este problema fue estudiado a principios del siglo XIII por el matemático italiano Fibonacci, en cuyo honor la serie de números resultante se llama serie de Fibonacci:
0 1 1 1 + 1 = 2 1 + 2 = 3 2 + 3 = 5 3 + 5 = 8 5 + 8 = 13 8 + 13 = 21 ...
Vamos a calcularlo en Ascot. Es simple En el registro I tenemos un miembro impar de la serie (para empezar, el primero), en el registro II - par (para empezar, cero). Entonces el programa se verá así:
1: read I; II+=; prn();
El programa debe ensamblarse manualmente y luego introducir las paradas en los orificios deseados de la placa del programa. El resultado es este:
1 0/0 12/4 14/3
1 12/3 14/4 17/4 33/4
Aquí, el que está al principio significa la parada de columna tipo 1, lo que hace que la máquina se detenga para realizar estos pasos de acuerdo con el programa No. 1, 0/0 (establecido en la fila No. 0 detiene el tipo 0) obliga a la máquina a buscar paradas de columna a partir de este punto. Las paradas en la fila 12 controlan el registro II: 12/3 provoca la lectura del registro y 12/4, agregando el número de lectura. Del mismo modo, 14/3 provoca la lectura del registro I, y 14/4, añadiéndole lectura. La impresión del número de lectura se produce automáticamente, a menos que se instale una parada especial de 5/3 que inhabilite la impresión. 17/4 gira el rodillo del carro un paso, y 33/4 inicia el retorno del carro (este tope puede omitirse, luego el carro se deslizará hasta el final y el retorno del carro comenzará automáticamente).
Por el bien, debe agregar otro 15 / 6R a ambas líneas, luego, inmediatamente después del final del paso, la máquina inicia la siguiente. Pero la primera vez no lo hice, y tuve que presionar constantemente la tecla de inicio.
Por extraño que parezca, el programa comenzó la primera vez. Estaba emocionado!
Pero para ejecutar este programa, primero debe escribir los datos en los registros deseados, y luego los resultados se muestran en dos columnas inexactas. Hagamos un programa que solicite los datos de origen y luego muestre los miembros de la serie y sus números.
Resulta así:
1: read I; clr;
Comencé el programa y el automóvil se atascó de manera segura, porque antes de eso no había usado el registro K, y tenía otro pedazo de corteza. Nde. Se quitó un trozo de corteza, apagó el mostrador y acuñó el auto. ¡Y funcionó!
Decidí que la máquina ya está funcionando finalmente, solo necesita escribir un algoritmo hermoso para presumir de Habré, y puede escribir un informe. Por ejemplo, Stanley Frenkel, de acuerdo con el Sr. Feynman, le enseñó al tabulador a contar arctangent. ¿Por qué soy peor? Eso es comprensible, lo peor, ¿pero de repente?
Por desgracia, no encontré algoritmos adecuados. En Stackowerflow, sugirieron una opción de cálculo de logaritmo que era demasiado complicada para Ascot; en la Biblioteca Lenin había un
par de folletos con varios algoritmos interesantes, pero también eran demasiado difíciles para Ascot. Al final, escupí sobre trigonometría y logaritmos, y decidí tomar la raíz cuadrada banal.
En general, la raíz cuadrada se considera fácil. A partir de la fórmula de la suma de los términos de la progresión aritmética, resulta que la suma de los primeros n números impares = n ^ 2. Lo que sigue
De donde es relativamente fácil derivar el algoritmo de raíz cuadrada utilizado desde principios de la década de 1950 por los aritmómetros automáticos de raíz cuadrada de Friden,
aquí hay un poco más de detalle . Es cierto que este algoritmo también requiere cambios por descarga, pero solo por descarga hacia arriba (el cambio por descarga hacia arriba, es decir, multiplicar por diez, puede organizarse como una serie de adiciones, y el cambio por descarga hacia abajo usando las capacidades de Ascot es prácticamente imposible).
La primera versión del programa que escribí en la noche. Pero debido a la cantidad de operaciones requeridas al ascender, no pudo encajar en 50 pasos. Tuve que optimizar calculando dos turnos diferentes con los mismos comandos, luego corregir los errores, luego depurar el programa en una hoja de papel, corregir los errores nuevamente, depurar nuevamente ... En algún momento de la semana, se trataba de ensamblar, meter en el tablero del programa y ejecutar la prueba. No funcionó.
Revisado nuevamente, encontré algunos errores menores. Corregido No funcionó. Releyé los libros y descubrí que entendía mal una sutileza de la programación. Corregido, no funcionó. Revisado nuevamente, encontré otro error. No funcionó. Verifiqué dos veces, me di cuenta de que no había solucionado un mal funcionamiento menor en el automóvil. Corregido No funcionó ... En general, durante otra semana estaba configurando un programa en hardware. Y depurado finalmente!
Espero que después de esto no haya malentendidos serios de programación y problemas de la máquina, porque el programa para calcular la raíz cuadrada usa, al parecer, todas las funciones computacionales y lógicas que están en la máquina. Es que no todos los registros, pero revisé los registros por separado.
¿Cuál es el resultado y qué sigue?
Como resultado, en primer lugar, tengo un Ascot-170 en funcionamiento.
En segundo lugar, espero que este artículo lo haya hecho más famoso en RuNet. Ascot se usó con nosotros al menos hasta finales de los 80, y solo puedo explicar su baja fama por el hecho de que pocas personas entendieron cuán geniales eran, y los propietarios de los almacenes no entendieron lo valiosos que parecían. Quizás el artículo corrija esta situación.
En tercer lugar, creé una
sección sobre Ascot en mi sitio web en la que publiqué una guía de programación, algunos consejos sobre cómo configurar un mecanismo, libros, modelos para impresión 3D, códigos de programa, etc. Espero que esto también sirva para popularizar Ascot y ayude a los ajustadores, que podrán conseguirlo después de mí.
Cuarto, en el curso del trabajo, traté de tomar el tiempo dedicado a Ascot en la tableta. Entonces, resultó que pasé menos de doscientas horas de trabajo aparte de la dilación. Quizás puedas ingresar en el currículum, ¿verdad?
Por otro lado, quedaban un par de problemas sin resolver.
Primero, nunca hice un programa para calcular algo genial, como funciones trigonométricas, grados racionales o logaritmos. Como ya dije, no podría encontrar o encontrar un algoritmo adecuado, pero si alguno de los lectores del artículo me ofrece (en comentarios, en un correo electrónico personal o en el correo electrónico de alple.net) cualquier algoritmo adecuado (en pseudocódigo como
lo que es para la raíz cuadrada ), definitivamente intentaré implementarlo en hardware y grabar sobre este video.
En segundo lugar, como dije, Ascot realmente carece de un cambio para descargar el comando. Al mismo tiempo, tengo la impresión de que iban a hacerlo, pero no lo hicieron; no puedo explicar de otra manera la existencia de los registros III / IV.
sobre registrosSe produjeron variedades de Ascot con un conjunto diferente de registros. El mayor número de ellos, 55 (+1 en el teclado) está solo en mi versión. Aquí hay una lista de ellos:
Registro de teclado en el que el número ingresado en el teclado se almacena temporalmente.
Los registros I y II son universales, completamente independientes, controlados automáticamente y desde el teclado, y admiten números negativos y operaciones lógicas.
Registre K - control, para controlar el funcionamiento sin errores del operador y la máquina. La función es similar a I y II, además tiene protección contra reinicio accidental. No se controla desde el teclado, pero para un registro de control es más bien una virtud.
Los registros acumulados son los mismos, en tambores de 10 piezas. No funcionan con números negativos y se usan menos en operaciones lógicas, tienen algunas limitaciones técnicas de conexión mutua, normalmente se controlan desde el teclado y automáticamente.
Y esos mismos registros misteriosos III / IV , en términos de capacidades que están cerca de acumular, pero se controlan muy, muy mal desde el teclado.
Además, los registros III / IV tienen su propio mecanismo de conexión, independiente de la acumulación de registros. En realidad, este sistema se mantuvo de uno de los modelos Ascot más primitivos, que aparte de los registros I, II, III, IV y K no tenían nada, pero ¿por qué los dejaron?
Creo que se suponía que eran exactamente como registros de cambio a bit. Porque es suficiente para acoplarlos con una serie de engranajes diagonales, y obtendremos un dispositivo de cambio: escriba, digamos, en el número III, y póngalo en el IV, pero se desplazó hacia la izquierda hacia la descarga.
Me lo imagino algo así:
Aquí puedes girar el modelo 3D.Y aquí, para ver cómo se ven los contadores en vivo.En la imagen, engranajes amarillos, contadores III y IV (por ejemplo, la primera descarga III-1 y la segunda descarga IV-2 están conectadas a las rojas). Cuña translúcida: detalles del dispositivo contador.
Los engranajes rojos son el mismo sistema de cambio que falta que gira el engranaje III-1 cuando gira IV-2, y viceversa. Si ensambla un sistema de este tipo, entonces para un cambio a la izquierda, será suficiente escribir el número deseado en IV y leerlo desde III.
La dificultad es que cuando se trabaja, los engranajes de los contadores no solo giran, sino que también se mueven hacia arriba y hacia abajo (aproximadamente a su radio), y el mecanismo debe soportar este movimiento. Resulta ser un diseño bastante complicado, en el que no puedo pensar.
Sería genial si alguien que sabe diseñar mejor que yo, por una cantidad razonable de dinero, idee un sistema de este tipo para imprimir en una impresora o lo haga en hardware, con aclaraciones y sugerencias, una vez más, escriba comentarios en PM o envíeme un correo electrónico [a] alple.net.
Puede encontrar más detalles en mi sitio web, en la
sección sobre Ascot .