= 创作分享 =
MOD技术讨论
Matter Energy Computer 施工贴

Matter Energy Computer 施工贴

Doremy 于 2021-2-4 16:45 ( 21天前 ) [创作] 分类。  [复制链接] [显示全部楼层] [打印]
本帖最后由 QQ酱49791 于 2021-2-4 16:49 编辑

去年年底,我立了个Flag,要用AE2手搓一台类似于红石计算机的可编程计算机。*这个甚至可以当作一个升学资料(什
反正当作社团活动是可以的)

使用AE2搓计算机?这可不是用红石P2P什么的。信号的媒介会被我改掉,改成——物品。如下图左上角,是一个16字节的内存条。通过给予1~16个砂岩,访问正确的存储元件,将其内容复制一遍以进行读取,将其抽空并放入新的数量的物品以进行写入。
右下角是后勤系统(
捕获.PNG
Flag说要今年完成,但是可能会因为学业压力咕……不过这个过程当中不会开任何新的整合包:
    现有整合:InfEvolvedSB(创造储罐快了,魔力池其它材料准备好了,养蜂刚开始,其它都结束了)。
    如果有什么AE2自动化,我可能会放下这玩意去秒杀一下,比如昨天发的AE2+DE+TE1.7.10自动屠龙。
    当然咕了去打stg也是有可能的(

使用模组:appliedenergistics2-rv6-stable-7、worldedit-forge-mc1.12.2-6.1.10-distForge:1.12.2-forge1.12.2-14.23.5.2822
准备,启航!

目前使用的参考资料:https://minecraft-zh.gamepedia.c ... E.E6.9D.A1.E4.BB.B6
(以及一些WE的资料不写了)

由于想要把整个搭建过程也给记录下来,所以可能会按照贴吧的方法来更贴。希望允许(








发表于 2021-2-4 16:45:27 | 显示全部楼层 |阅读模式

回复 | 举报

该帖共收到 11 条回复!
本帖最后由 QQ酱49791 于 2021-2-23 20:55 编辑

【已推】

捕获.PNG
别再吐槽这个形状了!
还没有写读写的内存条(我怎么感觉之后硬盘可能会是同一个结构呢)
256字节的容量,水平大小是39*39

读取:
一个内含 表示地址的沙石数量 以及名为“读取”的一张纸 的1k元件=>一个写过的1k元件
Step1:锁上“内存片”的后续访问队列
Step2:将沙石从1k元件导出
Step3:16沙石=>1平滑沙石,重复直到沙石<16
同时,判断出“读取”
Step4:将沙石和平滑沙石通过只读存储总线连接到黄色网络,并把1k放到输入处理端
Step5:当黄色网络中出现表示数据的常规圆石时,将创造单元中的占位符导入黄色网络,持续0.5s然后停止导入
Step6:从内存中导出所有占位符至元件A(标记过白名单),再导入至之前的1k元件。
Step7:往1k元件中倒满常规圆石。
Step8:导出其中的占位符。
Step9:将1k元件输出,解锁内存片,处理下一个。

写入:
一个内含 表示地址的沙石数量 、 表示值圆石数量 、 名为“写入”的一张纸 的1k元件。
圆石数量不得超过256。
Step1~3不重复赘述
同时判断出是写入。
Step4:把对应内存中的圆石全部导出。
Step5:把输入元件中的圆石全部导入给内存。
Step6:把输入的元件扔了,解锁内存片。
发表于 2021-2-4 18:45:00 | 显示全部楼层

回复 | 举报

本帖最后由 QQ酱49791 于 2021-2-23 20:55 编辑

【已推】
捕获1.PNG
捕获.PNG
内存内置取模器
原理:不断尝试使用合成表:16砂岩=>1平滑砂岩
发配到蓝色网络1,蓝色网络则对着绿色网络的一个接收器,不断取用合成表(输出总线):
1圆石=>1砂岩,16砂岩=>1平滑砂岩。不断尝试输入平滑砂岩。
一旦绿色网络发配了砂岩,就“正在合成”平滑砂岩,然后输入了平滑砂岩,发配给绿色网络。


发表于 2021-2-4 19:22:08 | 显示全部楼层

回复 | 举报

完全是0基础起步,所以有很多混乱的地方,可能会重构很多很多次
发表于 2021-2-4 22:47:26 | 显示全部楼层

回复 | 举报

虽然看不懂,但是感觉很牛逼。支持一下专业性太强了

点评

0基础开始走的啦,没啥专业性  发表于 2021-2-5 07:48
发表于 2021-2-4 22:51:49 | 显示全部楼层

回复 | 举报

不明觉厉 火钳
发表于 2021-2-5 22:06:23 | 显示全部楼层

回复 | 举报

不明觉厉 刘明

(真的看不懂)

点评

你看不懂个龟龟  发表于 2021-2-5 23:16
发表于 2021-2-5 22:35:41 | 显示全部楼层

回复 | 举报

重新构思

一个计算机,说白了就是要有很多个组件。这些组件互相通信即可。

对于一个通信,则是要求表明自己是谁,收件人是谁,内容是什么。收件人的查找应当通过寻址器来查找。

这个寻址器可能分很多级,比如说第一级是组件级,告诉寻址器去哪个组件找,然后如果找到是寄存器,那么直接存,如果是硬盘,先看是哪个256字节,再看是哪个16字节,最后再看要存到哪个字节。


发表于 2021-2-7 08:04:25 | 显示全部楼层

回复 | 举报

设计好了

首先是我们的设计观念:
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



发表于 4 天前 | 显示全部楼层

回复 | 举报

捕获.PNG
用方块数量代替物品数量+双发信器寻址
不过也要设置优先级。但是可以设置多个一样的优先级:1234567再通过子网络设置更大的优先级。也就是说:可以复制黏贴!!!!!!

当然图中是控制CPU
发表于 3 天前 | 显示全部楼层

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除教程作者自定义规则的文章, 及未授权的站外图片/链接以外的所有开放公开编辑的内容, 均采用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表