クリエイター手抜きプロジェクト[463]IoT編 メモリを直接操作する/古籏一浩

投稿:  著者:  読了時間:6分(本文:約2,700文字)



今回は、IchigoJamでメモリを直接操作してみます。前回はユーザーからの入力を変数に入れたり、変数を使って計算を行いました。今回説明するメモリと変数は非常に関連性が高いものです。

今のコンピューターにはメモリが搭載されています。このメモリ内にプログラムや変数の値が入ります。IchigoJamがコンピューターの学習用として良い点のひとつとして、変数もメモリもプログラムも同じメモリ上にあるということが分かりやすいというのがあります。

表示されている画面もメモリであり、メモリの内容を文字として表示しています。メモリを書き換えることで、変数も画面もプログラムも変更することができるのです。これはIchigoJamに限らず、他のコンピューターでも同様です。

PhotoshopやPainterで何か描画する、ということはメモリに値を書き込んでいるということです。そして、そのメモリの内容がモニタ画面に表示されているだけなのです。

ここで前回のプログラムをもう一度見てみましょう。




10 INPUT A
20 A=A+1
30 PRINT A

このプログラムを実行すると、ユーザーから入力された数値に1加算した値が画面に表示されます。プログラムを実行するにはRUNと入力し、リターンキーを押します。13と入力すれば14が表示されます。

RUN
?13
14
OK

ここで使用した変数Aの値はメモリ内に入っています。本当にメモリに入っているかどうか見てみましょう。メモリの内容を読み出すにはPEEK命令を使います。PEEK命令はPEEK(メモリの場所)のようにして使います。

IchigoJamでは変数Aの内容は、メモリの2252と2253(16進数だと#8CCと#8CD)に入っています。先ほど実行したプログラムで、変数Aの値は14になっていました。

今度はメモリ内部を読み出して、本当に14になっているか見てみましょう。以下のプログラムを実行してみてください。

?PEEK(2252)
14
OK

すると、ちゃんと14と表示されます。でも、本当に変数Aの値かどうかは分かりません。そこで、以下のように変数Aの値を234に変更してみましょう。

A=234

=記号は右側の値や式を左側の変数に入れますので、この場合変数Aは234になります。PRINT命令(省略形は?)で確認してみましょう。

?A
234
OK

それでは再びメモリから読み出してみます。

?PEEK(2252)
234
OK

期待通り234と表示されました。それでは、もう少し大きな値を入れてみましょう。

A=1500
OK
?A
1500
OK
?PEEK(2252)
220
OK

今度は、なぜか1500ではなく220が表示されてしまいました。なぜなのでしょうか。これはPEEK命令が1バイト(つまり8ビット)単位でしか読み出せないからです。

1バイトしか読み出せないということは、0〜255までの範囲の値にしかなりません。では、残りの値はどこに行ってしまったのでしょうか。それは1つ先のメモリに入っています。1つ先のメモリの場所は2253なので、読み出してみましょう。

?PEEK(2253)
5
OK

なぜか5と表示されてしまいました。これは、どういうことなのでしょう。現在のコンピューターの多くは、1バイト単位で数値を保存しています。

30年近く前の古いコンピューターは、1バイトではなく12ビットで1ワードとか、より多くのビットで保存していたこともあります(1970年代だとバイト単位よりワード単位の場合があり、ワードのビット数はICに依存。ちなみに現在のコンピューターでのワードは1ワード=16ビット=2バイト)。

IchigoJamは2バイト=16ビットの数値を扱っているので、最初のメモリに1バイト、次のメモリに1バイトが入っています。この2バイトに入っている数値を正しく計算して変数Aの値を求めるには、以下のようになります。

?PEEK(2252)+PEEK(2253)*256
1500
OK

単純に2バイト目に256を掛ければよいのです。どうして256なのかというと、前回説明したように1バイト=8ビット=2の8乗=256だからです。

1バイト=8ビット=11111111(2進数)=2×2×2×2×2×2×2×2=256

多くのプログラム言語には変数がありますが、それがなくても直接メモリを読み書きすれば用は足ります。

しかし、さすがにそれは面倒なので変数が用意されていると思ってもよいでしょう。C言語はよりコンピューターのCPUに近い言語なので、このようなメモリ操作も可能です。

しかし、メモリの変なところをいじってしまうとコンピューターの動作がおかしくなってしまうことがあります。現在のコンピューターでは、不用意にメモリを操作できないようになっていますので、昔と比べるとコンピューターは安定して動作するようにはなっています。

ということで、また次回。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

自分の過去の原稿を放り込むと、自動的にそのテイストであらゆる原稿を書いてくれる人工知能を開発すれば楽ができそう。デジクリも書き手がいなければ一本は人工知能に書いてもらうというのはどうでしょうかねぇ。

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・訂正一覧はこちら
http://www.openspc2.org/reibun/IchigoJam/book/index.html

・Premiere Pro & Media Encoder自動化サンプル集
http://www.amazon.co.jp/dp/4802090471/

・JavaScriptによるデータビジュアライゼーション入門
http://www.amazon.co.jp/dp/4873117461/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・Adobe JavaScriptリファレンス
http://www.amazon.co.jp/dp/B00FZEK6J6/

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/