QQ酱49791 发表于 2021-8-2 14:21 开个新帖 |
重新来吧 这次不从边缘开始,从中心开始 工作网络修改了一下,添加了无线终端快捷指令 版本变为rv8 |
近期改动: 1、基础运算单元支持直接把元件抽走,加速。以及重构单元。 2、计划加入8位256进制运算器,包括:加法器、减法器、判等器、小于判断器、取小器、取大器 乘法器……我裂开来,不是很会,不过算法是快速幂修改的快速加。 除法/取模更加要命了 3、之前说过寻址方案用成型面板。但是考虑到成型面板会罢工(参考拜年纪里的压缩空间自动化,裂开,需要TileEntity更新)因此使用:ME箱子,其元件还能存储1个不同物品(不是一种)配合发信器,达到和之前所述成型面板一样的效果 |
设计好了 首先是我们的设计观念: CPU指AE2模组的CPU,Crafting Process Unit,用于存储进程。由于AE2的CPU的进程树是静态的,无法应对流控制,所以我们需要添加一个流控制器。 流控制器叙述比较麻烦,后面解释之前说用CPU当作任务栈,那么自然得有处理模板、ME接口,以及接受ME接口数据并处理的设备。我称之为数据运输器。 数据运输器负责根据参数,将一个【地址】中的数据,复制到另一个【地址】中,通过ME-IO端口实现。 【地址】则对应的是广义的存储设备:内存、输入仓、输出仓、基础计算单元输入接口、基础计算单元输出接口、寄存器等。 寄存器由32个ME箱子组成,分别作为第一级容器,最快,和其它的【输入仓】【内存整体】等同一等级。 基础运算单元则同样,其接口同样是第一级容器。 内存整体、输入输出仓、流控制器则访问要慢一点。 例如,30个A物品,寻址,到第31个ME箱子 假如有8个基础运算单元接口,37则寻址到第6个基础运算单元, 40则寻址到输入仓,连接输入仓整体,再查看B物品的数量,搜寻具体目标输入仓。(可能是输出仓,内存等,不确定) 提供常数库: 0、1、2、4、8、16、32、64、128、256,与寄存器同级。 数据运输器和CPU网络: 操作ID:重命名圆石 地址表示:重命名沙石 流控制操作ID:重命名石头 实值和占位符:重命名铁锭 复制数据模板:地址1+地址2+上一个操作的ID=这一个操作的ID 流控制模板:上一个操作的ID(一般为将1 给到 流控制单元启动器)= 流控制操作ID 在写流控制之前,需要:将bool值给到流控制单元判断器,将1给到流控制单元启动器。 *触发流控制之后要重置所有CPU或者流控制完成后,只留下唯一一个新增运行中的和一个空闲的连入网络。 为了处理递归只应当把移除栈顶。连接所有CPU会变成队列而非栈! CPU网络存储系统:操作用的表示地址的元件存在低优先级中、一个只写存储总线,不断输入(伪合成)。 基础运算单元则目前计划有: *通用: M位置是模式控制,设置为1则开始运算,变为0则允许输出。 *因此基础运算单元应该在【数据运输器】操作的ME-IO端口附近。 "|"后为输出,前为输入。 *符号: 0->A:将X的物品清空 A->B:将X的物品导入Y I->A :将A灌满占位符 S(A):A对256取模 !256表示剩下能放256个实值物品的元件 注意: 运算器内置常数256和!256 对256取一次模的实现:如果X>=256,则X->!256 处理器: 小于?(A,B|C):I->A,将A中的占位符导到B,A中仍有占位符则A<B,输出为1,反之输出为0,M=0; 加法+ (A,B|C):clear(C),A->C,B->C,S(C),当C从>=256变成<256时,M=0。 减法 - (A,B|C):clear(C),C+=256,A->C,I->B,B的实值物品清空,C->B,S(C),当C从>=256变成<256时,M=0。 取模%(A,B|C): 循环执行直到A空: 扔掉上一个单元x。 B灌满,占位符给到新的单元x,单元x抽取A中物品。 将最后一个单元x中的实值物品给到C,M=0。 取较小值min(A,B|C):I->A,A排出实值物品,B->A,A排出实值物品至C,M=0。 取较大值max(A,B|C):I->B,B占位符出至A,B->A,A排除实值至C,M=0。 <=To be continued 流控制器: 1、流控制器单元 流控制器单元……其实就是一个特殊的内存,和运算单元类似。 比如说一个流控制器单位,当输入值>=1时则执行F1() (等价于合成F1),当输入值为0时则执行F0()(等价于合成F0)。则: CPU网络有2输出总线为之控制:F0\F1。都有红石卡和合成卡。 两个输入端,I0和I1,当I1为1时根据对应的I0激活一个输出总线,然后将CPU重置并将自己设置为0. 先写个程序:输入n正整数个数,找出最大值 用 C.符号.slot 表示运算器地址。A为1,B为2,C为3,M为0 用 T.数字 表示寄存器地址。 St.内存 In.?.first:In.?的第一个单元(取出) If.?.0判断 If.?.1激活 Main(): In.0.first,St.0 St.1,0 St.0,If.f1.0 1,If.f1.1 f10(): //None f11(): //C-- St.0, C.-.1 1, C.-.2 1, C.-.0 C.-.3, St.0 //St.1=max(input, St.1) In.0.first, C.max.1 St.1, C.max.2 1, C.max.0 St.1, C.max.3 //If St.0, If.f1,0 1, If.f1.1 |
重新构思 一个计算机,说白了就是要有很多个组件。这些组件互相通信即可。 对于一个通信,则是要求表明自己是谁,收件人是谁,内容是什么。收件人的查找应当通过寻址器来查找。 这个寻址器可能分很多级,比如说第一级是组件级,告诉寻址器去哪个组件找,然后如果找到是寄存器,那么直接存,如果是硬盘,先看是哪个256字节,再看是哪个16字节,最后再看要存到哪个字节。 |
不明觉厉 火钳 |