条目中某些信息已经不符合当前版本情况。
你可以帮助我们来翻译此条目,但请勿使用机器翻译。
本文在探讨Minecraft中计算系统的设计和实现。
第一节, 建造一台计算机的教程,这是一个关于如何在Minecraft中建造计算机以及如何扩展与改进的详细教程。不需要大量的计算机科学方面的知识。尚未完成
第二节, 设计一台红石计算机,提供了在Minecraft中设计与理解一个红石计算机的基本概念。不需要大量的计算机科学方面的知识。
概述
计算机促进了人们通过编程来交流的想法的实现
这篇文章将会解释为在Minecraft中设计与建造计算机打下基础,假定读者相当了熟悉红石并且有基本水平的计算机知识。
事实上在不了解计算机是如何工作的情况下是无法建造计算机的。此教程旨在解释你需要知道的所有内容,但这确实需要一点对计算机科学的了。我们将涉及的最深层次是IGCSE CS。
所有的计算机系统都至少有一个处理单元。在运行时,处理单元执行存储在计算机内存中的指令。为了使在Minecraft中建造计算机有一个良好的开始,你应该学习计算机科学。有非常多的资源与教程可以用来学习计算机科学。但是推荐观看Crash Course on Computer Science作为一个基础的开始。尤其是1-8节。即使它不够彻底,但可以做为你理解计算机的基础。
在Minecraft中,大多数计算机是由红石粉,红石火把以及红石中继器组成的,以引起粘性活塞或者红石灯的变化。 它们是被一系列的按钮,拉杆,压力板等等所控制。另外一些想法(本文没有涉及)是利用漏斗,矿车或船与红石。
第一节 '建造一台计算机的教程,这是一个关于如何在Minecraft中建造计算机以及如何扩展与改进的详细教程。不需要大量的计算机科学方面的知识,因为会对其解释,但会对其深入研究。
第二节 设计一台红石计算机,提供了在Minecraft中设计与理解一个红石计算机的基本概念。不需要大量的计算机科学方面的知识,因为会对其解释,但会对其深入研究。
实现
计算机可以被用在很多方面,从创造一个智能房子到运行一张冒险地图。但是,由于Minecraft对于计算机的限制(将会在下面说明),它们仍然是一个抽象概念,并且是一个理解CPU结构与嵌入式系统的良好工具。
计算机与计算器的区别在于计算器在没有用户输入时无法连续执行很多指令。计算机可以连续比较并处理指令来完成任务。
但是,在Minecraft中红石计算机非常慢并且臃肿,以致很难为它们找到实际应用。即使是最快的红石计算机也要花数秒来完成一个计算,并且占据数千方块的体积。在Minecraft中命令方块由于它们的速度以及清晰且高级的指令,所以相比于计算机有很大的优势, 有一些Mod可以改变计算机的速度,比如TickrateChanger 会改变游戏刻速率。
第一节, 建造一台计算机的教程
介绍与条件
红石的逻辑紧密地反映了二进制逻辑,应为红石可以是激活或非激活的,可以被解释为0或1.在本教程中,我们将提到基础的二进制逻辑与众多简单的计算机科学术语。这里有一篇文章,很好地解释了二进制以及如何转化到二进制。请读Architecture of building the Computer section一章因为接下来我们对于计算机的设计是基于此的。
这一章会关注于知识的运用与红石的操作,以来创造一台简单的8位计算机, 并且会解释如何建造以及它是如何工作的。
所有的主题被分为了(理论)与(实践)两部分。理论部分会深入解释会发生什么,而实践部分会说明如何在minecraft中建造,它应该是什么样子,以及可能的存档。
The computer we will be building (MASIC Computer)
Step 1: Memory and Address Decoders (THEORY) (未完成)
Step 1: Memory and Address Decoders (PRACTICE)
Step 2: Building an Arithmetic Logic Unit (THEORY)
Step 2: Building an Arithmetic Logic Unit (PRACTICE) (未完成)
Step 3: Instruction set and machine architecture (THEORY)
Step 3: Instruction set and machine architecture (PRACTICE) (未完成)
在Minecraft中,为了让你的红石计算机最适合你手头的任务,需要有以下三个主要的设计目标。而有些得失需要进行考虑,比如当计算机的规模越大时,运行速度就会更慢,因为红石中继器的数量会随着距离的增加而增加。越多的内存,意味着速度就越慢,体积越大。
- 紧凑程度
这台计算机的规模有多小?在Minecraft中,设计一台生存模式的计算机很大可能会强调这一点。所需的重复次数将随着大小的增加而增加。
- 内存大小
它能容纳多少的内存?它可以计算多少数字和字节?这对于大规模的计算机来说是很重要的,如那些可以完成更复杂算法和更大规模指令集的计算机(例如说,计算平方根或是三角学)内存大小或者位体系结构越大,计算机越复杂。
- 速度/性能
它能以多快的速度执行操作呢?它是否达到了最大优化的程度以执行工作呢?使用定制设计构建一个计算机可以将更多的任务和分配给硬件,从而大大地提升计算机的性能。这在现实世界中的某些超级计算机中表现得很明显,这些超级计算机可以非常高效地进行一些操作。Minecraft中的红石计算机速度是非常慢的,一些模组,例如 TickrateChanger 可以更改Minecraft游戏客户端的游戏刻速度,以提高计算机速度。
The MASIC Computer
我们将在本教程中制作的计算机拥有8比特、16字节的内存。我们将要制作的输入输出系统是一个七段的数字显示器(以显示十六进制数字)和一个控制面板。
MASIC计算机旨在成为一种适合所有人的计算机,并且不专门从事一项任务,因此它可以通过读取其自己的内存进行完全编程(在第2节:指令集中进行了说明)。 简单的I / O非常适合多种用途,并且存储器大小足够。 它以相当快的速度运行(由于其体积小)。
第一步:内存及地址解码器(理论)
解码器将二进制的数字转换为小数。例如,看着8位解码器,00点亮代表0的第一个灯。01点亮代表1的第二个灯。10点亮第三个2的灯。11点亮最后一个3的灯。
步骤1:内存和地址解码器(实践)
====地址解码器====
0000 0000 (notice output 1 is lit)
0000 0001 (notice 2nd output is lit)
0000 0010
0000 0011
这是我们要构建的地址解码器的设计。
上面是一个简单的2位状态,因此它有两个通过中继器的输入(左和右)。 输出是红石线,在上面的红石线将在满足状态时关闭。状态是红石输入是否会关闭上面的红石线; 如果是,则状态为红石输入。 在上述情况下,必须将左侧的OFF(0)断开,将右侧的(blue)接通(1)才能在顶部的红石线上产生OFF。 因此,它期望状态为OFF ON(又称二进制01)。
它们的颜色为蓝色,应设为ON(1),以便停止为顶部的红石线供电。 一旦每一位停止为红石线供电,然后将其关闭。
这些基本上是一个或两个非门馈入或门,然后是非输出。
上面是一个8位状态,它期望8个输入的顺序完全是00001101。所以它期望的状态是00001101。所以红石火把为输入供电,所以我们看到顶部的红石线变为OFF(仅当精确地按照0000 1101的顺序放置三个红石火把时)。.
现在,如果将它们中的多个放在一起,我们就可以用蓝色位以二进制数进行计数,以获得8位的所有255个状态。 下面的一个是8位,并具有四个状态期望。 查看正确的图像以查看实际效果。 现在,每个绿色输出可以是一个存储单元,如果我们继续以二进制进行计数,它将达到255。
输入为0000 0011(有关输入,请参见红石火炬),蓝色位与当前状态匹配时,绿色输出为ON。
- 0000 0000-第一个信号输出(在右侧的图像上)
* 0000 0001-第二个信号输出 * 0000 0010-第三个信号输出 * 0000 0011-第四个信号输出
因此,现在我们继续以二进制数进行计数,直到0000 1111并停止在此为止。 现在我们应该有2 4 </ sup>(16)个状态期望值。 现在,我们完成了地址解码器。 由于指令集的局限性,我们不会继续计数到1111 1111,如第3节所述:
第2步:构建算术逻辑单元(THEORY)
称为ALU的算术逻辑单元将比较并执行带有二进制数的数学运算,并将结果与控制单元,计算机的中央组件(和中央处理单元)进行通信,但它将与计算机本身一样大 )。 许多教程都希望读者首先构建ALU,因此该主题在Internet上被广泛涵盖。
我们将要构建的ALU可以在两个输入上执行四个重要操作,并返回正确的输出。 A,B均为8位输入
* A + B(将A添加到B)
- A >>(右移位(与二进制除以2相同))
* << A(左移一位(与二进制乘以2相同)) *不是A(与A相反) 由于某些程序需要大量操作才能运行,因此计算机内部还可以有多个ALU,这些操作不依赖于先前的操作(因此可以进行线程化) 因此将它们委派给不同的ALU可以显着加快该程序的速度。
binary adder
两个数字相加
在一个加法单元中,每个位(对于我们的计算机,我们需要四个,因此需要4位),有一个完整的加法器。 完整的加法器将接收三个输入,每个输入可以是1或0。前两个将是用户的输入,第三个将是“进位”输入。 “进位”输入是先前完整加法器的输出,稍后将对此进行说明。 加法器将输出两个语句:首先是输出,然后是“进位”输出,该输出作为输入发送到下一个完整加法器中,即占位值。
例如,我希望将数字0101加到1011。第一个全加法器将把第一位的值1和1作为它们的两个输入(我们从右到左阅读)。 由于之前没有完整的加法器,因此没有“进位”输入。 完整的加法器将加1和1; 它是0,并携带1到下一个位置值。 下一个全加器将加0和1,进位输入将是1,这是前一个全加器指出的。 0和1的输出将为1,但进位输入为1,因此将0与1和1相加,即0,并在下一个位值上携带1。 复查二进制文件中的加法应该解决任何混淆。
full binary adder
为了执行加法运算,所有ALU都需要多个加法器。 每两位将送入一个加法器,与其他加法器连接时,将产生输出,该输出是两个字节加在一起的总和。 加法器具有一个输入,一个输出和两个进位输入/输出,就像执行9 + 1或01 + 01的加法操作一样。加法器由逻辑门构成,这可以通过二进制的命名法实现。 Tutorials/Arithmetic logic 给出了全加法器和半加法器的非常详细的介绍,目前,有一个构造方法的示意图。 它提供四个输入/输出,应与其他加法器连接以创建一个单元。 对于此示例,我们将在四位计算机中将四个加法器连接在一起,以便我们可以将所有四个位都取为输出。 第一个加法器将缺少输入进位,这是因为之前的位(第一位)没有任何进位。 输入进位将保持为零。 第四加法器还将缺少输出进位,并且由于我们只能支持四个位,因此将忽略该输出。 附加的第四个进位输出连接到溢出标志,表示无法完成该操作。 这称为二进制溢出。
因此,基本上,进入Minecraft并构建一个完整的二进制加法器(如图所示)并将其连接起来。 应该有八个输入和输出。 尝试将杠杆和红石灯分别放在两端以测试您的创作。 因此0010 + 0011应该产生0101(2 + 3 = 5,我们读的是右而不是左)。
分数数字
计算机通过浮点算术的形式处理小于1的数字,仅在较大位计算机(16-64位)和需要使用小于1的计算机中有用。 Floating-point arithmetic 或 arbitrary-precision arithmetic 有两种方法可以实现此目的。另一种更简单但效率较低的方法是为所有数字分配2的幂,以使它们被选定的2的幂“累加”。 玩家必须对每个数字都执行此操作,并假设该数字是您选择的两个数字的幂的一倍。例如5 = 101 2 </ sub>,因此5×{2 3 = 101000 2 </ sub>; 五被三撞了。 因此,现在,新系统中的值为1×{2 3 = 1000 2 </ sub>,这将为0.1、0.01或0.001留下空间; 0.01 * 2 3 = 10 2 </ sub>。 这将导致您的计算机设置更为复杂。
减去两个数字
An adder with all labeled parts.
数字减法非常简单。 ALU首先必须更改第二个数字(该值减去),然后将其从正数转换为负数。 二进制补码是当您反转二进制数(以便所有0均为1且1s均为0)并将其加1时。 示例:10减去9
| 1. 0000 1001 | (二进制为9,我们希望为-9,而不是9) |
| 2. 1111 0110 | (将9取反,以便所有0均为1,而1均为0) |
| 3. 1111 0111 | 加一(这是9的二的补数) |
| 4. | |
| 0000 1010 | (二进制10) |
| +1111 0111 | 加2的9的补数(aka -9) |
| ---- | |
| 0000 0001 | 结果(10 +(-9)= 1)(存在溢出,这仅意味着结果不是负数) |
这带来了带符号数字的复杂性。引用错误:没有找到与</ref>对应的<ref>标签计算机,但是通常情况下内存占8位或16位。每一位都是两种可能的状态中的一种:开或闭。而内存就是一系列的开和闭,用于完成特定的任务。
信号
现实世界计算机使用二进制,一系列的1和0。“1”表示“开”和“0”表示“关”。在"Minecraft,最好的体现是红石:有信号意味着“1”,没有信号表示“0”。然而,根据距离红石从内存存储,它是“0”可以是任何信号强度从0到14。你也可以设计,使“1”信号强度从1到15。
数
我们常规的十进制是一种以10为基数的数字系统。在电脑中使用的数制——二进制,则是以2为基数。为了比较两者,我们看一下两位数。在十进制中,左边的那一位是十位。在二进制中,则是“二位”。比如在十进制中,“10”表示“十”。而在二进制中,“10”表示“二”。有两种常用的十进制转二进制的方法:
最高位优先:这种方法需要一点直觉。我们以42为例。首先我们找(小于等于42的)最大的2的幂(“2的幂”就是如32 [2^5] 或65536 [2^16])。在这个例子中,是32。然后我们用例子中的数字来减它,42-32=10。那么最左边的一位就是“1”。随后我们继续找下一个2的幂,看它是否小于等于当前的数字。对于这个例子来说,下一个是16,16并不比10小,所以接下来这一位是“0”。一直找下去直到数字为0为止。无论二的幂是小于还是等于当前的数字,都要减掉它,并且记下一位为“1”。否则下一位就是“0”。就我们的例子来说接下来就是 8<10-->10-8=2-->"1" 4>2-->"0" 2=2-->2-2=0-->"1" 1>0-->"0" 因此最终42的二进制表示就是“101010”。不错。
最后是最低位:这个方法不需要记忆许多2的指数。相反,它重复将数字除以2,使用商作为下一个被除数,余数作为二进制位。 但请记住,此方法从右到左写入二进制数,而不是像前一种方法一样从左到右写入。 让我们重用我们的例子,42: 42/2=21 r 0 (最右边的数字是0) 21/2=10 r 1 (向左边一位的数是1) 10/2=5 r 0 (向左边一位的数是0) 5/2=2 r 1 (向左边一位的数是1) 2/2=1 r 0 (向左边一位的数是0) 1/2=0 r 1 (向左边一位的数是1)
商数为0,所以我们停止。 这给了我们二进制数“101010”。与之前的方法相同。
过渡
字
命令
功能本质上是由计算机命令构成的,命令的例子包括:
- 加、减、乘、除
- 从RAM/ROM/第三存储器的读/写
- 读取和写入数据到内存
- 分支的其他部分代码
- 比较寄存器
- 计算一个逻辑函数 (NAND,NOR,NOT etc.)
命令可以被编程到内存,从ROM加载或直接通过一个拉杆或按钮激活。每条命令都有它自己的特定的二进制串分配(比如0000=从寄存器加载数据,0001=A加B,等),并且可能需要其自己的二进制到十进制或二进制到BCD到十进制编码器和总线到ALU或寄存器。
归类
抽象
映射
符号
数字
符号可以用红石灯或者活塞的推拉方块产生凸凹起来显示:
注:如果用红石灯的话不要用黄色的方块做面板,不然不容易分辨。
功能
形式化
可计算性
变量
变量是数字、字符串、字符(套)或布尔值(真/假)存储在RAM中的空间。例如,布尔值可以用来保存信息如果程序已经达到某种状态。以下信息需要保存一个变量:名称,类型(数字、字符串或布尔),和变量值。变量,顾名思义,改变。命令操作可以改变变量。在运行程序时创建变量,一旦程序结束,变量值会被从内存中删除。当一个程序重启,变量会被重置。
层次结构
内存
内存是储存您的程序数据的地方。 它是可更改的 (但它在计算机关闭后将会被删除),它也用于储存您计算机的数据。例如说,在一个从1开始计算的程序中,1就被储存在了内存中,从内存中加载出来的1被添加上原来的1便得到了2。
执行
语义
数据
数据是计算机处理的信息,使用二进制表示。
控制单元(CU)
机器架构
数据通道
Processing
算术逻辑单元(简称ALU)
ALU是计算机最重要的组件之一,在现实生活和Minecraft中。首先,你必须选择你希望能够实现的功能。大多数时候,这些都是加法、减法和一组逻辑选项。
与,或,与非,或者你所喜欢的。你必须建立单位和所有你想要的逻辑门和数学函数和选择哪一个的输出显示。
(数据)总线
用总线允许您的计算机的组件相互通信。
一条总线可以通过使用创建红石布线连接你的计算机的运算器,随机储存器,只读储存器,中央处理器和寄存器在一起,这样他们就可以互相之间发送数据。通常是重要的计划,建立你的电脑的组件,否则你创建总线过长,或者更糟的是,没有空间来创建总线,在这种情况下,您可以删除的组件并重建一个适当的位置,或者使用像WorldEdit移动组件到其他地方。
存储
随机存取存储器
随机存取存储器又称RAM,是程序使用的一种存储器,具有易失性。易失性是指当电源断开时,它将丢失信息。大多数情况下,在Minecraft中内存数据不会失去,所以最简单的方法就是使用d-触发器来添加读写功能。
二级存储器
这相当于HDD和SSD。下面介绍一种非常紧凑的存储技术,要涉及到红石比较器,能够存储高达1KB的实际数据大小。
https://www.youtube.com/watch?v=1zE_XZLTDBw
三级存储器
第三,也是最后一点,是第三级内存,它需要大量的时间来读/写,牺牲速度但可以存储大量信息。在现实世界中,三级存储器使用的是一种老式的挂载内存的机制,而且现在也很少使用了。在Minecraft中,这种系统要用潜影盒来完成,潜影盒中的方块必须由排序系统进行排序,以表示某种形式的数据。由于这些工作需要大量的比较器和大量的时间,所以读/写速度相当慢。然而,利用某些mod可以加快游戏tick的速度并消除这个问题。这用于存储长期数据,这些数据需要在程序开始时加载。相当于一台真正的计算机的机械硬盘或固态硬盘。
机器状态
程序计数器
程序计数器用于告诉CPU应该运行哪行代码。在每个时钟周期,解码器将访问这个计数器来获取下一个要执行的命令。一些命令会比另一个访问不同的数据量,或任何数据,因此解码器将适量增加程序计数器的下一个命令。使用的计数器也跳转命令控制程序流。
控制路径
处理
控制单元
File:Redstone Computer Control Unit.PNG
总线
File:Redstone Computer Control Busing.PNG
硬盘
File:Redstone Computer Tertiary Memory.PNG
固体方块可以被红石中继器强冲能,强充能方块可以点亮周围的红石粉。透明方块却不可以被冲能,这就是一个简单的硬盘。
程序内存
File:Redstone Computer Program Memory.PNG
程序内存,最基本,ROM(只读存储器)。ROM是最常用的远程执行一系列任务(如一个程序,因此得名)。它可以用来在用户控件(如图片)或每一行之间的时钟和足够的延迟2不是在同一时间。最简单、最高效的设计之一是一个图中,这可能是也可能不是加上解码器。它可以很容易地扩大,这是另一个优势。
机器状态
File:Redstone Computer Machine State.PNG
程序计数器
时钟
File:Redstone Computer Clock.PNG
时钟同步组件或使用时间。(Minecraft)在大多数情况下,可以避免使用但有时它是计算机的功能所必需的。它基本上可以由红石火把链接成一条线/圈的非门(奇数建议或者你的输出必须“取反”),或者中继器,如上图所示。
提示
- 你也可以使用一些像是WorldEdit的模组
- 如果你在生存模式没有太多的红石中继器 你可以用两个红石火把代替
- 利用颜色进行分区(例如用蓝色羊毛建造RAM(随机存取存贮器),黄色羊毛建造ALU(算术逻辑部件运算器)等)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||







