蔦箱(蔦箱)

SteamゲームTIS-100アセンブラの解説

上手く書けているか心配。



TIS-100Logo
SteamのアセンブラゲームTIS-100の軽い解説を書いてみました(ゲームだから攻略でしょうか)。
こんな記事を書いていると国家安全保障局に通報されるかもしれません・・(ゲーム内ネタ)。
このゲームは、解説書にもゲーム要素が多く含まれているので、
一度、元の解説書を読む事もおすすめします。

コミュニティでマニュアルを訳している方がいらっしゃいます(6/8に気づいた)
Japanese Reference Manual

記事中では↓の事をノードと呼びます。
TIS-100Node

TIS-100はノードをたくさん持ち、それらが相互に通信し合うことで大規模な機械になります。
TIS-100Node

目次
レジスタ
ポート
命令
ジャンプ系命令
ブレイクポイント
コメント
プログラムタイトル
ショートカットキー


-レジスタ-

 レジスタとは、情報を記憶できる部分の事です(小さいメモリみたいな感じ)。
書き込んだり、読み込んだりでき、特殊な機能を持つものもあります。

・ACC
 書き込みと、読み込みが出来るレジスタです。
多くの命令がACCの値を変更するので、重要なレジスタです(足し算の結果がACCに入る..など)。
SWP,SAV命令で後述するBAKレジスタと値を交換することが出来ます。
TIS-100ACC
ノードの右側に値が表示されます。

・BAK
SWP,SAV命令でACCレジスタと値を交換することが出来ます(ACC←→BAK)。
直接読み込む事が出来ない特徴があります。

使い道がわかりづらいレジスタですが、ノードに2種類の状況をもたせたりすることができます。

・NIL
常に、0が入っているレジスタです。書き込むことも出来ますが何も記憶しません。



-ポート-

TIS-100port
 複数ノードの間には矢印が存在します。矢印は値記憶することが出来ます。
矢印に値を書き込んだノードでは書き込んだ値を読み出す事は出来ないのですが、矢印の先のノードでは値を読み込む事が出来ます(読み込むと値は消えます)。
ポートを使用した際の特殊な動作として、読みこもうと思った方向の矢印に値がない場合と、書き込みを行おうとした方向が空きでない場合はプログラムがその場で待機を行うことです。
この特殊な動作はノード同士を同期させる際などに役立ちます。
TIS-100port
左から右に値を流そうとしているが、左に値がなく停止してしまった例。


・LEFT,RIGHT,UP,DOWN
TIS-100port
 ノードの上下左右の矢印どれかに値を書き込む事と、読み込む事が出来ます。

・ANY
 上下左右を一斉に読み込み一番早く来た値を読み込む事も出来ます。
書き込みの時は上下左右の矢印に値を書き込み、上下左右どれかのノードが値を読み込んだ場合他の矢印の値は消えます。
TIS-100port
値を受け取れるノードは一つだけ

・LAST
 ANYと関係がある命令です。読み込みに指定した場合、ANYで最後に読み込んだポートを読み込み。書き込みに指定した場合、最後に書き込んだポートに書き込みを行います。



-命令-

TIS-100order
 ノードの中に文字を書き込む事が出来ますが、その欄には命令を書き込みます。
命令には規則が存在します。
規則を表記する場合、<src>は読み込み、<dst>は書き込みを表し数値、レジスタ名、ポート名のどれかに置き換えて使用します。
(srcはソース、元 という意味の略で、dstはディスティネーション、目的地の略です)
例:
MOV <src>,<dst>
↓使用する時
MOV 15,ACC 
命令は一行に一つ書くことが出来ます。

・MOV <src>,<dst>
値を移すことの出来る命令です。
唯一他のノードに値を渡す事が可能な命令です。
例:
MOV 15,ACC #15をACCに書き込み

例:
MOV ACC,LEFT #ACC内の値を左のポートに書き込み


・NOP
 何もしない命令です。
タイミングをずらすことなどに使用できます。

・ADD <src>
 値を足す命令です。<src>に指定した値とACCレジスタの値を足しあわせてACCに書き込まれます。
(src + ACC = ACC)
TIS-100order
1+1するのにも2行必要です。

・SUB <src>
 値を引く命令です。<src>に指定した値でACCレジスタの値を引き、その値がACCに書き込まれます。
(ACC - src = ACC)

・NEG
 ACCの値の符号を逆にします

・SWP
 ACCレジスタとBAKレジスタの値を交換します。

・SAV
 ACCレジスタの値をBAKレジスタに書き込みます。



-ジャンプ系命令-

TIS-100port
 TIS-100では最後の行の命令を実行すると一番上の命令から実行し直しますが、ジャンプ系命令を使用することで好きな位置から実行を始められるようになります。
たとえば、状況に応じて判断を行ったり、繰り返し同じ命令を実行したり出来ます。

ラベル
 行に印を付ける機能で、ジャンプ系命令の移動先にすることが出来ます。

LABEL:
LABEL2:MOV 25,ACC

一行目にLABEL、二行目にはLABEL2という名前のラベルが付きました。
LABEL:だけの行は命令ではないので実行時は飛ばされます。

<LABEL>はラベル名名に置き換えて使用します

JMP <LABEL>
↓使用する時
LA:
JMP LA


・JMP <LABEL>
ラベル位置にジャンプする命令です。

・JEZ <LABEL>
 ACCレジスタの中身が0の場合だけ、ジャンプを行います。
プログラムに状況判断能力を付けることが出来ます。

・JNZ <LABEL>
 ACCレジスタの中身が0ではない場合だけ、ジャンプを行います。
プログラムに状況判断能力を付けることが出来ます。

・JGZ <LABEL>
 ACCレジスタの中身がプラス(1以上)である場合に、ラベルにジャンプを行います。
0は含まないので注意です。

・JLZ <LABEL>
 ACCレジスタの中身がマイナス(-1以下)である場合に、ラベルにジャンプを行います。
0は含まないので注意です。

・JRO <src>
の値に分だけ実行位置を進めたり、(マイナスの場合)後退させたり出来ます。
唯一ラベルではない場所に移動できる命令です。



-ブレイクポイント-

ブレイクポイントとは、プログラムを一時停止させるポイントのことです。おもにプログラムのエラー原因がわからない時に怪しい行に配置します(その他の調べる用途でも使用できます)。
!命令行

 !MOV 33,ACC

MOV 33,ACCを行おうとすると停止します。この後、一行ずつ実行して様子を見てみたりします(一行ずつ実行はSTEPボタンもしくはF6)



-コメント-

コメントとは、プログラム中に注釈を付ける機能です。特に実行には関わりませんが、わかりやすくなる事があります。

#MEIREI
MOV 33,ACC#MOV MEIREI




-プログラムタイトル-

作成したプログラムに名前を付けることが出来ます。名前は問題選択画面でセーブデータにかかれています。

##TITLE

TITLEという名前のプログラムになります。



-ショートカットキー-

・Ctrl+Z
 入力したテキストを一つ過去の状態に戻す。

・Ctrl+Y
 過去の状態に戻ったテキストを元に戻す(上のコマンドを使用した後使える)。

・Ctrl+C
 選択したテキストのコピー。
TIS-100order
選択されたテキスト。この状態でCtrl+Cを実行すると OV ACC がコピーされる。

・Ctrl+X
 選択したテキストの切り取り。

・Ctrl+V
 上記2つのコマンドで切り取り、またはコピーしたテキストを貼り付ける。

・SHIFT+矢印
 マウスを使わないでテキストを選択できる。
 古い機械いじってる雰囲気でてオススメです。

・Ctrl+矢印
 矢印の方向のノードに移動する。

F1
 簡易な命令説明書が出てきます(英語)。

F5
 プログラムの実行が行われる。

F6
 一行ずつプログラムを実行できる。

F2
 TIS-100のメモリーのチェックサムが書いてある。


記事内容におかしい点や何かがあったら まで。



-サイトのコンテンツ-


記事
記事とか書きます.
新記事
新しい記事.
蔦箱(ツタハコ)
トップページ
作成物
作成した物とか置きます.
その他
適当


連絡先: