ROBOBASIC講座(ACTION)
【ACTION (アクション)】
第一変数をn+50にして、0x2728をサブルーチンコールする
注)この命令語は MRC3024とロボノバロボット専用の命令語
構文: ACTION [番号]
例: ACTION 10
なんか使いそうにないコマンドばかり説明してて申し訳ありません。
先日「ROBOBASIC講座(第一変数の利用法)」の説明をした時に、利用法が分からないと書いていたことに関して、avalonさんに、「action命令のパラメータ」で使うとコメント頂きまして、そう言われても、全然意味が分からなかったので、ACTIONについて勉強してみました。
マニュアルに「ナンバーに従がって決められたテンプレート基本動作を行う」と書いてあったんですが、これを見ても全然理解できませんでした。実は、RZ1Basicが、まだこのコマンドサポートしてないことに気が付き(関数だけ作ってあって、中身は空っぽでした)、対応させようとROBONOVA情報局Wikiを見てたら、「n+50の値を第一変数に代入し、メインルーチンをサブルーチンコールしている」とありました。これでやっと理解できました。でも、ここで書いているメインルーチンとはどこを示すのかがわからなかったので、オブジェクトがどう生成されているかを調べました。すると、
0xD0 15 40 12 ?? 00 C5 28 27
となっていました。0xD0 1540 12?? 00は、第一変数をn+50にするという意味です。で、その後につづく、0xC5 2827は、0xC5がGOSUBを意味し、28 27はアドレスなので、GOSUB 0x2728ということになります。従って、上に書いたように「第一変数をn+50にして、0x2728をサブルーチンコールする」というのがACTION nがやっていることになります。
ところで、0x2728というアドレスですが、先日GOTO AUTOについて書きましたが、このアドレスは、そこでも出てきましたね。くどいですが、いちおう、それぞれのコマンドを並べて書いておきます。
- GOTO AUTO は第一変数を0にして、0x2728へGOTOされる
- ACTION n は第一変数をn+50にして、0x2728へGOSUBされる
ということで、テンプレートの利用法が分からないと書いた部分の復習をしておきます。
テンプレートは、
DIM RR AS BYTE
GOTO AUTO
FILL .....
IF RR>50 AND RR<83 THEN GOTO action_proc
となってます。これを見て、どうやったら、RRが50より大きく83より小さくさせることができるのかが理解できませんでした。
IF RR>50 AND RR<83 THEN GOTO action_proc
のコードは、FILLのコマンドで、ちょうど0x2728行から書かれるようになってします。
そして、この行を呼ぶ命令がACTIONという訳なんですね。
以上のことをふまえて、「ROBOBASIC講座(テンプレートMAINループ)」で、変なところがないか考えてみて下さい。。
なお、Actionコマンドは、RZ1Basic v0.2.4以降で対応しています。。
| 固定リンク
「ROBOBASIC講座」カテゴリの記事
- IF文の中のIF文(2008.10.31)
- 制限の勧め(2008.10.09)
- ROBOBASIC講座(GYROSET, GYRODIR, GYROSENSE)(2008.09.21)
- ROBOBASIC講座(MOVEPOS、POS)(2008.08.21)
- ROBOBASIC講座(TIPS: FILL文)(2008.07.15)
この記事へのコメントは終了しました。
コメント
今晩は!
ROBONOBA-1用のワイヤレスコントローラーを、
装着しました。
バランスが崩れ、
先ずは零点設定からやり直しです。
テンプレートプログラムも違う様です。
またまた、苦手なプログラムの勉強です。
一先ずリモコンのプログラムは、
後回しにします。
理解できない事が、
頻繁に起きる事でしょう。
その時は又の助言をお願いします。
投稿: shirasu | 2008年2月24日 (日) 19時45分
どんどん機能アップされていますね。
私はまだまだなので、分るかどうか自信がありませんが、また何かあればよろしくお願いします。
投稿: micono | 2008年2月25日 (月) 02時48分