TIS-100 Guide

TIS-100 中文参考手册 for TIS-100

TIS-100 中文参考手册

Overview

未完全翻译加粗加下划线的文本 对应手册中被记号笔标记过的文本斜体文本 对应手册中的手写文本

封面

M–

We are all still in shock here from Uncle Randy’s
sudden passing. While we wait on word from the
examiner about the cause we are coping as best we
can I’ve been occupying myself sorting through his
things, especially his computers. Of course, I took one
look in the garage and it all looks like a bunch of junk to
me. I’ll send some pictures when I get a chance.

For now, this is the machine that was set up on his
workbench when he died. Maybe you’ll be able to figure
out what he was doing with it. He would’ve liked to
know someone was going to finish his work.

Love,
Aunt Doris.

概述

Tessellated Intelligence System 是一个大规模并行计算机体系结构,由非均匀的互联异构单元构成。Tessellated Intelligence System 适用于需要处理复杂数据流的应用,如自动金融贸易,大数据收集,以及用户行为分析。

注:本手册中的注释会像这样指明需要特别注意的情况以及对于特定主题有着更多信息的其他文档。

系统的体系结构和组成 (未翻译)

译者注:此章节不重要
Tessellated Intelligence System 由大量连接在本地基础上的独立单元组成。(Refer to the model-specific manual to find the precise node population counts present on a particular device.) Node types can be broadly classified as processing or storage, with several variants within each category.

Generally, nodes are connected to up to four neighbors via ports. Ports enable lightweight message-passing communication between nodes. Communication over ports is coordinated by allowing either node to issue a read or write to a port and blocking until the request is filled by the corresponding node.

单元类型 T20 – 保留

:此单元类型标识符限于 Tessellated Intelligence System 的特定模式,将不在本文档中描述。单元类型 T20 的资料仅分布在包含该单元的类型系统。根据法律要求,未经授权地要求复制描述这个单元的资料会报告给国家安全局。

单元类型 T21 – 基本执行单元

1. 体系结构 (未完全翻译)

The Basic Execution Node is responsible for coordinating the behavior of the Tessellated Intelligence System. Processing can occur within the Basic Execution Node, or can be delegated to specialized processing and storage nodes.

The Basic Execution Node executes a program specified in the Basic Execution Node Instruction Set. A Basic Execution Node program specifies computational and communication operations to perform. Operations are performed sequentially, beginning with the first instruction in the program. After executing the last instruction of the program, execution automatically continues to the first instruction. This behavior supports the common usage of Basic Execution Nodes, in which programs are written to operate in a continuous loop.

In addition to the communication ports common to all Tessellated Intelligence System nodes, the Basic Execution Node contains a number of registers that are used in the execution of its program. No additional memory is available on the Basic Execution Node; if additional storage is required, the node should coordinate with another Basic Execution Node or a storage node.

All registers store integer values between -999 and 999 (inclusive). The representation of register values is implementation-defined, and knowledge of the representation is not required to program the Basic Execution Node.

1-1. ACC

类型:内部
描述:ACC 是一个基本执行单元的首要的存储寄存器。ACC 用作内源或多条指令的目标操作数,包括算术和条件指令。【译者注:ACC 指 Accumulator(累加器)

1-2. BAK

类型:内部(不可寻址)
描述:BAK 是 ACC 值的临时存储单元。只能通过 SAV 和 SWP 指令控制它,而且不能被直接读写。

1-3. NIL

类型:内部(特殊)
描述:读入 NIL 即读入 0。写入 NIL 没有任何效果。NIL可以作为目标操作数,使得该指令只产生部分效果,结果会被抛弃。

1-4. LEFT, RIGHT, UP, DOWN

类型:端口
描述:4个寄存器 UP, DOWN, LEFT, RIGHT 分别对应于所有基本执行单元与相邻单元通信的4个端口【译者注:分别对应上、下、左、右】。在硬件方面,有些端口会与特定单元断开,这会永久阻碍读入或写出命令的执行。参看单元的接线图可以确定哪些端口可以使用。

1-5. ANY

类型:端口(伪端口)
描述:当 ANY 作为一条指令的来源时,指令会读入第一个能够读取的端口的数值。当 ANY 作为一条指令的目标时,这条指令输出的结果会传递给第一个从本单元通过任何端口读入数据的单元。【译者注:经本人实验,从 ANY 读入时,如果同时有多个端口输入,优先级是:左>右>上>下;向 ANY 输出时,如果同时有多个端口可以输出,优先级是上>左>右>下

1-6. LAST

类型:端口(伪端口)
描述:LAST 指最近用 ANY 伪端口读入或写出的端口。如若不然,它的效果和明确指定一个端口是相同的。在使用 ANY 伪端口成功读入或写出而使得 LAST 被确定之前,从 LAST 读入或向 LAST 写出的结果是实现定义的行为。使用 LAST 伪端口的样例代码请参考另外的文件 “Tessellated Intelligence System Best Practices – Pattems of Node Communication”。【译者注:这一块我也看不大懂。经本人实验,在使用 ANY 伪端口成功读入或写出而使得 LAST 被确定之后,LAST 表现正常,反之则 LAST 表示 0

2. 指令集

<SRC> 和 <DST> 指令参数【译者注:SRC 指 source(来源),DST 指 destination(目标)】可以指定一个端口或内部寄存器。使用任何端口的时候,在连接该端口的对应节点完成读写通信之前,指令会停在这里。另外,<SRC> 参数也可以是 -999 到 999 之间的字面值整数。
BAK 既不是 <SRC> 也不是 <DST>。BAK 的值只有通过特殊的指令 SAV 和 SWP 来访问。
<LABEL> 参数是任意的文本名称,用于在程序中标记跳跃的目标位置。

2-1. 注释

语法:#注释文本
描述:所有 # 以及之后的文本会被程序忽略。

:在两个注释符号(##)后面的文本会作为程序的标题,并且会显示在调试器上方便浏览程序。

2-2. 标号

语法:<LABEL>:
描述:标号用于确定跳跃指令的目标位置。当程序跳跃到该目标时,此标号后面的指令会接着执行。
样例:

LOOP: 本标签独占一行。 L: MOV 8, ACC 标签 L 和一条指令在同一行。

2-3. NOP

语法:NOP
等效指令:ADD NIL
描述:NOP 是一条伪指令,对于节点内部的状态和通信端口都无任何影响。NOP 会被程序自动替换为 ADD NIL。

2-4. MOV

语法:MOV <SRC>, <DST>
描述:读入 <SRC>,将结果写入 <DST>。【译者注:MOV 指 move(移动)
样例:

MOV 8, ACC 将字面值8写入 ACC。 MOV LEFT, RIGHT 从端口 LEFT 读入,写入 RIGHT。 MOV UP, NIL 从端口 UP 读入,抛弃该结果。

2-5. SWP

语法:SWP
描述:将 ACC 和 BAK 的值交换。【译者注:SWP 指 swap(交换)

2-6. SAV

语法:SAV
描述:将 ACC 的值写入 BAK。【译者注:SAV 指 save(保存)

2-7. ADD

语法:ADD <SRC>
描述:将 ACC 的值加上 <SRC> 的值,结果存入 ACC。
样例:

ADD 16 ACC 的值加上字面值 16。 ADD LEFT ACC 的值加上从 LEFT 端口读入的值。

2-8. SUB

语法:SUB <SRC>
描述:将 ACC 的值减去 <SRC> 的值,结果存入 ACC。【译者注:SUB 指 subtract(减)
样例:

SUB 16 ACC 的 值减去字面值 16。 SUB LEFT ACC 的值减去从 LEFT 端口读入的值。

2-9. NEG

语法:NEG
描述:ACC 的值取反。0 保持不变。【译者注:NEG 指 negative(取负数)

2-10. JMP

语法:JMP <LABEL>
描述:执行无条件转移。跳到标签 <LABEL> 后的语句接着执行。【译者注:JMP 指 jump(跳跃)

2-11. JEZ

语法:JEZ <LABEL>
描述:执行有条件转移。如果 ACC 的值是 0,跳到标签 <LABEL> 后的语句接着执行。【译者注:JEZ 指 jump equal zero(等于 0 就跳)

2-12. JNZ

语法:JNZ <LABEL>
描述:执行有条件转移。如果 ACC 的值不是 0,跳到标签 <LABEL> 后的语句接着执行。【译者注:JNZ 指 jump not zero(不是 0 就跳)

2-13. JGZ

语法:JGZ <LABEL>
描述:执行有条件转移。如果 ACC 的值是正数(大于 0 ),跳到标签 <LABEL> 后的语句接着执行。【译者注:JGZ 指 jump greater than zero(大于 0 就跳)

2-14. JLZ

语法:JLZ <LABEL>
描述:执行有条件转移。如果 ACC 的值是负数(小于 0 ),跳到标签 <LABEL> 后的语句接着执行。【译者注:JLZ 指 jump less than zero(小于 0 就跳)

2-15. JRO

语法:JRO <SRC>
描述:执行无条件转移。跳到由该行往后数第 <SRC> 行接着执行。【译者注:JRO 指 jump relative offset(跳到相关行)
样例:

JRO 0 重复执行本行语句,效果是程序停止 JRO -1 回到上一行执行 JR0 2 向后隔一行执行 JRO ACC 根据 ACC 的值跳转执行

3. 示例程序

下面的样例程序从 LEFT 端口读入一串数据,把每个数据翻倍并写入RIGHT端口。基本执行单元有自动循环功能,执行完最后一行指令会回到第一行继续执行。

MOV LEFT, ACC 从 LEFT 端口读入数据,保存在 ACC 寄存器 ADD ACC 把 ACC 的值加上它自己的值保存到 ACC ,也就是翻倍数据 MOV ACC, RIGHT 从 ACC 读出数据写入 RIGHT 端口

下面的样例程序从 UP 端口读入一串数据,把正数值写入 RIGHT 端口,负数值写入 LEFT 端口。数值 0 被抛弃。

START: MOV UP, ACC 从 UP 端口读入数据,保存在 ACC 寄存器 JGZ POSITIVE 如果 ACC 的值大于 0,跳到 “POSITIVE” JLZ NEGATIVE 如果 ACC 的值小于 0,跳到 “NEGATIVE” JMP START 该值既不大于 0 也不小于 0,跳到 “START” POSITIVE : MOV ACC, RIGHT 从 ACC 读出数据写入 RIGHT 端口 JMP START 跳到 “START” NEGATIVE : MOV ACC, LEFT 从 ACC 读出数据写入 LEFT 端口 JMP START 跳到 “START”

单元类型 T30 – 栈储存器单元

1. 体系结构 (未翻译)

The Stack Memory Node enables read/write access to a large number of values according to a simple stack-based communication protocol. (Refer to the model-specific manual to Frnd the capacity of the Stack Memory Nodes on a particular device.)

2. 通信协议 (未翻译)

Allinteraction with the Stack Memory Node is performed through ports. Writing to the Stack Memory Node adds the value to the top of the stack. If the stack is full, the write will block until space becomes available. Reading from the Stack Memory Node removes the top value from the stack and produces that value. If the stack is empty, the read will block until a value is available.

Stack Memory Nodes are typically connected to multiple other nodes, and can be used by any connected node. Simultaneous reads and writes to a Stack Memory Node resolve in an undefined order, but each individual communication .vU-l behave according to the described communication protocol. For more information on using storage nodes from multiple nodes effectively and predictably, refer to the separate document “Tessellated Intelligence System Best Practices , Patterns of Node Communication”.
译者注:自己试试就很清楚了,写入该单元的数据会从底至顶压入堆栈保存,从该单元读数据会获取最顶上的数据,可以保存大量数据(不超出最大堆栈深度,即该单元的高度),概括来说就是数据先进后出

单元类型 T31 – 随机存取存储器单元 (未翻译)

: The Random Access Memory Node is not yet available in standard Tessellated Intelligence System
devices. Emulators and prototype hardware are available to interested users. The speafication and behavior is
not yet finalized and therefore is omitted from this document.

TODO

  • Figure out who sold TIS-100 to swap meet dealer
  • Rebuild signal multiplier
  • Look for book of mico-optimisation tips
  • Renew license plate tabs

内置交互式调制器

1. 快捷键

交互式调试器含有以下快捷键:
Ctrl+Z: 撤销
Ctrl+Y: 重做
Ctrl+X: 剪切
Ctrl+C: 复制
Ctrl+V: 粘贴
Ctrl+Arrow: 定位到相邻执行单元
F1: View instruction set quick reference
F2: View anti-tamper certification status ??
F5: Begin running the current program
F6: Step or pause the current program

2. 断点 (未翻译)

To set a breakpoint, place an exclamation mark (!) at the beginning of a line. When a breakpoint is set, the program will be paused before that line is executed, allowing you to easily debug code that would be too tedious to step through one instruction at a time.

MOV LEFT, ACC !ADD ACC The program will be paused before this instruction is executed. MOV ACC, DOWN

可视化模块

1. 可视化模块用法 (未翻译)

The TIS-100 contains a Visualization module that allows programs to programmatically create and display images. The module contents can be modified by sending command sequences, which consist of the starting X coordinate, the starting Y coordinate, one or more color values, and a terminating negative value (often -I). The coordinate system starts at (o, 0), which is located in the topleft of the display area.

The visualization module supports the following colors:

0: Black
1: Dark grey
2: Bright grey
3: White
4: Red

2. 可视化模块分辨率 (未翻译)

The standard TIS-100 visualization module is 30 characters wide and 18 characters tall.

The “image console sandbox” contains a larger visualization module that is 36 characters wide and 22 characters tall.

3. 示例指令序列 (未翻译)

0,0,3,-1 Draw a single white pixel in the topleft corner of the module’s display 0,0,4,4,4,4,4,-1 Draw a horizontal red line in the topleft corner of the module’s display
SteamSolo.com