T.TのHPIndex > プロロボ用バイナリコードのフォーマット&プロロボ内部言語の解析と中身について
プロロボ用バイナリコードのフォーマット

 CPRBの/bオプションで出力され、/tオプションで転送される「プロロボ用バイナリコード」ファイルのフォーマットについて記述します。
 このファイルはバイナリファイルではなく、テキストファイルです。メモ帳で開いて編集できます。 これは、開発や編集の利便性や、旧公式エディタではテキスト形式でバイナリコードが得られたことに由来します。 そのため、新公式エディタにある「機械語コード転送(*.bin)」には対応していません。

 以下の条件で記述されます。ファイル先頭の行を0行目とします。

 めんどくさいルールが多いですが、/bで出力したものを改変するのが早いと思います。命令については以下をご覧ください。

プロロボ内部言語の解析と中身について

 フローチャートがどのようなプロロボの内部言語になるかは旧エディタでは簡単に見ることができました。 ゆえに、解析も割りと容易でした。解析結果を持ってるのは僕ぐらいかと思うので、誰かのために書いておきます。

 プロロボ内部言語は機械語です。そのため、命令行ジャンプを基本にした命令の集まりです。1命令は4バイトです。 命令行は命令が記述された順です。0から始まります。 殆どの命令は2バイト目に次のジャンプ先の命令行を指定します。また1バイト目は命令種、3,4バイト目は命令ごとの引数です。
 開始命令は0命令行、すなわち、先頭に記述されます。終了命令は1命令行に記述されます。 これは1命令行にジャンプすればプログラムを終了できる利点があります。1命令行は 記述せず、"F0F0F0F0"にもできますが、メリットはないです。(公式エディタは無限ループの際にそうします。)

 以下が命令一覧です。

・開始命令
0xC10x000x020x02
 必ず0命令行においてください。この命令の後には2命令行が実行されます。

・終了命令
0xC20x000x010x01
 必ず1命令行においてください。終了時は忘れずにこの命令にジャンプするようにしてください。

・動作命令
 動作命令は、1バイト目に命令種、2バイト目に次の実行命令行、残りの2バイトで動作時間を指定します。
命令種の値は、動作内容、速度、方向を決定します。 低速の際の値に+0x20すると中速、さらに+0x20すると高速になります。基本的には方向は+0x01すると変わります。 下の表は全て低速の際の命令種の値です。
0x21前進低速
0x22後進低速
0x23右旋回低速
0x24左旋回低速
0x25右ツイスト低速
0x26左ツイスト低速
0x27停止低速
0x2B後右旋回低速
0x2C後左旋回低速
停止命令の速度は意味があるのかはよく分かりません。公式のエディタでも指定できますが...

・繰り返し開始命令
0xD1次実行命令行0x01繰り返し回数
 2バイト目に次に実行する命令行、4バイト目に繰り返し回数を0xFFまでの範囲で指定します。10回までしか使えません。

・繰り返し終了命令
0xD2次実行命令行0x010xF4
 繰り返し開始せずに繰り返し終了が読み込まれるとフリーズします。 2バイト目は繰り返しを抜けた後に実行される命令行です。

・センサ分岐命令
0x80+センサ番号0x00ON時実行命令行OFF時実行命令行
 センサ番号はPrbScriptや公式のエディタと同じです。使用するセンサの番号を0x80に足してください。 ONなら3バイト目の命令行にOFFなら4バイト目の命令行を実行します。SENSOR命令そっくりです。

 PrbScriptではプログラムは上から順に逐次実行されますが、この機械語の場合は、 次の命令行を指定して進みます。従って、命令行の順に処理されることはありません。 必ず次に実行される命令行を指定する必要があります。
 PrbScriptのラベル機能と逐次実行機能はこの機械語的な動きを解釈しやすいように カバーしたものです。







inserted by FC2 system