Ascot 170-机械计算机和苏联古流行

八十年代到达世界。 IBM凭借其PC和PC XT占领了专业计算机市场,而PC和PC XT是所有现代台式计算机的先驱。 乔布斯陆续发布了新的苹果机型。 Commodore 64和ZX Spectrum在世界范围内动荡不安。 同时,在苏联地区继续生产五十年代初的Ascota 170-机械计算机。 由于某种原因,在RuNet(以及Internet的其余部分)中,他们很少谈论这些惊人的机器,几乎是由图灵完备的机械计算机生产的仅有的一系列机器(从1955年到1983年超过30万台)。 我只有在阿斯科特不慎掉入我手中时才发现有关它们的信息。
我希望我的文章可以改变这一点。


我的Ascot完成了对2的平方根的计数。

总的来说,我是机械计算机的收藏家。 不幸的是,这些车通常很笨重,而且我没有无限大的博物馆,所以我只需要带些最有趣的东西。 因此,当谢尔盖·弗洛洛夫(Sergey Frolov)问我是否需要阿斯科特汽车时,我在Google上搜索了几分钟,发现阿斯科特汽车被东德(GDR)称为非常无聊和原始的汽车,不值得他们居住。 谢尔盖说了什么。 幸运的是,谢尔盖(Sergey)回答说,这不仅与Ascot有关,而且与一种特别稀有的170型有关。

原来,我得到了有史以来生产的最复杂的机械机器之一,是一台会计计算机,该计算机借助于“钉子”进行编程,用钉子将其钉入锤子中。 不幸的是,在Avito上与卖方的沟通表明,Ascot是不完整的,因此接受它是没有用的。 然后另一半的Ascot出现在Avito上(卖方试图向我证明她是完整的,而不是一半),问题悬而未决一年。然后,第一位卖方写信给我,说他找到了缺失的部分! 在这里背景结束,故事本身开始。

当然,在这一点上,我读到Ascot-170有点像可编程机器。 但是“可编程”是一个宽松的概念,在购买之前,我试图了解一些有关其功能的知识。 幸运的是,这很简单:将Ascot大量交付给苏联,并出版了许多关于它们的书籍。 其中之一是我在Avito上购买的一本关于应用方法的简短手册-但我意识到一点,基本上,该机器一直在循环工作,并以某种方式支持过渡。 我不知道如何处理这些信息-但我想到了这个主意:列宁图书馆地铁站里有列宁图书馆! 在整个20世纪,在我们这里出版的书籍的强制性副本蜂拥而至,关于Ascot的书籍也应该在那里。 的确,在列宁卡的电子目录中, 有三百多本书提到了Ascot 170 。 而且,事实证明,在过去的几十年中,图书馆的运行模式已大大软化,如今,任何人都可以用专业的相机来拍照。

为了庆祝,我拍了几十本书,从中我了解到Ascot可以,并立即购买了。 并且他对教科书进行了详细研究。



机遇雅诗阁170


读这些书并不容易:它们不仅描述了在第一种高级语言Fortran出现之前就已经开发了很长时间的机器编程。 因此它们也是用会计术语写的。 通常,假设您需要学习用Old Slavonic编写的有关1C:Assembler的教科书,您将大致了解我面前问题的严重性。 可以说,仅因为我正在专门寻找条件操作符,我才能确定条件操作符存在的事实。 为了了解其工作原理,只有在研究了相应节点的设计和一系列实验之后才有可能。

是的 阿斯科特有条件陈述! 还有过渡队! 通常,您需要一台功能全面的通用计算机!

让我告诉您更多有关此的内容。 我将使用我发明的类似C的伪代码-与旧教科书中使用的伪代码完全不同,但是今天更加容易理解。

因此,在操作过程中,机器的托架相对于机器的主体从右向左移动-就像传统的打字机一样。 在这种情况下,打印单元沿着纸张滑动,程序命令的读取单元相对于程序板,该程序板上有孔,钉子和脚插入其中,就像在音乐盒的鼓中一样。 在某个时刻,读取节点会找到圆柱状的停靠点,这意味着“您需要在这里停下来并做些事情”,然后停靠并执行此列中其余停靠点和操作员需要的按键操作。 并且,如果读取节点未在滑架的末端找到停止位置,则滑架将自动向右移动到停止位置,然后再次开始扫描-这是程序不断旋转的主要循环。


一站式停靠站。 垂直上方-圆柱状,其余-软件。

实际上,这样的停止“需要做某事”,即程序的步骤,一块板上可能有大约50个。 一步可以执行几个命令。 例如,此代码仅需一步:

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

如您所见,机器主动访问寄存器。 寄存器是机器主体中的齿轮行,因此程序存储器(带止动板)与数据存储器(寄存器行)分开。 总共,该机器具有〜50步的命令存储器(〜0.3 kB)和56个整数寄存器,具有12个小数位(另一个0.3 kB)。

第一步,机器可以读取一个寄存器,打印其内容,将其加或减至其他几个寄存器,然后将其重置。 同时,执行了两个用于与零比较的选项,以及用于转换命令的几个选项。

遗憾的是,尽管机器代码非常复杂和丰富,但它仍具有一些令人不愉快的局限性:

1.机器没有用于乘法和除法的命令。

奇怪的是,这不是错误,而是功能。 大多数更简单的会计机器都有一个乘法命令,但是Ascot的开发人员早在1950年代就意识到机械的时代已经到了数字,他们提供了连接外部数学模块的能力,而不是缓慢而笨拙的机械乘法器。 确实,在旧教科书中可以找到有关Ascot的外部机械倍增器的参考,但并未保留他的真实照片(尤其是真实的标本)中的任何一张。 在1950年代后期,已经开始使用R12灯模块(怪兽的小柜子大小,重200公斤,消耗一千瓦半),从1962年开始生产小型晶体管倍增器(系统单元很小),直到它们离开传送带。在我的Ascot实例中,使用了微小的芯片分频器。 总的来说,我得到一份没有乘法除法的副本是件好事:在微电路上使用平庸的电子计算器而不是一台全机械的计算机,这真是可耻的。

2.机器不知道如何左右移动数字。

通常,可以以编程方式组织乘法,除法和其他棘手的数学; 实际上,许多现代RISC处理器就是这样做的。 Ascot也可以做到这一点-但是,为此,您需要将数字逐位移动,并且没有提供这样的命令。 实际上,这很奇怪,因为乘法模块,特别是刚开始的时候,是昂贵且稀有的,并且机器拥有组织换档所需的一切。 我什至想在我的Ascot中添加一个shift命令-但在本文结尾处会详细介绍。

3.跳转标记的数量是有限的。

程序可以具有标记back1、1,back2,forward1和forward2,它们分别标记几次,可以将程序步骤标记为根据程序1,根据程序2以及两者执行。 听起来不错,但是当编写一个相当复杂的算法时,这足以缩小规模。

4.不支持数组和间接寻址。

Ascot有许多寄存器。 试想一下:有50个程序步骤,对于每个步骤,您只能读取(和打印)一个寄存器-并且有56个寄存器! 即,原则上不可能在自动模式下直接寻址所有寄存器,而无需从键盘上选择寄存器号。

通常,使用不同的间接寻址选项可以解决此问题-例如,您首先设置寄存器号(ptr =&R00),然后循环循环增加(ptr ++)。 而且,原则上,Ascot拥有所有功能:五十个寄存器以五个旋转卷轴的形式组织,每个十个寄存器,并且对于增量寻址,足以添加使鼓向前旋转一步的命令就足够了。 对于计数多行文档的堆栈,这将是一个非常流行的功能。 但是由于某些原因,他们没有。 在我看来,唯一的解释是到1950年代初期,还没有发明增量寻址。 如果有人想起一台使用增量地址的早期德国计算机,请告诉我。

活着的阿斯科特!


当我处理编程功能时,鄂木斯克找来了一台计算机。 在与装载机发生不可避免的争吵之后,我将其放置在房间的中间,用锤子敲打生锈,将油和煤油的混合物倒在机械上,然后尝试将其打开。


阿斯科特(右)很大


而且很脏

不出所料,他没有工作。 我爬进里面,,了几只垃圾,摇了一下楔形销子,汽车才第一次起步,走了几步就被卡住了。

下个月正在维修中。 我在互联网的一半上刊登了寻找有经验的安装程序的广告,我发现有40年前与Ascot有一点生意的人,但是,,,我必须自己修复它。 我打印了一个3D打印机手柄以手动旋转控制轴,学习了如何关闭卡住的计数器,从该机构中筛出了几块特别是恶意的云杉皮,找到并开发了六个卡住的接头,修复了六个失效的弹簧。


树皮从哪里来?

我跳过了几周的工作,从设置手册中每天早晨到晚上翻遍,寻找下一个故障的原因,将垃圾邮件发给了降落者,一百卢布帮助我暂时将机器颠倒了……最后,我到了可以启动汽车的地步“你好,世界!”。


我们将Ascot切换到打字机模式,然后键入“ NELLO SHORD”。

嗯,不,这太容易了。 让我们把永生的兔子更好。

假设一个月前我们没有兔子,今天我们在市场上买了几只兔子。

一个月后,它们长成一对成年兔子。

又过了一个月,这对夫妇分娩了,我们得到了一对成年兔子和一对兔子。 共两对。

一个月后,一对成年人再次分娩,最后一对兔子长大成人。 共有三对夫妇,两名成人和一名儿童。

再过一个月后,两对成年动物会繁殖出两对后代,最后一个月的兔子会长大。 总共,我们有五对,一个月前与我们在一起的所有兔子,成年兔子,以及成年后的所有兔子,都有一对后代。

依此类推。

意大利数学家斐波那契(Fibonacci)于13世纪初研究了这个问题,以其荣誉将所得的数列称为斐波那契数列:

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

让我们在Ascot上进行计算。 很简单 在寄存器I中,我们有一个奇数(对于启动器,是第一个),在寄存器II中-偶数(对于起动器,是零)。 然后程序将如下所示:

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

必须手动组装程序,然后将挡块驱动到程序板上的所需孔中。 结果是这样的:

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


在这里,开头的1表示列停止类型1,这使机器停止根据程序No.1执行这些步骤,0/0(在行0停止类型0中设置)强制机器从此点开始搜索列停止。 第12行的停止寄存器控制寄存器II:12/3导致读取寄存器,而12/4-将读取的数字添加到该寄存器。 同样,14/3导致读取寄存器I,而14/4导致对其进行读取。 除非已安装特殊的5/3挡块以禁用打印,否则将自动进行读取编号的打印。 17/4旋转滑架滚轮一步,然后33/4开始滑架返回(可以省略此停止,然后滑架将滑至尽头,滑架将自动开始返回)。

为了良好起见,您需要在这两行中添加另外的15 / 6R,然后在步骤结束后立即启动机器。 但是第一次我没有,我不得不不断地按开始键。


奇怪的是,该程序首次启动。 我很激动!


但是要运行该程序,必须首先将数据写入所需的寄存器,然后结果显示在两个不正确的列中。 让我们编写一个程序,该程序将请求源数据,然后显示系列的成员及其编号。
原来是这样的:

 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; //   ,  ,  . 

我启动程序后,汽车安全地卡住了,因为在此之前我没有使用过寄存器K,它还有另外一块皮。 恩德 他移开一块树皮,关掉柜台,把汽车塞了进去。 而且有效!


我决定机器已经可以正常工作了,您只需要键入一些漂亮的算法就可以在Habré上夸耀,您就可以编写报告。 例如,据费曼先生说,斯坦利·弗伦克尔(Stanley Frenkel)教制表者计算正切。 我为什么更糟? 可以理解,更糟,但是突然之间?

,我没有找到合适的算法。 在Stackowerflow上,他们提出了对数计算选项,这对Ascot来说太复杂了;在列宁图书馆中,有几本小册子介绍了几种有趣的算法-但是对Ascot来说太难了。 最后,我吐槽了三角函数和对数,并决定采用平庸的平方根。

通常,平方根被认为是容易的。 从算术级数之和的公式可以看出,前n个奇数之和= n ^ 2。 接下来是什么

n= sqrt sum limitsi=0n12i+1


从这里可以容易地得出1950年代初Friden自动平方根算术计使用的平方根算法- 这里有一些详细信息 。 的确,此算法还需要通过放电进行移位,但仅通过放电进行移位即可(通过放电进行移位,即乘以十,可以组织为一系列的加法运算,而使用Ascot的功能通过放电进行向下移位实际上是不可能的)。

我在晚上编写的程序的第一个版本。 但是由于上移时需要进行大量操作,他无法适应50个步骤。 我必须通过使用相同的命令计算两个不同的班次进行优化,然后更正错误,然后在纸上调试程序,再次更正错误,再次调试...在一周的某个地方,组装,装入程序板并进行试运行。 没用
重新检查后,发现一些小错误。 已更正。 没用 我重新阅读了这些书,发现我误解了编程的一种微妙之处。 更正后,它不起作用。 重新检查,发现另一个错误。 没用 我仔细检查了一下,发现自己并没有解决汽车中的小故障。 已更正。 没用...总的来说,我又用一个星期在硬件上设置了程序。 最后调试!

我希望在此之后,不要对编程和机器问题有严重的误解,因为似乎计算平方根的程序使用了机器中所有的计算和逻辑功能。 那不是所有寄存器,但我分别检查了寄存器。


结果如何,下一步是什么?


结果,首先,我有一个正在工作的Ascot-170。

其次,我希望本文能使我在RuNet中更出名。 至少到80年代末,阿斯科特(Ascot)一直与我们一起使用,而我只能通过以下事实来解释它们的声誉,即很少有人知道它们有多酷,仓库的所有人也不知道它们的价值。 也许本文可以纠正这种情况。

第三,我在我的网站上的Ascot上创建了一个部分 ,其中发布了编程指南,有关设置机制的提示,书籍,用于3D打印的模型,程序代码等。 我希望这也可以促进Ascot的普及,并将对调节器有所帮助,这些调节器将在我之后得到。

第四,在工作过程中,我尝试将花在Ascot上的时间花在平板电脑上。 因此,事实证明,我除了拖延之外还花了不到200个工作小时。 也许您可以输入简历,对吗?

另一方面,仍然存在一些未解决的问题。

首先,我从来没有编写过一个程序来计算一些很酷的东西,例如三角函数,有理数或对数。 正如我已经说过的,我自己无法提出或找到合适的算法,但是如果本文的任何读者可以为我(在评论中,在个人电子邮件中或在我[al]。alple.net邮件中)提供任何合适的算法(以伪代码形式)就像平方根( )一样),我一定会尝试在硬件中实现它,并拍摄有关此视频的内容。

其次,正如我所说,阿斯科特确实缺乏执行卸任指挥权的转变。 同时,我给他们留下的印象是他们打算这样做,但没有这样做-我无法解释是否存在寄存器III / IV。

关于寄存器
生产的Ascot品种具有不同的套准。 其中最多的是55个(键盘上为+1)。 以下是它们的列表:
键盘寄存器 ,其中暂时存储了在键盘上输入的数字。
寄存器I和II是通用的,完全独立,可通过键盘自动控制,支持负数和逻辑运算。
寄存器K-控制,用于控制操作员和机器的无差错操作。 该功能类似于I和II,此外还具有防止意外复位的保护。 它不是由键盘控制的,但是对于控制寄存器而言,这是一种美德。
累积寄存器相同,以10个鼓为单位。 它们不能使用负数,并且在逻辑运算中使用较少,具有相互连接的某些技术限制,通常由键盘自动控制。
和那些相同的神秘寄存器III / IV-就功能而言,它们接近积累,但通过键盘对其的控制却非常非常差。
此外,寄存器III / IV具有自己的连接机制,与累加寄存器无关。 实际上,该系统仍来自较原始的Ascot模型之一,除了寄存器I,II,III,IV和K之外,它们什么都没有-但是为什么要离开它们呢?

我认为它们应该像移位寄存器一样。 因为它足以将它们与一系列对角线齿轮耦合,所以我们将获得一个换档装置:用III号写,然后将其写在IV号,但向左移至排料口。

我想像这样:


在这里,您可以旋转3D模型。
在这里-查看柜台的外观。

在图中-黄色齿轮-计数器III和IV(例如,第一放电III-1和第二放电IV-2连接到红色)。 半透明楔形物-计数器设备的详细信息。

红色档是缺少的换档系统,转动IV-2时会转动III-1,反之亦然。 如果组装了这样的系统,那么向左移动就足以在IV中写入所需的编号并从III中读取所需的编号。

困难在于,工作时,计数器的齿轮不仅会旋转,而且还会上下移动(近似于其半径),并且机构必须支持这种移动。 事实证明这是一个相当复杂的设计,我无法想到。

如果知道如何比我更好地设计的人,花合理的钱拿出这样的系统在打印机上打印,或者用硬件制造它-做出澄清和建议,再写评论,写在PM中,那将是很好的或发邮件给我[a] alple.net。



您可以在我的网站上有关Ascot部分中找到更多详细信息。

Source: https://habr.com/ru/post/zh-CN450538/


All Articles