我的小继电器:Brainfuck计算机是现实



上次出版以来已经整整一年 ,我认为4月1日对于我的三个疯狂的计算机项目的年度摘要来说是个好日子。 当时,该项目仅存在于纸上,但现在肯定已经成为现实。


振铃式继电器块,世界上最快的继电器计算(但这并不准确),自动换卷,真空指示器和LED闪烁。


历史背景



图1:沃西乔斯基(Wojciechowski)的“无线电玩具”,1979年,被我和我的生活所打击。


曾几何时,当时一切都很大,而我很小(比如2002年),父亲给我Wojciechowski的书《无线电玩具》。 那时我没有电脑,但根本没有听说过互联网,而许多人所熟悉的一本书竟然只是娱乐电子设备的仓库。 其中包括对电子计算机的描述以及电话继电器上的简单模型电路。 这个模型是我2008年在大学的第二年,我整理了一份有关计算机历史的报告。



图2:RCM-4位ALU


那时,我已经在探索Internet的广阔领域,并且意识到Harry Porter 中继计算机2号中继计算机Zuse中继计算机的存在 -我正在考虑建立自己的设备。


对于那些不太了解其他人的人,我建议您查看我对家用中继计算机的视频评论。 在过去的一年中,它有点过时了,但是有趣的地方并没有停止:



在同一年的2008年,我在电气工程理论基础课程中决定了主要组件-磁簧继电器。 在其中一个实验室中,我惊讶地观察到婴儿RES55在50 Hz频率下如何工作。 这给我留下了持久的印象,我开始积累簧片开关。


十年过去了....


十年后,该项目以极快的速度发布。 当当前的体系结构诞生时,一切都从2016年11月的死角转移了。 不幸的是,我决定自己制作所有印刷电路板...结果,整个平方米的双面PCB变成了一个黑洞,并吸收了数百个工时的空闲时间,对于一个员工来说大约是六个月。 从4月到11月2k17,几乎没有任何反应。


信息图表



机器的体系结构与图灵机相对应。 有一个带有数据的磁带-64 KB的RAM(16位字)。 RAM-从某种垫子上缓存芯片。 英特尔奔腾主板。 有关真实性,请转至...真实性部分。 我知道,大多数家用中继计算机都使用微电路RAM。


中心元件是一个16位并行加法器。 他负责计算下一条指令的编号,并处理数据和指向该指令的指针。
加法器的输入是一个16位临时寄存器和一个12位命令寄存器。 12位也被发送到加法器的高4位,从而得到“全” 16位。 重要的是加法器可以正确地对12位数字进行加减运算。


缺点很明显-一次我们只能向后或向前跳转2 ^ 12条指令,或者通过此值更改指针或数据。 第一个-您在编写程序时需要考虑的问题,第二个-您始终可以重复该过程。


减法在附加代码中。 并行传输提供恒定的计算延迟-仅3个串联继电器。 这不超过2毫秒。


IP寄存器和AP寄存器以及RAM输入通过锁存器连接到加法器的输出。


计算方式


主要操作正好是两部分。 在一种情况下,我们将计算新的指针值,而在另一种情况下,将计算新的数据值。


每个上升沿都会开始计算新的指令号。 本质上,IP ++已经完成。 计算后,IP被馈送到存储卡的地址输入,并且指令通过数据总线进入命令寄存器。 高4位确定将来的指令,低12位最有可能不等于零,并且将来加法器将通过该值精确地更改临时寄存器中的数字。


每个下降沿开始操作。


对于使用AP和IP寄存器的操作,操作序列如下所示:


  1. 通过地址总线,将IP(AP)寄存器的内容复制到临时寄存器;
  2. 临时和命令寄存器被馈送到加法器的输入。 2毫秒后,答案将在加法器的输出处准备好。
  3. 响应记录在IP或AP寄存器中。

有一些功能。 对于AP + BIAS和AP-BIAS命令,情况确实如此,对于条件命令,例如当IP =(* AP == 0?)IP + 1:IP + -BIAS时,我们仍然需要将当前数据单元格值上传到数据总线并删除来自空检测器的信息。


对于AP + BIAS和 AP-BIAS操作,顺序略有不同。


  1. 通过数据总线,存储单元的当前值被写入临时寄存器。
  2. 临时和命令寄存器被馈送到加法器的输入。 2毫秒后,答案将在加法器的输出处准备好。
  3. AP寄存器继续馈入存储卡的输入。 来自加法器的答案将直接写入存储器。

计算总是在16位模式下进行。 但是条件分支的空标志定义为:


Z = ((16bit?) *AP : (*AP) & 0x00FF == 0) ; 

建筑施工


自上次以来没有任何变化。


模组



图3:计算机模块。 从左到右:D触发器模块,二极管模块,2AND / 2XOR模块


核心是一个40x64mm的小型模块。 每个模块都是带有4个继电器的印刷电路板,在其上实现了简单的逻辑运算。 有一个用于16个触点的连接器(有用于12和14个触点的模块)和最多4个LED。 所有尺寸均严格固定。



图4:组装过程中的模块


例如:


  1. 2AND / 2XOR模块-2个独立的逻辑运算-2AND和2XOR。 加法器块中使用了32个块,每位两个模块。 最初,所有4个LED均已焊接,但模块的电路使得每个模块上的两个继电器并联连接,并且为减少单元消耗的功率,移除了一半的LED。
  2. D触发模块-64个进入两个寄存器块。 其中有60个是没有使能信号的触发器。
  3. 二极管模块-板上只有8个二极管,用于实现多输入二极管OR。 肮脏的骇客,但它可以节省继电器(现在我仍然有大约400个继电器)和按时保存-与继电器相比,信号立即传输到这种逻辑元件的输出。
  4. 模块2&-这是基础砖。 实际上,有4个带开关触点的继电器可以实现任何逻辑电路。 它们将以未知数量进入逻辑块。
  5. 通用2AND / 2OR,其制造方式使其几乎可以实现任何逻辑功能-4AND,4OR,4AND-NOT,4OR-NOT等。 它还将以未知数量进入逻辑块。

就像我说的那样-在浪费大量时间制作自制印刷电路板上,我吓坏了,从中国人那里订购了一整套电路板。 在第一周,我整理了第一个模块。 一个月后,加法器模块的所有模块都准备就绪。



图5:加法器块



4行中的8个模块中的32个模块组合成一个功能块。 总共有5个区块(最坏的情况是6个区块):


  1. 加法器模块是一个16位全加法器。 2个用于数字的16位输入,1个零位传输线,2个输出。 一个是求和运算,另一个是输入之间的XOR。 它可以用作独立操作。
  2. IP / AP寄存器块-两个独立的16位寄存器,没有使能信号。 Q和〜Q的结果将直接使用,并通过锁存器馈送至随后的位置。 可以焊接4个继电器,但是为了节省继电器,该功能已放置在外部闩锁中。
  3. 寄存器块TMP / CMD-这里有三个寄存器。 一个是16位临时寄存器。 与IP或AP完全相同。 第二个是12位;其输出通过锁存器连接到加法器的输入。 第三个是4位,带有内置的使能信号。 它用于存储当前指令。
  4. 逻辑块-2件。 或三个。 该方案仍然未知。 初步计算显示64个模块就足够了(GOTO:内存板)。

在每个块的底部,基板为200x150毫米,无需布线。 它上面只有32个连接器和方形插针,它们从下方伸出以进行环绕式安装。



图6:基板及其篮


伸出连接器中的模块不可靠。 它们会挂在这里,在那里晃动,并以各种方式降低结构的可靠性。 为了固定它们,我画了一些带有凹槽的特殊篮子并印刷了出来。 这些模块肯定不会在它们的任何地方移动-在从火车到莫斯科并返回的过程中幸存下来没有任何问题。


提篮可能更容易拉制-厚0.32毫米,可以打印10个小时多一点。 三个篮用PLA塑料印刷,另外两个用HIPS印刷。 后者由于缺少打印机外壳,在打印时会明显变形。


您可能会注意到,加法器块没有安装耳。 为他准备的篮子是最早印刷的。 然后,我将停靠这些耳朵或打印一个新的篮子。

图7:加法器块和逻辑块。


线绕


在基础板上,我们正在等待600个需要相互关联的结论。 幸运的是,不仅需要连接所有东西,而且还需要连接几乎所有东西。 另一方面,它并没有变得更容易。


我们拿起一个特殊的工具,一圈电线,再接一条,然后收紧接线图。



图8:加法器块的总结


这仅仅是工作的开始。 好吧,首先。 刚开始时有一种恐怖的恐惧-电线随意摆放,有些跳线很长,有些则太长...学到比以前更好的一点,我移走了大部分跳线并将其重新缠绕在一起-我开始用绳子拉伸跳线。 因此,电线不会挂出,结果看起来更好。 我试着放,使电线不压在销钉的角上。 结果,不是单个电路。 从第一次尝试开始,只有土线。



图9:加法器模块的总结。 最终结果


目前,这还不是很简单,但是我认为对于第一届董事会来说,结果是非常好的。 到目前为止,我还没有学习过如何将电线铺设到线圈,弯曲工具或手...


在同志 UA3MQJ上有关于此安装方法的详细文章


除了加法器块外,还需要一个寄存器块。 而是两个块寄存器。 再过几个月-组装并测试了另外64个模块。 它仍然可以缠绕基板。



怎么样


指标模块



图10:指示器模块


处理器寄存器的当前状态需要显示在某些地方,我决定真空指示器将正确显示。 在100x100mm的板上(要购买10片这样的大小,您可以从中国以5美元的价格订购),6个IV-6指示器,K155TM8触发器和一个微控制器。 这里的指示是动态的。


还有一个用于直接读取寄存器状态的16位输入和一个用于从存储卡接收命令的UART端口。


现在,固件可以读取16位端口的状态,并以十六进制格式将其显示在指示器上。 总共需要4个这样的模块。 三个将显示寄存器的当前状态-寄存器的IP,AP和CMD,以便更方便地可视化当前存储的值。 第四-将显示执行的指令总数。


锁存器



图11:闩锁模块


闩锁模块由8个RES43继电器组成。 里面有两个联系。 左和右是LED,它们显示输入和输出的当前状态。


闩锁的尺寸为100x100mm。 所需数量为8件。 两个已经准备好了,剩下的还有六个。


记忆板



图12:内存板。 一般视图


最大的块,主要包含两个64 KB的静态RAM芯片以及地址输入和数据端口的匹配方案。 该板上装有ATmega1280微控制器。 他有两项重要任务:


  1. 将程序和初始数据下载到RAM。 编译后的二进制文件必须放在内存中。 为此,可以通过UART或telnet(通过Wi-Fi)连接到存储卡并下载可执行文件。 MK将读取标头,并在RAM中布置代码和数据部分。 我完全懒得用拨动开关和按钮来做到这一点-一个脑力激荡的程序,可以执行更复杂的HelloWorld,其中包含数千条指令。 在这方面,巢中有几张王牌,但又一次。
  2. 它实现了从控制台读取数据并将其写入的命令。 是是说明。 和“,”是使用MK实现的。 而是,中继逻辑通知MK,现在有必要将数据总线的状态传输到控制台,反之亦然,以便将值从控制台输出到数据总线。 实际上,MK在UART中用作并行接口转换器。 是的,很可能会执行一些特殊的操作。 芯片,我会考虑的。

我仍然不确定如何使用16位模式。 当然,大多数程序都是在8位脑力劳动下编写的,并且一切都很简单-我们读写低字节。 在16位模式下,我该怎么办? 显示整个字还是只显示低字节?


除了主要任务之外,MK还具有许多辅助任务,原则上您可以不执行这些任务,但是它们的目的是方便使用机器:


  1. MK负责在32x16像素LED矩阵上显示较小的内存区域。 他在地址总线和数据总线未被主逻辑占用的同时执行此操作。 在这里,我不确定对于MK,公交车上通常不会有时间,因此需要检查该问题。 但是在程序的头文件中,将有一个显示的起始地址,我将尝试使其工作。 指示是动态的。 一个时钟周期一次输出两个数据列。
  2. 当在二进制文件中激活了受保护的存储模式的标志时,如果尝试执行数据节或写入存储节,则MK将生成“分段错误”异常。 因此,我们可以确保程序不会在不应该执行的地方运行。 禁止读取内存部分。
  3. 激活代码控制标志后,MK会激活模拟器并在其中执行与计算机相同的指令,比较预期结果和接收结果。 如果结果不同,将抛出“机器错误”异常。 这将意味着计算中发生错误,并且可能一个模块已开始出现故障。 否则我们也提高了时钟频率,继电器不再有时间进行计算。 借助此功能,我将尽力将最大压力挤出汽车-在此期间必须控制一些正确的操作。

内存板还有一个临时功能,但仍然至关重要。它可以模拟一块不存在的逻辑块。 内存板上有输入和输出线,我们可以向模块提供必要的信号。 因此,通过将所有控制线连接到内存板并编写一个发出必要命令顺序的程序,它将在最短的时间内完成:


  1. 运行第一个程序以执行;
  2. 调试逻辑块的算法和电路,这将增加其稍后无错误组装和操作的机会。

然后,收集逻辑块的必要模块,所有功能将逐渐“转移”。 当MK不再负责逻辑时,该项目将被视为已完成。


真实性


如果不使用晶体管和微电路,该项目最初并不是纯粹的继电器。 一方面,计算机被证明是混合型的,并且失去了辐射抗性,另一方面,大多数中继计算机也有类似的疾病。 该机器的最终版本将使用存储芯片和微控制器。 铁氧体存储器将用于另一个已经“无硅”的项目中。


为了弥补非佳能的影响,我买了一台电子打字机“ Robotron S6130”



图13:甘菊型电子打字机。


不幸的是,这台机器对我来说简直是简陋的生活。 它在会计中使用了很长时间,但最终被遗弃,以绝妙的隔离而死。



我建议查看对该怪物的独特评论。


直接来说,机械师状况良好,但是大量放置了装有D-0.25 NiCd电池对的处理器板。 他们安全地泄漏并用电解质淹没了周围的所有东西。


我想还原它并将其用作计算机的输入/输出端子,但是,除了电子部件故障外,该机器还具有俄语雏菊(带字母的驱动器)和俄语键。 第二个是由贴纸决定的,第一个是要寻找的,在这里我还不走运。 关于需要带色带的墨盒这一事实,我通常保持沉默。 至少我有纸给她..


如果由电子产品确定丢失得无法挽回,那么我将尝试寻找捐赠者,或者我将开发新的电子填充物。 使控制板成为少数shagovik并不是最困难的任务。 从德语翻译手册并理解传统知识将更加困难。 当然,该机器值得一提关于复兴结果的文章。 迄今为止,对她不利的是所进行的工作。


测验


所有读过这个地方的人都将以开裂和嗡嗡的继电器块的形式获得奖励。


首先,让我们尝试通过晶体管级联将方波应用于继电器输入:



图14:RES55簧片开关的高速测试。 线圈上有黄色信号,触点上有蓝色信号


由于示波器的输入具有一定的电容,并且继电器触点断开后,它仍保留在空气中并开始自放电,因此我们看到了相反的指数。 频率为1.7 kHz! 为了接力! 对于一个小芦苇继电器! 普通失速频率为20Hz或稍高。 在标称频率为100 Hz时,每个上升沿和下降沿约为600μs。 在这里,它们是如此之小(200微秒),因为来自下一个的能量在下一次接通时仍保留在线圈中。


我们向模块施加电压,切断从苏联测量仪器到输入的开关。



图15:加法器块和寄存器块运行中


很重要! 好酷



因此它从现场看。 起初,我想将开关重新制成16位。 将指示器连接到输入和输出,但是...我无法抗拒。


好吧,由于一切正常,并且继电器被证明具有疯狂的速度,我们将曲折输送到传输线:



我们削减了500Hz。 加法器应付,尽管声音不能说。 实际上,声音很清晰,但是电容麦克风的想法有所不同。 据我所知,这是世界上最快的中继加法器。


待续



图16:设计计算机框架


逐渐地,收集了丢失的六块闩锁,并开始设计未来机器的框架。 图中有六个方框,以防64个模块不足以进行逻辑处理。 如果足够的话-下部中央方块下方的位置将保持空白。


同时,我正在为存储卡编写固件,以便它可以替换缺少的逻辑块。 在夏天,计算机将能够执行其第一个程序。


三台电脑???


是的,三个。 首先是当前的BrainfuckPC。 第二个是代号为FluidicPC气动计算机。


关于第三个耐辐射的未来怪物,您已经可以在Internet上找到参考,但是我不想在项目之间进行介绍,首先,我想完成当前的项目-我尚未宣布。


图17:切换十极子A101,A102和A103
尽管从这张图片中您已经可以猜到将要讨论的内容。


为什么?




参考文献


整个项目继续完全开放。 因此,该项目的主要链接:


  1. 带有电路图和PCB布局的信息库 。 指示器模块和存储卡也有固件
  2. 在此页面上每周发布一次,而不是关于已完成操作的报告。 现在,您正在阅读一篇文章,不仅仅包含这些注释。 带有翻译,注释和补充。
  3. 编译器和仿真器

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


All Articles