TIS-100

TIS-100

TIS-100是一款開源編程遊戲,由Spacechem和Infinifactory的開發團隊Zachtronics製作,在這裡重寫崩潰的代碼片段,修復TIS-100並解鎖它的秘密。你從未想到過的彙編語言編程遊戲!

概述

Tessellated Intelligence System是一個大規模並行計算機體系結構,由非均勻的互聯的異質節點構成。Tessellated Intelligence System非常適合做需要處理複雜數據流的套用,如自動金融貿易,大量數據的收集,以及對百姓的行為分析。

註:本手冊中的注釋會像這樣指明需要特別注意的情況以及對於特定主題有著更多信息的其他文檔。

系統的體系結構和組織

Tessellated Intelligence System包含大量連線在本地基礎上的獨立節點。(參看model-specific手冊來了解特定設備上節點的精確數量。)節點類型可大致分類為處理型和存儲型,而各類別里又有不同變種。

一般來說,節點通過接口最多和四個鄰節點相連。節點之間可以通過接口進行輕量級訊息傳輸。傳輸是由兩個相鄰節點配合完成的:其中一個節點向接口發出讀取或寫入的信號後,此傳輸暫停,當另一個節點發出對應的應答信號時,該傳輸便完成了。

註:如果兩個節點在訊息傳輸時發出相同的指令(讀取或寫入),節點會陷入死鎖並產生硬體故障。參看獨立文檔"Tessellated Intelligence System Best Practices - Patterns of Node Communication"來了解如何有效且安全地使用接口。

註:如果一個節點發出的訊息傳輸指令一直得不到對應的節點回響,該節點會陷入死鎖並產生硬體故障。(特例請參看特定節點類型的檔案以了解更多細節)參看獨立文檔"Tessellated Intelligence System Best Practices - Patterns of Node Communication"來了解如何有效且安全地使用接口。

註:本文檔不包含針對數據傳輸時間或者吞吐量的操作或指令,這些參數因模型和硬體版本而不同。參看model-specific手冊來了解對特定設備特性的詳細描述。

節點類型T20–保留

註:此節點類型標識符限於Tessellated Intelligence System的特定模式,將不在本文檔中描述。節點類型T20的資料僅分布在包含該節點的類型系統。根據法律要求,未經授權地要求複製描述這個節點的資料會報告給國家安全局。 ???

節點類型T21–基本執行節點

1. 結構

基本執行節點負責協調Tessellated Intelligence System的行為。數據處理可以發生在基本執行節點中,或者可以委派給專門的處理和存儲節點。

基本執行節點執行程式,程式由基本執行節點指令集中的指令組成。基本執行節點的程式制定了計算和數據傳輸的操作。指令會依次被執行,第一條指令最先執行。當執行完程式中最後一條指令時,會自動回到第一條指令繼續執行。基本執行節點支持這種循環,即執行的時候會自動循環。

除了Tessellated Intelligence System里所有節點普遍都有的數據傳輸的接口之外,基本執行節點還包含幾個暫存器,他們在程式執行中可以被使用。基本執行節點本身沒有額外的記憶體,如果需要額外的存儲空間,這個節點就得和別的基本執行節點或者存儲節點進行協調。

所有的暫存器存儲從-999到999(含)的整數值。暫存器的值的表現形式是編譯器定義的,基本執行節點的編程並不需要考慮此內容。

1-1. ACC

類型:內部

描述:ACC是一個基本執行節點的首要的存儲暫存器。ACC用作內源或多條指令的目標運算元,包括算術和條件指令。

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偽接口的樣例代碼請參考另外的檔案"Tessellated Intelligence System Best Practices - Pattems of Node Communication"。【譯者註:實現定義行為或者叫執行期定義行為,是指在該系統標準裡面未明確定義其行為,在執行的時候由機器自行決定(臨時定義,即執行期定義)執行何種行為。經驗證,該系統會執行NIL操作,即將LAST替換為NIL,以防止系統崩潰。】

2. 指令集

<SRC>和<DST>指令參數【譯者註:SRC指source(來源),DST指destination(目標)】可以指定一個接口或內部暫存器。使用任何接口的時候,在連線該接口的對應節點完成讀寫通信之前,指令會停在這裡。另外,<SRC>參數也可以是-999到999之間的字面值整數。【譯者註:也就是說你可以在這裡直接輸入一個整數】

BAK既不是<SRC>也不是<DST>。BAK的值只有通過特殊的指令SAV和SWP來訪問。

<LABEL>參數是任意的文本名稱,用於在程式中標記跳躍的目標位置。

2-1. 注釋

句法:#注釋文本

描述:所有#和之後的文本會被程式忽略。

2-2. Labels(標籤)

句法:<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. 結構

堆疊存儲節點允許對大量數據的讀寫操作,依據簡單的基於堆疊的數據傳輸協定。(參看model-specific手冊來了解對戰存儲節點在特定設備上的容量。)

2. 數據傳輸協定

所有和堆疊存儲節點的互動都要通過接口。向堆疊存儲節點寫入會把數據添加到堆疊的頂部。如果堆疊滿了,寫入操作會被暫停,直到有空間可用。從堆疊存儲節點讀出會把棧頂的數據移除,並返回改該數據。如果棧空了,讀出操作會被暫停,直到有數據可用。

堆疊存儲節點通常連線到多個其他節點,即可以被連線著的節點使用。同時讀出和寫入堆疊存儲節點會以不確定的順序進行,不過每次獨立的數據傳輸都會依據數據傳輸協定執行。若想找到更多關於多個節點有效且明確地使用堆疊存儲節點的信息,參看分離的文檔"Tessellated Intelligence System Best Practices - Patterns of Node Communication"。

節點類型T31–隨機存取存儲節點

註:隨機存取存儲節點在標準的Tessellated Intelligence System設備中不可用。有興趣的用戶可以使用仿真程式和原型樣品。說明書和行為還沒有最終落實,因此在本文檔中略去了。

內嵌互動測試器

1. 鍵盤快捷鍵

互動式調試器包含下列鍵盤快捷鍵:

Control-Z: 撤銷上一步

Control-Y: 重做上一步

Control-X: 剪下選中的文本

Control-C: 複製選中的文本

Control-V: 貼上

Control- 箭頭: 切換到相鄰的執行節點

F1: 查看指令集快速參考

F2: 查看防篡改認證狀態 ??

F5: 開始運行當前程式

F6: 步進或暫停當前程式

2. 中斷點

在一行的最前面輸入一個感嘆號(!)即設定了一個中斷點。當中斷點設定之後,程式在執行本行之前會暫停,這樣方便你調試那種步進太繁瑣的代碼。

MOV LEFT, ACC

!ADD ACC 程式在執行本行之前會暫停。

MOV ACC, DOWN

可視化模組

1. 可視化模組的用法

TIS-100包含可視化模組,它允許通過程式創造並展示圖像。模組的內容可以通過傳送指令序列來定製,指令序列包含起始X坐標、起始Y坐標、一個或更多顏色數據和一個終止用的負數(通常是-1)。坐標體系以顯示區左上角的(0,0)建立。

可視化模組支持以下的顏色:

0:

1: 深灰

2: 淺灰

3:

4:

2. 可視化模組的解析度

標準TIS-100可視化模組的解析度為30單位寬,18單位高。

"image console sandbox"(圖像操控沙盒)包含可視化模組更大,有36單位寬,22單位高。

3. 範例指令序列

0,0,3,-1 在顯示區左上角一個像素畫個白點

0,0,4,4,4,4,4,-1 在顯示區左上角畫一條水平紅線


熱門詞條

聯絡我們