その1)【PEEK(ピーク)】コントローラー内部のSRAMのデーターを読み込む。戻り値はINTEGERで受け取れるみたい。【POKE(ポーク)】コントローラー内部のSRAMにデーターを書込むする。考:マニュアルには、書込む値はBYTEでINTEGERは使えない。今回は、PEEKとPOKEがテーマなんですが、その話に行き着く前に、これまでのGOSUB...RETURN関連の話の流れとして、スタック、スタックポインタがどんな挙動を示すのか。した上で、PEEKやPOKEを利用してみたいと思います。難し目の話が出てきますが、諦めないで頑張って最後までみて下さいね。それでは早速、このソースのオブジェクトコードを見てみましょうroboBASICを使われている方は、サンプル1を保存し、RZ1Basicでそのファイルを開いて下さい。開いたら、右上に「ソースコード」と表示されているポップアップメニューを、「オブジェクトコード」に変更して下さい。すると以下のようなものが表示されると思います※Hexエディタでオブジェクトコードを見るとこの前に余分?な部分も付いてますので、アドレスの値がズレルので読み難くなるかもしれません。:そのコードをASCIIで表したもの1行目の最初の16バイトはプログラムの情報なので、その次の行から、オブジェクトコードとソースコードと対応させると以下のようになります。0x00となっています。0xC5というのは、GOSUBを意味しています。0x00は、ジャンプ先きのアドレスを示しています。このアドレスの値はリトルエンディアンで記述されているので、ひっくり返して、0x0025がジャンプ先きになります。次に、※2の「RETURN」のコードを見てみると、RETURNは、RETURNを意味する0xC6のみしか書かれていないことがわかります。「ROBOBASIC講座(GOSUB...RETURN)」でも書きましたが、RETURNの行き先は、実行時にスタックに記録されます。RETURNで戻ってくる場所(GOSUBの次の行)の、0x001Cを記録する。スタックポインタの値(0x0D02)を、2バイト足した値にする(0x0D04)。3、0x0025へジャンプする。スタックポインタの値(0x0D04)を、2バイト引いた値にする(0x0D02)。スタックポインタの値が示すアドレス(0x0D02)の値(0x001C)へジャンプする。サンプル1を実行後、スタックポインタの値と、スタックの値を見てみることにしましょう。サンプル1は変な所はないので、正常に終了しているはずです。スタックポインタの値は0x0D02(初期値)であり、スタック(0x0D02)は、0x001Cであればいいはずですよね。調べてみましょうスタックポインタの値roboBASICで転送しててもOKです。転送すれば実行されているはずなので、RZ1Basicを起動して、コントローラーのコマンドテストを選択します。スタックポインタのアドレスは0x04D5です。10進数だと1237です。READ」で、「SRAM」を選択。Addressに1237と入力します。Lengthは2バイトです。※SRAMのアドレス1237から2バイト読込むという意味になります。Startボタンをクリックしてみて下さい。Resultの所に、020Dと表示されたかと思います。逆さまに並べないといけないので(図A、B参照)、0x0D02がスタックポインタが示す値ということになります。スタックの値0x0D02は、10進数にすると、3330です。Addressに3330と入力します。Startボタンをクリックしてみて下さい。この数値も逆さにして、0x001Cがスタックされた値ということになります。次に書こうと思っていたことを宿題にすることしました以下のサンプル2と3のソースコードは、サンプル1を少し変なコードにしたものです。サンプル2は、RETURNのところをENDにしました。testにし、RETURNの後にENDを付け加えました。:サンプル2はGOSUBで呼ばれたまま停止してしまいます。:サンプル3は、GOTOで呼んだにも関わらず、サブルーチンにはRETURNがあります。Q-boの本体ロボゼロロボゼロのバックナンバーを一覧にしたページへロボゼロのコントロールボード(HSWB-4F)@niftyが提供する無料ブログはココログ!RSSを表示する。