PrbScript SDK Online Help
非公式プロロボプログラミングツール
T.TのHP > Index > プロロボ用バイナリコードのフォーマット&プロロボ内部言語の解析と中身について
プロロボ用バイナリコードのフォーマット
CPRBの/bオプションで出力され、/tオプションで転送される「プロロボ用バイナリコード」ファイルのフォーマットについて記述します。
このファイルはバイナリファイルではなく、テキストファイルです。メモ帳で開いて編集できます。
これは、開発や編集の利便性や、旧公式エディタではテキスト形式でバイナリコードが得られたことに由来します。
そのため、新公式エディタにある「機械語コード転送(*.bin)」には対応していません。
以下の条件で記述されます。ファイル先頭の行を0行目とします。
- 1行半角8文字で1命令記述します。
- 使用できる文字は0-9,A-Fの数字で、2文字で1バイト、1命令8バイトです。
命令は16進数で表記してください。"0A"のように
F以下の数値でも2文字で、0をつけて表記してください。
- 命令は110行まで記述できます。(0行目から数えます)
- 0行目は必ず開始命令を、1行目には終了命令を記述します。
- ファイルは513行まで記述されます。507行目までは命令を記述しない行は"F0F0F0F0"としてください。
それ以降は"00000000"と入れてください。
めんどくさいルールが多いですが、/bで出力したものを改変するのが早いと思います。命令については以下をご覧ください。
プロロボ内部言語の解析と中身について
フローチャートがどのようなプロロボの内部言語になるかは旧エディタでは簡単に見ることができました。
ゆえに、解析も割りと容易でした。解析結果を持ってるのは僕ぐらいかと思うので、誰かのために書いておきます。
プロロボ内部言語は機械語です。そのため、命令行ジャンプを基本にした命令の集まりです。1命令は4バイトです。
命令行は命令が記述された順です。0から始まります。
殆どの命令は2バイト目に次のジャンプ先の命令行を指定します。また1バイト目は命令種、3,4バイト目は命令ごとの引数です。
開始命令は0命令行、すなわち、先頭に記述されます。終了命令は1命令行に記述されます。
これは1命令行にジャンプすればプログラムを終了できる利点があります。1命令行は
記述せず、"F0F0F0F0"にもできますが、メリットはないです。(公式エディタは無限ループの際にそうします。)
以下が命令一覧です。
・開始命令
必ず0命令行においてください。この命令の後には2命令行が実行されます。
・終了命令
必ず1命令行においてください。終了時は忘れずにこの命令にジャンプするようにしてください。
・動作命令
動作命令は、1バイト目に命令種、2バイト目に次の実行命令行、残りの2バイトで動作時間を指定します。
命令種の値は、動作内容、速度、方向を決定します。
低速の際の値に+0x20すると中速、さらに+0x20すると高速になります。基本的には方向は+0x01すると変わります。
下の表は全て低速の際の命令種の値です。
0x21 | 前進低速 |
0x22 | 後進低速 |
0x23 | 右旋回低速 |
0x24 | 左旋回低速 |
0x25 | 右ツイスト低速 |
0x26 | 左ツイスト低速 |
0x27 | 停止低速 |
0x2B | 後右旋回低速 |
0x2C | 後左旋回低速 |
停止命令の速度は意味があるのかはよく分かりません。公式のエディタでも指定できますが...
・繰り返し開始命令
2バイト目に次に実行する命令行、4バイト目に繰り返し回数を0xFFまでの範囲で指定します。10回までしか使えません。
・繰り返し終了命令
繰り返し開始せずに繰り返し終了が読み込まれるとフリーズします。
2バイト目は繰り返しを抜けた後に実行される命令行です。
・センサ分岐命令
0x80+センサ番号 | 0x00 | ON時実行命令行 | OFF時実行命令行 |
センサ番号はPrbScriptや公式のエディタと同じです。使用するセンサの番号を0x80に足してください。
ONなら3バイト目の命令行にOFFなら4バイト目の命令行を実行します。SENSOR命令そっくりです。
PrbScriptではプログラムは上から順に逐次実行されますが、この機械語の場合は、
次の命令行を指定して進みます。従って、命令行の順に処理されることはありません。
必ず次に実行される命令行を指定する必要があります。
PrbScriptのラベル機能と逐次実行機能はこの機械語的な動きを解釈しやすいように
カバーしたものです。