« RZ1Basic v0.2.0 公開 | トップページ | 通信ができないエラーの場合 »

ROBOBASIC講座(GOTO AUTO、FILL)

【GOTO AUTO(ゴートゥーオート)】
 第一変数を0(ゼロ)にして、10024番地にジャンプする
 書式:GOTO AUTO

【FILL(フィル)】
 メモリーを、ある数値で埋める
 書式:FILL 埋める数値、埋める個数
  例:FILL 255,10000


リモコン用のテンプレートプログラムのMAINループについて、少し考えてみたいと思います。私もよくわからない部分がいくつかありますので、いろいろご教授頂ければと思います。また、ロボザックの冊子の方にもっとちゃんとした説明があったら申し訳ありません。

リモコン用のテンプレートプログラムには

  • IR_Remocon_Template01.bas
    RZ1モーションCD-ROM7 ※不具合あり?
  • 基本モーション1.bas 上記修正版?
    http://declu735.rsjp.net/rbz/news.htm
  • Overall Tempate Program_novoltage.bas
    http://www.hitecrcd.co.jp/support/down/software/index.htm

などがありますが、MAINループ部分は、ほぼ同じようなプログラミングになっていますね。

これらのプログラムの一番最初に今回タイトルにした、GOTO AUTOFILLが使われています。

'== auto_main ===============
GOTO AUTO
FILL 255,10000

GOTO hogehoge」は、マーカーhogehogeへジャンプする意味ですね。GOTO AUTOとありますが、プログラムの中のどこを探しても「AUTO:」と書かれたマーカーはありませんよね。このGOTO AUTOというのは予約語であって、10024番地にジャンプするという意味になっています。次に出てくるFILLは、255,10000となっていますので、この命令の場所から10000個(バイト)、255で埋められます。このことに関しては、「ROBONOVA情報局Wiki」の「Q&Aコーナー」に詳しく書かれてあります。

ロボットへ転送されるオブジェクトファイルは、

  • プログラム情報(16バイト)
    • 名 前 8バイト
    • 年月日 3バイト
    • 時分秒 3バイト
    • サイズ 2バイト
  • GOTO AUTO(8バイト)
    • 0xD015401000 5バイト
      第一変数に0にする。テンプレートファイルでは、RRが一番最初に定義されていますので、RR=0ということになります。
    • 0xC42827   3バイト
      GOTO 10024を意味している

ここまでのバイト数を合計すると、16+8=24バイトです。
次に、

  • FILL 255,10000
    • 0xFFFFFF...... と10000個埋められる
      24番地から10023番地まで0xFFで埋められます。

GOTO AUTOは、常に10024なので、GOTO AUTOを一番最初に書く場合は10000でいいんですが、GOTO AUTOの前に何かプログラミングを書く場合、FILLで埋める個数には注意が必要になってきます。

《テストコード》

'================================================
' templet program
'================================================

DIM RR As BYTE
DIM
A As BYTE

A = REMOCON(1)
IF A=16 then
    END
ENDIF

'== auto_main ===================================

GOTO AUTO

GOTO AUTOの前に何かプログラミングを書いた場合、FILLの埋める個数はいくつにすればいいだろうかそれを簡単に知る方法を紹介しておきます

 

Parallels_desktopscreensnapz029_2

GOTO AUTOだけ書いて、オブジェクトコード作成ボタンをクリックします。図のように[合計27バイト]と出ます。なぜ24バイトでなく27バイトなのかというと、プログラムの最後に3バイトプログラムの最後を示すコードが入るからです。

Parallels_desktopscreensnapz030_2

ということで、上で書いた《テストコード1》の場合、同じようにやってみます。45バイトとなっているので、45-3=42バイトよって、10024-42=9982

 FILL 255,9982

とすればいい訳です。

上で書いた《テストコード1》の場合、変数Aを使っているので、DIM A AS BYTEを、元々の位置からずらしましたが、ROBOBASICの場合は、どこで変数を定義しようと関係ありませんし、ここで計算しているバイト数には影響しませんので、気にすることはありません。注意事項として、変数をどこで定義しても構わないのですが、第一変数だけは兎に角一番最初に定義しておくようにしましょう!(理由はここ

さて、もうひとつ、なぜ10024番地まで飛ばした所にテンプレートを書込んでいるんでしょうかどこかにその答えが書いてあるのかもしれませんが、10024バイト以下のプログラミングならば、他のプログラムを送ってもテンプレート部分は消えることはありません。確定したプログラムは10024後に書込んでおいて、コーディングしている時、テストしている時の為に、10024までの領域を使って行うということなのでしょうかね??

簡単にテストしてみました。
テンプレートが送信済みの状態で、

新規に

MUSIC "C"

とだけ書いたプログラムを転送
つぎに、新規に、

GOTO AUTO

とだけ書いたプログラムを転送してみました。

結果、ちゃんとテンプレートは消えることなく実行できるようですよ

|

« RZ1Basic v0.2.0 公開 | トップページ | 通信ができないエラーの場合 »

ROBOBASIC講座」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: ROBOBASIC講座(GOTO AUTO、FILL):

« RZ1Basic v0.2.0 公開 | トップページ | 通信ができないエラーの場合 »