===========================================================================

        R-CODE for ERS-7

        Copyright (C) 2004 Sony Corporation
        All Rights Reserved.

===========================================================================

【 重要な注意 】
【 R-CODE 表記規則 】
【 機能別 R-CODE Command 一覧 】
【 辞書順 R-CODE Command 一覧 】

【 コマンドリファレンス 】

【 R-CODE Operator 早見表 】
【 R-CODE System 変数一覧 】
   [変数]
   [音声認識  ID 一覧]
   [AiboSound ID 一覧]
   [AiboTone  ID 一覧]

【 R-CODEの実行方法 】
【 Wireless LAN 通信 】
【 LED, MIDI 対応表 】

【 重要な注意 】
  耳プランジャーは長時間ＯＮ状態にすると耳の部品が破損します。 耳を長時間ＯＮに
  しないようしてください。

【 R-CODE 表記規則 】

  1) 文字コードは ASCII (Shift-JIS) です。
     改行コードは CR, LF, CR+LF, LF+CR のすべてを受け付けます。
     1行の長さ（コメントおよび改行文字等すべて含めて）は 127byte までです。

　2) 行の頭に付く Space または Tab 文字は無視されます。（ｲﾝﾃﾞﾝﾄ用）

  3) 行の１文字目が 英数字 か : (ｺﾛﾝ) でない行は、コメント行として無視されます。

  4) : (ｺﾛﾝ) で始まる行は、ラベル行と見なされます。

        :Label

　5) R-CODE コマンドは、単語(Word) を : (ｺﾛﾝ) で区切って並べた形をしています。

        Word1:Word2:Word3

  6) 単語(Word)に使用可能な文字は 英数字 および _ (ｱﾝﾀﾞｰｽｺｱ) のみです。
     その他の特殊記号は特別な意味を持ちますので注意してください。

  7) 行中に // が含まれている場合、それ以降の文字はコメントとして無視されます。

        Word1:Word2:Word3  // comment

  8) : (ｺﾛﾝ), Space, Tab, 改行文字 は区切文字として扱われますので、名前などに
     使用することは出来ません。
     書式文字列等でこれらを含めたい場合は、文字列全体を "" で囲んでください。

        PRINT:"x = %d":x

  9) １文字目が +-0123456789 である単語は、数値と見なされます。
     最初の２文字が 0x または 0X である場合は、16進数と見なされます。
     最初の２文字が 0o または 0O である場合は、８進数と見なされます。
     最初の２文字が 0b または 0B である場合は、２進数と見なされます。

        SET:x:0x03FC
        SET:y:0o0777
        SET:z:0b00001111

 10) すべて大文字の単語は、R-CODE システム用に予約されています。
     ユーザー変数名などに使用しないでください。

        ×  SET:USER1:0 （将来的に R-CODE システム予約単語と衝突する危険性有り）
        〇  SET:user1:0 （すべて小文字の変数名を推奨）
        △  SET:User1:0  (キャピタライズ名はシステム変数とダブらないように注意）




【 機能別 R-CODE Command 一覧 】

制御コマンド（ステートメントには含められないもの）

  EDIT          プログラムのロード
  END           プログラムのロードの終端
  RUN           実行開始
  !             ブレーク（強制停止）

制御

  INIT          初期化
  EXIT          実行終了
  HALT          シャットダウン

動作

  PLAY          動作再生
  STOP          停止
  QUIT          緊急停止
  WAIT          待ち
  SYNC          同期
  NONE          ﾉｰｵﾍﾟﾚｰｼｮﾝ

印刷

  PRINT         印刷

制御構造

  :             ラベル
  GO            ジャンプ
  IF            条件判断
  SWITCH        多分岐（コンテクスト値設定）
  CSET          多分岐（コンテクスト値設定）
  CASE          多分岐（条件付実行）
  FOR           FOR ループ
  NEXT          FOR ループ終端
  WHILE         WHILE ループ
  WEND          WHILE ループ終端
  REPEAT        REPEAT ループ
  UNTIL         REPEAT ループ終端
  DO            DO ループ
  LOOP          DO ループ終端
  BREAK         ループからの脱出
  CALL          サブルーチン呼び出し
  ARG           サブルーチン引数の取り出し
  RETURN        サブルーチンからの復帰
  RET           サブルーチンからの復帰（コンテクスト版）
  ONCALL        割り込みルーチンの登録
  RESUME        割り込みルーチンからの復帰

変数

  GLOBAL        大域変数宣言
  LOCAL         局所変数宣言
  LET           代入（単純代入）
  SET           代入（特殊機能付き）
  GET           参照（デバッグ用）
  CLR           センサー変数のクリアー

  VSAVE         変数値の保存
  VLOAD         変数値の読込
  VDUMP         変数値の表示

演算

  ADD           加算
  SUB           減算
  MUL           乗算
  DIV           除算
  MOD           剰余
  AND           論理積
  IOR           論理和
  XOR           排他的論理和
  NOT           否定
  LAND          論理積（ブール演算）
  LIOR          論理和（ブール演算）
  LNOT          否定　（ブール演算）
  EQ            等しい
  NE            等しくない
  LT            より小さい
  LE            より小さいか等しい
  GT            より大きい
  GE            より大きいか等しい
  RND           乱数

スタック操作

  PUSH          スタックへの積み込み
  POP           スタックからの取り出し
  DUP           スタックトップの複製
  JT            スタックトップが真ならジャンプ
  JF            スタックトップが偽ならジャンプ




【 辞書順 R-CODE Command 一覧 】

  !             ブレーク（強制停止）
  :             ラベル
  ADD           加算
  AND           論理積
  ARG           サブルーチン引数の取り出し
  BREAK         ループからの脱出
  CALL          サブルーチン呼び出し
  CASE          多分岐（条件付実行）
  CLR           センサー変数のクリアー
  CSET          多分岐（コンテクスト値設定）
  DIV           除算
  DO            DO ループ
  DUP           スタックトップの複製
  EDIT          プログラムのロード
  END           プログラムのロードの終端
  EQ            等しい
  EXIT          実行終了
  FOR           FOR ループ
  GE            より大きいか等しい
  GET           参照（デバッグ用）
  GLOBAL        大域変数宣言
  GO            ジャンプ
  GT            より大きい
  HALT          シャットダウン
  IF            条件判断
  INIT          初期化
  IOR           論理和
  JF            スタックトップが偽ならジャンプ
  JT            スタックトップが真ならジャンプ
  LAND          論理積（ブール演算）
  LE            より小さいか等しい
  LET           代入（単純代入）
  LIOR          論理和（ブール演算）
  LNOT          否定　（ブール演算）
  LOCAL         局所変数宣言
  LOOP          DO ループ終端
  LT            より小さい
  MOD           剰余
  MUL           乗算
  NE            等しくない
  NEXT          FOR ループ終端
  NONE          ﾉｰｵﾍﾟﾚｰｼｮﾝ
  NOT           否定
  ONCALL        割り込みルーチンの登録
  PLAY          動作再生
  POP           スタックからの取り出し
  PRINT         印刷
  PUSH          スタックへの積み込み
  QUIT          緊急停止
  REPEAT        REPEAT ループ
  RESUME        割り込みルーチンからの復帰
  RET           サブルーチンからの復帰（コンテクスト版）
  RETURN        サブルーチンからの復帰
  RND           乱数
  RUN           実行開始
  SET           代入（特殊機能付き）
  STOP          停止
  SUB           減算
  SWITCH        多分岐（コンテクスト値設定）
  SYNC          同期
  UNTIL         REPEAT ループ終端
  VDUMP         変数値の表示
  VLOAD         変数値の読込
  VSAVE         変数値の保存
  WAIT          待ち
  WEND          WHILE ループ終端
  WHILE         WHILE ループ
  XOR           排他的論理和


---------------------------------------------------------------------------

名称
        EDIT - プログラムのロード（ PC→AIBO のプログラム転送 ）

形式
        EDIT
        〜 program 〜
        END

引数
        無し

解説
        EDIT から END までの R-CODE プログラムをメモリーに記憶します。
        それまでにメモリーに入っていたプログラムはすべて消去されます。

例
        EDIT
        FOR:i:1:10
          PLAY:ACTION:xxx
          WAIT
        NEXT
        EXIT
        END

---------------------------------------------------------------------------

名称
        END - プログラムのロードの終端

形式
        EDIT
        〜 program 〜
        END

引数
        無し

解説
        EDIT の説明を参照

例
        EDIT
        FOR:i:1:10
          PLAY:ACTION:xxx
          WAIT
        NEXT
        EXIT
        END

---------------------------------------------------------------------------

名称
        RUN - プログラムの実行

形式
        RUN

引数
        無し

解説
        メモリーに入っているプログラムの実行を開始します。

例
        RUN

---------------------------------------------------------------------------

名称
        EXIT - プログラムの終了

形式
        EXIT

引数
        無し

解説
        実行中のプログラムを停止します。

例
        EDIT
        FOR:i:1:10
          PLAY:ACTION:xxx
          WAIT
        NEXT
        EXIT
        END

---------------------------------------------------------------------------

名称
        HALT - プログラムの終了 ／ AIBO のシャットダウン

形式
        HALT

引数
        無し

解説
        実行中のプログラムを停止し、AIBO を Shutdown します。
        Shutdown には数秒の時間が掛かります。

例
        EDIT
        FOR:i:1:10
          PLAY:ACTION:xxx
          WAIT
        NEXT
        HALT
        END

---------------------------------------------------------------------------

名称
        INIT - R-CODE の初期化

形式
        INIT:<init_level>

引数
        <init_level>        解説を参照

解説
        INIT:0  R-CODE全体を初期化します。
                起動時に自動的に実行されます。
                ユーザーが使用しないで下さい。

        INIT:1  デバッグモード。
                ユーザーが使用しないで下さい。

        INIT:2  辞書／変数テープルを起動直後の状態に戻します。

        INIT:3  WirelessLAN 接続時の初期化。
                WirelessLAN 接続された時に自動的に実行されます。
                第２引数に機体ID (AiboId) を指定できます。
                ユーザーが使用しないで下さい。

        INIT:4  WirelessLAN Disconnect 通知

        INIT:9  Shutdown & Reboot

例
        INIT
        INIT:2

---------------------------------------------------------------------------

名称
        ! - ブレーク（強制停止）

形式
        !        緊急停止を行い、プログラム実行停止
        !!       通常停止を行い、プログラム実行停止
        !!!      緊急停止を行い、プログラム実行停止、環境初期化

引数
        無し

解説
        実行中のプログラムを強制停止します。
        AMS 等の PC アプリケーションからのコントロール用です。

例
        !

---------------------------------------------------------------------------

名称
        PLAY - 動作再生

形式
        一般形

        PLAY:ACTION:<action>[:<arg1>:<arg2>:<arg3>]

        PLAY:MWCID:<mwcid>[:<arg1>:<arg2>:<arg3>]


引数

        <action>        Action名

        <arg1〜3>       オプション引数（Actionにより異なる）
                        定数値または変数名を指定できます。

        <mwcid>         MWCommandID

解説
        <action> で指定された動作を再生します。
        <action> に指定できるAction名は ACTION.AMS に定義されたものです。

        <mwcid> で指定された MWCommand を実行させます。
        <mwcid> が既知であれば、MWCommand を実行できます。

        動作の再生を行うために、現在の姿勢が、その動作の開始姿勢であるか
        どうかまず調べられます。
        開始姿勢ではない場合、自動的に開始姿勢までの姿勢遷移が行われます。
        <action> が再生されるのは開始姿勢になってからです。

        引数のパターン
        <水平角>:<距離>   // WALK、KICK、TOUCHなど
        <水平角>          // TURNなど
        <水平角>:<垂直角> // MOVE_HEADなど
        <TARGET>          // SEARCHなど

        角度の単位は [°] です。
        距離の単位は [mm] です。

        <TARGET> に指定できるのは、現在 PINK_BALL だけです。

例
        PLAY:ACTION:STAND

---------------------------------------------------------------------------

名称
        STOP - 通常停止

形式
        STOP

引数
        無し

解説
        動作を通常停止します。
        待ち行列（キュー）に溜まっている動作は全て破棄されます。
        現在、動作を再生中の場合は、その動作が完了してから停止します。

例
        STOP

---------------------------------------------------------------------------

名称
        QUIT - 緊急停止

形式
        QUIT

引数
        無し

解説
        動作を緊急停止します。
        待ち行列（キュー）に溜まっている動作は全て破棄されます。
        現在、再生中の動作も、直ちに停止されます。

        ※ QUIT した場合、姿勢は不定状態にリセットされます。

例
        QUIT

---------------------------------------------------------------------------

名称
        WAIT - 動作の完了待ち（同期）

形式
        WAIT            直前に実行した動作の完了を待つ

        WAIT:<ms>       指定時間待つ
                        <ms>には定数値または変数名を使用できます
                        但し <ms>=0 の場合には WAIT と同義になります
                        また負の値を指定した時の動作は不定です

引数
        <ms>            ミリ秒  [1〜30000]   注：分解能は 32[ms]


解説
        直前の動作が完了するまで待機します。
        プログラムの実行は一時停止されます。

        何も待つものが無い状態で WAIT を実行しても無効です。

        <ms> を指定した場合は、指定した時間だけ処理を一時停止します。

例
        WAIT
        WAIT:1000

---------------------------------------------------------------------------

名称
        SYNC - 外部との同期

形式
        SYNC

引数
        無し

解説
        プログラム中で SYNC を実行すると、入力待ちで一時停止します。
        コマンド文字列 "SYNC" を送信することにより、処理を再開します。

例
        SYNC

---------------------------------------------------------------------------

名称
        NONE - ﾉｰｵﾍﾟﾚｰｼｮﾝ

形式
        NONE

引数
        無し

解説
        何もしない命令です。

例
        NONE

---------------------------------------------------------------------------

名称
        PRINT - 印刷（オンラインデバッグ用）

形式
        PRINT:<format>[:<var1>:<var2>:<var3>:<var4>:<var5>]

引数
        <format>        フォーマット文字列

                        %d 10進表示
                        %x 16進表示

        <var1>〜<var5>  変数名

解説
        Ｃ言語の printf() に類似した方法でメッセージを表示します。

        <format> に Space や Tab が含まれる場合には、<format> 全体を
        二重引用符 "" で囲ってください。

例
        PRINT:"x=%d y=%d":x:y

---------------------------------------------------------------------------

名称
        :<labe> - ラベル

形式
        :<label>

引数
        <label>          任意の文字列

解説
        GO や IF の飛び先に使用するラベルを定義します。
        CALL で呼び出されるサブルーチンの名前にも使用します。

        ラベルは単独では存在できません。ラベルは次の行に付きます。
        ラベルの通用範囲はプログラム全体（グローバル）です。

例
        GO:Skip
        PRINT:"Never reach this line."
        :Skip
        PRINT:"Skipped!"

---------------------------------------------------------------------------

名称
        GO - ジャンプ

形式
        GO:<label>

引数
        <label>          飛び先ラベル

解説
        <label> の付いている行にジャンプします。

        サブルーチンまたはスコープをまたがっての GO は禁止されています。
        もし行った場合は、スタックが破壊されプログラムは暴走します。
        ループ構造からの脱出に GO を使うことは問題ありません。

        可能な限り GO の使用は控えてください。

例
        GO:Skip
        PRINT:"Never reach this line."
        :Skip
        PRINT:"Skipped!"

---------------------------------------------------------------------------

名称
        IF - 条件判断

形式
        形式１
        IF:<v1>:<op>:<v2>:THEN
        〜 THEN Block 〜
        ELSE
        〜 ELSE Block 〜
        ENDIF

        形式２
        IF:<v1>:<op>:<v2>:CALL:<label>[:<argc>]

        形式３
        IF:<v1>:<op>:<v2>:BREAK

        形式４
        IF:<v1>:<op>:<v2>:<then>[:<else>]


引数
        <v1>             被演算項１
        <op>             比較演算子
        <v2>             被演算項２


        比較演算子一覧

            =            等しい
            ==           等しい
            <>           等しくない
            !=           等しくない
            <            より小さい
            <=           より小さいか等しい
            >            より大きい
            >=           より大きいか等しい
            &            ビット毎の論理積
            |            ビット毎の論理和
            ^            ビット毎の排他的論理和
            &&           論理積（演算項は Bool 値として扱われる： 0 ならば偽／ 0 以外なら真 ）
            ||           論理和（演算項は Bool 値として扱われる： 0 ならば偽／ 0 以外なら真 ）


        <label>          サブルーチンのラベル
        <argc>           サブルーチン引数の数

        <then>           条件成立時の飛び先ラベル
        <else>           条件非成立時の飛び先ラベル

解説
        <v1> <op> <v2> で構成される条件式を評価し、その結果に
        応じて処理を行います。

        形式１の場合：
        条件式が真の場合は THEN Block を実行します。
        条件式が偽の場合は ELSE Block を実行します。
        ELSE 〜 ELSE Block 〜 は省略可能です。
        必ず ENDIF で終端してください。

        形式２の場合：
        条件式が真の場合に、関数 <label> を CALL します。
        <label> 以降の引数に関しては CALL の説明を参照してください。

        形式３の場合：
        条件式が真の場合に BREAK を実行します。
        ループからの脱出に用います。
        詳しくは BREAK の説明を参照してください。

        形式４の場合：
        条件式が真の場合は <then> ラベルに GO します。
        条件式が偽の場合は <else> ラベルに GO します。
        GO の 注意 を参照してください。
        可能な限り、この形式の使用は避けてください。

        形式５の場合：
        条件式が真の場合は THEN Block を実行します。
        条件式が偽の場合は ELSEIF の条件式を評価 します。
        必ず ENDIF で終端してください。

例
        IF:x:=:0:THEN
          PRINT:"x is 0"
        ELSE
          PRINT:"x is not 0"
        ENDIF

---------------------------------------------------------------------------

名称
        SWITCH - 多分岐（コンテクスト値の設定）

形式
        SWITCH:<v>

引数
        <v>            変数名もしくは定数

解説
        <v> の値をコンテクスト値として設定します。

        CASE との組み合わせにより、多分岐を実現します。

例
        SWITCH:x
        CASE:1:PRINT:"x = 1"
        CASE:2:PRINT:"x = 2"
        CASE:2:PRINT:"(two)"
        CASE:3:PRINT:"x = 3"
        CASE:ELSE:PRINT:"x is not 1"
        CASE:ELSE:PRINT:"x is not 2"
        CASE:ELSE:PRINT:"x is not 3"

---------------------------------------------------------------------------

名称
        CSET - 多分岐（コンテクスト値の設定）

形式
        CSET:<v1>:<op>:<v2>:<v3>

引数
        <v1>           被演算項１
        <op>           比較演算子
        <v2>           被演算項２

        <v3>           変数名もしくは定数

解説
        <v1> <op> <v2> で構成される条件式を評価し、その結果が真ならば
        <v3> の値をコンテクスト値として設定します。

        CSET は「縦積み命令」です。
        CSET が連続して現れた場合、真になった CSET 以降の CSET は無視
        されます。

        CASE との組み合わせにより、多分岐を実現します。

例
        CSET:x:<:10:1
        CSET:x:<:20:2
        CSET:x:<:30:3
        CSET:x:<:40:4
        CSET:x:<:50:5
        CASE:1:PRINT:"x < 10"
        CASE:2:PRINT:"x < 20"
        CASE:3:PRINT:"x < 30"
        CASE:4:PRINT:"x < 40"
        CASE:5:PRINT:"x < 50"

---------------------------------------------------------------------------

名称
        CASE - 多分岐（条件付実行）

形式
        CASE:<const>:<command>

        CASE:ELSE:<command>

引数
        <const>          コンテクスト値（定数でなくてなならない）

        <command>        任意の R-CODE コマンド（但し CASE は除く）

解説
        コンテクスト値が <const> と等しければ <command> を実行します。

        連続した CASE の最後部には CASE:ELSE も指定できます。
        どの CASE の <const> にも等しくなかった場合に ELSE の <command>
        が実行されます。

例
        SWITCH:x
        CASE:1:PRINT:"x = 1"
        CASE:2:PRINT:"x = 2"
        CASE:2:PRINT:"(two)"
        CASE:3:PRINT:"x = 3"
        CASE:ELSE:PRINT:"x is not 1"
        CASE:ELSE:PRINT:"x is not 2"
        CASE:ELSE:PRINT:"x is not 3"

---------------------------------------------------------------------------

名称
        FOR〜NEXT - ループ構造

形式
        FOR:<var>:<from>:<to>[:<step>]
        〜 commands 〜
        NEXT

引数
        <var>             ループ変数
        <from>            開始値
        <to>              終了値
        <step>            増分値

解説
        変数 <var> の値を <from> から <to> まで <step> ずつ増加させながら
        NEXT までの文 〜commands〜 を繰り返し実行します。

例
        FOR:i:1:10
          PRINT:"i=%d":i
        NEXT

        FOR:i:10:1:-1
          PRINT:"i=%d":i
        NEXT

---------------------------------------------------------------------------

名称
        WHILE〜WEND - ループ構造

形式
        WHILE:<v1>:<op>:<v2>
        〜 commands 〜
        WEND

引数
        <v1>                被演算項１
        <op>                比較演算子
        <v2>                被演算項２

解説
        <v1> <op> <v2> で構成される条件式を評価しその結果が真である間、
        WEND までの文 〜commands〜 を繰り返し実行します。

例
        SET:i:0
        WHILE:i:<:10
          PRINT:"i=%d":i
        WEND

---------------------------------------------------------------------------

名称
        REPEAT〜UNTIL - ループ構造

形式
        REPEAT
        〜 commands 〜
        UNTIL:<v1>:<op>:<v2>

引数
        <v1>                被演算項１
        <op>                比較演算子
        <v2>                被演算項２

解説
        UNTIL までの文 〜commands〜 を、<v1> <op> <v2> で構成される
        条件式が真になるまで繰り返し実行します。

        〜 commands〜 は必ず１回は実行されます。

例
        SET:i:0
        REPEAT
          PRINT:"i=%d":i
        UNTIL:i:>=:10

---------------------------------------------------------------------------

名称
        DO〜LOOP - ループ構造

形式
        DO[:WHILE|UNTIL:<v1>:<op>:<v2>]
        〜 commands 〜
        LOOP[:WHILE|UNTIL:<v1>:<op>:<v2>]

引数
        <v1>                被演算項１
        <op>                比較演算子
        <v2>                被演算項２

解説
        DO〜LOOP 間の文 〜 commands 〜 を繰り返し実行します。

        DO および LOOP には条件式を指定可能で、どちらかの条件を満たした時に
        ループを抜けます。

        WHILE を指定した場合は条件式が真の間ループし続けます。
        UNTIL を指定した場合は条件式が真になった時にループを抜けます。

        DO にも LOOP にも条件式を指定しなかった場合には無限ループに
        なります。

例

---------------------------------------------------------------------------

名称
        BREAK - ループ構造からの脱出
形式
        BREAK[:<break_level>]

引数
        <break_level>   脱出したいループ構造のネスト数を指定します。
                        定数値である必要があります。
                        変数は指定できません。
                        指定の無い場合は 1 です。

解説
        現在実行中のループ構造から脱出します。
        すべてのループ構造で共通に使えます。

例
        FOR:i:1:100
          IF:i:>:10:BREAK
          PRINT:"i=%d":i
        NEXT

---------------------------------------------------------------------------

名称
        CALL - サブルーチンの呼び出し

形式
        CALL:<label>[:<argc>]

引数
        <label>            呼び出すサブルーチンのラベル
        <argc>             事前に PUSH した引数の個数

解説
        <label> のサブルーチンをコールします。
        事前に PUSH 命令で任意個の引数をスタックに積み、渡すことが可能です。
        <argc> にはスタックに積んだ引数の個数を指定します。

        サブルーチンを呼び出した場合、それまでのコンテクスト値はスタックに
        退避され、RETURNで呼び出し元に戻った時に回復されます。

例
        CALL:sub1

        PUSH:10     // 引数1
        PUSH:200    // 引数2
        PUSH:3000   // 引数3
        CALL:sub2:3

---------------------------------------------------------------------------

名称
        ARG - サブルーチン引数の取り出し

形式
        ARG:<var>

引数
        <var>                変数名

解説
        サブルーチン引数の値を変数 <var> に取り出します。
        PUSH で積まれた引数と同数のものを ARG で受け取る必要があります。
        受け取りの順番は、PUSH で積まれた順番 FirstIn-FirstOut です。
        通常のスタックのように FirstIn-LastOut ではないので注意してください。

例
        呼び出し元:
        PUSH:10
        PUSH:200
        PUSH:3000
        CALL:sub
        …

        サブルーチン：
        :sub
        ARG:arg1    // arg1 ← 10
        ARG:arg2    // arg2 ← 200
        ARG:arg3    // arg3 ← 3000
        …          // arg1〜3 は LOCAL 変数として用意されます。
                    // 別途 LOCAL 宣言する必要は有りません。

---------------------------------------------------------------------------

名称
        RETURN - サブルーチンからの復帰

形式
        RETURN[:<return_value>]

引数
        <return_value>        戻り値

解説
        サブルーチンからの復帰を行います。
        戻り値 <return_value> を指定することが可能です。
        戻り値は呼び出し元で POP を使って受け取ります。

例
        呼び出し元:
        CALL:sub
        POP:rc     // 変数 rc に戻り値 (123) を受け取る
        …         // 戻り値を返すサブルーチンを呼び出した場合は必ず必要

        サブルーチン側：
        :sub
        …
        RETURN:123

---------------------------------------------------------------------------

名称
        RET - サブルーチンからの復帰（コンテクスト値切替版）

形式
        RET:<context>

引数
        <context>        コンテスクト値

解説
        サブルーチンからの復帰を行います。
        復帰後、コンテクスト値が <context> に設定されます。
        <context> の値が 0 の時は、呼び出し時のコンテクスト値が回復されます。

例
        呼び出し元:
        CALL:sub
        CASE:1:PRINT:"case 1..."
        CASE:2:PRINT:"case 2..."
        CASE:3:PRINT:"case 3..."
        …

        サブルーチン：
        :sub
        …
        RET:1
        …
        RET:2
        …
        RET:3

---------------------------------------------------------------------------

名称
        ONCALL - 割り込み処理ルーチンの登録／抹消

形式
        ONCALL:<v1>:<op>:<v2>:<label>[:<resume_type>:<resume_label>]

        ONCALL:<-n>

引数
        <v1>                被演算項１
        <op>                比較演算子
        <v2>                被演算項２

        <label>             割り込み処理ルーチンのラベル

        <resume_type>       復帰形式
        <resume_label>      復帰後のジャンプ先ラベル

        <-n>                登録削除する割り込みルーチンの数

解説
        <v1> <op> <v2> で構成される条件が成立した時に割り込みルーチン
        <label> を CALL するように登録します。
        条件の指定方法は IF と同等です。

        割り込みルーチンからの復帰は以下のように行われます。
        <resume_type>
          0  割り込みが発生した文に復帰する
          1  割り込みが発生した文に復帰した後、<resume_label> に GO する。
          2  ONCALL文の位置に復帰する
          3  ONCALL文の位置に復帰した後、<resume_label> に GO する。
          4  プログラムの先頭に復帰する（すべてのスタックはクリアーされる）
          5  プログラムの先頭に復帰した後、<resume_label> に GO する。

        上記 2〜5 の場合、対応する ONCALL 以降の ONCALL 登録は抹消されます。
        但し 3,5 の場合には、復帰位置と同レベルの ONCALL 登録は保存されます。

        条件の判定はステートメント（R-CODE の１行）の実行毎に行われます。

        多重割り込みは禁止されています。(無視されます)

        ONCALL はサブルーチンのネストの影響を受けます。
        あるサブルーチン内で登録された ONCALL は、そのサブルーチンを
        抜けると無効になります。


        <-n> を指定した場合、直前に登録した n 個の ONCALL を抹消します。
        <-n> は負の数でなくてはいけません。

例
        ONCALL:RFLeg_ON:=:1:9000

---------------------------------------------------------------------------

名称
        RESUME - 割り込みルーチンからの復帰

形式
        RESUME

引数
        無し

解説
        割り込みルーチンからの復帰を行います。
        CALL に対する RETURN に相当します。
        割り込みルーチンからの復帰に RETURN を用いてはいけません。
        復帰位置は対応する ONCALL の <resume_type> に依存します。

例
        RESUME

---------------------------------------------------------------------------

名称
        GLOBAL - 大域変数宣言

形式
        GLOBAL:<var>[:<init_value>]

引数
        <var>               変数名
        <init_value>        初期値

解説
        大域変数 <var> を用意します。
        <init_value> を指定した場合は、その値に初期設定されます。

        GLOBAL にも LOCAL にも宣言されていない変数名を使用をした場合は
        R-CODE によってその名前の大域変数が自動的に用意されます。

例
        GLOBAL:x:0

---------------------------------------------------------------------------

名称
        LOCAL - 局所変数宣言

形式
        LOCAL:<var>[:<init_value>]

引数
        <var>               変数名
        <init_value>        初期値

解説
        局所変数 <var> を用意します。
        <init_value> を指定した場合は、その値に初期設定されます。

        局所変数はスタック上に用意されます。
        サブルーチンやスコープを抜けた場合、その領域は開放されます。

例
        LOCAL:y:0

---------------------------------------------------------------------------

名称
        LET - 変数への値の代入
形式
        LET:<var>:<value>

引数
        <var>                変数名
        <value>              値（変数名もしくは定数）

解説
        変数への値の代入を行います。
        SET のような特殊機能は働きません。

例
        LET:x:1

---------------------------------------------------------------------------

名称
        SET - 変数への値の設定

形式
        SET:<var>:<value>

引数
        <var>                変数名
        <value>              値（変数名もしくは定数）

解説
        変数への値の設定を行います。
        変数によっては以下の特殊機能が働きます。

        Power           電源の On/Off を制御します。
                        ※※ 2001/03/09 ※※※
                        挟み込み検出で脱力状態にある時に SET:Power:1 すると
                        ゲインが戻ってしまいます。
                        安全性確保のため、変数 Power による電源 On/Off は
                        機能しなくなりました。
                        変数そのものは残っていますので、プログラムの変更は
                        必要有りません。

        Head_ON        これらの値はセンサーによって一度セットされると自動で 0 に戻らないので
        Head_LONG      SET を使って 0 に戻す必要があります。
        BackF_ON        
        BackM_ON        
        BackR_ON        
        BackFR_LONG     
        BackF_Jaw_LONG  
        Back_Pat        
        BackR_Hit       
        Jaw_ON          
        RFLeg_ON        
        RFLeg_OFF       
        LFLeg_ON        
        LFLeg_OFF       
        RRLeg_ON        
        RRLeg_OFF       
        LRLeg_ON        
        LRLeg_OFF       

例
        SET:Power:1

---------------------------------------------------------------------------

名称
        GET - 変数値の参照

形式
        GET:<var>

引数
        <var>                変数名

解説
        変数 <var> の値をコンソールに表示します。
        デバッグ用です。

例
        GET:x

---------------------------------------------------------------------------

名称
        CLR - センサー変数のクリアー

形式
        CLR:SENSORS

引数
        無し

解説
        センサー変数のうち、最終値を保持する形式の変数の値を
        ０クリアーします。

例
        CLR:SENSORS

---------------------------------------------------------------------------

名称
        VSAVE - 変数値の保存

形式
        VSAVE:<var>

引数
        <var>                変数名

解説
        変数の値をメモリースティック上のファイルに保存します。
        保存されるファイル名は

            /OPEN-R/APP/PC/AMS/<変数名>.SAV

        です。

        注意！
        ファイルシステムの制限により、保存できる変数名は
        最大８文字までです。

例
        VSAVE:x

---------------------------------------------------------------------------

名称
        VLOAD - 変数値の読込

形式
        VLOAD:<var>

引数
        <var>                変数名

解説
        変数の値をメモリースティック上のファイルから読み込みます。
        読み込まれるファイル名は

            /OPEN-R/APP/PC/AMS/<変数名>.SAV

        です。

        注意！
        ファイルシステムの制限により、読み込める変数名は
        最大８文字までです。

例
        VLOAD:x

---------------------------------------------------------------------------

名称
        VDUMP - 変数値の表示

形式
        VDUMP:<var>

引数
        <var>                変数名

解説
        変数の値を以下の書式でコンソールに出力します。

            <変数名> = <変数値>

        WirelessLAN経由で接続している時のデバッグ用機能です。

例
        VDUMP:x

---------------------------------------------------------------------------



【 R-CODE Operator 早見表 】



  演算

        算術演算を行い、結果を変数 <var> に格納します。

        <var>                変数名
        <value>                値（変数名もしくは定数）

        ADD:<var>:<value>        <var> ← <var> + <value>          加算
        SUB:<var>:<value>        <var> ← <var> - <value>　        減算
        MUL:<var>:<value>        <var> ← <var> * <value>　        乗算
        DIV:<var>:<value>        <var> ← <var> / <value>　        除算
        MOD:<var>:<value>        <var> ← <var> % <value>          剰余

        AND:<var>:<value>        <var> ← <var> & <value>          ビット毎の論理積
        IOR:<var>:<value>        <var> ← <var> | <value>          ビット毎の論理和
        XOR:<var>:<value>        <var> ← <var> ^ <value>          ビット毎の排他的論理和
        NOT:<var>:<value>        <var> ←       ~ <value>          ビット毎の論理否定

        LAND:<var>:<value>       <var> ← <var> AND <value>        論理積
        LIOR:<var>:<value>       <var> ← <var> OR  <value>        論理和
        LNOT:<var>:<value>       <var> ←       NOT <value>        論理否定

        RND:<var>:<from>:<to>    <var> ← 範囲 <from>〜<to> の一様乱数値

        乱数の種は SET:Seed:<seed> で設定できます。

        上記演算に加え、下記に揚げたスタック演算が用意されています。
        被演算数をスタックより POP し、結果をスタックに PUSH します。

        ADD                      <push> ← <pop2> + <pop1>        加算
        SUB                      <push> ← <pop2> - <pop1>　      減算
        MUL                      <push> ← <pop2> * <pop1>　      乗算
        DIV                      <push> ← <pop2> / <pop1>　      除算
        MOD                      <push> ← <pop2> % <pop1>        剰余

        AND                      <push> ← <pop2> & <pop1>        ビット毎の論理積
        IOR                      <push> ← <pop2> | <pop1>        ビット毎の論理和
        XOR                      <push> ← <pop2> ^ <pop1>        ビット毎の排他的論理和
        NOT                      <push> ←        ~ <pop1>        ビット毎の論理否定

        LAND                     <push> ← <pop2> AND <pop1>      論理積
        LIOR                     <push> ← <pop2> OR  <pop1>      論理和
        LNOT                     <push> ←        NOT <pop1>      論理否定

        EQ                       <push> ← <pop2> == <pop1>       等しい
        NE                       <push> ← <pop2> <> <pop1>       等しくない
        LT                       <push> ← <pop2> <  <pop1>       より小さい
        LE                       <push> ← <pop2> <= <pop1>       より小さいか等しい
        GT                       <push> ← <pop2> >  <pop1>       より大きい
        GE                       <push> ← <pop2> >= <pop1>       より大きいか等しい

        RND:<from>:<to>          <push> ← 範囲 <from>〜<to> の一様乱数値
        RND:<to>                 <push> ← 範囲     0 〜<to> の一様乱数値

        ※
        スタックから POP される順に <pop1> <pop2> です。
          PUSH:x
          PUSH:y
          SUB
          POP:z
        …とした場合、z の内容は x - y になります。（ y - x ではありません）

  ｽﾀｯｸ

          PUSH:<var>      変数値または定数をスタックに積みます。

          POP[:<var>]     変数にスタックから値を取り出します。
                          <var> を指定しない場合は、取り出した値は捨てられます。

        DUP               スタックトップを複製しスタックに積みます。

        JT:<label>        スタックを POP し、その内容が真であれば <label> にジャンプします。

        JF:<label>        スタックを POP し、その内容が偽であれば <label> にジャンプします。


        注意：サブルーチンまたはスコープをまたがってのスタック操作は出来ません。




【 R-CODE System 変数一覧 】


   ※ R-CODE の用意するシステム変数は機種に依存します。


   [変数]

        AiboId          機体ID (0〜255)
                        WirelessLAN 非接続時は 0
                        WirelessLAN 接続時は ip アドレスの最下位バイト
        AiboType        機種
                        7    ERS-7

        Year            年   (2000〜)
        Month           月   (1〜12)
        Day             日   (1〜31)
        Hour            時   (0〜23)
        Min             分   (0〜59)
        Sec             秒   (0〜59) ※※分解能２秒
        Dow             曜日 (Sun(0),Mon(1)...Sat(6))

        Seed            乱数の種（初期値 1 ）

        Power           電源 (0/1)
                        0 OFF
                        1 ON
                        ※Ver1.1以降、意味を持ちません。
                        SET コマンドの説明を参照してください。

        Status          ステータス ※
                        0 通常起動
                        1 復帰回復
                        転倒復帰した場合、プログラムは先頭から再実行されます。
                        その時に 1 にセットされます。

        Context         コンテクスト値

        Wait            動作完了待ちアクションの数

        Clock           クロック (32ms毎に +1 される）


        Brightness      周囲の明るさ (0〜255)
        Face            顔が検出された (0/1)              ※

        Pink_Ball       ﾋﾟﾝｸﾎﾞｰﾙ (0/1)                    ※
        Pink_Ball_H     ﾋﾟﾝｸﾎﾞｰﾙの水平角 [°]
        Pink_Ball_V     ﾋﾟﾝｸﾎﾞｰﾙの垂直角 [°]
        Pink_Ball_D     ﾋﾟﾝｸﾎﾞｰﾙ迄の距離 [mm]
                        ﾋﾟﾝｸﾎﾞｰﾙ位置の原点はイメージセンサーのある位置です。

        AIBONE          AIBONE (0/1)                      ※
        AIBONE_H        AIBONEの水平角 [°]
        AIBONE_V        AIBONEの垂直角 [°]
        AIBONE_D        AIBONE迄の距離 [mm]


        AU_Voice        音声認識検出 (0/1)                ※
        AU_Voice_ID     音声認識検出した単語 (単語ID)     別記 [音声認識  ID 一覧] を参照
        AU_AiboSound    AiboSound検出 (0/1)               ※
        AU_AiboSound_ID AiboSound検出時の音色 (音色ID)    別記 [AiboSound ID 一覧] を参照
        AU_AiboTone     AiboTone検出 (0/1)                ※
        AU_AiboTone_ID  AiboTone検出時の音色 (音階ID)     別記 [AiboTone  ID 一覧] を参照

        Temp_Hi         活動抑制温度 (0/1)（安全の為、20秒後に強制電源オフされます）

        Head_Tilt       頭1:垂直(上下)方向の角度 [°]
        Head_Tilt2      頭2:水平(上下)方向の角度 [°]
        Head_Pan        頭:水平(左右)方向の角度 [°]
        Mouth           口:開く角度 [°]
        LFLeg_1         左前脚J1(肩関節):前後方向の角度 [°]
        LFLeg_2         左前脚J1(肩関節):左右方向の角度 [°]
        LFLeg_3         左前脚J2(肘関節):前後方向の角度 [°]
        LRLeg_1         左後脚J1(股関節):前後方向の角度 [°]
        LRLeg_2         左後脚J1(股関節):左右方向の角度 [°]
        LRLeg_3         左後脚J2(膝関節):前後方向の角度 [°]
        RFLeg_1         右前脚J1(肩関節):前後方向の角度 [°]
        RFLeg_2         右前脚J1(肩関節):左右方向の角度 [°]
        RFLeg_3         右前脚J2(膝関節):前後方向の角度 [°]
        RRLeg_1         右後脚J1(股関節):前後方向の角度 [°]
        RRLeg_2         右後脚J1(股関節):左右方向の角度 [°]
        RRLeg_3         右後脚J2(膝関節):前後方向の角度 [°]
        Tail_Pan        しっぽ:水平(左右)方向の角度 [°]
        Tail_Tilt       しっぽ:垂直(上下)方向の角度 [°]

        Batt_Rest       ﾊﾞｯﾃﾘｰ残量 [％]
        Batt_Temp       ﾊﾞｯﾃﾘｰ温度 [℃]

        Distance_Cliff  崖までの距離 [mm]
        Distance        障害物距離 [mm]

        Head_ON         頭ｾﾝｻｰが押された (0/1)            ※
        Head_LONG       頭ｾﾝｻｰが3秒以上押された (0/1)     ※

        BackF_ON        背中ｾﾝｻｰ前が押された (0/1)        ※ 
        BackM_ON        背中ｾﾝｻｰ真中が押された (0/1)      ※
        BackR_ON        背中ｾﾝｻｰ後が押された (0/1)        ※
        BackFR_LONG     背中ｾﾝｻｰ前+後が3秒以上押された (0/1)        ※
        BackF_Jaw_LONG  背中ｾﾝｻｰ前+あごｾﾝｻｰが3秒以上押された (0/1)  ※
        Back_Pat        背中ｾﾝｻｰが前後に撫でられた (0/1)  ※
        BackR_Hit       背中ｾﾝｻｰ後が叩かれた (0/1)        ※

        Jaw_ON          あごｾﾝｻｰが押された (0/1)          ※

        RFLeg_ON        右前脚肉球ｾﾝｻｰが押された (0/1)    ※
        RFLeg_OFF       右前脚肉球ｾﾝｻｰが離された (0/1)    ※
        LFLeg_ON        左前脚肉球ｾﾝｻｰが押された (0/1)    ※
        LFLeg_OFF       左前脚肉球ｾﾝｻｰが離された (0/1)    ※
        RRLeg_ON        右後脚肉球ｾﾝｻｰが押された (0/1)    ※
        RRLeg_OFF       右後脚肉球ｾﾝｻｰが離された (0/1)    ※
        LRLeg_ON        左後脚肉球ｾﾝｻｰが押された (0/1)    ※
        LRLeg_OFF       左後脚肉球ｾﾝｻｰが離された (0/1)    ※

 ※ これらの値は一度セットされると 0 には戻りません。
    SET を使って 0 に戻す必要があります。


   [音声認識  ID 一覧]

        ID               単語（読み）
        1                あいぼ
        2                なまえは？
        3                あいさつ
        4                あくしゅ
        5                おはよう
        6                こんにちは
        7                おやすみ
        8                さようなら
        9                げんき？
        10               おーい
        11               ありがとう
        12               ごめんなさい
        13               がんばれ
        14               ばんざい
        15               そうそう
        16               ちがう
        17               よしよし
        18               だめだめ
        19               あそぼう
        20               うたをうたって
        21               だんす
        22               ぱふぉーまんす
        23               ぽーずして
        24               ぎゃぐ
        25               じゅうはちばん
        26               でんごん
        27               ここだけのはなし
        28               ひらけごま
        29               るんるん
        30               たちあがって
        31               ふせて
        32               すわって
        33               みぎ
        34               ひだり
        35               ぜんしん
        36               こうたい
        37               すたーと
        38               すとっぷ
        39               はやく
        40               ゆっくり
        41               ぴんくぼーる
        42               みぎきっく
        43               みぎたっち
        44               ひだりきっく
        45               ひだりたっち
        46               よーいどん
        47               かった
        48               まけた
        49               いちばん
        50               にばん
        51               さんばん
        52               よんばん
        53               ごばん



   [AiboSound ID 一覧]

        ID                意味                                MIDIファイル名 ※
        1                AIBO間コミュニケーション開始         AS01_Start_AC.mid
        2                メディアリンクモードに移行(1)        AS02_Start_ML1.mid
        3                メディアリンクモードに移行(2)        AS03_Start_ML2.mid
        4                メディアリンクモードに移行(3)        AS04_Start_ML3.mid
        5                メディアリンクモード終了             AS05_End_ML.mid
        6                手を挙げて挨拶                       AS06_Hello.mid
        7                手でバイバイ                         AS07_Bye.mid
        8                うつぶせで眠るふり                   AS08_Sleep.mid
        9                短めのあいずち                       AS09_Nod_Short.mid
        10               長めのあいずち                       AS10_Nod_Long.mid
        11               わくわく、どきどきの反応             AS11_Expect.mid
        12               肯定の反応                           AS12_Yes.mid
        13               否定の反応                           AS13_No.mid
        14               疑問の反応                           AS14_Question.mid
        15               嬉しいポーズ                         AS15_Joy.mid
        16               非常に嬉しいポーズ                   AS16_Happy.mid
        17               嫌がるポーズ                         AS17_Disgust.mid
        18               驚きのポーズ                         AS18_Surprise.mid
        19               悲しみのポーズ                       AS19_Sad.mid
        20               一安心のポーズ                       AS20_Relief.mid
        21               おねだりやあこがれの反応             AS21_Appeal.mid
        22               様々な特徴的なアクション             AS22_Action.mid
        23               ダンス                               AS23_Dance.mid
        24               歌(1)                                AS24_Song1.mid
        25               歌(2)                                AS25_Song2.mid
        26               大好きなダンス                       AS26_Fav_Dance.mid
        27               怖いポーズ                           AS27_Fear.mid
        28               お辞儀                               AS28_Greet.mid
        29               記念撮影ポーズ                       AS29_Pose.mid
        30               バンザイ                             AS30_Cheer.mid
        31               注意を促すポーズ                     AS31_Look.mid
        32               照れるポーズ                         AS32_Abash.mid
        33               愛嬌を振りまく                       AS33_Charm.mid
        34               性格タイプを教える                   AS34_Type_Check.mid
        35               着信お知らせアクション               AS35_Call.mid

        ※ MIDIファイルは /Sample/AiboSound フォルダで提供されます。



   [AiboTone  ID 一覧]

        ID               音符（３音）                MIDIファイル名 ※
        1                C5  D5  E5                  AT01.mid
        2                C5  E5  D5                  AT02.mid
        3                E5  C5  D5                  AT03.mid
        4                E5  D5  C5                  AT04.mid
        5                G5  C5  D5                  AT05.mid
        6                G5  D5  C5                  AT06.mid
        7                C5  G5  D5                  AT07.mid
        8                C5  D5  G5                  AT08.mid
        9                D5  E5  C5                  AT09.mid
        10               D5  C5  E5                  AT10.mid
        11               C5  Eb5 G5                  AT11.mid
        12               C5  G5  Eb5                 AT12.mid
        13               G5  Eb5 C5                  AT13.mid
        14               C5  E5  F5                  AT14.mid
        15               C5  F5  E5                  AT15.mid
        16               F5  C5  E5                  AT16.mid
        17               F5  E5  C5                  AT17.mid
        18               C5  F5  G5                  AT18.mid
        19               C5  G5  F5                  AT19.mid
        20               G5  C5  F5                  AT20.mid
        21               G5  F5  C5                  AT21.mid
        22               F5  C5  G5                  AT22.mid
        23               C5  D5  F5                  AT23.mid
        24               Eb5 C5  F5                  AT24.mid
        25               C5  F5  D5                  AT25.mid
        26               D5  F5  C5                  AT26.mid
        27               D5  C5  F5                  AT27.mid
        28               F5  D5  C5                  AT28.mid
        29               F5  C5  D5                  AT29.mid
        30               Eb5 F5  C5                  AT30.mid
        31               C5  Eb5 F5                  AT31.mid
        32               C5  F5  Eb5                 AT32.mid
        33               F5  C5  Eb5                 AT33.mid
        34               F5  Eb5 C5                  AT34.mid
        35               C6  D6  E6                  AT35.mid
        36               C6  E6  D6                  AT36.mid
        37               E6  C6  D6                  AT37.mid
        38               E6  D6  E6                  AT38.mid
        39               G6  C6  D6                  AT39.mid
        40               G6  D6  C6                  AT40.mid
        41               C6  G6  D6                  AT41.mid
        42               C6  D6  G6                  AT42.mid
        43               D6  E6  C6                  AT43.mid
        44               D6  C6  E6                  AT44.mid
        45               C6  Eb6 G6                  AT45.mid
        46               C6  G6  Eb6                 AT46.mid
        47               G6  Eb6 C6                  AT47.mid
        48               C6  E6  F6                  AT48.mid
        49               C6  F6  E6                  AT49.mid
        50               F6  C6  E6                  AT50.mid
        51               F6  E6  C6                  AT51.mid
        52               C6  F6  G6                  AT52.mid
        53               C6  G6  F6                  AT53.mid
        54               G6  C6  F6                  AT54.mid
        55               G6  F6  C6                  AT55.mid
        56               F6  C6  G6                  AT56.mid
        57               C6  D6  F6                  AT57.mid
        58               Eb6 C6  F6                  AT58.mid
        59               C6  F6  D6                  AT59.mid
        60               D6  F6  C6                  AT60.mid
        61               D6  C6  F6                  AT61.mid
        62               F6  D6  C6                  AT62.mid
        63               F6  C6  D6                  AT63.mid
        64               Eb6 F6  C6                  AT64.mid
        65               C6  Eb6 F6                  AT65.mid
        66               C6  F6  Eb6                 AT66.mid
        67               F6  C6  Eb6                 AT67.mid
        68               F6  Eb6 C6                  AT68.mid

        ※ MIDIファイルは /Sample/AiboTone フォルダで提供されます。


【 R-CODEの実行方法 】

1) ユーザー作成プログラム
   R-CODE のプログラムを作成し、AIBOプログラミングメモリースティックの
   /OPEN-R/APP/PC/AMS/R-CODE.R に置くことで、AIBOにプログラムを実行させることができます。

2) サンプルプログラム
   Redist7/sample/Maze.R のファイル名を変更して、AIBOプログラミングメモリースティックの
   /OPEN-R/APP/PC/AMS/R-CODE.R にコピーしてください。


【 WirelessLAN 通信 】

********************************************************************

R-CODEで記述したプログラムを無線LANで直接AIBOに送ることができます。
WirelessLAN 接続時にデフォルトでID,パスワードによる認証を行います。
無認証での接続を行う場合は
/OPEN-R/APP/DATA/P/OWNER.TXT を削除し
/OPEN-R/APP/PC/AMS/NOAUTH.CFG
というファイルを作ってください。
NOAUTH.CFG の内容は何でも構いません。(size=0を推奨）

認証するWindows アプリケーションを作成したい場合は、
NsmAuth ライブラリを利用してください。

なお、接続を無認証にした場合、適切なネットワークセキュリティが
設定されていない場合、ネットワークに接続された不特定のマシン
からAIBOにアクセスできるようになるのでご注意ください。
********************************************************************


R-CODE とは WirelessLAN を介して通信可能です。
通信のための仕様は以下のとおりです。

   通信ポート： 21002 tcp
   プロトコル： 無手順
   文字コード： 8bit ASCII


以下に telnet による接続例を示します。
------------------------------------------------

C:\>telnet 10.0.1.1 21002                       ←DOSプロンプト

============================================
R-CODE ver2.0 (2004/05/01)                      ←接続に成功すると
============================================      このようなヘッダーが
string_buf   1 *  256K =  256K (used  0.1%)       表示されます
dictionary   8 *   32K =  256K (used  0.7%)
stack        4 *   32K =  128K (used  0.3%)
statement   24 *   32K =  768K (used  0.0%)
on_call     12 *   64  =  768  (used  0.0%)
============================================
free mem.   6998912
============================================
<READY>                                         ←ここから入力可能です
PLAY:ACTION:STAND                               ←立ち上がれというコマンドを直接実行
EDIT                                            ←EDIT〜END でプログラムを送れます
  FOR:i:1:10                                    ←座る／立つを10回繰り返すプログラム
    PLAY:ACTION:SIT
    WAIT
    PLAY:ACTION:STAND
    WAIT
  NEXT
END
RUN                                             ←プログラムの実行を開始します
…
@DISS                                           ←@DISSで接続を切ります

C:\>

------------------------------------------------


【 LED, MIDI 対応表 】

*.LEDコンテンツを作成する時に必要となる情報です

「階調128」はVelocity値に応じた連続階調点灯、「階調2」はVelocity=0で消灯／Velocity<>0で点灯。
A面(FaceA01〜FaceA14)とB面(FaceB01〜FaceB14)のLEDは同時刻に使用できません。(例 A1 とB2)
FaceAXX/BXXのLED位置は以下のOPEN-R SDKマニュアルの機種情報 ERS-7を参照してください。

Note名     Note番号 LED名         階調	LED位置
C-1〜B0    0〜23    （unused）
C1         24       FaceB01       128	B1
Db1        25       FaceB02       128	B2
D1         26       FaceB03       128	B3
Eb1        27       FaceB04       128	B4
E1         28       FaceB05       128	B5
F1         29       FaceB06       128	B6
F#1        30       FaceB07       128	B7
G1         31       FaceB08       128	B8
Ab1        32       FaceB09       128	B9
A1         33       FaceB10       128	B10
Bb1        34       FaceB11       128	B11
B1         35       FaceB12       128	B12
C2         36       FaceB13       128	B13
Db2        37       FaceB14       128	B14
D2〜B2     38〜47   （unused）
C3         48       FaceA01       128	A1
Db3        49       FaceA02       128	A2
D3         50       FaceA03       128	A3
Eb3        51       FaceA04       128	A4
E3         52       FaceA05       128	A5
F3         53       FaceA06       128	A1
F#3        54       FaceA07       128	A2
G3         55       FaceA08       128	A3
Ab3        56       FaceA09       128	A4
A3         57       FaceA10       128	A5
Bb3        58       FaceA11       128	A11
B3         59       FaceA12       128	A12
C4         60       FaceA13       128	A13
Db4        61       FaceA14       128	A14
D4〜B4     62〜71  （unused）
C5         72       Mode(R)       2
Db5        73       Mode(G)       2
D5         74       Mode(B)       2
Eb5        75       Wireless      2
E5〜A5     76〜81  （unused）
Bb5        82       HeadTouchAmber              2
B5         83       HeadTouchWhite              2
C6         84       BackTouchFrontBlue          128
Db6        85       BackTouchFrontWhite         128
D6         86       BackTouchMiddleYellow       128
Eb6        87       BackTouchMiddleWhite        128
E6         88       BackTouchRearRed            128
F6         89       BackTouchRearWhite          128
F#6〜G9    90〜127 （unused）

【 Action 一覧表 】

PLAY:ACTION:<action>[:<arg1>:<arg2>:<arg3>] で利用できるAction 一覧です。

---------------------------------------------------------------------------
Action Name                    
---------------------------------------------------------------------------
SIT                             座る
STAND                           立つ
LIE                             伏せる(1)
WALK                            歩く
STOP_WALK                       歩行を停止する
TURN                            旋回する
KICK                            キックする
TOUCH                           触る
MOVE_HEAD                       指定方向を見る
TRACK_HEAD                      追跡する
SEARCH                          探す
SEARCH.HEAD.NORMAL              今向いている方向から探す
SEARCH.HEAD.SLOW                今向いている方向からゆっくり探す
SEARCH.HEAD.NORMALCENT          前方を向いて探す
SEARCH.HEAD.SLOWCENT            前方を向いてゆっくり探す
SEARCH.HEAD.LOWCENT             下を向いて探す
PALONE.AUTO.EAR                 両耳を動かす
PALONE.AUTO.EARSTOP             耳の動きを止める
PALONE.AUTO.TAILV               しっぽを縦にふる
PALONE.AUTO.TAILH               しっぽを横にふる
PALONE.AUTO.TAILROT             しっぽを回す
PALONE.AUTO.TAILD               しっぽを下げる
PALONE.AUTO.TAILSTOP            しっぽの動きを止める
MOVE.HEAD.FAST                  指定方向を速く見る
MOVE.HEAD.NORMAL                指定方向を見る
MOVE.HEAD.SLOW                  指定方向をゆっくり見る
MOVE.TURN.NORMAL                旋回する
MOVE.TURN.SLOW                  ゆっくり旋回する
MOVE.MOVE.NORMAL                歩く
MOVE.MOVE.SLOW                  ゆっくり歩く
CHGPOS.WALK.NORMAL              歩行姿勢にする
CONTACT.RIGHT.TOUCH             座って右手で触る
CONTACT.RIGHT.TOUCH2            伏せて右手で触る
CONTACT.FRONT.HEAD              ヘディングする
CHGPOS.STATR.NORMAL             伏せる(2)
SMESS.NOTICE.NOTICE1            デバッグ用通知1
SMESS.NOTICE.NOTICE2            デバッグ用通知2
SMESS.ERROR.ERROR1              デバッグ用エラー通知1
SMESS.ERROR.ERROR2              デバッグ用エラー通知2
SMESS.MODE.CLEAR                デバッグ用表示クリア
CLIFF_DETECT_ON                 崖検出ON（デフォルト）
CLIFF_DETECT_OFF                崖検出OFF

--------------------------------------------------------------------------------------
* "Windows" is a registered trademark of Microsoft Corporation in the US and other countries. 
